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-2016 Broadcom Corporation. 8 * Copyright (C) 2016-2017 Broadcom Limited. 9 * Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom" 10 * refers to Broadcom Inc. and/or its subsidiaries. 11 * 12 * Firmware is: 13 * Derived from proprietary unpublished source code, 14 * Copyright (C) 2000-2016 Broadcom Corporation. 15 * Copyright (C) 2016-2017 Broadcom Ltd. 16 * Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom" 17 * refers to Broadcom Inc. and/or its subsidiaries. 18 * 19 * Permission is hereby granted for the distribution of this firmware 20 * data in hexadecimal or equivalent format, provided this copyright 21 * notice is accompanying it. 22 */ 23 24 25#include <linux/module.h> 26#include <linux/moduleparam.h> 27#include <linux/stringify.h> 28#include <linux/kernel.h> 29#include <linux/sched/signal.h> 30#include <linux/types.h> 31#include <linux/compiler.h> 32#include <linux/slab.h> 33#include <linux/delay.h> 34#include <linux/in.h> 35#include <linux/interrupt.h> 36#include <linux/ioport.h> 37#include <linux/pci.h> 38#include <linux/netdevice.h> 39#include <linux/etherdevice.h> 40#include <linux/skbuff.h> 41#include <linux/ethtool.h> 42#include <linux/mdio.h> 43#include <linux/mii.h> 44#include <linux/phy.h> 45#include <linux/brcmphy.h> 46#include <linux/if.h> 47#include <linux/if_vlan.h> 48#include <linux/ip.h> 49#include <linux/tcp.h> 50#include <linux/workqueue.h> 51#include <linux/prefetch.h> 52#include <linux/dma-mapping.h> 53#include <linux/firmware.h> 54#include <linux/ssb/ssb_driver_gige.h> 55#include <linux/hwmon.h> 56#include <linux/hwmon-sysfs.h> 57#include <linux/crc32poly.h> 58 59#include <net/checksum.h> 60#include <net/gso.h> 61#include <net/ip.h> 62 63#include <linux/io.h> 64#include <asm/byteorder.h> 65#include <linux/uaccess.h> 66 67#include <uapi/linux/net_tstamp.h> 68#include <linux/ptp_clock_kernel.h> 69 70#define BAR_0 0 71#define BAR_2 2 72 73#include "tg3.h" 74 75/* Functions & macros to verify TG3_FLAGS types */ 76 77static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 78{ 79 return test_bit(flag, bits); 80} 81 82static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 83{ 84 set_bit(flag, bits); 85} 86 87static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 88{ 89 clear_bit(flag, bits); 90} 91 92#define tg3_flag(tp, flag) \ 93 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 94#define tg3_flag_set(tp, flag) \ 95 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 96#define tg3_flag_clear(tp, flag) \ 97 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 98 99#define DRV_MODULE_NAME "tg3" 100/* DO NOT UPDATE TG3_*_NUM defines */ 101#define TG3_MAJ_NUM 3 102#define TG3_MIN_NUM 137 103 104#define RESET_KIND_SHUTDOWN 0 105#define RESET_KIND_INIT 1 106#define RESET_KIND_SUSPEND 2 107 108#define TG3_DEF_RX_MODE 0 109#define TG3_DEF_TX_MODE 0 110#define TG3_DEF_MSG_ENABLE \ 111 (NETIF_MSG_DRV | \ 112 NETIF_MSG_PROBE | \ 113 NETIF_MSG_LINK | \ 114 NETIF_MSG_TIMER | \ 115 NETIF_MSG_IFDOWN | \ 116 NETIF_MSG_IFUP | \ 117 NETIF_MSG_RX_ERR | \ 118 NETIF_MSG_TX_ERR) 119 120#define TG3_GRC_LCLCTL_PWRSW_DELAY 100 121 122/* length of time before we decide the hardware is borked, 123 * and dev->tx_timeout() should be called to fix the problem 124 */ 125 126#define TG3_TX_TIMEOUT (5 * HZ) 127 128/* hardware minimum and maximum for a single frame's data payload */ 129#define TG3_MIN_MTU ETH_ZLEN 130#define TG3_MAX_MTU(tp) \ 131 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 132 133/* These numbers seem to be hard coded in the NIC firmware somehow. 134 * You can't change the ring sizes, but you can change where you place 135 * them in the NIC onboard memory. 136 */ 137#define TG3_RX_STD_RING_SIZE(tp) \ 138 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 139 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 140#define TG3_DEF_RX_RING_PENDING 200 141#define TG3_RX_JMB_RING_SIZE(tp) \ 142 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 143 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 144#define TG3_DEF_RX_JUMBO_RING_PENDING 100 145 146/* Do not place this n-ring entries value into the tp struct itself, 147 * we really want to expose these constants to GCC so that modulo et 148 * al. operations are done with shifts and masks instead of with 149 * hw multiply/modulo instructions. Another solution would be to 150 * replace things like '% foo' with '& (foo - 1)'. 151 */ 152 153#define TG3_TX_RING_SIZE 512 154#define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 155 156#define TG3_RX_STD_RING_BYTES(tp) \ 157 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 158#define TG3_RX_JMB_RING_BYTES(tp) \ 159 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 160#define TG3_RX_RCB_RING_BYTES(tp) \ 161 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 162#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 163 TG3_TX_RING_SIZE) 164#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 165 166#define TG3_DMA_BYTE_ENAB 64 167 168#define TG3_RX_STD_DMA_SZ 1536 169#define TG3_RX_JMB_DMA_SZ 9046 170 171#define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 172 173#define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 174#define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 175 176#define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 177 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 178 179#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 180 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 181 182/* Due to a hardware bug, the 5701 can only DMA to memory addresses 183 * that are at least dword aligned when used in PCIX mode. The driver 184 * works around this bug by double copying the packet. This workaround 185 * is built into the normal double copy length check for efficiency. 186 * 187 * However, the double copy is only necessary on those architectures 188 * where unaligned memory accesses are inefficient. For those architectures 189 * where unaligned memory accesses incur little penalty, we can reintegrate 190 * the 5701 in the normal rx path. Doing so saves a device structure 191 * dereference by hardcoding the double copy threshold in place. 192 */ 193#define TG3_RX_COPY_THRESHOLD 256 194#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 195 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 196#else 197 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 198#endif 199 200#if (NET_IP_ALIGN != 0) 201#define TG3_RX_OFFSET(tp) ((tp)->rx_offset) 202#else 203#define TG3_RX_OFFSET(tp) (NET_SKB_PAD) 204#endif 205 206/* minimum number of free TX descriptors required to wake up TX process */ 207#define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 208#define TG3_TX_BD_DMA_MAX_2K 2048 209#define TG3_TX_BD_DMA_MAX_4K 4096 210 211#define TG3_RAW_IP_ALIGN 2 212 213#define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3) 214#define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1) 215 216#define TG3_FW_UPDATE_TIMEOUT_SEC 5 217#define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2) 218 219#define FIRMWARE_TG3 "tigon/tg3.bin" 220#define FIRMWARE_TG357766 "tigon/tg357766.bin" 221#define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 222#define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 223 224MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 225MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 226MODULE_LICENSE("GPL"); 227MODULE_FIRMWARE(FIRMWARE_TG3); 228MODULE_FIRMWARE(FIRMWARE_TG357766); 229MODULE_FIRMWARE(FIRMWARE_TG3TSO); 230MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 231 232static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 233module_param(tg3_debug, int, 0); 234MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 235 236#define TG3_DRV_DATA_FLAG_10_100_ONLY 0x0001 237#define TG3_DRV_DATA_FLAG_5705_10_100 0x0002 238 239static const struct pci_device_id tg3_pci_tbl[] = { 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 258 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901), 259 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 260 TG3_DRV_DATA_FLAG_5705_10_100}, 261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2), 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_5704S_2)}, 265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F), 266 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 267 TG3_DRV_DATA_FLAG_5705_10_100}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F), 274 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F), 280 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 288 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M, 289 PCI_VENDOR_ID_LENOVO, 290 TG3PCI_SUBDEVICE_ID_LENOVO_5787M), 291 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 292 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 293 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F), 294 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 299 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 302 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 303 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 308 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 309 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 310 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 311 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 312 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 313 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 314 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A), 315 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 316 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 317 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B), 318 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 319 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 320 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 321 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790), 322 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 323 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 324 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 325 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)}, 326 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 327 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 328 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 329 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 330 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 331 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791), 332 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 333 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795), 334 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 335 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 336 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 337 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 338 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)}, 339 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)}, 340 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)}, 341 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)}, 342 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)}, 343 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)}, 344 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)}, 345 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)}, 346 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)}, 347 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 348 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 349 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 350 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 351 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 352 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 353 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 354 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 355 {} 356}; 357 358MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 359 360static const struct { 361 const char string[ETH_GSTRING_LEN]; 362} ethtool_stats_keys[] = { 363 { "rx_octets" }, 364 { "rx_fragments" }, 365 { "rx_ucast_packets" }, 366 { "rx_mcast_packets" }, 367 { "rx_bcast_packets" }, 368 { "rx_fcs_errors" }, 369 { "rx_align_errors" }, 370 { "rx_xon_pause_rcvd" }, 371 { "rx_xoff_pause_rcvd" }, 372 { "rx_mac_ctrl_rcvd" }, 373 { "rx_xoff_entered" }, 374 { "rx_frame_too_long_errors" }, 375 { "rx_jabbers" }, 376 { "rx_undersize_packets" }, 377 { "rx_in_length_errors" }, 378 { "rx_out_length_errors" }, 379 { "rx_64_or_less_octet_packets" }, 380 { "rx_65_to_127_octet_packets" }, 381 { "rx_128_to_255_octet_packets" }, 382 { "rx_256_to_511_octet_packets" }, 383 { "rx_512_to_1023_octet_packets" }, 384 { "rx_1024_to_1522_octet_packets" }, 385 { "rx_1523_to_2047_octet_packets" }, 386 { "rx_2048_to_4095_octet_packets" }, 387 { "rx_4096_to_8191_octet_packets" }, 388 { "rx_8192_to_9022_octet_packets" }, 389 390 { "tx_octets" }, 391 { "tx_collisions" }, 392 393 { "tx_xon_sent" }, 394 { "tx_xoff_sent" }, 395 { "tx_flow_control" }, 396 { "tx_mac_errors" }, 397 { "tx_single_collisions" }, 398 { "tx_mult_collisions" }, 399 { "tx_deferred" }, 400 { "tx_excessive_collisions" }, 401 { "tx_late_collisions" }, 402 { "tx_collide_2times" }, 403 { "tx_collide_3times" }, 404 { "tx_collide_4times" }, 405 { "tx_collide_5times" }, 406 { "tx_collide_6times" }, 407 { "tx_collide_7times" }, 408 { "tx_collide_8times" }, 409 { "tx_collide_9times" }, 410 { "tx_collide_10times" }, 411 { "tx_collide_11times" }, 412 { "tx_collide_12times" }, 413 { "tx_collide_13times" }, 414 { "tx_collide_14times" }, 415 { "tx_collide_15times" }, 416 { "tx_ucast_packets" }, 417 { "tx_mcast_packets" }, 418 { "tx_bcast_packets" }, 419 { "tx_carrier_sense_errors" }, 420 { "tx_discards" }, 421 { "tx_errors" }, 422 423 { "dma_writeq_full" }, 424 { "dma_write_prioq_full" }, 425 { "rxbds_empty" }, 426 { "rx_discards" }, 427 { "rx_errors" }, 428 { "rx_threshold_hit" }, 429 430 { "dma_readq_full" }, 431 { "dma_read_prioq_full" }, 432 { "tx_comp_queue_full" }, 433 434 { "ring_set_send_prod_index" }, 435 { "ring_status_update" }, 436 { "nic_irqs" }, 437 { "nic_avoided_irqs" }, 438 { "nic_tx_threshold_hit" }, 439 440 { "mbuf_lwm_thresh_hit" }, 441}; 442 443#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 444#define TG3_NVRAM_TEST 0 445#define TG3_LINK_TEST 1 446#define TG3_REGISTER_TEST 2 447#define TG3_MEMORY_TEST 3 448#define TG3_MAC_LOOPB_TEST 4 449#define TG3_PHY_LOOPB_TEST 5 450#define TG3_EXT_LOOPB_TEST 6 451#define TG3_INTERRUPT_TEST 7 452 453 454static const struct { 455 const char string[ETH_GSTRING_LEN]; 456} ethtool_test_keys[] = { 457 [TG3_NVRAM_TEST] = { "nvram test (online) " }, 458 [TG3_LINK_TEST] = { "link test (online) " }, 459 [TG3_REGISTER_TEST] = { "register test (offline)" }, 460 [TG3_MEMORY_TEST] = { "memory test (offline)" }, 461 [TG3_MAC_LOOPB_TEST] = { "mac loopback test (offline)" }, 462 [TG3_PHY_LOOPB_TEST] = { "phy loopback test (offline)" }, 463 [TG3_EXT_LOOPB_TEST] = { "ext loopback test (offline)" }, 464 [TG3_INTERRUPT_TEST] = { "interrupt test (offline)" }, 465}; 466 467#define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 468 469 470static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 471{ 472 writel(val, tp->regs + off); 473} 474 475static u32 tg3_read32(struct tg3 *tp, u32 off) 476{ 477 return readl(tp->regs + off); 478} 479 480static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 481{ 482 writel(val, tp->aperegs + off); 483} 484 485static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 486{ 487 return readl(tp->aperegs + off); 488} 489 490static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 491{ 492 unsigned long flags; 493 494 spin_lock_irqsave(&tp->indirect_lock, flags); 495 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 496 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 497 spin_unlock_irqrestore(&tp->indirect_lock, flags); 498} 499 500static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 501{ 502 writel(val, tp->regs + off); 503 readl(tp->regs + off); 504} 505 506static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 507{ 508 unsigned long flags; 509 u32 val; 510 511 spin_lock_irqsave(&tp->indirect_lock, flags); 512 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 513 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 514 spin_unlock_irqrestore(&tp->indirect_lock, flags); 515 return val; 516} 517 518static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 519{ 520 unsigned long flags; 521 522 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 523 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 524 TG3_64BIT_REG_LOW, val); 525 return; 526 } 527 if (off == TG3_RX_STD_PROD_IDX_REG) { 528 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 529 TG3_64BIT_REG_LOW, val); 530 return; 531 } 532 533 spin_lock_irqsave(&tp->indirect_lock, flags); 534 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 535 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 536 spin_unlock_irqrestore(&tp->indirect_lock, flags); 537 538 /* In indirect mode when disabling interrupts, we also need 539 * to clear the interrupt bit in the GRC local ctrl register. 540 */ 541 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 542 (val == 0x1)) { 543 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 544 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 545 } 546} 547 548static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 549{ 550 unsigned long flags; 551 u32 val; 552 553 spin_lock_irqsave(&tp->indirect_lock, flags); 554 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 555 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 556 spin_unlock_irqrestore(&tp->indirect_lock, flags); 557 return val; 558} 559 560/* usec_wait specifies the wait time in usec when writing to certain registers 561 * where it is unsafe to read back the register without some delay. 562 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 563 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 564 */ 565static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 566{ 567 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 568 /* Non-posted methods */ 569 tp->write32(tp, off, val); 570 else { 571 /* Posted method */ 572 tg3_write32(tp, off, val); 573 if (usec_wait) 574 udelay(usec_wait); 575 tp->read32(tp, off); 576 } 577 /* Wait again after the read for the posted method to guarantee that 578 * the wait time is met. 579 */ 580 if (usec_wait) 581 udelay(usec_wait); 582} 583 584static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 585{ 586 tp->write32_mbox(tp, off, val); 587 if (tg3_flag(tp, FLUSH_POSTED_WRITES) || 588 (!tg3_flag(tp, MBOX_WRITE_REORDER) && 589 !tg3_flag(tp, ICH_WORKAROUND))) 590 tp->read32_mbox(tp, off); 591} 592 593static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 594{ 595 void __iomem *mbox = tp->regs + off; 596 writel(val, mbox); 597 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 598 writel(val, mbox); 599 if (tg3_flag(tp, MBOX_WRITE_REORDER) || 600 tg3_flag(tp, FLUSH_POSTED_WRITES)) 601 readl(mbox); 602} 603 604static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 605{ 606 return readl(tp->regs + off + GRCMBOX_BASE); 607} 608 609static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 610{ 611 writel(val, tp->regs + off + GRCMBOX_BASE); 612} 613 614#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 615#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 616#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 617#define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 618#define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 619 620#define tw32(reg, val) tp->write32(tp, reg, val) 621#define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 622#define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 623#define tr32(reg) tp->read32(tp, reg) 624 625static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 626{ 627 unsigned long flags; 628 629 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 630 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 631 return; 632 633 spin_lock_irqsave(&tp->indirect_lock, flags); 634 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 635 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 636 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 637 638 /* Always leave this as zero. */ 639 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 640 } else { 641 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 642 tw32_f(TG3PCI_MEM_WIN_DATA, val); 643 644 /* Always leave this as zero. */ 645 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 646 } 647 spin_unlock_irqrestore(&tp->indirect_lock, flags); 648} 649 650static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 651{ 652 unsigned long flags; 653 654 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 655 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 656 *val = 0; 657 return; 658 } 659 660 spin_lock_irqsave(&tp->indirect_lock, flags); 661 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 662 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 663 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 664 665 /* Always leave this as zero. */ 666 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 667 } else { 668 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 669 *val = tr32(TG3PCI_MEM_WIN_DATA); 670 671 /* Always leave this as zero. */ 672 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 673 } 674 spin_unlock_irqrestore(&tp->indirect_lock, flags); 675} 676 677static void tg3_ape_lock_init(struct tg3 *tp) 678{ 679 int i; 680 u32 regbase, bit; 681 682 if (tg3_asic_rev(tp) == ASIC_REV_5761) 683 regbase = TG3_APE_LOCK_GRANT; 684 else 685 regbase = TG3_APE_PER_LOCK_GRANT; 686 687 /* Make sure the driver hasn't any stale locks. */ 688 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 689 switch (i) { 690 case TG3_APE_LOCK_PHY0: 691 case TG3_APE_LOCK_PHY1: 692 case TG3_APE_LOCK_PHY2: 693 case TG3_APE_LOCK_PHY3: 694 bit = APE_LOCK_GRANT_DRIVER; 695 break; 696 default: 697 if (!tp->pci_fn) 698 bit = APE_LOCK_GRANT_DRIVER; 699 else 700 bit = 1 << tp->pci_fn; 701 } 702 tg3_ape_write32(tp, regbase + 4 * i, bit); 703 } 704 705} 706 707static int tg3_ape_lock(struct tg3 *tp, int locknum) 708{ 709 int i, off; 710 int ret = 0; 711 u32 status, req, gnt, bit; 712 713 if (!tg3_flag(tp, ENABLE_APE)) 714 return 0; 715 716 switch (locknum) { 717 case TG3_APE_LOCK_GPIO: 718 if (tg3_asic_rev(tp) == ASIC_REV_5761) 719 return 0; 720 fallthrough; 721 case TG3_APE_LOCK_GRC: 722 case TG3_APE_LOCK_MEM: 723 if (!tp->pci_fn) 724 bit = APE_LOCK_REQ_DRIVER; 725 else 726 bit = 1 << tp->pci_fn; 727 break; 728 case TG3_APE_LOCK_PHY0: 729 case TG3_APE_LOCK_PHY1: 730 case TG3_APE_LOCK_PHY2: 731 case TG3_APE_LOCK_PHY3: 732 bit = APE_LOCK_REQ_DRIVER; 733 break; 734 default: 735 return -EINVAL; 736 } 737 738 if (tg3_asic_rev(tp) == ASIC_REV_5761) { 739 req = TG3_APE_LOCK_REQ; 740 gnt = TG3_APE_LOCK_GRANT; 741 } else { 742 req = TG3_APE_PER_LOCK_REQ; 743 gnt = TG3_APE_PER_LOCK_GRANT; 744 } 745 746 off = 4 * locknum; 747 748 tg3_ape_write32(tp, req + off, bit); 749 750 /* Wait for up to 1 millisecond to acquire lock. */ 751 for (i = 0; i < 100; i++) { 752 status = tg3_ape_read32(tp, gnt + off); 753 if (status == bit) 754 break; 755 if (pci_channel_offline(tp->pdev)) 756 break; 757 758 udelay(10); 759 } 760 761 if (status != bit) { 762 /* Revoke the lock request. */ 763 tg3_ape_write32(tp, gnt + off, bit); 764 ret = -EBUSY; 765 } 766 767 return ret; 768} 769 770static void tg3_ape_unlock(struct tg3 *tp, int locknum) 771{ 772 u32 gnt, bit; 773 774 if (!tg3_flag(tp, ENABLE_APE)) 775 return; 776 777 switch (locknum) { 778 case TG3_APE_LOCK_GPIO: 779 if (tg3_asic_rev(tp) == ASIC_REV_5761) 780 return; 781 fallthrough; 782 case TG3_APE_LOCK_GRC: 783 case TG3_APE_LOCK_MEM: 784 if (!tp->pci_fn) 785 bit = APE_LOCK_GRANT_DRIVER; 786 else 787 bit = 1 << tp->pci_fn; 788 break; 789 case TG3_APE_LOCK_PHY0: 790 case TG3_APE_LOCK_PHY1: 791 case TG3_APE_LOCK_PHY2: 792 case TG3_APE_LOCK_PHY3: 793 bit = APE_LOCK_GRANT_DRIVER; 794 break; 795 default: 796 return; 797 } 798 799 if (tg3_asic_rev(tp) == ASIC_REV_5761) 800 gnt = TG3_APE_LOCK_GRANT; 801 else 802 gnt = TG3_APE_PER_LOCK_GRANT; 803 804 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 805} 806 807static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us) 808{ 809 u32 apedata; 810 811 while (timeout_us) { 812 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 813 return -EBUSY; 814 815 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 816 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 817 break; 818 819 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 820 821 udelay(10); 822 timeout_us -= (timeout_us > 10) ? 10 : timeout_us; 823 } 824 825 return timeout_us ? 0 : -EBUSY; 826} 827 828#ifdef CONFIG_TIGON3_HWMON 829static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us) 830{ 831 u32 i, apedata; 832 833 for (i = 0; i < timeout_us / 10; i++) { 834 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 835 836 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 837 break; 838 839 udelay(10); 840 } 841 842 return i == timeout_us / 10; 843} 844 845static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, 846 u32 len) 847{ 848 int err; 849 u32 i, bufoff, msgoff, maxlen, apedata; 850 851 if (!tg3_flag(tp, APE_HAS_NCSI)) 852 return 0; 853 854 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 855 if (apedata != APE_SEG_SIG_MAGIC) 856 return -ENODEV; 857 858 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 859 if (!(apedata & APE_FW_STATUS_READY)) 860 return -EAGAIN; 861 862 bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) + 863 TG3_APE_SHMEM_BASE; 864 msgoff = bufoff + 2 * sizeof(u32); 865 maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN); 866 867 while (len) { 868 u32 length; 869 870 /* Cap xfer sizes to scratchpad limits. */ 871 length = (len > maxlen) ? maxlen : len; 872 len -= length; 873 874 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 875 if (!(apedata & APE_FW_STATUS_READY)) 876 return -EAGAIN; 877 878 /* Wait for up to 1 msec for APE to service previous event. */ 879 err = tg3_ape_event_lock(tp, 1000); 880 if (err) 881 return err; 882 883 apedata = APE_EVENT_STATUS_DRIVER_EVNT | 884 APE_EVENT_STATUS_SCRTCHPD_READ | 885 APE_EVENT_STATUS_EVENT_PENDING; 886 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata); 887 888 tg3_ape_write32(tp, bufoff, base_off); 889 tg3_ape_write32(tp, bufoff + sizeof(u32), length); 890 891 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 892 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 893 894 base_off += length; 895 896 if (tg3_ape_wait_for_event(tp, 30000)) 897 return -EAGAIN; 898 899 for (i = 0; length; i += 4, length -= 4) { 900 u32 val = tg3_ape_read32(tp, msgoff + i); 901 memcpy(data, &val, sizeof(u32)); 902 data++; 903 } 904 } 905 906 return 0; 907} 908#endif 909 910static int tg3_ape_send_event(struct tg3 *tp, u32 event) 911{ 912 int err; 913 u32 apedata; 914 915 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 916 if (apedata != APE_SEG_SIG_MAGIC) 917 return -EAGAIN; 918 919 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 920 if (!(apedata & APE_FW_STATUS_READY)) 921 return -EAGAIN; 922 923 /* Wait for up to 20 millisecond for APE to service previous event. */ 924 err = tg3_ape_event_lock(tp, 20000); 925 if (err) 926 return err; 927 928 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 929 event | APE_EVENT_STATUS_EVENT_PENDING); 930 931 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 932 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 933 934 return 0; 935} 936 937static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 938{ 939 u32 event; 940 u32 apedata; 941 942 if (!tg3_flag(tp, ENABLE_APE)) 943 return; 944 945 switch (kind) { 946 case RESET_KIND_INIT: 947 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 948 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 949 APE_HOST_SEG_SIG_MAGIC); 950 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 951 APE_HOST_SEG_LEN_MAGIC); 952 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 953 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 954 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 955 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 956 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 957 APE_HOST_BEHAV_NO_PHYLOCK); 958 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 959 TG3_APE_HOST_DRVR_STATE_START); 960 961 event = APE_EVENT_STATUS_STATE_START; 962 break; 963 case RESET_KIND_SHUTDOWN: 964 if (device_may_wakeup(&tp->pdev->dev) && 965 tg3_flag(tp, WOL_ENABLE)) { 966 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 967 TG3_APE_HOST_WOL_SPEED_AUTO); 968 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 969 } else 970 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 971 972 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 973 974 event = APE_EVENT_STATUS_STATE_UNLOAD; 975 break; 976 default: 977 return; 978 } 979 980 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 981 982 tg3_ape_send_event(tp, event); 983} 984 985static void tg3_send_ape_heartbeat(struct tg3 *tp, 986 unsigned long interval) 987{ 988 /* Check if hb interval has exceeded */ 989 if (!tg3_flag(tp, ENABLE_APE) || 990 time_before(jiffies, tp->ape_hb_jiffies + interval)) 991 return; 992 993 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 994 tp->ape_hb_jiffies = jiffies; 995} 996 997static void tg3_disable_ints(struct tg3 *tp) 998{ 999 int i; 1000 1001 tw32(TG3PCI_MISC_HOST_CTRL, 1002 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 1003 for (i = 0; i < tp->irq_max; i++) 1004 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 1005} 1006 1007static void tg3_enable_ints(struct tg3 *tp) 1008{ 1009 int i; 1010 1011 tp->irq_sync = 0; 1012 wmb(); 1013 1014 tw32(TG3PCI_MISC_HOST_CTRL, 1015 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 1016 1017 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 1018 for (i = 0; i < tp->irq_cnt; i++) { 1019 struct tg3_napi *tnapi = &tp->napi[i]; 1020 1021 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1022 if (tg3_flag(tp, 1SHOT_MSI)) 1023 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1024 1025 tp->coal_now |= tnapi->coal_now; 1026 } 1027 1028 /* Force an initial interrupt */ 1029 if (!tg3_flag(tp, TAGGED_STATUS) && 1030 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 1031 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 1032 else 1033 tw32(HOSTCC_MODE, tp->coal_now); 1034 1035 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 1036} 1037 1038static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 1039{ 1040 struct tg3 *tp = tnapi->tp; 1041 struct tg3_hw_status *sblk = tnapi->hw_status; 1042 unsigned int work_exists = 0; 1043 1044 /* check for phy events */ 1045 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 1046 if (sblk->status & SD_STATUS_LINK_CHG) 1047 work_exists = 1; 1048 } 1049 1050 /* check for TX work to do */ 1051 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 1052 work_exists = 1; 1053 1054 /* check for RX work to do */ 1055 if (tnapi->rx_rcb_prod_idx && 1056 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 1057 work_exists = 1; 1058 1059 return work_exists; 1060} 1061 1062/* tg3_int_reenable 1063 * similar to tg3_enable_ints, but it accurately determines whether there 1064 * is new work pending and can return without flushing the PIO write 1065 * which reenables interrupts 1066 */ 1067static void tg3_int_reenable(struct tg3_napi *tnapi) 1068{ 1069 struct tg3 *tp = tnapi->tp; 1070 1071 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 1072 1073 /* When doing tagged status, this work check is unnecessary. 1074 * The last_tag we write above tells the chip which piece of 1075 * work we've completed. 1076 */ 1077 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 1078 tw32(HOSTCC_MODE, tp->coalesce_mode | 1079 HOSTCC_MODE_ENABLE | tnapi->coal_now); 1080} 1081 1082static void tg3_switch_clocks(struct tg3 *tp) 1083{ 1084 u32 clock_ctrl; 1085 u32 orig_clock_ctrl; 1086 1087 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 1088 return; 1089 1090 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 1091 1092 orig_clock_ctrl = clock_ctrl; 1093 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 1094 CLOCK_CTRL_CLKRUN_OENABLE | 1095 0x1f); 1096 tp->pci_clock_ctrl = clock_ctrl; 1097 1098 if (tg3_flag(tp, 5705_PLUS)) { 1099 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 1100 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1101 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 1102 } 1103 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 1104 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1105 clock_ctrl | 1106 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 1107 40); 1108 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1109 clock_ctrl | (CLOCK_CTRL_ALTCLK), 1110 40); 1111 } 1112 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 1113} 1114 1115#define PHY_BUSY_LOOPS 5000 1116 1117static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg, 1118 u32 *val) 1119{ 1120 u32 frame_val; 1121 unsigned int loops; 1122 int ret; 1123 1124 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1125 tw32_f(MAC_MI_MODE, 1126 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1127 udelay(80); 1128 } 1129 1130 tg3_ape_lock(tp, tp->phy_ape_lock); 1131 1132 *val = 0x0; 1133 1134 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1135 MI_COM_PHY_ADDR_MASK); 1136 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1137 MI_COM_REG_ADDR_MASK); 1138 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 1139 1140 tw32_f(MAC_MI_COM, frame_val); 1141 1142 loops = PHY_BUSY_LOOPS; 1143 while (loops != 0) { 1144 udelay(10); 1145 frame_val = tr32(MAC_MI_COM); 1146 1147 if ((frame_val & MI_COM_BUSY) == 0) { 1148 udelay(5); 1149 frame_val = tr32(MAC_MI_COM); 1150 break; 1151 } 1152 loops -= 1; 1153 } 1154 1155 ret = -EBUSY; 1156 if (loops != 0) { 1157 *val = frame_val & MI_COM_DATA_MASK; 1158 ret = 0; 1159 } 1160 1161 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1162 tw32_f(MAC_MI_MODE, tp->mi_mode); 1163 udelay(80); 1164 } 1165 1166 tg3_ape_unlock(tp, tp->phy_ape_lock); 1167 1168 return ret; 1169} 1170 1171static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 1172{ 1173 return __tg3_readphy(tp, tp->phy_addr, reg, val); 1174} 1175 1176static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg, 1177 u32 val) 1178{ 1179 u32 frame_val; 1180 unsigned int loops; 1181 int ret; 1182 1183 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1184 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1185 return 0; 1186 1187 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1188 tw32_f(MAC_MI_MODE, 1189 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1190 udelay(80); 1191 } 1192 1193 tg3_ape_lock(tp, tp->phy_ape_lock); 1194 1195 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1196 MI_COM_PHY_ADDR_MASK); 1197 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1198 MI_COM_REG_ADDR_MASK); 1199 frame_val |= (val & MI_COM_DATA_MASK); 1200 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1201 1202 tw32_f(MAC_MI_COM, frame_val); 1203 1204 loops = PHY_BUSY_LOOPS; 1205 while (loops != 0) { 1206 udelay(10); 1207 frame_val = tr32(MAC_MI_COM); 1208 if ((frame_val & MI_COM_BUSY) == 0) { 1209 udelay(5); 1210 frame_val = tr32(MAC_MI_COM); 1211 break; 1212 } 1213 loops -= 1; 1214 } 1215 1216 ret = -EBUSY; 1217 if (loops != 0) 1218 ret = 0; 1219 1220 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1221 tw32_f(MAC_MI_MODE, tp->mi_mode); 1222 udelay(80); 1223 } 1224 1225 tg3_ape_unlock(tp, tp->phy_ape_lock); 1226 1227 return ret; 1228} 1229 1230static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1231{ 1232 return __tg3_writephy(tp, tp->phy_addr, reg, val); 1233} 1234 1235static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1236{ 1237 int err; 1238 1239 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1240 if (err) 1241 goto done; 1242 1243 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1244 if (err) 1245 goto done; 1246 1247 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1248 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1249 if (err) 1250 goto done; 1251 1252 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1253 1254done: 1255 return err; 1256} 1257 1258static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1259{ 1260 int err; 1261 1262 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1263 if (err) 1264 goto done; 1265 1266 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1267 if (err) 1268 goto done; 1269 1270 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1271 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1272 if (err) 1273 goto done; 1274 1275 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1276 1277done: 1278 return err; 1279} 1280 1281static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1282{ 1283 int err; 1284 1285 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1286 if (!err) 1287 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1288 1289 return err; 1290} 1291 1292static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1293{ 1294 int err; 1295 1296 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1297 if (!err) 1298 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1299 1300 return err; 1301} 1302 1303static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1304{ 1305 int err; 1306 1307 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1308 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1309 MII_TG3_AUXCTL_SHDWSEL_MISC); 1310 if (!err) 1311 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1312 1313 return err; 1314} 1315 1316static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1317{ 1318 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1319 set |= MII_TG3_AUXCTL_MISC_WREN; 1320 1321 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1322} 1323 1324static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable) 1325{ 1326 u32 val; 1327 int err; 1328 1329 err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 1330 1331 if (err) 1332 return err; 1333 1334 if (enable) 1335 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1336 else 1337 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1338 1339 err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 1340 val | MII_TG3_AUXCTL_ACTL_TX_6DB); 1341 1342 return err; 1343} 1344 1345static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val) 1346{ 1347 return tg3_writephy(tp, MII_TG3_MISC_SHDW, 1348 reg | val | MII_TG3_MISC_SHDW_WREN); 1349} 1350 1351static int tg3_bmcr_reset(struct tg3 *tp) 1352{ 1353 u32 phy_control; 1354 int limit, err; 1355 1356 /* OK, reset it, and poll the BMCR_RESET bit until it 1357 * clears or we time out. 1358 */ 1359 phy_control = BMCR_RESET; 1360 err = tg3_writephy(tp, MII_BMCR, phy_control); 1361 if (err != 0) 1362 return -EBUSY; 1363 1364 limit = 5000; 1365 while (limit--) { 1366 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1367 if (err != 0) 1368 return -EBUSY; 1369 1370 if ((phy_control & BMCR_RESET) == 0) { 1371 udelay(40); 1372 break; 1373 } 1374 udelay(10); 1375 } 1376 if (limit < 0) 1377 return -EBUSY; 1378 1379 return 0; 1380} 1381 1382static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1383{ 1384 struct tg3 *tp = bp->priv; 1385 u32 val; 1386 1387 spin_lock_bh(&tp->lock); 1388 1389 if (__tg3_readphy(tp, mii_id, reg, &val)) 1390 val = -EIO; 1391 1392 spin_unlock_bh(&tp->lock); 1393 1394 return val; 1395} 1396 1397static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1398{ 1399 struct tg3 *tp = bp->priv; 1400 u32 ret = 0; 1401 1402 spin_lock_bh(&tp->lock); 1403 1404 if (__tg3_writephy(tp, mii_id, reg, val)) 1405 ret = -EIO; 1406 1407 spin_unlock_bh(&tp->lock); 1408 1409 return ret; 1410} 1411 1412static void tg3_mdio_config_5785(struct tg3 *tp) 1413{ 1414 u32 val; 1415 struct phy_device *phydev; 1416 1417 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1418 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1419 case PHY_ID_BCM50610: 1420 case PHY_ID_BCM50610M: 1421 val = MAC_PHYCFG2_50610_LED_MODES; 1422 break; 1423 case PHY_ID_BCMAC131: 1424 val = MAC_PHYCFG2_AC131_LED_MODES; 1425 break; 1426 case PHY_ID_RTL8211C: 1427 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1428 break; 1429 case PHY_ID_RTL8201E: 1430 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1431 break; 1432 default: 1433 return; 1434 } 1435 1436 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1437 tw32(MAC_PHYCFG2, val); 1438 1439 val = tr32(MAC_PHYCFG1); 1440 val &= ~(MAC_PHYCFG1_RGMII_INT | 1441 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1442 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1443 tw32(MAC_PHYCFG1, val); 1444 1445 return; 1446 } 1447 1448 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1449 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1450 MAC_PHYCFG2_FMODE_MASK_MASK | 1451 MAC_PHYCFG2_GMODE_MASK_MASK | 1452 MAC_PHYCFG2_ACT_MASK_MASK | 1453 MAC_PHYCFG2_QUAL_MASK_MASK | 1454 MAC_PHYCFG2_INBAND_ENABLE; 1455 1456 tw32(MAC_PHYCFG2, val); 1457 1458 val = tr32(MAC_PHYCFG1); 1459 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1460 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1461 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1462 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1463 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1464 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1465 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1466 } 1467 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1468 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1469 tw32(MAC_PHYCFG1, val); 1470 1471 val = tr32(MAC_EXT_RGMII_MODE); 1472 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1473 MAC_RGMII_MODE_RX_QUALITY | 1474 MAC_RGMII_MODE_RX_ACTIVITY | 1475 MAC_RGMII_MODE_RX_ENG_DET | 1476 MAC_RGMII_MODE_TX_ENABLE | 1477 MAC_RGMII_MODE_TX_LOWPWR | 1478 MAC_RGMII_MODE_TX_RESET); 1479 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1480 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1481 val |= MAC_RGMII_MODE_RX_INT_B | 1482 MAC_RGMII_MODE_RX_QUALITY | 1483 MAC_RGMII_MODE_RX_ACTIVITY | 1484 MAC_RGMII_MODE_RX_ENG_DET; 1485 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1486 val |= MAC_RGMII_MODE_TX_ENABLE | 1487 MAC_RGMII_MODE_TX_LOWPWR | 1488 MAC_RGMII_MODE_TX_RESET; 1489 } 1490 tw32(MAC_EXT_RGMII_MODE, val); 1491} 1492 1493static void tg3_mdio_start(struct tg3 *tp) 1494{ 1495 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1496 tw32_f(MAC_MI_MODE, tp->mi_mode); 1497 udelay(80); 1498 1499 if (tg3_flag(tp, MDIOBUS_INITED) && 1500 tg3_asic_rev(tp) == ASIC_REV_5785) 1501 tg3_mdio_config_5785(tp); 1502} 1503 1504static int tg3_mdio_init(struct tg3 *tp) 1505{ 1506 int i; 1507 u32 reg; 1508 struct phy_device *phydev; 1509 1510 if (tg3_flag(tp, 5717_PLUS)) { 1511 u32 is_serdes; 1512 1513 tp->phy_addr = tp->pci_fn + 1; 1514 1515 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) 1516 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1517 else 1518 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1519 TG3_CPMU_PHY_STRAP_IS_SERDES; 1520 if (is_serdes) 1521 tp->phy_addr += 7; 1522 } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) { 1523 int addr; 1524 1525 addr = ssb_gige_get_phyaddr(tp->pdev); 1526 if (addr < 0) 1527 return addr; 1528 tp->phy_addr = addr; 1529 } else 1530 tp->phy_addr = TG3_PHY_MII_ADDR; 1531 1532 tg3_mdio_start(tp); 1533 1534 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1535 return 0; 1536 1537 tp->mdio_bus = mdiobus_alloc(); 1538 if (tp->mdio_bus == NULL) 1539 return -ENOMEM; 1540 1541 tp->mdio_bus->name = "tg3 mdio bus"; 1542 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", pci_dev_id(tp->pdev)); 1543 tp->mdio_bus->priv = tp; 1544 tp->mdio_bus->parent = &tp->pdev->dev; 1545 tp->mdio_bus->read = &tg3_mdio_read; 1546 tp->mdio_bus->write = &tg3_mdio_write; 1547 tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr); 1548 1549 /* The bus registration will look for all the PHYs on the mdio bus. 1550 * Unfortunately, it does not ensure the PHY is powered up before 1551 * accessing the PHY ID registers. A chip reset is the 1552 * quickest way to bring the device back to an operational state.. 1553 */ 1554 if (tg3_readphy(tp, MII_BMCR, ®) || (reg & BMCR_PDOWN)) 1555 tg3_bmcr_reset(tp); 1556 1557 i = mdiobus_register(tp->mdio_bus); 1558 if (i) { 1559 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1560 mdiobus_free(tp->mdio_bus); 1561 return i; 1562 } 1563 1564 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1565 1566 if (!phydev || !phydev->drv) { 1567 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1568 mdiobus_unregister(tp->mdio_bus); 1569 mdiobus_free(tp->mdio_bus); 1570 return -ENODEV; 1571 } 1572 1573 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1574 case PHY_ID_BCM57780: 1575 phydev->interface = PHY_INTERFACE_MODE_GMII; 1576 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1577 break; 1578 case PHY_ID_BCM50610: 1579 case PHY_ID_BCM50610M: 1580 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1581 PHY_BRCM_RX_REFCLK_UNUSED | 1582 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1583 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1584 fallthrough; 1585 case PHY_ID_RTL8211C: 1586 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1587 break; 1588 case PHY_ID_RTL8201E: 1589 case PHY_ID_BCMAC131: 1590 phydev->interface = PHY_INTERFACE_MODE_MII; 1591 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1592 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1593 break; 1594 } 1595 1596 tg3_flag_set(tp, MDIOBUS_INITED); 1597 1598 if (tg3_asic_rev(tp) == ASIC_REV_5785) 1599 tg3_mdio_config_5785(tp); 1600 1601 return 0; 1602} 1603 1604static void tg3_mdio_fini(struct tg3 *tp) 1605{ 1606 if (tg3_flag(tp, MDIOBUS_INITED)) { 1607 tg3_flag_clear(tp, MDIOBUS_INITED); 1608 mdiobus_unregister(tp->mdio_bus); 1609 mdiobus_free(tp->mdio_bus); 1610 } 1611} 1612 1613/* tp->lock is held. */ 1614static inline void tg3_generate_fw_event(struct tg3 *tp) 1615{ 1616 u32 val; 1617 1618 val = tr32(GRC_RX_CPU_EVENT); 1619 val |= GRC_RX_CPU_DRIVER_EVENT; 1620 tw32_f(GRC_RX_CPU_EVENT, val); 1621 1622 tp->last_event_jiffies = jiffies; 1623} 1624 1625#define TG3_FW_EVENT_TIMEOUT_USEC 2500 1626 1627/* tp->lock is held. */ 1628static void tg3_wait_for_event_ack(struct tg3 *tp) 1629{ 1630 int i; 1631 unsigned int delay_cnt; 1632 long time_remain; 1633 1634 /* If enough time has passed, no wait is necessary. */ 1635 time_remain = (long)(tp->last_event_jiffies + 1 + 1636 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1637 (long)jiffies; 1638 if (time_remain < 0) 1639 return; 1640 1641 /* Check if we can shorten the wait time. */ 1642 delay_cnt = jiffies_to_usecs(time_remain); 1643 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1644 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1645 delay_cnt = (delay_cnt >> 3) + 1; 1646 1647 for (i = 0; i < delay_cnt; i++) { 1648 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1649 break; 1650 if (pci_channel_offline(tp->pdev)) 1651 break; 1652 1653 udelay(8); 1654 } 1655} 1656 1657/* tp->lock is held. */ 1658static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1659{ 1660 u32 reg, val; 1661 1662 val = 0; 1663 if (!tg3_readphy(tp, MII_BMCR, ®)) 1664 val = reg << 16; 1665 if (!tg3_readphy(tp, MII_BMSR, ®)) 1666 val |= (reg & 0xffff); 1667 *data++ = val; 1668 1669 val = 0; 1670 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1671 val = reg << 16; 1672 if (!tg3_readphy(tp, MII_LPA, ®)) 1673 val |= (reg & 0xffff); 1674 *data++ = val; 1675 1676 val = 0; 1677 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1678 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1679 val = reg << 16; 1680 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1681 val |= (reg & 0xffff); 1682 } 1683 *data++ = val; 1684 1685 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1686 val = reg << 16; 1687 else 1688 val = 0; 1689 *data++ = val; 1690} 1691 1692/* tp->lock is held. */ 1693static void tg3_ump_link_report(struct tg3 *tp) 1694{ 1695 u32 data[4]; 1696 1697 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1698 return; 1699 1700 tg3_phy_gather_ump_data(tp, data); 1701 1702 tg3_wait_for_event_ack(tp); 1703 1704 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1705 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1706 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1707 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1708 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1709 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1710 1711 tg3_generate_fw_event(tp); 1712} 1713 1714/* tp->lock is held. */ 1715static void tg3_stop_fw(struct tg3 *tp) 1716{ 1717 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1718 /* Wait for RX cpu to ACK the previous event. */ 1719 tg3_wait_for_event_ack(tp); 1720 1721 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1722 1723 tg3_generate_fw_event(tp); 1724 1725 /* Wait for RX cpu to ACK this event. */ 1726 tg3_wait_for_event_ack(tp); 1727 } 1728} 1729 1730/* tp->lock is held. */ 1731static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1732{ 1733 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1734 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1735 1736 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1737 switch (kind) { 1738 case RESET_KIND_INIT: 1739 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1740 DRV_STATE_START); 1741 break; 1742 1743 case RESET_KIND_SHUTDOWN: 1744 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1745 DRV_STATE_UNLOAD); 1746 break; 1747 1748 case RESET_KIND_SUSPEND: 1749 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1750 DRV_STATE_SUSPEND); 1751 break; 1752 1753 default: 1754 break; 1755 } 1756 } 1757} 1758 1759/* tp->lock is held. */ 1760static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1761{ 1762 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1763 switch (kind) { 1764 case RESET_KIND_INIT: 1765 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1766 DRV_STATE_START_DONE); 1767 break; 1768 1769 case RESET_KIND_SHUTDOWN: 1770 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1771 DRV_STATE_UNLOAD_DONE); 1772 break; 1773 1774 default: 1775 break; 1776 } 1777 } 1778} 1779 1780/* tp->lock is held. */ 1781static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1782{ 1783 if (tg3_flag(tp, ENABLE_ASF)) { 1784 switch (kind) { 1785 case RESET_KIND_INIT: 1786 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1787 DRV_STATE_START); 1788 break; 1789 1790 case RESET_KIND_SHUTDOWN: 1791 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1792 DRV_STATE_UNLOAD); 1793 break; 1794 1795 case RESET_KIND_SUSPEND: 1796 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1797 DRV_STATE_SUSPEND); 1798 break; 1799 1800 default: 1801 break; 1802 } 1803 } 1804} 1805 1806static int tg3_poll_fw(struct tg3 *tp) 1807{ 1808 int i; 1809 u32 val; 1810 1811 if (tg3_flag(tp, NO_FWARE_REPORTED)) 1812 return 0; 1813 1814 if (tg3_flag(tp, IS_SSB_CORE)) { 1815 /* We don't use firmware. */ 1816 return 0; 1817 } 1818 1819 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 1820 /* Wait up to 20ms for init done. */ 1821 for (i = 0; i < 200; i++) { 1822 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1823 return 0; 1824 if (pci_channel_offline(tp->pdev)) 1825 return -ENODEV; 1826 1827 udelay(100); 1828 } 1829 return -ENODEV; 1830 } 1831 1832 /* Wait for firmware initialization to complete. */ 1833 for (i = 0; i < 100000; i++) { 1834 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1835 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1836 break; 1837 if (pci_channel_offline(tp->pdev)) { 1838 if (!tg3_flag(tp, NO_FWARE_REPORTED)) { 1839 tg3_flag_set(tp, NO_FWARE_REPORTED); 1840 netdev_info(tp->dev, "No firmware running\n"); 1841 } 1842 1843 break; 1844 } 1845 1846 udelay(10); 1847 } 1848 1849 /* Chip might not be fitted with firmware. Some Sun onboard 1850 * parts are configured like that. So don't signal the timeout 1851 * of the above loop as an error, but do report the lack of 1852 * running firmware once. 1853 */ 1854 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1855 tg3_flag_set(tp, NO_FWARE_REPORTED); 1856 1857 netdev_info(tp->dev, "No firmware running\n"); 1858 } 1859 1860 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 1861 /* The 57765 A0 needs a little more 1862 * time to do some important work. 1863 */ 1864 mdelay(10); 1865 } 1866 1867 return 0; 1868} 1869 1870static void tg3_link_report(struct tg3 *tp) 1871{ 1872 if (!netif_carrier_ok(tp->dev)) { 1873 netif_info(tp, link, tp->dev, "Link is down\n"); 1874 tg3_ump_link_report(tp); 1875 } else if (netif_msg_link(tp)) { 1876 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1877 (tp->link_config.active_speed == SPEED_1000 ? 1878 1000 : 1879 (tp->link_config.active_speed == SPEED_100 ? 1880 100 : 10)), 1881 (tp->link_config.active_duplex == DUPLEX_FULL ? 1882 "full" : "half")); 1883 1884 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1885 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1886 "on" : "off", 1887 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1888 "on" : "off"); 1889 1890 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1891 netdev_info(tp->dev, "EEE is %s\n", 1892 tp->setlpicnt ? "enabled" : "disabled"); 1893 1894 tg3_ump_link_report(tp); 1895 } 1896 1897 tp->link_up = netif_carrier_ok(tp->dev); 1898} 1899 1900static u32 tg3_decode_flowctrl_1000T(u32 adv) 1901{ 1902 u32 flowctrl = 0; 1903 1904 if (adv & ADVERTISE_PAUSE_CAP) { 1905 flowctrl |= FLOW_CTRL_RX; 1906 if (!(adv & ADVERTISE_PAUSE_ASYM)) 1907 flowctrl |= FLOW_CTRL_TX; 1908 } else if (adv & ADVERTISE_PAUSE_ASYM) 1909 flowctrl |= FLOW_CTRL_TX; 1910 1911 return flowctrl; 1912} 1913 1914static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1915{ 1916 u16 miireg; 1917 1918 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1919 miireg = ADVERTISE_1000XPAUSE; 1920 else if (flow_ctrl & FLOW_CTRL_TX) 1921 miireg = ADVERTISE_1000XPSE_ASYM; 1922 else if (flow_ctrl & FLOW_CTRL_RX) 1923 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1924 else 1925 miireg = 0; 1926 1927 return miireg; 1928} 1929 1930static u32 tg3_decode_flowctrl_1000X(u32 adv) 1931{ 1932 u32 flowctrl = 0; 1933 1934 if (adv & ADVERTISE_1000XPAUSE) { 1935 flowctrl |= FLOW_CTRL_RX; 1936 if (!(adv & ADVERTISE_1000XPSE_ASYM)) 1937 flowctrl |= FLOW_CTRL_TX; 1938 } else if (adv & ADVERTISE_1000XPSE_ASYM) 1939 flowctrl |= FLOW_CTRL_TX; 1940 1941 return flowctrl; 1942} 1943 1944static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1945{ 1946 u8 cap = 0; 1947 1948 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1949 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1950 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1951 if (lcladv & ADVERTISE_1000XPAUSE) 1952 cap = FLOW_CTRL_RX; 1953 if (rmtadv & ADVERTISE_1000XPAUSE) 1954 cap = FLOW_CTRL_TX; 1955 } 1956 1957 return cap; 1958} 1959 1960static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1961{ 1962 u8 autoneg; 1963 u8 flowctrl = 0; 1964 u32 old_rx_mode = tp->rx_mode; 1965 u32 old_tx_mode = tp->tx_mode; 1966 1967 if (tg3_flag(tp, USE_PHYLIB)) 1968 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg; 1969 else 1970 autoneg = tp->link_config.autoneg; 1971 1972 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1973 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1974 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1975 else 1976 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1977 } else 1978 flowctrl = tp->link_config.flowctrl; 1979 1980 tp->link_config.active_flowctrl = flowctrl; 1981 1982 if (flowctrl & FLOW_CTRL_RX) 1983 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1984 else 1985 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1986 1987 if (old_rx_mode != tp->rx_mode) 1988 tw32_f(MAC_RX_MODE, tp->rx_mode); 1989 1990 if (flowctrl & FLOW_CTRL_TX) 1991 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1992 else 1993 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 1994 1995 if (old_tx_mode != tp->tx_mode) 1996 tw32_f(MAC_TX_MODE, tp->tx_mode); 1997} 1998 1999static void tg3_adjust_link(struct net_device *dev) 2000{ 2001 u8 oldflowctrl, linkmesg = 0; 2002 u32 mac_mode, lcl_adv, rmt_adv; 2003 struct tg3 *tp = netdev_priv(dev); 2004 struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2005 2006 spin_lock_bh(&tp->lock); 2007 2008 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 2009 MAC_MODE_HALF_DUPLEX); 2010 2011 oldflowctrl = tp->link_config.active_flowctrl; 2012 2013 if (phydev->link) { 2014 lcl_adv = 0; 2015 rmt_adv = 0; 2016 2017 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 2018 mac_mode |= MAC_MODE_PORT_MODE_MII; 2019 else if (phydev->speed == SPEED_1000 || 2020 tg3_asic_rev(tp) != ASIC_REV_5785) 2021 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2022 else 2023 mac_mode |= MAC_MODE_PORT_MODE_MII; 2024 2025 if (phydev->duplex == DUPLEX_HALF) 2026 mac_mode |= MAC_MODE_HALF_DUPLEX; 2027 else { 2028 lcl_adv = mii_advertise_flowctrl( 2029 tp->link_config.flowctrl); 2030 2031 if (phydev->pause) 2032 rmt_adv = LPA_PAUSE_CAP; 2033 if (phydev->asym_pause) 2034 rmt_adv |= LPA_PAUSE_ASYM; 2035 } 2036 2037 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 2038 } else 2039 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2040 2041 if (mac_mode != tp->mac_mode) { 2042 tp->mac_mode = mac_mode; 2043 tw32_f(MAC_MODE, tp->mac_mode); 2044 udelay(40); 2045 } 2046 2047 if (tg3_asic_rev(tp) == ASIC_REV_5785) { 2048 if (phydev->speed == SPEED_10) 2049 tw32(MAC_MI_STAT, 2050 MAC_MI_STAT_10MBPS_MODE | 2051 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2052 else 2053 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2054 } 2055 2056 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 2057 tw32(MAC_TX_LENGTHS, 2058 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2059 (6 << TX_LENGTHS_IPG_SHIFT) | 2060 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 2061 else 2062 tw32(MAC_TX_LENGTHS, 2063 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2064 (6 << TX_LENGTHS_IPG_SHIFT) | 2065 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 2066 2067 if (phydev->link != tp->old_link || 2068 phydev->speed != tp->link_config.active_speed || 2069 phydev->duplex != tp->link_config.active_duplex || 2070 oldflowctrl != tp->link_config.active_flowctrl) 2071 linkmesg = 1; 2072 2073 tp->old_link = phydev->link; 2074 tp->link_config.active_speed = phydev->speed; 2075 tp->link_config.active_duplex = phydev->duplex; 2076 2077 spin_unlock_bh(&tp->lock); 2078 2079 if (linkmesg) 2080 tg3_link_report(tp); 2081} 2082 2083static int tg3_phy_init(struct tg3 *tp) 2084{ 2085 struct phy_device *phydev; 2086 2087 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 2088 return 0; 2089 2090 /* Bring the PHY back to a known state. */ 2091 tg3_bmcr_reset(tp); 2092 2093 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2094 2095 /* Attach the MAC to the PHY. */ 2096 phydev = phy_connect(tp->dev, phydev_name(phydev), 2097 tg3_adjust_link, phydev->interface); 2098 if (IS_ERR(phydev)) { 2099 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 2100 return PTR_ERR(phydev); 2101 } 2102 2103 /* Mask with MAC supported features. */ 2104 switch (phydev->interface) { 2105 case PHY_INTERFACE_MODE_GMII: 2106 case PHY_INTERFACE_MODE_RGMII: 2107 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 2108 phy_set_max_speed(phydev, SPEED_1000); 2109 phy_support_asym_pause(phydev); 2110 break; 2111 } 2112 fallthrough; 2113 case PHY_INTERFACE_MODE_MII: 2114 phy_set_max_speed(phydev, SPEED_100); 2115 phy_support_asym_pause(phydev); 2116 break; 2117 default: 2118 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2119 return -EINVAL; 2120 } 2121 2122 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 2123 2124 phy_attached_info(phydev); 2125 2126 return 0; 2127} 2128 2129static void tg3_phy_start(struct tg3 *tp) 2130{ 2131 struct phy_device *phydev; 2132 2133 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2134 return; 2135 2136 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2137 2138 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 2139 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 2140 phydev->speed = tp->link_config.speed; 2141 phydev->duplex = tp->link_config.duplex; 2142 phydev->autoneg = tp->link_config.autoneg; 2143 ethtool_convert_legacy_u32_to_link_mode( 2144 phydev->advertising, tp->link_config.advertising); 2145 } 2146 2147 phy_start(phydev); 2148 2149 phy_start_aneg(phydev); 2150} 2151 2152static void tg3_phy_stop(struct tg3 *tp) 2153{ 2154 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2155 return; 2156 2157 phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2158} 2159 2160static void tg3_phy_fini(struct tg3 *tp) 2161{ 2162 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 2163 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2164 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 2165 } 2166} 2167 2168static int tg3_phy_set_extloopbk(struct tg3 *tp) 2169{ 2170 int err; 2171 u32 val; 2172 2173 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 2174 return 0; 2175 2176 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2177 /* Cannot do read-modify-write on 5401 */ 2178 err = tg3_phy_auxctl_write(tp, 2179 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2180 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 2181 0x4c20); 2182 goto done; 2183 } 2184 2185 err = tg3_phy_auxctl_read(tp, 2186 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2187 if (err) 2188 return err; 2189 2190 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 2191 err = tg3_phy_auxctl_write(tp, 2192 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 2193 2194done: 2195 return err; 2196} 2197 2198static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 2199{ 2200 u32 phytest; 2201 2202 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2203 u32 phy; 2204 2205 tg3_writephy(tp, MII_TG3_FET_TEST, 2206 phytest | MII_TG3_FET_SHADOW_EN); 2207 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 2208 if (enable) 2209 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 2210 else 2211 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 2212 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 2213 } 2214 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2215 } 2216} 2217 2218static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 2219{ 2220 u32 reg; 2221 2222 if (!tg3_flag(tp, 5705_PLUS) || 2223 (tg3_flag(tp, 5717_PLUS) && 2224 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2225 return; 2226 2227 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2228 tg3_phy_fet_toggle_apd(tp, enable); 2229 return; 2230 } 2231 2232 reg = MII_TG3_MISC_SHDW_SCR5_LPED | 2233 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 2234 MII_TG3_MISC_SHDW_SCR5_SDTL | 2235 MII_TG3_MISC_SHDW_SCR5_C125OE; 2236 if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable) 2237 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2238 2239 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg); 2240 2241 2242 reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2243 if (enable) 2244 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2245 2246 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg); 2247} 2248 2249static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable) 2250{ 2251 u32 phy; 2252 2253 if (!tg3_flag(tp, 5705_PLUS) || 2254 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2255 return; 2256 2257 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2258 u32 ephy; 2259 2260 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2261 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2262 2263 tg3_writephy(tp, MII_TG3_FET_TEST, 2264 ephy | MII_TG3_FET_SHADOW_EN); 2265 if (!tg3_readphy(tp, reg, &phy)) { 2266 if (enable) 2267 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2268 else 2269 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2270 tg3_writephy(tp, reg, phy); 2271 } 2272 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2273 } 2274 } else { 2275 int ret; 2276 2277 ret = tg3_phy_auxctl_read(tp, 2278 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2279 if (!ret) { 2280 if (enable) 2281 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2282 else 2283 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2284 tg3_phy_auxctl_write(tp, 2285 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2286 } 2287 } 2288} 2289 2290static void tg3_phy_set_wirespeed(struct tg3 *tp) 2291{ 2292 int ret; 2293 u32 val; 2294 2295 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2296 return; 2297 2298 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2299 if (!ret) 2300 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2301 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2302} 2303 2304static void tg3_phy_apply_otp(struct tg3 *tp) 2305{ 2306 u32 otp, phy; 2307 2308 if (!tp->phy_otp) 2309 return; 2310 2311 otp = tp->phy_otp; 2312 2313 if (tg3_phy_toggle_auxctl_smdsp(tp, true)) 2314 return; 2315 2316 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2317 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2318 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2319 2320 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2321 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2322 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2323 2324 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2325 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2326 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2327 2328 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2329 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2330 2331 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2332 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2333 2334 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2335 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2336 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2337 2338 tg3_phy_toggle_auxctl_smdsp(tp, false); 2339} 2340 2341static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee) 2342{ 2343 u32 val; 2344 struct ethtool_eee *dest = &tp->eee; 2345 2346 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2347 return; 2348 2349 if (eee) 2350 dest = eee; 2351 2352 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val)) 2353 return; 2354 2355 /* Pull eee_active */ 2356 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2357 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) { 2358 dest->eee_active = 1; 2359 } else 2360 dest->eee_active = 0; 2361 2362 /* Pull lp advertised settings */ 2363 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val)) 2364 return; 2365 dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2366 2367 /* Pull advertised and eee_enabled settings */ 2368 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val)) 2369 return; 2370 dest->eee_enabled = !!val; 2371 dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2372 2373 /* Pull tx_lpi_enabled */ 2374 val = tr32(TG3_CPMU_EEE_MODE); 2375 dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX); 2376 2377 /* Pull lpi timer value */ 2378 dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff; 2379} 2380 2381static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up) 2382{ 2383 u32 val; 2384 2385 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2386 return; 2387 2388 tp->setlpicnt = 0; 2389 2390 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2391 current_link_up && 2392 tp->link_config.active_duplex == DUPLEX_FULL && 2393 (tp->link_config.active_speed == SPEED_100 || 2394 tp->link_config.active_speed == SPEED_1000)) { 2395 u32 eeectl; 2396 2397 if (tp->link_config.active_speed == SPEED_1000) 2398 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2399 else 2400 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2401 2402 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2403 2404 tg3_eee_pull_config(tp, NULL); 2405 if (tp->eee.eee_active) 2406 tp->setlpicnt = 2; 2407 } 2408 2409 if (!tp->setlpicnt) { 2410 if (current_link_up && 2411 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2412 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2413 tg3_phy_toggle_auxctl_smdsp(tp, false); 2414 } 2415 2416 val = tr32(TG3_CPMU_EEE_MODE); 2417 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2418 } 2419} 2420 2421static void tg3_phy_eee_enable(struct tg3 *tp) 2422{ 2423 u32 val; 2424 2425 if (tp->link_config.active_speed == SPEED_1000 && 2426 (tg3_asic_rev(tp) == ASIC_REV_5717 || 2427 tg3_asic_rev(tp) == ASIC_REV_5719 || 2428 tg3_flag(tp, 57765_CLASS)) && 2429 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2430 val = MII_TG3_DSP_TAP26_ALNOKO | 2431 MII_TG3_DSP_TAP26_RMRXSTO; 2432 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2433 tg3_phy_toggle_auxctl_smdsp(tp, false); 2434 } 2435 2436 val = tr32(TG3_CPMU_EEE_MODE); 2437 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2438} 2439 2440static int tg3_wait_macro_done(struct tg3 *tp) 2441{ 2442 int limit = 100; 2443 2444 while (limit--) { 2445 u32 tmp32; 2446 2447 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2448 if ((tmp32 & 0x1000) == 0) 2449 break; 2450 } 2451 } 2452 if (limit < 0) 2453 return -EBUSY; 2454 2455 return 0; 2456} 2457 2458static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2459{ 2460 static const u32 test_pat[4][6] = { 2461 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2462 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2463 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2464 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2465 }; 2466 int chan; 2467 2468 for (chan = 0; chan < 4; chan++) { 2469 int i; 2470 2471 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2472 (chan * 0x2000) | 0x0200); 2473 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2474 2475 for (i = 0; i < 6; i++) 2476 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2477 test_pat[chan][i]); 2478 2479 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2480 if (tg3_wait_macro_done(tp)) { 2481 *resetp = 1; 2482 return -EBUSY; 2483 } 2484 2485 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2486 (chan * 0x2000) | 0x0200); 2487 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2488 if (tg3_wait_macro_done(tp)) { 2489 *resetp = 1; 2490 return -EBUSY; 2491 } 2492 2493 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2494 if (tg3_wait_macro_done(tp)) { 2495 *resetp = 1; 2496 return -EBUSY; 2497 } 2498 2499 for (i = 0; i < 6; i += 2) { 2500 u32 low, high; 2501 2502 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2503 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2504 tg3_wait_macro_done(tp)) { 2505 *resetp = 1; 2506 return -EBUSY; 2507 } 2508 low &= 0x7fff; 2509 high &= 0x000f; 2510 if (low != test_pat[chan][i] || 2511 high != test_pat[chan][i+1]) { 2512 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2513 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2514 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2515 2516 return -EBUSY; 2517 } 2518 } 2519 } 2520 2521 return 0; 2522} 2523 2524static int tg3_phy_reset_chanpat(struct tg3 *tp) 2525{ 2526 int chan; 2527 2528 for (chan = 0; chan < 4; chan++) { 2529 int i; 2530 2531 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2532 (chan * 0x2000) | 0x0200); 2533 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2534 for (i = 0; i < 6; i++) 2535 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2536 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2537 if (tg3_wait_macro_done(tp)) 2538 return -EBUSY; 2539 } 2540 2541 return 0; 2542} 2543 2544static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2545{ 2546 u32 reg32, phy9_orig; 2547 int retries, do_phy_reset, err; 2548 2549 retries = 10; 2550 do_phy_reset = 1; 2551 do { 2552 if (do_phy_reset) { 2553 err = tg3_bmcr_reset(tp); 2554 if (err) 2555 return err; 2556 do_phy_reset = 0; 2557 } 2558 2559 /* Disable transmitter and interrupt. */ 2560 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2561 continue; 2562 2563 reg32 |= 0x3000; 2564 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2565 2566 /* Set full-duplex, 1000 mbps. */ 2567 tg3_writephy(tp, MII_BMCR, 2568 BMCR_FULLDPLX | BMCR_SPEED1000); 2569 2570 /* Set to master mode. */ 2571 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2572 continue; 2573 2574 tg3_writephy(tp, MII_CTRL1000, 2575 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2576 2577 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 2578 if (err) 2579 return err; 2580 2581 /* Block the PHY control access. */ 2582 tg3_phydsp_write(tp, 0x8005, 0x0800); 2583 2584 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2585 if (!err) 2586 break; 2587 } while (--retries); 2588 2589 err = tg3_phy_reset_chanpat(tp); 2590 if (err) 2591 return err; 2592 2593 tg3_phydsp_write(tp, 0x8005, 0x0000); 2594 2595 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2596 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2597 2598 tg3_phy_toggle_auxctl_smdsp(tp, false); 2599 2600 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2601 2602 err = tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32); 2603 if (err) 2604 return err; 2605 2606 reg32 &= ~0x3000; 2607 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2608 2609 return 0; 2610} 2611 2612static void tg3_carrier_off(struct tg3 *tp) 2613{ 2614 netif_carrier_off(tp->dev); 2615 tp->link_up = false; 2616} 2617 2618static void tg3_warn_mgmt_link_flap(struct tg3 *tp) 2619{ 2620 if (tg3_flag(tp, ENABLE_ASF)) 2621 netdev_warn(tp->dev, 2622 "Management side-band traffic will be interrupted during phy settings change\n"); 2623} 2624 2625/* This will reset the tigon3 PHY if there is no valid 2626 * link unless the FORCE argument is non-zero. 2627 */ 2628static int tg3_phy_reset(struct tg3 *tp) 2629{ 2630 u32 val, cpmuctrl; 2631 int err; 2632 2633 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2634 val = tr32(GRC_MISC_CFG); 2635 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2636 udelay(40); 2637 } 2638 err = tg3_readphy(tp, MII_BMSR, &val); 2639 err |= tg3_readphy(tp, MII_BMSR, &val); 2640 if (err != 0) 2641 return -EBUSY; 2642 2643 if (netif_running(tp->dev) && tp->link_up) { 2644 netif_carrier_off(tp->dev); 2645 tg3_link_report(tp); 2646 } 2647 2648 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 2649 tg3_asic_rev(tp) == ASIC_REV_5704 || 2650 tg3_asic_rev(tp) == ASIC_REV_5705) { 2651 err = tg3_phy_reset_5703_4_5(tp); 2652 if (err) 2653 return err; 2654 goto out; 2655 } 2656 2657 cpmuctrl = 0; 2658 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 2659 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 2660 cpmuctrl = tr32(TG3_CPMU_CTRL); 2661 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2662 tw32(TG3_CPMU_CTRL, 2663 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2664 } 2665 2666 err = tg3_bmcr_reset(tp); 2667 if (err) 2668 return err; 2669 2670 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2671 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2672 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2673 2674 tw32(TG3_CPMU_CTRL, cpmuctrl); 2675 } 2676 2677 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 2678 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 2679 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2680 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2681 CPMU_LSPD_1000MB_MACCLK_12_5) { 2682 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2683 udelay(40); 2684 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2685 } 2686 } 2687 2688 if (tg3_flag(tp, 5717_PLUS) && 2689 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2690 return 0; 2691 2692 tg3_phy_apply_otp(tp); 2693 2694 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2695 tg3_phy_toggle_apd(tp, true); 2696 else 2697 tg3_phy_toggle_apd(tp, false); 2698 2699out: 2700 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2701 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2702 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2703 tg3_phydsp_write(tp, 0x000a, 0x0323); 2704 tg3_phy_toggle_auxctl_smdsp(tp, false); 2705 } 2706 2707 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2708 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2709 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2710 } 2711 2712 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2713 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2714 tg3_phydsp_write(tp, 0x000a, 0x310b); 2715 tg3_phydsp_write(tp, 0x201f, 0x9506); 2716 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2717 tg3_phy_toggle_auxctl_smdsp(tp, false); 2718 } 2719 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2720 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2721 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2722 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2723 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2724 tg3_writephy(tp, MII_TG3_TEST1, 2725 MII_TG3_TEST1_TRIM_EN | 0x4); 2726 } else 2727 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2728 2729 tg3_phy_toggle_auxctl_smdsp(tp, false); 2730 } 2731 } 2732 2733 /* Set Extended packet length bit (bit 14) on all chips that */ 2734 /* support jumbo frames */ 2735 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2736 /* Cannot do read-modify-write on 5401 */ 2737 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2738 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2739 /* Set bit 14 with read-modify-write to preserve other bits */ 2740 err = tg3_phy_auxctl_read(tp, 2741 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2742 if (!err) 2743 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2744 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2745 } 2746 2747 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2748 * jumbo frames transmission. 2749 */ 2750 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2751 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2752 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2753 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2754 } 2755 2756 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2757 /* adjust output voltage */ 2758 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2759 } 2760 2761 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0) 2762 tg3_phydsp_write(tp, 0xffb, 0x4000); 2763 2764 tg3_phy_toggle_automdix(tp, true); 2765 tg3_phy_set_wirespeed(tp); 2766 return 0; 2767} 2768 2769#define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2770#define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2771#define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2772 TG3_GPIO_MSG_NEED_VAUX) 2773#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2774 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2775 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2776 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2777 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2778 2779#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2780 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2781 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2782 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2783 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2784 2785static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2786{ 2787 u32 status, shift; 2788 2789 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2790 tg3_asic_rev(tp) == ASIC_REV_5719) 2791 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2792 else 2793 status = tr32(TG3_CPMU_DRV_STATUS); 2794 2795 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2796 status &= ~(TG3_GPIO_MSG_MASK << shift); 2797 status |= (newstat << shift); 2798 2799 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2800 tg3_asic_rev(tp) == ASIC_REV_5719) 2801 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2802 else 2803 tw32(TG3_CPMU_DRV_STATUS, status); 2804 2805 return status >> TG3_APE_GPIO_MSG_SHIFT; 2806} 2807 2808static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2809{ 2810 if (!tg3_flag(tp, IS_NIC)) 2811 return 0; 2812 2813 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2814 tg3_asic_rev(tp) == ASIC_REV_5719 || 2815 tg3_asic_rev(tp) == ASIC_REV_5720) { 2816 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2817 return -EIO; 2818 2819 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2820 2821 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2822 TG3_GRC_LCLCTL_PWRSW_DELAY); 2823 2824 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2825 } else { 2826 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2827 TG3_GRC_LCLCTL_PWRSW_DELAY); 2828 } 2829 2830 return 0; 2831} 2832 2833static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2834{ 2835 u32 grc_local_ctrl; 2836 2837 if (!tg3_flag(tp, IS_NIC) || 2838 tg3_asic_rev(tp) == ASIC_REV_5700 || 2839 tg3_asic_rev(tp) == ASIC_REV_5701) 2840 return; 2841 2842 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2843 2844 tw32_wait_f(GRC_LOCAL_CTRL, 2845 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2846 TG3_GRC_LCLCTL_PWRSW_DELAY); 2847 2848 tw32_wait_f(GRC_LOCAL_CTRL, 2849 grc_local_ctrl, 2850 TG3_GRC_LCLCTL_PWRSW_DELAY); 2851 2852 tw32_wait_f(GRC_LOCAL_CTRL, 2853 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2854 TG3_GRC_LCLCTL_PWRSW_DELAY); 2855} 2856 2857static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2858{ 2859 if (!tg3_flag(tp, IS_NIC)) 2860 return; 2861 2862 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 2863 tg3_asic_rev(tp) == ASIC_REV_5701) { 2864 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2865 (GRC_LCLCTRL_GPIO_OE0 | 2866 GRC_LCLCTRL_GPIO_OE1 | 2867 GRC_LCLCTRL_GPIO_OE2 | 2868 GRC_LCLCTRL_GPIO_OUTPUT0 | 2869 GRC_LCLCTRL_GPIO_OUTPUT1), 2870 TG3_GRC_LCLCTL_PWRSW_DELAY); 2871 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2872 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2873 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2874 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2875 GRC_LCLCTRL_GPIO_OE1 | 2876 GRC_LCLCTRL_GPIO_OE2 | 2877 GRC_LCLCTRL_GPIO_OUTPUT0 | 2878 GRC_LCLCTRL_GPIO_OUTPUT1 | 2879 tp->grc_local_ctrl; 2880 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2881 TG3_GRC_LCLCTL_PWRSW_DELAY); 2882 2883 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2884 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2885 TG3_GRC_LCLCTL_PWRSW_DELAY); 2886 2887 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2888 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2889 TG3_GRC_LCLCTL_PWRSW_DELAY); 2890 } else { 2891 u32 no_gpio2; 2892 u32 grc_local_ctrl = 0; 2893 2894 /* Workaround to prevent overdrawing Amps. */ 2895 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 2896 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2897 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2898 grc_local_ctrl, 2899 TG3_GRC_LCLCTL_PWRSW_DELAY); 2900 } 2901 2902 /* On 5753 and variants, GPIO2 cannot be used. */ 2903 no_gpio2 = tp->nic_sram_data_cfg & 2904 NIC_SRAM_DATA_CFG_NO_GPIO2; 2905 2906 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2907 GRC_LCLCTRL_GPIO_OE1 | 2908 GRC_LCLCTRL_GPIO_OE2 | 2909 GRC_LCLCTRL_GPIO_OUTPUT1 | 2910 GRC_LCLCTRL_GPIO_OUTPUT2; 2911 if (no_gpio2) { 2912 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2913 GRC_LCLCTRL_GPIO_OUTPUT2); 2914 } 2915 tw32_wait_f(GRC_LOCAL_CTRL, 2916 tp->grc_local_ctrl | grc_local_ctrl, 2917 TG3_GRC_LCLCTL_PWRSW_DELAY); 2918 2919 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2920 2921 tw32_wait_f(GRC_LOCAL_CTRL, 2922 tp->grc_local_ctrl | grc_local_ctrl, 2923 TG3_GRC_LCLCTL_PWRSW_DELAY); 2924 2925 if (!no_gpio2) { 2926 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2927 tw32_wait_f(GRC_LOCAL_CTRL, 2928 tp->grc_local_ctrl | grc_local_ctrl, 2929 TG3_GRC_LCLCTL_PWRSW_DELAY); 2930 } 2931 } 2932} 2933 2934static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2935{ 2936 u32 msg = 0; 2937 2938 /* Serialize power state transitions */ 2939 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2940 return; 2941 2942 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2943 msg = TG3_GPIO_MSG_NEED_VAUX; 2944 2945 msg = tg3_set_function_status(tp, msg); 2946 2947 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2948 goto done; 2949 2950 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2951 tg3_pwrsrc_switch_to_vaux(tp); 2952 else 2953 tg3_pwrsrc_die_with_vmain(tp); 2954 2955done: 2956 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2957} 2958 2959static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2960{ 2961 bool need_vaux = false; 2962 2963 /* The GPIOs do something completely different on 57765. */ 2964 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2965 return; 2966 2967 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2968 tg3_asic_rev(tp) == ASIC_REV_5719 || 2969 tg3_asic_rev(tp) == ASIC_REV_5720) { 2970 tg3_frob_aux_power_5717(tp, include_wol ? 2971 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2972 return; 2973 } 2974 2975 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2976 struct net_device *dev_peer; 2977 2978 dev_peer = pci_get_drvdata(tp->pdev_peer); 2979 2980 /* remove_one() may have been run on the peer. */ 2981 if (dev_peer) { 2982 struct tg3 *tp_peer = netdev_priv(dev_peer); 2983 2984 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2985 return; 2986 2987 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2988 tg3_flag(tp_peer, ENABLE_ASF)) 2989 need_vaux = true; 2990 } 2991 } 2992 2993 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 2994 tg3_flag(tp, ENABLE_ASF)) 2995 need_vaux = true; 2996 2997 if (need_vaux) 2998 tg3_pwrsrc_switch_to_vaux(tp); 2999 else 3000 tg3_pwrsrc_die_with_vmain(tp); 3001} 3002 3003static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 3004{ 3005 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 3006 return 1; 3007 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 3008 if (speed != SPEED_10) 3009 return 1; 3010 } else if (speed == SPEED_10) 3011 return 1; 3012 3013 return 0; 3014} 3015 3016static bool tg3_phy_power_bug(struct tg3 *tp) 3017{ 3018 switch (tg3_asic_rev(tp)) { 3019 case ASIC_REV_5700: 3020 case ASIC_REV_5704: 3021 return true; 3022 case ASIC_REV_5780: 3023 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3024 return true; 3025 return false; 3026 case ASIC_REV_5717: 3027 if (!tp->pci_fn) 3028 return true; 3029 return false; 3030 case ASIC_REV_5719: 3031 case ASIC_REV_5720: 3032 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 3033 !tp->pci_fn) 3034 return true; 3035 return false; 3036 } 3037 3038 return false; 3039} 3040 3041static bool tg3_phy_led_bug(struct tg3 *tp) 3042{ 3043 switch (tg3_asic_rev(tp)) { 3044 case ASIC_REV_5719: 3045 case ASIC_REV_5720: 3046 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 3047 !tp->pci_fn) 3048 return true; 3049 return false; 3050 } 3051 3052 return false; 3053} 3054 3055static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 3056{ 3057 u32 val; 3058 3059 if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) 3060 return; 3061 3062 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 3063 if (tg3_asic_rev(tp) == ASIC_REV_5704) { 3064 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 3065 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 3066 3067 sg_dig_ctrl |= 3068 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 3069 tw32(SG_DIG_CTRL, sg_dig_ctrl); 3070 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 3071 } 3072 return; 3073 } 3074 3075 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3076 tg3_bmcr_reset(tp); 3077 val = tr32(GRC_MISC_CFG); 3078 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 3079 udelay(40); 3080 return; 3081 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3082 u32 phytest; 3083 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 3084 u32 phy; 3085 3086 tg3_writephy(tp, MII_ADVERTISE, 0); 3087 tg3_writephy(tp, MII_BMCR, 3088 BMCR_ANENABLE | BMCR_ANRESTART); 3089 3090 tg3_writephy(tp, MII_TG3_FET_TEST, 3091 phytest | MII_TG3_FET_SHADOW_EN); 3092 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 3093 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 3094 tg3_writephy(tp, 3095 MII_TG3_FET_SHDW_AUXMODE4, 3096 phy); 3097 } 3098 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 3099 } 3100 return; 3101 } else if (do_low_power) { 3102 if (!tg3_phy_led_bug(tp)) 3103 tg3_writephy(tp, MII_TG3_EXT_CTRL, 3104 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 3105 3106 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3107 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 3108 MII_TG3_AUXCTL_PCTL_VREG_11V; 3109 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 3110 } 3111 3112 /* The PHY should not be powered down on some chips because 3113 * of bugs. 3114 */ 3115 if (tg3_phy_power_bug(tp)) 3116 return; 3117 3118 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 3119 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 3120 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 3121 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 3122 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 3123 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 3124 } 3125 3126 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 3127} 3128 3129/* tp->lock is held. */ 3130static int tg3_nvram_lock(struct tg3 *tp) 3131{ 3132 if (tg3_flag(tp, NVRAM)) { 3133 int i; 3134 3135 if (tp->nvram_lock_cnt == 0) { 3136 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 3137 for (i = 0; i < 8000; i++) { 3138 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 3139 break; 3140 udelay(20); 3141 } 3142 if (i == 8000) { 3143 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 3144 return -ENODEV; 3145 } 3146 } 3147 tp->nvram_lock_cnt++; 3148 } 3149 return 0; 3150} 3151 3152/* tp->lock is held. */ 3153static void tg3_nvram_unlock(struct tg3 *tp) 3154{ 3155 if (tg3_flag(tp, NVRAM)) { 3156 if (tp->nvram_lock_cnt > 0) 3157 tp->nvram_lock_cnt--; 3158 if (tp->nvram_lock_cnt == 0) 3159 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 3160 } 3161} 3162 3163/* tp->lock is held. */ 3164static void tg3_enable_nvram_access(struct tg3 *tp) 3165{ 3166 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3167 u32 nvaccess = tr32(NVRAM_ACCESS); 3168 3169 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 3170 } 3171} 3172 3173/* tp->lock is held. */ 3174static void tg3_disable_nvram_access(struct tg3 *tp) 3175{ 3176 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3177 u32 nvaccess = tr32(NVRAM_ACCESS); 3178 3179 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 3180 } 3181} 3182 3183static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 3184 u32 offset, u32 *val) 3185{ 3186 u32 tmp; 3187 int i; 3188 3189 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 3190 return -EINVAL; 3191 3192 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 3193 EEPROM_ADDR_DEVID_MASK | 3194 EEPROM_ADDR_READ); 3195 tw32(GRC_EEPROM_ADDR, 3196 tmp | 3197 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3198 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 3199 EEPROM_ADDR_ADDR_MASK) | 3200 EEPROM_ADDR_READ | EEPROM_ADDR_START); 3201 3202 for (i = 0; i < 1000; i++) { 3203 tmp = tr32(GRC_EEPROM_ADDR); 3204 3205 if (tmp & EEPROM_ADDR_COMPLETE) 3206 break; 3207 msleep(1); 3208 } 3209 if (!(tmp & EEPROM_ADDR_COMPLETE)) 3210 return -EBUSY; 3211 3212 tmp = tr32(GRC_EEPROM_DATA); 3213 3214 /* 3215 * The data will always be opposite the native endian 3216 * format. Perform a blind byteswap to compensate. 3217 */ 3218 *val = swab32(tmp); 3219 3220 return 0; 3221} 3222 3223#define NVRAM_CMD_TIMEOUT 10000 3224 3225static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 3226{ 3227 int i; 3228 3229 tw32(NVRAM_CMD, nvram_cmd); 3230 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 3231 usleep_range(10, 40); 3232 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 3233 udelay(10); 3234 break; 3235 } 3236 } 3237 3238 if (i == NVRAM_CMD_TIMEOUT) 3239 return -EBUSY; 3240 3241 return 0; 3242} 3243 3244static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 3245{ 3246 if (tg3_flag(tp, NVRAM) && 3247 tg3_flag(tp, NVRAM_BUFFERED) && 3248 tg3_flag(tp, FLASH) && 3249 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3250 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3251 3252 addr = ((addr / tp->nvram_pagesize) << 3253 ATMEL_AT45DB0X1B_PAGE_POS) + 3254 (addr % tp->nvram_pagesize); 3255 3256 return addr; 3257} 3258 3259static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 3260{ 3261 if (tg3_flag(tp, NVRAM) && 3262 tg3_flag(tp, NVRAM_BUFFERED) && 3263 tg3_flag(tp, FLASH) && 3264 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3265 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3266 3267 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 3268 tp->nvram_pagesize) + 3269 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 3270 3271 return addr; 3272} 3273 3274/* NOTE: Data read in from NVRAM is byteswapped according to 3275 * the byteswapping settings for all other register accesses. 3276 * tg3 devices are BE devices, so on a BE machine, the data 3277 * returned will be exactly as it is seen in NVRAM. On a LE 3278 * machine, the 32-bit value will be byteswapped. 3279 */ 3280static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 3281{ 3282 int ret; 3283 3284 if (!tg3_flag(tp, NVRAM)) 3285 return tg3_nvram_read_using_eeprom(tp, offset, val); 3286 3287 offset = tg3_nvram_phys_addr(tp, offset); 3288 3289 if (offset > NVRAM_ADDR_MSK) 3290 return -EINVAL; 3291 3292 ret = tg3_nvram_lock(tp); 3293 if (ret) 3294 return ret; 3295 3296 tg3_enable_nvram_access(tp); 3297 3298 tw32(NVRAM_ADDR, offset); 3299 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 3300 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 3301 3302 if (ret == 0) 3303 *val = tr32(NVRAM_RDDATA); 3304 3305 tg3_disable_nvram_access(tp); 3306 3307 tg3_nvram_unlock(tp); 3308 3309 return ret; 3310} 3311 3312/* Ensures NVRAM data is in bytestream format. */ 3313static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 3314{ 3315 u32 v; 3316 int res = tg3_nvram_read(tp, offset, &v); 3317 if (!res) 3318 *val = cpu_to_be32(v); 3319 return res; 3320} 3321 3322static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 3323 u32 offset, u32 len, u8 *buf) 3324{ 3325 int i, j, rc = 0; 3326 u32 val; 3327 3328 for (i = 0; i < len; i += 4) { 3329 u32 addr; 3330 __be32 data; 3331 3332 addr = offset + i; 3333 3334 memcpy(&data, buf + i, 4); 3335 3336 /* 3337 * The SEEPROM interface expects the data to always be opposite 3338 * the native endian format. We accomplish this by reversing 3339 * all the operations that would have been performed on the 3340 * data from a call to tg3_nvram_read_be32(). 3341 */ 3342 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3343 3344 val = tr32(GRC_EEPROM_ADDR); 3345 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3346 3347 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3348 EEPROM_ADDR_READ); 3349 tw32(GRC_EEPROM_ADDR, val | 3350 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3351 (addr & EEPROM_ADDR_ADDR_MASK) | 3352 EEPROM_ADDR_START | 3353 EEPROM_ADDR_WRITE); 3354 3355 for (j = 0; j < 1000; j++) { 3356 val = tr32(GRC_EEPROM_ADDR); 3357 3358 if (val & EEPROM_ADDR_COMPLETE) 3359 break; 3360 msleep(1); 3361 } 3362 if (!(val & EEPROM_ADDR_COMPLETE)) { 3363 rc = -EBUSY; 3364 break; 3365 } 3366 } 3367 3368 return rc; 3369} 3370 3371/* offset and length are dword aligned */ 3372static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3373 u8 *buf) 3374{ 3375 int ret = 0; 3376 u32 pagesize = tp->nvram_pagesize; 3377 u32 pagemask = pagesize - 1; 3378 u32 nvram_cmd; 3379 u8 *tmp; 3380 3381 tmp = kmalloc(pagesize, GFP_KERNEL); 3382 if (tmp == NULL) 3383 return -ENOMEM; 3384 3385 while (len) { 3386 int j; 3387 u32 phy_addr, page_off, size; 3388 3389 phy_addr = offset & ~pagemask; 3390 3391 for (j = 0; j < pagesize; j += 4) { 3392 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3393 (__be32 *) (tmp + j)); 3394 if (ret) 3395 break; 3396 } 3397 if (ret) 3398 break; 3399 3400 page_off = offset & pagemask; 3401 size = pagesize; 3402 if (len < size) 3403 size = len; 3404 3405 len -= size; 3406 3407 memcpy(tmp + page_off, buf, size); 3408 3409 offset = offset + (pagesize - page_off); 3410 3411 tg3_enable_nvram_access(tp); 3412 3413 /* 3414 * Before we can erase the flash page, we need 3415 * to issue a special "write enable" command. 3416 */ 3417 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3418 3419 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3420 break; 3421 3422 /* Erase the target page */ 3423 tw32(NVRAM_ADDR, phy_addr); 3424 3425 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3426 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3427 3428 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3429 break; 3430 3431 /* Issue another write enable to start the write. */ 3432 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3433 3434 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3435 break; 3436 3437 for (j = 0; j < pagesize; j += 4) { 3438 __be32 data; 3439 3440 data = *((__be32 *) (tmp + j)); 3441 3442 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3443 3444 tw32(NVRAM_ADDR, phy_addr + j); 3445 3446 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3447 NVRAM_CMD_WR; 3448 3449 if (j == 0) 3450 nvram_cmd |= NVRAM_CMD_FIRST; 3451 else if (j == (pagesize - 4)) 3452 nvram_cmd |= NVRAM_CMD_LAST; 3453 3454 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3455 if (ret) 3456 break; 3457 } 3458 if (ret) 3459 break; 3460 } 3461 3462 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3463 tg3_nvram_exec_cmd(tp, nvram_cmd); 3464 3465 kfree(tmp); 3466 3467 return ret; 3468} 3469 3470/* offset and length are dword aligned */ 3471static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3472 u8 *buf) 3473{ 3474 int i, ret = 0; 3475 3476 for (i = 0; i < len; i += 4, offset += 4) { 3477 u32 page_off, phy_addr, nvram_cmd; 3478 __be32 data; 3479 3480 memcpy(&data, buf + i, 4); 3481 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3482 3483 page_off = offset % tp->nvram_pagesize; 3484 3485 phy_addr = tg3_nvram_phys_addr(tp, offset); 3486 3487 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3488 3489 if (page_off == 0 || i == 0) 3490 nvram_cmd |= NVRAM_CMD_FIRST; 3491 if (page_off == (tp->nvram_pagesize - 4)) 3492 nvram_cmd |= NVRAM_CMD_LAST; 3493 3494 if (i == (len - 4)) 3495 nvram_cmd |= NVRAM_CMD_LAST; 3496 3497 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3498 !tg3_flag(tp, FLASH) || 3499 !tg3_flag(tp, 57765_PLUS)) 3500 tw32(NVRAM_ADDR, phy_addr); 3501 3502 if (tg3_asic_rev(tp) != ASIC_REV_5752 && 3503 !tg3_flag(tp, 5755_PLUS) && 3504 (tp->nvram_jedecnum == JEDEC_ST) && 3505 (nvram_cmd & NVRAM_CMD_FIRST)) { 3506 u32 cmd; 3507 3508 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3509 ret = tg3_nvram_exec_cmd(tp, cmd); 3510 if (ret) 3511 break; 3512 } 3513 if (!tg3_flag(tp, FLASH)) { 3514 /* We always do complete word writes to eeprom. */ 3515 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3516 } 3517 3518 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3519 if (ret) 3520 break; 3521 } 3522 return ret; 3523} 3524 3525/* offset and length are dword aligned */ 3526static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3527{ 3528 int ret; 3529 3530 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3531 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3532 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3533 udelay(40); 3534 } 3535 3536 if (!tg3_flag(tp, NVRAM)) { 3537 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3538 } else { 3539 u32 grc_mode; 3540 3541 ret = tg3_nvram_lock(tp); 3542 if (ret) 3543 return ret; 3544 3545 tg3_enable_nvram_access(tp); 3546 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3547 tw32(NVRAM_WRITE1, 0x406); 3548 3549 grc_mode = tr32(GRC_MODE); 3550 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3551 3552 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3553 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3554 buf); 3555 } else { 3556 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3557 buf); 3558 } 3559 3560 grc_mode = tr32(GRC_MODE); 3561 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3562 3563 tg3_disable_nvram_access(tp); 3564 tg3_nvram_unlock(tp); 3565 } 3566 3567 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3568 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3569 udelay(40); 3570 } 3571 3572 return ret; 3573} 3574 3575#define RX_CPU_SCRATCH_BASE 0x30000 3576#define RX_CPU_SCRATCH_SIZE 0x04000 3577#define TX_CPU_SCRATCH_BASE 0x34000 3578#define TX_CPU_SCRATCH_SIZE 0x04000 3579 3580/* tp->lock is held. */ 3581static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base) 3582{ 3583 int i; 3584 const int iters = 10000; 3585 3586 for (i = 0; i < iters; i++) { 3587 tw32(cpu_base + CPU_STATE, 0xffffffff); 3588 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3589 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT) 3590 break; 3591 if (pci_channel_offline(tp->pdev)) 3592 return -EBUSY; 3593 } 3594 3595 return (i == iters) ? -EBUSY : 0; 3596} 3597 3598/* tp->lock is held. */ 3599static int tg3_rxcpu_pause(struct tg3 *tp) 3600{ 3601 int rc = tg3_pause_cpu(tp, RX_CPU_BASE); 3602 3603 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3604 tw32_f(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3605 udelay(10); 3606 3607 return rc; 3608} 3609 3610/* tp->lock is held. */ 3611static int tg3_txcpu_pause(struct tg3 *tp) 3612{ 3613 return tg3_pause_cpu(tp, TX_CPU_BASE); 3614} 3615 3616/* tp->lock is held. */ 3617static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base) 3618{ 3619 tw32(cpu_base + CPU_STATE, 0xffffffff); 3620 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3621} 3622 3623/* tp->lock is held. */ 3624static void tg3_rxcpu_resume(struct tg3 *tp) 3625{ 3626 tg3_resume_cpu(tp, RX_CPU_BASE); 3627} 3628 3629/* tp->lock is held. */ 3630static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base) 3631{ 3632 int rc; 3633 3634 BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3635 3636 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3637 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3638 3639 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3640 return 0; 3641 } 3642 if (cpu_base == RX_CPU_BASE) { 3643 rc = tg3_rxcpu_pause(tp); 3644 } else { 3645 /* 3646 * There is only an Rx CPU for the 5750 derivative in the 3647 * BCM4785. 3648 */ 3649 if (tg3_flag(tp, IS_SSB_CORE)) 3650 return 0; 3651 3652 rc = tg3_txcpu_pause(tp); 3653 } 3654 3655 if (rc) { 3656 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3657 __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX"); 3658 return -ENODEV; 3659 } 3660 3661 /* Clear firmware's nvram arbitration. */ 3662 if (tg3_flag(tp, NVRAM)) 3663 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3664 return 0; 3665} 3666 3667static int tg3_fw_data_len(struct tg3 *tp, 3668 const struct tg3_firmware_hdr *fw_hdr) 3669{ 3670 int fw_len; 3671 3672 /* Non fragmented firmware have one firmware header followed by a 3673 * contiguous chunk of data to be written. The length field in that 3674 * header is not the length of data to be written but the complete 3675 * length of the bss. The data length is determined based on 3676 * tp->fw->size minus headers. 3677 * 3678 * Fragmented firmware have a main header followed by multiple 3679 * fragments. Each fragment is identical to non fragmented firmware 3680 * with a firmware header followed by a contiguous chunk of data. In 3681 * the main header, the length field is unused and set to 0xffffffff. 3682 * In each fragment header the length is the entire size of that 3683 * fragment i.e. fragment data + header length. Data length is 3684 * therefore length field in the header minus TG3_FW_HDR_LEN. 3685 */ 3686 if (tp->fw_len == 0xffffffff) 3687 fw_len = be32_to_cpu(fw_hdr->len); 3688 else 3689 fw_len = tp->fw->size; 3690 3691 return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32); 3692} 3693 3694/* tp->lock is held. */ 3695static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3696 u32 cpu_scratch_base, int cpu_scratch_size, 3697 const struct tg3_firmware_hdr *fw_hdr) 3698{ 3699 int err, i; 3700 void (*write_op)(struct tg3 *, u32, u32); 3701 int total_len = tp->fw->size; 3702 3703 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3704 netdev_err(tp->dev, 3705 "%s: Trying to load TX cpu firmware which is 5705\n", 3706 __func__); 3707 return -EINVAL; 3708 } 3709 3710 if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766) 3711 write_op = tg3_write_mem; 3712 else 3713 write_op = tg3_write_indirect_reg32; 3714 3715 if (tg3_asic_rev(tp) != ASIC_REV_57766) { 3716 /* It is possible that bootcode is still loading at this point. 3717 * Get the nvram lock first before halting the cpu. 3718 */ 3719 int lock_err = tg3_nvram_lock(tp); 3720 err = tg3_halt_cpu(tp, cpu_base); 3721 if (!lock_err) 3722 tg3_nvram_unlock(tp); 3723 if (err) 3724 goto out; 3725 3726 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3727 write_op(tp, cpu_scratch_base + i, 0); 3728 tw32(cpu_base + CPU_STATE, 0xffffffff); 3729 tw32(cpu_base + CPU_MODE, 3730 tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT); 3731 } else { 3732 /* Subtract additional main header for fragmented firmware and 3733 * advance to the first fragment 3734 */ 3735 total_len -= TG3_FW_HDR_LEN; 3736 fw_hdr++; 3737 } 3738 3739 do { 3740 u32 *fw_data = (u32 *)(fw_hdr + 1); 3741 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++) 3742 write_op(tp, cpu_scratch_base + 3743 (be32_to_cpu(fw_hdr->base_addr) & 0xffff) + 3744 (i * sizeof(u32)), 3745 be32_to_cpu(fw_data[i])); 3746 3747 total_len -= be32_to_cpu(fw_hdr->len); 3748 3749 /* Advance to next fragment */ 3750 fw_hdr = (struct tg3_firmware_hdr *) 3751 ((void *)fw_hdr + be32_to_cpu(fw_hdr->len)); 3752 } while (total_len > 0); 3753 3754 err = 0; 3755 3756out: 3757 return err; 3758} 3759 3760/* tp->lock is held. */ 3761static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc) 3762{ 3763 int i; 3764 const int iters = 5; 3765 3766 tw32(cpu_base + CPU_STATE, 0xffffffff); 3767 tw32_f(cpu_base + CPU_PC, pc); 3768 3769 for (i = 0; i < iters; i++) { 3770 if (tr32(cpu_base + CPU_PC) == pc) 3771 break; 3772 tw32(cpu_base + CPU_STATE, 0xffffffff); 3773 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3774 tw32_f(cpu_base + CPU_PC, pc); 3775 udelay(1000); 3776 } 3777 3778 return (i == iters) ? -EBUSY : 0; 3779} 3780 3781/* tp->lock is held. */ 3782static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3783{ 3784 const struct tg3_firmware_hdr *fw_hdr; 3785 int err; 3786 3787 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3788 3789 /* Firmware blob starts with version numbers, followed by 3790 start address and length. We are setting complete length. 3791 length = end_address_of_bss - start_address_of_text. 3792 Remainder is the blob to be loaded contiguously 3793 from start address. */ 3794 3795 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3796 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3797 fw_hdr); 3798 if (err) 3799 return err; 3800 3801 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3802 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3803 fw_hdr); 3804 if (err) 3805 return err; 3806 3807 /* Now startup only the RX cpu. */ 3808 err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE, 3809 be32_to_cpu(fw_hdr->base_addr)); 3810 if (err) { 3811 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3812 "should be %08x\n", __func__, 3813 tr32(RX_CPU_BASE + CPU_PC), 3814 be32_to_cpu(fw_hdr->base_addr)); 3815 return -ENODEV; 3816 } 3817 3818 tg3_rxcpu_resume(tp); 3819 3820 return 0; 3821} 3822 3823static int tg3_validate_rxcpu_state(struct tg3 *tp) 3824{ 3825 const int iters = 1000; 3826 int i; 3827 u32 val; 3828 3829 /* Wait for boot code to complete initialization and enter service 3830 * loop. It is then safe to download service patches 3831 */ 3832 for (i = 0; i < iters; i++) { 3833 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP) 3834 break; 3835 3836 udelay(10); 3837 } 3838 3839 if (i == iters) { 3840 netdev_err(tp->dev, "Boot code not ready for service patches\n"); 3841 return -EBUSY; 3842 } 3843 3844 val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE); 3845 if (val & 0xff) { 3846 netdev_warn(tp->dev, 3847 "Other patches exist. Not downloading EEE patch\n"); 3848 return -EEXIST; 3849 } 3850 3851 return 0; 3852} 3853 3854/* tp->lock is held. */ 3855static void tg3_load_57766_firmware(struct tg3 *tp) 3856{ 3857 struct tg3_firmware_hdr *fw_hdr; 3858 3859 if (!tg3_flag(tp, NO_NVRAM)) 3860 return; 3861 3862 if (tg3_validate_rxcpu_state(tp)) 3863 return; 3864 3865 if (!tp->fw) 3866 return; 3867 3868 /* This firmware blob has a different format than older firmware 3869 * releases as given below. The main difference is we have fragmented 3870 * data to be written to non-contiguous locations. 3871 * 3872 * In the beginning we have a firmware header identical to other 3873 * firmware which consists of version, base addr and length. The length 3874 * here is unused and set to 0xffffffff. 3875 * 3876 * This is followed by a series of firmware fragments which are 3877 * individually identical to previous firmware. i.e. they have the 3878 * firmware header and followed by data for that fragment. The version 3879 * field of the individual fragment header is unused. 3880 */ 3881 3882 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3883 if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR) 3884 return; 3885 3886 if (tg3_rxcpu_pause(tp)) 3887 return; 3888 3889 /* tg3_load_firmware_cpu() will always succeed for the 57766 */ 3890 tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr); 3891 3892 tg3_rxcpu_resume(tp); 3893} 3894 3895/* tp->lock is held. */ 3896static int tg3_load_tso_firmware(struct tg3 *tp) 3897{ 3898 const struct tg3_firmware_hdr *fw_hdr; 3899 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3900 int err; 3901 3902 if (!tg3_flag(tp, FW_TSO)) 3903 return 0; 3904 3905 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3906 3907 /* Firmware blob starts with version numbers, followed by 3908 start address and length. We are setting complete length. 3909 length = end_address_of_bss - start_address_of_text. 3910 Remainder is the blob to be loaded contiguously 3911 from start address. */ 3912 3913 cpu_scratch_size = tp->fw_len; 3914 3915 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 3916 cpu_base = RX_CPU_BASE; 3917 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3918 } else { 3919 cpu_base = TX_CPU_BASE; 3920 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3921 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3922 } 3923 3924 err = tg3_load_firmware_cpu(tp, cpu_base, 3925 cpu_scratch_base, cpu_scratch_size, 3926 fw_hdr); 3927 if (err) 3928 return err; 3929 3930 /* Now startup the cpu. */ 3931 err = tg3_pause_cpu_and_set_pc(tp, cpu_base, 3932 be32_to_cpu(fw_hdr->base_addr)); 3933 if (err) { 3934 netdev_err(tp->dev, 3935 "%s fails to set CPU PC, is %08x should be %08x\n", 3936 __func__, tr32(cpu_base + CPU_PC), 3937 be32_to_cpu(fw_hdr->base_addr)); 3938 return -ENODEV; 3939 } 3940 3941 tg3_resume_cpu(tp, cpu_base); 3942 return 0; 3943} 3944 3945/* tp->lock is held. */ 3946static void __tg3_set_one_mac_addr(struct tg3 *tp, const u8 *mac_addr, 3947 int index) 3948{ 3949 u32 addr_high, addr_low; 3950 3951 addr_high = ((mac_addr[0] << 8) | mac_addr[1]); 3952 addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) | 3953 (mac_addr[4] << 8) | mac_addr[5]); 3954 3955 if (index < 4) { 3956 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high); 3957 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low); 3958 } else { 3959 index -= 4; 3960 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high); 3961 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low); 3962 } 3963} 3964 3965/* tp->lock is held. */ 3966static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) 3967{ 3968 u32 addr_high; 3969 int i; 3970 3971 for (i = 0; i < 4; i++) { 3972 if (i == 1 && skip_mac_1) 3973 continue; 3974 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3975 } 3976 3977 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 3978 tg3_asic_rev(tp) == ASIC_REV_5704) { 3979 for (i = 4; i < 16; i++) 3980 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3981 } 3982 3983 addr_high = (tp->dev->dev_addr[0] + 3984 tp->dev->dev_addr[1] + 3985 tp->dev->dev_addr[2] + 3986 tp->dev->dev_addr[3] + 3987 tp->dev->dev_addr[4] + 3988 tp->dev->dev_addr[5]) & 3989 TX_BACKOFF_SEED_MASK; 3990 tw32(MAC_TX_BACKOFF_SEED, addr_high); 3991} 3992 3993static void tg3_enable_register_access(struct tg3 *tp) 3994{ 3995 /* 3996 * Make sure register accesses (indirect or otherwise) will function 3997 * correctly. 3998 */ 3999 pci_write_config_dword(tp->pdev, 4000 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 4001} 4002 4003static int tg3_power_up(struct tg3 *tp) 4004{ 4005 int err; 4006 4007 tg3_enable_register_access(tp); 4008 4009 err = pci_set_power_state(tp->pdev, PCI_D0); 4010 if (!err) { 4011 /* Switch out of Vaux if it is a NIC */ 4012 tg3_pwrsrc_switch_to_vmain(tp); 4013 } else { 4014 netdev_err(tp->dev, "Transition to D0 failed\n"); 4015 } 4016 4017 return err; 4018} 4019 4020static int tg3_setup_phy(struct tg3 *, bool); 4021 4022static int tg3_power_down_prepare(struct tg3 *tp) 4023{ 4024 u32 misc_host_ctrl; 4025 bool device_should_wake, do_low_power; 4026 4027 tg3_enable_register_access(tp); 4028 4029 /* Restore the CLKREQ setting. */ 4030 if (tg3_flag(tp, CLKREQ_BUG)) 4031 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 4032 PCI_EXP_LNKCTL_CLKREQ_EN); 4033 4034 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 4035 tw32(TG3PCI_MISC_HOST_CTRL, 4036 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 4037 4038 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 4039 tg3_flag(tp, WOL_ENABLE); 4040 4041 if (tg3_flag(tp, USE_PHYLIB)) { 4042 do_low_power = false; 4043 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 4044 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4045 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, }; 4046 struct phy_device *phydev; 4047 u32 phyid; 4048 4049 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 4050 4051 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4052 4053 tp->link_config.speed = phydev->speed; 4054 tp->link_config.duplex = phydev->duplex; 4055 tp->link_config.autoneg = phydev->autoneg; 4056 ethtool_convert_link_mode_to_legacy_u32( 4057 &tp->link_config.advertising, 4058 phydev->advertising); 4059 4060 linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising); 4061 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, 4062 advertising); 4063 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 4064 advertising); 4065 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, 4066 advertising); 4067 4068 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 4069 if (tg3_flag(tp, WOL_SPEED_100MB)) { 4070 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 4071 advertising); 4072 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 4073 advertising); 4074 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 4075 advertising); 4076 } else { 4077 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 4078 advertising); 4079 } 4080 } 4081 4082 linkmode_copy(phydev->advertising, advertising); 4083 phy_start_aneg(phydev); 4084 4085 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 4086 if (phyid != PHY_ID_BCMAC131) { 4087 phyid &= PHY_BCM_OUI_MASK; 4088 if (phyid == PHY_BCM_OUI_1 || 4089 phyid == PHY_BCM_OUI_2 || 4090 phyid == PHY_BCM_OUI_3) 4091 do_low_power = true; 4092 } 4093 } 4094 } else { 4095 do_low_power = true; 4096 4097 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 4098 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4099 4100 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 4101 tg3_setup_phy(tp, false); 4102 } 4103 4104 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 4105 u32 val; 4106 4107 val = tr32(GRC_VCPU_EXT_CTRL); 4108 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 4109 } else if (!tg3_flag(tp, ENABLE_ASF)) { 4110 int i; 4111 u32 val; 4112 4113 for (i = 0; i < 200; i++) { 4114 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 4115 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 4116 break; 4117 msleep(1); 4118 } 4119 } 4120 if (tg3_flag(tp, WOL_CAP)) 4121 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 4122 WOL_DRV_STATE_SHUTDOWN | 4123 WOL_DRV_WOL | 4124 WOL_SET_MAGIC_PKT); 4125 4126 if (device_should_wake) { 4127 u32 mac_mode; 4128 4129 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 4130 if (do_low_power && 4131 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 4132 tg3_phy_auxctl_write(tp, 4133 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 4134 MII_TG3_AUXCTL_PCTL_WOL_EN | 4135 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 4136 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 4137 udelay(40); 4138 } 4139 4140 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4141 mac_mode = MAC_MODE_PORT_MODE_GMII; 4142 else if (tp->phy_flags & 4143 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) { 4144 if (tp->link_config.active_speed == SPEED_1000) 4145 mac_mode = MAC_MODE_PORT_MODE_GMII; 4146 else 4147 mac_mode = MAC_MODE_PORT_MODE_MII; 4148 } else 4149 mac_mode = MAC_MODE_PORT_MODE_MII; 4150 4151 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 4152 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 4153 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 4154 SPEED_100 : SPEED_10; 4155 if (tg3_5700_link_polarity(tp, speed)) 4156 mac_mode |= MAC_MODE_LINK_POLARITY; 4157 else 4158 mac_mode &= ~MAC_MODE_LINK_POLARITY; 4159 } 4160 } else { 4161 mac_mode = MAC_MODE_PORT_MODE_TBI; 4162 } 4163 4164 if (!tg3_flag(tp, 5750_PLUS)) 4165 tw32(MAC_LED_CTRL, tp->led_ctrl); 4166 4167 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 4168 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 4169 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 4170 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 4171 4172 if (tg3_flag(tp, ENABLE_APE)) 4173 mac_mode |= MAC_MODE_APE_TX_EN | 4174 MAC_MODE_APE_RX_EN | 4175 MAC_MODE_TDE_ENABLE; 4176 4177 tw32_f(MAC_MODE, mac_mode); 4178 udelay(100); 4179 4180 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 4181 udelay(10); 4182 } 4183 4184 if (!tg3_flag(tp, WOL_SPEED_100MB) && 4185 (tg3_asic_rev(tp) == ASIC_REV_5700 || 4186 tg3_asic_rev(tp) == ASIC_REV_5701)) { 4187 u32 base_val; 4188 4189 base_val = tp->pci_clock_ctrl; 4190 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 4191 CLOCK_CTRL_TXCLK_DISABLE); 4192 4193 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 4194 CLOCK_CTRL_PWRDOWN_PLL133, 40); 4195 } else if (tg3_flag(tp, 5780_CLASS) || 4196 tg3_flag(tp, CPMU_PRESENT) || 4197 tg3_asic_rev(tp) == ASIC_REV_5906) { 4198 /* do nothing */ 4199 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 4200 u32 newbits1, newbits2; 4201 4202 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4203 tg3_asic_rev(tp) == ASIC_REV_5701) { 4204 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 4205 CLOCK_CTRL_TXCLK_DISABLE | 4206 CLOCK_CTRL_ALTCLK); 4207 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4208 } else if (tg3_flag(tp, 5705_PLUS)) { 4209 newbits1 = CLOCK_CTRL_625_CORE; 4210 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 4211 } else { 4212 newbits1 = CLOCK_CTRL_ALTCLK; 4213 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4214 } 4215 4216 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 4217 40); 4218 4219 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 4220 40); 4221 4222 if (!tg3_flag(tp, 5705_PLUS)) { 4223 u32 newbits3; 4224 4225 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4226 tg3_asic_rev(tp) == ASIC_REV_5701) { 4227 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 4228 CLOCK_CTRL_TXCLK_DISABLE | 4229 CLOCK_CTRL_44MHZ_CORE); 4230 } else { 4231 newbits3 = CLOCK_CTRL_44MHZ_CORE; 4232 } 4233 4234 tw32_wait_f(TG3PCI_CLOCK_CTRL, 4235 tp->pci_clock_ctrl | newbits3, 40); 4236 } 4237 } 4238 4239 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 4240 tg3_power_down_phy(tp, do_low_power); 4241 4242 tg3_frob_aux_power(tp, true); 4243 4244 /* Workaround for unstable PLL clock */ 4245 if ((!tg3_flag(tp, IS_SSB_CORE)) && 4246 ((tg3_chip_rev(tp) == CHIPREV_5750_AX) || 4247 (tg3_chip_rev(tp) == CHIPREV_5750_BX))) { 4248 u32 val = tr32(0x7d00); 4249 4250 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 4251 tw32(0x7d00, val); 4252 if (!tg3_flag(tp, ENABLE_ASF)) { 4253 int err; 4254 4255 err = tg3_nvram_lock(tp); 4256 tg3_halt_cpu(tp, RX_CPU_BASE); 4257 if (!err) 4258 tg3_nvram_unlock(tp); 4259 } 4260 } 4261 4262 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 4263 4264 tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN); 4265 4266 return 0; 4267} 4268 4269static void tg3_power_down(struct tg3 *tp) 4270{ 4271 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 4272 pci_set_power_state(tp->pdev, PCI_D3hot); 4273} 4274 4275static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex) 4276{ 4277 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 4278 case MII_TG3_AUX_STAT_10HALF: 4279 *speed = SPEED_10; 4280 *duplex = DUPLEX_HALF; 4281 break; 4282 4283 case MII_TG3_AUX_STAT_10FULL: 4284 *speed = SPEED_10; 4285 *duplex = DUPLEX_FULL; 4286 break; 4287 4288 case MII_TG3_AUX_STAT_100HALF: 4289 *speed = SPEED_100; 4290 *duplex = DUPLEX_HALF; 4291 break; 4292 4293 case MII_TG3_AUX_STAT_100FULL: 4294 *speed = SPEED_100; 4295 *duplex = DUPLEX_FULL; 4296 break; 4297 4298 case MII_TG3_AUX_STAT_1000HALF: 4299 *speed = SPEED_1000; 4300 *duplex = DUPLEX_HALF; 4301 break; 4302 4303 case MII_TG3_AUX_STAT_1000FULL: 4304 *speed = SPEED_1000; 4305 *duplex = DUPLEX_FULL; 4306 break; 4307 4308 default: 4309 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4310 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 4311 SPEED_10; 4312 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 4313 DUPLEX_HALF; 4314 break; 4315 } 4316 *speed = SPEED_UNKNOWN; 4317 *duplex = DUPLEX_UNKNOWN; 4318 break; 4319 } 4320} 4321 4322static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 4323{ 4324 int err = 0; 4325 u32 val, new_adv; 4326 4327 new_adv = ADVERTISE_CSMA; 4328 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 4329 new_adv |= mii_advertise_flowctrl(flowctrl); 4330 4331 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 4332 if (err) 4333 goto done; 4334 4335 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4336 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 4337 4338 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4339 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) 4340 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4341 4342 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 4343 if (err) 4344 goto done; 4345 } 4346 4347 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4348 goto done; 4349 4350 tw32(TG3_CPMU_EEE_MODE, 4351 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 4352 4353 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 4354 if (!err) { 4355 u32 err2; 4356 4357 val = 0; 4358 /* Advertise 100-BaseTX EEE ability */ 4359 if (advertise & ADVERTISED_100baseT_Full) 4360 val |= MDIO_AN_EEE_ADV_100TX; 4361 /* Advertise 1000-BaseT EEE ability */ 4362 if (advertise & ADVERTISED_1000baseT_Full) 4363 val |= MDIO_AN_EEE_ADV_1000T; 4364 4365 if (!tp->eee.eee_enabled) { 4366 val = 0; 4367 tp->eee.advertised = 0; 4368 } else { 4369 tp->eee.advertised = advertise & 4370 (ADVERTISED_100baseT_Full | 4371 ADVERTISED_1000baseT_Full); 4372 } 4373 4374 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 4375 if (err) 4376 val = 0; 4377 4378 switch (tg3_asic_rev(tp)) { 4379 case ASIC_REV_5717: 4380 case ASIC_REV_57765: 4381 case ASIC_REV_57766: 4382 case ASIC_REV_5719: 4383 /* If we advertised any eee advertisements above... */ 4384 if (val) 4385 val = MII_TG3_DSP_TAP26_ALNOKO | 4386 MII_TG3_DSP_TAP26_RMRXSTO | 4387 MII_TG3_DSP_TAP26_OPCSINPT; 4388 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 4389 fallthrough; 4390 case ASIC_REV_5720: 4391 case ASIC_REV_5762: 4392 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 4393 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 4394 MII_TG3_DSP_CH34TP2_HIBW01); 4395 } 4396 4397 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false); 4398 if (!err) 4399 err = err2; 4400 } 4401 4402done: 4403 return err; 4404} 4405 4406static void tg3_phy_copper_begin(struct tg3 *tp) 4407{ 4408 if (tp->link_config.autoneg == AUTONEG_ENABLE || 4409 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4410 u32 adv, fc; 4411 4412 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4413 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4414 adv = ADVERTISED_10baseT_Half | 4415 ADVERTISED_10baseT_Full; 4416 if (tg3_flag(tp, WOL_SPEED_100MB)) 4417 adv |= ADVERTISED_100baseT_Half | 4418 ADVERTISED_100baseT_Full; 4419 if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) { 4420 if (!(tp->phy_flags & 4421 TG3_PHYFLG_DISABLE_1G_HD_ADV)) 4422 adv |= ADVERTISED_1000baseT_Half; 4423 adv |= ADVERTISED_1000baseT_Full; 4424 } 4425 4426 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 4427 } else { 4428 adv = tp->link_config.advertising; 4429 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 4430 adv &= ~(ADVERTISED_1000baseT_Half | 4431 ADVERTISED_1000baseT_Full); 4432 4433 fc = tp->link_config.flowctrl; 4434 } 4435 4436 tg3_phy_autoneg_cfg(tp, adv, fc); 4437 4438 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4439 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4440 /* Normally during power down we want to autonegotiate 4441 * the lowest possible speed for WOL. However, to avoid 4442 * link flap, we leave it untouched. 4443 */ 4444 return; 4445 } 4446 4447 tg3_writephy(tp, MII_BMCR, 4448 BMCR_ANENABLE | BMCR_ANRESTART); 4449 } else { 4450 int i; 4451 u32 bmcr, orig_bmcr; 4452 4453 tp->link_config.active_speed = tp->link_config.speed; 4454 tp->link_config.active_duplex = tp->link_config.duplex; 4455 4456 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 4457 /* With autoneg disabled, 5715 only links up when the 4458 * advertisement register has the configured speed 4459 * enabled. 4460 */ 4461 tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL); 4462 } 4463 4464 bmcr = 0; 4465 switch (tp->link_config.speed) { 4466 default: 4467 case SPEED_10: 4468 break; 4469 4470 case SPEED_100: 4471 bmcr |= BMCR_SPEED100; 4472 break; 4473 4474 case SPEED_1000: 4475 bmcr |= BMCR_SPEED1000; 4476 break; 4477 } 4478 4479 if (tp->link_config.duplex == DUPLEX_FULL) 4480 bmcr |= BMCR_FULLDPLX; 4481 4482 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 4483 (bmcr != orig_bmcr)) { 4484 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 4485 for (i = 0; i < 1500; i++) { 4486 u32 tmp; 4487 4488 udelay(10); 4489 if (tg3_readphy(tp, MII_BMSR, &tmp) || 4490 tg3_readphy(tp, MII_BMSR, &tmp)) 4491 continue; 4492 if (!(tmp & BMSR_LSTATUS)) { 4493 udelay(40); 4494 break; 4495 } 4496 } 4497 tg3_writephy(tp, MII_BMCR, bmcr); 4498 udelay(40); 4499 } 4500 } 4501} 4502 4503static int tg3_phy_pull_config(struct tg3 *tp) 4504{ 4505 int err; 4506 u32 val; 4507 4508 err = tg3_readphy(tp, MII_BMCR, &val); 4509 if (err) 4510 goto done; 4511 4512 if (!(val & BMCR_ANENABLE)) { 4513 tp->link_config.autoneg = AUTONEG_DISABLE; 4514 tp->link_config.advertising = 0; 4515 tg3_flag_clear(tp, PAUSE_AUTONEG); 4516 4517 err = -EIO; 4518 4519 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) { 4520 case 0: 4521 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4522 goto done; 4523 4524 tp->link_config.speed = SPEED_10; 4525 break; 4526 case BMCR_SPEED100: 4527 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4528 goto done; 4529 4530 tp->link_config.speed = SPEED_100; 4531 break; 4532 case BMCR_SPEED1000: 4533 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4534 tp->link_config.speed = SPEED_1000; 4535 break; 4536 } 4537 fallthrough; 4538 default: 4539 goto done; 4540 } 4541 4542 if (val & BMCR_FULLDPLX) 4543 tp->link_config.duplex = DUPLEX_FULL; 4544 else 4545 tp->link_config.duplex = DUPLEX_HALF; 4546 4547 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX; 4548 4549 err = 0; 4550 goto done; 4551 } 4552 4553 tp->link_config.autoneg = AUTONEG_ENABLE; 4554 tp->link_config.advertising = ADVERTISED_Autoneg; 4555 tg3_flag_set(tp, PAUSE_AUTONEG); 4556 4557 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4558 u32 adv; 4559 4560 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4561 if (err) 4562 goto done; 4563 4564 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL); 4565 tp->link_config.advertising |= adv | ADVERTISED_TP; 4566 4567 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val); 4568 } else { 4569 tp->link_config.advertising |= ADVERTISED_FIBRE; 4570 } 4571 4572 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4573 u32 adv; 4574 4575 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4576 err = tg3_readphy(tp, MII_CTRL1000, &val); 4577 if (err) 4578 goto done; 4579 4580 adv = mii_ctrl1000_to_ethtool_adv_t(val); 4581 } else { 4582 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4583 if (err) 4584 goto done; 4585 4586 adv = tg3_decode_flowctrl_1000X(val); 4587 tp->link_config.flowctrl = adv; 4588 4589 val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL); 4590 adv = mii_adv_to_ethtool_adv_x(val); 4591 } 4592 4593 tp->link_config.advertising |= adv; 4594 } 4595 4596done: 4597 return err; 4598} 4599 4600static int tg3_init_5401phy_dsp(struct tg3 *tp) 4601{ 4602 int err; 4603 4604 /* Turn off tap power management. */ 4605 /* Set Extended packet length bit */ 4606 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 4607 4608 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 4609 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 4610 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 4611 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 4612 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 4613 4614 udelay(40); 4615 4616 return err; 4617} 4618 4619static bool tg3_phy_eee_config_ok(struct tg3 *tp) 4620{ 4621 struct ethtool_eee eee; 4622 4623 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4624 return true; 4625 4626 tg3_eee_pull_config(tp, &eee); 4627 4628 if (tp->eee.eee_enabled) { 4629 if (tp->eee.advertised != eee.advertised || 4630 tp->eee.tx_lpi_timer != eee.tx_lpi_timer || 4631 tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled) 4632 return false; 4633 } else { 4634 /* EEE is disabled but we're advertising */ 4635 if (eee.advertised) 4636 return false; 4637 } 4638 4639 return true; 4640} 4641 4642static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 4643{ 4644 u32 advmsk, tgtadv, advertising; 4645 4646 advertising = tp->link_config.advertising; 4647 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4648 4649 advmsk = ADVERTISE_ALL; 4650 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4651 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4652 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4653 } 4654 4655 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4656 return false; 4657 4658 if ((*lcladv & advmsk) != tgtadv) 4659 return false; 4660 4661 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4662 u32 tg3_ctrl; 4663 4664 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4665 4666 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4667 return false; 4668 4669 if (tgtadv && 4670 (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4671 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) { 4672 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4673 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4674 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4675 } else { 4676 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4677 } 4678 4679 if (tg3_ctrl != tgtadv) 4680 return false; 4681 } 4682 4683 return true; 4684} 4685 4686static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4687{ 4688 u32 lpeth = 0; 4689 4690 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4691 u32 val; 4692 4693 if (tg3_readphy(tp, MII_STAT1000, &val)) 4694 return false; 4695 4696 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4697 } 4698 4699 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4700 return false; 4701 4702 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4703 tp->link_config.rmt_adv = lpeth; 4704 4705 return true; 4706} 4707 4708static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up) 4709{ 4710 if (curr_link_up != tp->link_up) { 4711 if (curr_link_up) { 4712 netif_carrier_on(tp->dev); 4713 } else { 4714 netif_carrier_off(tp->dev); 4715 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4716 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4717 } 4718 4719 tg3_link_report(tp); 4720 return true; 4721 } 4722 4723 return false; 4724} 4725 4726static void tg3_clear_mac_status(struct tg3 *tp) 4727{ 4728 tw32(MAC_EVENT, 0); 4729 4730 tw32_f(MAC_STATUS, 4731 MAC_STATUS_SYNC_CHANGED | 4732 MAC_STATUS_CFG_CHANGED | 4733 MAC_STATUS_MI_COMPLETION | 4734 MAC_STATUS_LNKSTATE_CHANGED); 4735 udelay(40); 4736} 4737 4738static void tg3_setup_eee(struct tg3 *tp) 4739{ 4740 u32 val; 4741 4742 val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 4743 TG3_CPMU_EEE_LNKIDL_UART_IDL; 4744 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 4745 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT; 4746 4747 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val); 4748 4749 tw32_f(TG3_CPMU_EEE_CTRL, 4750 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 4751 4752 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 4753 (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) | 4754 TG3_CPMU_EEEMD_LPI_IN_RX | 4755 TG3_CPMU_EEEMD_EEE_ENABLE; 4756 4757 if (tg3_asic_rev(tp) != ASIC_REV_5717) 4758 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 4759 4760 if (tg3_flag(tp, ENABLE_APE)) 4761 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 4762 4763 tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0); 4764 4765 tw32_f(TG3_CPMU_EEE_DBTMR1, 4766 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 4767 (tp->eee.tx_lpi_timer & 0xffff)); 4768 4769 tw32_f(TG3_CPMU_EEE_DBTMR2, 4770 TG3_CPMU_DBTMR2_APE_TX_2047US | 4771 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 4772} 4773 4774static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset) 4775{ 4776 bool current_link_up; 4777 u32 bmsr, val; 4778 u32 lcl_adv, rmt_adv; 4779 u32 current_speed; 4780 u8 current_duplex; 4781 int i, err; 4782 4783 tg3_clear_mac_status(tp); 4784 4785 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4786 tw32_f(MAC_MI_MODE, 4787 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4788 udelay(80); 4789 } 4790 4791 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4792 4793 /* Some third-party PHYs need to be reset on link going 4794 * down. 4795 */ 4796 if ((tg3_asic_rev(tp) == ASIC_REV_5703 || 4797 tg3_asic_rev(tp) == ASIC_REV_5704 || 4798 tg3_asic_rev(tp) == ASIC_REV_5705) && 4799 tp->link_up) { 4800 tg3_readphy(tp, MII_BMSR, &bmsr); 4801 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4802 !(bmsr & BMSR_LSTATUS)) 4803 force_reset = true; 4804 } 4805 if (force_reset) 4806 tg3_phy_reset(tp); 4807 4808 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4809 tg3_readphy(tp, MII_BMSR, &bmsr); 4810 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4811 !tg3_flag(tp, INIT_COMPLETE)) 4812 bmsr = 0; 4813 4814 if (!(bmsr & BMSR_LSTATUS)) { 4815 err = tg3_init_5401phy_dsp(tp); 4816 if (err) 4817 return err; 4818 4819 tg3_readphy(tp, MII_BMSR, &bmsr); 4820 for (i = 0; i < 1000; i++) { 4821 udelay(10); 4822 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4823 (bmsr & BMSR_LSTATUS)) { 4824 udelay(40); 4825 break; 4826 } 4827 } 4828 4829 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4830 TG3_PHY_REV_BCM5401_B0 && 4831 !(bmsr & BMSR_LSTATUS) && 4832 tp->link_config.active_speed == SPEED_1000) { 4833 err = tg3_phy_reset(tp); 4834 if (!err) 4835 err = tg3_init_5401phy_dsp(tp); 4836 if (err) 4837 return err; 4838 } 4839 } 4840 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4841 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) { 4842 /* 5701 {A0,B0} CRC bug workaround */ 4843 tg3_writephy(tp, 0x15, 0x0a75); 4844 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4845 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4846 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4847 } 4848 4849 /* Clear pending interrupts... */ 4850 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4851 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4852 4853 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4854 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4855 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4856 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4857 4858 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4859 tg3_asic_rev(tp) == ASIC_REV_5701) { 4860 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4861 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4862 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4863 else 4864 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4865 } 4866 4867 current_link_up = false; 4868 current_speed = SPEED_UNKNOWN; 4869 current_duplex = DUPLEX_UNKNOWN; 4870 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4871 tp->link_config.rmt_adv = 0; 4872 4873 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4874 err = tg3_phy_auxctl_read(tp, 4875 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4876 &val); 4877 if (!err && !(val & (1 << 10))) { 4878 tg3_phy_auxctl_write(tp, 4879 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4880 val | (1 << 10)); 4881 goto relink; 4882 } 4883 } 4884 4885 bmsr = 0; 4886 for (i = 0; i < 100; i++) { 4887 tg3_readphy(tp, MII_BMSR, &bmsr); 4888 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4889 (bmsr & BMSR_LSTATUS)) 4890 break; 4891 udelay(40); 4892 } 4893 4894 if (bmsr & BMSR_LSTATUS) { 4895 u32 aux_stat, bmcr; 4896 4897 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4898 for (i = 0; i < 2000; i++) { 4899 udelay(10); 4900 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4901 aux_stat) 4902 break; 4903 } 4904 4905 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4906 ¤t_speed, 4907 ¤t_duplex); 4908 4909 bmcr = 0; 4910 for (i = 0; i < 200; i++) { 4911 tg3_readphy(tp, MII_BMCR, &bmcr); 4912 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4913 continue; 4914 if (bmcr && bmcr != 0x7fff) 4915 break; 4916 udelay(10); 4917 } 4918 4919 lcl_adv = 0; 4920 rmt_adv = 0; 4921 4922 tp->link_config.active_speed = current_speed; 4923 tp->link_config.active_duplex = current_duplex; 4924 4925 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4926 bool eee_config_ok = tg3_phy_eee_config_ok(tp); 4927 4928 if ((bmcr & BMCR_ANENABLE) && 4929 eee_config_ok && 4930 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4931 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4932 current_link_up = true; 4933 4934 /* EEE settings changes take effect only after a phy 4935 * reset. If we have skipped a reset due to Link Flap 4936 * Avoidance being enabled, do it now. 4937 */ 4938 if (!eee_config_ok && 4939 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 4940 !force_reset) { 4941 tg3_setup_eee(tp); 4942 tg3_phy_reset(tp); 4943 } 4944 } else { 4945 if (!(bmcr & BMCR_ANENABLE) && 4946 tp->link_config.speed == current_speed && 4947 tp->link_config.duplex == current_duplex) { 4948 current_link_up = true; 4949 } 4950 } 4951 4952 if (current_link_up && 4953 tp->link_config.active_duplex == DUPLEX_FULL) { 4954 u32 reg, bit; 4955 4956 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4957 reg = MII_TG3_FET_GEN_STAT; 4958 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4959 } else { 4960 reg = MII_TG3_EXT_STAT; 4961 bit = MII_TG3_EXT_STAT_MDIX; 4962 } 4963 4964 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4965 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4966 4967 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4968 } 4969 } 4970 4971relink: 4972 if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4973 tg3_phy_copper_begin(tp); 4974 4975 if (tg3_flag(tp, ROBOSWITCH)) { 4976 current_link_up = true; 4977 /* FIXME: when BCM5325 switch is used use 100 MBit/s */ 4978 current_speed = SPEED_1000; 4979 current_duplex = DUPLEX_FULL; 4980 tp->link_config.active_speed = current_speed; 4981 tp->link_config.active_duplex = current_duplex; 4982 } 4983 4984 tg3_readphy(tp, MII_BMSR, &bmsr); 4985 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4986 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4987 current_link_up = true; 4988 } 4989 4990 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4991 if (current_link_up) { 4992 if (tp->link_config.active_speed == SPEED_100 || 4993 tp->link_config.active_speed == SPEED_10) 4994 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4995 else 4996 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4997 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 4998 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4999 else 5000 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5001 5002 /* In order for the 5750 core in BCM4785 chip to work properly 5003 * in RGMII mode, the Led Control Register must be set up. 5004 */ 5005 if (tg3_flag(tp, RGMII_MODE)) { 5006 u32 led_ctrl = tr32(MAC_LED_CTRL); 5007 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON); 5008 5009 if (tp->link_config.active_speed == SPEED_10) 5010 led_ctrl |= LED_CTRL_LNKLED_OVERRIDE; 5011 else if (tp->link_config.active_speed == SPEED_100) 5012 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5013 LED_CTRL_100MBPS_ON); 5014 else if (tp->link_config.active_speed == SPEED_1000) 5015 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5016 LED_CTRL_1000MBPS_ON); 5017 5018 tw32(MAC_LED_CTRL, led_ctrl); 5019 udelay(40); 5020 } 5021 5022 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5023 if (tp->link_config.active_duplex == DUPLEX_HALF) 5024 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5025 5026 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 5027 if (current_link_up && 5028 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 5029 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 5030 else 5031 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 5032 } 5033 5034 /* ??? Without this setting Netgear GA302T PHY does not 5035 * ??? send/receive packets... 5036 */ 5037 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 5038 tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) { 5039 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 5040 tw32_f(MAC_MI_MODE, tp->mi_mode); 5041 udelay(80); 5042 } 5043 5044 tw32_f(MAC_MODE, tp->mac_mode); 5045 udelay(40); 5046 5047 tg3_phy_eee_adjust(tp, current_link_up); 5048 5049 if (tg3_flag(tp, USE_LINKCHG_REG)) { 5050 /* Polled via timer. */ 5051 tw32_f(MAC_EVENT, 0); 5052 } else { 5053 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5054 } 5055 udelay(40); 5056 5057 if (tg3_asic_rev(tp) == ASIC_REV_5700 && 5058 current_link_up && 5059 tp->link_config.active_speed == SPEED_1000 && 5060 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 5061 udelay(120); 5062 tw32_f(MAC_STATUS, 5063 (MAC_STATUS_SYNC_CHANGED | 5064 MAC_STATUS_CFG_CHANGED)); 5065 udelay(40); 5066 tg3_write_mem(tp, 5067 NIC_SRAM_FIRMWARE_MBOX, 5068 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 5069 } 5070 5071 /* Prevent send BD corruption. */ 5072 if (tg3_flag(tp, CLKREQ_BUG)) { 5073 if (tp->link_config.active_speed == SPEED_100 || 5074 tp->link_config.active_speed == SPEED_10) 5075 pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL, 5076 PCI_EXP_LNKCTL_CLKREQ_EN); 5077 else 5078 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 5079 PCI_EXP_LNKCTL_CLKREQ_EN); 5080 } 5081 5082 tg3_test_and_report_link_chg(tp, current_link_up); 5083 5084 return 0; 5085} 5086 5087struct tg3_fiber_aneginfo { 5088 int state; 5089#define ANEG_STATE_UNKNOWN 0 5090#define ANEG_STATE_AN_ENABLE 1 5091#define ANEG_STATE_RESTART_INIT 2 5092#define ANEG_STATE_RESTART 3 5093#define ANEG_STATE_DISABLE_LINK_OK 4 5094#define ANEG_STATE_ABILITY_DETECT_INIT 5 5095#define ANEG_STATE_ABILITY_DETECT 6 5096#define ANEG_STATE_ACK_DETECT_INIT 7 5097#define ANEG_STATE_ACK_DETECT 8 5098#define ANEG_STATE_COMPLETE_ACK_INIT 9 5099#define ANEG_STATE_COMPLETE_ACK 10 5100#define ANEG_STATE_IDLE_DETECT_INIT 11 5101#define ANEG_STATE_IDLE_DETECT 12 5102#define ANEG_STATE_LINK_OK 13 5103#define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 5104#define ANEG_STATE_NEXT_PAGE_WAIT 15 5105 5106 u32 flags; 5107#define MR_AN_ENABLE 0x00000001 5108#define MR_RESTART_AN 0x00000002 5109#define MR_AN_COMPLETE 0x00000004 5110#define MR_PAGE_RX 0x00000008 5111#define MR_NP_LOADED 0x00000010 5112#define MR_TOGGLE_TX 0x00000020 5113#define MR_LP_ADV_FULL_DUPLEX 0x00000040 5114#define MR_LP_ADV_HALF_DUPLEX 0x00000080 5115#define MR_LP_ADV_SYM_PAUSE 0x00000100 5116#define MR_LP_ADV_ASYM_PAUSE 0x00000200 5117#define MR_LP_ADV_REMOTE_FAULT1 0x00000400 5118#define MR_LP_ADV_REMOTE_FAULT2 0x00000800 5119#define MR_LP_ADV_NEXT_PAGE 0x00001000 5120#define MR_TOGGLE_RX 0x00002000 5121#define MR_NP_RX 0x00004000 5122 5123#define MR_LINK_OK 0x80000000 5124 5125 unsigned long link_time, cur_time; 5126 5127 u32 ability_match_cfg; 5128 int ability_match_count; 5129 5130 char ability_match, idle_match, ack_match; 5131 5132 u32 txconfig, rxconfig; 5133#define ANEG_CFG_NP 0x00000080 5134#define ANEG_CFG_ACK 0x00000040 5135#define ANEG_CFG_RF2 0x00000020 5136#define ANEG_CFG_RF1 0x00000010 5137#define ANEG_CFG_PS2 0x00000001 5138#define ANEG_CFG_PS1 0x00008000 5139#define ANEG_CFG_HD 0x00004000 5140#define ANEG_CFG_FD 0x00002000 5141#define ANEG_CFG_INVAL 0x00001f06 5142 5143}; 5144#define ANEG_OK 0 5145#define ANEG_DONE 1 5146#define ANEG_TIMER_ENAB 2 5147#define ANEG_FAILED -1 5148 5149#define ANEG_STATE_SETTLE_TIME 10000 5150 5151static int tg3_fiber_aneg_smachine(struct tg3 *tp, 5152 struct tg3_fiber_aneginfo *ap) 5153{ 5154 u16 flowctrl; 5155 unsigned long delta; 5156 u32 rx_cfg_reg; 5157 int ret; 5158 5159 if (ap->state == ANEG_STATE_UNKNOWN) { 5160 ap->rxconfig = 0; 5161 ap->link_time = 0; 5162 ap->cur_time = 0; 5163 ap->ability_match_cfg = 0; 5164 ap->ability_match_count = 0; 5165 ap->ability_match = 0; 5166 ap->idle_match = 0; 5167 ap->ack_match = 0; 5168 } 5169 ap->cur_time++; 5170 5171 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 5172 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 5173 5174 if (rx_cfg_reg != ap->ability_match_cfg) { 5175 ap->ability_match_cfg = rx_cfg_reg; 5176 ap->ability_match = 0; 5177 ap->ability_match_count = 0; 5178 } else { 5179 if (++ap->ability_match_count > 1) { 5180 ap->ability_match = 1; 5181 ap->ability_match_cfg = rx_cfg_reg; 5182 } 5183 } 5184 if (rx_cfg_reg & ANEG_CFG_ACK) 5185 ap->ack_match = 1; 5186 else 5187 ap->ack_match = 0; 5188 5189 ap->idle_match = 0; 5190 } else { 5191 ap->idle_match = 1; 5192 ap->ability_match_cfg = 0; 5193 ap->ability_match_count = 0; 5194 ap->ability_match = 0; 5195 ap->ack_match = 0; 5196 5197 rx_cfg_reg = 0; 5198 } 5199 5200 ap->rxconfig = rx_cfg_reg; 5201 ret = ANEG_OK; 5202 5203 switch (ap->state) { 5204 case ANEG_STATE_UNKNOWN: 5205 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 5206 ap->state = ANEG_STATE_AN_ENABLE; 5207 5208 fallthrough; 5209 case ANEG_STATE_AN_ENABLE: 5210 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 5211 if (ap->flags & MR_AN_ENABLE) { 5212 ap->link_time = 0; 5213 ap->cur_time = 0; 5214 ap->ability_match_cfg = 0; 5215 ap->ability_match_count = 0; 5216 ap->ability_match = 0; 5217 ap->idle_match = 0; 5218 ap->ack_match = 0; 5219 5220 ap->state = ANEG_STATE_RESTART_INIT; 5221 } else { 5222 ap->state = ANEG_STATE_DISABLE_LINK_OK; 5223 } 5224 break; 5225 5226 case ANEG_STATE_RESTART_INIT: 5227 ap->link_time = ap->cur_time; 5228 ap->flags &= ~(MR_NP_LOADED); 5229 ap->txconfig = 0; 5230 tw32(MAC_TX_AUTO_NEG, 0); 5231 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5232 tw32_f(MAC_MODE, tp->mac_mode); 5233 udelay(40); 5234 5235 ret = ANEG_TIMER_ENAB; 5236 ap->state = ANEG_STATE_RESTART; 5237 5238 fallthrough; 5239 case ANEG_STATE_RESTART: 5240 delta = ap->cur_time - ap->link_time; 5241 if (delta > ANEG_STATE_SETTLE_TIME) 5242 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 5243 else 5244 ret = ANEG_TIMER_ENAB; 5245 break; 5246 5247 case ANEG_STATE_DISABLE_LINK_OK: 5248 ret = ANEG_DONE; 5249 break; 5250 5251 case ANEG_STATE_ABILITY_DETECT_INIT: 5252 ap->flags &= ~(MR_TOGGLE_TX); 5253 ap->txconfig = ANEG_CFG_FD; 5254 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5255 if (flowctrl & ADVERTISE_1000XPAUSE) 5256 ap->txconfig |= ANEG_CFG_PS1; 5257 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5258 ap->txconfig |= ANEG_CFG_PS2; 5259 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5260 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5261 tw32_f(MAC_MODE, tp->mac_mode); 5262 udelay(40); 5263 5264 ap->state = ANEG_STATE_ABILITY_DETECT; 5265 break; 5266 5267 case ANEG_STATE_ABILITY_DETECT: 5268 if (ap->ability_match != 0 && ap->rxconfig != 0) 5269 ap->state = ANEG_STATE_ACK_DETECT_INIT; 5270 break; 5271 5272 case ANEG_STATE_ACK_DETECT_INIT: 5273 ap->txconfig |= ANEG_CFG_ACK; 5274 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5275 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5276 tw32_f(MAC_MODE, tp->mac_mode); 5277 udelay(40); 5278 5279 ap->state = ANEG_STATE_ACK_DETECT; 5280 5281 fallthrough; 5282 case ANEG_STATE_ACK_DETECT: 5283 if (ap->ack_match != 0) { 5284 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 5285 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 5286 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 5287 } else { 5288 ap->state = ANEG_STATE_AN_ENABLE; 5289 } 5290 } else if (ap->ability_match != 0 && 5291 ap->rxconfig == 0) { 5292 ap->state = ANEG_STATE_AN_ENABLE; 5293 } 5294 break; 5295 5296 case ANEG_STATE_COMPLETE_ACK_INIT: 5297 if (ap->rxconfig & ANEG_CFG_INVAL) { 5298 ret = ANEG_FAILED; 5299 break; 5300 } 5301 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 5302 MR_LP_ADV_HALF_DUPLEX | 5303 MR_LP_ADV_SYM_PAUSE | 5304 MR_LP_ADV_ASYM_PAUSE | 5305 MR_LP_ADV_REMOTE_FAULT1 | 5306 MR_LP_ADV_REMOTE_FAULT2 | 5307 MR_LP_ADV_NEXT_PAGE | 5308 MR_TOGGLE_RX | 5309 MR_NP_RX); 5310 if (ap->rxconfig & ANEG_CFG_FD) 5311 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 5312 if (ap->rxconfig & ANEG_CFG_HD) 5313 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 5314 if (ap->rxconfig & ANEG_CFG_PS1) 5315 ap->flags |= MR_LP_ADV_SYM_PAUSE; 5316 if (ap->rxconfig & ANEG_CFG_PS2) 5317 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 5318 if (ap->rxconfig & ANEG_CFG_RF1) 5319 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 5320 if (ap->rxconfig & ANEG_CFG_RF2) 5321 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 5322 if (ap->rxconfig & ANEG_CFG_NP) 5323 ap->flags |= MR_LP_ADV_NEXT_PAGE; 5324 5325 ap->link_time = ap->cur_time; 5326 5327 ap->flags ^= (MR_TOGGLE_TX); 5328 if (ap->rxconfig & 0x0008) 5329 ap->flags |= MR_TOGGLE_RX; 5330 if (ap->rxconfig & ANEG_CFG_NP) 5331 ap->flags |= MR_NP_RX; 5332 ap->flags |= MR_PAGE_RX; 5333 5334 ap->state = ANEG_STATE_COMPLETE_ACK; 5335 ret = ANEG_TIMER_ENAB; 5336 break; 5337 5338 case ANEG_STATE_COMPLETE_ACK: 5339 if (ap->ability_match != 0 && 5340 ap->rxconfig == 0) { 5341 ap->state = ANEG_STATE_AN_ENABLE; 5342 break; 5343 } 5344 delta = ap->cur_time - ap->link_time; 5345 if (delta > ANEG_STATE_SETTLE_TIME) { 5346 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 5347 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5348 } else { 5349 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 5350 !(ap->flags & MR_NP_RX)) { 5351 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5352 } else { 5353 ret = ANEG_FAILED; 5354 } 5355 } 5356 } 5357 break; 5358 5359 case ANEG_STATE_IDLE_DETECT_INIT: 5360 ap->link_time = ap->cur_time; 5361 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5362 tw32_f(MAC_MODE, tp->mac_mode); 5363 udelay(40); 5364 5365 ap->state = ANEG_STATE_IDLE_DETECT; 5366 ret = ANEG_TIMER_ENAB; 5367 break; 5368 5369 case ANEG_STATE_IDLE_DETECT: 5370 if (ap->ability_match != 0 && 5371 ap->rxconfig == 0) { 5372 ap->state = ANEG_STATE_AN_ENABLE; 5373 break; 5374 } 5375 delta = ap->cur_time - ap->link_time; 5376 if (delta > ANEG_STATE_SETTLE_TIME) { 5377 /* XXX another gem from the Broadcom driver :( */ 5378 ap->state = ANEG_STATE_LINK_OK; 5379 } 5380 break; 5381 5382 case ANEG_STATE_LINK_OK: 5383 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 5384 ret = ANEG_DONE; 5385 break; 5386 5387 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 5388 /* ??? unimplemented */ 5389 break; 5390 5391 case ANEG_STATE_NEXT_PAGE_WAIT: 5392 /* ??? unimplemented */ 5393 break; 5394 5395 default: 5396 ret = ANEG_FAILED; 5397 break; 5398 } 5399 5400 return ret; 5401} 5402 5403static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 5404{ 5405 int res = 0; 5406 struct tg3_fiber_aneginfo aninfo; 5407 int status = ANEG_FAILED; 5408 unsigned int tick; 5409 u32 tmp; 5410 5411 tw32_f(MAC_TX_AUTO_NEG, 0); 5412 5413 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 5414 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 5415 udelay(40); 5416 5417 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 5418 udelay(40); 5419 5420 memset(&aninfo, 0, sizeof(aninfo)); 5421 aninfo.flags |= MR_AN_ENABLE; 5422 aninfo.state = ANEG_STATE_UNKNOWN; 5423 aninfo.cur_time = 0; 5424 tick = 0; 5425 while (++tick < 195000) { 5426 status = tg3_fiber_aneg_smachine(tp, &aninfo); 5427 if (status == ANEG_DONE || status == ANEG_FAILED) 5428 break; 5429 5430 udelay(1); 5431 } 5432 5433 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5434 tw32_f(MAC_MODE, tp->mac_mode); 5435 udelay(40); 5436 5437 *txflags = aninfo.txconfig; 5438 *rxflags = aninfo.flags; 5439 5440 if (status == ANEG_DONE && 5441 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 5442 MR_LP_ADV_FULL_DUPLEX))) 5443 res = 1; 5444 5445 return res; 5446} 5447 5448static void tg3_init_bcm8002(struct tg3 *tp) 5449{ 5450 u32 mac_status = tr32(MAC_STATUS); 5451 int i; 5452 5453 /* Reset when initting first time or we have a link. */ 5454 if (tg3_flag(tp, INIT_COMPLETE) && 5455 !(mac_status & MAC_STATUS_PCS_SYNCED)) 5456 return; 5457 5458 /* Set PLL lock range. */ 5459 tg3_writephy(tp, 0x16, 0x8007); 5460 5461 /* SW reset */ 5462 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 5463 5464 /* Wait for reset to complete. */ 5465 /* XXX schedule_timeout() ... */ 5466 for (i = 0; i < 500; i++) 5467 udelay(10); 5468 5469 /* Config mode; select PMA/Ch 1 regs. */ 5470 tg3_writephy(tp, 0x10, 0x8411); 5471 5472 /* Enable auto-lock and comdet, select txclk for tx. */ 5473 tg3_writephy(tp, 0x11, 0x0a10); 5474 5475 tg3_writephy(tp, 0x18, 0x00a0); 5476 tg3_writephy(tp, 0x16, 0x41ff); 5477 5478 /* Assert and deassert POR. */ 5479 tg3_writephy(tp, 0x13, 0x0400); 5480 udelay(40); 5481 tg3_writephy(tp, 0x13, 0x0000); 5482 5483 tg3_writephy(tp, 0x11, 0x0a50); 5484 udelay(40); 5485 tg3_writephy(tp, 0x11, 0x0a10); 5486 5487 /* Wait for signal to stabilize */ 5488 /* XXX schedule_timeout() ... */ 5489 for (i = 0; i < 15000; i++) 5490 udelay(10); 5491 5492 /* Deselect the channel register so we can read the PHYID 5493 * later. 5494 */ 5495 tg3_writephy(tp, 0x10, 0x8011); 5496} 5497 5498static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 5499{ 5500 u16 flowctrl; 5501 bool current_link_up; 5502 u32 sg_dig_ctrl, sg_dig_status; 5503 u32 serdes_cfg, expected_sg_dig_ctrl; 5504 int workaround, port_a; 5505 5506 serdes_cfg = 0; 5507 workaround = 0; 5508 port_a = 1; 5509 current_link_up = false; 5510 5511 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 && 5512 tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) { 5513 workaround = 1; 5514 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 5515 port_a = 0; 5516 5517 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 5518 /* preserve bits 20-23 for voltage regulator */ 5519 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 5520 } 5521 5522 sg_dig_ctrl = tr32(SG_DIG_CTRL); 5523 5524 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 5525 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 5526 if (workaround) { 5527 u32 val = serdes_cfg; 5528 5529 if (port_a) 5530 val |= 0xc010000; 5531 else 5532 val |= 0x4010000; 5533 tw32_f(MAC_SERDES_CFG, val); 5534 } 5535 5536 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5537 } 5538 if (mac_status & MAC_STATUS_PCS_SYNCED) { 5539 tg3_setup_flow_control(tp, 0, 0); 5540 current_link_up = true; 5541 } 5542 goto out; 5543 } 5544 5545 /* Want auto-negotiation. */ 5546 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 5547 5548 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5549 if (flowctrl & ADVERTISE_1000XPAUSE) 5550 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 5551 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5552 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 5553 5554 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 5555 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 5556 tp->serdes_counter && 5557 ((mac_status & (MAC_STATUS_PCS_SYNCED | 5558 MAC_STATUS_RCVD_CFG)) == 5559 MAC_STATUS_PCS_SYNCED)) { 5560 tp->serdes_counter--; 5561 current_link_up = true; 5562 goto out; 5563 } 5564restart_autoneg: 5565 if (workaround) 5566 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 5567 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 5568 udelay(5); 5569 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 5570 5571 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5572 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5573 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 5574 MAC_STATUS_SIGNAL_DET)) { 5575 sg_dig_status = tr32(SG_DIG_STATUS); 5576 mac_status = tr32(MAC_STATUS); 5577 5578 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 5579 (mac_status & MAC_STATUS_PCS_SYNCED)) { 5580 u32 local_adv = 0, remote_adv = 0; 5581 5582 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 5583 local_adv |= ADVERTISE_1000XPAUSE; 5584 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 5585 local_adv |= ADVERTISE_1000XPSE_ASYM; 5586 5587 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 5588 remote_adv |= LPA_1000XPAUSE; 5589 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 5590 remote_adv |= LPA_1000XPAUSE_ASYM; 5591 5592 tp->link_config.rmt_adv = 5593 mii_adv_to_ethtool_adv_x(remote_adv); 5594 5595 tg3_setup_flow_control(tp, local_adv, remote_adv); 5596 current_link_up = true; 5597 tp->serdes_counter = 0; 5598 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5599 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 5600 if (tp->serdes_counter) 5601 tp->serdes_counter--; 5602 else { 5603 if (workaround) { 5604 u32 val = serdes_cfg; 5605 5606 if (port_a) 5607 val |= 0xc010000; 5608 else 5609 val |= 0x4010000; 5610 5611 tw32_f(MAC_SERDES_CFG, val); 5612 } 5613 5614 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5615 udelay(40); 5616 5617 /* Link parallel detection - link is up */ 5618 /* only if we have PCS_SYNC and not */ 5619 /* receiving config code words */ 5620 mac_status = tr32(MAC_STATUS); 5621 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 5622 !(mac_status & MAC_STATUS_RCVD_CFG)) { 5623 tg3_setup_flow_control(tp, 0, 0); 5624 current_link_up = true; 5625 tp->phy_flags |= 5626 TG3_PHYFLG_PARALLEL_DETECT; 5627 tp->serdes_counter = 5628 SERDES_PARALLEL_DET_TIMEOUT; 5629 } else 5630 goto restart_autoneg; 5631 } 5632 } 5633 } else { 5634 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5635 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5636 } 5637 5638out: 5639 return current_link_up; 5640} 5641 5642static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 5643{ 5644 bool current_link_up = false; 5645 5646 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 5647 goto out; 5648 5649 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5650 u32 txflags, rxflags; 5651 int i; 5652 5653 if (fiber_autoneg(tp, &txflags, &rxflags)) { 5654 u32 local_adv = 0, remote_adv = 0; 5655 5656 if (txflags & ANEG_CFG_PS1) 5657 local_adv |= ADVERTISE_1000XPAUSE; 5658 if (txflags & ANEG_CFG_PS2) 5659 local_adv |= ADVERTISE_1000XPSE_ASYM; 5660 5661 if (rxflags & MR_LP_ADV_SYM_PAUSE) 5662 remote_adv |= LPA_1000XPAUSE; 5663 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 5664 remote_adv |= LPA_1000XPAUSE_ASYM; 5665 5666 tp->link_config.rmt_adv = 5667 mii_adv_to_ethtool_adv_x(remote_adv); 5668 5669 tg3_setup_flow_control(tp, local_adv, remote_adv); 5670 5671 current_link_up = true; 5672 } 5673 for (i = 0; i < 30; i++) { 5674 udelay(20); 5675 tw32_f(MAC_STATUS, 5676 (MAC_STATUS_SYNC_CHANGED | 5677 MAC_STATUS_CFG_CHANGED)); 5678 udelay(40); 5679 if ((tr32(MAC_STATUS) & 5680 (MAC_STATUS_SYNC_CHANGED | 5681 MAC_STATUS_CFG_CHANGED)) == 0) 5682 break; 5683 } 5684 5685 mac_status = tr32(MAC_STATUS); 5686 if (!current_link_up && 5687 (mac_status & MAC_STATUS_PCS_SYNCED) && 5688 !(mac_status & MAC_STATUS_RCVD_CFG)) 5689 current_link_up = true; 5690 } else { 5691 tg3_setup_flow_control(tp, 0, 0); 5692 5693 /* Forcing 1000FD link up. */ 5694 current_link_up = true; 5695 5696 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 5697 udelay(40); 5698 5699 tw32_f(MAC_MODE, tp->mac_mode); 5700 udelay(40); 5701 } 5702 5703out: 5704 return current_link_up; 5705} 5706 5707static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset) 5708{ 5709 u32 orig_pause_cfg; 5710 u32 orig_active_speed; 5711 u8 orig_active_duplex; 5712 u32 mac_status; 5713 bool current_link_up; 5714 int i; 5715 5716 orig_pause_cfg = tp->link_config.active_flowctrl; 5717 orig_active_speed = tp->link_config.active_speed; 5718 orig_active_duplex = tp->link_config.active_duplex; 5719 5720 if (!tg3_flag(tp, HW_AUTONEG) && 5721 tp->link_up && 5722 tg3_flag(tp, INIT_COMPLETE)) { 5723 mac_status = tr32(MAC_STATUS); 5724 mac_status &= (MAC_STATUS_PCS_SYNCED | 5725 MAC_STATUS_SIGNAL_DET | 5726 MAC_STATUS_CFG_CHANGED | 5727 MAC_STATUS_RCVD_CFG); 5728 if (mac_status == (MAC_STATUS_PCS_SYNCED | 5729 MAC_STATUS_SIGNAL_DET)) { 5730 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5731 MAC_STATUS_CFG_CHANGED)); 5732 return 0; 5733 } 5734 } 5735 5736 tw32_f(MAC_TX_AUTO_NEG, 0); 5737 5738 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5739 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5740 tw32_f(MAC_MODE, tp->mac_mode); 5741 udelay(40); 5742 5743 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5744 tg3_init_bcm8002(tp); 5745 5746 /* Enable link change event even when serdes polling. */ 5747 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5748 udelay(40); 5749 5750 tp->link_config.rmt_adv = 0; 5751 mac_status = tr32(MAC_STATUS); 5752 5753 if (tg3_flag(tp, HW_AUTONEG)) 5754 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5755 else 5756 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5757 5758 tp->napi[0].hw_status->status = 5759 (SD_STATUS_UPDATED | 5760 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5761 5762 for (i = 0; i < 100; i++) { 5763 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5764 MAC_STATUS_CFG_CHANGED)); 5765 udelay(5); 5766 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5767 MAC_STATUS_CFG_CHANGED | 5768 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5769 break; 5770 } 5771 5772 mac_status = tr32(MAC_STATUS); 5773 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5774 current_link_up = false; 5775 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5776 tp->serdes_counter == 0) { 5777 tw32_f(MAC_MODE, (tp->mac_mode | 5778 MAC_MODE_SEND_CONFIGS)); 5779 udelay(1); 5780 tw32_f(MAC_MODE, tp->mac_mode); 5781 } 5782 } 5783 5784 if (current_link_up) { 5785 tp->link_config.active_speed = SPEED_1000; 5786 tp->link_config.active_duplex = DUPLEX_FULL; 5787 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5788 LED_CTRL_LNKLED_OVERRIDE | 5789 LED_CTRL_1000MBPS_ON)); 5790 } else { 5791 tp->link_config.active_speed = SPEED_UNKNOWN; 5792 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5793 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5794 LED_CTRL_LNKLED_OVERRIDE | 5795 LED_CTRL_TRAFFIC_OVERRIDE)); 5796 } 5797 5798 if (!tg3_test_and_report_link_chg(tp, current_link_up)) { 5799 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5800 if (orig_pause_cfg != now_pause_cfg || 5801 orig_active_speed != tp->link_config.active_speed || 5802 orig_active_duplex != tp->link_config.active_duplex) 5803 tg3_link_report(tp); 5804 } 5805 5806 return 0; 5807} 5808 5809static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset) 5810{ 5811 int err = 0; 5812 u32 bmsr, bmcr; 5813 u32 current_speed = SPEED_UNKNOWN; 5814 u8 current_duplex = DUPLEX_UNKNOWN; 5815 bool current_link_up = false; 5816 u32 local_adv, remote_adv, sgsr; 5817 5818 if ((tg3_asic_rev(tp) == ASIC_REV_5719 || 5819 tg3_asic_rev(tp) == ASIC_REV_5720) && 5820 !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) && 5821 (sgsr & SERDES_TG3_SGMII_MODE)) { 5822 5823 if (force_reset) 5824 tg3_phy_reset(tp); 5825 5826 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 5827 5828 if (!(sgsr & SERDES_TG3_LINK_UP)) { 5829 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5830 } else { 5831 current_link_up = true; 5832 if (sgsr & SERDES_TG3_SPEED_1000) { 5833 current_speed = SPEED_1000; 5834 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5835 } else if (sgsr & SERDES_TG3_SPEED_100) { 5836 current_speed = SPEED_100; 5837 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5838 } else { 5839 current_speed = SPEED_10; 5840 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5841 } 5842 5843 if (sgsr & SERDES_TG3_FULL_DUPLEX) 5844 current_duplex = DUPLEX_FULL; 5845 else 5846 current_duplex = DUPLEX_HALF; 5847 } 5848 5849 tw32_f(MAC_MODE, tp->mac_mode); 5850 udelay(40); 5851 5852 tg3_clear_mac_status(tp); 5853 5854 goto fiber_setup_done; 5855 } 5856 5857 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5858 tw32_f(MAC_MODE, tp->mac_mode); 5859 udelay(40); 5860 5861 tg3_clear_mac_status(tp); 5862 5863 if (force_reset) 5864 tg3_phy_reset(tp); 5865 5866 tp->link_config.rmt_adv = 0; 5867 5868 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5869 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5870 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5871 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5872 bmsr |= BMSR_LSTATUS; 5873 else 5874 bmsr &= ~BMSR_LSTATUS; 5875 } 5876 5877 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5878 5879 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5880 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5881 /* do nothing, just check for link up at the end */ 5882 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5883 u32 adv, newadv; 5884 5885 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5886 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5887 ADVERTISE_1000XPAUSE | 5888 ADVERTISE_1000XPSE_ASYM | 5889 ADVERTISE_SLCT); 5890 5891 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5892 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5893 5894 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5895 tg3_writephy(tp, MII_ADVERTISE, newadv); 5896 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5897 tg3_writephy(tp, MII_BMCR, bmcr); 5898 5899 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5900 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5901 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5902 5903 return err; 5904 } 5905 } else { 5906 u32 new_bmcr; 5907 5908 bmcr &= ~BMCR_SPEED1000; 5909 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5910 5911 if (tp->link_config.duplex == DUPLEX_FULL) 5912 new_bmcr |= BMCR_FULLDPLX; 5913 5914 if (new_bmcr != bmcr) { 5915 /* BMCR_SPEED1000 is a reserved bit that needs 5916 * to be set on write. 5917 */ 5918 new_bmcr |= BMCR_SPEED1000; 5919 5920 /* Force a linkdown */ 5921 if (tp->link_up) { 5922 u32 adv; 5923 5924 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5925 adv &= ~(ADVERTISE_1000XFULL | 5926 ADVERTISE_1000XHALF | 5927 ADVERTISE_SLCT); 5928 tg3_writephy(tp, MII_ADVERTISE, adv); 5929 tg3_writephy(tp, MII_BMCR, bmcr | 5930 BMCR_ANRESTART | 5931 BMCR_ANENABLE); 5932 udelay(10); 5933 tg3_carrier_off(tp); 5934 } 5935 tg3_writephy(tp, MII_BMCR, new_bmcr); 5936 bmcr = new_bmcr; 5937 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5938 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5939 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5940 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5941 bmsr |= BMSR_LSTATUS; 5942 else 5943 bmsr &= ~BMSR_LSTATUS; 5944 } 5945 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5946 } 5947 } 5948 5949 if (bmsr & BMSR_LSTATUS) { 5950 current_speed = SPEED_1000; 5951 current_link_up = true; 5952 if (bmcr & BMCR_FULLDPLX) 5953 current_duplex = DUPLEX_FULL; 5954 else 5955 current_duplex = DUPLEX_HALF; 5956 5957 local_adv = 0; 5958 remote_adv = 0; 5959 5960 if (bmcr & BMCR_ANENABLE) { 5961 u32 common; 5962 5963 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5964 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5965 common = local_adv & remote_adv; 5966 if (common & (ADVERTISE_1000XHALF | 5967 ADVERTISE_1000XFULL)) { 5968 if (common & ADVERTISE_1000XFULL) 5969 current_duplex = DUPLEX_FULL; 5970 else 5971 current_duplex = DUPLEX_HALF; 5972 5973 tp->link_config.rmt_adv = 5974 mii_adv_to_ethtool_adv_x(remote_adv); 5975 } else if (!tg3_flag(tp, 5780_CLASS)) { 5976 /* Link is up via parallel detect */ 5977 } else { 5978 current_link_up = false; 5979 } 5980 } 5981 } 5982 5983fiber_setup_done: 5984 if (current_link_up && current_duplex == DUPLEX_FULL) 5985 tg3_setup_flow_control(tp, local_adv, remote_adv); 5986 5987 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5988 if (tp->link_config.active_duplex == DUPLEX_HALF) 5989 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5990 5991 tw32_f(MAC_MODE, tp->mac_mode); 5992 udelay(40); 5993 5994 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5995 5996 tp->link_config.active_speed = current_speed; 5997 tp->link_config.active_duplex = current_duplex; 5998 5999 tg3_test_and_report_link_chg(tp, current_link_up); 6000 return err; 6001} 6002 6003static void tg3_serdes_parallel_detect(struct tg3 *tp) 6004{ 6005 if (tp->serdes_counter) { 6006 /* Give autoneg time to complete. */ 6007 tp->serdes_counter--; 6008 return; 6009 } 6010 6011 if (!tp->link_up && 6012 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 6013 u32 bmcr; 6014 6015 tg3_readphy(tp, MII_BMCR, &bmcr); 6016 if (bmcr & BMCR_ANENABLE) { 6017 u32 phy1, phy2; 6018 6019 /* Select shadow register 0x1f */ 6020 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 6021 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 6022 6023 /* Select expansion interrupt status register */ 6024 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6025 MII_TG3_DSP_EXP1_INT_STAT); 6026 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6027 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6028 6029 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 6030 /* We have signal detect and not receiving 6031 * config code words, link is up by parallel 6032 * detection. 6033 */ 6034 6035 bmcr &= ~BMCR_ANENABLE; 6036 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 6037 tg3_writephy(tp, MII_BMCR, bmcr); 6038 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 6039 } 6040 } 6041 } else if (tp->link_up && 6042 (tp->link_config.autoneg == AUTONEG_ENABLE) && 6043 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 6044 u32 phy2; 6045 6046 /* Select expansion interrupt status register */ 6047 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6048 MII_TG3_DSP_EXP1_INT_STAT); 6049 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6050 if (phy2 & 0x20) { 6051 u32 bmcr; 6052 6053 /* Config code words received, turn on autoneg. */ 6054 tg3_readphy(tp, MII_BMCR, &bmcr); 6055 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 6056 6057 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 6058 6059 } 6060 } 6061} 6062 6063static int tg3_setup_phy(struct tg3 *tp, bool force_reset) 6064{ 6065 u32 val; 6066 int err; 6067 6068 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 6069 err = tg3_setup_fiber_phy(tp, force_reset); 6070 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 6071 err = tg3_setup_fiber_mii_phy(tp, force_reset); 6072 else 6073 err = tg3_setup_copper_phy(tp, force_reset); 6074 6075 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 6076 u32 scale; 6077 6078 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 6079 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 6080 scale = 65; 6081 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 6082 scale = 6; 6083 else 6084 scale = 12; 6085 6086 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 6087 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 6088 tw32(GRC_MISC_CFG, val); 6089 } 6090 6091 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 6092 (6 << TX_LENGTHS_IPG_SHIFT); 6093 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 6094 tg3_asic_rev(tp) == ASIC_REV_5762) 6095 val |= tr32(MAC_TX_LENGTHS) & 6096 (TX_LENGTHS_JMB_FRM_LEN_MSK | 6097 TX_LENGTHS_CNT_DWN_VAL_MSK); 6098 6099 if (tp->link_config.active_speed == SPEED_1000 && 6100 tp->link_config.active_duplex == DUPLEX_HALF) 6101 tw32(MAC_TX_LENGTHS, val | 6102 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 6103 else 6104 tw32(MAC_TX_LENGTHS, val | 6105 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 6106 6107 if (!tg3_flag(tp, 5705_PLUS)) { 6108 if (tp->link_up) { 6109 tw32(HOSTCC_STAT_COAL_TICKS, 6110 tp->coal.stats_block_coalesce_usecs); 6111 } else { 6112 tw32(HOSTCC_STAT_COAL_TICKS, 0); 6113 } 6114 } 6115 6116 if (tg3_flag(tp, ASPM_WORKAROUND)) { 6117 val = tr32(PCIE_PWR_MGMT_THRESH); 6118 if (!tp->link_up) 6119 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 6120 tp->pwrmgmt_thresh; 6121 else 6122 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 6123 tw32(PCIE_PWR_MGMT_THRESH, val); 6124 } 6125 6126 return err; 6127} 6128 6129/* tp->lock must be held */ 6130static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts) 6131{ 6132 u64 stamp; 6133 6134 ptp_read_system_prets(sts); 6135 stamp = tr32(TG3_EAV_REF_CLCK_LSB); 6136 ptp_read_system_postts(sts); 6137 stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; 6138 6139 return stamp; 6140} 6141 6142/* tp->lock must be held */ 6143static void tg3_refclk_write(struct tg3 *tp, u64 newval) 6144{ 6145 u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6146 6147 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP); 6148 tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff); 6149 tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32); 6150 tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME); 6151} 6152 6153static inline void tg3_full_lock(struct tg3 *tp, int irq_sync); 6154static inline void tg3_full_unlock(struct tg3 *tp); 6155static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) 6156{ 6157 struct tg3 *tp = netdev_priv(dev); 6158 6159 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | 6160 SOF_TIMESTAMPING_RX_SOFTWARE | 6161 SOF_TIMESTAMPING_SOFTWARE; 6162 6163 if (tg3_flag(tp, PTP_CAPABLE)) { 6164 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE | 6165 SOF_TIMESTAMPING_RX_HARDWARE | 6166 SOF_TIMESTAMPING_RAW_HARDWARE; 6167 } 6168 6169 if (tp->ptp_clock) 6170 info->phc_index = ptp_clock_index(tp->ptp_clock); 6171 else 6172 info->phc_index = -1; 6173 6174 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); 6175 6176 info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | 6177 (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) | 6178 (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | 6179 (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT); 6180 return 0; 6181} 6182 6183static int tg3_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm) 6184{ 6185 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6186 u64 correction; 6187 bool neg_adj; 6188 6189 /* Frequency adjustment is performed using hardware with a 24 bit 6190 * accumulator and a programmable correction value. On each clk, the 6191 * correction value gets added to the accumulator and when it 6192 * overflows, the time counter is incremented/decremented. 6193 */ 6194 neg_adj = diff_by_scaled_ppm(1 << 24, scaled_ppm, &correction); 6195 6196 tg3_full_lock(tp, 0); 6197 6198 if (correction) 6199 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 6200 TG3_EAV_REF_CLK_CORRECT_EN | 6201 (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | 6202 ((u32)correction & TG3_EAV_REF_CLK_CORRECT_MASK)); 6203 else 6204 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); 6205 6206 tg3_full_unlock(tp); 6207 6208 return 0; 6209} 6210 6211static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) 6212{ 6213 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6214 6215 tg3_full_lock(tp, 0); 6216 tp->ptp_adjust += delta; 6217 tg3_full_unlock(tp); 6218 6219 return 0; 6220} 6221 6222static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts, 6223 struct ptp_system_timestamp *sts) 6224{ 6225 u64 ns; 6226 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6227 6228 tg3_full_lock(tp, 0); 6229 ns = tg3_refclk_read(tp, sts); 6230 ns += tp->ptp_adjust; 6231 tg3_full_unlock(tp); 6232 6233 *ts = ns_to_timespec64(ns); 6234 6235 return 0; 6236} 6237 6238static int tg3_ptp_settime(struct ptp_clock_info *ptp, 6239 const struct timespec64 *ts) 6240{ 6241 u64 ns; 6242 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6243 6244 ns = timespec64_to_ns(ts); 6245 6246 tg3_full_lock(tp, 0); 6247 tg3_refclk_write(tp, ns); 6248 tp->ptp_adjust = 0; 6249 tg3_full_unlock(tp); 6250 6251 return 0; 6252} 6253 6254static int tg3_ptp_enable(struct ptp_clock_info *ptp, 6255 struct ptp_clock_request *rq, int on) 6256{ 6257 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6258 u32 clock_ctl; 6259 int rval = 0; 6260 6261 switch (rq->type) { 6262 case PTP_CLK_REQ_PEROUT: 6263 /* Reject requests with unsupported flags */ 6264 if (rq->perout.flags) 6265 return -EOPNOTSUPP; 6266 6267 if (rq->perout.index != 0) 6268 return -EINVAL; 6269 6270 tg3_full_lock(tp, 0); 6271 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6272 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK; 6273 6274 if (on) { 6275 u64 nsec; 6276 6277 nsec = rq->perout.start.sec * 1000000000ULL + 6278 rq->perout.start.nsec; 6279 6280 if (rq->perout.period.sec || rq->perout.period.nsec) { 6281 netdev_warn(tp->dev, 6282 "Device supports only a one-shot timesync output, period must be 0\n"); 6283 rval = -EINVAL; 6284 goto err_out; 6285 } 6286 6287 if (nsec & (1ULL << 63)) { 6288 netdev_warn(tp->dev, 6289 "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n"); 6290 rval = -EINVAL; 6291 goto err_out; 6292 } 6293 6294 tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff)); 6295 tw32(TG3_EAV_WATCHDOG0_MSB, 6296 TG3_EAV_WATCHDOG0_EN | 6297 ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK)); 6298 6299 tw32(TG3_EAV_REF_CLCK_CTL, 6300 clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0); 6301 } else { 6302 tw32(TG3_EAV_WATCHDOG0_MSB, 0); 6303 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl); 6304 } 6305 6306err_out: 6307 tg3_full_unlock(tp); 6308 return rval; 6309 6310 default: 6311 break; 6312 } 6313 6314 return -EOPNOTSUPP; 6315} 6316 6317static const struct ptp_clock_info tg3_ptp_caps = { 6318 .owner = THIS_MODULE, 6319 .name = "tg3 clock", 6320 .max_adj = 250000000, 6321 .n_alarm = 0, 6322 .n_ext_ts = 0, 6323 .n_per_out = 1, 6324 .n_pins = 0, 6325 .pps = 0, 6326 .adjfine = tg3_ptp_adjfine, 6327 .adjtime = tg3_ptp_adjtime, 6328 .gettimex64 = tg3_ptp_gettimex, 6329 .settime64 = tg3_ptp_settime, 6330 .enable = tg3_ptp_enable, 6331}; 6332 6333static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, 6334 struct skb_shared_hwtstamps *timestamp) 6335{ 6336 memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); 6337 timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + 6338 tp->ptp_adjust); 6339} 6340 6341/* tp->lock must be held */ 6342static void tg3_ptp_init(struct tg3 *tp) 6343{ 6344 if (!tg3_flag(tp, PTP_CAPABLE)) 6345 return; 6346 6347 /* Initialize the hardware clock to the system time. */ 6348 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); 6349 tp->ptp_adjust = 0; 6350 tp->ptp_info = tg3_ptp_caps; 6351} 6352 6353/* tp->lock must be held */ 6354static void tg3_ptp_resume(struct tg3 *tp) 6355{ 6356 if (!tg3_flag(tp, PTP_CAPABLE)) 6357 return; 6358 6359 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); 6360 tp->ptp_adjust = 0; 6361} 6362 6363static void tg3_ptp_fini(struct tg3 *tp) 6364{ 6365 if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) 6366 return; 6367 6368 ptp_clock_unregister(tp->ptp_clock); 6369 tp->ptp_clock = NULL; 6370 tp->ptp_adjust = 0; 6371} 6372 6373static inline int tg3_irq_sync(struct tg3 *tp) 6374{ 6375 return tp->irq_sync; 6376} 6377 6378static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 6379{ 6380 int i; 6381 6382 dst = (u32 *)((u8 *)dst + off); 6383 for (i = 0; i < len; i += sizeof(u32)) 6384 *dst++ = tr32(off + i); 6385} 6386 6387static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 6388{ 6389 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 6390 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 6391 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 6392 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 6393 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 6394 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 6395 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 6396 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 6397 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 6398 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 6399 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 6400 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 6401 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 6402 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 6403 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 6404 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 6405 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 6406 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 6407 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 6408 6409 if (tg3_flag(tp, SUPPORT_MSIX)) 6410 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 6411 6412 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 6413 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 6414 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 6415 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 6416 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 6417 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 6418 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 6419 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 6420 6421 if (!tg3_flag(tp, 5705_PLUS)) { 6422 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 6423 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 6424 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 6425 } 6426 6427 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 6428 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 6429 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 6430 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 6431 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 6432 6433 if (tg3_flag(tp, NVRAM)) 6434 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 6435} 6436 6437static void tg3_dump_state(struct tg3 *tp) 6438{ 6439 int i; 6440 u32 *regs; 6441 6442 /* If it is a PCI error, all registers will be 0xffff, 6443 * we don't dump them out, just report the error and return 6444 */ 6445 if (tp->pdev->error_state != pci_channel_io_normal) { 6446 netdev_err(tp->dev, "PCI channel ERROR!\n"); 6447 return; 6448 } 6449 6450 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 6451 if (!regs) 6452 return; 6453 6454 if (tg3_flag(tp, PCI_EXPRESS)) { 6455 /* Read up to but not including private PCI registers */ 6456 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 6457 regs[i / sizeof(u32)] = tr32(i); 6458 } else 6459 tg3_dump_legacy_regs(tp, regs); 6460 6461 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 6462 if (!regs[i + 0] && !regs[i + 1] && 6463 !regs[i + 2] && !regs[i + 3]) 6464 continue; 6465 6466 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 6467 i * 4, 6468 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 6469 } 6470 6471 kfree(regs); 6472 6473 for (i = 0; i < tp->irq_cnt; i++) { 6474 struct tg3_napi *tnapi = &tp->napi[i]; 6475 6476 /* SW status block */ 6477 netdev_err(tp->dev, 6478 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 6479 i, 6480 tnapi->hw_status->status, 6481 tnapi->hw_status->status_tag, 6482 tnapi->hw_status->rx_jumbo_consumer, 6483 tnapi->hw_status->rx_consumer, 6484 tnapi->hw_status->rx_mini_consumer, 6485 tnapi->hw_status->idx[0].rx_producer, 6486 tnapi->hw_status->idx[0].tx_consumer); 6487 6488 netdev_err(tp->dev, 6489 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 6490 i, 6491 tnapi->last_tag, tnapi->last_irq_tag, 6492 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 6493 tnapi->rx_rcb_ptr, 6494 tnapi->prodring.rx_std_prod_idx, 6495 tnapi->prodring.rx_std_cons_idx, 6496 tnapi->prodring.rx_jmb_prod_idx, 6497 tnapi->prodring.rx_jmb_cons_idx); 6498 } 6499} 6500 6501/* This is called whenever we suspect that the system chipset is re- 6502 * ordering the sequence of MMIO to the tx send mailbox. The symptom 6503 * is bogus tx completions. We try to recover by setting the 6504 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 6505 * in the workqueue. 6506 */ 6507static void tg3_tx_recover(struct tg3 *tp) 6508{ 6509 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 6510 tp->write32_tx_mbox == tg3_write_indirect_mbox); 6511 6512 netdev_warn(tp->dev, 6513 "The system may be re-ordering memory-mapped I/O " 6514 "cycles to the network device, attempting to recover. " 6515 "Please report the problem to the driver maintainer " 6516 "and include system chipset information.\n"); 6517 6518 tg3_flag_set(tp, TX_RECOVERY_PENDING); 6519} 6520 6521static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 6522{ 6523 /* Tell compiler to fetch tx indices from memory. */ 6524 barrier(); 6525 return tnapi->tx_pending - 6526 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 6527} 6528 6529/* Tigon3 never reports partial packet sends. So we do not 6530 * need special logic to handle SKBs that have not had all 6531 * of their frags sent yet, like SunGEM does. 6532 */ 6533static void tg3_tx(struct tg3_napi *tnapi) 6534{ 6535 struct tg3 *tp = tnapi->tp; 6536 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 6537 u32 sw_idx = tnapi->tx_cons; 6538 struct netdev_queue *txq; 6539 int index = tnapi - tp->napi; 6540 unsigned int pkts_compl = 0, bytes_compl = 0; 6541 6542 if (tg3_flag(tp, ENABLE_TSS)) 6543 index--; 6544 6545 txq = netdev_get_tx_queue(tp->dev, index); 6546 6547 while (sw_idx != hw_idx) { 6548 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 6549 struct sk_buff *skb = ri->skb; 6550 int i, tx_bug = 0; 6551 6552 if (unlikely(skb == NULL)) { 6553 tg3_tx_recover(tp); 6554 return; 6555 } 6556 6557 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { 6558 struct skb_shared_hwtstamps timestamp; 6559 u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); 6560 hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; 6561 6562 tg3_hwclock_to_timestamp(tp, hwclock, ×tamp); 6563 6564 skb_tstamp_tx(skb, ×tamp); 6565 } 6566 6567 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), 6568 skb_headlen(skb), DMA_TO_DEVICE); 6569 6570 ri->skb = NULL; 6571 6572 while (ri->fragmented) { 6573 ri->fragmented = false; 6574 sw_idx = NEXT_TX(sw_idx); 6575 ri = &tnapi->tx_buffers[sw_idx]; 6576 } 6577 6578 sw_idx = NEXT_TX(sw_idx); 6579 6580 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 6581 ri = &tnapi->tx_buffers[sw_idx]; 6582 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 6583 tx_bug = 1; 6584 6585 dma_unmap_page(&tp->pdev->dev, 6586 dma_unmap_addr(ri, mapping), 6587 skb_frag_size(&skb_shinfo(skb)->frags[i]), 6588 DMA_TO_DEVICE); 6589 6590 while (ri->fragmented) { 6591 ri->fragmented = false; 6592 sw_idx = NEXT_TX(sw_idx); 6593 ri = &tnapi->tx_buffers[sw_idx]; 6594 } 6595 6596 sw_idx = NEXT_TX(sw_idx); 6597 } 6598 6599 pkts_compl++; 6600 bytes_compl += skb->len; 6601 6602 dev_consume_skb_any(skb); 6603 6604 if (unlikely(tx_bug)) { 6605 tg3_tx_recover(tp); 6606 return; 6607 } 6608 } 6609 6610 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 6611 6612 tnapi->tx_cons = sw_idx; 6613 6614 /* Need to make the tx_cons update visible to tg3_start_xmit() 6615 * before checking for netif_queue_stopped(). Without the 6616 * memory barrier, there is a small possibility that tg3_start_xmit() 6617 * will miss it and cause the queue to be stopped forever. 6618 */ 6619 smp_mb(); 6620 6621 if (unlikely(netif_tx_queue_stopped(txq) && 6622 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 6623 __netif_tx_lock(txq, smp_processor_id()); 6624 if (netif_tx_queue_stopped(txq) && 6625 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 6626 netif_tx_wake_queue(txq); 6627 __netif_tx_unlock(txq); 6628 } 6629} 6630 6631static void tg3_frag_free(bool is_frag, void *data) 6632{ 6633 if (is_frag) 6634 skb_free_frag(data); 6635 else 6636 kfree(data); 6637} 6638 6639static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 6640{ 6641 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 6642 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6643 6644 if (!ri->data) 6645 return; 6646 6647 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz, 6648 DMA_FROM_DEVICE); 6649 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 6650 ri->data = NULL; 6651} 6652 6653 6654/* Returns size of skb allocated or < 0 on error. 6655 * 6656 * We only need to fill in the address because the other members 6657 * of the RX descriptor are invariant, see tg3_init_rings. 6658 * 6659 * Note the purposeful assymetry of cpu vs. chip accesses. For 6660 * posting buffers we only dirty the first cache line of the RX 6661 * descriptor (containing the address). Whereas for the RX status 6662 * buffers the cpu only reads the last cacheline of the RX descriptor 6663 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 6664 */ 6665static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 6666 u32 opaque_key, u32 dest_idx_unmasked, 6667 unsigned int *frag_size) 6668{ 6669 struct tg3_rx_buffer_desc *desc; 6670 struct ring_info *map; 6671 u8 *data; 6672 dma_addr_t mapping; 6673 int skb_size, data_size, dest_idx; 6674 6675 switch (opaque_key) { 6676 case RXD_OPAQUE_RING_STD: 6677 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6678 desc = &tpr->rx_std[dest_idx]; 6679 map = &tpr->rx_std_buffers[dest_idx]; 6680 data_size = tp->rx_pkt_map_sz; 6681 break; 6682 6683 case RXD_OPAQUE_RING_JUMBO: 6684 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6685 desc = &tpr->rx_jmb[dest_idx].std; 6686 map = &tpr->rx_jmb_buffers[dest_idx]; 6687 data_size = TG3_RX_JMB_MAP_SZ; 6688 break; 6689 6690 default: 6691 return -EINVAL; 6692 } 6693 6694 /* Do not overwrite any of the map or rp information 6695 * until we are sure we can commit to a new buffer. 6696 * 6697 * Callers depend upon this behavior and assume that 6698 * we leave everything unchanged if we fail. 6699 */ 6700 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 6701 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6702 if (skb_size <= PAGE_SIZE) { 6703 data = napi_alloc_frag(skb_size); 6704 *frag_size = skb_size; 6705 } else { 6706 data = kmalloc(skb_size, GFP_ATOMIC); 6707 *frag_size = 0; 6708 } 6709 if (!data) 6710 return -ENOMEM; 6711 6712 mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp), 6713 data_size, DMA_FROM_DEVICE); 6714 if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) { 6715 tg3_frag_free(skb_size <= PAGE_SIZE, data); 6716 return -EIO; 6717 } 6718 6719 map->data = data; 6720 dma_unmap_addr_set(map, mapping, mapping); 6721 6722 desc->addr_hi = ((u64)mapping >> 32); 6723 desc->addr_lo = ((u64)mapping & 0xffffffff); 6724 6725 return data_size; 6726} 6727 6728/* We only need to move over in the address because the other 6729 * members of the RX descriptor are invariant. See notes above 6730 * tg3_alloc_rx_data for full details. 6731 */ 6732static void tg3_recycle_rx(struct tg3_napi *tnapi, 6733 struct tg3_rx_prodring_set *dpr, 6734 u32 opaque_key, int src_idx, 6735 u32 dest_idx_unmasked) 6736{ 6737 struct tg3 *tp = tnapi->tp; 6738 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 6739 struct ring_info *src_map, *dest_map; 6740 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 6741 int dest_idx; 6742 6743 switch (opaque_key) { 6744 case RXD_OPAQUE_RING_STD: 6745 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6746 dest_desc = &dpr->rx_std[dest_idx]; 6747 dest_map = &dpr->rx_std_buffers[dest_idx]; 6748 src_desc = &spr->rx_std[src_idx]; 6749 src_map = &spr->rx_std_buffers[src_idx]; 6750 break; 6751 6752 case RXD_OPAQUE_RING_JUMBO: 6753 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6754 dest_desc = &dpr->rx_jmb[dest_idx].std; 6755 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 6756 src_desc = &spr->rx_jmb[src_idx].std; 6757 src_map = &spr->rx_jmb_buffers[src_idx]; 6758 break; 6759 6760 default: 6761 return; 6762 } 6763 6764 dest_map->data = src_map->data; 6765 dma_unmap_addr_set(dest_map, mapping, 6766 dma_unmap_addr(src_map, mapping)); 6767 dest_desc->addr_hi = src_desc->addr_hi; 6768 dest_desc->addr_lo = src_desc->addr_lo; 6769 6770 /* Ensure that the update to the skb happens after the physical 6771 * addresses have been transferred to the new BD location. 6772 */ 6773 smp_wmb(); 6774 6775 src_map->data = NULL; 6776} 6777 6778/* The RX ring scheme is composed of multiple rings which post fresh 6779 * buffers to the chip, and one special ring the chip uses to report 6780 * status back to the host. 6781 * 6782 * The special ring reports the status of received packets to the 6783 * host. The chip does not write into the original descriptor the 6784 * RX buffer was obtained from. The chip simply takes the original 6785 * descriptor as provided by the host, updates the status and length 6786 * field, then writes this into the next status ring entry. 6787 * 6788 * Each ring the host uses to post buffers to the chip is described 6789 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 6790 * it is first placed into the on-chip ram. When the packet's length 6791 * is known, it walks down the TG3_BDINFO entries to select the ring. 6792 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 6793 * which is within the range of the new packet's length is chosen. 6794 * 6795 * The "separate ring for rx status" scheme may sound queer, but it makes 6796 * sense from a cache coherency perspective. If only the host writes 6797 * to the buffer post rings, and only the chip writes to the rx status 6798 * rings, then cache lines never move beyond shared-modified state. 6799 * If both the host and chip were to write into the same ring, cache line 6800 * eviction could occur since both entities want it in an exclusive state. 6801 */ 6802static int tg3_rx(struct tg3_napi *tnapi, int budget) 6803{ 6804 struct tg3 *tp = tnapi->tp; 6805 u32 work_mask, rx_std_posted = 0; 6806 u32 std_prod_idx, jmb_prod_idx; 6807 u32 sw_idx = tnapi->rx_rcb_ptr; 6808 u16 hw_idx; 6809 int received; 6810 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 6811 6812 hw_idx = *(tnapi->rx_rcb_prod_idx); 6813 /* 6814 * We need to order the read of hw_idx and the read of 6815 * the opaque cookie. 6816 */ 6817 rmb(); 6818 work_mask = 0; 6819 received = 0; 6820 std_prod_idx = tpr->rx_std_prod_idx; 6821 jmb_prod_idx = tpr->rx_jmb_prod_idx; 6822 while (sw_idx != hw_idx && budget > 0) { 6823 struct ring_info *ri; 6824 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 6825 unsigned int len; 6826 struct sk_buff *skb; 6827 dma_addr_t dma_addr; 6828 u32 opaque_key, desc_idx, *post_ptr; 6829 u8 *data; 6830 u64 tstamp = 0; 6831 6832 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 6833 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 6834 if (opaque_key == RXD_OPAQUE_RING_STD) { 6835 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 6836 dma_addr = dma_unmap_addr(ri, mapping); 6837 data = ri->data; 6838 post_ptr = &std_prod_idx; 6839 rx_std_posted++; 6840 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 6841 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 6842 dma_addr = dma_unmap_addr(ri, mapping); 6843 data = ri->data; 6844 post_ptr = &jmb_prod_idx; 6845 } else 6846 goto next_pkt_nopost; 6847 6848 work_mask |= opaque_key; 6849 6850 if (desc->err_vlan & RXD_ERR_MASK) { 6851 drop_it: 6852 tg3_recycle_rx(tnapi, tpr, opaque_key, 6853 desc_idx, *post_ptr); 6854 drop_it_no_recycle: 6855 /* Other statistics kept track of by card. */ 6856 tnapi->rx_dropped++; 6857 goto next_pkt; 6858 } 6859 6860 prefetch(data + TG3_RX_OFFSET(tp)); 6861 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 6862 ETH_FCS_LEN; 6863 6864 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6865 RXD_FLAG_PTPSTAT_PTPV1 || 6866 (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6867 RXD_FLAG_PTPSTAT_PTPV2) { 6868 tstamp = tr32(TG3_RX_TSTAMP_LSB); 6869 tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; 6870 } 6871 6872 if (len > TG3_RX_COPY_THRESH(tp)) { 6873 int skb_size; 6874 unsigned int frag_size; 6875 6876 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 6877 *post_ptr, &frag_size); 6878 if (skb_size < 0) 6879 goto drop_it; 6880 6881 dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size, 6882 DMA_FROM_DEVICE); 6883 6884 /* Ensure that the update to the data happens 6885 * after the usage of the old DMA mapping. 6886 */ 6887 smp_wmb(); 6888 6889 ri->data = NULL; 6890 6891 if (frag_size) 6892 skb = build_skb(data, frag_size); 6893 else 6894 skb = slab_build_skb(data); 6895 if (!skb) { 6896 tg3_frag_free(frag_size != 0, data); 6897 goto drop_it_no_recycle; 6898 } 6899 skb_reserve(skb, TG3_RX_OFFSET(tp)); 6900 } else { 6901 tg3_recycle_rx(tnapi, tpr, opaque_key, 6902 desc_idx, *post_ptr); 6903 6904 skb = netdev_alloc_skb(tp->dev, 6905 len + TG3_RAW_IP_ALIGN); 6906 if (skb == NULL) 6907 goto drop_it_no_recycle; 6908 6909 skb_reserve(skb, TG3_RAW_IP_ALIGN); 6910 dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len, 6911 DMA_FROM_DEVICE); 6912 memcpy(skb->data, 6913 data + TG3_RX_OFFSET(tp), 6914 len); 6915 dma_sync_single_for_device(&tp->pdev->dev, dma_addr, 6916 len, DMA_FROM_DEVICE); 6917 } 6918 6919 skb_put(skb, len); 6920 if (tstamp) 6921 tg3_hwclock_to_timestamp(tp, tstamp, 6922 skb_hwtstamps(skb)); 6923 6924 if ((tp->dev->features & NETIF_F_RXCSUM) && 6925 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 6926 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 6927 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 6928 skb->ip_summed = CHECKSUM_UNNECESSARY; 6929 else 6930 skb_checksum_none_assert(skb); 6931 6932 skb->protocol = eth_type_trans(skb, tp->dev); 6933 6934 if (len > (tp->dev->mtu + ETH_HLEN) && 6935 skb->protocol != htons(ETH_P_8021Q) && 6936 skb->protocol != htons(ETH_P_8021AD)) { 6937 dev_kfree_skb_any(skb); 6938 goto drop_it_no_recycle; 6939 } 6940 6941 if (desc->type_flags & RXD_FLAG_VLAN && 6942 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6943 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 6944 desc->err_vlan & RXD_VLAN_MASK); 6945 6946 napi_gro_receive(&tnapi->napi, skb); 6947 6948 received++; 6949 budget--; 6950 6951next_pkt: 6952 (*post_ptr)++; 6953 6954 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6955 tpr->rx_std_prod_idx = std_prod_idx & 6956 tp->rx_std_ring_mask; 6957 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6958 tpr->rx_std_prod_idx); 6959 work_mask &= ~RXD_OPAQUE_RING_STD; 6960 rx_std_posted = 0; 6961 } 6962next_pkt_nopost: 6963 sw_idx++; 6964 sw_idx &= tp->rx_ret_ring_mask; 6965 6966 /* Refresh hw_idx to see if there is new work */ 6967 if (sw_idx == hw_idx) { 6968 hw_idx = *(tnapi->rx_rcb_prod_idx); 6969 rmb(); 6970 } 6971 } 6972 6973 /* ACK the status ring. */ 6974 tnapi->rx_rcb_ptr = sw_idx; 6975 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6976 6977 /* Refill RX ring(s). */ 6978 if (!tg3_flag(tp, ENABLE_RSS)) { 6979 /* Sync BD data before updating mailbox */ 6980 wmb(); 6981 6982 if (work_mask & RXD_OPAQUE_RING_STD) { 6983 tpr->rx_std_prod_idx = std_prod_idx & 6984 tp->rx_std_ring_mask; 6985 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6986 tpr->rx_std_prod_idx); 6987 } 6988 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 6989 tpr->rx_jmb_prod_idx = jmb_prod_idx & 6990 tp->rx_jmb_ring_mask; 6991 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6992 tpr->rx_jmb_prod_idx); 6993 } 6994 } else if (work_mask) { 6995 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 6996 * updated before the producer indices can be updated. 6997 */ 6998 smp_wmb(); 6999 7000 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 7001 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 7002 7003 if (tnapi != &tp->napi[1]) { 7004 tp->rx_refill = true; 7005 napi_schedule(&tp->napi[1].napi); 7006 } 7007 } 7008 7009 return received; 7010} 7011 7012static void tg3_poll_link(struct tg3 *tp) 7013{ 7014 /* handle link change and other phy events */ 7015 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 7016 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 7017 7018 if (sblk->status & SD_STATUS_LINK_CHG) { 7019 sblk->status = SD_STATUS_UPDATED | 7020 (sblk->status & ~SD_STATUS_LINK_CHG); 7021 spin_lock(&tp->lock); 7022 if (tg3_flag(tp, USE_PHYLIB)) { 7023 tw32_f(MAC_STATUS, 7024 (MAC_STATUS_SYNC_CHANGED | 7025 MAC_STATUS_CFG_CHANGED | 7026 MAC_STATUS_MI_COMPLETION | 7027 MAC_STATUS_LNKSTATE_CHANGED)); 7028 udelay(40); 7029 } else 7030 tg3_setup_phy(tp, false); 7031 spin_unlock(&tp->lock); 7032 } 7033 } 7034} 7035 7036static int tg3_rx_prodring_xfer(struct tg3 *tp, 7037 struct tg3_rx_prodring_set *dpr, 7038 struct tg3_rx_prodring_set *spr) 7039{ 7040 u32 si, di, cpycnt, src_prod_idx; 7041 int i, err = 0; 7042 7043 while (1) { 7044 src_prod_idx = spr->rx_std_prod_idx; 7045 7046 /* Make sure updates to the rx_std_buffers[] entries and the 7047 * standard producer index are seen in the correct order. 7048 */ 7049 smp_rmb(); 7050 7051 if (spr->rx_std_cons_idx == src_prod_idx) 7052 break; 7053 7054 if (spr->rx_std_cons_idx < src_prod_idx) 7055 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 7056 else 7057 cpycnt = tp->rx_std_ring_mask + 1 - 7058 spr->rx_std_cons_idx; 7059 7060 cpycnt = min(cpycnt, 7061 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 7062 7063 si = spr->rx_std_cons_idx; 7064 di = dpr->rx_std_prod_idx; 7065 7066 for (i = di; i < di + cpycnt; i++) { 7067 if (dpr->rx_std_buffers[i].data) { 7068 cpycnt = i - di; 7069 err = -ENOSPC; 7070 break; 7071 } 7072 } 7073 7074 if (!cpycnt) 7075 break; 7076 7077 /* Ensure that updates to the rx_std_buffers ring and the 7078 * shadowed hardware producer ring from tg3_recycle_skb() are 7079 * ordered correctly WRT the skb check above. 7080 */ 7081 smp_rmb(); 7082 7083 memcpy(&dpr->rx_std_buffers[di], 7084 &spr->rx_std_buffers[si], 7085 cpycnt * sizeof(struct ring_info)); 7086 7087 for (i = 0; i < cpycnt; i++, di++, si++) { 7088 struct tg3_rx_buffer_desc *sbd, *dbd; 7089 sbd = &spr->rx_std[si]; 7090 dbd = &dpr->rx_std[di]; 7091 dbd->addr_hi = sbd->addr_hi; 7092 dbd->addr_lo = sbd->addr_lo; 7093 } 7094 7095 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 7096 tp->rx_std_ring_mask; 7097 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 7098 tp->rx_std_ring_mask; 7099 } 7100 7101 while (1) { 7102 src_prod_idx = spr->rx_jmb_prod_idx; 7103 7104 /* Make sure updates to the rx_jmb_buffers[] entries and 7105 * the jumbo producer index are seen in the correct order. 7106 */ 7107 smp_rmb(); 7108 7109 if (spr->rx_jmb_cons_idx == src_prod_idx) 7110 break; 7111 7112 if (spr->rx_jmb_cons_idx < src_prod_idx) 7113 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 7114 else 7115 cpycnt = tp->rx_jmb_ring_mask + 1 - 7116 spr->rx_jmb_cons_idx; 7117 7118 cpycnt = min(cpycnt, 7119 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 7120 7121 si = spr->rx_jmb_cons_idx; 7122 di = dpr->rx_jmb_prod_idx; 7123 7124 for (i = di; i < di + cpycnt; i++) { 7125 if (dpr->rx_jmb_buffers[i].data) { 7126 cpycnt = i - di; 7127 err = -ENOSPC; 7128 break; 7129 } 7130 } 7131 7132 if (!cpycnt) 7133 break; 7134 7135 /* Ensure that updates to the rx_jmb_buffers ring and the 7136 * shadowed hardware producer ring from tg3_recycle_skb() are 7137 * ordered correctly WRT the skb check above. 7138 */ 7139 smp_rmb(); 7140 7141 memcpy(&dpr->rx_jmb_buffers[di], 7142 &spr->rx_jmb_buffers[si], 7143 cpycnt * sizeof(struct ring_info)); 7144 7145 for (i = 0; i < cpycnt; i++, di++, si++) { 7146 struct tg3_rx_buffer_desc *sbd, *dbd; 7147 sbd = &spr->rx_jmb[si].std; 7148 dbd = &dpr->rx_jmb[di].std; 7149 dbd->addr_hi = sbd->addr_hi; 7150 dbd->addr_lo = sbd->addr_lo; 7151 } 7152 7153 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 7154 tp->rx_jmb_ring_mask; 7155 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 7156 tp->rx_jmb_ring_mask; 7157 } 7158 7159 return err; 7160} 7161 7162static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 7163{ 7164 struct tg3 *tp = tnapi->tp; 7165 7166 /* run TX completion thread */ 7167 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 7168 tg3_tx(tnapi); 7169 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7170 return work_done; 7171 } 7172 7173 if (!tnapi->rx_rcb_prod_idx) 7174 return work_done; 7175 7176 /* run RX thread, within the bounds set by NAPI. 7177 * All RX "locking" is done by ensuring outside 7178 * code synchronizes with tg3->napi.poll() 7179 */ 7180 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 7181 work_done += tg3_rx(tnapi, budget - work_done); 7182 7183 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 7184 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 7185 int i, err = 0; 7186 u32 std_prod_idx = dpr->rx_std_prod_idx; 7187 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 7188 7189 tp->rx_refill = false; 7190 for (i = 1; i <= tp->rxq_cnt; i++) 7191 err |= tg3_rx_prodring_xfer(tp, dpr, 7192 &tp->napi[i].prodring); 7193 7194 wmb(); 7195 7196 if (std_prod_idx != dpr->rx_std_prod_idx) 7197 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 7198 dpr->rx_std_prod_idx); 7199 7200 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 7201 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 7202 dpr->rx_jmb_prod_idx); 7203 7204 if (err) 7205 tw32_f(HOSTCC_MODE, tp->coal_now); 7206 } 7207 7208 return work_done; 7209} 7210 7211static inline void tg3_reset_task_schedule(struct tg3 *tp) 7212{ 7213 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7214 schedule_work(&tp->reset_task); 7215} 7216 7217static inline void tg3_reset_task_cancel(struct tg3 *tp) 7218{ 7219 if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7220 cancel_work_sync(&tp->reset_task); 7221 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 7222} 7223 7224static int tg3_poll_msix(struct napi_struct *napi, int budget) 7225{ 7226 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7227 struct tg3 *tp = tnapi->tp; 7228 int work_done = 0; 7229 struct tg3_hw_status *sblk = tnapi->hw_status; 7230 7231 while (1) { 7232 work_done = tg3_poll_work(tnapi, work_done, budget); 7233 7234 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7235 goto tx_recovery; 7236 7237 if (unlikely(work_done >= budget)) 7238 break; 7239 7240 /* tp->last_tag is used in tg3_int_reenable() below 7241 * to tell the hw how much work has been processed, 7242 * so we must read it before checking for more work. 7243 */ 7244 tnapi->last_tag = sblk->status_tag; 7245 tnapi->last_irq_tag = tnapi->last_tag; 7246 rmb(); 7247 7248 /* check for RX/TX work to do */ 7249 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 7250 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 7251 7252 /* This test here is not race free, but will reduce 7253 * the number of interrupts by looping again. 7254 */ 7255 if (tnapi == &tp->napi[1] && tp->rx_refill) 7256 continue; 7257 7258 napi_complete_done(napi, work_done); 7259 /* Reenable interrupts. */ 7260 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 7261 7262 /* This test here is synchronized by napi_schedule() 7263 * and napi_complete() to close the race condition. 7264 */ 7265 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 7266 tw32(HOSTCC_MODE, tp->coalesce_mode | 7267 HOSTCC_MODE_ENABLE | 7268 tnapi->coal_now); 7269 } 7270 break; 7271 } 7272 } 7273 7274 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7275 return work_done; 7276 7277tx_recovery: 7278 /* work_done is guaranteed to be less than budget. */ 7279 napi_complete(napi); 7280 tg3_reset_task_schedule(tp); 7281 return work_done; 7282} 7283 7284static void tg3_process_error(struct tg3 *tp) 7285{ 7286 u32 val; 7287 bool real_error = false; 7288 7289 if (tg3_flag(tp, ERROR_PROCESSED)) 7290 return; 7291 7292 /* Check Flow Attention register */ 7293 val = tr32(HOSTCC_FLOW_ATTN); 7294 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 7295 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 7296 real_error = true; 7297 } 7298 7299 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 7300 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 7301 real_error = true; 7302 } 7303 7304 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 7305 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 7306 real_error = true; 7307 } 7308 7309 if (!real_error) 7310 return; 7311 7312 tg3_dump_state(tp); 7313 7314 tg3_flag_set(tp, ERROR_PROCESSED); 7315 tg3_reset_task_schedule(tp); 7316} 7317 7318static int tg3_poll(struct napi_struct *napi, int budget) 7319{ 7320 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7321 struct tg3 *tp = tnapi->tp; 7322 int work_done = 0; 7323 struct tg3_hw_status *sblk = tnapi->hw_status; 7324 7325 while (1) { 7326 if (sblk->status & SD_STATUS_ERROR) 7327 tg3_process_error(tp); 7328 7329 tg3_poll_link(tp); 7330 7331 work_done = tg3_poll_work(tnapi, work_done, budget); 7332 7333 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7334 goto tx_recovery; 7335 7336 if (unlikely(work_done >= budget)) 7337 break; 7338 7339 if (tg3_flag(tp, TAGGED_STATUS)) { 7340 /* tp->last_tag is used in tg3_int_reenable() below 7341 * to tell the hw how much work has been processed, 7342 * so we must read it before checking for more work. 7343 */ 7344 tnapi->last_tag = sblk->status_tag; 7345 tnapi->last_irq_tag = tnapi->last_tag; 7346 rmb(); 7347 } else 7348 sblk->status &= ~SD_STATUS_UPDATED; 7349 7350 if (likely(!tg3_has_work(tnapi))) { 7351 napi_complete_done(napi, work_done); 7352 tg3_int_reenable(tnapi); 7353 break; 7354 } 7355 } 7356 7357 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7358 return work_done; 7359 7360tx_recovery: 7361 /* work_done is guaranteed to be less than budget. */ 7362 napi_complete(napi); 7363 tg3_reset_task_schedule(tp); 7364 return work_done; 7365} 7366 7367static void tg3_napi_disable(struct tg3 *tp) 7368{ 7369 int i; 7370 7371 for (i = tp->irq_cnt - 1; i >= 0; i--) 7372 napi_disable(&tp->napi[i].napi); 7373} 7374 7375static void tg3_napi_enable(struct tg3 *tp) 7376{ 7377 int i; 7378 7379 for (i = 0; i < tp->irq_cnt; i++) 7380 napi_enable(&tp->napi[i].napi); 7381} 7382 7383static void tg3_napi_init(struct tg3 *tp) 7384{ 7385 int i; 7386 7387 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll); 7388 for (i = 1; i < tp->irq_cnt; i++) 7389 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix); 7390} 7391 7392static void tg3_napi_fini(struct tg3 *tp) 7393{ 7394 int i; 7395 7396 for (i = 0; i < tp->irq_cnt; i++) 7397 netif_napi_del(&tp->napi[i].napi); 7398} 7399 7400static inline void tg3_netif_stop(struct tg3 *tp) 7401{ 7402 netif_trans_update(tp->dev); /* prevent tx timeout */ 7403 tg3_napi_disable(tp); 7404 netif_carrier_off(tp->dev); 7405 netif_tx_disable(tp->dev); 7406} 7407 7408/* tp->lock must be held */ 7409static inline void tg3_netif_start(struct tg3 *tp) 7410{ 7411 tg3_ptp_resume(tp); 7412 7413 /* NOTE: unconditional netif_tx_wake_all_queues is only 7414 * appropriate so long as all callers are assured to 7415 * have free tx slots (such as after tg3_init_hw) 7416 */ 7417 netif_tx_wake_all_queues(tp->dev); 7418 7419 if (tp->link_up) 7420 netif_carrier_on(tp->dev); 7421 7422 tg3_napi_enable(tp); 7423 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 7424 tg3_enable_ints(tp); 7425} 7426 7427static void tg3_irq_quiesce(struct tg3 *tp) 7428 __releases(tp->lock) 7429 __acquires(tp->lock) 7430{ 7431 int i; 7432 7433 BUG_ON(tp->irq_sync); 7434 7435 tp->irq_sync = 1; 7436 smp_mb(); 7437 7438 spin_unlock_bh(&tp->lock); 7439 7440 for (i = 0; i < tp->irq_cnt; i++) 7441 synchronize_irq(tp->napi[i].irq_vec); 7442 7443 spin_lock_bh(&tp->lock); 7444} 7445 7446/* Fully shutdown all tg3 driver activity elsewhere in the system. 7447 * If irq_sync is non-zero, then the IRQ handler must be synchronized 7448 * with as well. Most of the time, this is not necessary except when 7449 * shutting down the device. 7450 */ 7451static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 7452{ 7453 spin_lock_bh(&tp->lock); 7454 if (irq_sync) 7455 tg3_irq_quiesce(tp); 7456} 7457 7458static inline void tg3_full_unlock(struct tg3 *tp) 7459{ 7460 spin_unlock_bh(&tp->lock); 7461} 7462 7463/* One-shot MSI handler - Chip automatically disables interrupt 7464 * after sending MSI so driver doesn't have to do it. 7465 */ 7466static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 7467{ 7468 struct tg3_napi *tnapi = dev_id; 7469 struct tg3 *tp = tnapi->tp; 7470 7471 prefetch(tnapi->hw_status); 7472 if (tnapi->rx_rcb) 7473 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7474 7475 if (likely(!tg3_irq_sync(tp))) 7476 napi_schedule(&tnapi->napi); 7477 7478 return IRQ_HANDLED; 7479} 7480 7481/* MSI ISR - No need to check for interrupt sharing and no need to 7482 * flush status block and interrupt mailbox. PCI ordering rules 7483 * guarantee that MSI will arrive after the status block. 7484 */ 7485static irqreturn_t tg3_msi(int irq, void *dev_id) 7486{ 7487 struct tg3_napi *tnapi = dev_id; 7488 struct tg3 *tp = tnapi->tp; 7489 7490 prefetch(tnapi->hw_status); 7491 if (tnapi->rx_rcb) 7492 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7493 /* 7494 * Writing any value to intr-mbox-0 clears PCI INTA# and 7495 * chip-internal interrupt pending events. 7496 * Writing non-zero to intr-mbox-0 additional tells the 7497 * NIC to stop sending us irqs, engaging "in-intr-handler" 7498 * event coalescing. 7499 */ 7500 tw32_mailbox(tnapi->int_mbox, 0x00000001); 7501 if (likely(!tg3_irq_sync(tp))) 7502 napi_schedule(&tnapi->napi); 7503 7504 return IRQ_RETVAL(1); 7505} 7506 7507static irqreturn_t tg3_interrupt(int irq, void *dev_id) 7508{ 7509 struct tg3_napi *tnapi = dev_id; 7510 struct tg3 *tp = tnapi->tp; 7511 struct tg3_hw_status *sblk = tnapi->hw_status; 7512 unsigned int handled = 1; 7513 7514 /* In INTx mode, it is possible for the interrupt to arrive at 7515 * the CPU before the status block posted prior to the interrupt. 7516 * Reading the PCI State register will confirm whether the 7517 * interrupt is ours and will flush the status block. 7518 */ 7519 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 7520 if (tg3_flag(tp, CHIP_RESETTING) || 7521 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7522 handled = 0; 7523 goto out; 7524 } 7525 } 7526 7527 /* 7528 * Writing any value to intr-mbox-0 clears PCI INTA# and 7529 * chip-internal interrupt pending events. 7530 * Writing non-zero to intr-mbox-0 additional tells the 7531 * NIC to stop sending us irqs, engaging "in-intr-handler" 7532 * event coalescing. 7533 * 7534 * Flush the mailbox to de-assert the IRQ immediately to prevent 7535 * spurious interrupts. The flush impacts performance but 7536 * excessive spurious interrupts can be worse in some cases. 7537 */ 7538 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7539 if (tg3_irq_sync(tp)) 7540 goto out; 7541 sblk->status &= ~SD_STATUS_UPDATED; 7542 if (likely(tg3_has_work(tnapi))) { 7543 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7544 napi_schedule(&tnapi->napi); 7545 } else { 7546 /* No work, shared interrupt perhaps? re-enable 7547 * interrupts, and flush that PCI write 7548 */ 7549 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 7550 0x00000000); 7551 } 7552out: 7553 return IRQ_RETVAL(handled); 7554} 7555 7556static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 7557{ 7558 struct tg3_napi *tnapi = dev_id; 7559 struct tg3 *tp = tnapi->tp; 7560 struct tg3_hw_status *sblk = tnapi->hw_status; 7561 unsigned int handled = 1; 7562 7563 /* In INTx mode, it is possible for the interrupt to arrive at 7564 * the CPU before the status block posted prior to the interrupt. 7565 * Reading the PCI State register will confirm whether the 7566 * interrupt is ours and will flush the status block. 7567 */ 7568 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 7569 if (tg3_flag(tp, CHIP_RESETTING) || 7570 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7571 handled = 0; 7572 goto out; 7573 } 7574 } 7575 7576 /* 7577 * writing any value to intr-mbox-0 clears PCI INTA# and 7578 * chip-internal interrupt pending events. 7579 * writing non-zero to intr-mbox-0 additional tells the 7580 * NIC to stop sending us irqs, engaging "in-intr-handler" 7581 * event coalescing. 7582 * 7583 * Flush the mailbox to de-assert the IRQ immediately to prevent 7584 * spurious interrupts. The flush impacts performance but 7585 * excessive spurious interrupts can be worse in some cases. 7586 */ 7587 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7588 7589 /* 7590 * In a shared interrupt configuration, sometimes other devices' 7591 * interrupts will scream. We record the current status tag here 7592 * so that the above check can report that the screaming interrupts 7593 * are unhandled. Eventually they will be silenced. 7594 */ 7595 tnapi->last_irq_tag = sblk->status_tag; 7596 7597 if (tg3_irq_sync(tp)) 7598 goto out; 7599 7600 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7601 7602 napi_schedule(&tnapi->napi); 7603 7604out: 7605 return IRQ_RETVAL(handled); 7606} 7607 7608/* ISR for interrupt test */ 7609static irqreturn_t tg3_test_isr(int irq, void *dev_id) 7610{ 7611 struct tg3_napi *tnapi = dev_id; 7612 struct tg3 *tp = tnapi->tp; 7613 struct tg3_hw_status *sblk = tnapi->hw_status; 7614 7615 if ((sblk->status & SD_STATUS_UPDATED) || 7616 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7617 tg3_disable_ints(tp); 7618 return IRQ_RETVAL(1); 7619 } 7620 return IRQ_RETVAL(0); 7621} 7622 7623#ifdef CONFIG_NET_POLL_CONTROLLER 7624static void tg3_poll_controller(struct net_device *dev) 7625{ 7626 int i; 7627 struct tg3 *tp = netdev_priv(dev); 7628 7629 if (tg3_irq_sync(tp)) 7630 return; 7631 7632 for (i = 0; i < tp->irq_cnt; i++) 7633 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 7634} 7635#endif 7636 7637static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue) 7638{ 7639 struct tg3 *tp = netdev_priv(dev); 7640 7641 if (netif_msg_tx_err(tp)) { 7642 netdev_err(dev, "transmit timed out, resetting\n"); 7643 tg3_dump_state(tp); 7644 } 7645 7646 tg3_reset_task_schedule(tp); 7647} 7648 7649/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 7650static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 7651{ 7652 u32 base = (u32) mapping & 0xffffffff; 7653 7654 return base + len + 8 < base; 7655} 7656 7657/* Test for TSO DMA buffers that cross into regions which are within MSS bytes 7658 * of any 4GB boundaries: 4G, 8G, etc 7659 */ 7660static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7661 u32 len, u32 mss) 7662{ 7663 if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) { 7664 u32 base = (u32) mapping & 0xffffffff; 7665 7666 return ((base + len + (mss & 0x3fff)) < base); 7667 } 7668 return 0; 7669} 7670 7671/* Test for DMA addresses > 40-bit */ 7672static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7673 int len) 7674{ 7675#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 7676 if (tg3_flag(tp, 40BIT_DMA_BUG)) 7677 return ((u64) mapping + len) > DMA_BIT_MASK(40); 7678 return 0; 7679#else 7680 return 0; 7681#endif 7682} 7683 7684static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 7685 dma_addr_t mapping, u32 len, u32 flags, 7686 u32 mss, u32 vlan) 7687{ 7688 txbd->addr_hi = ((u64) mapping >> 32); 7689 txbd->addr_lo = ((u64) mapping & 0xffffffff); 7690 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 7691 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 7692} 7693 7694static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 7695 dma_addr_t map, u32 len, u32 flags, 7696 u32 mss, u32 vlan) 7697{ 7698 struct tg3 *tp = tnapi->tp; 7699 bool hwbug = false; 7700 7701 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 7702 hwbug = true; 7703 7704 if (tg3_4g_overflow_test(map, len)) 7705 hwbug = true; 7706 7707 if (tg3_4g_tso_overflow_test(tp, map, len, mss)) 7708 hwbug = true; 7709 7710 if (tg3_40bit_overflow_test(tp, map, len)) 7711 hwbug = true; 7712 7713 if (tp->dma_limit) { 7714 u32 prvidx = *entry; 7715 u32 tmp_flag = flags & ~TXD_FLAG_END; 7716 while (len > tp->dma_limit && *budget) { 7717 u32 frag_len = tp->dma_limit; 7718 len -= tp->dma_limit; 7719 7720 /* Avoid the 8byte DMA problem */ 7721 if (len <= 8) { 7722 len += tp->dma_limit / 2; 7723 frag_len = tp->dma_limit / 2; 7724 } 7725 7726 tnapi->tx_buffers[*entry].fragmented = true; 7727 7728 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7729 frag_len, tmp_flag, mss, vlan); 7730 *budget -= 1; 7731 prvidx = *entry; 7732 *entry = NEXT_TX(*entry); 7733 7734 map += frag_len; 7735 } 7736 7737 if (len) { 7738 if (*budget) { 7739 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7740 len, flags, mss, vlan); 7741 *budget -= 1; 7742 *entry = NEXT_TX(*entry); 7743 } else { 7744 hwbug = true; 7745 tnapi->tx_buffers[prvidx].fragmented = false; 7746 } 7747 } 7748 } else { 7749 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7750 len, flags, mss, vlan); 7751 *entry = NEXT_TX(*entry); 7752 } 7753 7754 return hwbug; 7755} 7756 7757static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 7758{ 7759 int i; 7760 struct sk_buff *skb; 7761 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 7762 7763 skb = txb->skb; 7764 txb->skb = NULL; 7765 7766 dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping), 7767 skb_headlen(skb), DMA_TO_DEVICE); 7768 7769 while (txb->fragmented) { 7770 txb->fragmented = false; 7771 entry = NEXT_TX(entry); 7772 txb = &tnapi->tx_buffers[entry]; 7773 } 7774 7775 for (i = 0; i <= last; i++) { 7776 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7777 7778 entry = NEXT_TX(entry); 7779 txb = &tnapi->tx_buffers[entry]; 7780 7781 dma_unmap_page(&tnapi->tp->pdev->dev, 7782 dma_unmap_addr(txb, mapping), 7783 skb_frag_size(frag), DMA_TO_DEVICE); 7784 7785 while (txb->fragmented) { 7786 txb->fragmented = false; 7787 entry = NEXT_TX(entry); 7788 txb = &tnapi->tx_buffers[entry]; 7789 } 7790 } 7791} 7792 7793/* Workaround 4GB and 40-bit hardware DMA bugs. */ 7794static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 7795 struct sk_buff **pskb, 7796 u32 *entry, u32 *budget, 7797 u32 base_flags, u32 mss, u32 vlan) 7798{ 7799 struct tg3 *tp = tnapi->tp; 7800 struct sk_buff *new_skb, *skb = *pskb; 7801 dma_addr_t new_addr = 0; 7802 int ret = 0; 7803 7804 if (tg3_asic_rev(tp) != ASIC_REV_5701) 7805 new_skb = skb_copy(skb, GFP_ATOMIC); 7806 else { 7807 int more_headroom = 4 - ((unsigned long)skb->data & 3); 7808 7809 new_skb = skb_copy_expand(skb, 7810 skb_headroom(skb) + more_headroom, 7811 skb_tailroom(skb), GFP_ATOMIC); 7812 } 7813 7814 if (!new_skb) { 7815 ret = -1; 7816 } else { 7817 /* New SKB is guaranteed to be linear. */ 7818 new_addr = dma_map_single(&tp->pdev->dev, new_skb->data, 7819 new_skb->len, DMA_TO_DEVICE); 7820 /* Make sure the mapping succeeded */ 7821 if (dma_mapping_error(&tp->pdev->dev, new_addr)) { 7822 dev_kfree_skb_any(new_skb); 7823 ret = -1; 7824 } else { 7825 u32 save_entry = *entry; 7826 7827 base_flags |= TXD_FLAG_END; 7828 7829 tnapi->tx_buffers[*entry].skb = new_skb; 7830 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 7831 mapping, new_addr); 7832 7833 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 7834 new_skb->len, base_flags, 7835 mss, vlan)) { 7836 tg3_tx_skb_unmap(tnapi, save_entry, -1); 7837 dev_kfree_skb_any(new_skb); 7838 ret = -1; 7839 } 7840 } 7841 } 7842 7843 dev_consume_skb_any(skb); 7844 *pskb = new_skb; 7845 return ret; 7846} 7847 7848static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb) 7849{ 7850 /* Check if we will never have enough descriptors, 7851 * as gso_segs can be more than current ring size 7852 */ 7853 return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3; 7854} 7855 7856static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 7857 7858/* Use GSO to workaround all TSO packets that meet HW bug conditions 7859 * indicated in tg3_tx_frag_set() 7860 */ 7861static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi, 7862 struct netdev_queue *txq, struct sk_buff *skb) 7863{ 7864 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 7865 struct sk_buff *segs, *seg, *next; 7866 7867 /* Estimate the number of fragments in the worst case */ 7868 if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) { 7869 netif_tx_stop_queue(txq); 7870 7871 /* netif_tx_stop_queue() must be done before checking 7872 * checking tx index in tg3_tx_avail() below, because in 7873 * tg3_tx(), we update tx index before checking for 7874 * netif_tx_queue_stopped(). 7875 */ 7876 smp_mb(); 7877 if (tg3_tx_avail(tnapi) <= frag_cnt_est) 7878 return NETDEV_TX_BUSY; 7879 7880 netif_tx_wake_queue(txq); 7881 } 7882 7883 segs = skb_gso_segment(skb, tp->dev->features & 7884 ~(NETIF_F_TSO | NETIF_F_TSO6)); 7885 if (IS_ERR(segs) || !segs) { 7886 tnapi->tx_dropped++; 7887 goto tg3_tso_bug_end; 7888 } 7889 7890 skb_list_walk_safe(segs, seg, next) { 7891 skb_mark_not_on_list(seg); 7892 tg3_start_xmit(seg, tp->dev); 7893 } 7894 7895tg3_tso_bug_end: 7896 dev_consume_skb_any(skb); 7897 7898 return NETDEV_TX_OK; 7899} 7900 7901/* hard_start_xmit for all devices */ 7902static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 7903{ 7904 struct tg3 *tp = netdev_priv(dev); 7905 u32 len, entry, base_flags, mss, vlan = 0; 7906 u32 budget; 7907 int i = -1, would_hit_hwbug; 7908 dma_addr_t mapping; 7909 struct tg3_napi *tnapi; 7910 struct netdev_queue *txq; 7911 unsigned int last; 7912 struct iphdr *iph = NULL; 7913 struct tcphdr *tcph = NULL; 7914 __sum16 tcp_csum = 0, ip_csum = 0; 7915 __be16 ip_tot_len = 0; 7916 7917 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 7918 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 7919 if (tg3_flag(tp, ENABLE_TSS)) 7920 tnapi++; 7921 7922 budget = tg3_tx_avail(tnapi); 7923 7924 /* We are running in BH disabled context with netif_tx_lock 7925 * and TX reclaim runs via tp->napi.poll inside of a software 7926 * interrupt. Furthermore, IRQ processing runs lockless so we have 7927 * no IRQ context deadlocks to worry about either. Rejoice! 7928 */ 7929 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 7930 if (!netif_tx_queue_stopped(txq)) { 7931 netif_tx_stop_queue(txq); 7932 7933 /* This is a hard error, log it. */ 7934 netdev_err(dev, 7935 "BUG! Tx Ring full when queue awake!\n"); 7936 } 7937 return NETDEV_TX_BUSY; 7938 } 7939 7940 entry = tnapi->tx_prod; 7941 base_flags = 0; 7942 7943 mss = skb_shinfo(skb)->gso_size; 7944 if (mss) { 7945 u32 tcp_opt_len, hdr_len; 7946 7947 if (skb_cow_head(skb, 0)) 7948 goto drop; 7949 7950 iph = ip_hdr(skb); 7951 tcp_opt_len = tcp_optlen(skb); 7952 7953 hdr_len = skb_tcp_all_headers(skb) - ETH_HLEN; 7954 7955 /* HW/FW can not correctly segment packets that have been 7956 * vlan encapsulated. 7957 */ 7958 if (skb->protocol == htons(ETH_P_8021Q) || 7959 skb->protocol == htons(ETH_P_8021AD)) { 7960 if (tg3_tso_bug_gso_check(tnapi, skb)) 7961 return tg3_tso_bug(tp, tnapi, txq, skb); 7962 goto drop; 7963 } 7964 7965 if (!skb_is_gso_v6(skb)) { 7966 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7967 tg3_flag(tp, TSO_BUG)) { 7968 if (tg3_tso_bug_gso_check(tnapi, skb)) 7969 return tg3_tso_bug(tp, tnapi, txq, skb); 7970 goto drop; 7971 } 7972 ip_csum = iph->check; 7973 ip_tot_len = iph->tot_len; 7974 iph->check = 0; 7975 iph->tot_len = htons(mss + hdr_len); 7976 } 7977 7978 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 7979 TXD_FLAG_CPU_POST_DMA); 7980 7981 tcph = tcp_hdr(skb); 7982 tcp_csum = tcph->check; 7983 7984 if (tg3_flag(tp, HW_TSO_1) || 7985 tg3_flag(tp, HW_TSO_2) || 7986 tg3_flag(tp, HW_TSO_3)) { 7987 tcph->check = 0; 7988 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 7989 } else { 7990 tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 7991 0, IPPROTO_TCP, 0); 7992 } 7993 7994 if (tg3_flag(tp, HW_TSO_3)) { 7995 mss |= (hdr_len & 0xc) << 12; 7996 if (hdr_len & 0x10) 7997 base_flags |= 0x00000010; 7998 base_flags |= (hdr_len & 0x3e0) << 5; 7999 } else if (tg3_flag(tp, HW_TSO_2)) 8000 mss |= hdr_len << 9; 8001 else if (tg3_flag(tp, HW_TSO_1) || 8002 tg3_asic_rev(tp) == ASIC_REV_5705) { 8003 if (tcp_opt_len || iph->ihl > 5) { 8004 int tsflags; 8005 8006 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8007 mss |= (tsflags << 11); 8008 } 8009 } else { 8010 if (tcp_opt_len || iph->ihl > 5) { 8011 int tsflags; 8012 8013 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8014 base_flags |= tsflags << 12; 8015 } 8016 } 8017 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { 8018 /* HW/FW can not correctly checksum packets that have been 8019 * vlan encapsulated. 8020 */ 8021 if (skb->protocol == htons(ETH_P_8021Q) || 8022 skb->protocol == htons(ETH_P_8021AD)) { 8023 if (skb_checksum_help(skb)) 8024 goto drop; 8025 } else { 8026 base_flags |= TXD_FLAG_TCPUDP_CSUM; 8027 } 8028 } 8029 8030 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 8031 !mss && skb->len > VLAN_ETH_FRAME_LEN) 8032 base_flags |= TXD_FLAG_JMB_PKT; 8033 8034 if (skb_vlan_tag_present(skb)) { 8035 base_flags |= TXD_FLAG_VLAN; 8036 vlan = skb_vlan_tag_get(skb); 8037 } 8038 8039 if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && 8040 tg3_flag(tp, TX_TSTAMP_EN)) { 8041 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 8042 base_flags |= TXD_FLAG_HWTSTAMP; 8043 } 8044 8045 len = skb_headlen(skb); 8046 8047 mapping = dma_map_single(&tp->pdev->dev, skb->data, len, 8048 DMA_TO_DEVICE); 8049 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8050 goto drop; 8051 8052 8053 tnapi->tx_buffers[entry].skb = skb; 8054 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 8055 8056 would_hit_hwbug = 0; 8057 8058 if (tg3_flag(tp, 5701_DMA_BUG)) 8059 would_hit_hwbug = 1; 8060 8061 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 8062 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 8063 mss, vlan)) { 8064 would_hit_hwbug = 1; 8065 } else if (skb_shinfo(skb)->nr_frags > 0) { 8066 u32 tmp_mss = mss; 8067 8068 if (!tg3_flag(tp, HW_TSO_1) && 8069 !tg3_flag(tp, HW_TSO_2) && 8070 !tg3_flag(tp, HW_TSO_3)) 8071 tmp_mss = 0; 8072 8073 /* Now loop through additional data 8074 * fragments, and queue them. 8075 */ 8076 last = skb_shinfo(skb)->nr_frags - 1; 8077 for (i = 0; i <= last; i++) { 8078 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 8079 8080 len = skb_frag_size(frag); 8081 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 8082 len, DMA_TO_DEVICE); 8083 8084 tnapi->tx_buffers[entry].skb = NULL; 8085 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 8086 mapping); 8087 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8088 goto dma_error; 8089 8090 if (!budget || 8091 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 8092 len, base_flags | 8093 ((i == last) ? TXD_FLAG_END : 0), 8094 tmp_mss, vlan)) { 8095 would_hit_hwbug = 1; 8096 break; 8097 } 8098 } 8099 } 8100 8101 if (would_hit_hwbug) { 8102 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 8103 8104 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) { 8105 /* If it's a TSO packet, do GSO instead of 8106 * allocating and copying to a large linear SKB 8107 */ 8108 if (ip_tot_len) { 8109 iph->check = ip_csum; 8110 iph->tot_len = ip_tot_len; 8111 } 8112 tcph->check = tcp_csum; 8113 return tg3_tso_bug(tp, tnapi, txq, skb); 8114 } 8115 8116 /* If the workaround fails due to memory/mapping 8117 * failure, silently drop this packet. 8118 */ 8119 entry = tnapi->tx_prod; 8120 budget = tg3_tx_avail(tnapi); 8121 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 8122 base_flags, mss, vlan)) 8123 goto drop_nofree; 8124 } 8125 8126 skb_tx_timestamp(skb); 8127 netdev_tx_sent_queue(txq, skb->len); 8128 8129 /* Sync BD data before updating mailbox */ 8130 wmb(); 8131 8132 tnapi->tx_prod = entry; 8133 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 8134 netif_tx_stop_queue(txq); 8135 8136 /* netif_tx_stop_queue() must be done before checking 8137 * checking tx index in tg3_tx_avail() below, because in 8138 * tg3_tx(), we update tx index before checking for 8139 * netif_tx_queue_stopped(). 8140 */ 8141 smp_mb(); 8142 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 8143 netif_tx_wake_queue(txq); 8144 } 8145 8146 if (!netdev_xmit_more() || netif_xmit_stopped(txq)) { 8147 /* Packets are ready, update Tx producer idx on card. */ 8148 tw32_tx_mbox(tnapi->prodmbox, entry); 8149 } 8150 8151 return NETDEV_TX_OK; 8152 8153dma_error: 8154 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 8155 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 8156drop: 8157 dev_kfree_skb_any(skb); 8158drop_nofree: 8159 tnapi->tx_dropped++; 8160 return NETDEV_TX_OK; 8161} 8162 8163static void tg3_mac_loopback(struct tg3 *tp, bool enable) 8164{ 8165 if (enable) { 8166 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 8167 MAC_MODE_PORT_MODE_MASK); 8168 8169 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 8170 8171 if (!tg3_flag(tp, 5705_PLUS)) 8172 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 8173 8174 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 8175 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 8176 else 8177 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 8178 } else { 8179 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 8180 8181 if (tg3_flag(tp, 5705_PLUS) || 8182 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 8183 tg3_asic_rev(tp) == ASIC_REV_5700) 8184 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 8185 } 8186 8187 tw32(MAC_MODE, tp->mac_mode); 8188 udelay(40); 8189} 8190 8191static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 8192{ 8193 u32 val, bmcr, mac_mode, ptest = 0; 8194 8195 tg3_phy_toggle_apd(tp, false); 8196 tg3_phy_toggle_automdix(tp, false); 8197 8198 if (extlpbk && tg3_phy_set_extloopbk(tp)) 8199 return -EIO; 8200 8201 bmcr = BMCR_FULLDPLX; 8202 switch (speed) { 8203 case SPEED_10: 8204 break; 8205 case SPEED_100: 8206 bmcr |= BMCR_SPEED100; 8207 break; 8208 case SPEED_1000: 8209 default: 8210 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 8211 speed = SPEED_100; 8212 bmcr |= BMCR_SPEED100; 8213 } else { 8214 speed = SPEED_1000; 8215 bmcr |= BMCR_SPEED1000; 8216 } 8217 } 8218 8219 if (extlpbk) { 8220 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 8221 tg3_readphy(tp, MII_CTRL1000, &val); 8222 val |= CTL1000_AS_MASTER | 8223 CTL1000_ENABLE_MASTER; 8224 tg3_writephy(tp, MII_CTRL1000, val); 8225 } else { 8226 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 8227 MII_TG3_FET_PTEST_TRIM_2; 8228 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 8229 } 8230 } else 8231 bmcr |= BMCR_LOOPBACK; 8232 8233 tg3_writephy(tp, MII_BMCR, bmcr); 8234 8235 /* The write needs to be flushed for the FETs */ 8236 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 8237 tg3_readphy(tp, MII_BMCR, &bmcr); 8238 8239 udelay(40); 8240 8241 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 8242 tg3_asic_rev(tp) == ASIC_REV_5785) { 8243 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 8244 MII_TG3_FET_PTEST_FRC_TX_LINK | 8245 MII_TG3_FET_PTEST_FRC_TX_LOCK); 8246 8247 /* The write needs to be flushed for the AC131 */ 8248 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 8249 } 8250 8251 /* Reset to prevent losing 1st rx packet intermittently */ 8252 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 8253 tg3_flag(tp, 5780_CLASS)) { 8254 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8255 udelay(10); 8256 tw32_f(MAC_RX_MODE, tp->rx_mode); 8257 } 8258 8259 mac_mode = tp->mac_mode & 8260 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 8261 if (speed == SPEED_1000) 8262 mac_mode |= MAC_MODE_PORT_MODE_GMII; 8263 else 8264 mac_mode |= MAC_MODE_PORT_MODE_MII; 8265 8266 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 8267 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 8268 8269 if (masked_phy_id == TG3_PHY_ID_BCM5401) 8270 mac_mode &= ~MAC_MODE_LINK_POLARITY; 8271 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 8272 mac_mode |= MAC_MODE_LINK_POLARITY; 8273 8274 tg3_writephy(tp, MII_TG3_EXT_CTRL, 8275 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 8276 } 8277 8278 tw32(MAC_MODE, mac_mode); 8279 udelay(40); 8280 8281 return 0; 8282} 8283 8284static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 8285{ 8286 struct tg3 *tp = netdev_priv(dev); 8287 8288 if (features & NETIF_F_LOOPBACK) { 8289 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 8290 return; 8291 8292 spin_lock_bh(&tp->lock); 8293 tg3_mac_loopback(tp, true); 8294 netif_carrier_on(tp->dev); 8295 spin_unlock_bh(&tp->lock); 8296 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 8297 } else { 8298 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 8299 return; 8300 8301 spin_lock_bh(&tp->lock); 8302 tg3_mac_loopback(tp, false); 8303 /* Force link status check */ 8304 tg3_setup_phy(tp, true); 8305 spin_unlock_bh(&tp->lock); 8306 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 8307 } 8308} 8309 8310static netdev_features_t tg3_fix_features(struct net_device *dev, 8311 netdev_features_t features) 8312{ 8313 struct tg3 *tp = netdev_priv(dev); 8314 8315 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 8316 features &= ~NETIF_F_ALL_TSO; 8317 8318 return features; 8319} 8320 8321static int tg3_set_features(struct net_device *dev, netdev_features_t features) 8322{ 8323 netdev_features_t changed = dev->features ^ features; 8324 8325 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 8326 tg3_set_loopback(dev, features); 8327 8328 return 0; 8329} 8330 8331static void tg3_rx_prodring_free(struct tg3 *tp, 8332 struct tg3_rx_prodring_set *tpr) 8333{ 8334 int i; 8335 8336 if (tpr != &tp->napi[0].prodring) { 8337 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 8338 i = (i + 1) & tp->rx_std_ring_mask) 8339 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8340 tp->rx_pkt_map_sz); 8341 8342 if (tg3_flag(tp, JUMBO_CAPABLE)) { 8343 for (i = tpr->rx_jmb_cons_idx; 8344 i != tpr->rx_jmb_prod_idx; 8345 i = (i + 1) & tp->rx_jmb_ring_mask) { 8346 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8347 TG3_RX_JMB_MAP_SZ); 8348 } 8349 } 8350 8351 return; 8352 } 8353 8354 for (i = 0; i <= tp->rx_std_ring_mask; i++) 8355 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8356 tp->rx_pkt_map_sz); 8357 8358 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8359 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 8360 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8361 TG3_RX_JMB_MAP_SZ); 8362 } 8363} 8364 8365/* Initialize rx rings for packet processing. 8366 * 8367 * The chip has been shut down and the driver detached from 8368 * the networking, so no interrupts or new tx packets will 8369 * end up in the driver. tp->{tx,}lock are held and thus 8370 * we may not sleep. 8371 */ 8372static int tg3_rx_prodring_alloc(struct tg3 *tp, 8373 struct tg3_rx_prodring_set *tpr) 8374{ 8375 u32 i, rx_pkt_dma_sz; 8376 8377 tpr->rx_std_cons_idx = 0; 8378 tpr->rx_std_prod_idx = 0; 8379 tpr->rx_jmb_cons_idx = 0; 8380 tpr->rx_jmb_prod_idx = 0; 8381 8382 if (tpr != &tp->napi[0].prodring) { 8383 memset(&tpr->rx_std_buffers[0], 0, 8384 TG3_RX_STD_BUFF_RING_SIZE(tp)); 8385 if (tpr->rx_jmb_buffers) 8386 memset(&tpr->rx_jmb_buffers[0], 0, 8387 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 8388 goto done; 8389 } 8390 8391 /* Zero out all descriptors. */ 8392 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 8393 8394 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 8395 if (tg3_flag(tp, 5780_CLASS) && 8396 tp->dev->mtu > ETH_DATA_LEN) 8397 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 8398 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 8399 8400 /* Initialize invariants of the rings, we only set this 8401 * stuff once. This works because the card does not 8402 * write into the rx buffer posting rings. 8403 */ 8404 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 8405 struct tg3_rx_buffer_desc *rxd; 8406 8407 rxd = &tpr->rx_std[i]; 8408 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 8409 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 8410 rxd->opaque = (RXD_OPAQUE_RING_STD | 8411 (i << RXD_OPAQUE_INDEX_SHIFT)); 8412 } 8413 8414 /* Now allocate fresh SKBs for each rx ring. */ 8415 for (i = 0; i < tp->rx_pending; i++) { 8416 unsigned int frag_size; 8417 8418 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 8419 &frag_size) < 0) { 8420 netdev_warn(tp->dev, 8421 "Using a smaller RX standard ring. Only " 8422 "%d out of %d buffers were allocated " 8423 "successfully\n", i, tp->rx_pending); 8424 if (i == 0) 8425 goto initfail; 8426 tp->rx_pending = i; 8427 break; 8428 } 8429 } 8430 8431 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8432 goto done; 8433 8434 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 8435 8436 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 8437 goto done; 8438 8439 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 8440 struct tg3_rx_buffer_desc *rxd; 8441 8442 rxd = &tpr->rx_jmb[i].std; 8443 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 8444 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 8445 RXD_FLAG_JUMBO; 8446 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 8447 (i << RXD_OPAQUE_INDEX_SHIFT)); 8448 } 8449 8450 for (i = 0; i < tp->rx_jumbo_pending; i++) { 8451 unsigned int frag_size; 8452 8453 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 8454 &frag_size) < 0) { 8455 netdev_warn(tp->dev, 8456 "Using a smaller RX jumbo ring. Only %d " 8457 "out of %d buffers were allocated " 8458 "successfully\n", i, tp->rx_jumbo_pending); 8459 if (i == 0) 8460 goto initfail; 8461 tp->rx_jumbo_pending = i; 8462 break; 8463 } 8464 } 8465 8466done: 8467 return 0; 8468 8469initfail: 8470 tg3_rx_prodring_free(tp, tpr); 8471 return -ENOMEM; 8472} 8473 8474static void tg3_rx_prodring_fini(struct tg3 *tp, 8475 struct tg3_rx_prodring_set *tpr) 8476{ 8477 kfree(tpr->rx_std_buffers); 8478 tpr->rx_std_buffers = NULL; 8479 kfree(tpr->rx_jmb_buffers); 8480 tpr->rx_jmb_buffers = NULL; 8481 if (tpr->rx_std) { 8482 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 8483 tpr->rx_std, tpr->rx_std_mapping); 8484 tpr->rx_std = NULL; 8485 } 8486 if (tpr->rx_jmb) { 8487 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 8488 tpr->rx_jmb, tpr->rx_jmb_mapping); 8489 tpr->rx_jmb = NULL; 8490 } 8491} 8492 8493static int tg3_rx_prodring_init(struct tg3 *tp, 8494 struct tg3_rx_prodring_set *tpr) 8495{ 8496 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 8497 GFP_KERNEL); 8498 if (!tpr->rx_std_buffers) 8499 return -ENOMEM; 8500 8501 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 8502 TG3_RX_STD_RING_BYTES(tp), 8503 &tpr->rx_std_mapping, 8504 GFP_KERNEL); 8505 if (!tpr->rx_std) 8506 goto err_out; 8507 8508 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8509 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 8510 GFP_KERNEL); 8511 if (!tpr->rx_jmb_buffers) 8512 goto err_out; 8513 8514 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 8515 TG3_RX_JMB_RING_BYTES(tp), 8516 &tpr->rx_jmb_mapping, 8517 GFP_KERNEL); 8518 if (!tpr->rx_jmb) 8519 goto err_out; 8520 } 8521 8522 return 0; 8523 8524err_out: 8525 tg3_rx_prodring_fini(tp, tpr); 8526 return -ENOMEM; 8527} 8528 8529/* Free up pending packets in all rx/tx rings. 8530 * 8531 * The chip has been shut down and the driver detached from 8532 * the networking, so no interrupts or new tx packets will 8533 * end up in the driver. tp->{tx,}lock is not held and we are not 8534 * in an interrupt context and thus may sleep. 8535 */ 8536static void tg3_free_rings(struct tg3 *tp) 8537{ 8538 int i, j; 8539 8540 for (j = 0; j < tp->irq_cnt; j++) { 8541 struct tg3_napi *tnapi = &tp->napi[j]; 8542 8543 tg3_rx_prodring_free(tp, &tnapi->prodring); 8544 8545 if (!tnapi->tx_buffers) 8546 continue; 8547 8548 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 8549 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 8550 8551 if (!skb) 8552 continue; 8553 8554 tg3_tx_skb_unmap(tnapi, i, 8555 skb_shinfo(skb)->nr_frags - 1); 8556 8557 dev_consume_skb_any(skb); 8558 } 8559 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 8560 } 8561} 8562 8563/* Initialize tx/rx rings for packet processing. 8564 * 8565 * The chip has been shut down and the driver detached from 8566 * the networking, so no interrupts or new tx packets will 8567 * end up in the driver. tp->{tx,}lock are held and thus 8568 * we may not sleep. 8569 */ 8570static int tg3_init_rings(struct tg3 *tp) 8571{ 8572 int i; 8573 8574 /* Free up all the SKBs. */ 8575 tg3_free_rings(tp); 8576 8577 for (i = 0; i < tp->irq_cnt; i++) { 8578 struct tg3_napi *tnapi = &tp->napi[i]; 8579 8580 tnapi->last_tag = 0; 8581 tnapi->last_irq_tag = 0; 8582 tnapi->hw_status->status = 0; 8583 tnapi->hw_status->status_tag = 0; 8584 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8585 8586 tnapi->tx_prod = 0; 8587 tnapi->tx_cons = 0; 8588 if (tnapi->tx_ring) 8589 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 8590 8591 tnapi->rx_rcb_ptr = 0; 8592 if (tnapi->rx_rcb) 8593 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 8594 8595 if (tnapi->prodring.rx_std && 8596 tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 8597 tg3_free_rings(tp); 8598 return -ENOMEM; 8599 } 8600 } 8601 8602 return 0; 8603} 8604 8605static void tg3_mem_tx_release(struct tg3 *tp) 8606{ 8607 int i; 8608 8609 for (i = 0; i < tp->irq_max; i++) { 8610 struct tg3_napi *tnapi = &tp->napi[i]; 8611 8612 if (tnapi->tx_ring) { 8613 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 8614 tnapi->tx_ring, tnapi->tx_desc_mapping); 8615 tnapi->tx_ring = NULL; 8616 } 8617 8618 kfree(tnapi->tx_buffers); 8619 tnapi->tx_buffers = NULL; 8620 } 8621} 8622 8623static int tg3_mem_tx_acquire(struct tg3 *tp) 8624{ 8625 int i; 8626 struct tg3_napi *tnapi = &tp->napi[0]; 8627 8628 /* If multivector TSS is enabled, vector 0 does not handle 8629 * tx interrupts. Don't allocate any resources for it. 8630 */ 8631 if (tg3_flag(tp, ENABLE_TSS)) 8632 tnapi++; 8633 8634 for (i = 0; i < tp->txq_cnt; i++, tnapi++) { 8635 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE, 8636 sizeof(struct tg3_tx_ring_info), 8637 GFP_KERNEL); 8638 if (!tnapi->tx_buffers) 8639 goto err_out; 8640 8641 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 8642 TG3_TX_RING_BYTES, 8643 &tnapi->tx_desc_mapping, 8644 GFP_KERNEL); 8645 if (!tnapi->tx_ring) 8646 goto err_out; 8647 } 8648 8649 return 0; 8650 8651err_out: 8652 tg3_mem_tx_release(tp); 8653 return -ENOMEM; 8654} 8655 8656static void tg3_mem_rx_release(struct tg3 *tp) 8657{ 8658 int i; 8659 8660 for (i = 0; i < tp->irq_max; i++) { 8661 struct tg3_napi *tnapi = &tp->napi[i]; 8662 8663 tg3_rx_prodring_fini(tp, &tnapi->prodring); 8664 8665 if (!tnapi->rx_rcb) 8666 continue; 8667 8668 dma_free_coherent(&tp->pdev->dev, 8669 TG3_RX_RCB_RING_BYTES(tp), 8670 tnapi->rx_rcb, 8671 tnapi->rx_rcb_mapping); 8672 tnapi->rx_rcb = NULL; 8673 } 8674} 8675 8676static int tg3_mem_rx_acquire(struct tg3 *tp) 8677{ 8678 unsigned int i, limit; 8679 8680 limit = tp->rxq_cnt; 8681 8682 /* If RSS is enabled, we need a (dummy) producer ring 8683 * set on vector zero. This is the true hw prodring. 8684 */ 8685 if (tg3_flag(tp, ENABLE_RSS)) 8686 limit++; 8687 8688 for (i = 0; i < limit; i++) { 8689 struct tg3_napi *tnapi = &tp->napi[i]; 8690 8691 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 8692 goto err_out; 8693 8694 /* If multivector RSS is enabled, vector 0 8695 * does not handle rx or tx interrupts. 8696 * Don't allocate any resources for it. 8697 */ 8698 if (!i && tg3_flag(tp, ENABLE_RSS)) 8699 continue; 8700 8701 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 8702 TG3_RX_RCB_RING_BYTES(tp), 8703 &tnapi->rx_rcb_mapping, 8704 GFP_KERNEL); 8705 if (!tnapi->rx_rcb) 8706 goto err_out; 8707 } 8708 8709 return 0; 8710 8711err_out: 8712 tg3_mem_rx_release(tp); 8713 return -ENOMEM; 8714} 8715 8716/* 8717 * Must not be invoked with interrupt sources disabled and 8718 * the hardware shutdown down. 8719 */ 8720static void tg3_free_consistent(struct tg3 *tp) 8721{ 8722 int i; 8723 8724 for (i = 0; i < tp->irq_cnt; i++) { 8725 struct tg3_napi *tnapi = &tp->napi[i]; 8726 8727 if (tnapi->hw_status) { 8728 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 8729 tnapi->hw_status, 8730 tnapi->status_mapping); 8731 tnapi->hw_status = NULL; 8732 } 8733 } 8734 8735 tg3_mem_rx_release(tp); 8736 tg3_mem_tx_release(tp); 8737 8738 /* tp->hw_stats can be referenced safely: 8739 * 1. under rtnl_lock 8740 * 2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set. 8741 */ 8742 if (tp->hw_stats) { 8743 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8744 tp->hw_stats, tp->stats_mapping); 8745 tp->hw_stats = NULL; 8746 } 8747} 8748 8749/* 8750 * Must not be invoked with interrupt sources disabled and 8751 * the hardware shutdown down. Can sleep. 8752 */ 8753static int tg3_alloc_consistent(struct tg3 *tp) 8754{ 8755 int i; 8756 8757 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 8758 sizeof(struct tg3_hw_stats), 8759 &tp->stats_mapping, GFP_KERNEL); 8760 if (!tp->hw_stats) 8761 goto err_out; 8762 8763 for (i = 0; i < tp->irq_cnt; i++) { 8764 struct tg3_napi *tnapi = &tp->napi[i]; 8765 struct tg3_hw_status *sblk; 8766 8767 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 8768 TG3_HW_STATUS_SIZE, 8769 &tnapi->status_mapping, 8770 GFP_KERNEL); 8771 if (!tnapi->hw_status) 8772 goto err_out; 8773 8774 sblk = tnapi->hw_status; 8775 8776 if (tg3_flag(tp, ENABLE_RSS)) { 8777 u16 *prodptr = NULL; 8778 8779 /* 8780 * When RSS is enabled, the status block format changes 8781 * slightly. The "rx_jumbo_consumer", "reserved", 8782 * and "rx_mini_consumer" members get mapped to the 8783 * other three rx return ring producer indexes. 8784 */ 8785 switch (i) { 8786 case 1: 8787 prodptr = &sblk->idx[0].rx_producer; 8788 break; 8789 case 2: 8790 prodptr = &sblk->rx_jumbo_consumer; 8791 break; 8792 case 3: 8793 prodptr = &sblk->reserved; 8794 break; 8795 case 4: 8796 prodptr = &sblk->rx_mini_consumer; 8797 break; 8798 } 8799 tnapi->rx_rcb_prod_idx = prodptr; 8800 } else { 8801 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 8802 } 8803 } 8804 8805 if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp)) 8806 goto err_out; 8807 8808 return 0; 8809 8810err_out: 8811 tg3_free_consistent(tp); 8812 return -ENOMEM; 8813} 8814 8815#define MAX_WAIT_CNT 1000 8816 8817/* To stop a block, clear the enable bit and poll till it 8818 * clears. tp->lock is held. 8819 */ 8820static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent) 8821{ 8822 unsigned int i; 8823 u32 val; 8824 8825 if (tg3_flag(tp, 5705_PLUS)) { 8826 switch (ofs) { 8827 case RCVLSC_MODE: 8828 case DMAC_MODE: 8829 case MBFREE_MODE: 8830 case BUFMGR_MODE: 8831 case MEMARB_MODE: 8832 /* We can't enable/disable these bits of the 8833 * 5705/5750, just say success. 8834 */ 8835 return 0; 8836 8837 default: 8838 break; 8839 } 8840 } 8841 8842 val = tr32(ofs); 8843 val &= ~enable_bit; 8844 tw32_f(ofs, val); 8845 8846 for (i = 0; i < MAX_WAIT_CNT; i++) { 8847 if (pci_channel_offline(tp->pdev)) { 8848 dev_err(&tp->pdev->dev, 8849 "tg3_stop_block device offline, " 8850 "ofs=%lx enable_bit=%x\n", 8851 ofs, enable_bit); 8852 return -ENODEV; 8853 } 8854 8855 udelay(100); 8856 val = tr32(ofs); 8857 if ((val & enable_bit) == 0) 8858 break; 8859 } 8860 8861 if (i == MAX_WAIT_CNT && !silent) { 8862 dev_err(&tp->pdev->dev, 8863 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 8864 ofs, enable_bit); 8865 return -ENODEV; 8866 } 8867 8868 return 0; 8869} 8870 8871/* tp->lock is held. */ 8872static int tg3_abort_hw(struct tg3 *tp, bool silent) 8873{ 8874 int i, err; 8875 8876 tg3_disable_ints(tp); 8877 8878 if (pci_channel_offline(tp->pdev)) { 8879 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE); 8880 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8881 err = -ENODEV; 8882 goto err_no_dev; 8883 } 8884 8885 tp->rx_mode &= ~RX_MODE_ENABLE; 8886 tw32_f(MAC_RX_MODE, tp->rx_mode); 8887 udelay(10); 8888 8889 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 8890 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 8891 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 8892 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 8893 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 8894 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 8895 8896 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 8897 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 8898 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 8899 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 8900 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 8901 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 8902 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 8903 8904 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8905 tw32_f(MAC_MODE, tp->mac_mode); 8906 udelay(40); 8907 8908 tp->tx_mode &= ~TX_MODE_ENABLE; 8909 tw32_f(MAC_TX_MODE, tp->tx_mode); 8910 8911 for (i = 0; i < MAX_WAIT_CNT; i++) { 8912 udelay(100); 8913 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 8914 break; 8915 } 8916 if (i >= MAX_WAIT_CNT) { 8917 dev_err(&tp->pdev->dev, 8918 "%s timed out, TX_MODE_ENABLE will not clear " 8919 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 8920 err |= -ENODEV; 8921 } 8922 8923 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 8924 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 8925 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 8926 8927 tw32(FTQ_RESET, 0xffffffff); 8928 tw32(FTQ_RESET, 0x00000000); 8929 8930 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 8931 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 8932 8933err_no_dev: 8934 for (i = 0; i < tp->irq_cnt; i++) { 8935 struct tg3_napi *tnapi = &tp->napi[i]; 8936 if (tnapi->hw_status) 8937 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8938 } 8939 8940 return err; 8941} 8942 8943/* Save PCI command register before chip reset */ 8944static void tg3_save_pci_state(struct tg3 *tp) 8945{ 8946 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 8947} 8948 8949/* Restore PCI state after chip reset */ 8950static void tg3_restore_pci_state(struct tg3 *tp) 8951{ 8952 u32 val; 8953 8954 /* Re-enable indirect register accesses. */ 8955 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 8956 tp->misc_host_ctrl); 8957 8958 /* Set MAX PCI retry to zero. */ 8959 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 8960 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 8961 tg3_flag(tp, PCIX_MODE)) 8962 val |= PCISTATE_RETRY_SAME_DMA; 8963 /* Allow reads and writes to the APE register and memory space. */ 8964 if (tg3_flag(tp, ENABLE_APE)) 8965 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8966 PCISTATE_ALLOW_APE_SHMEM_WR | 8967 PCISTATE_ALLOW_APE_PSPACE_WR; 8968 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 8969 8970 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 8971 8972 if (!tg3_flag(tp, PCI_EXPRESS)) { 8973 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 8974 tp->pci_cacheline_sz); 8975 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 8976 tp->pci_lat_timer); 8977 } 8978 8979 /* Make sure PCI-X relaxed ordering bit is clear. */ 8980 if (tg3_flag(tp, PCIX_MODE)) { 8981 u16 pcix_cmd; 8982 8983 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8984 &pcix_cmd); 8985 pcix_cmd &= ~PCI_X_CMD_ERO; 8986 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8987 pcix_cmd); 8988 } 8989 8990 if (tg3_flag(tp, 5780_CLASS)) { 8991 8992 /* Chip reset on 5780 will reset MSI enable bit, 8993 * so need to restore it. 8994 */ 8995 if (tg3_flag(tp, USING_MSI)) { 8996 u16 ctrl; 8997 8998 pci_read_config_word(tp->pdev, 8999 tp->msi_cap + PCI_MSI_FLAGS, 9000 &ctrl); 9001 pci_write_config_word(tp->pdev, 9002 tp->msi_cap + PCI_MSI_FLAGS, 9003 ctrl | PCI_MSI_FLAGS_ENABLE); 9004 val = tr32(MSGINT_MODE); 9005 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 9006 } 9007 } 9008} 9009 9010static void tg3_override_clk(struct tg3 *tp) 9011{ 9012 u32 val; 9013 9014 switch (tg3_asic_rev(tp)) { 9015 case ASIC_REV_5717: 9016 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9017 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9018 TG3_CPMU_MAC_ORIDE_ENABLE); 9019 break; 9020 9021 case ASIC_REV_5719: 9022 case ASIC_REV_5720: 9023 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9024 break; 9025 9026 default: 9027 return; 9028 } 9029} 9030 9031static void tg3_restore_clk(struct tg3 *tp) 9032{ 9033 u32 val; 9034 9035 switch (tg3_asic_rev(tp)) { 9036 case ASIC_REV_5717: 9037 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9038 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, 9039 val & ~TG3_CPMU_MAC_ORIDE_ENABLE); 9040 break; 9041 9042 case ASIC_REV_5719: 9043 case ASIC_REV_5720: 9044 val = tr32(TG3_CPMU_CLCK_ORIDE); 9045 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9046 break; 9047 9048 default: 9049 return; 9050 } 9051} 9052 9053/* tp->lock is held. */ 9054static int tg3_chip_reset(struct tg3 *tp) 9055 __releases(tp->lock) 9056 __acquires(tp->lock) 9057{ 9058 u32 val; 9059 void (*write_op)(struct tg3 *, u32, u32); 9060 int i, err; 9061 9062 if (!pci_device_is_present(tp->pdev)) 9063 return -ENODEV; 9064 9065 tg3_nvram_lock(tp); 9066 9067 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 9068 9069 /* No matching tg3_nvram_unlock() after this because 9070 * chip reset below will undo the nvram lock. 9071 */ 9072 tp->nvram_lock_cnt = 0; 9073 9074 /* GRC_MISC_CFG core clock reset will clear the memory 9075 * enable bit in PCI register 4 and the MSI enable bit 9076 * on some chips, so we save relevant registers here. 9077 */ 9078 tg3_save_pci_state(tp); 9079 9080 if (tg3_asic_rev(tp) == ASIC_REV_5752 || 9081 tg3_flag(tp, 5755_PLUS)) 9082 tw32(GRC_FASTBOOT_PC, 0); 9083 9084 /* 9085 * We must avoid the readl() that normally takes place. 9086 * It locks machines, causes machine checks, and other 9087 * fun things. So, temporarily disable the 5701 9088 * hardware workaround, while we do the reset. 9089 */ 9090 write_op = tp->write32; 9091 if (write_op == tg3_write_flush_reg32) 9092 tp->write32 = tg3_write32; 9093 9094 /* Prevent the irq handler from reading or writing PCI registers 9095 * during chip reset when the memory enable bit in the PCI command 9096 * register may be cleared. The chip does not generate interrupt 9097 * at this time, but the irq handler may still be called due to irq 9098 * sharing or irqpoll. 9099 */ 9100 tg3_flag_set(tp, CHIP_RESETTING); 9101 for (i = 0; i < tp->irq_cnt; i++) { 9102 struct tg3_napi *tnapi = &tp->napi[i]; 9103 if (tnapi->hw_status) { 9104 tnapi->hw_status->status = 0; 9105 tnapi->hw_status->status_tag = 0; 9106 } 9107 tnapi->last_tag = 0; 9108 tnapi->last_irq_tag = 0; 9109 } 9110 smp_mb(); 9111 9112 tg3_full_unlock(tp); 9113 9114 for (i = 0; i < tp->irq_cnt; i++) 9115 synchronize_irq(tp->napi[i].irq_vec); 9116 9117 tg3_full_lock(tp, 0); 9118 9119 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9120 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9121 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9122 } 9123 9124 /* do the reset */ 9125 val = GRC_MISC_CFG_CORECLK_RESET; 9126 9127 if (tg3_flag(tp, PCI_EXPRESS)) { 9128 /* Force PCIe 1.0a mode */ 9129 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 9130 !tg3_flag(tp, 57765_PLUS) && 9131 tr32(TG3_PCIE_PHY_TSTCTL) == 9132 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 9133 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 9134 9135 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) { 9136 tw32(GRC_MISC_CFG, (1 << 29)); 9137 val |= (1 << 29); 9138 } 9139 } 9140 9141 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 9142 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 9143 tw32(GRC_VCPU_EXT_CTRL, 9144 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 9145 } 9146 9147 /* Set the clock to the highest frequency to avoid timeouts. With link 9148 * aware mode, the clock speed could be slow and bootcode does not 9149 * complete within the expected time. Override the clock to allow the 9150 * bootcode to finish sooner and then restore it. 9151 */ 9152 tg3_override_clk(tp); 9153 9154 /* Manage gphy power for all CPMU absent PCIe devices. */ 9155 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 9156 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 9157 9158 tw32(GRC_MISC_CFG, val); 9159 9160 /* restore 5701 hardware bug workaround write method */ 9161 tp->write32 = write_op; 9162 9163 /* Unfortunately, we have to delay before the PCI read back. 9164 * Some 575X chips even will not respond to a PCI cfg access 9165 * when the reset command is given to the chip. 9166 * 9167 * How do these hardware designers expect things to work 9168 * properly if the PCI write is posted for a long period 9169 * of time? It is always necessary to have some method by 9170 * which a register read back can occur to push the write 9171 * out which does the reset. 9172 * 9173 * For most tg3 variants the trick below was working. 9174 * Ho hum... 9175 */ 9176 udelay(120); 9177 9178 /* Flush PCI posted writes. The normal MMIO registers 9179 * are inaccessible at this time so this is the only 9180 * way to make this reliably (actually, this is no longer 9181 * the case, see above). I tried to use indirect 9182 * register read/write but this upset some 5701 variants. 9183 */ 9184 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 9185 9186 udelay(120); 9187 9188 if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) { 9189 u16 val16; 9190 9191 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) { 9192 int j; 9193 u32 cfg_val; 9194 9195 /* Wait for link training to complete. */ 9196 for (j = 0; j < 5000; j++) 9197 udelay(100); 9198 9199 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 9200 pci_write_config_dword(tp->pdev, 0xc4, 9201 cfg_val | (1 << 15)); 9202 } 9203 9204 /* Clear the "no snoop" and "relaxed ordering" bits. */ 9205 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN; 9206 /* 9207 * Older PCIe devices only support the 128 byte 9208 * MPS setting. Enforce the restriction. 9209 */ 9210 if (!tg3_flag(tp, CPMU_PRESENT)) 9211 val16 |= PCI_EXP_DEVCTL_PAYLOAD; 9212 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16); 9213 9214 /* Clear error status */ 9215 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA, 9216 PCI_EXP_DEVSTA_CED | 9217 PCI_EXP_DEVSTA_NFED | 9218 PCI_EXP_DEVSTA_FED | 9219 PCI_EXP_DEVSTA_URD); 9220 } 9221 9222 tg3_restore_pci_state(tp); 9223 9224 tg3_flag_clear(tp, CHIP_RESETTING); 9225 tg3_flag_clear(tp, ERROR_PROCESSED); 9226 9227 val = 0; 9228 if (tg3_flag(tp, 5780_CLASS)) 9229 val = tr32(MEMARB_MODE); 9230 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 9231 9232 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) { 9233 tg3_stop_fw(tp); 9234 tw32(0x5000, 0x400); 9235 } 9236 9237 if (tg3_flag(tp, IS_SSB_CORE)) { 9238 /* 9239 * BCM4785: In order to avoid repercussions from using 9240 * potentially defective internal ROM, stop the Rx RISC CPU, 9241 * which is not required. 9242 */ 9243 tg3_stop_fw(tp); 9244 tg3_halt_cpu(tp, RX_CPU_BASE); 9245 } 9246 9247 err = tg3_poll_fw(tp); 9248 if (err) 9249 return err; 9250 9251 tw32(GRC_MODE, tp->grc_mode); 9252 9253 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) { 9254 val = tr32(0xc4); 9255 9256 tw32(0xc4, val | (1 << 15)); 9257 } 9258 9259 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 9260 tg3_asic_rev(tp) == ASIC_REV_5705) { 9261 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 9262 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) 9263 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 9264 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9265 } 9266 9267 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9268 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 9269 val = tp->mac_mode; 9270 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9271 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 9272 val = tp->mac_mode; 9273 } else 9274 val = 0; 9275 9276 tw32_f(MAC_MODE, val); 9277 udelay(40); 9278 9279 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 9280 9281 tg3_mdio_start(tp); 9282 9283 if (tg3_flag(tp, PCI_EXPRESS) && 9284 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 9285 tg3_asic_rev(tp) != ASIC_REV_5785 && 9286 !tg3_flag(tp, 57765_PLUS)) { 9287 val = tr32(0x7c00); 9288 9289 tw32(0x7c00, val | (1 << 25)); 9290 } 9291 9292 tg3_restore_clk(tp); 9293 9294 /* Increase the core clock speed to fix tx timeout issue for 5762 9295 * with 100Mbps link speed. 9296 */ 9297 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 9298 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9299 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9300 TG3_CPMU_MAC_ORIDE_ENABLE); 9301 } 9302 9303 /* Reprobe ASF enable state. */ 9304 tg3_flag_clear(tp, ENABLE_ASF); 9305 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 9306 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 9307 9308 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 9309 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 9310 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 9311 u32 nic_cfg; 9312 9313 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 9314 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 9315 tg3_flag_set(tp, ENABLE_ASF); 9316 tp->last_event_jiffies = jiffies; 9317 if (tg3_flag(tp, 5750_PLUS)) 9318 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 9319 9320 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg); 9321 if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK) 9322 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 9323 if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID) 9324 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 9325 } 9326 } 9327 9328 return 0; 9329} 9330 9331static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 9332static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 9333static void __tg3_set_rx_mode(struct net_device *); 9334 9335/* tp->lock is held. */ 9336static int tg3_halt(struct tg3 *tp, int kind, bool silent) 9337{ 9338 int err, i; 9339 9340 tg3_stop_fw(tp); 9341 9342 tg3_write_sig_pre_reset(tp, kind); 9343 9344 tg3_abort_hw(tp, silent); 9345 err = tg3_chip_reset(tp); 9346 9347 __tg3_set_mac_addr(tp, false); 9348 9349 tg3_write_sig_legacy(tp, kind); 9350 tg3_write_sig_post_reset(tp, kind); 9351 9352 if (tp->hw_stats) { 9353 /* Save the stats across chip resets... */ 9354 tg3_get_nstats(tp, &tp->net_stats_prev); 9355 tg3_get_estats(tp, &tp->estats_prev); 9356 9357 /* And make sure the next sample is new data */ 9358 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 9359 9360 for (i = 0; i < TG3_IRQ_MAX_VECS; ++i) { 9361 struct tg3_napi *tnapi = &tp->napi[i]; 9362 9363 tnapi->rx_dropped = 0; 9364 tnapi->tx_dropped = 0; 9365 } 9366 } 9367 9368 return err; 9369} 9370 9371static int tg3_set_mac_addr(struct net_device *dev, void *p) 9372{ 9373 struct tg3 *tp = netdev_priv(dev); 9374 struct sockaddr *addr = p; 9375 int err = 0; 9376 bool skip_mac_1 = false; 9377 9378 if (!is_valid_ether_addr(addr->sa_data)) 9379 return -EADDRNOTAVAIL; 9380 9381 eth_hw_addr_set(dev, addr->sa_data); 9382 9383 if (!netif_running(dev)) 9384 return 0; 9385 9386 if (tg3_flag(tp, ENABLE_ASF)) { 9387 u32 addr0_high, addr0_low, addr1_high, addr1_low; 9388 9389 addr0_high = tr32(MAC_ADDR_0_HIGH); 9390 addr0_low = tr32(MAC_ADDR_0_LOW); 9391 addr1_high = tr32(MAC_ADDR_1_HIGH); 9392 addr1_low = tr32(MAC_ADDR_1_LOW); 9393 9394 /* Skip MAC addr 1 if ASF is using it. */ 9395 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 9396 !(addr1_high == 0 && addr1_low == 0)) 9397 skip_mac_1 = true; 9398 } 9399 spin_lock_bh(&tp->lock); 9400 __tg3_set_mac_addr(tp, skip_mac_1); 9401 __tg3_set_rx_mode(dev); 9402 spin_unlock_bh(&tp->lock); 9403 9404 return err; 9405} 9406 9407/* tp->lock is held. */ 9408static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 9409 dma_addr_t mapping, u32 maxlen_flags, 9410 u32 nic_addr) 9411{ 9412 tg3_write_mem(tp, 9413 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 9414 ((u64) mapping >> 32)); 9415 tg3_write_mem(tp, 9416 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 9417 ((u64) mapping & 0xffffffff)); 9418 tg3_write_mem(tp, 9419 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 9420 maxlen_flags); 9421 9422 if (!tg3_flag(tp, 5705_PLUS)) 9423 tg3_write_mem(tp, 9424 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 9425 nic_addr); 9426} 9427 9428 9429static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9430{ 9431 int i = 0; 9432 9433 if (!tg3_flag(tp, ENABLE_TSS)) { 9434 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 9435 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 9436 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 9437 } else { 9438 tw32(HOSTCC_TXCOL_TICKS, 0); 9439 tw32(HOSTCC_TXMAX_FRAMES, 0); 9440 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 9441 9442 for (; i < tp->txq_cnt; i++) { 9443 u32 reg; 9444 9445 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 9446 tw32(reg, ec->tx_coalesce_usecs); 9447 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 9448 tw32(reg, ec->tx_max_coalesced_frames); 9449 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 9450 tw32(reg, ec->tx_max_coalesced_frames_irq); 9451 } 9452 } 9453 9454 for (; i < tp->irq_max - 1; i++) { 9455 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 9456 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 9457 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9458 } 9459} 9460 9461static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9462{ 9463 int i = 0; 9464 u32 limit = tp->rxq_cnt; 9465 9466 if (!tg3_flag(tp, ENABLE_RSS)) { 9467 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 9468 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 9469 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 9470 limit--; 9471 } else { 9472 tw32(HOSTCC_RXCOL_TICKS, 0); 9473 tw32(HOSTCC_RXMAX_FRAMES, 0); 9474 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 9475 } 9476 9477 for (; i < limit; i++) { 9478 u32 reg; 9479 9480 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 9481 tw32(reg, ec->rx_coalesce_usecs); 9482 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 9483 tw32(reg, ec->rx_max_coalesced_frames); 9484 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 9485 tw32(reg, ec->rx_max_coalesced_frames_irq); 9486 } 9487 9488 for (; i < tp->irq_max - 1; i++) { 9489 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 9490 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 9491 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9492 } 9493} 9494 9495static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 9496{ 9497 tg3_coal_tx_init(tp, ec); 9498 tg3_coal_rx_init(tp, ec); 9499 9500 if (!tg3_flag(tp, 5705_PLUS)) { 9501 u32 val = ec->stats_block_coalesce_usecs; 9502 9503 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 9504 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 9505 9506 if (!tp->link_up) 9507 val = 0; 9508 9509 tw32(HOSTCC_STAT_COAL_TICKS, val); 9510 } 9511} 9512 9513/* tp->lock is held. */ 9514static void tg3_tx_rcbs_disable(struct tg3 *tp) 9515{ 9516 u32 txrcb, limit; 9517 9518 /* Disable all transmit rings but the first. */ 9519 if (!tg3_flag(tp, 5705_PLUS)) 9520 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 9521 else if (tg3_flag(tp, 5717_PLUS)) 9522 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 9523 else if (tg3_flag(tp, 57765_CLASS) || 9524 tg3_asic_rev(tp) == ASIC_REV_5762) 9525 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 9526 else 9527 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9528 9529 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9530 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 9531 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 9532 BDINFO_FLAGS_DISABLED); 9533} 9534 9535/* tp->lock is held. */ 9536static void tg3_tx_rcbs_init(struct tg3 *tp) 9537{ 9538 int i = 0; 9539 u32 txrcb = NIC_SRAM_SEND_RCB; 9540 9541 if (tg3_flag(tp, ENABLE_TSS)) 9542 i++; 9543 9544 for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) { 9545 struct tg3_napi *tnapi = &tp->napi[i]; 9546 9547 if (!tnapi->tx_ring) 9548 continue; 9549 9550 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 9551 (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT), 9552 NIC_SRAM_TX_BUFFER_DESC); 9553 } 9554} 9555 9556/* tp->lock is held. */ 9557static void tg3_rx_ret_rcbs_disable(struct tg3 *tp) 9558{ 9559 u32 rxrcb, limit; 9560 9561 /* Disable all receive return rings but the first. */ 9562 if (tg3_flag(tp, 5717_PLUS)) 9563 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 9564 else if (!tg3_flag(tp, 5705_PLUS)) 9565 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 9566 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9567 tg3_asic_rev(tp) == ASIC_REV_5762 || 9568 tg3_flag(tp, 57765_CLASS)) 9569 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 9570 else 9571 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9572 9573 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9574 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 9575 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 9576 BDINFO_FLAGS_DISABLED); 9577} 9578 9579/* tp->lock is held. */ 9580static void tg3_rx_ret_rcbs_init(struct tg3 *tp) 9581{ 9582 int i = 0; 9583 u32 rxrcb = NIC_SRAM_RCV_RET_RCB; 9584 9585 if (tg3_flag(tp, ENABLE_RSS)) 9586 i++; 9587 9588 for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) { 9589 struct tg3_napi *tnapi = &tp->napi[i]; 9590 9591 if (!tnapi->rx_rcb) 9592 continue; 9593 9594 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 9595 (tp->rx_ret_ring_mask + 1) << 9596 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 9597 } 9598} 9599 9600/* tp->lock is held. */ 9601static void tg3_rings_reset(struct tg3 *tp) 9602{ 9603 int i; 9604 u32 stblk; 9605 struct tg3_napi *tnapi = &tp->napi[0]; 9606 9607 tg3_tx_rcbs_disable(tp); 9608 9609 tg3_rx_ret_rcbs_disable(tp); 9610 9611 /* Disable interrupts */ 9612 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 9613 tp->napi[0].chk_msi_cnt = 0; 9614 tp->napi[0].last_rx_cons = 0; 9615 tp->napi[0].last_tx_cons = 0; 9616 9617 /* Zero mailbox registers. */ 9618 if (tg3_flag(tp, SUPPORT_MSIX)) { 9619 for (i = 1; i < tp->irq_max; i++) { 9620 tp->napi[i].tx_prod = 0; 9621 tp->napi[i].tx_cons = 0; 9622 if (tg3_flag(tp, ENABLE_TSS)) 9623 tw32_mailbox(tp->napi[i].prodmbox, 0); 9624 tw32_rx_mbox(tp->napi[i].consmbox, 0); 9625 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 9626 tp->napi[i].chk_msi_cnt = 0; 9627 tp->napi[i].last_rx_cons = 0; 9628 tp->napi[i].last_tx_cons = 0; 9629 } 9630 if (!tg3_flag(tp, ENABLE_TSS)) 9631 tw32_mailbox(tp->napi[0].prodmbox, 0); 9632 } else { 9633 tp->napi[0].tx_prod = 0; 9634 tp->napi[0].tx_cons = 0; 9635 tw32_mailbox(tp->napi[0].prodmbox, 0); 9636 tw32_rx_mbox(tp->napi[0].consmbox, 0); 9637 } 9638 9639 /* Make sure the NIC-based send BD rings are disabled. */ 9640 if (!tg3_flag(tp, 5705_PLUS)) { 9641 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 9642 for (i = 0; i < 16; i++) 9643 tw32_tx_mbox(mbox + i * 8, 0); 9644 } 9645 9646 /* Clear status block in ram. */ 9647 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9648 9649 /* Set status block DMA address */ 9650 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9651 ((u64) tnapi->status_mapping >> 32)); 9652 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9653 ((u64) tnapi->status_mapping & 0xffffffff)); 9654 9655 stblk = HOSTCC_STATBLCK_RING1; 9656 9657 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 9658 u64 mapping = (u64)tnapi->status_mapping; 9659 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 9660 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 9661 stblk += 8; 9662 9663 /* Clear status block in ram. */ 9664 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9665 } 9666 9667 tg3_tx_rcbs_init(tp); 9668 tg3_rx_ret_rcbs_init(tp); 9669} 9670 9671static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 9672{ 9673 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 9674 9675 if (!tg3_flag(tp, 5750_PLUS) || 9676 tg3_flag(tp, 5780_CLASS) || 9677 tg3_asic_rev(tp) == ASIC_REV_5750 || 9678 tg3_asic_rev(tp) == ASIC_REV_5752 || 9679 tg3_flag(tp, 57765_PLUS)) 9680 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 9681 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9682 tg3_asic_rev(tp) == ASIC_REV_5787) 9683 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 9684 else 9685 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 9686 9687 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 9688 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 9689 9690 val = min(nic_rep_thresh, host_rep_thresh); 9691 tw32(RCVBDI_STD_THRESH, val); 9692 9693 if (tg3_flag(tp, 57765_PLUS)) 9694 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 9695 9696 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 9697 return; 9698 9699 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 9700 9701 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 9702 9703 val = min(bdcache_maxcnt / 2, host_rep_thresh); 9704 tw32(RCVBDI_JUMBO_THRESH, val); 9705 9706 if (tg3_flag(tp, 57765_PLUS)) 9707 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 9708} 9709 9710static inline u32 calc_crc(unsigned char *buf, int len) 9711{ 9712 u32 reg; 9713 u32 tmp; 9714 int j, k; 9715 9716 reg = 0xffffffff; 9717 9718 for (j = 0; j < len; j++) { 9719 reg ^= buf[j]; 9720 9721 for (k = 0; k < 8; k++) { 9722 tmp = reg & 0x01; 9723 9724 reg >>= 1; 9725 9726 if (tmp) 9727 reg ^= CRC32_POLY_LE; 9728 } 9729 } 9730 9731 return ~reg; 9732} 9733 9734static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 9735{ 9736 /* accept or reject all multicast frames */ 9737 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 9738 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 9739 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 9740 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 9741} 9742 9743static void __tg3_set_rx_mode(struct net_device *dev) 9744{ 9745 struct tg3 *tp = netdev_priv(dev); 9746 u32 rx_mode; 9747 9748 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 9749 RX_MODE_KEEP_VLAN_TAG); 9750 9751#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 9752 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 9753 * flag clear. 9754 */ 9755 if (!tg3_flag(tp, ENABLE_ASF)) 9756 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 9757#endif 9758 9759 if (dev->flags & IFF_PROMISC) { 9760 /* Promiscuous mode. */ 9761 rx_mode |= RX_MODE_PROMISC; 9762 } else if (dev->flags & IFF_ALLMULTI) { 9763 /* Accept all multicast. */ 9764 tg3_set_multi(tp, 1); 9765 } else if (netdev_mc_empty(dev)) { 9766 /* Reject all multicast. */ 9767 tg3_set_multi(tp, 0); 9768 } else { 9769 /* Accept one or more multicast(s). */ 9770 struct netdev_hw_addr *ha; 9771 u32 mc_filter[4] = { 0, }; 9772 u32 regidx; 9773 u32 bit; 9774 u32 crc; 9775 9776 netdev_for_each_mc_addr(ha, dev) { 9777 crc = calc_crc(ha->addr, ETH_ALEN); 9778 bit = ~crc & 0x7f; 9779 regidx = (bit & 0x60) >> 5; 9780 bit &= 0x1f; 9781 mc_filter[regidx] |= (1 << bit); 9782 } 9783 9784 tw32(MAC_HASH_REG_0, mc_filter[0]); 9785 tw32(MAC_HASH_REG_1, mc_filter[1]); 9786 tw32(MAC_HASH_REG_2, mc_filter[2]); 9787 tw32(MAC_HASH_REG_3, mc_filter[3]); 9788 } 9789 9790 if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) { 9791 rx_mode |= RX_MODE_PROMISC; 9792 } else if (!(dev->flags & IFF_PROMISC)) { 9793 /* Add all entries into to the mac addr filter list */ 9794 int i = 0; 9795 struct netdev_hw_addr *ha; 9796 9797 netdev_for_each_uc_addr(ha, dev) { 9798 __tg3_set_one_mac_addr(tp, ha->addr, 9799 i + TG3_UCAST_ADDR_IDX(tp)); 9800 i++; 9801 } 9802 } 9803 9804 if (rx_mode != tp->rx_mode) { 9805 tp->rx_mode = rx_mode; 9806 tw32_f(MAC_RX_MODE, rx_mode); 9807 udelay(10); 9808 } 9809} 9810 9811static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt) 9812{ 9813 int i; 9814 9815 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 9816 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt); 9817} 9818 9819static void tg3_rss_check_indir_tbl(struct tg3 *tp) 9820{ 9821 int i; 9822 9823 if (!tg3_flag(tp, SUPPORT_MSIX)) 9824 return; 9825 9826 if (tp->rxq_cnt == 1) { 9827 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 9828 return; 9829 } 9830 9831 /* Validate table against current IRQ count */ 9832 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 9833 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt) 9834 break; 9835 } 9836 9837 if (i != TG3_RSS_INDIR_TBL_SIZE) 9838 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt); 9839} 9840 9841static void tg3_rss_write_indir_tbl(struct tg3 *tp) 9842{ 9843 int i = 0; 9844 u32 reg = MAC_RSS_INDIR_TBL_0; 9845 9846 while (i < TG3_RSS_INDIR_TBL_SIZE) { 9847 u32 val = tp->rss_ind_tbl[i]; 9848 i++; 9849 for (; i % 8; i++) { 9850 val <<= 4; 9851 val |= tp->rss_ind_tbl[i]; 9852 } 9853 tw32(reg, val); 9854 reg += 4; 9855 } 9856} 9857 9858static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) 9859{ 9860 if (tg3_asic_rev(tp) == ASIC_REV_5719) 9861 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; 9862 else 9863 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; 9864} 9865 9866/* tp->lock is held. */ 9867static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) 9868{ 9869 u32 val, rdmac_mode; 9870 int i, err, limit; 9871 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 9872 9873 tg3_disable_ints(tp); 9874 9875 tg3_stop_fw(tp); 9876 9877 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 9878 9879 if (tg3_flag(tp, INIT_COMPLETE)) 9880 tg3_abort_hw(tp, 1); 9881 9882 if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 9883 !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) { 9884 tg3_phy_pull_config(tp); 9885 tg3_eee_pull_config(tp, NULL); 9886 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 9887 } 9888 9889 /* Enable MAC control of LPI */ 9890 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 9891 tg3_setup_eee(tp); 9892 9893 if (reset_phy) 9894 tg3_phy_reset(tp); 9895 9896 err = tg3_chip_reset(tp); 9897 if (err) 9898 return err; 9899 9900 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 9901 9902 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 9903 val = tr32(TG3_CPMU_CTRL); 9904 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 9905 tw32(TG3_CPMU_CTRL, val); 9906 9907 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9908 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9909 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9910 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9911 9912 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 9913 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 9914 val |= CPMU_LNK_AWARE_MACCLK_6_25; 9915 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 9916 9917 val = tr32(TG3_CPMU_HST_ACC); 9918 val &= ~CPMU_HST_ACC_MACCLK_MASK; 9919 val |= CPMU_HST_ACC_MACCLK_6_25; 9920 tw32(TG3_CPMU_HST_ACC, val); 9921 } 9922 9923 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9924 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 9925 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 9926 PCIE_PWR_MGMT_L1_THRESH_4MS; 9927 tw32(PCIE_PWR_MGMT_THRESH, val); 9928 9929 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 9930 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 9931 9932 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 9933 9934 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9935 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9936 } 9937 9938 if (tg3_flag(tp, L1PLLPD_EN)) { 9939 u32 grc_mode = tr32(GRC_MODE); 9940 9941 /* Access the lower 1K of PL PCIE block registers. */ 9942 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9943 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9944 9945 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 9946 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 9947 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 9948 9949 tw32(GRC_MODE, grc_mode); 9950 } 9951 9952 if (tg3_flag(tp, 57765_CLASS)) { 9953 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 9954 u32 grc_mode = tr32(GRC_MODE); 9955 9956 /* Access the lower 1K of PL PCIE block registers. */ 9957 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9958 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9959 9960 val = tr32(TG3_PCIE_TLDLPL_PORT + 9961 TG3_PCIE_PL_LO_PHYCTL5); 9962 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 9963 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 9964 9965 tw32(GRC_MODE, grc_mode); 9966 } 9967 9968 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) { 9969 u32 grc_mode; 9970 9971 /* Fix transmit hangs */ 9972 val = tr32(TG3_CPMU_PADRNG_CTL); 9973 val |= TG3_CPMU_PADRNG_CTL_RDIV2; 9974 tw32(TG3_CPMU_PADRNG_CTL, val); 9975 9976 grc_mode = tr32(GRC_MODE); 9977 9978 /* Access the lower 1K of DL PCIE block registers. */ 9979 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9980 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 9981 9982 val = tr32(TG3_PCIE_TLDLPL_PORT + 9983 TG3_PCIE_DL_LO_FTSMAX); 9984 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 9985 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 9986 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 9987 9988 tw32(GRC_MODE, grc_mode); 9989 } 9990 9991 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9992 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9993 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9994 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9995 } 9996 9997 /* This works around an issue with Athlon chipsets on 9998 * B3 tigon3 silicon. This bit has no effect on any 9999 * other revision. But do not set this on PCI Express 10000 * chips and don't even touch the clocks if the CPMU is present. 10001 */ 10002 if (!tg3_flag(tp, CPMU_PRESENT)) { 10003 if (!tg3_flag(tp, PCI_EXPRESS)) 10004 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 10005 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 10006 } 10007 10008 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 10009 tg3_flag(tp, PCIX_MODE)) { 10010 val = tr32(TG3PCI_PCISTATE); 10011 val |= PCISTATE_RETRY_SAME_DMA; 10012 tw32(TG3PCI_PCISTATE, val); 10013 } 10014 10015 if (tg3_flag(tp, ENABLE_APE)) { 10016 /* Allow reads and writes to the 10017 * APE register and memory space. 10018 */ 10019 val = tr32(TG3PCI_PCISTATE); 10020 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 10021 PCISTATE_ALLOW_APE_SHMEM_WR | 10022 PCISTATE_ALLOW_APE_PSPACE_WR; 10023 tw32(TG3PCI_PCISTATE, val); 10024 } 10025 10026 if (tg3_chip_rev(tp) == CHIPREV_5704_BX) { 10027 /* Enable some hw fixes. */ 10028 val = tr32(TG3PCI_MSI_DATA); 10029 val |= (1 << 26) | (1 << 28) | (1 << 29); 10030 tw32(TG3PCI_MSI_DATA, val); 10031 } 10032 10033 /* Descriptor ring init may make accesses to the 10034 * NIC SRAM area to setup the TX descriptors, so we 10035 * can only do this after the hardware has been 10036 * successfully reset. 10037 */ 10038 err = tg3_init_rings(tp); 10039 if (err) 10040 return err; 10041 10042 if (tg3_flag(tp, 57765_PLUS)) { 10043 val = tr32(TG3PCI_DMA_RW_CTRL) & 10044 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 10045 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 10046 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 10047 if (!tg3_flag(tp, 57765_CLASS) && 10048 tg3_asic_rev(tp) != ASIC_REV_5717 && 10049 tg3_asic_rev(tp) != ASIC_REV_5762) 10050 val |= DMA_RWCTRL_TAGGED_STAT_WA; 10051 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 10052 } else if (tg3_asic_rev(tp) != ASIC_REV_5784 && 10053 tg3_asic_rev(tp) != ASIC_REV_5761) { 10054 /* This value is determined during the probe time DMA 10055 * engine test, tg3_test_dma. 10056 */ 10057 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 10058 } 10059 10060 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 10061 GRC_MODE_4X_NIC_SEND_RINGS | 10062 GRC_MODE_NO_TX_PHDR_CSUM | 10063 GRC_MODE_NO_RX_PHDR_CSUM); 10064 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 10065 10066 /* Pseudo-header checksum is done by hardware logic and not 10067 * the offload processers, so make the chip do the pseudo- 10068 * header checksums on receive. For transmit it is more 10069 * convenient to do the pseudo-header checksum in software 10070 * as Linux does that on transmit for us in all cases. 10071 */ 10072 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 10073 10074 val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; 10075 if (tp->rxptpctl) 10076 tw32(TG3_RX_PTP_CTL, 10077 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 10078 10079 if (tg3_flag(tp, PTP_CAPABLE)) 10080 val |= GRC_MODE_TIME_SYNC_ENABLE; 10081 10082 tw32(GRC_MODE, tp->grc_mode | val); 10083 10084 /* On one of the AMD platform, MRRS is restricted to 4000 because of 10085 * south bridge limitation. As a workaround, Driver is setting MRRS 10086 * to 2048 instead of default 4096. 10087 */ 10088 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 10089 tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) { 10090 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK; 10091 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048); 10092 } 10093 10094 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 10095 val = tr32(GRC_MISC_CFG); 10096 val &= ~0xff; 10097 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 10098 tw32(GRC_MISC_CFG, val); 10099 10100 /* Initialize MBUF/DESC pool. */ 10101 if (tg3_flag(tp, 5750_PLUS)) { 10102 /* Do nothing. */ 10103 } else if (tg3_asic_rev(tp) != ASIC_REV_5705) { 10104 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 10105 if (tg3_asic_rev(tp) == ASIC_REV_5704) 10106 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 10107 else 10108 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 10109 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 10110 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 10111 } else if (tg3_flag(tp, TSO_CAPABLE)) { 10112 int fw_len; 10113 10114 fw_len = tp->fw_len; 10115 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 10116 tw32(BUFMGR_MB_POOL_ADDR, 10117 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 10118 tw32(BUFMGR_MB_POOL_SIZE, 10119 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 10120 } 10121 10122 if (tp->dev->mtu <= ETH_DATA_LEN) { 10123 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10124 tp->bufmgr_config.mbuf_read_dma_low_water); 10125 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10126 tp->bufmgr_config.mbuf_mac_rx_low_water); 10127 tw32(BUFMGR_MB_HIGH_WATER, 10128 tp->bufmgr_config.mbuf_high_water); 10129 } else { 10130 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10131 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 10132 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10133 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 10134 tw32(BUFMGR_MB_HIGH_WATER, 10135 tp->bufmgr_config.mbuf_high_water_jumbo); 10136 } 10137 tw32(BUFMGR_DMA_LOW_WATER, 10138 tp->bufmgr_config.dma_low_water); 10139 tw32(BUFMGR_DMA_HIGH_WATER, 10140 tp->bufmgr_config.dma_high_water); 10141 10142 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 10143 if (tg3_asic_rev(tp) == ASIC_REV_5719) 10144 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 10145 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10146 tg3_asic_rev(tp) == ASIC_REV_5762 || 10147 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10148 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) 10149 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 10150 tw32(BUFMGR_MODE, val); 10151 for (i = 0; i < 2000; i++) { 10152 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 10153 break; 10154 udelay(10); 10155 } 10156 if (i >= 2000) { 10157 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 10158 return -ENODEV; 10159 } 10160 10161 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1) 10162 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 10163 10164 tg3_setup_rxbd_thresholds(tp); 10165 10166 /* Initialize TG3_BDINFO's at: 10167 * RCVDBDI_STD_BD: standard eth size rx ring 10168 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 10169 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 10170 * 10171 * like so: 10172 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 10173 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 10174 * ring attribute flags 10175 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 10176 * 10177 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 10178 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 10179 * 10180 * The size of each ring is fixed in the firmware, but the location is 10181 * configurable. 10182 */ 10183 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10184 ((u64) tpr->rx_std_mapping >> 32)); 10185 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10186 ((u64) tpr->rx_std_mapping & 0xffffffff)); 10187 if (!tg3_flag(tp, 5717_PLUS)) 10188 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 10189 NIC_SRAM_RX_BUFFER_DESC); 10190 10191 /* Disable the mini ring */ 10192 if (!tg3_flag(tp, 5705_PLUS)) 10193 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 10194 BDINFO_FLAGS_DISABLED); 10195 10196 /* Program the jumbo buffer descriptor ring control 10197 * blocks on those devices that have them. 10198 */ 10199 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10200 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 10201 10202 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 10203 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10204 ((u64) tpr->rx_jmb_mapping >> 32)); 10205 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10206 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 10207 val = TG3_RX_JMB_RING_SIZE(tp) << 10208 BDINFO_FLAGS_MAXLEN_SHIFT; 10209 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10210 val | BDINFO_FLAGS_USE_EXT_RECV); 10211 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 10212 tg3_flag(tp, 57765_CLASS) || 10213 tg3_asic_rev(tp) == ASIC_REV_5762) 10214 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 10215 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 10216 } else { 10217 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10218 BDINFO_FLAGS_DISABLED); 10219 } 10220 10221 if (tg3_flag(tp, 57765_PLUS)) { 10222 val = TG3_RX_STD_RING_SIZE(tp); 10223 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 10224 val |= (TG3_RX_STD_DMA_SZ << 2); 10225 } else 10226 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 10227 } else 10228 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 10229 10230 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 10231 10232 tpr->rx_std_prod_idx = tp->rx_pending; 10233 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 10234 10235 tpr->rx_jmb_prod_idx = 10236 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 10237 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 10238 10239 tg3_rings_reset(tp); 10240 10241 /* Initialize MAC address and backoff seed. */ 10242 __tg3_set_mac_addr(tp, false); 10243 10244 /* MTU + ethernet header + FCS + optional VLAN tag */ 10245 tw32(MAC_RX_MTU_SIZE, 10246 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 10247 10248 /* The slot time is changed by tg3_setup_phy if we 10249 * run at gigabit with half duplex. 10250 */ 10251 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 10252 (6 << TX_LENGTHS_IPG_SHIFT) | 10253 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 10254 10255 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10256 tg3_asic_rev(tp) == ASIC_REV_5762) 10257 val |= tr32(MAC_TX_LENGTHS) & 10258 (TX_LENGTHS_JMB_FRM_LEN_MSK | 10259 TX_LENGTHS_CNT_DWN_VAL_MSK); 10260 10261 tw32(MAC_TX_LENGTHS, val); 10262 10263 /* Receive rules. */ 10264 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 10265 tw32(RCVLPC_CONFIG, 0x0181); 10266 10267 /* Calculate RDMAC_MODE setting early, we need it to determine 10268 * the RCVLPC_STATE_ENABLE mask. 10269 */ 10270 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 10271 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 10272 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 10273 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 10274 RDMAC_MODE_LNGREAD_ENAB); 10275 10276 if (tg3_asic_rev(tp) == ASIC_REV_5717) 10277 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 10278 10279 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 10280 tg3_asic_rev(tp) == ASIC_REV_5785 || 10281 tg3_asic_rev(tp) == ASIC_REV_57780) 10282 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 10283 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 10284 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 10285 10286 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10287 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10288 if (tg3_flag(tp, TSO_CAPABLE)) { 10289 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 10290 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10291 !tg3_flag(tp, IS_5788)) { 10292 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10293 } 10294 } 10295 10296 if (tg3_flag(tp, PCI_EXPRESS)) 10297 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10298 10299 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10300 tp->dma_limit = 0; 10301 if (tp->dev->mtu <= ETH_DATA_LEN) { 10302 rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR; 10303 tp->dma_limit = TG3_TX_BD_DMA_MAX_2K; 10304 } 10305 } 10306 10307 if (tg3_flag(tp, HW_TSO_1) || 10308 tg3_flag(tp, HW_TSO_2) || 10309 tg3_flag(tp, HW_TSO_3)) 10310 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 10311 10312 if (tg3_flag(tp, 57765_PLUS) || 10313 tg3_asic_rev(tp) == ASIC_REV_5785 || 10314 tg3_asic_rev(tp) == ASIC_REV_57780) 10315 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 10316 10317 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10318 tg3_asic_rev(tp) == ASIC_REV_5762) 10319 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 10320 10321 if (tg3_asic_rev(tp) == ASIC_REV_5761 || 10322 tg3_asic_rev(tp) == ASIC_REV_5784 || 10323 tg3_asic_rev(tp) == ASIC_REV_5785 || 10324 tg3_asic_rev(tp) == ASIC_REV_57780 || 10325 tg3_flag(tp, 57765_PLUS)) { 10326 u32 tgtreg; 10327 10328 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10329 tgtreg = TG3_RDMA_RSRVCTRL_REG2; 10330 else 10331 tgtreg = TG3_RDMA_RSRVCTRL_REG; 10332 10333 val = tr32(tgtreg); 10334 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10335 tg3_asic_rev(tp) == ASIC_REV_5762) { 10336 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 10337 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 10338 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 10339 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 10340 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 10341 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 10342 } 10343 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 10344 } 10345 10346 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10347 tg3_asic_rev(tp) == ASIC_REV_5720 || 10348 tg3_asic_rev(tp) == ASIC_REV_5762) { 10349 u32 tgtreg; 10350 10351 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10352 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; 10353 else 10354 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; 10355 10356 val = tr32(tgtreg); 10357 tw32(tgtreg, val | 10358 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 10359 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 10360 } 10361 10362 /* Receive/send statistics. */ 10363 if (tg3_flag(tp, 5750_PLUS)) { 10364 val = tr32(RCVLPC_STATS_ENABLE); 10365 val &= ~RCVLPC_STATSENAB_DACK_FIX; 10366 tw32(RCVLPC_STATS_ENABLE, val); 10367 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 10368 tg3_flag(tp, TSO_CAPABLE)) { 10369 val = tr32(RCVLPC_STATS_ENABLE); 10370 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 10371 tw32(RCVLPC_STATS_ENABLE, val); 10372 } else { 10373 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 10374 } 10375 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 10376 tw32(SNDDATAI_STATSENAB, 0xffffff); 10377 tw32(SNDDATAI_STATSCTRL, 10378 (SNDDATAI_SCTRL_ENABLE | 10379 SNDDATAI_SCTRL_FASTUPD)); 10380 10381 /* Setup host coalescing engine. */ 10382 tw32(HOSTCC_MODE, 0); 10383 for (i = 0; i < 2000; i++) { 10384 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 10385 break; 10386 udelay(10); 10387 } 10388 10389 __tg3_set_coalesce(tp, &tp->coal); 10390 10391 if (!tg3_flag(tp, 5705_PLUS)) { 10392 /* Status/statistics block address. See tg3_timer, 10393 * the tg3_periodic_fetch_stats call there, and 10394 * tg3_get_stats to see how this works for 5705/5750 chips. 10395 */ 10396 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 10397 ((u64) tp->stats_mapping >> 32)); 10398 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 10399 ((u64) tp->stats_mapping & 0xffffffff)); 10400 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 10401 10402 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 10403 10404 /* Clear statistics and status block memory areas */ 10405 for (i = NIC_SRAM_STATS_BLK; 10406 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 10407 i += sizeof(u32)) { 10408 tg3_write_mem(tp, i, 0); 10409 udelay(40); 10410 } 10411 } 10412 10413 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 10414 10415 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 10416 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 10417 if (!tg3_flag(tp, 5705_PLUS)) 10418 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 10419 10420 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 10421 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 10422 /* reset to prevent losing 1st rx packet intermittently */ 10423 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10424 udelay(10); 10425 } 10426 10427 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 10428 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 10429 MAC_MODE_FHDE_ENABLE; 10430 if (tg3_flag(tp, ENABLE_APE)) 10431 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 10432 if (!tg3_flag(tp, 5705_PLUS) && 10433 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10434 tg3_asic_rev(tp) != ASIC_REV_5700) 10435 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 10436 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 10437 udelay(40); 10438 10439 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 10440 * If TG3_FLAG_IS_NIC is zero, we should read the 10441 * register to preserve the GPIO settings for LOMs. The GPIOs, 10442 * whether used as inputs or outputs, are set by boot code after 10443 * reset. 10444 */ 10445 if (!tg3_flag(tp, IS_NIC)) { 10446 u32 gpio_mask; 10447 10448 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 10449 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 10450 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 10451 10452 if (tg3_asic_rev(tp) == ASIC_REV_5752) 10453 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 10454 GRC_LCLCTRL_GPIO_OUTPUT3; 10455 10456 if (tg3_asic_rev(tp) == ASIC_REV_5755) 10457 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 10458 10459 tp->grc_local_ctrl &= ~gpio_mask; 10460 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 10461 10462 /* GPIO1 must be driven high for eeprom write protect */ 10463 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 10464 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 10465 GRC_LCLCTRL_GPIO_OUTPUT1); 10466 } 10467 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10468 udelay(100); 10469 10470 if (tg3_flag(tp, USING_MSIX)) { 10471 val = tr32(MSGINT_MODE); 10472 val |= MSGINT_MODE_ENABLE; 10473 if (tp->irq_cnt > 1) 10474 val |= MSGINT_MODE_MULTIVEC_EN; 10475 if (!tg3_flag(tp, 1SHOT_MSI)) 10476 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 10477 tw32(MSGINT_MODE, val); 10478 } 10479 10480 if (!tg3_flag(tp, 5705_PLUS)) { 10481 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 10482 udelay(40); 10483 } 10484 10485 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 10486 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 10487 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 10488 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 10489 WDMAC_MODE_LNGREAD_ENAB); 10490 10491 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10492 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10493 if (tg3_flag(tp, TSO_CAPABLE) && 10494 (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 || 10495 tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) { 10496 /* nothing */ 10497 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10498 !tg3_flag(tp, IS_5788)) { 10499 val |= WDMAC_MODE_RX_ACCEL; 10500 } 10501 } 10502 10503 /* Enable host coalescing bug fix */ 10504 if (tg3_flag(tp, 5755_PLUS)) 10505 val |= WDMAC_MODE_STATUS_TAG_FIX; 10506 10507 if (tg3_asic_rev(tp) == ASIC_REV_5785) 10508 val |= WDMAC_MODE_BURST_ALL_DATA; 10509 10510 tw32_f(WDMAC_MODE, val); 10511 udelay(40); 10512 10513 if (tg3_flag(tp, PCIX_MODE)) { 10514 u16 pcix_cmd; 10515 10516 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10517 &pcix_cmd); 10518 if (tg3_asic_rev(tp) == ASIC_REV_5703) { 10519 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 10520 pcix_cmd |= PCI_X_CMD_READ_2K; 10521 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) { 10522 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 10523 pcix_cmd |= PCI_X_CMD_READ_2K; 10524 } 10525 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10526 pcix_cmd); 10527 } 10528 10529 tw32_f(RDMAC_MODE, rdmac_mode); 10530 udelay(40); 10531 10532 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10533 tg3_asic_rev(tp) == ASIC_REV_5720) { 10534 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { 10535 if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) 10536 break; 10537 } 10538 if (i < TG3_NUM_RDMA_CHANNELS) { 10539 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10540 val |= tg3_lso_rd_dma_workaround_bit(tp); 10541 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10542 tg3_flag_set(tp, 5719_5720_RDMA_BUG); 10543 } 10544 } 10545 10546 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 10547 if (!tg3_flag(tp, 5705_PLUS)) 10548 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 10549 10550 if (tg3_asic_rev(tp) == ASIC_REV_5761) 10551 tw32(SNDDATAC_MODE, 10552 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 10553 else 10554 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 10555 10556 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 10557 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 10558 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 10559 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 10560 val |= RCVDBDI_MODE_LRG_RING_SZ; 10561 tw32(RCVDBDI_MODE, val); 10562 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 10563 if (tg3_flag(tp, HW_TSO_1) || 10564 tg3_flag(tp, HW_TSO_2) || 10565 tg3_flag(tp, HW_TSO_3)) 10566 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 10567 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 10568 if (tg3_flag(tp, ENABLE_TSS)) 10569 val |= SNDBDI_MODE_MULTI_TXQ_EN; 10570 tw32(SNDBDI_MODE, val); 10571 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 10572 10573 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 10574 err = tg3_load_5701_a0_firmware_fix(tp); 10575 if (err) 10576 return err; 10577 } 10578 10579 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10580 /* Ignore any errors for the firmware download. If download 10581 * fails, the device will operate with EEE disabled 10582 */ 10583 tg3_load_57766_firmware(tp); 10584 } 10585 10586 if (tg3_flag(tp, TSO_CAPABLE)) { 10587 err = tg3_load_tso_firmware(tp); 10588 if (err) 10589 return err; 10590 } 10591 10592 tp->tx_mode = TX_MODE_ENABLE; 10593 10594 if (tg3_flag(tp, 5755_PLUS) || 10595 tg3_asic_rev(tp) == ASIC_REV_5906) 10596 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 10597 10598 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10599 tg3_asic_rev(tp) == ASIC_REV_5762) { 10600 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 10601 tp->tx_mode &= ~val; 10602 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 10603 } 10604 10605 tw32_f(MAC_TX_MODE, tp->tx_mode); 10606 udelay(100); 10607 10608 if (tg3_flag(tp, ENABLE_RSS)) { 10609 u32 rss_key[10]; 10610 10611 tg3_rss_write_indir_tbl(tp); 10612 10613 netdev_rss_key_fill(rss_key, 10 * sizeof(u32)); 10614 10615 for (i = 0; i < 10 ; i++) 10616 tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]); 10617 } 10618 10619 tp->rx_mode = RX_MODE_ENABLE; 10620 if (tg3_flag(tp, 5755_PLUS)) 10621 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 10622 10623 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10624 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX; 10625 10626 if (tg3_flag(tp, ENABLE_RSS)) 10627 tp->rx_mode |= RX_MODE_RSS_ENABLE | 10628 RX_MODE_RSS_ITBL_HASH_BITS_7 | 10629 RX_MODE_RSS_IPV6_HASH_EN | 10630 RX_MODE_RSS_TCP_IPV6_HASH_EN | 10631 RX_MODE_RSS_IPV4_HASH_EN | 10632 RX_MODE_RSS_TCP_IPV4_HASH_EN; 10633 10634 tw32_f(MAC_RX_MODE, tp->rx_mode); 10635 udelay(10); 10636 10637 tw32(MAC_LED_CTRL, tp->led_ctrl); 10638 10639 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 10640 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10641 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10642 udelay(10); 10643 } 10644 tw32_f(MAC_RX_MODE, tp->rx_mode); 10645 udelay(10); 10646 10647 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10648 if ((tg3_asic_rev(tp) == ASIC_REV_5704) && 10649 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 10650 /* Set drive transmission level to 1.2V */ 10651 /* only if the signal pre-emphasis bit is not set */ 10652 val = tr32(MAC_SERDES_CFG); 10653 val &= 0xfffff000; 10654 val |= 0x880; 10655 tw32(MAC_SERDES_CFG, val); 10656 } 10657 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) 10658 tw32(MAC_SERDES_CFG, 0x616000); 10659 } 10660 10661 /* Prevent chip from dropping frames when flow control 10662 * is enabled. 10663 */ 10664 if (tg3_flag(tp, 57765_CLASS)) 10665 val = 1; 10666 else 10667 val = 2; 10668 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 10669 10670 if (tg3_asic_rev(tp) == ASIC_REV_5704 && 10671 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 10672 /* Use hardware link auto-negotiation */ 10673 tg3_flag_set(tp, HW_AUTONEG); 10674 } 10675 10676 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 10677 tg3_asic_rev(tp) == ASIC_REV_5714) { 10678 u32 tmp; 10679 10680 tmp = tr32(SERDES_RX_CTRL); 10681 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 10682 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 10683 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 10684 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10685 } 10686 10687 if (!tg3_flag(tp, USE_PHYLIB)) { 10688 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10689 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 10690 10691 err = tg3_setup_phy(tp, false); 10692 if (err) 10693 return err; 10694 10695 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10696 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 10697 u32 tmp; 10698 10699 /* Clear CRC stats. */ 10700 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 10701 tg3_writephy(tp, MII_TG3_TEST1, 10702 tmp | MII_TG3_TEST1_CRC_EN); 10703 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 10704 } 10705 } 10706 } 10707 10708 __tg3_set_rx_mode(tp->dev); 10709 10710 /* Initialize receive rules. */ 10711 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 10712 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 10713 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 10714 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 10715 10716 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 10717 limit = 8; 10718 else 10719 limit = 16; 10720 if (tg3_flag(tp, ENABLE_ASF)) 10721 limit -= 4; 10722 switch (limit) { 10723 case 16: 10724 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 10725 fallthrough; 10726 case 15: 10727 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 10728 fallthrough; 10729 case 14: 10730 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 10731 fallthrough; 10732 case 13: 10733 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 10734 fallthrough; 10735 case 12: 10736 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 10737 fallthrough; 10738 case 11: 10739 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 10740 fallthrough; 10741 case 10: 10742 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 10743 fallthrough; 10744 case 9: 10745 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 10746 fallthrough; 10747 case 8: 10748 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 10749 fallthrough; 10750 case 7: 10751 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 10752 fallthrough; 10753 case 6: 10754 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 10755 fallthrough; 10756 case 5: 10757 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 10758 fallthrough; 10759 case 4: 10760 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 10761 case 3: 10762 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 10763 case 2: 10764 case 1: 10765 10766 default: 10767 break; 10768 } 10769 10770 if (tg3_flag(tp, ENABLE_APE)) 10771 /* Write our heartbeat update interval to APE. */ 10772 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 10773 APE_HOST_HEARTBEAT_INT_5SEC); 10774 10775 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 10776 10777 return 0; 10778} 10779 10780/* Called at device open time to get the chip ready for 10781 * packet processing. Invoked with tp->lock held. 10782 */ 10783static int tg3_init_hw(struct tg3 *tp, bool reset_phy) 10784{ 10785 /* Chip may have been just powered on. If so, the boot code may still 10786 * be running initialization. Wait for it to finish to avoid races in 10787 * accessing the hardware. 10788 */ 10789 tg3_enable_register_access(tp); 10790 tg3_poll_fw(tp); 10791 10792 tg3_switch_clocks(tp); 10793 10794 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 10795 10796 return tg3_reset_hw(tp, reset_phy); 10797} 10798 10799#ifdef CONFIG_TIGON3_HWMON 10800static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 10801{ 10802 u32 off, len = TG3_OCIR_LEN; 10803 int i; 10804 10805 for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) { 10806 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 10807 10808 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 10809 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 10810 memset(ocir, 0, len); 10811 } 10812} 10813 10814/* sysfs attributes for hwmon */ 10815static ssize_t tg3_show_temp(struct device *dev, 10816 struct device_attribute *devattr, char *buf) 10817{ 10818 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 10819 struct tg3 *tp = dev_get_drvdata(dev); 10820 u32 temperature; 10821 10822 spin_lock_bh(&tp->lock); 10823 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 10824 sizeof(temperature)); 10825 spin_unlock_bh(&tp->lock); 10826 return sprintf(buf, "%u\n", temperature * 1000); 10827} 10828 10829 10830static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL, 10831 TG3_TEMP_SENSOR_OFFSET); 10832static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL, 10833 TG3_TEMP_CAUTION_OFFSET); 10834static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL, 10835 TG3_TEMP_MAX_OFFSET); 10836 10837static struct attribute *tg3_attrs[] = { 10838 &sensor_dev_attr_temp1_input.dev_attr.attr, 10839 &sensor_dev_attr_temp1_crit.dev_attr.attr, 10840 &sensor_dev_attr_temp1_max.dev_attr.attr, 10841 NULL 10842}; 10843ATTRIBUTE_GROUPS(tg3); 10844 10845static void tg3_hwmon_close(struct tg3 *tp) 10846{ 10847 if (tp->hwmon_dev) { 10848 hwmon_device_unregister(tp->hwmon_dev); 10849 tp->hwmon_dev = NULL; 10850 } 10851} 10852 10853static void tg3_hwmon_open(struct tg3 *tp) 10854{ 10855 int i; 10856 u32 size = 0; 10857 struct pci_dev *pdev = tp->pdev; 10858 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 10859 10860 tg3_sd_scan_scratchpad(tp, ocirs); 10861 10862 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 10863 if (!ocirs[i].src_data_length) 10864 continue; 10865 10866 size += ocirs[i].src_hdr_length; 10867 size += ocirs[i].src_data_length; 10868 } 10869 10870 if (!size) 10871 return; 10872 10873 tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3", 10874 tp, tg3_groups); 10875 if (IS_ERR(tp->hwmon_dev)) { 10876 tp->hwmon_dev = NULL; 10877 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 10878 } 10879} 10880#else 10881static inline void tg3_hwmon_close(struct tg3 *tp) { } 10882static inline void tg3_hwmon_open(struct tg3 *tp) { } 10883#endif /* CONFIG_TIGON3_HWMON */ 10884 10885 10886#define TG3_STAT_ADD32(PSTAT, REG) \ 10887do { u32 __val = tr32(REG); \ 10888 (PSTAT)->low += __val; \ 10889 if ((PSTAT)->low < __val) \ 10890 (PSTAT)->high += 1; \ 10891} while (0) 10892 10893static void tg3_periodic_fetch_stats(struct tg3 *tp) 10894{ 10895 struct tg3_hw_stats *sp = tp->hw_stats; 10896 10897 if (!tp->link_up) 10898 return; 10899 10900 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 10901 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 10902 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 10903 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 10904 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 10905 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 10906 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 10907 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 10908 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 10909 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 10910 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 10911 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 10912 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 10913 if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && 10914 (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + 10915 sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { 10916 u32 val; 10917 10918 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10919 val &= ~tg3_lso_rd_dma_workaround_bit(tp); 10920 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10921 tg3_flag_clear(tp, 5719_5720_RDMA_BUG); 10922 } 10923 10924 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 10925 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 10926 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 10927 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 10928 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 10929 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 10930 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 10931 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 10932 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 10933 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 10934 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 10935 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 10936 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 10937 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 10938 10939 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 10940 if (tg3_asic_rev(tp) != ASIC_REV_5717 && 10941 tg3_asic_rev(tp) != ASIC_REV_5762 && 10942 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 && 10943 tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) { 10944 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 10945 } else { 10946 u32 val = tr32(HOSTCC_FLOW_ATTN); 10947 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 10948 if (val) { 10949 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 10950 sp->rx_discards.low += val; 10951 if (sp->rx_discards.low < val) 10952 sp->rx_discards.high += 1; 10953 } 10954 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 10955 } 10956 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 10957} 10958 10959static void tg3_chk_missed_msi(struct tg3 *tp) 10960{ 10961 u32 i; 10962 10963 for (i = 0; i < tp->irq_cnt; i++) { 10964 struct tg3_napi *tnapi = &tp->napi[i]; 10965 10966 if (tg3_has_work(tnapi)) { 10967 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 10968 tnapi->last_tx_cons == tnapi->tx_cons) { 10969 if (tnapi->chk_msi_cnt < 1) { 10970 tnapi->chk_msi_cnt++; 10971 return; 10972 } 10973 tg3_msi(0, tnapi); 10974 } 10975 } 10976 tnapi->chk_msi_cnt = 0; 10977 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 10978 tnapi->last_tx_cons = tnapi->tx_cons; 10979 } 10980} 10981 10982static void tg3_timer(struct timer_list *t) 10983{ 10984 struct tg3 *tp = from_timer(tp, t, timer); 10985 10986 spin_lock(&tp->lock); 10987 10988 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) { 10989 spin_unlock(&tp->lock); 10990 goto restart_timer; 10991 } 10992 10993 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10994 tg3_flag(tp, 57765_CLASS)) 10995 tg3_chk_missed_msi(tp); 10996 10997 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 10998 /* BCM4785: Flush posted writes from GbE to host memory. */ 10999 tr32(HOSTCC_MODE); 11000 } 11001 11002 if (!tg3_flag(tp, TAGGED_STATUS)) { 11003 /* All of this garbage is because when using non-tagged 11004 * IRQ status the mailbox/status_block protocol the chip 11005 * uses with the cpu is race prone. 11006 */ 11007 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 11008 tw32(GRC_LOCAL_CTRL, 11009 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 11010 } else { 11011 tw32(HOSTCC_MODE, tp->coalesce_mode | 11012 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 11013 } 11014 11015 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 11016 spin_unlock(&tp->lock); 11017 tg3_reset_task_schedule(tp); 11018 goto restart_timer; 11019 } 11020 } 11021 11022 /* This part only runs once per second. */ 11023 if (!--tp->timer_counter) { 11024 if (tg3_flag(tp, 5705_PLUS)) 11025 tg3_periodic_fetch_stats(tp); 11026 11027 if (tp->setlpicnt && !--tp->setlpicnt) 11028 tg3_phy_eee_enable(tp); 11029 11030 if (tg3_flag(tp, USE_LINKCHG_REG)) { 11031 u32 mac_stat; 11032 int phy_event; 11033 11034 mac_stat = tr32(MAC_STATUS); 11035 11036 phy_event = 0; 11037 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 11038 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 11039 phy_event = 1; 11040 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 11041 phy_event = 1; 11042 11043 if (phy_event) 11044 tg3_setup_phy(tp, false); 11045 } else if (tg3_flag(tp, POLL_SERDES)) { 11046 u32 mac_stat = tr32(MAC_STATUS); 11047 int need_setup = 0; 11048 11049 if (tp->link_up && 11050 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 11051 need_setup = 1; 11052 } 11053 if (!tp->link_up && 11054 (mac_stat & (MAC_STATUS_PCS_SYNCED | 11055 MAC_STATUS_SIGNAL_DET))) { 11056 need_setup = 1; 11057 } 11058 if (need_setup) { 11059 if (!tp->serdes_counter) { 11060 tw32_f(MAC_MODE, 11061 (tp->mac_mode & 11062 ~MAC_MODE_PORT_MODE_MASK)); 11063 udelay(40); 11064 tw32_f(MAC_MODE, tp->mac_mode); 11065 udelay(40); 11066 } 11067 tg3_setup_phy(tp, false); 11068 } 11069 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 11070 tg3_flag(tp, 5780_CLASS)) { 11071 tg3_serdes_parallel_detect(tp); 11072 } else if (tg3_flag(tp, POLL_CPMU_LINK)) { 11073 u32 cpmu = tr32(TG3_CPMU_STATUS); 11074 bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) == 11075 TG3_CPMU_STATUS_LINK_MASK); 11076 11077 if (link_up != tp->link_up) 11078 tg3_setup_phy(tp, false); 11079 } 11080 11081 tp->timer_counter = tp->timer_multiplier; 11082 } 11083 11084 /* Heartbeat is only sent once every 2 seconds. 11085 * 11086 * The heartbeat is to tell the ASF firmware that the host 11087 * driver is still alive. In the event that the OS crashes, 11088 * ASF needs to reset the hardware to free up the FIFO space 11089 * that may be filled with rx packets destined for the host. 11090 * If the FIFO is full, ASF will no longer function properly. 11091 * 11092 * Unintended resets have been reported on real time kernels 11093 * where the timer doesn't run on time. Netpoll will also have 11094 * same problem. 11095 * 11096 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 11097 * to check the ring condition when the heartbeat is expiring 11098 * before doing the reset. This will prevent most unintended 11099 * resets. 11100 */ 11101 if (!--tp->asf_counter) { 11102 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 11103 tg3_wait_for_event_ack(tp); 11104 11105 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 11106 FWCMD_NICDRV_ALIVE3); 11107 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 11108 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 11109 TG3_FW_UPDATE_TIMEOUT_SEC); 11110 11111 tg3_generate_fw_event(tp); 11112 } 11113 tp->asf_counter = tp->asf_multiplier; 11114 } 11115 11116 /* Update the APE heartbeat every 5 seconds.*/ 11117 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL); 11118 11119 spin_unlock(&tp->lock); 11120 11121restart_timer: 11122 tp->timer.expires = jiffies + tp->timer_offset; 11123 add_timer(&tp->timer); 11124} 11125 11126static void tg3_timer_init(struct tg3 *tp) 11127{ 11128 if (tg3_flag(tp, TAGGED_STATUS) && 11129 tg3_asic_rev(tp) != ASIC_REV_5717 && 11130 !tg3_flag(tp, 57765_CLASS)) 11131 tp->timer_offset = HZ; 11132 else 11133 tp->timer_offset = HZ / 10; 11134 11135 BUG_ON(tp->timer_offset > HZ); 11136 11137 tp->timer_multiplier = (HZ / tp->timer_offset); 11138 tp->asf_multiplier = (HZ / tp->timer_offset) * 11139 TG3_FW_UPDATE_FREQ_SEC; 11140 11141 timer_setup(&tp->timer, tg3_timer, 0); 11142} 11143 11144static void tg3_timer_start(struct tg3 *tp) 11145{ 11146 tp->asf_counter = tp->asf_multiplier; 11147 tp->timer_counter = tp->timer_multiplier; 11148 11149 tp->timer.expires = jiffies + tp->timer_offset; 11150 add_timer(&tp->timer); 11151} 11152 11153static void tg3_timer_stop(struct tg3 *tp) 11154{ 11155 del_timer_sync(&tp->timer); 11156} 11157 11158/* Restart hardware after configuration changes, self-test, etc. 11159 * Invoked with tp->lock held. 11160 */ 11161static int tg3_restart_hw(struct tg3 *tp, bool reset_phy) 11162 __releases(tp->lock) 11163 __acquires(tp->lock) 11164{ 11165 int err; 11166 11167 err = tg3_init_hw(tp, reset_phy); 11168 if (err) { 11169 netdev_err(tp->dev, 11170 "Failed to re-initialize device, aborting\n"); 11171 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11172 tg3_full_unlock(tp); 11173 tg3_timer_stop(tp); 11174 tp->irq_sync = 0; 11175 tg3_napi_enable(tp); 11176 dev_close(tp->dev); 11177 tg3_full_lock(tp, 0); 11178 } 11179 return err; 11180} 11181 11182static void tg3_reset_task(struct work_struct *work) 11183{ 11184 struct tg3 *tp = container_of(work, struct tg3, reset_task); 11185 int err; 11186 11187 rtnl_lock(); 11188 tg3_full_lock(tp, 0); 11189 11190 if (tp->pcierr_recovery || !netif_running(tp->dev) || 11191 tp->pdev->error_state != pci_channel_io_normal) { 11192 tg3_flag_clear(tp, RESET_TASK_PENDING); 11193 tg3_full_unlock(tp); 11194 rtnl_unlock(); 11195 return; 11196 } 11197 11198 tg3_full_unlock(tp); 11199 11200 tg3_phy_stop(tp); 11201 11202 tg3_netif_stop(tp); 11203 11204 tg3_full_lock(tp, 1); 11205 11206 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 11207 tp->write32_tx_mbox = tg3_write32_tx_mbox; 11208 tp->write32_rx_mbox = tg3_write_flush_reg32; 11209 tg3_flag_set(tp, MBOX_WRITE_REORDER); 11210 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 11211 } 11212 11213 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 11214 err = tg3_init_hw(tp, true); 11215 if (err) { 11216 tg3_full_unlock(tp); 11217 tp->irq_sync = 0; 11218 tg3_napi_enable(tp); 11219 /* Clear this flag so that tg3_reset_task_cancel() will not 11220 * call cancel_work_sync() and wait forever. 11221 */ 11222 tg3_flag_clear(tp, RESET_TASK_PENDING); 11223 dev_close(tp->dev); 11224 goto out; 11225 } 11226 11227 tg3_netif_start(tp); 11228 tg3_full_unlock(tp); 11229 tg3_phy_start(tp); 11230 tg3_flag_clear(tp, RESET_TASK_PENDING); 11231out: 11232 rtnl_unlock(); 11233} 11234 11235static int tg3_request_irq(struct tg3 *tp, int irq_num) 11236{ 11237 irq_handler_t fn; 11238 unsigned long flags; 11239 char *name; 11240 struct tg3_napi *tnapi = &tp->napi[irq_num]; 11241 11242 if (tp->irq_cnt == 1) 11243 name = tp->dev->name; 11244 else { 11245 name = &tnapi->irq_lbl[0]; 11246 if (tnapi->tx_buffers && tnapi->rx_rcb) 11247 snprintf(name, IFNAMSIZ, 11248 "%s-txrx-%d", tp->dev->name, irq_num); 11249 else if (tnapi->tx_buffers) 11250 snprintf(name, IFNAMSIZ, 11251 "%s-tx-%d", tp->dev->name, irq_num); 11252 else if (tnapi->rx_rcb) 11253 snprintf(name, IFNAMSIZ, 11254 "%s-rx-%d", tp->dev->name, irq_num); 11255 else 11256 snprintf(name, IFNAMSIZ, 11257 "%s-%d", tp->dev->name, irq_num); 11258 name[IFNAMSIZ-1] = 0; 11259 } 11260 11261 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11262 fn = tg3_msi; 11263 if (tg3_flag(tp, 1SHOT_MSI)) 11264 fn = tg3_msi_1shot; 11265 flags = 0; 11266 } else { 11267 fn = tg3_interrupt; 11268 if (tg3_flag(tp, TAGGED_STATUS)) 11269 fn = tg3_interrupt_tagged; 11270 flags = IRQF_SHARED; 11271 } 11272 11273 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 11274} 11275 11276static int tg3_test_interrupt(struct tg3 *tp) 11277{ 11278 struct tg3_napi *tnapi = &tp->napi[0]; 11279 struct net_device *dev = tp->dev; 11280 int err, i, intr_ok = 0; 11281 u32 val; 11282 11283 if (!netif_running(dev)) 11284 return -ENODEV; 11285 11286 tg3_disable_ints(tp); 11287 11288 free_irq(tnapi->irq_vec, tnapi); 11289 11290 /* 11291 * Turn off MSI one shot mode. Otherwise this test has no 11292 * observable way to know whether the interrupt was delivered. 11293 */ 11294 if (tg3_flag(tp, 57765_PLUS)) { 11295 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 11296 tw32(MSGINT_MODE, val); 11297 } 11298 11299 err = request_irq(tnapi->irq_vec, tg3_test_isr, 11300 IRQF_SHARED, dev->name, tnapi); 11301 if (err) 11302 return err; 11303 11304 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 11305 tg3_enable_ints(tp); 11306 11307 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11308 tnapi->coal_now); 11309 11310 for (i = 0; i < 5; i++) { 11311 u32 int_mbox, misc_host_ctrl; 11312 11313 int_mbox = tr32_mailbox(tnapi->int_mbox); 11314 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 11315 11316 if ((int_mbox != 0) || 11317 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 11318 intr_ok = 1; 11319 break; 11320 } 11321 11322 if (tg3_flag(tp, 57765_PLUS) && 11323 tnapi->hw_status->status_tag != tnapi->last_tag) 11324 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 11325 11326 msleep(10); 11327 } 11328 11329 tg3_disable_ints(tp); 11330 11331 free_irq(tnapi->irq_vec, tnapi); 11332 11333 err = tg3_request_irq(tp, 0); 11334 11335 if (err) 11336 return err; 11337 11338 if (intr_ok) { 11339 /* Reenable MSI one shot mode. */ 11340 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 11341 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 11342 tw32(MSGINT_MODE, val); 11343 } 11344 return 0; 11345 } 11346 11347 return -EIO; 11348} 11349 11350/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 11351 * successfully restored 11352 */ 11353static int tg3_test_msi(struct tg3 *tp) 11354{ 11355 int err; 11356 u16 pci_cmd; 11357 11358 if (!tg3_flag(tp, USING_MSI)) 11359 return 0; 11360 11361 /* Turn off SERR reporting in case MSI terminates with Master 11362 * Abort. 11363 */ 11364 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 11365 pci_write_config_word(tp->pdev, PCI_COMMAND, 11366 pci_cmd & ~PCI_COMMAND_SERR); 11367 11368 err = tg3_test_interrupt(tp); 11369 11370 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 11371 11372 if (!err) 11373 return 0; 11374 11375 /* other failures */ 11376 if (err != -EIO) 11377 return err; 11378 11379 /* MSI test failed, go back to INTx mode */ 11380 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 11381 "to INTx mode. Please report this failure to the PCI " 11382 "maintainer and include system chipset information\n"); 11383 11384 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11385 11386 pci_disable_msi(tp->pdev); 11387 11388 tg3_flag_clear(tp, USING_MSI); 11389 tp->napi[0].irq_vec = tp->pdev->irq; 11390 11391 err = tg3_request_irq(tp, 0); 11392 if (err) 11393 return err; 11394 11395 /* Need to reset the chip because the MSI cycle may have terminated 11396 * with Master Abort. 11397 */ 11398 tg3_full_lock(tp, 1); 11399 11400 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11401 err = tg3_init_hw(tp, true); 11402 11403 tg3_full_unlock(tp); 11404 11405 if (err) 11406 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11407 11408 return err; 11409} 11410 11411static int tg3_request_firmware(struct tg3 *tp) 11412{ 11413 const struct tg3_firmware_hdr *fw_hdr; 11414 11415 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 11416 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 11417 tp->fw_needed); 11418 return -ENOENT; 11419 } 11420 11421 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 11422 11423 /* Firmware blob starts with version numbers, followed by 11424 * start address and _full_ length including BSS sections 11425 * (which must be longer than the actual data, of course 11426 */ 11427 11428 tp->fw_len = be32_to_cpu(fw_hdr->len); /* includes bss */ 11429 if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) { 11430 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 11431 tp->fw_len, tp->fw_needed); 11432 release_firmware(tp->fw); 11433 tp->fw = NULL; 11434 return -EINVAL; 11435 } 11436 11437 /* We no longer need firmware; we have it. */ 11438 tp->fw_needed = NULL; 11439 return 0; 11440} 11441 11442static u32 tg3_irq_count(struct tg3 *tp) 11443{ 11444 u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt); 11445 11446 if (irq_cnt > 1) { 11447 /* We want as many rx rings enabled as there are cpus. 11448 * In multiqueue MSI-X mode, the first MSI-X vector 11449 * only deals with link interrupts, etc, so we add 11450 * one to the number of vectors we are requesting. 11451 */ 11452 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max); 11453 } 11454 11455 return irq_cnt; 11456} 11457 11458static bool tg3_enable_msix(struct tg3 *tp) 11459{ 11460 int i, rc; 11461 struct msix_entry msix_ent[TG3_IRQ_MAX_VECS]; 11462 11463 tp->txq_cnt = tp->txq_req; 11464 tp->rxq_cnt = tp->rxq_req; 11465 if (!tp->rxq_cnt) 11466 tp->rxq_cnt = netif_get_num_default_rss_queues(); 11467 if (tp->rxq_cnt > tp->rxq_max) 11468 tp->rxq_cnt = tp->rxq_max; 11469 11470 /* Disable multiple TX rings by default. Simple round-robin hardware 11471 * scheduling of the TX rings can cause starvation of rings with 11472 * small packets when other rings have TSO or jumbo packets. 11473 */ 11474 if (!tp->txq_req) 11475 tp->txq_cnt = 1; 11476 11477 tp->irq_cnt = tg3_irq_count(tp); 11478 11479 for (i = 0; i < tp->irq_max; i++) { 11480 msix_ent[i].entry = i; 11481 msix_ent[i].vector = 0; 11482 } 11483 11484 rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt); 11485 if (rc < 0) { 11486 return false; 11487 } else if (rc < tp->irq_cnt) { 11488 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 11489 tp->irq_cnt, rc); 11490 tp->irq_cnt = rc; 11491 tp->rxq_cnt = max(rc - 1, 1); 11492 if (tp->txq_cnt) 11493 tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max); 11494 } 11495 11496 for (i = 0; i < tp->irq_max; i++) 11497 tp->napi[i].irq_vec = msix_ent[i].vector; 11498 11499 if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) { 11500 pci_disable_msix(tp->pdev); 11501 return false; 11502 } 11503 11504 if (tp->irq_cnt == 1) 11505 return true; 11506 11507 tg3_flag_set(tp, ENABLE_RSS); 11508 11509 if (tp->txq_cnt > 1) 11510 tg3_flag_set(tp, ENABLE_TSS); 11511 11512 netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt); 11513 11514 return true; 11515} 11516 11517static void tg3_ints_init(struct tg3 *tp) 11518{ 11519 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 11520 !tg3_flag(tp, TAGGED_STATUS)) { 11521 /* All MSI supporting chips should support tagged 11522 * status. Assert that this is the case. 11523 */ 11524 netdev_warn(tp->dev, 11525 "MSI without TAGGED_STATUS? Not using MSI\n"); 11526 goto defcfg; 11527 } 11528 11529 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 11530 tg3_flag_set(tp, USING_MSIX); 11531 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 11532 tg3_flag_set(tp, USING_MSI); 11533 11534 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11535 u32 msi_mode = tr32(MSGINT_MODE); 11536 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 11537 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 11538 if (!tg3_flag(tp, 1SHOT_MSI)) 11539 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 11540 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 11541 } 11542defcfg: 11543 if (!tg3_flag(tp, USING_MSIX)) { 11544 tp->irq_cnt = 1; 11545 tp->napi[0].irq_vec = tp->pdev->irq; 11546 } 11547 11548 if (tp->irq_cnt == 1) { 11549 tp->txq_cnt = 1; 11550 tp->rxq_cnt = 1; 11551 netif_set_real_num_tx_queues(tp->dev, 1); 11552 netif_set_real_num_rx_queues(tp->dev, 1); 11553 } 11554} 11555 11556static void tg3_ints_fini(struct tg3 *tp) 11557{ 11558 if (tg3_flag(tp, USING_MSIX)) 11559 pci_disable_msix(tp->pdev); 11560 else if (tg3_flag(tp, USING_MSI)) 11561 pci_disable_msi(tp->pdev); 11562 tg3_flag_clear(tp, USING_MSI); 11563 tg3_flag_clear(tp, USING_MSIX); 11564 tg3_flag_clear(tp, ENABLE_RSS); 11565 tg3_flag_clear(tp, ENABLE_TSS); 11566} 11567 11568static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, 11569 bool init) 11570{ 11571 struct net_device *dev = tp->dev; 11572 int i, err; 11573 11574 /* 11575 * Setup interrupts first so we know how 11576 * many NAPI resources to allocate 11577 */ 11578 tg3_ints_init(tp); 11579 11580 tg3_rss_check_indir_tbl(tp); 11581 11582 /* The placement of this call is tied 11583 * to the setup and use of Host TX descriptors. 11584 */ 11585 err = tg3_alloc_consistent(tp); 11586 if (err) 11587 goto out_ints_fini; 11588 11589 tg3_napi_init(tp); 11590 11591 tg3_napi_enable(tp); 11592 11593 for (i = 0; i < tp->irq_cnt; i++) { 11594 err = tg3_request_irq(tp, i); 11595 if (err) { 11596 for (i--; i >= 0; i--) { 11597 struct tg3_napi *tnapi = &tp->napi[i]; 11598 11599 free_irq(tnapi->irq_vec, tnapi); 11600 } 11601 goto out_napi_fini; 11602 } 11603 } 11604 11605 tg3_full_lock(tp, 0); 11606 11607 if (init) 11608 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 11609 11610 err = tg3_init_hw(tp, reset_phy); 11611 if (err) { 11612 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11613 tg3_free_rings(tp); 11614 } 11615 11616 tg3_full_unlock(tp); 11617 11618 if (err) 11619 goto out_free_irq; 11620 11621 if (test_irq && tg3_flag(tp, USING_MSI)) { 11622 err = tg3_test_msi(tp); 11623 11624 if (err) { 11625 tg3_full_lock(tp, 0); 11626 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11627 tg3_free_rings(tp); 11628 tg3_full_unlock(tp); 11629 11630 goto out_napi_fini; 11631 } 11632 11633 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 11634 u32 val = tr32(PCIE_TRANSACTION_CFG); 11635 11636 tw32(PCIE_TRANSACTION_CFG, 11637 val | PCIE_TRANS_CFG_1SHOT_MSI); 11638 } 11639 } 11640 11641 tg3_phy_start(tp); 11642 11643 tg3_hwmon_open(tp); 11644 11645 tg3_full_lock(tp, 0); 11646 11647 tg3_timer_start(tp); 11648 tg3_flag_set(tp, INIT_COMPLETE); 11649 tg3_enable_ints(tp); 11650 11651 tg3_ptp_resume(tp); 11652 11653 tg3_full_unlock(tp); 11654 11655 netif_tx_start_all_queues(dev); 11656 11657 /* 11658 * Reset loopback feature if it was turned on while the device was down 11659 * make sure that it's installed properly now. 11660 */ 11661 if (dev->features & NETIF_F_LOOPBACK) 11662 tg3_set_loopback(dev, dev->features); 11663 11664 return 0; 11665 11666out_free_irq: 11667 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11668 struct tg3_napi *tnapi = &tp->napi[i]; 11669 free_irq(tnapi->irq_vec, tnapi); 11670 } 11671 11672out_napi_fini: 11673 tg3_napi_disable(tp); 11674 tg3_napi_fini(tp); 11675 tg3_free_consistent(tp); 11676 11677out_ints_fini: 11678 tg3_ints_fini(tp); 11679 11680 return err; 11681} 11682 11683static void tg3_stop(struct tg3 *tp) 11684{ 11685 int i; 11686 11687 tg3_reset_task_cancel(tp); 11688 tg3_netif_stop(tp); 11689 11690 tg3_timer_stop(tp); 11691 11692 tg3_hwmon_close(tp); 11693 11694 tg3_phy_stop(tp); 11695 11696 tg3_full_lock(tp, 1); 11697 11698 tg3_disable_ints(tp); 11699 11700 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11701 tg3_free_rings(tp); 11702 tg3_flag_clear(tp, INIT_COMPLETE); 11703 11704 tg3_full_unlock(tp); 11705 11706 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11707 struct tg3_napi *tnapi = &tp->napi[i]; 11708 free_irq(tnapi->irq_vec, tnapi); 11709 } 11710 11711 tg3_ints_fini(tp); 11712 11713 tg3_napi_fini(tp); 11714 11715 tg3_free_consistent(tp); 11716} 11717 11718static int tg3_open(struct net_device *dev) 11719{ 11720 struct tg3 *tp = netdev_priv(dev); 11721 int err; 11722 11723 if (tp->pcierr_recovery) { 11724 netdev_err(dev, "Failed to open device. PCI error recovery " 11725 "in progress\n"); 11726 return -EAGAIN; 11727 } 11728 11729 if (tp->fw_needed) { 11730 err = tg3_request_firmware(tp); 11731 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 11732 if (err) { 11733 netdev_warn(tp->dev, "EEE capability disabled\n"); 11734 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11735 } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 11736 netdev_warn(tp->dev, "EEE capability restored\n"); 11737 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 11738 } 11739 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 11740 if (err) 11741 return err; 11742 } else if (err) { 11743 netdev_warn(tp->dev, "TSO capability disabled\n"); 11744 tg3_flag_clear(tp, TSO_CAPABLE); 11745 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 11746 netdev_notice(tp->dev, "TSO capability restored\n"); 11747 tg3_flag_set(tp, TSO_CAPABLE); 11748 } 11749 } 11750 11751 tg3_carrier_off(tp); 11752 11753 err = tg3_power_up(tp); 11754 if (err) 11755 return err; 11756 11757 tg3_full_lock(tp, 0); 11758 11759 tg3_disable_ints(tp); 11760 tg3_flag_clear(tp, INIT_COMPLETE); 11761 11762 tg3_full_unlock(tp); 11763 11764 err = tg3_start(tp, 11765 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN), 11766 true, true); 11767 if (err) { 11768 tg3_frob_aux_power(tp, false); 11769 pci_set_power_state(tp->pdev, PCI_D3hot); 11770 } 11771 11772 return err; 11773} 11774 11775static int tg3_close(struct net_device *dev) 11776{ 11777 struct tg3 *tp = netdev_priv(dev); 11778 11779 if (tp->pcierr_recovery) { 11780 netdev_err(dev, "Failed to close device. PCI error recovery " 11781 "in progress\n"); 11782 return -EAGAIN; 11783 } 11784 11785 tg3_stop(tp); 11786 11787 if (pci_device_is_present(tp->pdev)) { 11788 tg3_power_down_prepare(tp); 11789 11790 tg3_carrier_off(tp); 11791 } 11792 return 0; 11793} 11794 11795static inline u64 get_stat64(tg3_stat64_t *val) 11796{ 11797 return ((u64)val->high << 32) | ((u64)val->low); 11798} 11799 11800static u64 tg3_calc_crc_errors(struct tg3 *tp) 11801{ 11802 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11803 11804 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11805 (tg3_asic_rev(tp) == ASIC_REV_5700 || 11806 tg3_asic_rev(tp) == ASIC_REV_5701)) { 11807 u32 val; 11808 11809 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 11810 tg3_writephy(tp, MII_TG3_TEST1, 11811 val | MII_TG3_TEST1_CRC_EN); 11812 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 11813 } else 11814 val = 0; 11815 11816 tp->phy_crc_errors += val; 11817 11818 return tp->phy_crc_errors; 11819 } 11820 11821 return get_stat64(&hw_stats->rx_fcs_errors); 11822} 11823 11824#define ESTAT_ADD(member) \ 11825 estats->member = old_estats->member + \ 11826 get_stat64(&hw_stats->member) 11827 11828static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 11829{ 11830 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 11831 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11832 11833 ESTAT_ADD(rx_octets); 11834 ESTAT_ADD(rx_fragments); 11835 ESTAT_ADD(rx_ucast_packets); 11836 ESTAT_ADD(rx_mcast_packets); 11837 ESTAT_ADD(rx_bcast_packets); 11838 ESTAT_ADD(rx_fcs_errors); 11839 ESTAT_ADD(rx_align_errors); 11840 ESTAT_ADD(rx_xon_pause_rcvd); 11841 ESTAT_ADD(rx_xoff_pause_rcvd); 11842 ESTAT_ADD(rx_mac_ctrl_rcvd); 11843 ESTAT_ADD(rx_xoff_entered); 11844 ESTAT_ADD(rx_frame_too_long_errors); 11845 ESTAT_ADD(rx_jabbers); 11846 ESTAT_ADD(rx_undersize_packets); 11847 ESTAT_ADD(rx_in_length_errors); 11848 ESTAT_ADD(rx_out_length_errors); 11849 ESTAT_ADD(rx_64_or_less_octet_packets); 11850 ESTAT_ADD(rx_65_to_127_octet_packets); 11851 ESTAT_ADD(rx_128_to_255_octet_packets); 11852 ESTAT_ADD(rx_256_to_511_octet_packets); 11853 ESTAT_ADD(rx_512_to_1023_octet_packets); 11854 ESTAT_ADD(rx_1024_to_1522_octet_packets); 11855 ESTAT_ADD(rx_1523_to_2047_octet_packets); 11856 ESTAT_ADD(rx_2048_to_4095_octet_packets); 11857 ESTAT_ADD(rx_4096_to_8191_octet_packets); 11858 ESTAT_ADD(rx_8192_to_9022_octet_packets); 11859 11860 ESTAT_ADD(tx_octets); 11861 ESTAT_ADD(tx_collisions); 11862 ESTAT_ADD(tx_xon_sent); 11863 ESTAT_ADD(tx_xoff_sent); 11864 ESTAT_ADD(tx_flow_control); 11865 ESTAT_ADD(tx_mac_errors); 11866 ESTAT_ADD(tx_single_collisions); 11867 ESTAT_ADD(tx_mult_collisions); 11868 ESTAT_ADD(tx_deferred); 11869 ESTAT_ADD(tx_excessive_collisions); 11870 ESTAT_ADD(tx_late_collisions); 11871 ESTAT_ADD(tx_collide_2times); 11872 ESTAT_ADD(tx_collide_3times); 11873 ESTAT_ADD(tx_collide_4times); 11874 ESTAT_ADD(tx_collide_5times); 11875 ESTAT_ADD(tx_collide_6times); 11876 ESTAT_ADD(tx_collide_7times); 11877 ESTAT_ADD(tx_collide_8times); 11878 ESTAT_ADD(tx_collide_9times); 11879 ESTAT_ADD(tx_collide_10times); 11880 ESTAT_ADD(tx_collide_11times); 11881 ESTAT_ADD(tx_collide_12times); 11882 ESTAT_ADD(tx_collide_13times); 11883 ESTAT_ADD(tx_collide_14times); 11884 ESTAT_ADD(tx_collide_15times); 11885 ESTAT_ADD(tx_ucast_packets); 11886 ESTAT_ADD(tx_mcast_packets); 11887 ESTAT_ADD(tx_bcast_packets); 11888 ESTAT_ADD(tx_carrier_sense_errors); 11889 ESTAT_ADD(tx_discards); 11890 ESTAT_ADD(tx_errors); 11891 11892 ESTAT_ADD(dma_writeq_full); 11893 ESTAT_ADD(dma_write_prioq_full); 11894 ESTAT_ADD(rxbds_empty); 11895 ESTAT_ADD(rx_discards); 11896 ESTAT_ADD(rx_errors); 11897 ESTAT_ADD(rx_threshold_hit); 11898 11899 ESTAT_ADD(dma_readq_full); 11900 ESTAT_ADD(dma_read_prioq_full); 11901 ESTAT_ADD(tx_comp_queue_full); 11902 11903 ESTAT_ADD(ring_set_send_prod_index); 11904 ESTAT_ADD(ring_status_update); 11905 ESTAT_ADD(nic_irqs); 11906 ESTAT_ADD(nic_avoided_irqs); 11907 ESTAT_ADD(nic_tx_threshold_hit); 11908 11909 ESTAT_ADD(mbuf_lwm_thresh_hit); 11910} 11911 11912static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 11913{ 11914 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 11915 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11916 unsigned long rx_dropped; 11917 unsigned long tx_dropped; 11918 int i; 11919 11920 stats->rx_packets = old_stats->rx_packets + 11921 get_stat64(&hw_stats->rx_ucast_packets) + 11922 get_stat64(&hw_stats->rx_mcast_packets) + 11923 get_stat64(&hw_stats->rx_bcast_packets); 11924 11925 stats->tx_packets = old_stats->tx_packets + 11926 get_stat64(&hw_stats->tx_ucast_packets) + 11927 get_stat64(&hw_stats->tx_mcast_packets) + 11928 get_stat64(&hw_stats->tx_bcast_packets); 11929 11930 stats->rx_bytes = old_stats->rx_bytes + 11931 get_stat64(&hw_stats->rx_octets); 11932 stats->tx_bytes = old_stats->tx_bytes + 11933 get_stat64(&hw_stats->tx_octets); 11934 11935 stats->rx_errors = old_stats->rx_errors + 11936 get_stat64(&hw_stats->rx_errors); 11937 stats->tx_errors = old_stats->tx_errors + 11938 get_stat64(&hw_stats->tx_errors) + 11939 get_stat64(&hw_stats->tx_mac_errors) + 11940 get_stat64(&hw_stats->tx_carrier_sense_errors) + 11941 get_stat64(&hw_stats->tx_discards); 11942 11943 stats->multicast = old_stats->multicast + 11944 get_stat64(&hw_stats->rx_mcast_packets); 11945 stats->collisions = old_stats->collisions + 11946 get_stat64(&hw_stats->tx_collisions); 11947 11948 stats->rx_length_errors = old_stats->rx_length_errors + 11949 get_stat64(&hw_stats->rx_frame_too_long_errors) + 11950 get_stat64(&hw_stats->rx_undersize_packets); 11951 11952 stats->rx_frame_errors = old_stats->rx_frame_errors + 11953 get_stat64(&hw_stats->rx_align_errors); 11954 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 11955 get_stat64(&hw_stats->tx_discards); 11956 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 11957 get_stat64(&hw_stats->tx_carrier_sense_errors); 11958 11959 stats->rx_crc_errors = old_stats->rx_crc_errors + 11960 tg3_calc_crc_errors(tp); 11961 11962 stats->rx_missed_errors = old_stats->rx_missed_errors + 11963 get_stat64(&hw_stats->rx_discards); 11964 11965 /* Aggregate per-queue counters. The per-queue counters are updated 11966 * by a single writer, race-free. The result computed by this loop 11967 * might not be 100% accurate (counters can be updated in the middle of 11968 * the loop) but the next tg3_get_nstats() will recompute the current 11969 * value so it is acceptable. 11970 * 11971 * Note that these counters wrap around at 4G on 32bit machines. 11972 */ 11973 rx_dropped = (unsigned long)(old_stats->rx_dropped); 11974 tx_dropped = (unsigned long)(old_stats->tx_dropped); 11975 11976 for (i = 0; i < tp->irq_cnt; i++) { 11977 struct tg3_napi *tnapi = &tp->napi[i]; 11978 11979 rx_dropped += tnapi->rx_dropped; 11980 tx_dropped += tnapi->tx_dropped; 11981 } 11982 11983 stats->rx_dropped = rx_dropped; 11984 stats->tx_dropped = tx_dropped; 11985} 11986 11987static int tg3_get_regs_len(struct net_device *dev) 11988{ 11989 return TG3_REG_BLK_SIZE; 11990} 11991 11992static void tg3_get_regs(struct net_device *dev, 11993 struct ethtool_regs *regs, void *_p) 11994{ 11995 struct tg3 *tp = netdev_priv(dev); 11996 11997 regs->version = 0; 11998 11999 memset(_p, 0, TG3_REG_BLK_SIZE); 12000 12001 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 12002 return; 12003 12004 tg3_full_lock(tp, 0); 12005 12006 tg3_dump_legacy_regs(tp, (u32 *)_p); 12007 12008 tg3_full_unlock(tp); 12009} 12010 12011static int tg3_get_eeprom_len(struct net_device *dev) 12012{ 12013 struct tg3 *tp = netdev_priv(dev); 12014 12015 return tp->nvram_size; 12016} 12017 12018static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12019{ 12020 struct tg3 *tp = netdev_priv(dev); 12021 int ret, cpmu_restore = 0; 12022 u8 *pd; 12023 u32 i, offset, len, b_offset, b_count, cpmu_val = 0; 12024 __be32 val; 12025 12026 if (tg3_flag(tp, NO_NVRAM)) 12027 return -EINVAL; 12028 12029 offset = eeprom->offset; 12030 len = eeprom->len; 12031 eeprom->len = 0; 12032 12033 eeprom->magic = TG3_EEPROM_MAGIC; 12034 12035 /* Override clock, link aware and link idle modes */ 12036 if (tg3_flag(tp, CPMU_PRESENT)) { 12037 cpmu_val = tr32(TG3_CPMU_CTRL); 12038 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE | 12039 CPMU_CTRL_LINK_IDLE_MODE)) { 12040 tw32(TG3_CPMU_CTRL, cpmu_val & 12041 ~(CPMU_CTRL_LINK_AWARE_MODE | 12042 CPMU_CTRL_LINK_IDLE_MODE)); 12043 cpmu_restore = 1; 12044 } 12045 } 12046 tg3_override_clk(tp); 12047 12048 if (offset & 3) { 12049 /* adjustments to start on required 4 byte boundary */ 12050 b_offset = offset & 3; 12051 b_count = 4 - b_offset; 12052 if (b_count > len) { 12053 /* i.e. offset=1 len=2 */ 12054 b_count = len; 12055 } 12056 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 12057 if (ret) 12058 goto eeprom_done; 12059 memcpy(data, ((char *)&val) + b_offset, b_count); 12060 len -= b_count; 12061 offset += b_count; 12062 eeprom->len += b_count; 12063 } 12064 12065 /* read bytes up to the last 4 byte boundary */ 12066 pd = &data[eeprom->len]; 12067 for (i = 0; i < (len - (len & 3)); i += 4) { 12068 ret = tg3_nvram_read_be32(tp, offset + i, &val); 12069 if (ret) { 12070 if (i) 12071 i -= 4; 12072 eeprom->len += i; 12073 goto eeprom_done; 12074 } 12075 memcpy(pd + i, &val, 4); 12076 if (need_resched()) { 12077 if (signal_pending(current)) { 12078 eeprom->len += i; 12079 ret = -EINTR; 12080 goto eeprom_done; 12081 } 12082 cond_resched(); 12083 } 12084 } 12085 eeprom->len += i; 12086 12087 if (len & 3) { 12088 /* read last bytes not ending on 4 byte boundary */ 12089 pd = &data[eeprom->len]; 12090 b_count = len & 3; 12091 b_offset = offset + len - b_count; 12092 ret = tg3_nvram_read_be32(tp, b_offset, &val); 12093 if (ret) 12094 goto eeprom_done; 12095 memcpy(pd, &val, b_count); 12096 eeprom->len += b_count; 12097 } 12098 ret = 0; 12099 12100eeprom_done: 12101 /* Restore clock, link aware and link idle modes */ 12102 tg3_restore_clk(tp); 12103 if (cpmu_restore) 12104 tw32(TG3_CPMU_CTRL, cpmu_val); 12105 12106 return ret; 12107} 12108 12109static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12110{ 12111 struct tg3 *tp = netdev_priv(dev); 12112 int ret; 12113 u32 offset, len, b_offset, odd_len; 12114 u8 *buf; 12115 __be32 start = 0, end; 12116 12117 if (tg3_flag(tp, NO_NVRAM) || 12118 eeprom->magic != TG3_EEPROM_MAGIC) 12119 return -EINVAL; 12120 12121 offset = eeprom->offset; 12122 len = eeprom->len; 12123 12124 if ((b_offset = (offset & 3))) { 12125 /* adjustments to start on required 4 byte boundary */ 12126 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 12127 if (ret) 12128 return ret; 12129 len += b_offset; 12130 offset &= ~3; 12131 if (len < 4) 12132 len = 4; 12133 } 12134 12135 odd_len = 0; 12136 if (len & 3) { 12137 /* adjustments to end on required 4 byte boundary */ 12138 odd_len = 1; 12139 len = (len + 3) & ~3; 12140 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 12141 if (ret) 12142 return ret; 12143 } 12144 12145 buf = data; 12146 if (b_offset || odd_len) { 12147 buf = kmalloc(len, GFP_KERNEL); 12148 if (!buf) 12149 return -ENOMEM; 12150 if (b_offset) 12151 memcpy(buf, &start, 4); 12152 if (odd_len) 12153 memcpy(buf+len-4, &end, 4); 12154 memcpy(buf + b_offset, data, eeprom->len); 12155 } 12156 12157 ret = tg3_nvram_write_block(tp, offset, len, buf); 12158 12159 if (buf != data) 12160 kfree(buf); 12161 12162 return ret; 12163} 12164 12165static int tg3_get_link_ksettings(struct net_device *dev, 12166 struct ethtool_link_ksettings *cmd) 12167{ 12168 struct tg3 *tp = netdev_priv(dev); 12169 u32 supported, advertising; 12170 12171 if (tg3_flag(tp, USE_PHYLIB)) { 12172 struct phy_device *phydev; 12173 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12174 return -EAGAIN; 12175 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12176 phy_ethtool_ksettings_get(phydev, cmd); 12177 12178 return 0; 12179 } 12180 12181 supported = (SUPPORTED_Autoneg); 12182 12183 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12184 supported |= (SUPPORTED_1000baseT_Half | 12185 SUPPORTED_1000baseT_Full); 12186 12187 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12188 supported |= (SUPPORTED_100baseT_Half | 12189 SUPPORTED_100baseT_Full | 12190 SUPPORTED_10baseT_Half | 12191 SUPPORTED_10baseT_Full | 12192 SUPPORTED_TP); 12193 cmd->base.port = PORT_TP; 12194 } else { 12195 supported |= SUPPORTED_FIBRE; 12196 cmd->base.port = PORT_FIBRE; 12197 } 12198 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 12199 supported); 12200 12201 advertising = tp->link_config.advertising; 12202 if (tg3_flag(tp, PAUSE_AUTONEG)) { 12203 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 12204 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12205 advertising |= ADVERTISED_Pause; 12206 } else { 12207 advertising |= ADVERTISED_Pause | 12208 ADVERTISED_Asym_Pause; 12209 } 12210 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12211 advertising |= ADVERTISED_Asym_Pause; 12212 } 12213 } 12214 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 12215 advertising); 12216 12217 if (netif_running(dev) && tp->link_up) { 12218 cmd->base.speed = tp->link_config.active_speed; 12219 cmd->base.duplex = tp->link_config.active_duplex; 12220 ethtool_convert_legacy_u32_to_link_mode( 12221 cmd->link_modes.lp_advertising, 12222 tp->link_config.rmt_adv); 12223 12224 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12225 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 12226 cmd->base.eth_tp_mdix = ETH_TP_MDI_X; 12227 else 12228 cmd->base.eth_tp_mdix = ETH_TP_MDI; 12229 } 12230 } else { 12231 cmd->base.speed = SPEED_UNKNOWN; 12232 cmd->base.duplex = DUPLEX_UNKNOWN; 12233 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; 12234 } 12235 cmd->base.phy_address = tp->phy_addr; 12236 cmd->base.autoneg = tp->link_config.autoneg; 12237 return 0; 12238} 12239 12240static int tg3_set_link_ksettings(struct net_device *dev, 12241 const struct ethtool_link_ksettings *cmd) 12242{ 12243 struct tg3 *tp = netdev_priv(dev); 12244 u32 speed = cmd->base.speed; 12245 u32 advertising; 12246 12247 if (tg3_flag(tp, USE_PHYLIB)) { 12248 struct phy_device *phydev; 12249 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12250 return -EAGAIN; 12251 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12252 return phy_ethtool_ksettings_set(phydev, cmd); 12253 } 12254 12255 if (cmd->base.autoneg != AUTONEG_ENABLE && 12256 cmd->base.autoneg != AUTONEG_DISABLE) 12257 return -EINVAL; 12258 12259 if (cmd->base.autoneg == AUTONEG_DISABLE && 12260 cmd->base.duplex != DUPLEX_FULL && 12261 cmd->base.duplex != DUPLEX_HALF) 12262 return -EINVAL; 12263 12264 ethtool_convert_link_mode_to_legacy_u32(&advertising, 12265 cmd->link_modes.advertising); 12266 12267 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12268 u32 mask = ADVERTISED_Autoneg | 12269 ADVERTISED_Pause | 12270 ADVERTISED_Asym_Pause; 12271 12272 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12273 mask |= ADVERTISED_1000baseT_Half | 12274 ADVERTISED_1000baseT_Full; 12275 12276 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 12277 mask |= ADVERTISED_100baseT_Half | 12278 ADVERTISED_100baseT_Full | 12279 ADVERTISED_10baseT_Half | 12280 ADVERTISED_10baseT_Full | 12281 ADVERTISED_TP; 12282 else 12283 mask |= ADVERTISED_FIBRE; 12284 12285 if (advertising & ~mask) 12286 return -EINVAL; 12287 12288 mask &= (ADVERTISED_1000baseT_Half | 12289 ADVERTISED_1000baseT_Full | 12290 ADVERTISED_100baseT_Half | 12291 ADVERTISED_100baseT_Full | 12292 ADVERTISED_10baseT_Half | 12293 ADVERTISED_10baseT_Full); 12294 12295 advertising &= mask; 12296 } else { 12297 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 12298 if (speed != SPEED_1000) 12299 return -EINVAL; 12300 12301 if (cmd->base.duplex != DUPLEX_FULL) 12302 return -EINVAL; 12303 } else { 12304 if (speed != SPEED_100 && 12305 speed != SPEED_10) 12306 return -EINVAL; 12307 } 12308 } 12309 12310 tg3_full_lock(tp, 0); 12311 12312 tp->link_config.autoneg = cmd->base.autoneg; 12313 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12314 tp->link_config.advertising = (advertising | 12315 ADVERTISED_Autoneg); 12316 tp->link_config.speed = SPEED_UNKNOWN; 12317 tp->link_config.duplex = DUPLEX_UNKNOWN; 12318 } else { 12319 tp->link_config.advertising = 0; 12320 tp->link_config.speed = speed; 12321 tp->link_config.duplex = cmd->base.duplex; 12322 } 12323 12324 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12325 12326 tg3_warn_mgmt_link_flap(tp); 12327 12328 if (netif_running(dev)) 12329 tg3_setup_phy(tp, true); 12330 12331 tg3_full_unlock(tp); 12332 12333 return 0; 12334} 12335 12336static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 12337{ 12338 struct tg3 *tp = netdev_priv(dev); 12339 12340 strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 12341 strscpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 12342 strscpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 12343} 12344 12345static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12346{ 12347 struct tg3 *tp = netdev_priv(dev); 12348 12349 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 12350 wol->supported = WAKE_MAGIC; 12351 else 12352 wol->supported = 0; 12353 wol->wolopts = 0; 12354 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 12355 wol->wolopts = WAKE_MAGIC; 12356 memset(&wol->sopass, 0, sizeof(wol->sopass)); 12357} 12358 12359static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12360{ 12361 struct tg3 *tp = netdev_priv(dev); 12362 struct device *dp = &tp->pdev->dev; 12363 12364 if (wol->wolopts & ~WAKE_MAGIC) 12365 return -EINVAL; 12366 if ((wol->wolopts & WAKE_MAGIC) && 12367 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 12368 return -EINVAL; 12369 12370 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 12371 12372 if (device_may_wakeup(dp)) 12373 tg3_flag_set(tp, WOL_ENABLE); 12374 else 12375 tg3_flag_clear(tp, WOL_ENABLE); 12376 12377 return 0; 12378} 12379 12380static u32 tg3_get_msglevel(struct net_device *dev) 12381{ 12382 struct tg3 *tp = netdev_priv(dev); 12383 return tp->msg_enable; 12384} 12385 12386static void tg3_set_msglevel(struct net_device *dev, u32 value) 12387{ 12388 struct tg3 *tp = netdev_priv(dev); 12389 tp->msg_enable = value; 12390} 12391 12392static int tg3_nway_reset(struct net_device *dev) 12393{ 12394 struct tg3 *tp = netdev_priv(dev); 12395 int r; 12396 12397 if (!netif_running(dev)) 12398 return -EAGAIN; 12399 12400 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12401 return -EINVAL; 12402 12403 tg3_warn_mgmt_link_flap(tp); 12404 12405 if (tg3_flag(tp, USE_PHYLIB)) { 12406 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12407 return -EAGAIN; 12408 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 12409 } else { 12410 u32 bmcr; 12411 12412 spin_lock_bh(&tp->lock); 12413 r = -EINVAL; 12414 tg3_readphy(tp, MII_BMCR, &bmcr); 12415 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 12416 ((bmcr & BMCR_ANENABLE) || 12417 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 12418 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 12419 BMCR_ANENABLE); 12420 r = 0; 12421 } 12422 spin_unlock_bh(&tp->lock); 12423 } 12424 12425 return r; 12426} 12427 12428static void tg3_get_ringparam(struct net_device *dev, 12429 struct ethtool_ringparam *ering, 12430 struct kernel_ethtool_ringparam *kernel_ering, 12431 struct netlink_ext_ack *extack) 12432{ 12433 struct tg3 *tp = netdev_priv(dev); 12434 12435 ering->rx_max_pending = tp->rx_std_ring_mask; 12436 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12437 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 12438 else 12439 ering->rx_jumbo_max_pending = 0; 12440 12441 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 12442 12443 ering->rx_pending = tp->rx_pending; 12444 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12445 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 12446 else 12447 ering->rx_jumbo_pending = 0; 12448 12449 ering->tx_pending = tp->napi[0].tx_pending; 12450} 12451 12452static int tg3_set_ringparam(struct net_device *dev, 12453 struct ethtool_ringparam *ering, 12454 struct kernel_ethtool_ringparam *kernel_ering, 12455 struct netlink_ext_ack *extack) 12456{ 12457 struct tg3 *tp = netdev_priv(dev); 12458 int i, irq_sync = 0, err = 0; 12459 bool reset_phy = false; 12460 12461 if ((ering->rx_pending > tp->rx_std_ring_mask) || 12462 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 12463 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 12464 (ering->tx_pending <= MAX_SKB_FRAGS) || 12465 (tg3_flag(tp, TSO_BUG) && 12466 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 12467 return -EINVAL; 12468 12469 if (netif_running(dev)) { 12470 tg3_phy_stop(tp); 12471 tg3_netif_stop(tp); 12472 irq_sync = 1; 12473 } 12474 12475 tg3_full_lock(tp, irq_sync); 12476 12477 tp->rx_pending = ering->rx_pending; 12478 12479 if (tg3_flag(tp, MAX_RXPEND_64) && 12480 tp->rx_pending > 63) 12481 tp->rx_pending = 63; 12482 12483 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12484 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 12485 12486 for (i = 0; i < tp->irq_max; i++) 12487 tp->napi[i].tx_pending = ering->tx_pending; 12488 12489 if (netif_running(dev)) { 12490 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12491 /* Reset PHY to avoid PHY lock up */ 12492 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12493 tg3_asic_rev(tp) == ASIC_REV_5719 || 12494 tg3_asic_rev(tp) == ASIC_REV_5720) 12495 reset_phy = true; 12496 12497 err = tg3_restart_hw(tp, reset_phy); 12498 if (!err) 12499 tg3_netif_start(tp); 12500 } 12501 12502 tg3_full_unlock(tp); 12503 12504 if (irq_sync && !err) 12505 tg3_phy_start(tp); 12506 12507 return err; 12508} 12509 12510static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12511{ 12512 struct tg3 *tp = netdev_priv(dev); 12513 12514 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 12515 12516 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 12517 epause->rx_pause = 1; 12518 else 12519 epause->rx_pause = 0; 12520 12521 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 12522 epause->tx_pause = 1; 12523 else 12524 epause->tx_pause = 0; 12525} 12526 12527static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12528{ 12529 struct tg3 *tp = netdev_priv(dev); 12530 int err = 0; 12531 bool reset_phy = false; 12532 12533 if (tp->link_config.autoneg == AUTONEG_ENABLE) 12534 tg3_warn_mgmt_link_flap(tp); 12535 12536 if (tg3_flag(tp, USE_PHYLIB)) { 12537 struct phy_device *phydev; 12538 12539 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12540 12541 if (!phy_validate_pause(phydev, epause)) 12542 return -EINVAL; 12543 12544 tp->link_config.flowctrl = 0; 12545 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause); 12546 if (epause->rx_pause) { 12547 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12548 12549 if (epause->tx_pause) { 12550 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12551 } 12552 } else if (epause->tx_pause) { 12553 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12554 } 12555 12556 if (epause->autoneg) 12557 tg3_flag_set(tp, PAUSE_AUTONEG); 12558 else 12559 tg3_flag_clear(tp, PAUSE_AUTONEG); 12560 12561 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 12562 if (phydev->autoneg) { 12563 /* phy_set_asym_pause() will 12564 * renegotiate the link to inform our 12565 * link partner of our flow control 12566 * settings, even if the flow control 12567 * is forced. Let tg3_adjust_link() 12568 * do the final flow control setup. 12569 */ 12570 return 0; 12571 } 12572 12573 if (!epause->autoneg) 12574 tg3_setup_flow_control(tp, 0, 0); 12575 } 12576 } else { 12577 int irq_sync = 0; 12578 12579 if (netif_running(dev)) { 12580 tg3_netif_stop(tp); 12581 irq_sync = 1; 12582 } 12583 12584 tg3_full_lock(tp, irq_sync); 12585 12586 if (epause->autoneg) 12587 tg3_flag_set(tp, PAUSE_AUTONEG); 12588 else 12589 tg3_flag_clear(tp, PAUSE_AUTONEG); 12590 if (epause->rx_pause) 12591 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12592 else 12593 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 12594 if (epause->tx_pause) 12595 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12596 else 12597 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 12598 12599 if (netif_running(dev)) { 12600 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12601 /* Reset PHY to avoid PHY lock up */ 12602 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12603 tg3_asic_rev(tp) == ASIC_REV_5719 || 12604 tg3_asic_rev(tp) == ASIC_REV_5720) 12605 reset_phy = true; 12606 12607 err = tg3_restart_hw(tp, reset_phy); 12608 if (!err) 12609 tg3_netif_start(tp); 12610 } 12611 12612 tg3_full_unlock(tp); 12613 } 12614 12615 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12616 12617 return err; 12618} 12619 12620static int tg3_get_sset_count(struct net_device *dev, int sset) 12621{ 12622 switch (sset) { 12623 case ETH_SS_TEST: 12624 return TG3_NUM_TEST; 12625 case ETH_SS_STATS: 12626 return TG3_NUM_STATS; 12627 default: 12628 return -EOPNOTSUPP; 12629 } 12630} 12631 12632static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 12633 u32 *rules __always_unused) 12634{ 12635 struct tg3 *tp = netdev_priv(dev); 12636 12637 if (!tg3_flag(tp, SUPPORT_MSIX)) 12638 return -EOPNOTSUPP; 12639 12640 switch (info->cmd) { 12641 case ETHTOOL_GRXRINGS: 12642 if (netif_running(tp->dev)) 12643 info->data = tp->rxq_cnt; 12644 else { 12645 info->data = num_online_cpus(); 12646 if (info->data > TG3_RSS_MAX_NUM_QS) 12647 info->data = TG3_RSS_MAX_NUM_QS; 12648 } 12649 12650 return 0; 12651 12652 default: 12653 return -EOPNOTSUPP; 12654 } 12655} 12656 12657static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 12658{ 12659 u32 size = 0; 12660 struct tg3 *tp = netdev_priv(dev); 12661 12662 if (tg3_flag(tp, SUPPORT_MSIX)) 12663 size = TG3_RSS_INDIR_TBL_SIZE; 12664 12665 return size; 12666} 12667 12668static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc) 12669{ 12670 struct tg3 *tp = netdev_priv(dev); 12671 int i; 12672 12673 if (hfunc) 12674 *hfunc = ETH_RSS_HASH_TOP; 12675 if (!indir) 12676 return 0; 12677 12678 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12679 indir[i] = tp->rss_ind_tbl[i]; 12680 12681 return 0; 12682} 12683 12684static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, 12685 const u8 hfunc) 12686{ 12687 struct tg3 *tp = netdev_priv(dev); 12688 size_t i; 12689 12690 /* We require at least one supported parameter to be changed and no 12691 * change in any of the unsupported parameters 12692 */ 12693 if (key || 12694 (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)) 12695 return -EOPNOTSUPP; 12696 12697 if (!indir) 12698 return 0; 12699 12700 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12701 tp->rss_ind_tbl[i] = indir[i]; 12702 12703 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 12704 return 0; 12705 12706 /* It is legal to write the indirection 12707 * table while the device is running. 12708 */ 12709 tg3_full_lock(tp, 0); 12710 tg3_rss_write_indir_tbl(tp); 12711 tg3_full_unlock(tp); 12712 12713 return 0; 12714} 12715 12716static void tg3_get_channels(struct net_device *dev, 12717 struct ethtool_channels *channel) 12718{ 12719 struct tg3 *tp = netdev_priv(dev); 12720 u32 deflt_qs = netif_get_num_default_rss_queues(); 12721 12722 channel->max_rx = tp->rxq_max; 12723 channel->max_tx = tp->txq_max; 12724 12725 if (netif_running(dev)) { 12726 channel->rx_count = tp->rxq_cnt; 12727 channel->tx_count = tp->txq_cnt; 12728 } else { 12729 if (tp->rxq_req) 12730 channel->rx_count = tp->rxq_req; 12731 else 12732 channel->rx_count = min(deflt_qs, tp->rxq_max); 12733 12734 if (tp->txq_req) 12735 channel->tx_count = tp->txq_req; 12736 else 12737 channel->tx_count = min(deflt_qs, tp->txq_max); 12738 } 12739} 12740 12741static int tg3_set_channels(struct net_device *dev, 12742 struct ethtool_channels *channel) 12743{ 12744 struct tg3 *tp = netdev_priv(dev); 12745 12746 if (!tg3_flag(tp, SUPPORT_MSIX)) 12747 return -EOPNOTSUPP; 12748 12749 if (channel->rx_count > tp->rxq_max || 12750 channel->tx_count > tp->txq_max) 12751 return -EINVAL; 12752 12753 tp->rxq_req = channel->rx_count; 12754 tp->txq_req = channel->tx_count; 12755 12756 if (!netif_running(dev)) 12757 return 0; 12758 12759 tg3_stop(tp); 12760 12761 tg3_carrier_off(tp); 12762 12763 tg3_start(tp, true, false, false); 12764 12765 return 0; 12766} 12767 12768static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 12769{ 12770 switch (stringset) { 12771 case ETH_SS_STATS: 12772 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 12773 break; 12774 case ETH_SS_TEST: 12775 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 12776 break; 12777 default: 12778 WARN_ON(1); /* we need a WARN() */ 12779 break; 12780 } 12781} 12782 12783static int tg3_set_phys_id(struct net_device *dev, 12784 enum ethtool_phys_id_state state) 12785{ 12786 struct tg3 *tp = netdev_priv(dev); 12787 12788 switch (state) { 12789 case ETHTOOL_ID_ACTIVE: 12790 return 1; /* cycle on/off once per second */ 12791 12792 case ETHTOOL_ID_ON: 12793 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12794 LED_CTRL_1000MBPS_ON | 12795 LED_CTRL_100MBPS_ON | 12796 LED_CTRL_10MBPS_ON | 12797 LED_CTRL_TRAFFIC_OVERRIDE | 12798 LED_CTRL_TRAFFIC_BLINK | 12799 LED_CTRL_TRAFFIC_LED); 12800 break; 12801 12802 case ETHTOOL_ID_OFF: 12803 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12804 LED_CTRL_TRAFFIC_OVERRIDE); 12805 break; 12806 12807 case ETHTOOL_ID_INACTIVE: 12808 tw32(MAC_LED_CTRL, tp->led_ctrl); 12809 break; 12810 } 12811 12812 return 0; 12813} 12814 12815static void tg3_get_ethtool_stats(struct net_device *dev, 12816 struct ethtool_stats *estats, u64 *tmp_stats) 12817{ 12818 struct tg3 *tp = netdev_priv(dev); 12819 12820 if (tp->hw_stats) 12821 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 12822 else 12823 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 12824} 12825 12826static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen) 12827{ 12828 int i; 12829 __be32 *buf; 12830 u32 offset = 0, len = 0; 12831 u32 magic, val; 12832 12833 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 12834 return NULL; 12835 12836 if (magic == TG3_EEPROM_MAGIC) { 12837 for (offset = TG3_NVM_DIR_START; 12838 offset < TG3_NVM_DIR_END; 12839 offset += TG3_NVM_DIRENT_SIZE) { 12840 if (tg3_nvram_read(tp, offset, &val)) 12841 return NULL; 12842 12843 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 12844 TG3_NVM_DIRTYPE_EXTVPD) 12845 break; 12846 } 12847 12848 if (offset != TG3_NVM_DIR_END) { 12849 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 12850 if (tg3_nvram_read(tp, offset + 4, &offset)) 12851 return NULL; 12852 12853 offset = tg3_nvram_logical_addr(tp, offset); 12854 } 12855 12856 if (!offset || !len) { 12857 offset = TG3_NVM_VPD_OFF; 12858 len = TG3_NVM_VPD_LEN; 12859 } 12860 12861 buf = kmalloc(len, GFP_KERNEL); 12862 if (!buf) 12863 return NULL; 12864 12865 for (i = 0; i < len; i += 4) { 12866 /* The data is in little-endian format in NVRAM. 12867 * Use the big-endian read routines to preserve 12868 * the byte order as it exists in NVRAM. 12869 */ 12870 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 12871 goto error; 12872 } 12873 *vpdlen = len; 12874 } else { 12875 buf = pci_vpd_alloc(tp->pdev, vpdlen); 12876 if (IS_ERR(buf)) 12877 return NULL; 12878 } 12879 12880 return buf; 12881 12882error: 12883 kfree(buf); 12884 return NULL; 12885} 12886 12887#define NVRAM_TEST_SIZE 0x100 12888#define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 12889#define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 12890#define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 12891#define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 12892#define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 12893#define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 12894#define NVRAM_SELFBOOT_HW_SIZE 0x20 12895#define NVRAM_SELFBOOT_DATA_SIZE 0x1c 12896 12897static int tg3_test_nvram(struct tg3 *tp) 12898{ 12899 u32 csum, magic; 12900 __be32 *buf; 12901 int i, j, k, err = 0, size; 12902 unsigned int len; 12903 12904 if (tg3_flag(tp, NO_NVRAM)) 12905 return 0; 12906 12907 if (tg3_nvram_read(tp, 0, &magic) != 0) 12908 return -EIO; 12909 12910 if (magic == TG3_EEPROM_MAGIC) 12911 size = NVRAM_TEST_SIZE; 12912 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 12913 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 12914 TG3_EEPROM_SB_FORMAT_1) { 12915 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 12916 case TG3_EEPROM_SB_REVISION_0: 12917 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 12918 break; 12919 case TG3_EEPROM_SB_REVISION_2: 12920 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 12921 break; 12922 case TG3_EEPROM_SB_REVISION_3: 12923 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 12924 break; 12925 case TG3_EEPROM_SB_REVISION_4: 12926 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 12927 break; 12928 case TG3_EEPROM_SB_REVISION_5: 12929 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 12930 break; 12931 case TG3_EEPROM_SB_REVISION_6: 12932 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 12933 break; 12934 default: 12935 return -EIO; 12936 } 12937 } else 12938 return 0; 12939 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 12940 size = NVRAM_SELFBOOT_HW_SIZE; 12941 else 12942 return -EIO; 12943 12944 buf = kmalloc(size, GFP_KERNEL); 12945 if (buf == NULL) 12946 return -ENOMEM; 12947 12948 err = -EIO; 12949 for (i = 0, j = 0; i < size; i += 4, j++) { 12950 err = tg3_nvram_read_be32(tp, i, &buf[j]); 12951 if (err) 12952 break; 12953 } 12954 if (i < size) 12955 goto out; 12956 12957 /* Selfboot format */ 12958 magic = be32_to_cpu(buf[0]); 12959 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 12960 TG3_EEPROM_MAGIC_FW) { 12961 u8 *buf8 = (u8 *) buf, csum8 = 0; 12962 12963 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 12964 TG3_EEPROM_SB_REVISION_2) { 12965 /* For rev 2, the csum doesn't include the MBA. */ 12966 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 12967 csum8 += buf8[i]; 12968 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 12969 csum8 += buf8[i]; 12970 } else { 12971 for (i = 0; i < size; i++) 12972 csum8 += buf8[i]; 12973 } 12974 12975 if (csum8 == 0) { 12976 err = 0; 12977 goto out; 12978 } 12979 12980 err = -EIO; 12981 goto out; 12982 } 12983 12984 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 12985 TG3_EEPROM_MAGIC_HW) { 12986 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 12987 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 12988 u8 *buf8 = (u8 *) buf; 12989 12990 /* Separate the parity bits and the data bytes. */ 12991 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 12992 if ((i == 0) || (i == 8)) { 12993 int l; 12994 u8 msk; 12995 12996 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 12997 parity[k++] = buf8[i] & msk; 12998 i++; 12999 } else if (i == 16) { 13000 int l; 13001 u8 msk; 13002 13003 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 13004 parity[k++] = buf8[i] & msk; 13005 i++; 13006 13007 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 13008 parity[k++] = buf8[i] & msk; 13009 i++; 13010 } 13011 data[j++] = buf8[i]; 13012 } 13013 13014 err = -EIO; 13015 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 13016 u8 hw8 = hweight8(data[i]); 13017 13018 if ((hw8 & 0x1) && parity[i]) 13019 goto out; 13020 else if (!(hw8 & 0x1) && !parity[i]) 13021 goto out; 13022 } 13023 err = 0; 13024 goto out; 13025 } 13026 13027 err = -EIO; 13028 13029 /* Bootstrap checksum at offset 0x10 */ 13030 csum = calc_crc((unsigned char *) buf, 0x10); 13031 if (csum != le32_to_cpu(buf[0x10/4])) 13032 goto out; 13033 13034 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 13035 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 13036 if (csum != le32_to_cpu(buf[0xfc/4])) 13037 goto out; 13038 13039 kfree(buf); 13040 13041 buf = tg3_vpd_readblock(tp, &len); 13042 if (!buf) 13043 return -ENOMEM; 13044 13045 err = pci_vpd_check_csum(buf, len); 13046 /* go on if no checksum found */ 13047 if (err == 1) 13048 err = 0; 13049out: 13050 kfree(buf); 13051 return err; 13052} 13053 13054#define TG3_SERDES_TIMEOUT_SEC 2 13055#define TG3_COPPER_TIMEOUT_SEC 6 13056 13057static int tg3_test_link(struct tg3 *tp) 13058{ 13059 int i, max; 13060 13061 if (!netif_running(tp->dev)) 13062 return -ENODEV; 13063 13064 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 13065 max = TG3_SERDES_TIMEOUT_SEC; 13066 else 13067 max = TG3_COPPER_TIMEOUT_SEC; 13068 13069 for (i = 0; i < max; i++) { 13070 if (tp->link_up) 13071 return 0; 13072 13073 if (msleep_interruptible(1000)) 13074 break; 13075 } 13076 13077 return -EIO; 13078} 13079 13080/* Only test the commonly used registers */ 13081static int tg3_test_registers(struct tg3 *tp) 13082{ 13083 int i, is_5705, is_5750; 13084 u32 offset, read_mask, write_mask, val, save_val, read_val; 13085 static struct { 13086 u16 offset; 13087 u16 flags; 13088#define TG3_FL_5705 0x1 13089#define TG3_FL_NOT_5705 0x2 13090#define TG3_FL_NOT_5788 0x4 13091#define TG3_FL_NOT_5750 0x8 13092 u32 read_mask; 13093 u32 write_mask; 13094 } reg_tbl[] = { 13095 /* MAC Control Registers */ 13096 { MAC_MODE, TG3_FL_NOT_5705, 13097 0x00000000, 0x00ef6f8c }, 13098 { MAC_MODE, TG3_FL_5705, 13099 0x00000000, 0x01ef6b8c }, 13100 { MAC_STATUS, TG3_FL_NOT_5705, 13101 0x03800107, 0x00000000 }, 13102 { MAC_STATUS, TG3_FL_5705, 13103 0x03800100, 0x00000000 }, 13104 { MAC_ADDR_0_HIGH, 0x0000, 13105 0x00000000, 0x0000ffff }, 13106 { MAC_ADDR_0_LOW, 0x0000, 13107 0x00000000, 0xffffffff }, 13108 { MAC_RX_MTU_SIZE, 0x0000, 13109 0x00000000, 0x0000ffff }, 13110 { MAC_TX_MODE, 0x0000, 13111 0x00000000, 0x00000070 }, 13112 { MAC_TX_LENGTHS, 0x0000, 13113 0x00000000, 0x00003fff }, 13114 { MAC_RX_MODE, TG3_FL_NOT_5705, 13115 0x00000000, 0x000007fc }, 13116 { MAC_RX_MODE, TG3_FL_5705, 13117 0x00000000, 0x000007dc }, 13118 { MAC_HASH_REG_0, 0x0000, 13119 0x00000000, 0xffffffff }, 13120 { MAC_HASH_REG_1, 0x0000, 13121 0x00000000, 0xffffffff }, 13122 { MAC_HASH_REG_2, 0x0000, 13123 0x00000000, 0xffffffff }, 13124 { MAC_HASH_REG_3, 0x0000, 13125 0x00000000, 0xffffffff }, 13126 13127 /* Receive Data and Receive BD Initiator Control Registers. */ 13128 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 13129 0x00000000, 0xffffffff }, 13130 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 13131 0x00000000, 0xffffffff }, 13132 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 13133 0x00000000, 0x00000003 }, 13134 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 13135 0x00000000, 0xffffffff }, 13136 { RCVDBDI_STD_BD+0, 0x0000, 13137 0x00000000, 0xffffffff }, 13138 { RCVDBDI_STD_BD+4, 0x0000, 13139 0x00000000, 0xffffffff }, 13140 { RCVDBDI_STD_BD+8, 0x0000, 13141 0x00000000, 0xffff0002 }, 13142 { RCVDBDI_STD_BD+0xc, 0x0000, 13143 0x00000000, 0xffffffff }, 13144 13145 /* Receive BD Initiator Control Registers. */ 13146 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 13147 0x00000000, 0xffffffff }, 13148 { RCVBDI_STD_THRESH, TG3_FL_5705, 13149 0x00000000, 0x000003ff }, 13150 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 13151 0x00000000, 0xffffffff }, 13152 13153 /* Host Coalescing Control Registers. */ 13154 { HOSTCC_MODE, TG3_FL_NOT_5705, 13155 0x00000000, 0x00000004 }, 13156 { HOSTCC_MODE, TG3_FL_5705, 13157 0x00000000, 0x000000f6 }, 13158 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 13159 0x00000000, 0xffffffff }, 13160 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 13161 0x00000000, 0x000003ff }, 13162 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 13163 0x00000000, 0xffffffff }, 13164 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 13165 0x00000000, 0x000003ff }, 13166 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 13167 0x00000000, 0xffffffff }, 13168 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13169 0x00000000, 0x000000ff }, 13170 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 13171 0x00000000, 0xffffffff }, 13172 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13173 0x00000000, 0x000000ff }, 13174 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 13175 0x00000000, 0xffffffff }, 13176 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 13177 0x00000000, 0xffffffff }, 13178 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13179 0x00000000, 0xffffffff }, 13180 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13181 0x00000000, 0x000000ff }, 13182 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13183 0x00000000, 0xffffffff }, 13184 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13185 0x00000000, 0x000000ff }, 13186 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 13187 0x00000000, 0xffffffff }, 13188 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 13189 0x00000000, 0xffffffff }, 13190 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 13191 0x00000000, 0xffffffff }, 13192 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 13193 0x00000000, 0xffffffff }, 13194 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 13195 0x00000000, 0xffffffff }, 13196 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 13197 0xffffffff, 0x00000000 }, 13198 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 13199 0xffffffff, 0x00000000 }, 13200 13201 /* Buffer Manager Control Registers. */ 13202 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 13203 0x00000000, 0x007fff80 }, 13204 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 13205 0x00000000, 0x007fffff }, 13206 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 13207 0x00000000, 0x0000003f }, 13208 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 13209 0x00000000, 0x000001ff }, 13210 { BUFMGR_MB_HIGH_WATER, 0x0000, 13211 0x00000000, 0x000001ff }, 13212 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 13213 0xffffffff, 0x00000000 }, 13214 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 13215 0xffffffff, 0x00000000 }, 13216 13217 /* Mailbox Registers */ 13218 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 13219 0x00000000, 0x000001ff }, 13220 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 13221 0x00000000, 0x000001ff }, 13222 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 13223 0x00000000, 0x000007ff }, 13224 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 13225 0x00000000, 0x000001ff }, 13226 13227 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 13228 }; 13229 13230 is_5705 = is_5750 = 0; 13231 if (tg3_flag(tp, 5705_PLUS)) { 13232 is_5705 = 1; 13233 if (tg3_flag(tp, 5750_PLUS)) 13234 is_5750 = 1; 13235 } 13236 13237 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 13238 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 13239 continue; 13240 13241 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 13242 continue; 13243 13244 if (tg3_flag(tp, IS_5788) && 13245 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 13246 continue; 13247 13248 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 13249 continue; 13250 13251 offset = (u32) reg_tbl[i].offset; 13252 read_mask = reg_tbl[i].read_mask; 13253 write_mask = reg_tbl[i].write_mask; 13254 13255 /* Save the original register content */ 13256 save_val = tr32(offset); 13257 13258 /* Determine the read-only value. */ 13259 read_val = save_val & read_mask; 13260 13261 /* Write zero to the register, then make sure the read-only bits 13262 * are not changed and the read/write bits are all zeros. 13263 */ 13264 tw32(offset, 0); 13265 13266 val = tr32(offset); 13267 13268 /* Test the read-only and read/write bits. */ 13269 if (((val & read_mask) != read_val) || (val & write_mask)) 13270 goto out; 13271 13272 /* Write ones to all the bits defined by RdMask and WrMask, then 13273 * make sure the read-only bits are not changed and the 13274 * read/write bits are all ones. 13275 */ 13276 tw32(offset, read_mask | write_mask); 13277 13278 val = tr32(offset); 13279 13280 /* Test the read-only bits. */ 13281 if ((val & read_mask) != read_val) 13282 goto out; 13283 13284 /* Test the read/write bits. */ 13285 if ((val & write_mask) != write_mask) 13286 goto out; 13287 13288 tw32(offset, save_val); 13289 } 13290 13291 return 0; 13292 13293out: 13294 if (netif_msg_hw(tp)) 13295 netdev_err(tp->dev, 13296 "Register test failed at offset %x\n", offset); 13297 tw32(offset, save_val); 13298 return -EIO; 13299} 13300 13301static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 13302{ 13303 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 13304 int i; 13305 u32 j; 13306 13307 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 13308 for (j = 0; j < len; j += 4) { 13309 u32 val; 13310 13311 tg3_write_mem(tp, offset + j, test_pattern[i]); 13312 tg3_read_mem(tp, offset + j, &val); 13313 if (val != test_pattern[i]) 13314 return -EIO; 13315 } 13316 } 13317 return 0; 13318} 13319 13320static int tg3_test_memory(struct tg3 *tp) 13321{ 13322 static struct mem_entry { 13323 u32 offset; 13324 u32 len; 13325 } mem_tbl_570x[] = { 13326 { 0x00000000, 0x00b50}, 13327 { 0x00002000, 0x1c000}, 13328 { 0xffffffff, 0x00000} 13329 }, mem_tbl_5705[] = { 13330 { 0x00000100, 0x0000c}, 13331 { 0x00000200, 0x00008}, 13332 { 0x00004000, 0x00800}, 13333 { 0x00006000, 0x01000}, 13334 { 0x00008000, 0x02000}, 13335 { 0x00010000, 0x0e000}, 13336 { 0xffffffff, 0x00000} 13337 }, mem_tbl_5755[] = { 13338 { 0x00000200, 0x00008}, 13339 { 0x00004000, 0x00800}, 13340 { 0x00006000, 0x00800}, 13341 { 0x00008000, 0x02000}, 13342 { 0x00010000, 0x0c000}, 13343 { 0xffffffff, 0x00000} 13344 }, mem_tbl_5906[] = { 13345 { 0x00000200, 0x00008}, 13346 { 0x00004000, 0x00400}, 13347 { 0x00006000, 0x00400}, 13348 { 0x00008000, 0x01000}, 13349 { 0x00010000, 0x01000}, 13350 { 0xffffffff, 0x00000} 13351 }, mem_tbl_5717[] = { 13352 { 0x00000200, 0x00008}, 13353 { 0x00010000, 0x0a000}, 13354 { 0x00020000, 0x13c00}, 13355 { 0xffffffff, 0x00000} 13356 }, mem_tbl_57765[] = { 13357 { 0x00000200, 0x00008}, 13358 { 0x00004000, 0x00800}, 13359 { 0x00006000, 0x09800}, 13360 { 0x00010000, 0x0a000}, 13361 { 0xffffffff, 0x00000} 13362 }; 13363 struct mem_entry *mem_tbl; 13364 int err = 0; 13365 int i; 13366 13367 if (tg3_flag(tp, 5717_PLUS)) 13368 mem_tbl = mem_tbl_5717; 13369 else if (tg3_flag(tp, 57765_CLASS) || 13370 tg3_asic_rev(tp) == ASIC_REV_5762) 13371 mem_tbl = mem_tbl_57765; 13372 else if (tg3_flag(tp, 5755_PLUS)) 13373 mem_tbl = mem_tbl_5755; 13374 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 13375 mem_tbl = mem_tbl_5906; 13376 else if (tg3_flag(tp, 5705_PLUS)) 13377 mem_tbl = mem_tbl_5705; 13378 else 13379 mem_tbl = mem_tbl_570x; 13380 13381 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 13382 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 13383 if (err) 13384 break; 13385 } 13386 13387 return err; 13388} 13389 13390#define TG3_TSO_MSS 500 13391 13392#define TG3_TSO_IP_HDR_LEN 20 13393#define TG3_TSO_TCP_HDR_LEN 20 13394#define TG3_TSO_TCP_OPT_LEN 12 13395 13396static const u8 tg3_tso_header[] = { 133970x08, 0x00, 133980x45, 0x00, 0x00, 0x00, 133990x00, 0x00, 0x40, 0x00, 134000x40, 0x06, 0x00, 0x00, 134010x0a, 0x00, 0x00, 0x01, 134020x0a, 0x00, 0x00, 0x02, 134030x0d, 0x00, 0xe0, 0x00, 134040x00, 0x00, 0x01, 0x00, 134050x00, 0x00, 0x02, 0x00, 134060x80, 0x10, 0x10, 0x00, 134070x14, 0x09, 0x00, 0x00, 134080x01, 0x01, 0x08, 0x0a, 134090x11, 0x11, 0x11, 0x11, 134100x11, 0x11, 0x11, 0x11, 13411}; 13412 13413static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 13414{ 13415 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 13416 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 13417 u32 budget; 13418 struct sk_buff *skb; 13419 u8 *tx_data, *rx_data; 13420 dma_addr_t map; 13421 int num_pkts, tx_len, rx_len, i, err; 13422 struct tg3_rx_buffer_desc *desc; 13423 struct tg3_napi *tnapi, *rnapi; 13424 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 13425 13426 tnapi = &tp->napi[0]; 13427 rnapi = &tp->napi[0]; 13428 if (tp->irq_cnt > 1) { 13429 if (tg3_flag(tp, ENABLE_RSS)) 13430 rnapi = &tp->napi[1]; 13431 if (tg3_flag(tp, ENABLE_TSS)) 13432 tnapi = &tp->napi[1]; 13433 } 13434 coal_now = tnapi->coal_now | rnapi->coal_now; 13435 13436 err = -EIO; 13437 13438 tx_len = pktsz; 13439 skb = netdev_alloc_skb(tp->dev, tx_len); 13440 if (!skb) 13441 return -ENOMEM; 13442 13443 tx_data = skb_put(skb, tx_len); 13444 memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN); 13445 memset(tx_data + ETH_ALEN, 0x0, 8); 13446 13447 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 13448 13449 if (tso_loopback) { 13450 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 13451 13452 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 13453 TG3_TSO_TCP_OPT_LEN; 13454 13455 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 13456 sizeof(tg3_tso_header)); 13457 mss = TG3_TSO_MSS; 13458 13459 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 13460 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 13461 13462 /* Set the total length field in the IP header */ 13463 iph->tot_len = htons((u16)(mss + hdr_len)); 13464 13465 base_flags = (TXD_FLAG_CPU_PRE_DMA | 13466 TXD_FLAG_CPU_POST_DMA); 13467 13468 if (tg3_flag(tp, HW_TSO_1) || 13469 tg3_flag(tp, HW_TSO_2) || 13470 tg3_flag(tp, HW_TSO_3)) { 13471 struct tcphdr *th; 13472 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 13473 th = (struct tcphdr *)&tx_data[val]; 13474 th->check = 0; 13475 } else 13476 base_flags |= TXD_FLAG_TCPUDP_CSUM; 13477 13478 if (tg3_flag(tp, HW_TSO_3)) { 13479 mss |= (hdr_len & 0xc) << 12; 13480 if (hdr_len & 0x10) 13481 base_flags |= 0x00000010; 13482 base_flags |= (hdr_len & 0x3e0) << 5; 13483 } else if (tg3_flag(tp, HW_TSO_2)) 13484 mss |= hdr_len << 9; 13485 else if (tg3_flag(tp, HW_TSO_1) || 13486 tg3_asic_rev(tp) == ASIC_REV_5705) { 13487 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 13488 } else { 13489 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 13490 } 13491 13492 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 13493 } else { 13494 num_pkts = 1; 13495 data_off = ETH_HLEN; 13496 13497 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 13498 tx_len > VLAN_ETH_FRAME_LEN) 13499 base_flags |= TXD_FLAG_JMB_PKT; 13500 } 13501 13502 for (i = data_off; i < tx_len; i++) 13503 tx_data[i] = (u8) (i & 0xff); 13504 13505 map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE); 13506 if (dma_mapping_error(&tp->pdev->dev, map)) { 13507 dev_kfree_skb(skb); 13508 return -EIO; 13509 } 13510 13511 val = tnapi->tx_prod; 13512 tnapi->tx_buffers[val].skb = skb; 13513 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 13514 13515 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13516 rnapi->coal_now); 13517 13518 udelay(10); 13519 13520 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 13521 13522 budget = tg3_tx_avail(tnapi); 13523 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 13524 base_flags | TXD_FLAG_END, mss, 0)) { 13525 tnapi->tx_buffers[val].skb = NULL; 13526 dev_kfree_skb(skb); 13527 return -EIO; 13528 } 13529 13530 tnapi->tx_prod++; 13531 13532 /* Sync BD data before updating mailbox */ 13533 wmb(); 13534 13535 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 13536 tr32_mailbox(tnapi->prodmbox); 13537 13538 udelay(10); 13539 13540 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 13541 for (i = 0; i < 35; i++) { 13542 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13543 coal_now); 13544 13545 udelay(10); 13546 13547 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 13548 rx_idx = rnapi->hw_status->idx[0].rx_producer; 13549 if ((tx_idx == tnapi->tx_prod) && 13550 (rx_idx == (rx_start_idx + num_pkts))) 13551 break; 13552 } 13553 13554 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 13555 dev_kfree_skb(skb); 13556 13557 if (tx_idx != tnapi->tx_prod) 13558 goto out; 13559 13560 if (rx_idx != rx_start_idx + num_pkts) 13561 goto out; 13562 13563 val = data_off; 13564 while (rx_idx != rx_start_idx) { 13565 desc = &rnapi->rx_rcb[rx_start_idx++]; 13566 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 13567 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 13568 13569 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 13570 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 13571 goto out; 13572 13573 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 13574 - ETH_FCS_LEN; 13575 13576 if (!tso_loopback) { 13577 if (rx_len != tx_len) 13578 goto out; 13579 13580 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 13581 if (opaque_key != RXD_OPAQUE_RING_STD) 13582 goto out; 13583 } else { 13584 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 13585 goto out; 13586 } 13587 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 13588 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 13589 >> RXD_TCPCSUM_SHIFT != 0xffff) { 13590 goto out; 13591 } 13592 13593 if (opaque_key == RXD_OPAQUE_RING_STD) { 13594 rx_data = tpr->rx_std_buffers[desc_idx].data; 13595 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 13596 mapping); 13597 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 13598 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 13599 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 13600 mapping); 13601 } else 13602 goto out; 13603 13604 dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len, 13605 DMA_FROM_DEVICE); 13606 13607 rx_data += TG3_RX_OFFSET(tp); 13608 for (i = data_off; i < rx_len; i++, val++) { 13609 if (*(rx_data + i) != (u8) (val & 0xff)) 13610 goto out; 13611 } 13612 } 13613 13614 err = 0; 13615 13616 /* tg3_free_rings will unmap and free the rx_data */ 13617out: 13618 return err; 13619} 13620 13621#define TG3_STD_LOOPBACK_FAILED 1 13622#define TG3_JMB_LOOPBACK_FAILED 2 13623#define TG3_TSO_LOOPBACK_FAILED 4 13624#define TG3_LOOPBACK_FAILED \ 13625 (TG3_STD_LOOPBACK_FAILED | \ 13626 TG3_JMB_LOOPBACK_FAILED | \ 13627 TG3_TSO_LOOPBACK_FAILED) 13628 13629static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 13630{ 13631 int err = -EIO; 13632 u32 eee_cap; 13633 u32 jmb_pkt_sz = 9000; 13634 13635 if (tp->dma_limit) 13636 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 13637 13638 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 13639 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 13640 13641 if (!netif_running(tp->dev)) { 13642 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13643 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13644 if (do_extlpbk) 13645 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13646 goto done; 13647 } 13648 13649 err = tg3_reset_hw(tp, true); 13650 if (err) { 13651 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13652 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13653 if (do_extlpbk) 13654 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13655 goto done; 13656 } 13657 13658 if (tg3_flag(tp, ENABLE_RSS)) { 13659 int i; 13660 13661 /* Reroute all rx packets to the 1st queue */ 13662 for (i = MAC_RSS_INDIR_TBL_0; 13663 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 13664 tw32(i, 0x0); 13665 } 13666 13667 /* HW errata - mac loopback fails in some cases on 5780. 13668 * Normal traffic and PHY loopback are not affected by 13669 * errata. Also, the MAC loopback test is deprecated for 13670 * all newer ASIC revisions. 13671 */ 13672 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 13673 !tg3_flag(tp, CPMU_PRESENT)) { 13674 tg3_mac_loopback(tp, true); 13675 13676 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13677 data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13678 13679 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13680 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13681 data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13682 13683 tg3_mac_loopback(tp, false); 13684 } 13685 13686 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 13687 !tg3_flag(tp, USE_PHYLIB)) { 13688 int i; 13689 13690 tg3_phy_lpbk_set(tp, 0, false); 13691 13692 /* Wait for link */ 13693 for (i = 0; i < 100; i++) { 13694 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 13695 break; 13696 mdelay(1); 13697 } 13698 13699 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13700 data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13701 if (tg3_flag(tp, TSO_CAPABLE) && 13702 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13703 data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED; 13704 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13705 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13706 data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13707 13708 if (do_extlpbk) { 13709 tg3_phy_lpbk_set(tp, 0, true); 13710 13711 /* All link indications report up, but the hardware 13712 * isn't really ready for about 20 msec. Double it 13713 * to be sure. 13714 */ 13715 mdelay(40); 13716 13717 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13718 data[TG3_EXT_LOOPB_TEST] |= 13719 TG3_STD_LOOPBACK_FAILED; 13720 if (tg3_flag(tp, TSO_CAPABLE) && 13721 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13722 data[TG3_EXT_LOOPB_TEST] |= 13723 TG3_TSO_LOOPBACK_FAILED; 13724 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13725 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13726 data[TG3_EXT_LOOPB_TEST] |= 13727 TG3_JMB_LOOPBACK_FAILED; 13728 } 13729 13730 /* Re-enable gphy autopowerdown. */ 13731 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 13732 tg3_phy_toggle_apd(tp, true); 13733 } 13734 13735 err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] | 13736 data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0; 13737 13738done: 13739 tp->phy_flags |= eee_cap; 13740 13741 return err; 13742} 13743 13744static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 13745 u64 *data) 13746{ 13747 struct tg3 *tp = netdev_priv(dev); 13748 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 13749 13750 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 13751 if (tg3_power_up(tp)) { 13752 etest->flags |= ETH_TEST_FL_FAILED; 13753 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 13754 return; 13755 } 13756 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 13757 } 13758 13759 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 13760 13761 if (tg3_test_nvram(tp) != 0) { 13762 etest->flags |= ETH_TEST_FL_FAILED; 13763 data[TG3_NVRAM_TEST] = 1; 13764 } 13765 if (!doextlpbk && tg3_test_link(tp)) { 13766 etest->flags |= ETH_TEST_FL_FAILED; 13767 data[TG3_LINK_TEST] = 1; 13768 } 13769 if (etest->flags & ETH_TEST_FL_OFFLINE) { 13770 int err, err2 = 0, irq_sync = 0; 13771 13772 if (netif_running(dev)) { 13773 tg3_phy_stop(tp); 13774 tg3_netif_stop(tp); 13775 irq_sync = 1; 13776 } 13777 13778 tg3_full_lock(tp, irq_sync); 13779 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 13780 err = tg3_nvram_lock(tp); 13781 tg3_halt_cpu(tp, RX_CPU_BASE); 13782 if (!tg3_flag(tp, 5705_PLUS)) 13783 tg3_halt_cpu(tp, TX_CPU_BASE); 13784 if (!err) 13785 tg3_nvram_unlock(tp); 13786 13787 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 13788 tg3_phy_reset(tp); 13789 13790 if (tg3_test_registers(tp) != 0) { 13791 etest->flags |= ETH_TEST_FL_FAILED; 13792 data[TG3_REGISTER_TEST] = 1; 13793 } 13794 13795 if (tg3_test_memory(tp) != 0) { 13796 etest->flags |= ETH_TEST_FL_FAILED; 13797 data[TG3_MEMORY_TEST] = 1; 13798 } 13799 13800 if (doextlpbk) 13801 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 13802 13803 if (tg3_test_loopback(tp, data, doextlpbk)) 13804 etest->flags |= ETH_TEST_FL_FAILED; 13805 13806 tg3_full_unlock(tp); 13807 13808 if (tg3_test_interrupt(tp) != 0) { 13809 etest->flags |= ETH_TEST_FL_FAILED; 13810 data[TG3_INTERRUPT_TEST] = 1; 13811 } 13812 13813 tg3_full_lock(tp, 0); 13814 13815 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 13816 if (netif_running(dev)) { 13817 tg3_flag_set(tp, INIT_COMPLETE); 13818 err2 = tg3_restart_hw(tp, true); 13819 if (!err2) 13820 tg3_netif_start(tp); 13821 } 13822 13823 tg3_full_unlock(tp); 13824 13825 if (irq_sync && !err2) 13826 tg3_phy_start(tp); 13827 } 13828 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 13829 tg3_power_down_prepare(tp); 13830 13831} 13832 13833static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr) 13834{ 13835 struct tg3 *tp = netdev_priv(dev); 13836 struct hwtstamp_config stmpconf; 13837 13838 if (!tg3_flag(tp, PTP_CAPABLE)) 13839 return -EOPNOTSUPP; 13840 13841 if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) 13842 return -EFAULT; 13843 13844 if (stmpconf.tx_type != HWTSTAMP_TX_ON && 13845 stmpconf.tx_type != HWTSTAMP_TX_OFF) 13846 return -ERANGE; 13847 13848 switch (stmpconf.rx_filter) { 13849 case HWTSTAMP_FILTER_NONE: 13850 tp->rxptpctl = 0; 13851 break; 13852 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 13853 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13854 TG3_RX_PTP_CTL_ALL_V1_EVENTS; 13855 break; 13856 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 13857 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13858 TG3_RX_PTP_CTL_SYNC_EVNT; 13859 break; 13860 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 13861 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13862 TG3_RX_PTP_CTL_DELAY_REQ; 13863 break; 13864 case HWTSTAMP_FILTER_PTP_V2_EVENT: 13865 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13866 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13867 break; 13868 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 13869 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13870 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13871 break; 13872 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 13873 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13874 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13875 break; 13876 case HWTSTAMP_FILTER_PTP_V2_SYNC: 13877 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13878 TG3_RX_PTP_CTL_SYNC_EVNT; 13879 break; 13880 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 13881 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13882 TG3_RX_PTP_CTL_SYNC_EVNT; 13883 break; 13884 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 13885 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13886 TG3_RX_PTP_CTL_SYNC_EVNT; 13887 break; 13888 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 13889 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13890 TG3_RX_PTP_CTL_DELAY_REQ; 13891 break; 13892 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 13893 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13894 TG3_RX_PTP_CTL_DELAY_REQ; 13895 break; 13896 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 13897 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13898 TG3_RX_PTP_CTL_DELAY_REQ; 13899 break; 13900 default: 13901 return -ERANGE; 13902 } 13903 13904 if (netif_running(dev) && tp->rxptpctl) 13905 tw32(TG3_RX_PTP_CTL, 13906 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 13907 13908 if (stmpconf.tx_type == HWTSTAMP_TX_ON) 13909 tg3_flag_set(tp, TX_TSTAMP_EN); 13910 else 13911 tg3_flag_clear(tp, TX_TSTAMP_EN); 13912 13913 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13914 -EFAULT : 0; 13915} 13916 13917static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr) 13918{ 13919 struct tg3 *tp = netdev_priv(dev); 13920 struct hwtstamp_config stmpconf; 13921 13922 if (!tg3_flag(tp, PTP_CAPABLE)) 13923 return -EOPNOTSUPP; 13924 13925 stmpconf.flags = 0; 13926 stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ? 13927 HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF); 13928 13929 switch (tp->rxptpctl) { 13930 case 0: 13931 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE; 13932 break; 13933 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS: 13934 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 13935 break; 13936 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13937 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC; 13938 break; 13939 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13940 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ; 13941 break; 13942 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13943 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 13944 break; 13945 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13946 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT; 13947 break; 13948 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13949 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 13950 break; 13951 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13952 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC; 13953 break; 13954 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13955 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC; 13956 break; 13957 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13958 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC; 13959 break; 13960 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13961 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ; 13962 break; 13963 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13964 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ; 13965 break; 13966 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13967 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ; 13968 break; 13969 default: 13970 WARN_ON_ONCE(1); 13971 return -ERANGE; 13972 } 13973 13974 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13975 -EFAULT : 0; 13976} 13977 13978static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 13979{ 13980 struct mii_ioctl_data *data = if_mii(ifr); 13981 struct tg3 *tp = netdev_priv(dev); 13982 int err; 13983 13984 if (tg3_flag(tp, USE_PHYLIB)) { 13985 struct phy_device *phydev; 13986 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 13987 return -EAGAIN; 13988 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 13989 return phy_mii_ioctl(phydev, ifr, cmd); 13990 } 13991 13992 switch (cmd) { 13993 case SIOCGMIIPHY: 13994 data->phy_id = tp->phy_addr; 13995 13996 fallthrough; 13997 case SIOCGMIIREG: { 13998 u32 mii_regval; 13999 14000 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14001 break; /* We have no PHY */ 14002 14003 if (!netif_running(dev)) 14004 return -EAGAIN; 14005 14006 spin_lock_bh(&tp->lock); 14007 err = __tg3_readphy(tp, data->phy_id & 0x1f, 14008 data->reg_num & 0x1f, &mii_regval); 14009 spin_unlock_bh(&tp->lock); 14010 14011 data->val_out = mii_regval; 14012 14013 return err; 14014 } 14015 14016 case SIOCSMIIREG: 14017 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14018 break; /* We have no PHY */ 14019 14020 if (!netif_running(dev)) 14021 return -EAGAIN; 14022 14023 spin_lock_bh(&tp->lock); 14024 err = __tg3_writephy(tp, data->phy_id & 0x1f, 14025 data->reg_num & 0x1f, data->val_in); 14026 spin_unlock_bh(&tp->lock); 14027 14028 return err; 14029 14030 case SIOCSHWTSTAMP: 14031 return tg3_hwtstamp_set(dev, ifr); 14032 14033 case SIOCGHWTSTAMP: 14034 return tg3_hwtstamp_get(dev, ifr); 14035 14036 default: 14037 /* do nothing */ 14038 break; 14039 } 14040 return -EOPNOTSUPP; 14041} 14042 14043static int tg3_get_coalesce(struct net_device *dev, 14044 struct ethtool_coalesce *ec, 14045 struct kernel_ethtool_coalesce *kernel_coal, 14046 struct netlink_ext_ack *extack) 14047{ 14048 struct tg3 *tp = netdev_priv(dev); 14049 14050 memcpy(ec, &tp->coal, sizeof(*ec)); 14051 return 0; 14052} 14053 14054static int tg3_set_coalesce(struct net_device *dev, 14055 struct ethtool_coalesce *ec, 14056 struct kernel_ethtool_coalesce *kernel_coal, 14057 struct netlink_ext_ack *extack) 14058{ 14059 struct tg3 *tp = netdev_priv(dev); 14060 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 14061 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 14062 14063 if (!tg3_flag(tp, 5705_PLUS)) { 14064 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 14065 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 14066 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 14067 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 14068 } 14069 14070 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 14071 (!ec->rx_coalesce_usecs) || 14072 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 14073 (!ec->tx_coalesce_usecs) || 14074 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 14075 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 14076 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 14077 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 14078 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 14079 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 14080 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 14081 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 14082 return -EINVAL; 14083 14084 /* Only copy relevant parameters, ignore all others. */ 14085 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 14086 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 14087 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 14088 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 14089 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 14090 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 14091 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 14092 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 14093 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 14094 14095 if (netif_running(dev)) { 14096 tg3_full_lock(tp, 0); 14097 __tg3_set_coalesce(tp, &tp->coal); 14098 tg3_full_unlock(tp); 14099 } 14100 return 0; 14101} 14102 14103static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata) 14104{ 14105 struct tg3 *tp = netdev_priv(dev); 14106 14107 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14108 netdev_warn(tp->dev, "Board does not support EEE!\n"); 14109 return -EOPNOTSUPP; 14110 } 14111 14112 if (edata->advertised != tp->eee.advertised) { 14113 netdev_warn(tp->dev, 14114 "Direct manipulation of EEE advertisement is not supported\n"); 14115 return -EINVAL; 14116 } 14117 14118 if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) { 14119 netdev_warn(tp->dev, 14120 "Maximal Tx Lpi timer supported is %#x(u)\n", 14121 TG3_CPMU_DBTMR1_LNKIDLE_MAX); 14122 return -EINVAL; 14123 } 14124 14125 tp->eee = *edata; 14126 14127 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 14128 tg3_warn_mgmt_link_flap(tp); 14129 14130 if (netif_running(tp->dev)) { 14131 tg3_full_lock(tp, 0); 14132 tg3_setup_eee(tp); 14133 tg3_phy_reset(tp); 14134 tg3_full_unlock(tp); 14135 } 14136 14137 return 0; 14138} 14139 14140static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata) 14141{ 14142 struct tg3 *tp = netdev_priv(dev); 14143 14144 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14145 netdev_warn(tp->dev, 14146 "Board does not support EEE!\n"); 14147 return -EOPNOTSUPP; 14148 } 14149 14150 *edata = tp->eee; 14151 return 0; 14152} 14153 14154static const struct ethtool_ops tg3_ethtool_ops = { 14155 .supported_coalesce_params = ETHTOOL_COALESCE_USECS | 14156 ETHTOOL_COALESCE_MAX_FRAMES | 14157 ETHTOOL_COALESCE_USECS_IRQ | 14158 ETHTOOL_COALESCE_MAX_FRAMES_IRQ | 14159 ETHTOOL_COALESCE_STATS_BLOCK_USECS, 14160 .get_drvinfo = tg3_get_drvinfo, 14161 .get_regs_len = tg3_get_regs_len, 14162 .get_regs = tg3_get_regs, 14163 .get_wol = tg3_get_wol, 14164 .set_wol = tg3_set_wol, 14165 .get_msglevel = tg3_get_msglevel, 14166 .set_msglevel = tg3_set_msglevel, 14167 .nway_reset = tg3_nway_reset, 14168 .get_link = ethtool_op_get_link, 14169 .get_eeprom_len = tg3_get_eeprom_len, 14170 .get_eeprom = tg3_get_eeprom, 14171 .set_eeprom = tg3_set_eeprom, 14172 .get_ringparam = tg3_get_ringparam, 14173 .set_ringparam = tg3_set_ringparam, 14174 .get_pauseparam = tg3_get_pauseparam, 14175 .set_pauseparam = tg3_set_pauseparam, 14176 .self_test = tg3_self_test, 14177 .get_strings = tg3_get_strings, 14178 .set_phys_id = tg3_set_phys_id, 14179 .get_ethtool_stats = tg3_get_ethtool_stats, 14180 .get_coalesce = tg3_get_coalesce, 14181 .set_coalesce = tg3_set_coalesce, 14182 .get_sset_count = tg3_get_sset_count, 14183 .get_rxnfc = tg3_get_rxnfc, 14184 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 14185 .get_rxfh = tg3_get_rxfh, 14186 .set_rxfh = tg3_set_rxfh, 14187 .get_channels = tg3_get_channels, 14188 .set_channels = tg3_set_channels, 14189 .get_ts_info = tg3_get_ts_info, 14190 .get_eee = tg3_get_eee, 14191 .set_eee = tg3_set_eee, 14192 .get_link_ksettings = tg3_get_link_ksettings, 14193 .set_link_ksettings = tg3_set_link_ksettings, 14194}; 14195 14196static void tg3_get_stats64(struct net_device *dev, 14197 struct rtnl_link_stats64 *stats) 14198{ 14199 struct tg3 *tp = netdev_priv(dev); 14200 14201 spin_lock_bh(&tp->lock); 14202 if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) { 14203 *stats = tp->net_stats_prev; 14204 spin_unlock_bh(&tp->lock); 14205 return; 14206 } 14207 14208 tg3_get_nstats(tp, stats); 14209 spin_unlock_bh(&tp->lock); 14210} 14211 14212static void tg3_set_rx_mode(struct net_device *dev) 14213{ 14214 struct tg3 *tp = netdev_priv(dev); 14215 14216 if (!netif_running(dev)) 14217 return; 14218 14219 tg3_full_lock(tp, 0); 14220 __tg3_set_rx_mode(dev); 14221 tg3_full_unlock(tp); 14222} 14223 14224static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 14225 int new_mtu) 14226{ 14227 dev->mtu = new_mtu; 14228 14229 if (new_mtu > ETH_DATA_LEN) { 14230 if (tg3_flag(tp, 5780_CLASS)) { 14231 netdev_update_features(dev); 14232 tg3_flag_clear(tp, TSO_CAPABLE); 14233 } else { 14234 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14235 } 14236 } else { 14237 if (tg3_flag(tp, 5780_CLASS)) { 14238 tg3_flag_set(tp, TSO_CAPABLE); 14239 netdev_update_features(dev); 14240 } 14241 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 14242 } 14243} 14244 14245static int tg3_change_mtu(struct net_device *dev, int new_mtu) 14246{ 14247 struct tg3 *tp = netdev_priv(dev); 14248 int err; 14249 bool reset_phy = false; 14250 14251 if (!netif_running(dev)) { 14252 /* We'll just catch it later when the 14253 * device is up'd. 14254 */ 14255 tg3_set_mtu(dev, tp, new_mtu); 14256 return 0; 14257 } 14258 14259 tg3_phy_stop(tp); 14260 14261 tg3_netif_stop(tp); 14262 14263 tg3_set_mtu(dev, tp, new_mtu); 14264 14265 tg3_full_lock(tp, 1); 14266 14267 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 14268 14269 /* Reset PHY, otherwise the read DMA engine will be in a mode that 14270 * breaks all requests to 256 bytes. 14271 */ 14272 if (tg3_asic_rev(tp) == ASIC_REV_57766 || 14273 tg3_asic_rev(tp) == ASIC_REV_5717 || 14274 tg3_asic_rev(tp) == ASIC_REV_5719 || 14275 tg3_asic_rev(tp) == ASIC_REV_5720) 14276 reset_phy = true; 14277 14278 err = tg3_restart_hw(tp, reset_phy); 14279 14280 if (!err) 14281 tg3_netif_start(tp); 14282 14283 tg3_full_unlock(tp); 14284 14285 if (!err) 14286 tg3_phy_start(tp); 14287 14288 return err; 14289} 14290 14291static const struct net_device_ops tg3_netdev_ops = { 14292 .ndo_open = tg3_open, 14293 .ndo_stop = tg3_close, 14294 .ndo_start_xmit = tg3_start_xmit, 14295 .ndo_get_stats64 = tg3_get_stats64, 14296 .ndo_validate_addr = eth_validate_addr, 14297 .ndo_set_rx_mode = tg3_set_rx_mode, 14298 .ndo_set_mac_address = tg3_set_mac_addr, 14299 .ndo_eth_ioctl = tg3_ioctl, 14300 .ndo_tx_timeout = tg3_tx_timeout, 14301 .ndo_change_mtu = tg3_change_mtu, 14302 .ndo_fix_features = tg3_fix_features, 14303 .ndo_set_features = tg3_set_features, 14304#ifdef CONFIG_NET_POLL_CONTROLLER 14305 .ndo_poll_controller = tg3_poll_controller, 14306#endif 14307}; 14308 14309static void tg3_get_eeprom_size(struct tg3 *tp) 14310{ 14311 u32 cursize, val, magic; 14312 14313 tp->nvram_size = EEPROM_CHIP_SIZE; 14314 14315 if (tg3_nvram_read(tp, 0, &magic) != 0) 14316 return; 14317 14318 if ((magic != TG3_EEPROM_MAGIC) && 14319 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 14320 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 14321 return; 14322 14323 /* 14324 * Size the chip by reading offsets at increasing powers of two. 14325 * When we encounter our validation signature, we know the addressing 14326 * has wrapped around, and thus have our chip size. 14327 */ 14328 cursize = 0x10; 14329 14330 while (cursize < tp->nvram_size) { 14331 if (tg3_nvram_read(tp, cursize, &val) != 0) 14332 return; 14333 14334 if (val == magic) 14335 break; 14336 14337 cursize <<= 1; 14338 } 14339 14340 tp->nvram_size = cursize; 14341} 14342 14343static void tg3_get_nvram_size(struct tg3 *tp) 14344{ 14345 u32 val; 14346 14347 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 14348 return; 14349 14350 /* Selfboot format */ 14351 if (val != TG3_EEPROM_MAGIC) { 14352 tg3_get_eeprom_size(tp); 14353 return; 14354 } 14355 14356 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 14357 if (val != 0) { 14358 /* This is confusing. We want to operate on the 14359 * 16-bit value at offset 0xf2. The tg3_nvram_read() 14360 * call will read from NVRAM and byteswap the data 14361 * according to the byteswapping settings for all 14362 * other register accesses. This ensures the data we 14363 * want will always reside in the lower 16-bits. 14364 * However, the data in NVRAM is in LE format, which 14365 * means the data from the NVRAM read will always be 14366 * opposite the endianness of the CPU. The 16-bit 14367 * byteswap then brings the data to CPU endianness. 14368 */ 14369 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 14370 return; 14371 } 14372 } 14373 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14374} 14375 14376static void tg3_get_nvram_info(struct tg3 *tp) 14377{ 14378 u32 nvcfg1; 14379 14380 nvcfg1 = tr32(NVRAM_CFG1); 14381 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 14382 tg3_flag_set(tp, FLASH); 14383 } else { 14384 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14385 tw32(NVRAM_CFG1, nvcfg1); 14386 } 14387 14388 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 14389 tg3_flag(tp, 5780_CLASS)) { 14390 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 14391 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 14392 tp->nvram_jedecnum = JEDEC_ATMEL; 14393 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14394 tg3_flag_set(tp, NVRAM_BUFFERED); 14395 break; 14396 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 14397 tp->nvram_jedecnum = JEDEC_ATMEL; 14398 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 14399 break; 14400 case FLASH_VENDOR_ATMEL_EEPROM: 14401 tp->nvram_jedecnum = JEDEC_ATMEL; 14402 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14403 tg3_flag_set(tp, NVRAM_BUFFERED); 14404 break; 14405 case FLASH_VENDOR_ST: 14406 tp->nvram_jedecnum = JEDEC_ST; 14407 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 14408 tg3_flag_set(tp, NVRAM_BUFFERED); 14409 break; 14410 case FLASH_VENDOR_SAIFUN: 14411 tp->nvram_jedecnum = JEDEC_SAIFUN; 14412 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 14413 break; 14414 case FLASH_VENDOR_SST_SMALL: 14415 case FLASH_VENDOR_SST_LARGE: 14416 tp->nvram_jedecnum = JEDEC_SST; 14417 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 14418 break; 14419 } 14420 } else { 14421 tp->nvram_jedecnum = JEDEC_ATMEL; 14422 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14423 tg3_flag_set(tp, NVRAM_BUFFERED); 14424 } 14425} 14426 14427static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 14428{ 14429 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 14430 case FLASH_5752PAGE_SIZE_256: 14431 tp->nvram_pagesize = 256; 14432 break; 14433 case FLASH_5752PAGE_SIZE_512: 14434 tp->nvram_pagesize = 512; 14435 break; 14436 case FLASH_5752PAGE_SIZE_1K: 14437 tp->nvram_pagesize = 1024; 14438 break; 14439 case FLASH_5752PAGE_SIZE_2K: 14440 tp->nvram_pagesize = 2048; 14441 break; 14442 case FLASH_5752PAGE_SIZE_4K: 14443 tp->nvram_pagesize = 4096; 14444 break; 14445 case FLASH_5752PAGE_SIZE_264: 14446 tp->nvram_pagesize = 264; 14447 break; 14448 case FLASH_5752PAGE_SIZE_528: 14449 tp->nvram_pagesize = 528; 14450 break; 14451 } 14452} 14453 14454static void tg3_get_5752_nvram_info(struct tg3 *tp) 14455{ 14456 u32 nvcfg1; 14457 14458 nvcfg1 = tr32(NVRAM_CFG1); 14459 14460 /* NVRAM protection for TPM */ 14461 if (nvcfg1 & (1 << 27)) 14462 tg3_flag_set(tp, PROTECTED_NVRAM); 14463 14464 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14465 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 14466 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 14467 tp->nvram_jedecnum = JEDEC_ATMEL; 14468 tg3_flag_set(tp, NVRAM_BUFFERED); 14469 break; 14470 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14471 tp->nvram_jedecnum = JEDEC_ATMEL; 14472 tg3_flag_set(tp, NVRAM_BUFFERED); 14473 tg3_flag_set(tp, FLASH); 14474 break; 14475 case FLASH_5752VENDOR_ST_M45PE10: 14476 case FLASH_5752VENDOR_ST_M45PE20: 14477 case FLASH_5752VENDOR_ST_M45PE40: 14478 tp->nvram_jedecnum = JEDEC_ST; 14479 tg3_flag_set(tp, NVRAM_BUFFERED); 14480 tg3_flag_set(tp, FLASH); 14481 break; 14482 } 14483 14484 if (tg3_flag(tp, FLASH)) { 14485 tg3_nvram_get_pagesize(tp, nvcfg1); 14486 } else { 14487 /* For eeprom, set pagesize to maximum eeprom size */ 14488 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14489 14490 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14491 tw32(NVRAM_CFG1, nvcfg1); 14492 } 14493} 14494 14495static void tg3_get_5755_nvram_info(struct tg3 *tp) 14496{ 14497 u32 nvcfg1, protect = 0; 14498 14499 nvcfg1 = tr32(NVRAM_CFG1); 14500 14501 /* NVRAM protection for TPM */ 14502 if (nvcfg1 & (1 << 27)) { 14503 tg3_flag_set(tp, PROTECTED_NVRAM); 14504 protect = 1; 14505 } 14506 14507 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14508 switch (nvcfg1) { 14509 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14510 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14511 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14512 case FLASH_5755VENDOR_ATMEL_FLASH_5: 14513 tp->nvram_jedecnum = JEDEC_ATMEL; 14514 tg3_flag_set(tp, NVRAM_BUFFERED); 14515 tg3_flag_set(tp, FLASH); 14516 tp->nvram_pagesize = 264; 14517 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 14518 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 14519 tp->nvram_size = (protect ? 0x3e200 : 14520 TG3_NVRAM_SIZE_512KB); 14521 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 14522 tp->nvram_size = (protect ? 0x1f200 : 14523 TG3_NVRAM_SIZE_256KB); 14524 else 14525 tp->nvram_size = (protect ? 0x1f200 : 14526 TG3_NVRAM_SIZE_128KB); 14527 break; 14528 case FLASH_5752VENDOR_ST_M45PE10: 14529 case FLASH_5752VENDOR_ST_M45PE20: 14530 case FLASH_5752VENDOR_ST_M45PE40: 14531 tp->nvram_jedecnum = JEDEC_ST; 14532 tg3_flag_set(tp, NVRAM_BUFFERED); 14533 tg3_flag_set(tp, FLASH); 14534 tp->nvram_pagesize = 256; 14535 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 14536 tp->nvram_size = (protect ? 14537 TG3_NVRAM_SIZE_64KB : 14538 TG3_NVRAM_SIZE_128KB); 14539 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 14540 tp->nvram_size = (protect ? 14541 TG3_NVRAM_SIZE_64KB : 14542 TG3_NVRAM_SIZE_256KB); 14543 else 14544 tp->nvram_size = (protect ? 14545 TG3_NVRAM_SIZE_128KB : 14546 TG3_NVRAM_SIZE_512KB); 14547 break; 14548 } 14549} 14550 14551static void tg3_get_5787_nvram_info(struct tg3 *tp) 14552{ 14553 u32 nvcfg1; 14554 14555 nvcfg1 = tr32(NVRAM_CFG1); 14556 14557 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14558 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 14559 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14560 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 14561 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14562 tp->nvram_jedecnum = JEDEC_ATMEL; 14563 tg3_flag_set(tp, NVRAM_BUFFERED); 14564 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14565 14566 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14567 tw32(NVRAM_CFG1, nvcfg1); 14568 break; 14569 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14570 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14571 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14572 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14573 tp->nvram_jedecnum = JEDEC_ATMEL; 14574 tg3_flag_set(tp, NVRAM_BUFFERED); 14575 tg3_flag_set(tp, FLASH); 14576 tp->nvram_pagesize = 264; 14577 break; 14578 case FLASH_5752VENDOR_ST_M45PE10: 14579 case FLASH_5752VENDOR_ST_M45PE20: 14580 case FLASH_5752VENDOR_ST_M45PE40: 14581 tp->nvram_jedecnum = JEDEC_ST; 14582 tg3_flag_set(tp, NVRAM_BUFFERED); 14583 tg3_flag_set(tp, FLASH); 14584 tp->nvram_pagesize = 256; 14585 break; 14586 } 14587} 14588 14589static void tg3_get_5761_nvram_info(struct tg3 *tp) 14590{ 14591 u32 nvcfg1, protect = 0; 14592 14593 nvcfg1 = tr32(NVRAM_CFG1); 14594 14595 /* NVRAM protection for TPM */ 14596 if (nvcfg1 & (1 << 27)) { 14597 tg3_flag_set(tp, PROTECTED_NVRAM); 14598 protect = 1; 14599 } 14600 14601 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14602 switch (nvcfg1) { 14603 case FLASH_5761VENDOR_ATMEL_ADB021D: 14604 case FLASH_5761VENDOR_ATMEL_ADB041D: 14605 case FLASH_5761VENDOR_ATMEL_ADB081D: 14606 case FLASH_5761VENDOR_ATMEL_ADB161D: 14607 case FLASH_5761VENDOR_ATMEL_MDB021D: 14608 case FLASH_5761VENDOR_ATMEL_MDB041D: 14609 case FLASH_5761VENDOR_ATMEL_MDB081D: 14610 case FLASH_5761VENDOR_ATMEL_MDB161D: 14611 tp->nvram_jedecnum = JEDEC_ATMEL; 14612 tg3_flag_set(tp, NVRAM_BUFFERED); 14613 tg3_flag_set(tp, FLASH); 14614 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14615 tp->nvram_pagesize = 256; 14616 break; 14617 case FLASH_5761VENDOR_ST_A_M45PE20: 14618 case FLASH_5761VENDOR_ST_A_M45PE40: 14619 case FLASH_5761VENDOR_ST_A_M45PE80: 14620 case FLASH_5761VENDOR_ST_A_M45PE16: 14621 case FLASH_5761VENDOR_ST_M_M45PE20: 14622 case FLASH_5761VENDOR_ST_M_M45PE40: 14623 case FLASH_5761VENDOR_ST_M_M45PE80: 14624 case FLASH_5761VENDOR_ST_M_M45PE16: 14625 tp->nvram_jedecnum = JEDEC_ST; 14626 tg3_flag_set(tp, NVRAM_BUFFERED); 14627 tg3_flag_set(tp, FLASH); 14628 tp->nvram_pagesize = 256; 14629 break; 14630 } 14631 14632 if (protect) { 14633 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 14634 } else { 14635 switch (nvcfg1) { 14636 case FLASH_5761VENDOR_ATMEL_ADB161D: 14637 case FLASH_5761VENDOR_ATMEL_MDB161D: 14638 case FLASH_5761VENDOR_ST_A_M45PE16: 14639 case FLASH_5761VENDOR_ST_M_M45PE16: 14640 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 14641 break; 14642 case FLASH_5761VENDOR_ATMEL_ADB081D: 14643 case FLASH_5761VENDOR_ATMEL_MDB081D: 14644 case FLASH_5761VENDOR_ST_A_M45PE80: 14645 case FLASH_5761VENDOR_ST_M_M45PE80: 14646 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14647 break; 14648 case FLASH_5761VENDOR_ATMEL_ADB041D: 14649 case FLASH_5761VENDOR_ATMEL_MDB041D: 14650 case FLASH_5761VENDOR_ST_A_M45PE40: 14651 case FLASH_5761VENDOR_ST_M_M45PE40: 14652 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14653 break; 14654 case FLASH_5761VENDOR_ATMEL_ADB021D: 14655 case FLASH_5761VENDOR_ATMEL_MDB021D: 14656 case FLASH_5761VENDOR_ST_A_M45PE20: 14657 case FLASH_5761VENDOR_ST_M_M45PE20: 14658 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14659 break; 14660 } 14661 } 14662} 14663 14664static void tg3_get_5906_nvram_info(struct tg3 *tp) 14665{ 14666 tp->nvram_jedecnum = JEDEC_ATMEL; 14667 tg3_flag_set(tp, NVRAM_BUFFERED); 14668 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14669} 14670 14671static void tg3_get_57780_nvram_info(struct tg3 *tp) 14672{ 14673 u32 nvcfg1; 14674 14675 nvcfg1 = tr32(NVRAM_CFG1); 14676 14677 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14678 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14679 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14680 tp->nvram_jedecnum = JEDEC_ATMEL; 14681 tg3_flag_set(tp, NVRAM_BUFFERED); 14682 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14683 14684 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14685 tw32(NVRAM_CFG1, nvcfg1); 14686 return; 14687 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14688 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14689 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14690 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14691 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14692 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14693 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14694 tp->nvram_jedecnum = JEDEC_ATMEL; 14695 tg3_flag_set(tp, NVRAM_BUFFERED); 14696 tg3_flag_set(tp, FLASH); 14697 14698 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14699 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14700 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14701 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14702 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14703 break; 14704 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14705 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14706 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14707 break; 14708 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14709 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14710 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14711 break; 14712 } 14713 break; 14714 case FLASH_5752VENDOR_ST_M45PE10: 14715 case FLASH_5752VENDOR_ST_M45PE20: 14716 case FLASH_5752VENDOR_ST_M45PE40: 14717 tp->nvram_jedecnum = JEDEC_ST; 14718 tg3_flag_set(tp, NVRAM_BUFFERED); 14719 tg3_flag_set(tp, FLASH); 14720 14721 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14722 case FLASH_5752VENDOR_ST_M45PE10: 14723 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14724 break; 14725 case FLASH_5752VENDOR_ST_M45PE20: 14726 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14727 break; 14728 case FLASH_5752VENDOR_ST_M45PE40: 14729 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14730 break; 14731 } 14732 break; 14733 default: 14734 tg3_flag_set(tp, NO_NVRAM); 14735 return; 14736 } 14737 14738 tg3_nvram_get_pagesize(tp, nvcfg1); 14739 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14740 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14741} 14742 14743 14744static void tg3_get_5717_nvram_info(struct tg3 *tp) 14745{ 14746 u32 nvcfg1; 14747 14748 nvcfg1 = tr32(NVRAM_CFG1); 14749 14750 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14751 case FLASH_5717VENDOR_ATMEL_EEPROM: 14752 case FLASH_5717VENDOR_MICRO_EEPROM: 14753 tp->nvram_jedecnum = JEDEC_ATMEL; 14754 tg3_flag_set(tp, NVRAM_BUFFERED); 14755 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14756 14757 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14758 tw32(NVRAM_CFG1, nvcfg1); 14759 return; 14760 case FLASH_5717VENDOR_ATMEL_MDB011D: 14761 case FLASH_5717VENDOR_ATMEL_ADB011B: 14762 case FLASH_5717VENDOR_ATMEL_ADB011D: 14763 case FLASH_5717VENDOR_ATMEL_MDB021D: 14764 case FLASH_5717VENDOR_ATMEL_ADB021B: 14765 case FLASH_5717VENDOR_ATMEL_ADB021D: 14766 case FLASH_5717VENDOR_ATMEL_45USPT: 14767 tp->nvram_jedecnum = JEDEC_ATMEL; 14768 tg3_flag_set(tp, NVRAM_BUFFERED); 14769 tg3_flag_set(tp, FLASH); 14770 14771 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14772 case FLASH_5717VENDOR_ATMEL_MDB021D: 14773 /* Detect size with tg3_nvram_get_size() */ 14774 break; 14775 case FLASH_5717VENDOR_ATMEL_ADB021B: 14776 case FLASH_5717VENDOR_ATMEL_ADB021D: 14777 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14778 break; 14779 default: 14780 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14781 break; 14782 } 14783 break; 14784 case FLASH_5717VENDOR_ST_M_M25PE10: 14785 case FLASH_5717VENDOR_ST_A_M25PE10: 14786 case FLASH_5717VENDOR_ST_M_M45PE10: 14787 case FLASH_5717VENDOR_ST_A_M45PE10: 14788 case FLASH_5717VENDOR_ST_M_M25PE20: 14789 case FLASH_5717VENDOR_ST_A_M25PE20: 14790 case FLASH_5717VENDOR_ST_M_M45PE20: 14791 case FLASH_5717VENDOR_ST_A_M45PE20: 14792 case FLASH_5717VENDOR_ST_25USPT: 14793 case FLASH_5717VENDOR_ST_45USPT: 14794 tp->nvram_jedecnum = JEDEC_ST; 14795 tg3_flag_set(tp, NVRAM_BUFFERED); 14796 tg3_flag_set(tp, FLASH); 14797 14798 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14799 case FLASH_5717VENDOR_ST_M_M25PE20: 14800 case FLASH_5717VENDOR_ST_M_M45PE20: 14801 /* Detect size with tg3_nvram_get_size() */ 14802 break; 14803 case FLASH_5717VENDOR_ST_A_M25PE20: 14804 case FLASH_5717VENDOR_ST_A_M45PE20: 14805 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14806 break; 14807 default: 14808 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14809 break; 14810 } 14811 break; 14812 default: 14813 tg3_flag_set(tp, NO_NVRAM); 14814 return; 14815 } 14816 14817 tg3_nvram_get_pagesize(tp, nvcfg1); 14818 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14819 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14820} 14821 14822static void tg3_get_5720_nvram_info(struct tg3 *tp) 14823{ 14824 u32 nvcfg1, nvmpinstrp, nv_status; 14825 14826 nvcfg1 = tr32(NVRAM_CFG1); 14827 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 14828 14829 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14830 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) { 14831 tg3_flag_set(tp, NO_NVRAM); 14832 return; 14833 } 14834 14835 switch (nvmpinstrp) { 14836 case FLASH_5762_MX25L_100: 14837 case FLASH_5762_MX25L_200: 14838 case FLASH_5762_MX25L_400: 14839 case FLASH_5762_MX25L_800: 14840 case FLASH_5762_MX25L_160_320: 14841 tp->nvram_pagesize = 4096; 14842 tp->nvram_jedecnum = JEDEC_MACRONIX; 14843 tg3_flag_set(tp, NVRAM_BUFFERED); 14844 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14845 tg3_flag_set(tp, FLASH); 14846 nv_status = tr32(NVRAM_AUTOSENSE_STATUS); 14847 tp->nvram_size = 14848 (1 << (nv_status >> AUTOSENSE_DEVID & 14849 AUTOSENSE_DEVID_MASK) 14850 << AUTOSENSE_SIZE_IN_MB); 14851 return; 14852 14853 case FLASH_5762_EEPROM_HD: 14854 nvmpinstrp = FLASH_5720_EEPROM_HD; 14855 break; 14856 case FLASH_5762_EEPROM_LD: 14857 nvmpinstrp = FLASH_5720_EEPROM_LD; 14858 break; 14859 case FLASH_5720VENDOR_M_ST_M45PE20: 14860 /* This pinstrap supports multiple sizes, so force it 14861 * to read the actual size from location 0xf0. 14862 */ 14863 nvmpinstrp = FLASH_5720VENDOR_ST_45USPT; 14864 break; 14865 } 14866 } 14867 14868 switch (nvmpinstrp) { 14869 case FLASH_5720_EEPROM_HD: 14870 case FLASH_5720_EEPROM_LD: 14871 tp->nvram_jedecnum = JEDEC_ATMEL; 14872 tg3_flag_set(tp, NVRAM_BUFFERED); 14873 14874 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14875 tw32(NVRAM_CFG1, nvcfg1); 14876 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 14877 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14878 else 14879 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 14880 return; 14881 case FLASH_5720VENDOR_M_ATMEL_DB011D: 14882 case FLASH_5720VENDOR_A_ATMEL_DB011B: 14883 case FLASH_5720VENDOR_A_ATMEL_DB011D: 14884 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14885 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14886 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14887 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14888 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14889 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14890 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14891 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14892 case FLASH_5720VENDOR_ATMEL_45USPT: 14893 tp->nvram_jedecnum = JEDEC_ATMEL; 14894 tg3_flag_set(tp, NVRAM_BUFFERED); 14895 tg3_flag_set(tp, FLASH); 14896 14897 switch (nvmpinstrp) { 14898 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14899 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14900 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14901 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14902 break; 14903 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14904 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14905 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14906 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14907 break; 14908 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14909 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14910 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14911 break; 14912 default: 14913 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14914 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14915 break; 14916 } 14917 break; 14918 case FLASH_5720VENDOR_M_ST_M25PE10: 14919 case FLASH_5720VENDOR_M_ST_M45PE10: 14920 case FLASH_5720VENDOR_A_ST_M25PE10: 14921 case FLASH_5720VENDOR_A_ST_M45PE10: 14922 case FLASH_5720VENDOR_M_ST_M25PE20: 14923 case FLASH_5720VENDOR_M_ST_M45PE20: 14924 case FLASH_5720VENDOR_A_ST_M25PE20: 14925 case FLASH_5720VENDOR_A_ST_M45PE20: 14926 case FLASH_5720VENDOR_M_ST_M25PE40: 14927 case FLASH_5720VENDOR_M_ST_M45PE40: 14928 case FLASH_5720VENDOR_A_ST_M25PE40: 14929 case FLASH_5720VENDOR_A_ST_M45PE40: 14930 case FLASH_5720VENDOR_M_ST_M25PE80: 14931 case FLASH_5720VENDOR_M_ST_M45PE80: 14932 case FLASH_5720VENDOR_A_ST_M25PE80: 14933 case FLASH_5720VENDOR_A_ST_M45PE80: 14934 case FLASH_5720VENDOR_ST_25USPT: 14935 case FLASH_5720VENDOR_ST_45USPT: 14936 tp->nvram_jedecnum = JEDEC_ST; 14937 tg3_flag_set(tp, NVRAM_BUFFERED); 14938 tg3_flag_set(tp, FLASH); 14939 14940 switch (nvmpinstrp) { 14941 case FLASH_5720VENDOR_M_ST_M25PE20: 14942 case FLASH_5720VENDOR_M_ST_M45PE20: 14943 case FLASH_5720VENDOR_A_ST_M25PE20: 14944 case FLASH_5720VENDOR_A_ST_M45PE20: 14945 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14946 break; 14947 case FLASH_5720VENDOR_M_ST_M25PE40: 14948 case FLASH_5720VENDOR_M_ST_M45PE40: 14949 case FLASH_5720VENDOR_A_ST_M25PE40: 14950 case FLASH_5720VENDOR_A_ST_M45PE40: 14951 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14952 break; 14953 case FLASH_5720VENDOR_M_ST_M25PE80: 14954 case FLASH_5720VENDOR_M_ST_M45PE80: 14955 case FLASH_5720VENDOR_A_ST_M25PE80: 14956 case FLASH_5720VENDOR_A_ST_M45PE80: 14957 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14958 break; 14959 default: 14960 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14961 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14962 break; 14963 } 14964 break; 14965 default: 14966 tg3_flag_set(tp, NO_NVRAM); 14967 return; 14968 } 14969 14970 tg3_nvram_get_pagesize(tp, nvcfg1); 14971 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14972 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14973 14974 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14975 u32 val; 14976 14977 if (tg3_nvram_read(tp, 0, &val)) 14978 return; 14979 14980 if (val != TG3_EEPROM_MAGIC && 14981 (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) 14982 tg3_flag_set(tp, NO_NVRAM); 14983 } 14984} 14985 14986/* Chips other than 5700/5701 use the NVRAM for fetching info. */ 14987static void tg3_nvram_init(struct tg3 *tp) 14988{ 14989 if (tg3_flag(tp, IS_SSB_CORE)) { 14990 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */ 14991 tg3_flag_clear(tp, NVRAM); 14992 tg3_flag_clear(tp, NVRAM_BUFFERED); 14993 tg3_flag_set(tp, NO_NVRAM); 14994 return; 14995 } 14996 14997 tw32_f(GRC_EEPROM_ADDR, 14998 (EEPROM_ADDR_FSM_RESET | 14999 (EEPROM_DEFAULT_CLOCK_PERIOD << 15000 EEPROM_ADDR_CLKPERD_SHIFT))); 15001 15002 msleep(1); 15003 15004 /* Enable seeprom accesses. */ 15005 tw32_f(GRC_LOCAL_CTRL, 15006 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 15007 udelay(100); 15008 15009 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15010 tg3_asic_rev(tp) != ASIC_REV_5701) { 15011 tg3_flag_set(tp, NVRAM); 15012 15013 if (tg3_nvram_lock(tp)) { 15014 netdev_warn(tp->dev, 15015 "Cannot get nvram lock, %s failed\n", 15016 __func__); 15017 return; 15018 } 15019 tg3_enable_nvram_access(tp); 15020 15021 tp->nvram_size = 0; 15022 15023 if (tg3_asic_rev(tp) == ASIC_REV_5752) 15024 tg3_get_5752_nvram_info(tp); 15025 else if (tg3_asic_rev(tp) == ASIC_REV_5755) 15026 tg3_get_5755_nvram_info(tp); 15027 else if (tg3_asic_rev(tp) == ASIC_REV_5787 || 15028 tg3_asic_rev(tp) == ASIC_REV_5784 || 15029 tg3_asic_rev(tp) == ASIC_REV_5785) 15030 tg3_get_5787_nvram_info(tp); 15031 else if (tg3_asic_rev(tp) == ASIC_REV_5761) 15032 tg3_get_5761_nvram_info(tp); 15033 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 15034 tg3_get_5906_nvram_info(tp); 15035 else if (tg3_asic_rev(tp) == ASIC_REV_57780 || 15036 tg3_flag(tp, 57765_CLASS)) 15037 tg3_get_57780_nvram_info(tp); 15038 else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15039 tg3_asic_rev(tp) == ASIC_REV_5719) 15040 tg3_get_5717_nvram_info(tp); 15041 else if (tg3_asic_rev(tp) == ASIC_REV_5720 || 15042 tg3_asic_rev(tp) == ASIC_REV_5762) 15043 tg3_get_5720_nvram_info(tp); 15044 else 15045 tg3_get_nvram_info(tp); 15046 15047 if (tp->nvram_size == 0) 15048 tg3_get_nvram_size(tp); 15049 15050 tg3_disable_nvram_access(tp); 15051 tg3_nvram_unlock(tp); 15052 15053 } else { 15054 tg3_flag_clear(tp, NVRAM); 15055 tg3_flag_clear(tp, NVRAM_BUFFERED); 15056 15057 tg3_get_eeprom_size(tp); 15058 } 15059} 15060 15061struct subsys_tbl_ent { 15062 u16 subsys_vendor, subsys_devid; 15063 u32 phy_id; 15064}; 15065 15066static struct subsys_tbl_ent subsys_id_to_phy_id[] = { 15067 /* Broadcom boards. */ 15068 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15069 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 15070 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15071 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 15072 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15073 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 15074 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15075 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 15076 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15077 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 15078 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15079 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 15080 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15081 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 15082 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15083 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 15084 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15085 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 15086 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15087 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 15088 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15089 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 15090 15091 /* 3com boards. */ 15092 { TG3PCI_SUBVENDOR_ID_3COM, 15093 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 15094 { TG3PCI_SUBVENDOR_ID_3COM, 15095 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 15096 { TG3PCI_SUBVENDOR_ID_3COM, 15097 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 15098 { TG3PCI_SUBVENDOR_ID_3COM, 15099 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 15100 { TG3PCI_SUBVENDOR_ID_3COM, 15101 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 15102 15103 /* DELL boards. */ 15104 { TG3PCI_SUBVENDOR_ID_DELL, 15105 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 15106 { TG3PCI_SUBVENDOR_ID_DELL, 15107 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 15108 { TG3PCI_SUBVENDOR_ID_DELL, 15109 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 15110 { TG3PCI_SUBVENDOR_ID_DELL, 15111 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 15112 15113 /* Compaq boards. */ 15114 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15115 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 15116 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15117 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 15118 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15119 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 15120 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15121 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 15122 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15123 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 15124 15125 /* IBM boards. */ 15126 { TG3PCI_SUBVENDOR_ID_IBM, 15127 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 15128}; 15129 15130static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) 15131{ 15132 int i; 15133 15134 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 15135 if ((subsys_id_to_phy_id[i].subsys_vendor == 15136 tp->pdev->subsystem_vendor) && 15137 (subsys_id_to_phy_id[i].subsys_devid == 15138 tp->pdev->subsystem_device)) 15139 return &subsys_id_to_phy_id[i]; 15140 } 15141 return NULL; 15142} 15143 15144static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) 15145{ 15146 u32 val; 15147 15148 tp->phy_id = TG3_PHY_ID_INVALID; 15149 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15150 15151 /* Assume an onboard device and WOL capable by default. */ 15152 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15153 tg3_flag_set(tp, WOL_CAP); 15154 15155 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15156 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 15157 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15158 tg3_flag_set(tp, IS_NIC); 15159 } 15160 val = tr32(VCPU_CFGSHDW); 15161 if (val & VCPU_CFGSHDW_ASPM_DBNC) 15162 tg3_flag_set(tp, ASPM_WORKAROUND); 15163 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 15164 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 15165 tg3_flag_set(tp, WOL_ENABLE); 15166 device_set_wakeup_enable(&tp->pdev->dev, true); 15167 } 15168 goto done; 15169 } 15170 15171 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 15172 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 15173 u32 nic_cfg, led_cfg; 15174 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0; 15175 u32 nic_phy_id, ver, eeprom_phy_id; 15176 int eeprom_phy_serdes = 0; 15177 15178 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 15179 tp->nic_sram_data_cfg = nic_cfg; 15180 15181 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 15182 ver >>= NIC_SRAM_DATA_VER_SHIFT; 15183 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15184 tg3_asic_rev(tp) != ASIC_REV_5701 && 15185 tg3_asic_rev(tp) != ASIC_REV_5703 && 15186 (ver > 0) && (ver < 0x100)) 15187 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 15188 15189 if (tg3_asic_rev(tp) == ASIC_REV_5785) 15190 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 15191 15192 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15193 tg3_asic_rev(tp) == ASIC_REV_5719 || 15194 tg3_asic_rev(tp) == ASIC_REV_5720) 15195 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5); 15196 15197 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 15198 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 15199 eeprom_phy_serdes = 1; 15200 15201 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 15202 if (nic_phy_id != 0) { 15203 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 15204 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 15205 15206 eeprom_phy_id = (id1 >> 16) << 10; 15207 eeprom_phy_id |= (id2 & 0xfc00) << 16; 15208 eeprom_phy_id |= (id2 & 0x03ff) << 0; 15209 } else 15210 eeprom_phy_id = 0; 15211 15212 tp->phy_id = eeprom_phy_id; 15213 if (eeprom_phy_serdes) { 15214 if (!tg3_flag(tp, 5705_PLUS)) 15215 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15216 else 15217 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 15218 } 15219 15220 if (tg3_flag(tp, 5750_PLUS)) 15221 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 15222 SHASTA_EXT_LED_MODE_MASK); 15223 else 15224 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 15225 15226 switch (led_cfg) { 15227 default: 15228 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 15229 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15230 break; 15231 15232 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 15233 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15234 break; 15235 15236 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 15237 tp->led_ctrl = LED_CTRL_MODE_MAC; 15238 15239 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 15240 * read on some older 5700/5701 bootcode. 15241 */ 15242 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 15243 tg3_asic_rev(tp) == ASIC_REV_5701) 15244 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15245 15246 break; 15247 15248 case SHASTA_EXT_LED_SHARED: 15249 tp->led_ctrl = LED_CTRL_MODE_SHARED; 15250 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 15251 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1) 15252 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15253 LED_CTRL_MODE_PHY_2); 15254 15255 if (tg3_flag(tp, 5717_PLUS) || 15256 tg3_asic_rev(tp) == ASIC_REV_5762) 15257 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE | 15258 LED_CTRL_BLINK_RATE_MASK; 15259 15260 break; 15261 15262 case SHASTA_EXT_LED_MAC: 15263 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 15264 break; 15265 15266 case SHASTA_EXT_LED_COMBO: 15267 tp->led_ctrl = LED_CTRL_MODE_COMBO; 15268 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) 15269 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15270 LED_CTRL_MODE_PHY_2); 15271 break; 15272 15273 } 15274 15275 if ((tg3_asic_rev(tp) == ASIC_REV_5700 || 15276 tg3_asic_rev(tp) == ASIC_REV_5701) && 15277 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 15278 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15279 15280 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) 15281 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15282 15283 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 15284 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15285 if ((tp->pdev->subsystem_vendor == 15286 PCI_VENDOR_ID_ARIMA) && 15287 (tp->pdev->subsystem_device == 0x205a || 15288 tp->pdev->subsystem_device == 0x2063)) 15289 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15290 } else { 15291 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15292 tg3_flag_set(tp, IS_NIC); 15293 } 15294 15295 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 15296 tg3_flag_set(tp, ENABLE_ASF); 15297 if (tg3_flag(tp, 5750_PLUS)) 15298 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 15299 } 15300 15301 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 15302 tg3_flag(tp, 5750_PLUS)) 15303 tg3_flag_set(tp, ENABLE_APE); 15304 15305 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 15306 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 15307 tg3_flag_clear(tp, WOL_CAP); 15308 15309 if (tg3_flag(tp, WOL_CAP) && 15310 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 15311 tg3_flag_set(tp, WOL_ENABLE); 15312 device_set_wakeup_enable(&tp->pdev->dev, true); 15313 } 15314 15315 if (cfg2 & (1 << 17)) 15316 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 15317 15318 /* serdes signal pre-emphasis in register 0x590 set by */ 15319 /* bootcode if bit 18 is set */ 15320 if (cfg2 & (1 << 18)) 15321 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 15322 15323 if ((tg3_flag(tp, 57765_PLUS) || 15324 (tg3_asic_rev(tp) == ASIC_REV_5784 && 15325 tg3_chip_rev(tp) != CHIPREV_5784_AX)) && 15326 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 15327 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 15328 15329 if (tg3_flag(tp, PCI_EXPRESS)) { 15330 u32 cfg3; 15331 15332 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 15333 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 15334 !tg3_flag(tp, 57765_PLUS) && 15335 (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)) 15336 tg3_flag_set(tp, ASPM_WORKAROUND); 15337 if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID) 15338 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 15339 if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK) 15340 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 15341 } 15342 15343 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 15344 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 15345 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 15346 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 15347 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 15348 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 15349 15350 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV) 15351 tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV; 15352 } 15353done: 15354 if (tg3_flag(tp, WOL_CAP)) 15355 device_set_wakeup_enable(&tp->pdev->dev, 15356 tg3_flag(tp, WOL_ENABLE)); 15357 else 15358 device_set_wakeup_capable(&tp->pdev->dev, false); 15359} 15360 15361static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val) 15362{ 15363 int i, err; 15364 u32 val2, off = offset * 8; 15365 15366 err = tg3_nvram_lock(tp); 15367 if (err) 15368 return err; 15369 15370 tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE); 15371 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN | 15372 APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START); 15373 tg3_ape_read32(tp, TG3_APE_OTP_CTRL); 15374 udelay(10); 15375 15376 for (i = 0; i < 100; i++) { 15377 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS); 15378 if (val2 & APE_OTP_STATUS_CMD_DONE) { 15379 *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA); 15380 break; 15381 } 15382 udelay(10); 15383 } 15384 15385 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0); 15386 15387 tg3_nvram_unlock(tp); 15388 if (val2 & APE_OTP_STATUS_CMD_DONE) 15389 return 0; 15390 15391 return -EBUSY; 15392} 15393 15394static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 15395{ 15396 int i; 15397 u32 val; 15398 15399 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 15400 tw32(OTP_CTRL, cmd); 15401 15402 /* Wait for up to 1 ms for command to execute. */ 15403 for (i = 0; i < 100; i++) { 15404 val = tr32(OTP_STATUS); 15405 if (val & OTP_STATUS_CMD_DONE) 15406 break; 15407 udelay(10); 15408 } 15409 15410 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 15411} 15412 15413/* Read the gphy configuration from the OTP region of the chip. The gphy 15414 * configuration is a 32-bit value that straddles the alignment boundary. 15415 * We do two 32-bit reads and then shift and merge the results. 15416 */ 15417static u32 tg3_read_otp_phycfg(struct tg3 *tp) 15418{ 15419 u32 bhalf_otp, thalf_otp; 15420 15421 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 15422 15423 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 15424 return 0; 15425 15426 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 15427 15428 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15429 return 0; 15430 15431 thalf_otp = tr32(OTP_READ_DATA); 15432 15433 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 15434 15435 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15436 return 0; 15437 15438 bhalf_otp = tr32(OTP_READ_DATA); 15439 15440 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 15441} 15442 15443static void tg3_phy_init_link_config(struct tg3 *tp) 15444{ 15445 u32 adv = ADVERTISED_Autoneg; 15446 15447 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 15448 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV)) 15449 adv |= ADVERTISED_1000baseT_Half; 15450 adv |= ADVERTISED_1000baseT_Full; 15451 } 15452 15453 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 15454 adv |= ADVERTISED_100baseT_Half | 15455 ADVERTISED_100baseT_Full | 15456 ADVERTISED_10baseT_Half | 15457 ADVERTISED_10baseT_Full | 15458 ADVERTISED_TP; 15459 else 15460 adv |= ADVERTISED_FIBRE; 15461 15462 tp->link_config.advertising = adv; 15463 tp->link_config.speed = SPEED_UNKNOWN; 15464 tp->link_config.duplex = DUPLEX_UNKNOWN; 15465 tp->link_config.autoneg = AUTONEG_ENABLE; 15466 tp->link_config.active_speed = SPEED_UNKNOWN; 15467 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 15468 15469 tp->old_link = -1; 15470} 15471 15472static int tg3_phy_probe(struct tg3 *tp) 15473{ 15474 u32 hw_phy_id_1, hw_phy_id_2; 15475 u32 hw_phy_id, hw_phy_id_masked; 15476 int err; 15477 15478 /* flow control autonegotiation is default behavior */ 15479 tg3_flag_set(tp, PAUSE_AUTONEG); 15480 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 15481 15482 if (tg3_flag(tp, ENABLE_APE)) { 15483 switch (tp->pci_fn) { 15484 case 0: 15485 tp->phy_ape_lock = TG3_APE_LOCK_PHY0; 15486 break; 15487 case 1: 15488 tp->phy_ape_lock = TG3_APE_LOCK_PHY1; 15489 break; 15490 case 2: 15491 tp->phy_ape_lock = TG3_APE_LOCK_PHY2; 15492 break; 15493 case 3: 15494 tp->phy_ape_lock = TG3_APE_LOCK_PHY3; 15495 break; 15496 } 15497 } 15498 15499 if (!tg3_flag(tp, ENABLE_ASF) && 15500 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15501 !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 15502 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 15503 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 15504 15505 if (tg3_flag(tp, USE_PHYLIB)) 15506 return tg3_phy_init(tp); 15507 15508 /* Reading the PHY ID register can conflict with ASF 15509 * firmware access to the PHY hardware. 15510 */ 15511 err = 0; 15512 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 15513 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 15514 } else { 15515 /* Now read the physical PHY_ID from the chip and verify 15516 * that it is sane. If it doesn't look good, we fall back 15517 * to either the hard-coded table based PHY_ID and failing 15518 * that the value found in the eeprom area. 15519 */ 15520 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 15521 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 15522 15523 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 15524 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 15525 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 15526 15527 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 15528 } 15529 15530 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 15531 tp->phy_id = hw_phy_id; 15532 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 15533 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15534 else 15535 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 15536 } else { 15537 if (tp->phy_id != TG3_PHY_ID_INVALID) { 15538 /* Do nothing, phy ID already set up in 15539 * tg3_get_eeprom_hw_cfg(). 15540 */ 15541 } else { 15542 struct subsys_tbl_ent *p; 15543 15544 /* No eeprom signature? Try the hardcoded 15545 * subsys device table. 15546 */ 15547 p = tg3_lookup_by_subsys(tp); 15548 if (p) { 15549 tp->phy_id = p->phy_id; 15550 } else if (!tg3_flag(tp, IS_SSB_CORE)) { 15551 /* For now we saw the IDs 0xbc050cd0, 15552 * 0xbc050f80 and 0xbc050c30 on devices 15553 * connected to an BCM4785 and there are 15554 * probably more. Just assume that the phy is 15555 * supported when it is connected to a SSB core 15556 * for now. 15557 */ 15558 return -ENODEV; 15559 } 15560 15561 if (!tp->phy_id || 15562 tp->phy_id == TG3_PHY_ID_BCM8002) 15563 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15564 } 15565 } 15566 15567 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15568 (tg3_asic_rev(tp) == ASIC_REV_5719 || 15569 tg3_asic_rev(tp) == ASIC_REV_5720 || 15570 tg3_asic_rev(tp) == ASIC_REV_57766 || 15571 tg3_asic_rev(tp) == ASIC_REV_5762 || 15572 (tg3_asic_rev(tp) == ASIC_REV_5717 && 15573 tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) || 15574 (tg3_asic_rev(tp) == ASIC_REV_57765 && 15575 tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) { 15576 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 15577 15578 tp->eee.supported = SUPPORTED_100baseT_Full | 15579 SUPPORTED_1000baseT_Full; 15580 tp->eee.advertised = ADVERTISED_100baseT_Full | 15581 ADVERTISED_1000baseT_Full; 15582 tp->eee.eee_enabled = 1; 15583 tp->eee.tx_lpi_enabled = 1; 15584 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US; 15585 } 15586 15587 tg3_phy_init_link_config(tp); 15588 15589 if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 15590 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15591 !tg3_flag(tp, ENABLE_APE) && 15592 !tg3_flag(tp, ENABLE_ASF)) { 15593 u32 bmsr, dummy; 15594 15595 tg3_readphy(tp, MII_BMSR, &bmsr); 15596 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 15597 (bmsr & BMSR_LSTATUS)) 15598 goto skip_phy_reset; 15599 15600 err = tg3_phy_reset(tp); 15601 if (err) 15602 return err; 15603 15604 tg3_phy_set_wirespeed(tp); 15605 15606 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 15607 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 15608 tp->link_config.flowctrl); 15609 15610 tg3_writephy(tp, MII_BMCR, 15611 BMCR_ANENABLE | BMCR_ANRESTART); 15612 } 15613 } 15614 15615skip_phy_reset: 15616 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 15617 err = tg3_init_5401phy_dsp(tp); 15618 if (err) 15619 return err; 15620 15621 err = tg3_init_5401phy_dsp(tp); 15622 } 15623 15624 return err; 15625} 15626 15627static void tg3_read_vpd(struct tg3 *tp) 15628{ 15629 u8 *vpd_data; 15630 unsigned int len, vpdlen; 15631 int i; 15632 15633 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 15634 if (!vpd_data) 15635 goto out_no_vpd; 15636 15637 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15638 PCI_VPD_RO_KEYWORD_MFR_ID, &len); 15639 if (i < 0) 15640 goto partno; 15641 15642 if (len != 4 || memcmp(vpd_data + i, "1028", 4)) 15643 goto partno; 15644 15645 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15646 PCI_VPD_RO_KEYWORD_VENDOR0, &len); 15647 if (i < 0) 15648 goto partno; 15649 15650 memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); 15651 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i); 15652 15653partno: 15654 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15655 PCI_VPD_RO_KEYWORD_PARTNO, &len); 15656 if (i < 0) 15657 goto out_not_found; 15658 15659 if (len > TG3_BPN_SIZE) 15660 goto out_not_found; 15661 15662 memcpy(tp->board_part_number, &vpd_data[i], len); 15663 15664out_not_found: 15665 kfree(vpd_data); 15666 if (tp->board_part_number[0]) 15667 return; 15668 15669out_no_vpd: 15670 if (tg3_asic_rev(tp) == ASIC_REV_5717) { 15671 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15672 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C) 15673 strcpy(tp->board_part_number, "BCM5717"); 15674 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 15675 strcpy(tp->board_part_number, "BCM5718"); 15676 else 15677 goto nomatch; 15678 } else if (tg3_asic_rev(tp) == ASIC_REV_57780) { 15679 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 15680 strcpy(tp->board_part_number, "BCM57780"); 15681 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 15682 strcpy(tp->board_part_number, "BCM57760"); 15683 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 15684 strcpy(tp->board_part_number, "BCM57790"); 15685 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 15686 strcpy(tp->board_part_number, "BCM57788"); 15687 else 15688 goto nomatch; 15689 } else if (tg3_asic_rev(tp) == ASIC_REV_57765) { 15690 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 15691 strcpy(tp->board_part_number, "BCM57761"); 15692 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 15693 strcpy(tp->board_part_number, "BCM57765"); 15694 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 15695 strcpy(tp->board_part_number, "BCM57781"); 15696 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 15697 strcpy(tp->board_part_number, "BCM57785"); 15698 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 15699 strcpy(tp->board_part_number, "BCM57791"); 15700 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 15701 strcpy(tp->board_part_number, "BCM57795"); 15702 else 15703 goto nomatch; 15704 } else if (tg3_asic_rev(tp) == ASIC_REV_57766) { 15705 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 15706 strcpy(tp->board_part_number, "BCM57762"); 15707 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 15708 strcpy(tp->board_part_number, "BCM57766"); 15709 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 15710 strcpy(tp->board_part_number, "BCM57782"); 15711 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 15712 strcpy(tp->board_part_number, "BCM57786"); 15713 else 15714 goto nomatch; 15715 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15716 strcpy(tp->board_part_number, "BCM95906"); 15717 } else { 15718nomatch: 15719 strcpy(tp->board_part_number, "none"); 15720 } 15721} 15722 15723static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 15724{ 15725 u32 val; 15726 15727 if (tg3_nvram_read(tp, offset, &val) || 15728 (val & 0xfc000000) != 0x0c000000 || 15729 tg3_nvram_read(tp, offset + 4, &val) || 15730 val != 0) 15731 return 0; 15732 15733 return 1; 15734} 15735 15736static void tg3_read_bc_ver(struct tg3 *tp) 15737{ 15738 u32 val, offset, start, ver_offset; 15739 int i, dst_off; 15740 bool newver = false; 15741 15742 if (tg3_nvram_read(tp, 0xc, &offset) || 15743 tg3_nvram_read(tp, 0x4, &start)) 15744 return; 15745 15746 offset = tg3_nvram_logical_addr(tp, offset); 15747 15748 if (tg3_nvram_read(tp, offset, &val)) 15749 return; 15750 15751 if ((val & 0xfc000000) == 0x0c000000) { 15752 if (tg3_nvram_read(tp, offset + 4, &val)) 15753 return; 15754 15755 if (val == 0) 15756 newver = true; 15757 } 15758 15759 dst_off = strlen(tp->fw_ver); 15760 15761 if (newver) { 15762 if (TG3_VER_SIZE - dst_off < 16 || 15763 tg3_nvram_read(tp, offset + 8, &ver_offset)) 15764 return; 15765 15766 offset = offset + ver_offset - start; 15767 for (i = 0; i < 16; i += 4) { 15768 __be32 v; 15769 if (tg3_nvram_read_be32(tp, offset + i, &v)) 15770 return; 15771 15772 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 15773 } 15774 } else { 15775 u32 major, minor; 15776 15777 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 15778 return; 15779 15780 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 15781 TG3_NVM_BCVER_MAJSFT; 15782 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 15783 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 15784 "v%d.%02d", major, minor); 15785 } 15786} 15787 15788static void tg3_read_hwsb_ver(struct tg3 *tp) 15789{ 15790 u32 val, major, minor; 15791 15792 /* Use native endian representation */ 15793 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 15794 return; 15795 15796 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 15797 TG3_NVM_HWSB_CFG1_MAJSFT; 15798 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 15799 TG3_NVM_HWSB_CFG1_MINSFT; 15800 15801 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 15802} 15803 15804static void tg3_read_sb_ver(struct tg3 *tp, u32 val) 15805{ 15806 u32 offset, major, minor, build; 15807 15808 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 15809 15810 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 15811 return; 15812 15813 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 15814 case TG3_EEPROM_SB_REVISION_0: 15815 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 15816 break; 15817 case TG3_EEPROM_SB_REVISION_2: 15818 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 15819 break; 15820 case TG3_EEPROM_SB_REVISION_3: 15821 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 15822 break; 15823 case TG3_EEPROM_SB_REVISION_4: 15824 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 15825 break; 15826 case TG3_EEPROM_SB_REVISION_5: 15827 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 15828 break; 15829 case TG3_EEPROM_SB_REVISION_6: 15830 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 15831 break; 15832 default: 15833 return; 15834 } 15835 15836 if (tg3_nvram_read(tp, offset, &val)) 15837 return; 15838 15839 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 15840 TG3_EEPROM_SB_EDH_BLD_SHFT; 15841 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 15842 TG3_EEPROM_SB_EDH_MAJ_SHFT; 15843 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 15844 15845 if (minor > 99 || build > 26) 15846 return; 15847 15848 offset = strlen(tp->fw_ver); 15849 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 15850 " v%d.%02d", major, minor); 15851 15852 if (build > 0) { 15853 offset = strlen(tp->fw_ver); 15854 if (offset < TG3_VER_SIZE - 1) 15855 tp->fw_ver[offset] = 'a' + build - 1; 15856 } 15857} 15858 15859static void tg3_read_mgmtfw_ver(struct tg3 *tp) 15860{ 15861 u32 val, offset, start; 15862 int i, vlen; 15863 15864 for (offset = TG3_NVM_DIR_START; 15865 offset < TG3_NVM_DIR_END; 15866 offset += TG3_NVM_DIRENT_SIZE) { 15867 if (tg3_nvram_read(tp, offset, &val)) 15868 return; 15869 15870 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 15871 break; 15872 } 15873 15874 if (offset == TG3_NVM_DIR_END) 15875 return; 15876 15877 if (!tg3_flag(tp, 5705_PLUS)) 15878 start = 0x08000000; 15879 else if (tg3_nvram_read(tp, offset - 4, &start)) 15880 return; 15881 15882 if (tg3_nvram_read(tp, offset + 4, &offset) || 15883 !tg3_fw_img_is_valid(tp, offset) || 15884 tg3_nvram_read(tp, offset + 8, &val)) 15885 return; 15886 15887 offset += val - start; 15888 15889 vlen = strlen(tp->fw_ver); 15890 15891 tp->fw_ver[vlen++] = ','; 15892 tp->fw_ver[vlen++] = ' '; 15893 15894 for (i = 0; i < 4; i++) { 15895 __be32 v; 15896 if (tg3_nvram_read_be32(tp, offset, &v)) 15897 return; 15898 15899 offset += sizeof(v); 15900 15901 if (vlen > TG3_VER_SIZE - sizeof(v)) { 15902 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 15903 break; 15904 } 15905 15906 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 15907 vlen += sizeof(v); 15908 } 15909} 15910 15911static void tg3_probe_ncsi(struct tg3 *tp) 15912{ 15913 u32 apedata; 15914 15915 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 15916 if (apedata != APE_SEG_SIG_MAGIC) 15917 return; 15918 15919 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 15920 if (!(apedata & APE_FW_STATUS_READY)) 15921 return; 15922 15923 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 15924 tg3_flag_set(tp, APE_HAS_NCSI); 15925} 15926 15927static void tg3_read_dash_ver(struct tg3 *tp) 15928{ 15929 int vlen; 15930 u32 apedata; 15931 char *fwtype; 15932 15933 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 15934 15935 if (tg3_flag(tp, APE_HAS_NCSI)) 15936 fwtype = "NCSI"; 15937 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725) 15938 fwtype = "SMASH"; 15939 else 15940 fwtype = "DASH"; 15941 15942 vlen = strlen(tp->fw_ver); 15943 15944 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 15945 fwtype, 15946 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 15947 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 15948 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 15949 (apedata & APE_FW_VERSION_BLDMSK)); 15950} 15951 15952static void tg3_read_otp_ver(struct tg3 *tp) 15953{ 15954 u32 val, val2; 15955 15956 if (tg3_asic_rev(tp) != ASIC_REV_5762) 15957 return; 15958 15959 if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) && 15960 !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) && 15961 TG3_OTP_MAGIC0_VALID(val)) { 15962 u64 val64 = (u64) val << 32 | val2; 15963 u32 ver = 0; 15964 int i, vlen; 15965 15966 for (i = 0; i < 7; i++) { 15967 if ((val64 & 0xff) == 0) 15968 break; 15969 ver = val64 & 0xff; 15970 val64 >>= 8; 15971 } 15972 vlen = strlen(tp->fw_ver); 15973 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver); 15974 } 15975} 15976 15977static void tg3_read_fw_ver(struct tg3 *tp) 15978{ 15979 u32 val; 15980 bool vpd_vers = false; 15981 15982 if (tp->fw_ver[0] != 0) 15983 vpd_vers = true; 15984 15985 if (tg3_flag(tp, NO_NVRAM)) { 15986 strcat(tp->fw_ver, "sb"); 15987 tg3_read_otp_ver(tp); 15988 return; 15989 } 15990 15991 if (tg3_nvram_read(tp, 0, &val)) 15992 return; 15993 15994 if (val == TG3_EEPROM_MAGIC) 15995 tg3_read_bc_ver(tp); 15996 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 15997 tg3_read_sb_ver(tp, val); 15998 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 15999 tg3_read_hwsb_ver(tp); 16000 16001 if (tg3_flag(tp, ENABLE_ASF)) { 16002 if (tg3_flag(tp, ENABLE_APE)) { 16003 tg3_probe_ncsi(tp); 16004 if (!vpd_vers) 16005 tg3_read_dash_ver(tp); 16006 } else if (!vpd_vers) { 16007 tg3_read_mgmtfw_ver(tp); 16008 } 16009 } 16010 16011 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 16012} 16013 16014static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 16015{ 16016 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 16017 return TG3_RX_RET_MAX_SIZE_5717; 16018 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 16019 return TG3_RX_RET_MAX_SIZE_5700; 16020 else 16021 return TG3_RX_RET_MAX_SIZE_5705; 16022} 16023 16024static const struct pci_device_id tg3_write_reorder_chipsets[] = { 16025 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 16026 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 16027 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 16028 { }, 16029}; 16030 16031static struct pci_dev *tg3_find_peer(struct tg3 *tp) 16032{ 16033 struct pci_dev *peer; 16034 unsigned int func, devnr = tp->pdev->devfn & ~7; 16035 16036 for (func = 0; func < 8; func++) { 16037 peer = pci_get_slot(tp->pdev->bus, devnr | func); 16038 if (peer && peer != tp->pdev) 16039 break; 16040 pci_dev_put(peer); 16041 } 16042 /* 5704 can be configured in single-port mode, set peer to 16043 * tp->pdev in that case. 16044 */ 16045 if (!peer) { 16046 peer = tp->pdev; 16047 return peer; 16048 } 16049 16050 /* 16051 * We don't need to keep the refcount elevated; there's no way 16052 * to remove one half of this device without removing the other 16053 */ 16054 pci_dev_put(peer); 16055 16056 return peer; 16057} 16058 16059static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 16060{ 16061 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 16062 if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) { 16063 u32 reg; 16064 16065 /* All devices that use the alternate 16066 * ASIC REV location have a CPMU. 16067 */ 16068 tg3_flag_set(tp, CPMU_PRESENT); 16069 16070 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 16071 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 16072 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 16073 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 16074 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 16075 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 16076 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 16077 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 16078 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 16079 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 16080 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) 16081 reg = TG3PCI_GEN2_PRODID_ASICREV; 16082 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 16083 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 16084 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 16085 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 16086 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 16087 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 16088 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 16089 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 16090 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 16091 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 16092 reg = TG3PCI_GEN15_PRODID_ASICREV; 16093 else 16094 reg = TG3PCI_PRODID_ASICREV; 16095 16096 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 16097 } 16098 16099 /* Wrong chip ID in 5752 A0. This code can be removed later 16100 * as A0 is not in production. 16101 */ 16102 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW) 16103 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 16104 16105 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0) 16106 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0; 16107 16108 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16109 tg3_asic_rev(tp) == ASIC_REV_5719 || 16110 tg3_asic_rev(tp) == ASIC_REV_5720) 16111 tg3_flag_set(tp, 5717_PLUS); 16112 16113 if (tg3_asic_rev(tp) == ASIC_REV_57765 || 16114 tg3_asic_rev(tp) == ASIC_REV_57766) 16115 tg3_flag_set(tp, 57765_CLASS); 16116 16117 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || 16118 tg3_asic_rev(tp) == ASIC_REV_5762) 16119 tg3_flag_set(tp, 57765_PLUS); 16120 16121 /* Intentionally exclude ASIC_REV_5906 */ 16122 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16123 tg3_asic_rev(tp) == ASIC_REV_5787 || 16124 tg3_asic_rev(tp) == ASIC_REV_5784 || 16125 tg3_asic_rev(tp) == ASIC_REV_5761 || 16126 tg3_asic_rev(tp) == ASIC_REV_5785 || 16127 tg3_asic_rev(tp) == ASIC_REV_57780 || 16128 tg3_flag(tp, 57765_PLUS)) 16129 tg3_flag_set(tp, 5755_PLUS); 16130 16131 if (tg3_asic_rev(tp) == ASIC_REV_5780 || 16132 tg3_asic_rev(tp) == ASIC_REV_5714) 16133 tg3_flag_set(tp, 5780_CLASS); 16134 16135 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16136 tg3_asic_rev(tp) == ASIC_REV_5752 || 16137 tg3_asic_rev(tp) == ASIC_REV_5906 || 16138 tg3_flag(tp, 5755_PLUS) || 16139 tg3_flag(tp, 5780_CLASS)) 16140 tg3_flag_set(tp, 5750_PLUS); 16141 16142 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 16143 tg3_flag(tp, 5750_PLUS)) 16144 tg3_flag_set(tp, 5705_PLUS); 16145} 16146 16147static bool tg3_10_100_only_device(struct tg3 *tp, 16148 const struct pci_device_id *ent) 16149{ 16150 u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK; 16151 16152 if ((tg3_asic_rev(tp) == ASIC_REV_5703 && 16153 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 16154 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 16155 return true; 16156 16157 if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) { 16158 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 16159 if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100) 16160 return true; 16161 } else { 16162 return true; 16163 } 16164 } 16165 16166 return false; 16167} 16168 16169static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) 16170{ 16171 u32 misc_ctrl_reg; 16172 u32 pci_state_reg, grc_misc_cfg; 16173 u32 val; 16174 u16 pci_cmd; 16175 int err; 16176 16177 /* Force memory write invalidate off. If we leave it on, 16178 * then on 5700_BX chips we have to enable a workaround. 16179 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 16180 * to match the cacheline size. The Broadcom driver have this 16181 * workaround but turns MWI off all the times so never uses 16182 * it. This seems to suggest that the workaround is insufficient. 16183 */ 16184 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16185 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 16186 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16187 16188 /* Important! -- Make sure register accesses are byteswapped 16189 * correctly. Also, for those chips that require it, make 16190 * sure that indirect register accesses are enabled before 16191 * the first operation. 16192 */ 16193 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16194 &misc_ctrl_reg); 16195 tp->misc_host_ctrl |= (misc_ctrl_reg & 16196 MISC_HOST_CTRL_CHIPREV); 16197 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16198 tp->misc_host_ctrl); 16199 16200 tg3_detect_asic_rev(tp, misc_ctrl_reg); 16201 16202 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 16203 * we need to disable memory and use config. cycles 16204 * only to access all registers. The 5702/03 chips 16205 * can mistakenly decode the special cycles from the 16206 * ICH chipsets as memory write cycles, causing corruption 16207 * of register and memory space. Only certain ICH bridges 16208 * will drive special cycles with non-zero data during the 16209 * address phase which can fall within the 5703's address 16210 * range. This is not an ICH bug as the PCI spec allows 16211 * non-zero address during special cycles. However, only 16212 * these ICH bridges are known to drive non-zero addresses 16213 * during special cycles. 16214 * 16215 * Since special cycles do not cross PCI bridges, we only 16216 * enable this workaround if the 5703 is on the secondary 16217 * bus of these ICH bridges. 16218 */ 16219 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) || 16220 (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) { 16221 static struct tg3_dev_id { 16222 u32 vendor; 16223 u32 device; 16224 u32 rev; 16225 } ich_chipsets[] = { 16226 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 16227 PCI_ANY_ID }, 16228 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 16229 PCI_ANY_ID }, 16230 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 16231 0xa }, 16232 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 16233 PCI_ANY_ID }, 16234 { }, 16235 }; 16236 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 16237 struct pci_dev *bridge = NULL; 16238 16239 while (pci_id->vendor != 0) { 16240 bridge = pci_get_device(pci_id->vendor, pci_id->device, 16241 bridge); 16242 if (!bridge) { 16243 pci_id++; 16244 continue; 16245 } 16246 if (pci_id->rev != PCI_ANY_ID) { 16247 if (bridge->revision > pci_id->rev) 16248 continue; 16249 } 16250 if (bridge->subordinate && 16251 (bridge->subordinate->number == 16252 tp->pdev->bus->number)) { 16253 tg3_flag_set(tp, ICH_WORKAROUND); 16254 pci_dev_put(bridge); 16255 break; 16256 } 16257 } 16258 } 16259 16260 if (tg3_asic_rev(tp) == ASIC_REV_5701) { 16261 static struct tg3_dev_id { 16262 u32 vendor; 16263 u32 device; 16264 } bridge_chipsets[] = { 16265 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 16266 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 16267 { }, 16268 }; 16269 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 16270 struct pci_dev *bridge = NULL; 16271 16272 while (pci_id->vendor != 0) { 16273 bridge = pci_get_device(pci_id->vendor, 16274 pci_id->device, 16275 bridge); 16276 if (!bridge) { 16277 pci_id++; 16278 continue; 16279 } 16280 if (bridge->subordinate && 16281 (bridge->subordinate->number <= 16282 tp->pdev->bus->number) && 16283 (bridge->subordinate->busn_res.end >= 16284 tp->pdev->bus->number)) { 16285 tg3_flag_set(tp, 5701_DMA_BUG); 16286 pci_dev_put(bridge); 16287 break; 16288 } 16289 } 16290 } 16291 16292 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 16293 * DMA addresses > 40-bit. This bridge may have other additional 16294 * 57xx devices behind it in some 4-port NIC designs for example. 16295 * Any tg3 device found behind the bridge will also need the 40-bit 16296 * DMA workaround. 16297 */ 16298 if (tg3_flag(tp, 5780_CLASS)) { 16299 tg3_flag_set(tp, 40BIT_DMA_BUG); 16300 tp->msi_cap = tp->pdev->msi_cap; 16301 } else { 16302 struct pci_dev *bridge = NULL; 16303 16304 do { 16305 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 16306 PCI_DEVICE_ID_SERVERWORKS_EPB, 16307 bridge); 16308 if (bridge && bridge->subordinate && 16309 (bridge->subordinate->number <= 16310 tp->pdev->bus->number) && 16311 (bridge->subordinate->busn_res.end >= 16312 tp->pdev->bus->number)) { 16313 tg3_flag_set(tp, 40BIT_DMA_BUG); 16314 pci_dev_put(bridge); 16315 break; 16316 } 16317 } while (bridge); 16318 } 16319 16320 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16321 tg3_asic_rev(tp) == ASIC_REV_5714) 16322 tp->pdev_peer = tg3_find_peer(tp); 16323 16324 /* Determine TSO capabilities */ 16325 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0) 16326 ; /* Do nothing. HW bug. */ 16327 else if (tg3_flag(tp, 57765_PLUS)) 16328 tg3_flag_set(tp, HW_TSO_3); 16329 else if (tg3_flag(tp, 5755_PLUS) || 16330 tg3_asic_rev(tp) == ASIC_REV_5906) 16331 tg3_flag_set(tp, HW_TSO_2); 16332 else if (tg3_flag(tp, 5750_PLUS)) { 16333 tg3_flag_set(tp, HW_TSO_1); 16334 tg3_flag_set(tp, TSO_BUG); 16335 if (tg3_asic_rev(tp) == ASIC_REV_5750 && 16336 tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2) 16337 tg3_flag_clear(tp, TSO_BUG); 16338 } else if (tg3_asic_rev(tp) != ASIC_REV_5700 && 16339 tg3_asic_rev(tp) != ASIC_REV_5701 && 16340 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 16341 tg3_flag_set(tp, FW_TSO); 16342 tg3_flag_set(tp, TSO_BUG); 16343 if (tg3_asic_rev(tp) == ASIC_REV_5705) 16344 tp->fw_needed = FIRMWARE_TG3TSO5; 16345 else 16346 tp->fw_needed = FIRMWARE_TG3TSO; 16347 } 16348 16349 /* Selectively allow TSO based on operating conditions */ 16350 if (tg3_flag(tp, HW_TSO_1) || 16351 tg3_flag(tp, HW_TSO_2) || 16352 tg3_flag(tp, HW_TSO_3) || 16353 tg3_flag(tp, FW_TSO)) { 16354 /* For firmware TSO, assume ASF is disabled. 16355 * We'll disable TSO later if we discover ASF 16356 * is enabled in tg3_get_eeprom_hw_cfg(). 16357 */ 16358 tg3_flag_set(tp, TSO_CAPABLE); 16359 } else { 16360 tg3_flag_clear(tp, TSO_CAPABLE); 16361 tg3_flag_clear(tp, TSO_BUG); 16362 tp->fw_needed = NULL; 16363 } 16364 16365 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) 16366 tp->fw_needed = FIRMWARE_TG3; 16367 16368 if (tg3_asic_rev(tp) == ASIC_REV_57766) 16369 tp->fw_needed = FIRMWARE_TG357766; 16370 16371 tp->irq_max = 1; 16372 16373 if (tg3_flag(tp, 5750_PLUS)) { 16374 tg3_flag_set(tp, SUPPORT_MSI); 16375 if (tg3_chip_rev(tp) == CHIPREV_5750_AX || 16376 tg3_chip_rev(tp) == CHIPREV_5750_BX || 16377 (tg3_asic_rev(tp) == ASIC_REV_5714 && 16378 tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 && 16379 tp->pdev_peer == tp->pdev)) 16380 tg3_flag_clear(tp, SUPPORT_MSI); 16381 16382 if (tg3_flag(tp, 5755_PLUS) || 16383 tg3_asic_rev(tp) == ASIC_REV_5906) { 16384 tg3_flag_set(tp, 1SHOT_MSI); 16385 } 16386 16387 if (tg3_flag(tp, 57765_PLUS)) { 16388 tg3_flag_set(tp, SUPPORT_MSIX); 16389 tp->irq_max = TG3_IRQ_MAX_VECS; 16390 } 16391 } 16392 16393 tp->txq_max = 1; 16394 tp->rxq_max = 1; 16395 if (tp->irq_max > 1) { 16396 tp->rxq_max = TG3_RSS_MAX_NUM_QS; 16397 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS); 16398 16399 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 16400 tg3_asic_rev(tp) == ASIC_REV_5720) 16401 tp->txq_max = tp->irq_max - 1; 16402 } 16403 16404 if (tg3_flag(tp, 5755_PLUS) || 16405 tg3_asic_rev(tp) == ASIC_REV_5906) 16406 tg3_flag_set(tp, SHORT_DMA_BUG); 16407 16408 if (tg3_asic_rev(tp) == ASIC_REV_5719) 16409 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 16410 16411 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16412 tg3_asic_rev(tp) == ASIC_REV_5719 || 16413 tg3_asic_rev(tp) == ASIC_REV_5720 || 16414 tg3_asic_rev(tp) == ASIC_REV_5762) 16415 tg3_flag_set(tp, LRG_PROD_RING_CAP); 16416 16417 if (tg3_flag(tp, 57765_PLUS) && 16418 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0) 16419 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 16420 16421 if (!tg3_flag(tp, 5705_PLUS) || 16422 tg3_flag(tp, 5780_CLASS) || 16423 tg3_flag(tp, USE_JUMBO_BDFLAG)) 16424 tg3_flag_set(tp, JUMBO_CAPABLE); 16425 16426 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16427 &pci_state_reg); 16428 16429 if (pci_is_pcie(tp->pdev)) { 16430 u16 lnkctl; 16431 16432 tg3_flag_set(tp, PCI_EXPRESS); 16433 16434 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl); 16435 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 16436 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16437 tg3_flag_clear(tp, HW_TSO_2); 16438 tg3_flag_clear(tp, TSO_CAPABLE); 16439 } 16440 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 16441 tg3_asic_rev(tp) == ASIC_REV_5761 || 16442 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 || 16443 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1) 16444 tg3_flag_set(tp, CLKREQ_BUG); 16445 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) { 16446 tg3_flag_set(tp, L1PLLPD_EN); 16447 } 16448 } else if (tg3_asic_rev(tp) == ASIC_REV_5785) { 16449 /* BCM5785 devices are effectively PCIe devices, and should 16450 * follow PCIe codepaths, but do not have a PCIe capabilities 16451 * section. 16452 */ 16453 tg3_flag_set(tp, PCI_EXPRESS); 16454 } else if (!tg3_flag(tp, 5705_PLUS) || 16455 tg3_flag(tp, 5780_CLASS)) { 16456 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 16457 if (!tp->pcix_cap) { 16458 dev_err(&tp->pdev->dev, 16459 "Cannot find PCI-X capability, aborting\n"); 16460 return -EIO; 16461 } 16462 16463 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 16464 tg3_flag_set(tp, PCIX_MODE); 16465 } 16466 16467 /* If we have an AMD 762 or VIA K8T800 chipset, write 16468 * reordering to the mailbox registers done by the host 16469 * controller can cause major troubles. We read back from 16470 * every mailbox register write to force the writes to be 16471 * posted to the chip in order. 16472 */ 16473 if (pci_dev_present(tg3_write_reorder_chipsets) && 16474 !tg3_flag(tp, PCI_EXPRESS)) 16475 tg3_flag_set(tp, MBOX_WRITE_REORDER); 16476 16477 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 16478 &tp->pci_cacheline_sz); 16479 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16480 &tp->pci_lat_timer); 16481 if (tg3_asic_rev(tp) == ASIC_REV_5703 && 16482 tp->pci_lat_timer < 64) { 16483 tp->pci_lat_timer = 64; 16484 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16485 tp->pci_lat_timer); 16486 } 16487 16488 /* Important! -- It is critical that the PCI-X hw workaround 16489 * situation is decided before the first MMIO register access. 16490 */ 16491 if (tg3_chip_rev(tp) == CHIPREV_5700_BX) { 16492 /* 5700 BX chips need to have their TX producer index 16493 * mailboxes written twice to workaround a bug. 16494 */ 16495 tg3_flag_set(tp, TXD_MBOX_HWBUG); 16496 16497 /* If we are in PCI-X mode, enable register write workaround. 16498 * 16499 * The workaround is to use indirect register accesses 16500 * for all chip writes not to mailbox registers. 16501 */ 16502 if (tg3_flag(tp, PCIX_MODE)) { 16503 u32 pm_reg; 16504 16505 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16506 16507 /* The chip can have it's power management PCI config 16508 * space registers clobbered due to this bug. 16509 * So explicitly force the chip into D0 here. 16510 */ 16511 pci_read_config_dword(tp->pdev, 16512 tp->pdev->pm_cap + PCI_PM_CTRL, 16513 &pm_reg); 16514 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 16515 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 16516 pci_write_config_dword(tp->pdev, 16517 tp->pdev->pm_cap + PCI_PM_CTRL, 16518 pm_reg); 16519 16520 /* Also, force SERR#/PERR# in PCI command. */ 16521 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16522 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 16523 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16524 } 16525 } 16526 16527 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 16528 tg3_flag_set(tp, PCI_HIGH_SPEED); 16529 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 16530 tg3_flag_set(tp, PCI_32BIT); 16531 16532 /* Chip-specific fixup from Broadcom driver */ 16533 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) && 16534 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 16535 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 16536 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 16537 } 16538 16539 /* Default fast path register access methods */ 16540 tp->read32 = tg3_read32; 16541 tp->write32 = tg3_write32; 16542 tp->read32_mbox = tg3_read32; 16543 tp->write32_mbox = tg3_write32; 16544 tp->write32_tx_mbox = tg3_write32; 16545 tp->write32_rx_mbox = tg3_write32; 16546 16547 /* Various workaround register access methods */ 16548 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 16549 tp->write32 = tg3_write_indirect_reg32; 16550 else if (tg3_asic_rev(tp) == ASIC_REV_5701 || 16551 (tg3_flag(tp, PCI_EXPRESS) && 16552 tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) { 16553 /* 16554 * Back to back register writes can cause problems on these 16555 * chips, the workaround is to read back all reg writes 16556 * except those to mailbox regs. 16557 * 16558 * See tg3_write_indirect_reg32(). 16559 */ 16560 tp->write32 = tg3_write_flush_reg32; 16561 } 16562 16563 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 16564 tp->write32_tx_mbox = tg3_write32_tx_mbox; 16565 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 16566 tp->write32_rx_mbox = tg3_write_flush_reg32; 16567 } 16568 16569 if (tg3_flag(tp, ICH_WORKAROUND)) { 16570 tp->read32 = tg3_read_indirect_reg32; 16571 tp->write32 = tg3_write_indirect_reg32; 16572 tp->read32_mbox = tg3_read_indirect_mbox; 16573 tp->write32_mbox = tg3_write_indirect_mbox; 16574 tp->write32_tx_mbox = tg3_write_indirect_mbox; 16575 tp->write32_rx_mbox = tg3_write_indirect_mbox; 16576 16577 iounmap(tp->regs); 16578 tp->regs = NULL; 16579 16580 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16581 pci_cmd &= ~PCI_COMMAND_MEMORY; 16582 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16583 } 16584 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16585 tp->read32_mbox = tg3_read32_mbox_5906; 16586 tp->write32_mbox = tg3_write32_mbox_5906; 16587 tp->write32_tx_mbox = tg3_write32_mbox_5906; 16588 tp->write32_rx_mbox = tg3_write32_mbox_5906; 16589 } 16590 16591 if (tp->write32 == tg3_write_indirect_reg32 || 16592 (tg3_flag(tp, PCIX_MODE) && 16593 (tg3_asic_rev(tp) == ASIC_REV_5700 || 16594 tg3_asic_rev(tp) == ASIC_REV_5701))) 16595 tg3_flag_set(tp, SRAM_USE_CONFIG); 16596 16597 /* The memory arbiter has to be enabled in order for SRAM accesses 16598 * to succeed. Normally on powerup the tg3 chip firmware will make 16599 * sure it is enabled, but other entities such as system netboot 16600 * code might disable it. 16601 */ 16602 val = tr32(MEMARB_MODE); 16603 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 16604 16605 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 16606 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16607 tg3_flag(tp, 5780_CLASS)) { 16608 if (tg3_flag(tp, PCIX_MODE)) { 16609 pci_read_config_dword(tp->pdev, 16610 tp->pcix_cap + PCI_X_STATUS, 16611 &val); 16612 tp->pci_fn = val & 0x7; 16613 } 16614 } else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16615 tg3_asic_rev(tp) == ASIC_REV_5719 || 16616 tg3_asic_rev(tp) == ASIC_REV_5720) { 16617 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 16618 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG) 16619 val = tr32(TG3_CPMU_STATUS); 16620 16621 if (tg3_asic_rev(tp) == ASIC_REV_5717) 16622 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0; 16623 else 16624 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 16625 TG3_CPMU_STATUS_FSHFT_5719; 16626 } 16627 16628 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 16629 tp->write32_tx_mbox = tg3_write_flush_reg32; 16630 tp->write32_rx_mbox = tg3_write_flush_reg32; 16631 } 16632 16633 /* Get eeprom hw config before calling tg3_set_power_state(). 16634 * In particular, the TG3_FLAG_IS_NIC flag must be 16635 * determined before calling tg3_set_power_state() so that 16636 * we know whether or not to switch out of Vaux power. 16637 * When the flag is set, it means that GPIO1 is used for eeprom 16638 * write protect and also implies that it is a LOM where GPIOs 16639 * are not used to switch power. 16640 */ 16641 tg3_get_eeprom_hw_cfg(tp); 16642 16643 if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) { 16644 tg3_flag_clear(tp, TSO_CAPABLE); 16645 tg3_flag_clear(tp, TSO_BUG); 16646 tp->fw_needed = NULL; 16647 } 16648 16649 if (tg3_flag(tp, ENABLE_APE)) { 16650 /* Allow reads and writes to the 16651 * APE register and memory space. 16652 */ 16653 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 16654 PCISTATE_ALLOW_APE_SHMEM_WR | 16655 PCISTATE_ALLOW_APE_PSPACE_WR; 16656 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 16657 pci_state_reg); 16658 16659 tg3_ape_lock_init(tp); 16660 tp->ape_hb_interval = 16661 msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC); 16662 } 16663 16664 /* Set up tp->grc_local_ctrl before calling 16665 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 16666 * will bring 5700's external PHY out of reset. 16667 * It is also used as eeprom write protect on LOMs. 16668 */ 16669 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 16670 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16671 tg3_flag(tp, EEPROM_WRITE_PROT)) 16672 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 16673 GRC_LCLCTRL_GPIO_OUTPUT1); 16674 /* Unused GPIO3 must be driven as output on 5752 because there 16675 * are no pull-up resistors on unused GPIO pins. 16676 */ 16677 else if (tg3_asic_rev(tp) == ASIC_REV_5752) 16678 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 16679 16680 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16681 tg3_asic_rev(tp) == ASIC_REV_57780 || 16682 tg3_flag(tp, 57765_CLASS)) 16683 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16684 16685 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 16686 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 16687 /* Turn off the debug UART. */ 16688 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16689 if (tg3_flag(tp, IS_NIC)) 16690 /* Keep VMain power. */ 16691 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 16692 GRC_LCLCTRL_GPIO_OUTPUT0; 16693 } 16694 16695 if (tg3_asic_rev(tp) == ASIC_REV_5762) 16696 tp->grc_local_ctrl |= 16697 tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL; 16698 16699 /* Switch out of Vaux if it is a NIC */ 16700 tg3_pwrsrc_switch_to_vmain(tp); 16701 16702 /* Derive initial jumbo mode from MTU assigned in 16703 * ether_setup() via the alloc_etherdev() call 16704 */ 16705 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 16706 tg3_flag_set(tp, JUMBO_RING_ENABLE); 16707 16708 /* Determine WakeOnLan speed to use. */ 16709 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16710 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16711 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16712 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) { 16713 tg3_flag_clear(tp, WOL_SPEED_100MB); 16714 } else { 16715 tg3_flag_set(tp, WOL_SPEED_100MB); 16716 } 16717 16718 if (tg3_asic_rev(tp) == ASIC_REV_5906) 16719 tp->phy_flags |= TG3_PHYFLG_IS_FET; 16720 16721 /* A few boards don't want Ethernet@WireSpeed phy feature */ 16722 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16723 (tg3_asic_rev(tp) == ASIC_REV_5705 && 16724 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) && 16725 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) || 16726 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 16727 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 16728 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 16729 16730 if (tg3_chip_rev(tp) == CHIPREV_5703_AX || 16731 tg3_chip_rev(tp) == CHIPREV_5704_AX) 16732 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 16733 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) 16734 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 16735 16736 if (tg3_flag(tp, 5705_PLUS) && 16737 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 16738 tg3_asic_rev(tp) != ASIC_REV_5785 && 16739 tg3_asic_rev(tp) != ASIC_REV_57780 && 16740 !tg3_flag(tp, 57765_PLUS)) { 16741 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16742 tg3_asic_rev(tp) == ASIC_REV_5787 || 16743 tg3_asic_rev(tp) == ASIC_REV_5784 || 16744 tg3_asic_rev(tp) == ASIC_REV_5761) { 16745 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 16746 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 16747 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 16748 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 16749 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 16750 } else 16751 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 16752 } 16753 16754 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 16755 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 16756 tp->phy_otp = tg3_read_otp_phycfg(tp); 16757 if (tp->phy_otp == 0) 16758 tp->phy_otp = TG3_OTP_DEFAULT; 16759 } 16760 16761 if (tg3_flag(tp, CPMU_PRESENT)) 16762 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 16763 else 16764 tp->mi_mode = MAC_MI_MODE_BASE; 16765 16766 tp->coalesce_mode = 0; 16767 if (tg3_chip_rev(tp) != CHIPREV_5700_AX && 16768 tg3_chip_rev(tp) != CHIPREV_5700_BX) 16769 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 16770 16771 /* Set these bits to enable statistics workaround. */ 16772 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16773 tg3_asic_rev(tp) == ASIC_REV_5762 || 16774 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 16775 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) { 16776 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 16777 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 16778 } 16779 16780 if (tg3_asic_rev(tp) == ASIC_REV_5785 || 16781 tg3_asic_rev(tp) == ASIC_REV_57780) 16782 tg3_flag_set(tp, USE_PHYLIB); 16783 16784 err = tg3_mdio_init(tp); 16785 if (err) 16786 return err; 16787 16788 /* Initialize data/descriptor byte/word swapping. */ 16789 val = tr32(GRC_MODE); 16790 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 16791 tg3_asic_rev(tp) == ASIC_REV_5762) 16792 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 16793 GRC_MODE_WORD_SWAP_B2HRX_DATA | 16794 GRC_MODE_B2HRX_ENABLE | 16795 GRC_MODE_HTX2B_ENABLE | 16796 GRC_MODE_HOST_STACKUP); 16797 else 16798 val &= GRC_MODE_HOST_STACKUP; 16799 16800 tw32(GRC_MODE, val | tp->grc_mode); 16801 16802 tg3_switch_clocks(tp); 16803 16804 /* Clear this out for sanity. */ 16805 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 16806 16807 /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */ 16808 tw32(TG3PCI_REG_BASE_ADDR, 0); 16809 16810 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16811 &pci_state_reg); 16812 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 16813 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 16814 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16815 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16816 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 || 16817 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) { 16818 void __iomem *sram_base; 16819 16820 /* Write some dummy words into the SRAM status block 16821 * area, see if it reads back correctly. If the return 16822 * value is bad, force enable the PCIX workaround. 16823 */ 16824 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 16825 16826 writel(0x00000000, sram_base); 16827 writel(0x00000000, sram_base + 4); 16828 writel(0xffffffff, sram_base + 4); 16829 if (readl(sram_base) != 0x00000000) 16830 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16831 } 16832 } 16833 16834 udelay(50); 16835 tg3_nvram_init(tp); 16836 16837 /* If the device has an NVRAM, no need to load patch firmware */ 16838 if (tg3_asic_rev(tp) == ASIC_REV_57766 && 16839 !tg3_flag(tp, NO_NVRAM)) 16840 tp->fw_needed = NULL; 16841 16842 grc_misc_cfg = tr32(GRC_MISC_CFG); 16843 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 16844 16845 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 16846 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 16847 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 16848 tg3_flag_set(tp, IS_5788); 16849 16850 if (!tg3_flag(tp, IS_5788) && 16851 tg3_asic_rev(tp) != ASIC_REV_5700) 16852 tg3_flag_set(tp, TAGGED_STATUS); 16853 if (tg3_flag(tp, TAGGED_STATUS)) { 16854 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 16855 HOSTCC_MODE_CLRTICK_TXBD); 16856 16857 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 16858 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16859 tp->misc_host_ctrl); 16860 } 16861 16862 /* Preserve the APE MAC_MODE bits */ 16863 if (tg3_flag(tp, ENABLE_APE)) 16864 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 16865 else 16866 tp->mac_mode = 0; 16867 16868 if (tg3_10_100_only_device(tp, ent)) 16869 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 16870 16871 err = tg3_phy_probe(tp); 16872 if (err) { 16873 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 16874 /* ... but do not return immediately ... */ 16875 tg3_mdio_fini(tp); 16876 } 16877 16878 tg3_read_vpd(tp); 16879 tg3_read_fw_ver(tp); 16880 16881 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 16882 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16883 } else { 16884 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16885 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16886 else 16887 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16888 } 16889 16890 /* 5700 {AX,BX} chips have a broken status block link 16891 * change bit implementation, so we must use the 16892 * status register in those cases. 16893 */ 16894 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16895 tg3_flag_set(tp, USE_LINKCHG_REG); 16896 else 16897 tg3_flag_clear(tp, USE_LINKCHG_REG); 16898 16899 /* The led_ctrl is set during tg3_phy_probe, here we might 16900 * have to force the link status polling mechanism based 16901 * upon subsystem IDs. 16902 */ 16903 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 16904 tg3_asic_rev(tp) == ASIC_REV_5701 && 16905 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 16906 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16907 tg3_flag_set(tp, USE_LINKCHG_REG); 16908 } 16909 16910 /* For all SERDES we poll the MAC status register. */ 16911 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 16912 tg3_flag_set(tp, POLL_SERDES); 16913 else 16914 tg3_flag_clear(tp, POLL_SERDES); 16915 16916 if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF)) 16917 tg3_flag_set(tp, POLL_CPMU_LINK); 16918 16919 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 16920 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 16921 if (tg3_asic_rev(tp) == ASIC_REV_5701 && 16922 tg3_flag(tp, PCIX_MODE)) { 16923 tp->rx_offset = NET_SKB_PAD; 16924#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 16925 tp->rx_copy_thresh = ~(u16)0; 16926#endif 16927 } 16928 16929 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 16930 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 16931 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 16932 16933 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 16934 16935 /* Increment the rx prod index on the rx std ring by at most 16936 * 8 for these chips to workaround hw errata. 16937 */ 16938 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16939 tg3_asic_rev(tp) == ASIC_REV_5752 || 16940 tg3_asic_rev(tp) == ASIC_REV_5755) 16941 tp->rx_std_max_post = 8; 16942 16943 if (tg3_flag(tp, ASPM_WORKAROUND)) 16944 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 16945 PCIE_PWR_MGMT_L1_THRESH_MSK; 16946 16947 return err; 16948} 16949 16950static int tg3_get_device_address(struct tg3 *tp, u8 *addr) 16951{ 16952 u32 hi, lo, mac_offset; 16953 int addr_ok = 0; 16954 int err; 16955 16956 if (!eth_platform_get_mac_address(&tp->pdev->dev, addr)) 16957 return 0; 16958 16959 if (tg3_flag(tp, IS_SSB_CORE)) { 16960 err = ssb_gige_get_macaddr(tp->pdev, addr); 16961 if (!err && is_valid_ether_addr(addr)) 16962 return 0; 16963 } 16964 16965 mac_offset = 0x7c; 16966 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16967 tg3_flag(tp, 5780_CLASS)) { 16968 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 16969 mac_offset = 0xcc; 16970 if (tg3_nvram_lock(tp)) 16971 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 16972 else 16973 tg3_nvram_unlock(tp); 16974 } else if (tg3_flag(tp, 5717_PLUS)) { 16975 if (tp->pci_fn & 1) 16976 mac_offset = 0xcc; 16977 if (tp->pci_fn > 1) 16978 mac_offset += 0x18c; 16979 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) 16980 mac_offset = 0x10; 16981 16982 /* First try to get it from MAC address mailbox. */ 16983 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 16984 if ((hi >> 16) == 0x484b) { 16985 addr[0] = (hi >> 8) & 0xff; 16986 addr[1] = (hi >> 0) & 0xff; 16987 16988 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 16989 addr[2] = (lo >> 24) & 0xff; 16990 addr[3] = (lo >> 16) & 0xff; 16991 addr[4] = (lo >> 8) & 0xff; 16992 addr[5] = (lo >> 0) & 0xff; 16993 16994 /* Some old bootcode may report a 0 MAC address in SRAM */ 16995 addr_ok = is_valid_ether_addr(addr); 16996 } 16997 if (!addr_ok) { 16998 /* Next, try NVRAM. */ 16999 if (!tg3_flag(tp, NO_NVRAM) && 17000 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 17001 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 17002 memcpy(&addr[0], ((char *)&hi) + 2, 2); 17003 memcpy(&addr[2], (char *)&lo, sizeof(lo)); 17004 } 17005 /* Finally just fetch it out of the MAC control regs. */ 17006 else { 17007 hi = tr32(MAC_ADDR_0_HIGH); 17008 lo = tr32(MAC_ADDR_0_LOW); 17009 17010 addr[5] = lo & 0xff; 17011 addr[4] = (lo >> 8) & 0xff; 17012 addr[3] = (lo >> 16) & 0xff; 17013 addr[2] = (lo >> 24) & 0xff; 17014 addr[1] = hi & 0xff; 17015 addr[0] = (hi >> 8) & 0xff; 17016 } 17017 } 17018 17019 if (!is_valid_ether_addr(addr)) 17020 return -EINVAL; 17021 return 0; 17022} 17023 17024#define BOUNDARY_SINGLE_CACHELINE 1 17025#define BOUNDARY_MULTI_CACHELINE 2 17026 17027static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 17028{ 17029 int cacheline_size; 17030 u8 byte; 17031 int goal; 17032 17033 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 17034 if (byte == 0) 17035 cacheline_size = 1024; 17036 else 17037 cacheline_size = (int) byte * 4; 17038 17039 /* On 5703 and later chips, the boundary bits have no 17040 * effect. 17041 */ 17042 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17043 tg3_asic_rev(tp) != ASIC_REV_5701 && 17044 !tg3_flag(tp, PCI_EXPRESS)) 17045 goto out; 17046 17047#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 17048 goal = BOUNDARY_MULTI_CACHELINE; 17049#else 17050#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 17051 goal = BOUNDARY_SINGLE_CACHELINE; 17052#else 17053 goal = 0; 17054#endif 17055#endif 17056 17057 if (tg3_flag(tp, 57765_PLUS)) { 17058 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 17059 goto out; 17060 } 17061 17062 if (!goal) 17063 goto out; 17064 17065 /* PCI controllers on most RISC systems tend to disconnect 17066 * when a device tries to burst across a cache-line boundary. 17067 * Therefore, letting tg3 do so just wastes PCI bandwidth. 17068 * 17069 * Unfortunately, for PCI-E there are only limited 17070 * write-side controls for this, and thus for reads 17071 * we will still get the disconnects. We'll also waste 17072 * these PCI cycles for both read and write for chips 17073 * other than 5700 and 5701 which do not implement the 17074 * boundary bits. 17075 */ 17076 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 17077 switch (cacheline_size) { 17078 case 16: 17079 case 32: 17080 case 64: 17081 case 128: 17082 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17083 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 17084 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 17085 } else { 17086 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17087 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17088 } 17089 break; 17090 17091 case 256: 17092 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 17093 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 17094 break; 17095 17096 default: 17097 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17098 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17099 break; 17100 } 17101 } else if (tg3_flag(tp, PCI_EXPRESS)) { 17102 switch (cacheline_size) { 17103 case 16: 17104 case 32: 17105 case 64: 17106 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17107 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17108 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 17109 break; 17110 } 17111 fallthrough; 17112 case 128: 17113 default: 17114 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17115 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 17116 break; 17117 } 17118 } else { 17119 switch (cacheline_size) { 17120 case 16: 17121 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17122 val |= (DMA_RWCTRL_READ_BNDRY_16 | 17123 DMA_RWCTRL_WRITE_BNDRY_16); 17124 break; 17125 } 17126 fallthrough; 17127 case 32: 17128 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17129 val |= (DMA_RWCTRL_READ_BNDRY_32 | 17130 DMA_RWCTRL_WRITE_BNDRY_32); 17131 break; 17132 } 17133 fallthrough; 17134 case 64: 17135 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17136 val |= (DMA_RWCTRL_READ_BNDRY_64 | 17137 DMA_RWCTRL_WRITE_BNDRY_64); 17138 break; 17139 } 17140 fallthrough; 17141 case 128: 17142 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17143 val |= (DMA_RWCTRL_READ_BNDRY_128 | 17144 DMA_RWCTRL_WRITE_BNDRY_128); 17145 break; 17146 } 17147 fallthrough; 17148 case 256: 17149 val |= (DMA_RWCTRL_READ_BNDRY_256 | 17150 DMA_RWCTRL_WRITE_BNDRY_256); 17151 break; 17152 case 512: 17153 val |= (DMA_RWCTRL_READ_BNDRY_512 | 17154 DMA_RWCTRL_WRITE_BNDRY_512); 17155 break; 17156 case 1024: 17157 default: 17158 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 17159 DMA_RWCTRL_WRITE_BNDRY_1024); 17160 break; 17161 } 17162 } 17163 17164out: 17165 return val; 17166} 17167 17168static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, 17169 int size, bool to_device) 17170{ 17171 struct tg3_internal_buffer_desc test_desc; 17172 u32 sram_dma_descs; 17173 int i, ret; 17174 17175 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 17176 17177 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 17178 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 17179 tw32(RDMAC_STATUS, 0); 17180 tw32(WDMAC_STATUS, 0); 17181 17182 tw32(BUFMGR_MODE, 0); 17183 tw32(FTQ_RESET, 0); 17184 17185 test_desc.addr_hi = ((u64) buf_dma) >> 32; 17186 test_desc.addr_lo = buf_dma & 0xffffffff; 17187 test_desc.nic_mbuf = 0x00002100; 17188 test_desc.len = size; 17189 17190 /* 17191 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 17192 * the *second* time the tg3 driver was getting loaded after an 17193 * initial scan. 17194 * 17195 * Broadcom tells me: 17196 * ...the DMA engine is connected to the GRC block and a DMA 17197 * reset may affect the GRC block in some unpredictable way... 17198 * The behavior of resets to individual blocks has not been tested. 17199 * 17200 * Broadcom noted the GRC reset will also reset all sub-components. 17201 */ 17202 if (to_device) { 17203 test_desc.cqid_sqid = (13 << 8) | 2; 17204 17205 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 17206 udelay(40); 17207 } else { 17208 test_desc.cqid_sqid = (16 << 8) | 7; 17209 17210 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 17211 udelay(40); 17212 } 17213 test_desc.flags = 0x00000005; 17214 17215 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 17216 u32 val; 17217 17218 val = *(((u32 *)&test_desc) + i); 17219 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 17220 sram_dma_descs + (i * sizeof(u32))); 17221 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 17222 } 17223 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 17224 17225 if (to_device) 17226 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 17227 else 17228 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 17229 17230 ret = -ENODEV; 17231 for (i = 0; i < 40; i++) { 17232 u32 val; 17233 17234 if (to_device) 17235 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 17236 else 17237 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 17238 if ((val & 0xffff) == sram_dma_descs) { 17239 ret = 0; 17240 break; 17241 } 17242 17243 udelay(100); 17244 } 17245 17246 return ret; 17247} 17248 17249#define TEST_BUFFER_SIZE 0x2000 17250 17251static const struct pci_device_id tg3_dma_wait_state_chipsets[] = { 17252 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 17253 { }, 17254}; 17255 17256static int tg3_test_dma(struct tg3 *tp) 17257{ 17258 dma_addr_t buf_dma; 17259 u32 *buf, saved_dma_rwctrl; 17260 int ret = 0; 17261 17262 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 17263 &buf_dma, GFP_KERNEL); 17264 if (!buf) { 17265 ret = -ENOMEM; 17266 goto out_nofree; 17267 } 17268 17269 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 17270 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 17271 17272 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 17273 17274 if (tg3_flag(tp, 57765_PLUS)) 17275 goto out; 17276 17277 if (tg3_flag(tp, PCI_EXPRESS)) { 17278 /* DMA read watermark not used on PCIE */ 17279 tp->dma_rwctrl |= 0x00180000; 17280 } else if (!tg3_flag(tp, PCIX_MODE)) { 17281 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 17282 tg3_asic_rev(tp) == ASIC_REV_5750) 17283 tp->dma_rwctrl |= 0x003f0000; 17284 else 17285 tp->dma_rwctrl |= 0x003f000f; 17286 } else { 17287 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17288 tg3_asic_rev(tp) == ASIC_REV_5704) { 17289 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 17290 u32 read_water = 0x7; 17291 17292 /* If the 5704 is behind the EPB bridge, we can 17293 * do the less restrictive ONE_DMA workaround for 17294 * better performance. 17295 */ 17296 if (tg3_flag(tp, 40BIT_DMA_BUG) && 17297 tg3_asic_rev(tp) == ASIC_REV_5704) 17298 tp->dma_rwctrl |= 0x8000; 17299 else if (ccval == 0x6 || ccval == 0x7) 17300 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17301 17302 if (tg3_asic_rev(tp) == ASIC_REV_5703) 17303 read_water = 4; 17304 /* Set bit 23 to enable PCIX hw bug fix */ 17305 tp->dma_rwctrl |= 17306 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 17307 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 17308 (1 << 23); 17309 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) { 17310 /* 5780 always in PCIX mode */ 17311 tp->dma_rwctrl |= 0x00144000; 17312 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) { 17313 /* 5714 always in PCIX mode */ 17314 tp->dma_rwctrl |= 0x00148000; 17315 } else { 17316 tp->dma_rwctrl |= 0x001b000f; 17317 } 17318 } 17319 if (tg3_flag(tp, ONE_DMA_AT_ONCE)) 17320 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17321 17322 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17323 tg3_asic_rev(tp) == ASIC_REV_5704) 17324 tp->dma_rwctrl &= 0xfffffff0; 17325 17326 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 17327 tg3_asic_rev(tp) == ASIC_REV_5701) { 17328 /* Remove this if it causes problems for some boards. */ 17329 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 17330 17331 /* On 5700/5701 chips, we need to set this bit. 17332 * Otherwise the chip will issue cacheline transactions 17333 * to streamable DMA memory with not all the byte 17334 * enables turned on. This is an error on several 17335 * RISC PCI controllers, in particular sparc64. 17336 * 17337 * On 5703/5704 chips, this bit has been reassigned 17338 * a different meaning. In particular, it is used 17339 * on those chips to enable a PCI-X workaround. 17340 */ 17341 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 17342 } 17343 17344 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17345 17346 17347 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17348 tg3_asic_rev(tp) != ASIC_REV_5701) 17349 goto out; 17350 17351 /* It is best to perform DMA test with maximum write burst size 17352 * to expose the 5700/5701 write DMA bug. 17353 */ 17354 saved_dma_rwctrl = tp->dma_rwctrl; 17355 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17356 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17357 17358 while (1) { 17359 u32 *p = buf, i; 17360 17361 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 17362 p[i] = i; 17363 17364 /* Send the buffer to the chip. */ 17365 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true); 17366 if (ret) { 17367 dev_err(&tp->pdev->dev, 17368 "%s: Buffer write failed. err = %d\n", 17369 __func__, ret); 17370 break; 17371 } 17372 17373 /* Now read it back. */ 17374 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false); 17375 if (ret) { 17376 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 17377 "err = %d\n", __func__, ret); 17378 break; 17379 } 17380 17381 /* Verify it. */ 17382 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 17383 if (p[i] == i) 17384 continue; 17385 17386 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17387 DMA_RWCTRL_WRITE_BNDRY_16) { 17388 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17389 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17390 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17391 break; 17392 } else { 17393 dev_err(&tp->pdev->dev, 17394 "%s: Buffer corrupted on read back! " 17395 "(%d != %d)\n", __func__, p[i], i); 17396 ret = -ENODEV; 17397 goto out; 17398 } 17399 } 17400 17401 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 17402 /* Success. */ 17403 ret = 0; 17404 break; 17405 } 17406 } 17407 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17408 DMA_RWCTRL_WRITE_BNDRY_16) { 17409 /* DMA test passed without adjusting DMA boundary, 17410 * now look for chipsets that are known to expose the 17411 * DMA bug without failing the test. 17412 */ 17413 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 17414 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17415 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17416 } else { 17417 /* Safe to use the calculated DMA boundary. */ 17418 tp->dma_rwctrl = saved_dma_rwctrl; 17419 } 17420 17421 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17422 } 17423 17424out: 17425 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 17426out_nofree: 17427 return ret; 17428} 17429 17430static void tg3_init_bufmgr_config(struct tg3 *tp) 17431{ 17432 if (tg3_flag(tp, 57765_PLUS)) { 17433 tp->bufmgr_config.mbuf_read_dma_low_water = 17434 DEFAULT_MB_RDMA_LOW_WATER_5705; 17435 tp->bufmgr_config.mbuf_mac_rx_low_water = 17436 DEFAULT_MB_MACRX_LOW_WATER_57765; 17437 tp->bufmgr_config.mbuf_high_water = 17438 DEFAULT_MB_HIGH_WATER_57765; 17439 17440 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17441 DEFAULT_MB_RDMA_LOW_WATER_5705; 17442 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17443 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 17444 tp->bufmgr_config.mbuf_high_water_jumbo = 17445 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 17446 } else if (tg3_flag(tp, 5705_PLUS)) { 17447 tp->bufmgr_config.mbuf_read_dma_low_water = 17448 DEFAULT_MB_RDMA_LOW_WATER_5705; 17449 tp->bufmgr_config.mbuf_mac_rx_low_water = 17450 DEFAULT_MB_MACRX_LOW_WATER_5705; 17451 tp->bufmgr_config.mbuf_high_water = 17452 DEFAULT_MB_HIGH_WATER_5705; 17453 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 17454 tp->bufmgr_config.mbuf_mac_rx_low_water = 17455 DEFAULT_MB_MACRX_LOW_WATER_5906; 17456 tp->bufmgr_config.mbuf_high_water = 17457 DEFAULT_MB_HIGH_WATER_5906; 17458 } 17459 17460 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17461 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 17462 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17463 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 17464 tp->bufmgr_config.mbuf_high_water_jumbo = 17465 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 17466 } else { 17467 tp->bufmgr_config.mbuf_read_dma_low_water = 17468 DEFAULT_MB_RDMA_LOW_WATER; 17469 tp->bufmgr_config.mbuf_mac_rx_low_water = 17470 DEFAULT_MB_MACRX_LOW_WATER; 17471 tp->bufmgr_config.mbuf_high_water = 17472 DEFAULT_MB_HIGH_WATER; 17473 17474 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17475 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 17476 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17477 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 17478 tp->bufmgr_config.mbuf_high_water_jumbo = 17479 DEFAULT_MB_HIGH_WATER_JUMBO; 17480 } 17481 17482 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 17483 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 17484} 17485 17486static char *tg3_phy_string(struct tg3 *tp) 17487{ 17488 switch (tp->phy_id & TG3_PHY_ID_MASK) { 17489 case TG3_PHY_ID_BCM5400: return "5400"; 17490 case TG3_PHY_ID_BCM5401: return "5401"; 17491 case TG3_PHY_ID_BCM5411: return "5411"; 17492 case TG3_PHY_ID_BCM5701: return "5701"; 17493 case TG3_PHY_ID_BCM5703: return "5703"; 17494 case TG3_PHY_ID_BCM5704: return "5704"; 17495 case TG3_PHY_ID_BCM5705: return "5705"; 17496 case TG3_PHY_ID_BCM5750: return "5750"; 17497 case TG3_PHY_ID_BCM5752: return "5752"; 17498 case TG3_PHY_ID_BCM5714: return "5714"; 17499 case TG3_PHY_ID_BCM5780: return "5780"; 17500 case TG3_PHY_ID_BCM5755: return "5755"; 17501 case TG3_PHY_ID_BCM5787: return "5787"; 17502 case TG3_PHY_ID_BCM5784: return "5784"; 17503 case TG3_PHY_ID_BCM5756: return "5722/5756"; 17504 case TG3_PHY_ID_BCM5906: return "5906"; 17505 case TG3_PHY_ID_BCM5761: return "5761"; 17506 case TG3_PHY_ID_BCM5718C: return "5718C"; 17507 case TG3_PHY_ID_BCM5718S: return "5718S"; 17508 case TG3_PHY_ID_BCM57765: return "57765"; 17509 case TG3_PHY_ID_BCM5719C: return "5719C"; 17510 case TG3_PHY_ID_BCM5720C: return "5720C"; 17511 case TG3_PHY_ID_BCM5762: return "5762C"; 17512 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 17513 case 0: return "serdes"; 17514 default: return "unknown"; 17515 } 17516} 17517 17518static char *tg3_bus_string(struct tg3 *tp, char *str) 17519{ 17520 if (tg3_flag(tp, PCI_EXPRESS)) { 17521 strcpy(str, "PCI Express"); 17522 return str; 17523 } else if (tg3_flag(tp, PCIX_MODE)) { 17524 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 17525 17526 strcpy(str, "PCIX:"); 17527 17528 if ((clock_ctrl == 7) || 17529 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 17530 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 17531 strcat(str, "133MHz"); 17532 else if (clock_ctrl == 0) 17533 strcat(str, "33MHz"); 17534 else if (clock_ctrl == 2) 17535 strcat(str, "50MHz"); 17536 else if (clock_ctrl == 4) 17537 strcat(str, "66MHz"); 17538 else if (clock_ctrl == 6) 17539 strcat(str, "100MHz"); 17540 } else { 17541 strcpy(str, "PCI:"); 17542 if (tg3_flag(tp, PCI_HIGH_SPEED)) 17543 strcat(str, "66MHz"); 17544 else 17545 strcat(str, "33MHz"); 17546 } 17547 if (tg3_flag(tp, PCI_32BIT)) 17548 strcat(str, ":32-bit"); 17549 else 17550 strcat(str, ":64-bit"); 17551 return str; 17552} 17553 17554static void tg3_init_coal(struct tg3 *tp) 17555{ 17556 struct ethtool_coalesce *ec = &tp->coal; 17557 17558 memset(ec, 0, sizeof(*ec)); 17559 ec->cmd = ETHTOOL_GCOALESCE; 17560 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 17561 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 17562 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 17563 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 17564 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 17565 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 17566 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 17567 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 17568 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 17569 17570 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 17571 HOSTCC_MODE_CLRTICK_TXBD)) { 17572 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 17573 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 17574 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 17575 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 17576 } 17577 17578 if (tg3_flag(tp, 5705_PLUS)) { 17579 ec->rx_coalesce_usecs_irq = 0; 17580 ec->tx_coalesce_usecs_irq = 0; 17581 ec->stats_block_coalesce_usecs = 0; 17582 } 17583} 17584 17585static int tg3_init_one(struct pci_dev *pdev, 17586 const struct pci_device_id *ent) 17587{ 17588 struct net_device *dev; 17589 struct tg3 *tp; 17590 int i, err; 17591 u32 sndmbx, rcvmbx, intmbx; 17592 char str[40]; 17593 u64 dma_mask, persist_dma_mask; 17594 netdev_features_t features = 0; 17595 u8 addr[ETH_ALEN] __aligned(2); 17596 17597 err = pci_enable_device(pdev); 17598 if (err) { 17599 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 17600 return err; 17601 } 17602 17603 err = pci_request_regions(pdev, DRV_MODULE_NAME); 17604 if (err) { 17605 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 17606 goto err_out_disable_pdev; 17607 } 17608 17609 pci_set_master(pdev); 17610 17611 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 17612 if (!dev) { 17613 err = -ENOMEM; 17614 goto err_out_free_res; 17615 } 17616 17617 SET_NETDEV_DEV(dev, &pdev->dev); 17618 17619 tp = netdev_priv(dev); 17620 tp->pdev = pdev; 17621 tp->dev = dev; 17622 tp->rx_mode = TG3_DEF_RX_MODE; 17623 tp->tx_mode = TG3_DEF_TX_MODE; 17624 tp->irq_sync = 1; 17625 tp->pcierr_recovery = false; 17626 17627 if (tg3_debug > 0) 17628 tp->msg_enable = tg3_debug; 17629 else 17630 tp->msg_enable = TG3_DEF_MSG_ENABLE; 17631 17632 if (pdev_is_ssb_gige_core(pdev)) { 17633 tg3_flag_set(tp, IS_SSB_CORE); 17634 if (ssb_gige_must_flush_posted_writes(pdev)) 17635 tg3_flag_set(tp, FLUSH_POSTED_WRITES); 17636 if (ssb_gige_one_dma_at_once(pdev)) 17637 tg3_flag_set(tp, ONE_DMA_AT_ONCE); 17638 if (ssb_gige_have_roboswitch(pdev)) { 17639 tg3_flag_set(tp, USE_PHYLIB); 17640 tg3_flag_set(tp, ROBOSWITCH); 17641 } 17642 if (ssb_gige_is_rgmii(pdev)) 17643 tg3_flag_set(tp, RGMII_MODE); 17644 } 17645 17646 /* The word/byte swap controls here control register access byte 17647 * swapping. DMA data byte swapping is controlled in the GRC_MODE 17648 * setting below. 17649 */ 17650 tp->misc_host_ctrl = 17651 MISC_HOST_CTRL_MASK_PCI_INT | 17652 MISC_HOST_CTRL_WORD_SWAP | 17653 MISC_HOST_CTRL_INDIR_ACCESS | 17654 MISC_HOST_CTRL_PCISTATE_RW; 17655 17656 /* The NONFRM (non-frame) byte/word swap controls take effect 17657 * on descriptor entries, anything which isn't packet data. 17658 * 17659 * The StrongARM chips on the board (one for tx, one for rx) 17660 * are running in big-endian mode. 17661 */ 17662 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 17663 GRC_MODE_WSWAP_NONFRM_DATA); 17664#ifdef __BIG_ENDIAN 17665 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 17666#endif 17667 spin_lock_init(&tp->lock); 17668 spin_lock_init(&tp->indirect_lock); 17669 INIT_WORK(&tp->reset_task, tg3_reset_task); 17670 17671 tp->regs = pci_ioremap_bar(pdev, BAR_0); 17672 if (!tp->regs) { 17673 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 17674 err = -ENOMEM; 17675 goto err_out_free_dev; 17676 } 17677 17678 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 17679 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 17680 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 17681 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 17682 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 17683 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 17684 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 17685 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 17686 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 17687 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 17688 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 17689 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 17690 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 17691 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 17692 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) { 17693 tg3_flag_set(tp, ENABLE_APE); 17694 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 17695 if (!tp->aperegs) { 17696 dev_err(&pdev->dev, 17697 "Cannot map APE registers, aborting\n"); 17698 err = -ENOMEM; 17699 goto err_out_iounmap; 17700 } 17701 } 17702 17703 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 17704 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 17705 17706 dev->ethtool_ops = &tg3_ethtool_ops; 17707 dev->watchdog_timeo = TG3_TX_TIMEOUT; 17708 dev->netdev_ops = &tg3_netdev_ops; 17709 dev->irq = pdev->irq; 17710 17711 err = tg3_get_invariants(tp, ent); 17712 if (err) { 17713 dev_err(&pdev->dev, 17714 "Problem fetching invariants of chip, aborting\n"); 17715 goto err_out_apeunmap; 17716 } 17717 17718 /* The EPB bridge inside 5714, 5715, and 5780 and any 17719 * device behind the EPB cannot support DMA addresses > 40-bit. 17720 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 17721 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 17722 * do DMA address check in tg3_start_xmit(). 17723 */ 17724 if (tg3_flag(tp, IS_5788)) 17725 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 17726 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 17727 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 17728#ifdef CONFIG_HIGHMEM 17729 dma_mask = DMA_BIT_MASK(64); 17730#endif 17731 } else 17732 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 17733 17734 /* Configure DMA attributes. */ 17735 if (dma_mask > DMA_BIT_MASK(32)) { 17736 err = dma_set_mask(&pdev->dev, dma_mask); 17737 if (!err) { 17738 features |= NETIF_F_HIGHDMA; 17739 err = dma_set_coherent_mask(&pdev->dev, 17740 persist_dma_mask); 17741 if (err < 0) { 17742 dev_err(&pdev->dev, "Unable to obtain 64 bit " 17743 "DMA for consistent allocations\n"); 17744 goto err_out_apeunmap; 17745 } 17746 } 17747 } 17748 if (err || dma_mask == DMA_BIT_MASK(32)) { 17749 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); 17750 if (err) { 17751 dev_err(&pdev->dev, 17752 "No usable DMA configuration, aborting\n"); 17753 goto err_out_apeunmap; 17754 } 17755 } 17756 17757 tg3_init_bufmgr_config(tp); 17758 17759 /* 5700 B0 chips do not support checksumming correctly due 17760 * to hardware bugs. 17761 */ 17762 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) { 17763 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 17764 17765 if (tg3_flag(tp, 5755_PLUS)) 17766 features |= NETIF_F_IPV6_CSUM; 17767 } 17768 17769 /* TSO is on by default on chips that support hardware TSO. 17770 * Firmware TSO on older chips gives lower performance, so it 17771 * is off by default, but can be enabled using ethtool. 17772 */ 17773 if ((tg3_flag(tp, HW_TSO_1) || 17774 tg3_flag(tp, HW_TSO_2) || 17775 tg3_flag(tp, HW_TSO_3)) && 17776 (features & NETIF_F_IP_CSUM)) 17777 features |= NETIF_F_TSO; 17778 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 17779 if (features & NETIF_F_IPV6_CSUM) 17780 features |= NETIF_F_TSO6; 17781 if (tg3_flag(tp, HW_TSO_3) || 17782 tg3_asic_rev(tp) == ASIC_REV_5761 || 17783 (tg3_asic_rev(tp) == ASIC_REV_5784 && 17784 tg3_chip_rev(tp) != CHIPREV_5784_AX) || 17785 tg3_asic_rev(tp) == ASIC_REV_5785 || 17786 tg3_asic_rev(tp) == ASIC_REV_57780) 17787 features |= NETIF_F_TSO_ECN; 17788 } 17789 17790 dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX | 17791 NETIF_F_HW_VLAN_CTAG_RX; 17792 dev->vlan_features |= features; 17793 17794 /* 17795 * Add loopback capability only for a subset of devices that support 17796 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 17797 * loopback for the remaining devices. 17798 */ 17799 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 17800 !tg3_flag(tp, CPMU_PRESENT)) 17801 /* Add the loopback capability */ 17802 features |= NETIF_F_LOOPBACK; 17803 17804 dev->hw_features |= features; 17805 dev->priv_flags |= IFF_UNICAST_FLT; 17806 17807 /* MTU range: 60 - 9000 or 1500, depending on hardware */ 17808 dev->min_mtu = TG3_MIN_MTU; 17809 dev->max_mtu = TG3_MAX_MTU(tp); 17810 17811 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 && 17812 !tg3_flag(tp, TSO_CAPABLE) && 17813 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 17814 tg3_flag_set(tp, MAX_RXPEND_64); 17815 tp->rx_pending = 63; 17816 } 17817 17818 err = tg3_get_device_address(tp, addr); 17819 if (err) { 17820 dev_err(&pdev->dev, 17821 "Could not obtain valid ethernet address, aborting\n"); 17822 goto err_out_apeunmap; 17823 } 17824 eth_hw_addr_set(dev, addr); 17825 17826 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 17827 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 17828 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 17829 for (i = 0; i < tp->irq_max; i++) { 17830 struct tg3_napi *tnapi = &tp->napi[i]; 17831 17832 tnapi->tp = tp; 17833 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 17834 17835 tnapi->int_mbox = intmbx; 17836 intmbx += 0x8; 17837 17838 tnapi->consmbox = rcvmbx; 17839 tnapi->prodmbox = sndmbx; 17840 17841 if (i) 17842 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 17843 else 17844 tnapi->coal_now = HOSTCC_MODE_NOW; 17845 17846 if (!tg3_flag(tp, SUPPORT_MSIX)) 17847 break; 17848 17849 /* 17850 * If we support MSIX, we'll be using RSS. If we're using 17851 * RSS, the first vector only handles link interrupts and the 17852 * remaining vectors handle rx and tx interrupts. Reuse the 17853 * mailbox values for the next iteration. The values we setup 17854 * above are still useful for the single vectored mode. 17855 */ 17856 if (!i) 17857 continue; 17858 17859 rcvmbx += 0x8; 17860 17861 if (sndmbx & 0x4) 17862 sndmbx -= 0x4; 17863 else 17864 sndmbx += 0xc; 17865 } 17866 17867 /* 17868 * Reset chip in case UNDI or EFI driver did not shutdown 17869 * DMA self test will enable WDMAC and we'll see (spurious) 17870 * pending DMA on the PCI bus at that point. 17871 */ 17872 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 17873 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 17874 tg3_full_lock(tp, 0); 17875 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 17876 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 17877 tg3_full_unlock(tp); 17878 } 17879 17880 err = tg3_test_dma(tp); 17881 if (err) { 17882 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 17883 goto err_out_apeunmap; 17884 } 17885 17886 tg3_init_coal(tp); 17887 17888 pci_set_drvdata(pdev, dev); 17889 17890 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 17891 tg3_asic_rev(tp) == ASIC_REV_5720 || 17892 tg3_asic_rev(tp) == ASIC_REV_5762) 17893 tg3_flag_set(tp, PTP_CAPABLE); 17894 17895 tg3_timer_init(tp); 17896 17897 tg3_carrier_off(tp); 17898 17899 err = register_netdev(dev); 17900 if (err) { 17901 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 17902 goto err_out_apeunmap; 17903 } 17904 17905 if (tg3_flag(tp, PTP_CAPABLE)) { 17906 tg3_ptp_init(tp); 17907 tp->ptp_clock = ptp_clock_register(&tp->ptp_info, 17908 &tp->pdev->dev); 17909 if (IS_ERR(tp->ptp_clock)) 17910 tp->ptp_clock = NULL; 17911 } 17912 17913 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 17914 tp->board_part_number, 17915 tg3_chip_rev_id(tp), 17916 tg3_bus_string(tp, str), 17917 dev->dev_addr); 17918 17919 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) { 17920 char *ethtype; 17921 17922 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 17923 ethtype = "10/100Base-TX"; 17924 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 17925 ethtype = "1000Base-SX"; 17926 else 17927 ethtype = "10/100/1000Base-T"; 17928 17929 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 17930 "(WireSpeed[%d], EEE[%d])\n", 17931 tg3_phy_string(tp), ethtype, 17932 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 17933 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 17934 } 17935 17936 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 17937 (dev->features & NETIF_F_RXCSUM) != 0, 17938 tg3_flag(tp, USE_LINKCHG_REG) != 0, 17939 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 17940 tg3_flag(tp, ENABLE_ASF) != 0, 17941 tg3_flag(tp, TSO_CAPABLE) != 0); 17942 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 17943 tp->dma_rwctrl, 17944 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 17945 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 17946 17947 pci_save_state(pdev); 17948 17949 return 0; 17950 17951err_out_apeunmap: 17952 if (tp->aperegs) { 17953 iounmap(tp->aperegs); 17954 tp->aperegs = NULL; 17955 } 17956 17957err_out_iounmap: 17958 if (tp->regs) { 17959 iounmap(tp->regs); 17960 tp->regs = NULL; 17961 } 17962 17963err_out_free_dev: 17964 free_netdev(dev); 17965 17966err_out_free_res: 17967 pci_release_regions(pdev); 17968 17969err_out_disable_pdev: 17970 if (pci_is_enabled(pdev)) 17971 pci_disable_device(pdev); 17972 return err; 17973} 17974 17975static void tg3_remove_one(struct pci_dev *pdev) 17976{ 17977 struct net_device *dev = pci_get_drvdata(pdev); 17978 17979 if (dev) { 17980 struct tg3 *tp = netdev_priv(dev); 17981 17982 tg3_ptp_fini(tp); 17983 17984 release_firmware(tp->fw); 17985 17986 tg3_reset_task_cancel(tp); 17987 17988 if (tg3_flag(tp, USE_PHYLIB)) { 17989 tg3_phy_fini(tp); 17990 tg3_mdio_fini(tp); 17991 } 17992 17993 unregister_netdev(dev); 17994 if (tp->aperegs) { 17995 iounmap(tp->aperegs); 17996 tp->aperegs = NULL; 17997 } 17998 if (tp->regs) { 17999 iounmap(tp->regs); 18000 tp->regs = NULL; 18001 } 18002 free_netdev(dev); 18003 pci_release_regions(pdev); 18004 pci_disable_device(pdev); 18005 } 18006} 18007 18008#ifdef CONFIG_PM_SLEEP 18009static int tg3_suspend(struct device *device) 18010{ 18011 struct net_device *dev = dev_get_drvdata(device); 18012 struct tg3 *tp = netdev_priv(dev); 18013 int err = 0; 18014 18015 rtnl_lock(); 18016 18017 if (!netif_running(dev)) 18018 goto unlock; 18019 18020 tg3_reset_task_cancel(tp); 18021 tg3_phy_stop(tp); 18022 tg3_netif_stop(tp); 18023 18024 tg3_timer_stop(tp); 18025 18026 tg3_full_lock(tp, 1); 18027 tg3_disable_ints(tp); 18028 tg3_full_unlock(tp); 18029 18030 netif_device_detach(dev); 18031 18032 tg3_full_lock(tp, 0); 18033 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 18034 tg3_flag_clear(tp, INIT_COMPLETE); 18035 tg3_full_unlock(tp); 18036 18037 err = tg3_power_down_prepare(tp); 18038 if (err) { 18039 int err2; 18040 18041 tg3_full_lock(tp, 0); 18042 18043 tg3_flag_set(tp, INIT_COMPLETE); 18044 err2 = tg3_restart_hw(tp, true); 18045 if (err2) 18046 goto out; 18047 18048 tg3_timer_start(tp); 18049 18050 netif_device_attach(dev); 18051 tg3_netif_start(tp); 18052 18053out: 18054 tg3_full_unlock(tp); 18055 18056 if (!err2) 18057 tg3_phy_start(tp); 18058 } 18059 18060unlock: 18061 rtnl_unlock(); 18062 return err; 18063} 18064 18065static int tg3_resume(struct device *device) 18066{ 18067 struct net_device *dev = dev_get_drvdata(device); 18068 struct tg3 *tp = netdev_priv(dev); 18069 int err = 0; 18070 18071 rtnl_lock(); 18072 18073 if (!netif_running(dev)) 18074 goto unlock; 18075 18076 netif_device_attach(dev); 18077 18078 tg3_full_lock(tp, 0); 18079 18080 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18081 18082 tg3_flag_set(tp, INIT_COMPLETE); 18083 err = tg3_restart_hw(tp, 18084 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)); 18085 if (err) 18086 goto out; 18087 18088 tg3_timer_start(tp); 18089 18090 tg3_netif_start(tp); 18091 18092out: 18093 tg3_full_unlock(tp); 18094 18095 if (!err) 18096 tg3_phy_start(tp); 18097 18098unlock: 18099 rtnl_unlock(); 18100 return err; 18101} 18102#endif /* CONFIG_PM_SLEEP */ 18103 18104static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 18105 18106static void tg3_shutdown(struct pci_dev *pdev) 18107{ 18108 struct net_device *dev = pci_get_drvdata(pdev); 18109 struct tg3 *tp = netdev_priv(dev); 18110 18111 tg3_reset_task_cancel(tp); 18112 18113 rtnl_lock(); 18114 18115 netif_device_detach(dev); 18116 18117 if (netif_running(dev)) 18118 dev_close(dev); 18119 18120 if (system_state == SYSTEM_POWER_OFF) 18121 tg3_power_down(tp); 18122 18123 rtnl_unlock(); 18124 18125 pci_disable_device(pdev); 18126} 18127 18128/** 18129 * tg3_io_error_detected - called when PCI error is detected 18130 * @pdev: Pointer to PCI device 18131 * @state: The current pci connection state 18132 * 18133 * This function is called after a PCI bus error affecting 18134 * this device has been detected. 18135 */ 18136static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 18137 pci_channel_state_t state) 18138{ 18139 struct net_device *netdev = pci_get_drvdata(pdev); 18140 struct tg3 *tp = netdev_priv(netdev); 18141 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 18142 18143 netdev_info(netdev, "PCI I/O error detected\n"); 18144 18145 /* Want to make sure that the reset task doesn't run */ 18146 tg3_reset_task_cancel(tp); 18147 18148 rtnl_lock(); 18149 18150 /* Could be second call or maybe we don't have netdev yet */ 18151 if (!netdev || tp->pcierr_recovery || !netif_running(netdev)) 18152 goto done; 18153 18154 /* We needn't recover from permanent error */ 18155 if (state == pci_channel_io_frozen) 18156 tp->pcierr_recovery = true; 18157 18158 tg3_phy_stop(tp); 18159 18160 tg3_netif_stop(tp); 18161 18162 tg3_timer_stop(tp); 18163 18164 netif_device_detach(netdev); 18165 18166 /* Clean up software state, even if MMIO is blocked */ 18167 tg3_full_lock(tp, 0); 18168 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 18169 tg3_full_unlock(tp); 18170 18171done: 18172 if (state == pci_channel_io_perm_failure) { 18173 if (netdev) { 18174 tg3_napi_enable(tp); 18175 dev_close(netdev); 18176 } 18177 err = PCI_ERS_RESULT_DISCONNECT; 18178 } else { 18179 pci_disable_device(pdev); 18180 } 18181 18182 rtnl_unlock(); 18183 18184 return err; 18185} 18186 18187/** 18188 * tg3_io_slot_reset - called after the pci bus has been reset. 18189 * @pdev: Pointer to PCI device 18190 * 18191 * Restart the card from scratch, as if from a cold-boot. 18192 * At this point, the card has exprienced a hard reset, 18193 * followed by fixups by BIOS, and has its config space 18194 * set up identically to what it was at cold boot. 18195 */ 18196static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 18197{ 18198 struct net_device *netdev = pci_get_drvdata(pdev); 18199 struct tg3 *tp = netdev_priv(netdev); 18200 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 18201 int err; 18202 18203 rtnl_lock(); 18204 18205 if (pci_enable_device(pdev)) { 18206 dev_err(&pdev->dev, 18207 "Cannot re-enable PCI device after reset.\n"); 18208 goto done; 18209 } 18210 18211 pci_set_master(pdev); 18212 pci_restore_state(pdev); 18213 pci_save_state(pdev); 18214 18215 if (!netdev || !netif_running(netdev)) { 18216 rc = PCI_ERS_RESULT_RECOVERED; 18217 goto done; 18218 } 18219 18220 err = tg3_power_up(tp); 18221 if (err) 18222 goto done; 18223 18224 rc = PCI_ERS_RESULT_RECOVERED; 18225 18226done: 18227 if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) { 18228 tg3_napi_enable(tp); 18229 dev_close(netdev); 18230 } 18231 rtnl_unlock(); 18232 18233 return rc; 18234} 18235 18236/** 18237 * tg3_io_resume - called when traffic can start flowing again. 18238 * @pdev: Pointer to PCI device 18239 * 18240 * This callback is called when the error recovery driver tells 18241 * us that its OK to resume normal operation. 18242 */ 18243static void tg3_io_resume(struct pci_dev *pdev) 18244{ 18245 struct net_device *netdev = pci_get_drvdata(pdev); 18246 struct tg3 *tp = netdev_priv(netdev); 18247 int err; 18248 18249 rtnl_lock(); 18250 18251 if (!netdev || !netif_running(netdev)) 18252 goto done; 18253 18254 tg3_full_lock(tp, 0); 18255 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18256 tg3_flag_set(tp, INIT_COMPLETE); 18257 err = tg3_restart_hw(tp, true); 18258 if (err) { 18259 tg3_full_unlock(tp); 18260 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 18261 goto done; 18262 } 18263 18264 netif_device_attach(netdev); 18265 18266 tg3_timer_start(tp); 18267 18268 tg3_netif_start(tp); 18269 18270 tg3_full_unlock(tp); 18271 18272 tg3_phy_start(tp); 18273 18274done: 18275 tp->pcierr_recovery = false; 18276 rtnl_unlock(); 18277} 18278 18279static const struct pci_error_handlers tg3_err_handler = { 18280 .error_detected = tg3_io_error_detected, 18281 .slot_reset = tg3_io_slot_reset, 18282 .resume = tg3_io_resume 18283}; 18284 18285static struct pci_driver tg3_driver = { 18286 .name = DRV_MODULE_NAME, 18287 .id_table = tg3_pci_tbl, 18288 .probe = tg3_init_one, 18289 .remove = tg3_remove_one, 18290 .err_handler = &tg3_err_handler, 18291 .driver.pm = &tg3_pm_ops, 18292 .shutdown = tg3_shutdown, 18293}; 18294 18295module_pci_driver(tg3_driver); 18296