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/ip.h> 61 62#include <linux/io.h> 63#include <asm/byteorder.h> 64#include <linux/uaccess.h> 65 66#include <uapi/linux/net_tstamp.h> 67#include <linux/ptp_clock_kernel.h> 68 69#define BAR_0 0 70#define BAR_2 2 71 72#include "tg3.h" 73 74/* Functions & macros to verify TG3_FLAGS types */ 75 76static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 77{ 78 return test_bit(flag, bits); 79} 80 81static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 82{ 83 set_bit(flag, bits); 84} 85 86static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 87{ 88 clear_bit(flag, bits); 89} 90 91#define tg3_flag(tp, flag) \ 92 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 93#define tg3_flag_set(tp, flag) \ 94 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 95#define tg3_flag_clear(tp, flag) \ 96 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 97 98#define DRV_MODULE_NAME "tg3" 99/* DO NOT UPDATE TG3_*_NUM defines */ 100#define TG3_MAJ_NUM 3 101#define TG3_MIN_NUM 137 102 103#define RESET_KIND_SHUTDOWN 0 104#define RESET_KIND_INIT 1 105#define RESET_KIND_SUSPEND 2 106 107#define TG3_DEF_RX_MODE 0 108#define TG3_DEF_TX_MODE 0 109#define TG3_DEF_MSG_ENABLE \ 110 (NETIF_MSG_DRV | \ 111 NETIF_MSG_PROBE | \ 112 NETIF_MSG_LINK | \ 113 NETIF_MSG_TIMER | \ 114 NETIF_MSG_IFDOWN | \ 115 NETIF_MSG_IFUP | \ 116 NETIF_MSG_RX_ERR | \ 117 NETIF_MSG_TX_ERR) 118 119#define TG3_GRC_LCLCTL_PWRSW_DELAY 100 120 121/* length of time before we decide the hardware is borked, 122 * and dev->tx_timeout() should be called to fix the problem 123 */ 124 125#define TG3_TX_TIMEOUT (5 * HZ) 126 127/* hardware minimum and maximum for a single frame's data payload */ 128#define TG3_MIN_MTU ETH_ZLEN 129#define TG3_MAX_MTU(tp) \ 130 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 131 132/* These numbers seem to be hard coded in the NIC firmware somehow. 133 * You can't change the ring sizes, but you can change where you place 134 * them in the NIC onboard memory. 135 */ 136#define TG3_RX_STD_RING_SIZE(tp) \ 137 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 138 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 139#define TG3_DEF_RX_RING_PENDING 200 140#define TG3_RX_JMB_RING_SIZE(tp) \ 141 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 142 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 143#define TG3_DEF_RX_JUMBO_RING_PENDING 100 144 145/* Do not place this n-ring entries value into the tp struct itself, 146 * we really want to expose these constants to GCC so that modulo et 147 * al. operations are done with shifts and masks instead of with 148 * hw multiply/modulo instructions. Another solution would be to 149 * replace things like '% foo' with '& (foo - 1)'. 150 */ 151 152#define TG3_TX_RING_SIZE 512 153#define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 154 155#define TG3_RX_STD_RING_BYTES(tp) \ 156 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 157#define TG3_RX_JMB_RING_BYTES(tp) \ 158 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 159#define TG3_RX_RCB_RING_BYTES(tp) \ 160 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 161#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 162 TG3_TX_RING_SIZE) 163#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 164 165#define TG3_DMA_BYTE_ENAB 64 166 167#define TG3_RX_STD_DMA_SZ 1536 168#define TG3_RX_JMB_DMA_SZ 9046 169 170#define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 171 172#define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 173#define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 174 175#define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 176 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 177 178#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 179 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 180 181/* Due to a hardware bug, the 5701 can only DMA to memory addresses 182 * that are at least dword aligned when used in PCIX mode. The driver 183 * works around this bug by double copying the packet. This workaround 184 * is built into the normal double copy length check for efficiency. 185 * 186 * However, the double copy is only necessary on those architectures 187 * where unaligned memory accesses are inefficient. For those architectures 188 * where unaligned memory accesses incur little penalty, we can reintegrate 189 * the 5701 in the normal rx path. Doing so saves a device structure 190 * dereference by hardcoding the double copy threshold in place. 191 */ 192#define TG3_RX_COPY_THRESHOLD 256 193#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 194 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 195#else 196 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 197#endif 198 199#if (NET_IP_ALIGN != 0) 200#define TG3_RX_OFFSET(tp) ((tp)->rx_offset) 201#else 202#define TG3_RX_OFFSET(tp) (NET_SKB_PAD) 203#endif 204 205/* minimum number of free TX descriptors required to wake up TX process */ 206#define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 207#define TG3_TX_BD_DMA_MAX_2K 2048 208#define TG3_TX_BD_DMA_MAX_4K 4096 209 210#define TG3_RAW_IP_ALIGN 2 211 212#define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3) 213#define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1) 214 215#define TG3_FW_UPDATE_TIMEOUT_SEC 5 216#define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2) 217 218#define FIRMWARE_TG3 "tigon/tg3.bin" 219#define FIRMWARE_TG357766 "tigon/tg357766.bin" 220#define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 221#define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 222 223MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 224MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 225MODULE_LICENSE("GPL"); 226MODULE_FIRMWARE(FIRMWARE_TG3); 227MODULE_FIRMWARE(FIRMWARE_TG357766); 228MODULE_FIRMWARE(FIRMWARE_TG3TSO); 229MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 230 231static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 232module_param(tg3_debug, int, 0); 233MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 234 235#define TG3_DRV_DATA_FLAG_10_100_ONLY 0x0001 236#define TG3_DRV_DATA_FLAG_5705_10_100 0x0002 237 238static const struct pci_device_id tg3_pci_tbl[] = { 239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901), 258 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 259 TG3_DRV_DATA_FLAG_5705_10_100}, 260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2), 261 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 262 TG3_DRV_DATA_FLAG_5705_10_100}, 263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F), 265 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 266 TG3_DRV_DATA_FLAG_5705_10_100}, 267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F), 273 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F), 279 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 287 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M, 288 PCI_VENDOR_ID_LENOVO, 289 TG3PCI_SUBDEVICE_ID_LENOVO_5787M), 290 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 292 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F), 293 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 294 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 299 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 302 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 303 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 308 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 309 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 310 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 311 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 312 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 313 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A), 314 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 315 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 316 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B), 317 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 318 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 319 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 320 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790), 321 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 322 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 323 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 324 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)}, 325 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 326 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 327 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 328 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 329 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 330 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791), 331 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 332 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795), 333 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 334 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 335 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 336 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 337 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)}, 338 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)}, 339 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)}, 340 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)}, 341 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)}, 342 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)}, 343 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)}, 344 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)}, 345 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)}, 346 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 347 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 348 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 349 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 350 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 351 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 352 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 353 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 354 {} 355}; 356 357MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 358 359static const struct { 360 const char string[ETH_GSTRING_LEN]; 361} ethtool_stats_keys[] = { 362 { "rx_octets" }, 363 { "rx_fragments" }, 364 { "rx_ucast_packets" }, 365 { "rx_mcast_packets" }, 366 { "rx_bcast_packets" }, 367 { "rx_fcs_errors" }, 368 { "rx_align_errors" }, 369 { "rx_xon_pause_rcvd" }, 370 { "rx_xoff_pause_rcvd" }, 371 { "rx_mac_ctrl_rcvd" }, 372 { "rx_xoff_entered" }, 373 { "rx_frame_too_long_errors" }, 374 { "rx_jabbers" }, 375 { "rx_undersize_packets" }, 376 { "rx_in_length_errors" }, 377 { "rx_out_length_errors" }, 378 { "rx_64_or_less_octet_packets" }, 379 { "rx_65_to_127_octet_packets" }, 380 { "rx_128_to_255_octet_packets" }, 381 { "rx_256_to_511_octet_packets" }, 382 { "rx_512_to_1023_octet_packets" }, 383 { "rx_1024_to_1522_octet_packets" }, 384 { "rx_1523_to_2047_octet_packets" }, 385 { "rx_2048_to_4095_octet_packets" }, 386 { "rx_4096_to_8191_octet_packets" }, 387 { "rx_8192_to_9022_octet_packets" }, 388 389 { "tx_octets" }, 390 { "tx_collisions" }, 391 392 { "tx_xon_sent" }, 393 { "tx_xoff_sent" }, 394 { "tx_flow_control" }, 395 { "tx_mac_errors" }, 396 { "tx_single_collisions" }, 397 { "tx_mult_collisions" }, 398 { "tx_deferred" }, 399 { "tx_excessive_collisions" }, 400 { "tx_late_collisions" }, 401 { "tx_collide_2times" }, 402 { "tx_collide_3times" }, 403 { "tx_collide_4times" }, 404 { "tx_collide_5times" }, 405 { "tx_collide_6times" }, 406 { "tx_collide_7times" }, 407 { "tx_collide_8times" }, 408 { "tx_collide_9times" }, 409 { "tx_collide_10times" }, 410 { "tx_collide_11times" }, 411 { "tx_collide_12times" }, 412 { "tx_collide_13times" }, 413 { "tx_collide_14times" }, 414 { "tx_collide_15times" }, 415 { "tx_ucast_packets" }, 416 { "tx_mcast_packets" }, 417 { "tx_bcast_packets" }, 418 { "tx_carrier_sense_errors" }, 419 { "tx_discards" }, 420 { "tx_errors" }, 421 422 { "dma_writeq_full" }, 423 { "dma_write_prioq_full" }, 424 { "rxbds_empty" }, 425 { "rx_discards" }, 426 { "rx_errors" }, 427 { "rx_threshold_hit" }, 428 429 { "dma_readq_full" }, 430 { "dma_read_prioq_full" }, 431 { "tx_comp_queue_full" }, 432 433 { "ring_set_send_prod_index" }, 434 { "ring_status_update" }, 435 { "nic_irqs" }, 436 { "nic_avoided_irqs" }, 437 { "nic_tx_threshold_hit" }, 438 439 { "mbuf_lwm_thresh_hit" }, 440}; 441 442#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 443#define TG3_NVRAM_TEST 0 444#define TG3_LINK_TEST 1 445#define TG3_REGISTER_TEST 2 446#define TG3_MEMORY_TEST 3 447#define TG3_MAC_LOOPB_TEST 4 448#define TG3_PHY_LOOPB_TEST 5 449#define TG3_EXT_LOOPB_TEST 6 450#define TG3_INTERRUPT_TEST 7 451 452 453static const struct { 454 const char string[ETH_GSTRING_LEN]; 455} ethtool_test_keys[] = { 456 [TG3_NVRAM_TEST] = { "nvram test (online) " }, 457 [TG3_LINK_TEST] = { "link test (online) " }, 458 [TG3_REGISTER_TEST] = { "register test (offline)" }, 459 [TG3_MEMORY_TEST] = { "memory test (offline)" }, 460 [TG3_MAC_LOOPB_TEST] = { "mac loopback test (offline)" }, 461 [TG3_PHY_LOOPB_TEST] = { "phy loopback test (offline)" }, 462 [TG3_EXT_LOOPB_TEST] = { "ext loopback test (offline)" }, 463 [TG3_INTERRUPT_TEST] = { "interrupt test (offline)" }, 464}; 465 466#define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 467 468 469static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 470{ 471 writel(val, tp->regs + off); 472} 473 474static u32 tg3_read32(struct tg3 *tp, u32 off) 475{ 476 return readl(tp->regs + off); 477} 478 479static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 480{ 481 writel(val, tp->aperegs + off); 482} 483 484static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 485{ 486 return readl(tp->aperegs + off); 487} 488 489static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 490{ 491 unsigned long flags; 492 493 spin_lock_irqsave(&tp->indirect_lock, flags); 494 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 495 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 496 spin_unlock_irqrestore(&tp->indirect_lock, flags); 497} 498 499static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 500{ 501 writel(val, tp->regs + off); 502 readl(tp->regs + off); 503} 504 505static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 506{ 507 unsigned long flags; 508 u32 val; 509 510 spin_lock_irqsave(&tp->indirect_lock, flags); 511 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 512 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 513 spin_unlock_irqrestore(&tp->indirect_lock, flags); 514 return val; 515} 516 517static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 518{ 519 unsigned long flags; 520 521 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 522 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 523 TG3_64BIT_REG_LOW, val); 524 return; 525 } 526 if (off == TG3_RX_STD_PROD_IDX_REG) { 527 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 528 TG3_64BIT_REG_LOW, val); 529 return; 530 } 531 532 spin_lock_irqsave(&tp->indirect_lock, flags); 533 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 534 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 535 spin_unlock_irqrestore(&tp->indirect_lock, flags); 536 537 /* In indirect mode when disabling interrupts, we also need 538 * to clear the interrupt bit in the GRC local ctrl register. 539 */ 540 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 541 (val == 0x1)) { 542 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 543 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 544 } 545} 546 547static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 548{ 549 unsigned long flags; 550 u32 val; 551 552 spin_lock_irqsave(&tp->indirect_lock, flags); 553 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 554 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 555 spin_unlock_irqrestore(&tp->indirect_lock, flags); 556 return val; 557} 558 559/* usec_wait specifies the wait time in usec when writing to certain registers 560 * where it is unsafe to read back the register without some delay. 561 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 562 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 563 */ 564static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 565{ 566 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 567 /* Non-posted methods */ 568 tp->write32(tp, off, val); 569 else { 570 /* Posted method */ 571 tg3_write32(tp, off, val); 572 if (usec_wait) 573 udelay(usec_wait); 574 tp->read32(tp, off); 575 } 576 /* Wait again after the read for the posted method to guarantee that 577 * the wait time is met. 578 */ 579 if (usec_wait) 580 udelay(usec_wait); 581} 582 583static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 584{ 585 tp->write32_mbox(tp, off, val); 586 if (tg3_flag(tp, FLUSH_POSTED_WRITES) || 587 (!tg3_flag(tp, MBOX_WRITE_REORDER) && 588 !tg3_flag(tp, ICH_WORKAROUND))) 589 tp->read32_mbox(tp, off); 590} 591 592static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 593{ 594 void __iomem *mbox = tp->regs + off; 595 writel(val, mbox); 596 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 597 writel(val, mbox); 598 if (tg3_flag(tp, MBOX_WRITE_REORDER) || 599 tg3_flag(tp, FLUSH_POSTED_WRITES)) 600 readl(mbox); 601} 602 603static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 604{ 605 return readl(tp->regs + off + GRCMBOX_BASE); 606} 607 608static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 609{ 610 writel(val, tp->regs + off + GRCMBOX_BASE); 611} 612 613#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 614#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 615#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 616#define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 617#define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 618 619#define tw32(reg, val) tp->write32(tp, reg, val) 620#define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 621#define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 622#define tr32(reg) tp->read32(tp, reg) 623 624static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 625{ 626 unsigned long flags; 627 628 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 629 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 630 return; 631 632 spin_lock_irqsave(&tp->indirect_lock, flags); 633 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 634 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 635 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 636 637 /* Always leave this as zero. */ 638 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 639 } else { 640 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 641 tw32_f(TG3PCI_MEM_WIN_DATA, val); 642 643 /* Always leave this as zero. */ 644 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 645 } 646 spin_unlock_irqrestore(&tp->indirect_lock, flags); 647} 648 649static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 650{ 651 unsigned long flags; 652 653 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 654 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 655 *val = 0; 656 return; 657 } 658 659 spin_lock_irqsave(&tp->indirect_lock, flags); 660 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 661 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 662 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 663 664 /* Always leave this as zero. */ 665 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 666 } else { 667 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 668 *val = tr32(TG3PCI_MEM_WIN_DATA); 669 670 /* Always leave this as zero. */ 671 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 672 } 673 spin_unlock_irqrestore(&tp->indirect_lock, flags); 674} 675 676static void tg3_ape_lock_init(struct tg3 *tp) 677{ 678 int i; 679 u32 regbase, bit; 680 681 if (tg3_asic_rev(tp) == ASIC_REV_5761) 682 regbase = TG3_APE_LOCK_GRANT; 683 else 684 regbase = TG3_APE_PER_LOCK_GRANT; 685 686 /* Make sure the driver hasn't any stale locks. */ 687 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 688 switch (i) { 689 case TG3_APE_LOCK_PHY0: 690 case TG3_APE_LOCK_PHY1: 691 case TG3_APE_LOCK_PHY2: 692 case TG3_APE_LOCK_PHY3: 693 bit = APE_LOCK_GRANT_DRIVER; 694 break; 695 default: 696 if (!tp->pci_fn) 697 bit = APE_LOCK_GRANT_DRIVER; 698 else 699 bit = 1 << tp->pci_fn; 700 } 701 tg3_ape_write32(tp, regbase + 4 * i, bit); 702 } 703 704} 705 706static int tg3_ape_lock(struct tg3 *tp, int locknum) 707{ 708 int i, off; 709 int ret = 0; 710 u32 status, req, gnt, bit; 711 712 if (!tg3_flag(tp, ENABLE_APE)) 713 return 0; 714 715 switch (locknum) { 716 case TG3_APE_LOCK_GPIO: 717 if (tg3_asic_rev(tp) == ASIC_REV_5761) 718 return 0; 719 fallthrough; 720 case TG3_APE_LOCK_GRC: 721 case TG3_APE_LOCK_MEM: 722 if (!tp->pci_fn) 723 bit = APE_LOCK_REQ_DRIVER; 724 else 725 bit = 1 << tp->pci_fn; 726 break; 727 case TG3_APE_LOCK_PHY0: 728 case TG3_APE_LOCK_PHY1: 729 case TG3_APE_LOCK_PHY2: 730 case TG3_APE_LOCK_PHY3: 731 bit = APE_LOCK_REQ_DRIVER; 732 break; 733 default: 734 return -EINVAL; 735 } 736 737 if (tg3_asic_rev(tp) == ASIC_REV_5761) { 738 req = TG3_APE_LOCK_REQ; 739 gnt = TG3_APE_LOCK_GRANT; 740 } else { 741 req = TG3_APE_PER_LOCK_REQ; 742 gnt = TG3_APE_PER_LOCK_GRANT; 743 } 744 745 off = 4 * locknum; 746 747 tg3_ape_write32(tp, req + off, bit); 748 749 /* Wait for up to 1 millisecond to acquire lock. */ 750 for (i = 0; i < 100; i++) { 751 status = tg3_ape_read32(tp, gnt + off); 752 if (status == bit) 753 break; 754 if (pci_channel_offline(tp->pdev)) 755 break; 756 757 udelay(10); 758 } 759 760 if (status != bit) { 761 /* Revoke the lock request. */ 762 tg3_ape_write32(tp, gnt + off, bit); 763 ret = -EBUSY; 764 } 765 766 return ret; 767} 768 769static void tg3_ape_unlock(struct tg3 *tp, int locknum) 770{ 771 u32 gnt, bit; 772 773 if (!tg3_flag(tp, ENABLE_APE)) 774 return; 775 776 switch (locknum) { 777 case TG3_APE_LOCK_GPIO: 778 if (tg3_asic_rev(tp) == ASIC_REV_5761) 779 return; 780 fallthrough; 781 case TG3_APE_LOCK_GRC: 782 case TG3_APE_LOCK_MEM: 783 if (!tp->pci_fn) 784 bit = APE_LOCK_GRANT_DRIVER; 785 else 786 bit = 1 << tp->pci_fn; 787 break; 788 case TG3_APE_LOCK_PHY0: 789 case TG3_APE_LOCK_PHY1: 790 case TG3_APE_LOCK_PHY2: 791 case TG3_APE_LOCK_PHY3: 792 bit = APE_LOCK_GRANT_DRIVER; 793 break; 794 default: 795 return; 796 } 797 798 if (tg3_asic_rev(tp) == ASIC_REV_5761) 799 gnt = TG3_APE_LOCK_GRANT; 800 else 801 gnt = TG3_APE_PER_LOCK_GRANT; 802 803 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 804} 805 806static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us) 807{ 808 u32 apedata; 809 810 while (timeout_us) { 811 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 812 return -EBUSY; 813 814 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 815 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 816 break; 817 818 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 819 820 udelay(10); 821 timeout_us -= (timeout_us > 10) ? 10 : timeout_us; 822 } 823 824 return timeout_us ? 0 : -EBUSY; 825} 826 827#ifdef CONFIG_TIGON3_HWMON 828static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us) 829{ 830 u32 i, apedata; 831 832 for (i = 0; i < timeout_us / 10; i++) { 833 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 834 835 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 836 break; 837 838 udelay(10); 839 } 840 841 return i == timeout_us / 10; 842} 843 844static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, 845 u32 len) 846{ 847 int err; 848 u32 i, bufoff, msgoff, maxlen, apedata; 849 850 if (!tg3_flag(tp, APE_HAS_NCSI)) 851 return 0; 852 853 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 854 if (apedata != APE_SEG_SIG_MAGIC) 855 return -ENODEV; 856 857 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 858 if (!(apedata & APE_FW_STATUS_READY)) 859 return -EAGAIN; 860 861 bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) + 862 TG3_APE_SHMEM_BASE; 863 msgoff = bufoff + 2 * sizeof(u32); 864 maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN); 865 866 while (len) { 867 u32 length; 868 869 /* Cap xfer sizes to scratchpad limits. */ 870 length = (len > maxlen) ? maxlen : len; 871 len -= length; 872 873 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 874 if (!(apedata & APE_FW_STATUS_READY)) 875 return -EAGAIN; 876 877 /* Wait for up to 1 msec for APE to service previous event. */ 878 err = tg3_ape_event_lock(tp, 1000); 879 if (err) 880 return err; 881 882 apedata = APE_EVENT_STATUS_DRIVER_EVNT | 883 APE_EVENT_STATUS_SCRTCHPD_READ | 884 APE_EVENT_STATUS_EVENT_PENDING; 885 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata); 886 887 tg3_ape_write32(tp, bufoff, base_off); 888 tg3_ape_write32(tp, bufoff + sizeof(u32), length); 889 890 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 891 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 892 893 base_off += length; 894 895 if (tg3_ape_wait_for_event(tp, 30000)) 896 return -EAGAIN; 897 898 for (i = 0; length; i += 4, length -= 4) { 899 u32 val = tg3_ape_read32(tp, msgoff + i); 900 memcpy(data, &val, sizeof(u32)); 901 data++; 902 } 903 } 904 905 return 0; 906} 907#endif 908 909static int tg3_ape_send_event(struct tg3 *tp, u32 event) 910{ 911 int err; 912 u32 apedata; 913 914 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 915 if (apedata != APE_SEG_SIG_MAGIC) 916 return -EAGAIN; 917 918 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 919 if (!(apedata & APE_FW_STATUS_READY)) 920 return -EAGAIN; 921 922 /* Wait for up to 20 millisecond for APE to service previous event. */ 923 err = tg3_ape_event_lock(tp, 20000); 924 if (err) 925 return err; 926 927 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 928 event | APE_EVENT_STATUS_EVENT_PENDING); 929 930 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 931 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 932 933 return 0; 934} 935 936static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 937{ 938 u32 event; 939 u32 apedata; 940 941 if (!tg3_flag(tp, ENABLE_APE)) 942 return; 943 944 switch (kind) { 945 case RESET_KIND_INIT: 946 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 947 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 948 APE_HOST_SEG_SIG_MAGIC); 949 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 950 APE_HOST_SEG_LEN_MAGIC); 951 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 952 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 953 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 954 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 955 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 956 APE_HOST_BEHAV_NO_PHYLOCK); 957 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 958 TG3_APE_HOST_DRVR_STATE_START); 959 960 event = APE_EVENT_STATUS_STATE_START; 961 break; 962 case RESET_KIND_SHUTDOWN: 963 if (device_may_wakeup(&tp->pdev->dev) && 964 tg3_flag(tp, WOL_ENABLE)) { 965 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 966 TG3_APE_HOST_WOL_SPEED_AUTO); 967 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 968 } else 969 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 970 971 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 972 973 event = APE_EVENT_STATUS_STATE_UNLOAD; 974 break; 975 default: 976 return; 977 } 978 979 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 980 981 tg3_ape_send_event(tp, event); 982} 983 984static void tg3_send_ape_heartbeat(struct tg3 *tp, 985 unsigned long interval) 986{ 987 /* Check if hb interval has exceeded */ 988 if (!tg3_flag(tp, ENABLE_APE) || 989 time_before(jiffies, tp->ape_hb_jiffies + interval)) 990 return; 991 992 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 993 tp->ape_hb_jiffies = jiffies; 994} 995 996static void tg3_disable_ints(struct tg3 *tp) 997{ 998 int i; 999 1000 tw32(TG3PCI_MISC_HOST_CTRL, 1001 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 1002 for (i = 0; i < tp->irq_max; i++) 1003 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 1004} 1005 1006static void tg3_enable_ints(struct tg3 *tp) 1007{ 1008 int i; 1009 1010 tp->irq_sync = 0; 1011 wmb(); 1012 1013 tw32(TG3PCI_MISC_HOST_CTRL, 1014 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 1015 1016 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 1017 for (i = 0; i < tp->irq_cnt; i++) { 1018 struct tg3_napi *tnapi = &tp->napi[i]; 1019 1020 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1021 if (tg3_flag(tp, 1SHOT_MSI)) 1022 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1023 1024 tp->coal_now |= tnapi->coal_now; 1025 } 1026 1027 /* Force an initial interrupt */ 1028 if (!tg3_flag(tp, TAGGED_STATUS) && 1029 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 1030 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 1031 else 1032 tw32(HOSTCC_MODE, tp->coal_now); 1033 1034 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 1035} 1036 1037static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 1038{ 1039 struct tg3 *tp = tnapi->tp; 1040 struct tg3_hw_status *sblk = tnapi->hw_status; 1041 unsigned int work_exists = 0; 1042 1043 /* check for phy events */ 1044 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 1045 if (sblk->status & SD_STATUS_LINK_CHG) 1046 work_exists = 1; 1047 } 1048 1049 /* check for TX work to do */ 1050 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 1051 work_exists = 1; 1052 1053 /* check for RX work to do */ 1054 if (tnapi->rx_rcb_prod_idx && 1055 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 1056 work_exists = 1; 1057 1058 return work_exists; 1059} 1060 1061/* tg3_int_reenable 1062 * similar to tg3_enable_ints, but it accurately determines whether there 1063 * is new work pending and can return without flushing the PIO write 1064 * which reenables interrupts 1065 */ 1066static void tg3_int_reenable(struct tg3_napi *tnapi) 1067{ 1068 struct tg3 *tp = tnapi->tp; 1069 1070 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 1071 1072 /* When doing tagged status, this work check is unnecessary. 1073 * The last_tag we write above tells the chip which piece of 1074 * work we've completed. 1075 */ 1076 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 1077 tw32(HOSTCC_MODE, tp->coalesce_mode | 1078 HOSTCC_MODE_ENABLE | tnapi->coal_now); 1079} 1080 1081static void tg3_switch_clocks(struct tg3 *tp) 1082{ 1083 u32 clock_ctrl; 1084 u32 orig_clock_ctrl; 1085 1086 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 1087 return; 1088 1089 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 1090 1091 orig_clock_ctrl = clock_ctrl; 1092 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 1093 CLOCK_CTRL_CLKRUN_OENABLE | 1094 0x1f); 1095 tp->pci_clock_ctrl = clock_ctrl; 1096 1097 if (tg3_flag(tp, 5705_PLUS)) { 1098 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 1099 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1100 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 1101 } 1102 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 1103 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1104 clock_ctrl | 1105 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 1106 40); 1107 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1108 clock_ctrl | (CLOCK_CTRL_ALTCLK), 1109 40); 1110 } 1111 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 1112} 1113 1114#define PHY_BUSY_LOOPS 5000 1115 1116static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg, 1117 u32 *val) 1118{ 1119 u32 frame_val; 1120 unsigned int loops; 1121 int ret; 1122 1123 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1124 tw32_f(MAC_MI_MODE, 1125 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1126 udelay(80); 1127 } 1128 1129 tg3_ape_lock(tp, tp->phy_ape_lock); 1130 1131 *val = 0x0; 1132 1133 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1134 MI_COM_PHY_ADDR_MASK); 1135 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1136 MI_COM_REG_ADDR_MASK); 1137 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 1138 1139 tw32_f(MAC_MI_COM, frame_val); 1140 1141 loops = PHY_BUSY_LOOPS; 1142 while (loops != 0) { 1143 udelay(10); 1144 frame_val = tr32(MAC_MI_COM); 1145 1146 if ((frame_val & MI_COM_BUSY) == 0) { 1147 udelay(5); 1148 frame_val = tr32(MAC_MI_COM); 1149 break; 1150 } 1151 loops -= 1; 1152 } 1153 1154 ret = -EBUSY; 1155 if (loops != 0) { 1156 *val = frame_val & MI_COM_DATA_MASK; 1157 ret = 0; 1158 } 1159 1160 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1161 tw32_f(MAC_MI_MODE, tp->mi_mode); 1162 udelay(80); 1163 } 1164 1165 tg3_ape_unlock(tp, tp->phy_ape_lock); 1166 1167 return ret; 1168} 1169 1170static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 1171{ 1172 return __tg3_readphy(tp, tp->phy_addr, reg, val); 1173} 1174 1175static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg, 1176 u32 val) 1177{ 1178 u32 frame_val; 1179 unsigned int loops; 1180 int ret; 1181 1182 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1183 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1184 return 0; 1185 1186 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1187 tw32_f(MAC_MI_MODE, 1188 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1189 udelay(80); 1190 } 1191 1192 tg3_ape_lock(tp, tp->phy_ape_lock); 1193 1194 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1195 MI_COM_PHY_ADDR_MASK); 1196 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1197 MI_COM_REG_ADDR_MASK); 1198 frame_val |= (val & MI_COM_DATA_MASK); 1199 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1200 1201 tw32_f(MAC_MI_COM, frame_val); 1202 1203 loops = PHY_BUSY_LOOPS; 1204 while (loops != 0) { 1205 udelay(10); 1206 frame_val = tr32(MAC_MI_COM); 1207 if ((frame_val & MI_COM_BUSY) == 0) { 1208 udelay(5); 1209 frame_val = tr32(MAC_MI_COM); 1210 break; 1211 } 1212 loops -= 1; 1213 } 1214 1215 ret = -EBUSY; 1216 if (loops != 0) 1217 ret = 0; 1218 1219 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1220 tw32_f(MAC_MI_MODE, tp->mi_mode); 1221 udelay(80); 1222 } 1223 1224 tg3_ape_unlock(tp, tp->phy_ape_lock); 1225 1226 return ret; 1227} 1228 1229static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1230{ 1231 return __tg3_writephy(tp, tp->phy_addr, reg, val); 1232} 1233 1234static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1235{ 1236 int err; 1237 1238 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1239 if (err) 1240 goto done; 1241 1242 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1243 if (err) 1244 goto done; 1245 1246 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1247 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1248 if (err) 1249 goto done; 1250 1251 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1252 1253done: 1254 return err; 1255} 1256 1257static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1258{ 1259 int err; 1260 1261 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1262 if (err) 1263 goto done; 1264 1265 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1266 if (err) 1267 goto done; 1268 1269 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1270 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1271 if (err) 1272 goto done; 1273 1274 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1275 1276done: 1277 return err; 1278} 1279 1280static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1281{ 1282 int err; 1283 1284 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1285 if (!err) 1286 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1287 1288 return err; 1289} 1290 1291static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1292{ 1293 int err; 1294 1295 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1296 if (!err) 1297 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1298 1299 return err; 1300} 1301 1302static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1303{ 1304 int err; 1305 1306 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1307 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1308 MII_TG3_AUXCTL_SHDWSEL_MISC); 1309 if (!err) 1310 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1311 1312 return err; 1313} 1314 1315static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1316{ 1317 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1318 set |= MII_TG3_AUXCTL_MISC_WREN; 1319 1320 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1321} 1322 1323static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable) 1324{ 1325 u32 val; 1326 int err; 1327 1328 err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 1329 1330 if (err) 1331 return err; 1332 1333 if (enable) 1334 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1335 else 1336 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1337 1338 err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 1339 val | MII_TG3_AUXCTL_ACTL_TX_6DB); 1340 1341 return err; 1342} 1343 1344static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val) 1345{ 1346 return tg3_writephy(tp, MII_TG3_MISC_SHDW, 1347 reg | val | MII_TG3_MISC_SHDW_WREN); 1348} 1349 1350static int tg3_bmcr_reset(struct tg3 *tp) 1351{ 1352 u32 phy_control; 1353 int limit, err; 1354 1355 /* OK, reset it, and poll the BMCR_RESET bit until it 1356 * clears or we time out. 1357 */ 1358 phy_control = BMCR_RESET; 1359 err = tg3_writephy(tp, MII_BMCR, phy_control); 1360 if (err != 0) 1361 return -EBUSY; 1362 1363 limit = 5000; 1364 while (limit--) { 1365 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1366 if (err != 0) 1367 return -EBUSY; 1368 1369 if ((phy_control & BMCR_RESET) == 0) { 1370 udelay(40); 1371 break; 1372 } 1373 udelay(10); 1374 } 1375 if (limit < 0) 1376 return -EBUSY; 1377 1378 return 0; 1379} 1380 1381static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1382{ 1383 struct tg3 *tp = bp->priv; 1384 u32 val; 1385 1386 spin_lock_bh(&tp->lock); 1387 1388 if (__tg3_readphy(tp, mii_id, reg, &val)) 1389 val = -EIO; 1390 1391 spin_unlock_bh(&tp->lock); 1392 1393 return val; 1394} 1395 1396static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1397{ 1398 struct tg3 *tp = bp->priv; 1399 u32 ret = 0; 1400 1401 spin_lock_bh(&tp->lock); 1402 1403 if (__tg3_writephy(tp, mii_id, reg, val)) 1404 ret = -EIO; 1405 1406 spin_unlock_bh(&tp->lock); 1407 1408 return ret; 1409} 1410 1411static void tg3_mdio_config_5785(struct tg3 *tp) 1412{ 1413 u32 val; 1414 struct phy_device *phydev; 1415 1416 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1417 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1418 case PHY_ID_BCM50610: 1419 case PHY_ID_BCM50610M: 1420 val = MAC_PHYCFG2_50610_LED_MODES; 1421 break; 1422 case PHY_ID_BCMAC131: 1423 val = MAC_PHYCFG2_AC131_LED_MODES; 1424 break; 1425 case PHY_ID_RTL8211C: 1426 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1427 break; 1428 case PHY_ID_RTL8201E: 1429 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1430 break; 1431 default: 1432 return; 1433 } 1434 1435 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1436 tw32(MAC_PHYCFG2, val); 1437 1438 val = tr32(MAC_PHYCFG1); 1439 val &= ~(MAC_PHYCFG1_RGMII_INT | 1440 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1441 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1442 tw32(MAC_PHYCFG1, val); 1443 1444 return; 1445 } 1446 1447 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1448 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1449 MAC_PHYCFG2_FMODE_MASK_MASK | 1450 MAC_PHYCFG2_GMODE_MASK_MASK | 1451 MAC_PHYCFG2_ACT_MASK_MASK | 1452 MAC_PHYCFG2_QUAL_MASK_MASK | 1453 MAC_PHYCFG2_INBAND_ENABLE; 1454 1455 tw32(MAC_PHYCFG2, val); 1456 1457 val = tr32(MAC_PHYCFG1); 1458 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1459 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1460 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1461 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1462 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1463 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1464 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1465 } 1466 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1467 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1468 tw32(MAC_PHYCFG1, val); 1469 1470 val = tr32(MAC_EXT_RGMII_MODE); 1471 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1472 MAC_RGMII_MODE_RX_QUALITY | 1473 MAC_RGMII_MODE_RX_ACTIVITY | 1474 MAC_RGMII_MODE_RX_ENG_DET | 1475 MAC_RGMII_MODE_TX_ENABLE | 1476 MAC_RGMII_MODE_TX_LOWPWR | 1477 MAC_RGMII_MODE_TX_RESET); 1478 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1479 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1480 val |= MAC_RGMII_MODE_RX_INT_B | 1481 MAC_RGMII_MODE_RX_QUALITY | 1482 MAC_RGMII_MODE_RX_ACTIVITY | 1483 MAC_RGMII_MODE_RX_ENG_DET; 1484 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1485 val |= MAC_RGMII_MODE_TX_ENABLE | 1486 MAC_RGMII_MODE_TX_LOWPWR | 1487 MAC_RGMII_MODE_TX_RESET; 1488 } 1489 tw32(MAC_EXT_RGMII_MODE, val); 1490} 1491 1492static void tg3_mdio_start(struct tg3 *tp) 1493{ 1494 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1495 tw32_f(MAC_MI_MODE, tp->mi_mode); 1496 udelay(80); 1497 1498 if (tg3_flag(tp, MDIOBUS_INITED) && 1499 tg3_asic_rev(tp) == ASIC_REV_5785) 1500 tg3_mdio_config_5785(tp); 1501} 1502 1503static int tg3_mdio_init(struct tg3 *tp) 1504{ 1505 int i; 1506 u32 reg; 1507 struct phy_device *phydev; 1508 1509 if (tg3_flag(tp, 5717_PLUS)) { 1510 u32 is_serdes; 1511 1512 tp->phy_addr = tp->pci_fn + 1; 1513 1514 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) 1515 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1516 else 1517 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1518 TG3_CPMU_PHY_STRAP_IS_SERDES; 1519 if (is_serdes) 1520 tp->phy_addr += 7; 1521 } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) { 1522 int addr; 1523 1524 addr = ssb_gige_get_phyaddr(tp->pdev); 1525 if (addr < 0) 1526 return addr; 1527 tp->phy_addr = addr; 1528 } else 1529 tp->phy_addr = TG3_PHY_MII_ADDR; 1530 1531 tg3_mdio_start(tp); 1532 1533 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1534 return 0; 1535 1536 tp->mdio_bus = mdiobus_alloc(); 1537 if (tp->mdio_bus == NULL) 1538 return -ENOMEM; 1539 1540 tp->mdio_bus->name = "tg3 mdio bus"; 1541 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1542 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 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 if (tg3_flag(tp, RGMII_INBAND_DISABLE)) 1585 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE; 1586 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1587 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; 1588 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1589 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; 1590 fallthrough; 1591 case PHY_ID_RTL8211C: 1592 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1593 break; 1594 case PHY_ID_RTL8201E: 1595 case PHY_ID_BCMAC131: 1596 phydev->interface = PHY_INTERFACE_MODE_MII; 1597 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1598 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1599 break; 1600 } 1601 1602 tg3_flag_set(tp, MDIOBUS_INITED); 1603 1604 if (tg3_asic_rev(tp) == ASIC_REV_5785) 1605 tg3_mdio_config_5785(tp); 1606 1607 return 0; 1608} 1609 1610static void tg3_mdio_fini(struct tg3 *tp) 1611{ 1612 if (tg3_flag(tp, MDIOBUS_INITED)) { 1613 tg3_flag_clear(tp, MDIOBUS_INITED); 1614 mdiobus_unregister(tp->mdio_bus); 1615 mdiobus_free(tp->mdio_bus); 1616 } 1617} 1618 1619/* tp->lock is held. */ 1620static inline void tg3_generate_fw_event(struct tg3 *tp) 1621{ 1622 u32 val; 1623 1624 val = tr32(GRC_RX_CPU_EVENT); 1625 val |= GRC_RX_CPU_DRIVER_EVENT; 1626 tw32_f(GRC_RX_CPU_EVENT, val); 1627 1628 tp->last_event_jiffies = jiffies; 1629} 1630 1631#define TG3_FW_EVENT_TIMEOUT_USEC 2500 1632 1633/* tp->lock is held. */ 1634static void tg3_wait_for_event_ack(struct tg3 *tp) 1635{ 1636 int i; 1637 unsigned int delay_cnt; 1638 long time_remain; 1639 1640 /* If enough time has passed, no wait is necessary. */ 1641 time_remain = (long)(tp->last_event_jiffies + 1 + 1642 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1643 (long)jiffies; 1644 if (time_remain < 0) 1645 return; 1646 1647 /* Check if we can shorten the wait time. */ 1648 delay_cnt = jiffies_to_usecs(time_remain); 1649 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1650 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1651 delay_cnt = (delay_cnt >> 3) + 1; 1652 1653 for (i = 0; i < delay_cnt; i++) { 1654 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1655 break; 1656 if (pci_channel_offline(tp->pdev)) 1657 break; 1658 1659 udelay(8); 1660 } 1661} 1662 1663/* tp->lock is held. */ 1664static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1665{ 1666 u32 reg, val; 1667 1668 val = 0; 1669 if (!tg3_readphy(tp, MII_BMCR, ®)) 1670 val = reg << 16; 1671 if (!tg3_readphy(tp, MII_BMSR, ®)) 1672 val |= (reg & 0xffff); 1673 *data++ = val; 1674 1675 val = 0; 1676 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1677 val = reg << 16; 1678 if (!tg3_readphy(tp, MII_LPA, ®)) 1679 val |= (reg & 0xffff); 1680 *data++ = val; 1681 1682 val = 0; 1683 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1684 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1685 val = reg << 16; 1686 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1687 val |= (reg & 0xffff); 1688 } 1689 *data++ = val; 1690 1691 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1692 val = reg << 16; 1693 else 1694 val = 0; 1695 *data++ = val; 1696} 1697 1698/* tp->lock is held. */ 1699static void tg3_ump_link_report(struct tg3 *tp) 1700{ 1701 u32 data[4]; 1702 1703 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1704 return; 1705 1706 tg3_phy_gather_ump_data(tp, data); 1707 1708 tg3_wait_for_event_ack(tp); 1709 1710 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1711 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1712 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1713 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1714 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1715 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1716 1717 tg3_generate_fw_event(tp); 1718} 1719 1720/* tp->lock is held. */ 1721static void tg3_stop_fw(struct tg3 *tp) 1722{ 1723 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1724 /* Wait for RX cpu to ACK the previous event. */ 1725 tg3_wait_for_event_ack(tp); 1726 1727 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1728 1729 tg3_generate_fw_event(tp); 1730 1731 /* Wait for RX cpu to ACK this event. */ 1732 tg3_wait_for_event_ack(tp); 1733 } 1734} 1735 1736/* tp->lock is held. */ 1737static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1738{ 1739 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1740 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1741 1742 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1743 switch (kind) { 1744 case RESET_KIND_INIT: 1745 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1746 DRV_STATE_START); 1747 break; 1748 1749 case RESET_KIND_SHUTDOWN: 1750 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1751 DRV_STATE_UNLOAD); 1752 break; 1753 1754 case RESET_KIND_SUSPEND: 1755 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1756 DRV_STATE_SUSPEND); 1757 break; 1758 1759 default: 1760 break; 1761 } 1762 } 1763} 1764 1765/* tp->lock is held. */ 1766static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1767{ 1768 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1769 switch (kind) { 1770 case RESET_KIND_INIT: 1771 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1772 DRV_STATE_START_DONE); 1773 break; 1774 1775 case RESET_KIND_SHUTDOWN: 1776 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1777 DRV_STATE_UNLOAD_DONE); 1778 break; 1779 1780 default: 1781 break; 1782 } 1783 } 1784} 1785 1786/* tp->lock is held. */ 1787static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1788{ 1789 if (tg3_flag(tp, ENABLE_ASF)) { 1790 switch (kind) { 1791 case RESET_KIND_INIT: 1792 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1793 DRV_STATE_START); 1794 break; 1795 1796 case RESET_KIND_SHUTDOWN: 1797 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1798 DRV_STATE_UNLOAD); 1799 break; 1800 1801 case RESET_KIND_SUSPEND: 1802 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1803 DRV_STATE_SUSPEND); 1804 break; 1805 1806 default: 1807 break; 1808 } 1809 } 1810} 1811 1812static int tg3_poll_fw(struct tg3 *tp) 1813{ 1814 int i; 1815 u32 val; 1816 1817 if (tg3_flag(tp, NO_FWARE_REPORTED)) 1818 return 0; 1819 1820 if (tg3_flag(tp, IS_SSB_CORE)) { 1821 /* We don't use firmware. */ 1822 return 0; 1823 } 1824 1825 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 1826 /* Wait up to 20ms for init done. */ 1827 for (i = 0; i < 200; i++) { 1828 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1829 return 0; 1830 if (pci_channel_offline(tp->pdev)) 1831 return -ENODEV; 1832 1833 udelay(100); 1834 } 1835 return -ENODEV; 1836 } 1837 1838 /* Wait for firmware initialization to complete. */ 1839 for (i = 0; i < 100000; i++) { 1840 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1841 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1842 break; 1843 if (pci_channel_offline(tp->pdev)) { 1844 if (!tg3_flag(tp, NO_FWARE_REPORTED)) { 1845 tg3_flag_set(tp, NO_FWARE_REPORTED); 1846 netdev_info(tp->dev, "No firmware running\n"); 1847 } 1848 1849 break; 1850 } 1851 1852 udelay(10); 1853 } 1854 1855 /* Chip might not be fitted with firmware. Some Sun onboard 1856 * parts are configured like that. So don't signal the timeout 1857 * of the above loop as an error, but do report the lack of 1858 * running firmware once. 1859 */ 1860 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1861 tg3_flag_set(tp, NO_FWARE_REPORTED); 1862 1863 netdev_info(tp->dev, "No firmware running\n"); 1864 } 1865 1866 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 1867 /* The 57765 A0 needs a little more 1868 * time to do some important work. 1869 */ 1870 mdelay(10); 1871 } 1872 1873 return 0; 1874} 1875 1876static void tg3_link_report(struct tg3 *tp) 1877{ 1878 if (!netif_carrier_ok(tp->dev)) { 1879 netif_info(tp, link, tp->dev, "Link is down\n"); 1880 tg3_ump_link_report(tp); 1881 } else if (netif_msg_link(tp)) { 1882 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1883 (tp->link_config.active_speed == SPEED_1000 ? 1884 1000 : 1885 (tp->link_config.active_speed == SPEED_100 ? 1886 100 : 10)), 1887 (tp->link_config.active_duplex == DUPLEX_FULL ? 1888 "full" : "half")); 1889 1890 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1891 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1892 "on" : "off", 1893 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1894 "on" : "off"); 1895 1896 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1897 netdev_info(tp->dev, "EEE is %s\n", 1898 tp->setlpicnt ? "enabled" : "disabled"); 1899 1900 tg3_ump_link_report(tp); 1901 } 1902 1903 tp->link_up = netif_carrier_ok(tp->dev); 1904} 1905 1906static u32 tg3_decode_flowctrl_1000T(u32 adv) 1907{ 1908 u32 flowctrl = 0; 1909 1910 if (adv & ADVERTISE_PAUSE_CAP) { 1911 flowctrl |= FLOW_CTRL_RX; 1912 if (!(adv & ADVERTISE_PAUSE_ASYM)) 1913 flowctrl |= FLOW_CTRL_TX; 1914 } else if (adv & ADVERTISE_PAUSE_ASYM) 1915 flowctrl |= FLOW_CTRL_TX; 1916 1917 return flowctrl; 1918} 1919 1920static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1921{ 1922 u16 miireg; 1923 1924 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1925 miireg = ADVERTISE_1000XPAUSE; 1926 else if (flow_ctrl & FLOW_CTRL_TX) 1927 miireg = ADVERTISE_1000XPSE_ASYM; 1928 else if (flow_ctrl & FLOW_CTRL_RX) 1929 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1930 else 1931 miireg = 0; 1932 1933 return miireg; 1934} 1935 1936static u32 tg3_decode_flowctrl_1000X(u32 adv) 1937{ 1938 u32 flowctrl = 0; 1939 1940 if (adv & ADVERTISE_1000XPAUSE) { 1941 flowctrl |= FLOW_CTRL_RX; 1942 if (!(adv & ADVERTISE_1000XPSE_ASYM)) 1943 flowctrl |= FLOW_CTRL_TX; 1944 } else if (adv & ADVERTISE_1000XPSE_ASYM) 1945 flowctrl |= FLOW_CTRL_TX; 1946 1947 return flowctrl; 1948} 1949 1950static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1951{ 1952 u8 cap = 0; 1953 1954 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1955 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1956 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1957 if (lcladv & ADVERTISE_1000XPAUSE) 1958 cap = FLOW_CTRL_RX; 1959 if (rmtadv & ADVERTISE_1000XPAUSE) 1960 cap = FLOW_CTRL_TX; 1961 } 1962 1963 return cap; 1964} 1965 1966static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1967{ 1968 u8 autoneg; 1969 u8 flowctrl = 0; 1970 u32 old_rx_mode = tp->rx_mode; 1971 u32 old_tx_mode = tp->tx_mode; 1972 1973 if (tg3_flag(tp, USE_PHYLIB)) 1974 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg; 1975 else 1976 autoneg = tp->link_config.autoneg; 1977 1978 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1979 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1980 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1981 else 1982 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1983 } else 1984 flowctrl = tp->link_config.flowctrl; 1985 1986 tp->link_config.active_flowctrl = flowctrl; 1987 1988 if (flowctrl & FLOW_CTRL_RX) 1989 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1990 else 1991 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1992 1993 if (old_rx_mode != tp->rx_mode) 1994 tw32_f(MAC_RX_MODE, tp->rx_mode); 1995 1996 if (flowctrl & FLOW_CTRL_TX) 1997 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1998 else 1999 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 2000 2001 if (old_tx_mode != tp->tx_mode) 2002 tw32_f(MAC_TX_MODE, tp->tx_mode); 2003} 2004 2005static void tg3_adjust_link(struct net_device *dev) 2006{ 2007 u8 oldflowctrl, linkmesg = 0; 2008 u32 mac_mode, lcl_adv, rmt_adv; 2009 struct tg3 *tp = netdev_priv(dev); 2010 struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2011 2012 spin_lock_bh(&tp->lock); 2013 2014 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 2015 MAC_MODE_HALF_DUPLEX); 2016 2017 oldflowctrl = tp->link_config.active_flowctrl; 2018 2019 if (phydev->link) { 2020 lcl_adv = 0; 2021 rmt_adv = 0; 2022 2023 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 2024 mac_mode |= MAC_MODE_PORT_MODE_MII; 2025 else if (phydev->speed == SPEED_1000 || 2026 tg3_asic_rev(tp) != ASIC_REV_5785) 2027 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2028 else 2029 mac_mode |= MAC_MODE_PORT_MODE_MII; 2030 2031 if (phydev->duplex == DUPLEX_HALF) 2032 mac_mode |= MAC_MODE_HALF_DUPLEX; 2033 else { 2034 lcl_adv = mii_advertise_flowctrl( 2035 tp->link_config.flowctrl); 2036 2037 if (phydev->pause) 2038 rmt_adv = LPA_PAUSE_CAP; 2039 if (phydev->asym_pause) 2040 rmt_adv |= LPA_PAUSE_ASYM; 2041 } 2042 2043 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 2044 } else 2045 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2046 2047 if (mac_mode != tp->mac_mode) { 2048 tp->mac_mode = mac_mode; 2049 tw32_f(MAC_MODE, tp->mac_mode); 2050 udelay(40); 2051 } 2052 2053 if (tg3_asic_rev(tp) == ASIC_REV_5785) { 2054 if (phydev->speed == SPEED_10) 2055 tw32(MAC_MI_STAT, 2056 MAC_MI_STAT_10MBPS_MODE | 2057 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2058 else 2059 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2060 } 2061 2062 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 2063 tw32(MAC_TX_LENGTHS, 2064 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2065 (6 << TX_LENGTHS_IPG_SHIFT) | 2066 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 2067 else 2068 tw32(MAC_TX_LENGTHS, 2069 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2070 (6 << TX_LENGTHS_IPG_SHIFT) | 2071 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 2072 2073 if (phydev->link != tp->old_link || 2074 phydev->speed != tp->link_config.active_speed || 2075 phydev->duplex != tp->link_config.active_duplex || 2076 oldflowctrl != tp->link_config.active_flowctrl) 2077 linkmesg = 1; 2078 2079 tp->old_link = phydev->link; 2080 tp->link_config.active_speed = phydev->speed; 2081 tp->link_config.active_duplex = phydev->duplex; 2082 2083 spin_unlock_bh(&tp->lock); 2084 2085 if (linkmesg) 2086 tg3_link_report(tp); 2087} 2088 2089static int tg3_phy_init(struct tg3 *tp) 2090{ 2091 struct phy_device *phydev; 2092 2093 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 2094 return 0; 2095 2096 /* Bring the PHY back to a known state. */ 2097 tg3_bmcr_reset(tp); 2098 2099 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2100 2101 /* Attach the MAC to the PHY. */ 2102 phydev = phy_connect(tp->dev, phydev_name(phydev), 2103 tg3_adjust_link, phydev->interface); 2104 if (IS_ERR(phydev)) { 2105 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 2106 return PTR_ERR(phydev); 2107 } 2108 2109 /* Mask with MAC supported features. */ 2110 switch (phydev->interface) { 2111 case PHY_INTERFACE_MODE_GMII: 2112 case PHY_INTERFACE_MODE_RGMII: 2113 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 2114 phy_set_max_speed(phydev, SPEED_1000); 2115 phy_support_asym_pause(phydev); 2116 break; 2117 } 2118 fallthrough; 2119 case PHY_INTERFACE_MODE_MII: 2120 phy_set_max_speed(phydev, SPEED_100); 2121 phy_support_asym_pause(phydev); 2122 break; 2123 default: 2124 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2125 return -EINVAL; 2126 } 2127 2128 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 2129 2130 phy_attached_info(phydev); 2131 2132 return 0; 2133} 2134 2135static void tg3_phy_start(struct tg3 *tp) 2136{ 2137 struct phy_device *phydev; 2138 2139 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2140 return; 2141 2142 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2143 2144 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 2145 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 2146 phydev->speed = tp->link_config.speed; 2147 phydev->duplex = tp->link_config.duplex; 2148 phydev->autoneg = tp->link_config.autoneg; 2149 ethtool_convert_legacy_u32_to_link_mode( 2150 phydev->advertising, tp->link_config.advertising); 2151 } 2152 2153 phy_start(phydev); 2154 2155 phy_start_aneg(phydev); 2156} 2157 2158static void tg3_phy_stop(struct tg3 *tp) 2159{ 2160 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2161 return; 2162 2163 phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2164} 2165 2166static void tg3_phy_fini(struct tg3 *tp) 2167{ 2168 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 2169 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2170 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 2171 } 2172} 2173 2174static int tg3_phy_set_extloopbk(struct tg3 *tp) 2175{ 2176 int err; 2177 u32 val; 2178 2179 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 2180 return 0; 2181 2182 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2183 /* Cannot do read-modify-write on 5401 */ 2184 err = tg3_phy_auxctl_write(tp, 2185 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2186 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 2187 0x4c20); 2188 goto done; 2189 } 2190 2191 err = tg3_phy_auxctl_read(tp, 2192 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2193 if (err) 2194 return err; 2195 2196 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 2197 err = tg3_phy_auxctl_write(tp, 2198 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 2199 2200done: 2201 return err; 2202} 2203 2204static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 2205{ 2206 u32 phytest; 2207 2208 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2209 u32 phy; 2210 2211 tg3_writephy(tp, MII_TG3_FET_TEST, 2212 phytest | MII_TG3_FET_SHADOW_EN); 2213 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 2214 if (enable) 2215 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 2216 else 2217 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 2218 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 2219 } 2220 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2221 } 2222} 2223 2224static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 2225{ 2226 u32 reg; 2227 2228 if (!tg3_flag(tp, 5705_PLUS) || 2229 (tg3_flag(tp, 5717_PLUS) && 2230 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2231 return; 2232 2233 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2234 tg3_phy_fet_toggle_apd(tp, enable); 2235 return; 2236 } 2237 2238 reg = MII_TG3_MISC_SHDW_SCR5_LPED | 2239 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 2240 MII_TG3_MISC_SHDW_SCR5_SDTL | 2241 MII_TG3_MISC_SHDW_SCR5_C125OE; 2242 if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable) 2243 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2244 2245 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg); 2246 2247 2248 reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2249 if (enable) 2250 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2251 2252 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg); 2253} 2254 2255static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable) 2256{ 2257 u32 phy; 2258 2259 if (!tg3_flag(tp, 5705_PLUS) || 2260 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2261 return; 2262 2263 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2264 u32 ephy; 2265 2266 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2267 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2268 2269 tg3_writephy(tp, MII_TG3_FET_TEST, 2270 ephy | MII_TG3_FET_SHADOW_EN); 2271 if (!tg3_readphy(tp, reg, &phy)) { 2272 if (enable) 2273 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2274 else 2275 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2276 tg3_writephy(tp, reg, phy); 2277 } 2278 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2279 } 2280 } else { 2281 int ret; 2282 2283 ret = tg3_phy_auxctl_read(tp, 2284 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2285 if (!ret) { 2286 if (enable) 2287 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2288 else 2289 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2290 tg3_phy_auxctl_write(tp, 2291 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2292 } 2293 } 2294} 2295 2296static void tg3_phy_set_wirespeed(struct tg3 *tp) 2297{ 2298 int ret; 2299 u32 val; 2300 2301 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2302 return; 2303 2304 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2305 if (!ret) 2306 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2307 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2308} 2309 2310static void tg3_phy_apply_otp(struct tg3 *tp) 2311{ 2312 u32 otp, phy; 2313 2314 if (!tp->phy_otp) 2315 return; 2316 2317 otp = tp->phy_otp; 2318 2319 if (tg3_phy_toggle_auxctl_smdsp(tp, true)) 2320 return; 2321 2322 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2323 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2324 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2325 2326 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2327 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2328 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2329 2330 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2331 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2332 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2333 2334 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2335 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2336 2337 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2338 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2339 2340 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2341 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2342 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2343 2344 tg3_phy_toggle_auxctl_smdsp(tp, false); 2345} 2346 2347static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee) 2348{ 2349 u32 val; 2350 struct ethtool_eee *dest = &tp->eee; 2351 2352 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2353 return; 2354 2355 if (eee) 2356 dest = eee; 2357 2358 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val)) 2359 return; 2360 2361 /* Pull eee_active */ 2362 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2363 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) { 2364 dest->eee_active = 1; 2365 } else 2366 dest->eee_active = 0; 2367 2368 /* Pull lp advertised settings */ 2369 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val)) 2370 return; 2371 dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2372 2373 /* Pull advertised and eee_enabled settings */ 2374 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val)) 2375 return; 2376 dest->eee_enabled = !!val; 2377 dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2378 2379 /* Pull tx_lpi_enabled */ 2380 val = tr32(TG3_CPMU_EEE_MODE); 2381 dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX); 2382 2383 /* Pull lpi timer value */ 2384 dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff; 2385} 2386 2387static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up) 2388{ 2389 u32 val; 2390 2391 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2392 return; 2393 2394 tp->setlpicnt = 0; 2395 2396 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2397 current_link_up && 2398 tp->link_config.active_duplex == DUPLEX_FULL && 2399 (tp->link_config.active_speed == SPEED_100 || 2400 tp->link_config.active_speed == SPEED_1000)) { 2401 u32 eeectl; 2402 2403 if (tp->link_config.active_speed == SPEED_1000) 2404 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2405 else 2406 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2407 2408 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2409 2410 tg3_eee_pull_config(tp, NULL); 2411 if (tp->eee.eee_active) 2412 tp->setlpicnt = 2; 2413 } 2414 2415 if (!tp->setlpicnt) { 2416 if (current_link_up && 2417 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2418 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2419 tg3_phy_toggle_auxctl_smdsp(tp, false); 2420 } 2421 2422 val = tr32(TG3_CPMU_EEE_MODE); 2423 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2424 } 2425} 2426 2427static void tg3_phy_eee_enable(struct tg3 *tp) 2428{ 2429 u32 val; 2430 2431 if (tp->link_config.active_speed == SPEED_1000 && 2432 (tg3_asic_rev(tp) == ASIC_REV_5717 || 2433 tg3_asic_rev(tp) == ASIC_REV_5719 || 2434 tg3_flag(tp, 57765_CLASS)) && 2435 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2436 val = MII_TG3_DSP_TAP26_ALNOKO | 2437 MII_TG3_DSP_TAP26_RMRXSTO; 2438 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2439 tg3_phy_toggle_auxctl_smdsp(tp, false); 2440 } 2441 2442 val = tr32(TG3_CPMU_EEE_MODE); 2443 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2444} 2445 2446static int tg3_wait_macro_done(struct tg3 *tp) 2447{ 2448 int limit = 100; 2449 2450 while (limit--) { 2451 u32 tmp32; 2452 2453 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2454 if ((tmp32 & 0x1000) == 0) 2455 break; 2456 } 2457 } 2458 if (limit < 0) 2459 return -EBUSY; 2460 2461 return 0; 2462} 2463 2464static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2465{ 2466 static const u32 test_pat[4][6] = { 2467 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2468 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2469 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2470 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2471 }; 2472 int chan; 2473 2474 for (chan = 0; chan < 4; chan++) { 2475 int i; 2476 2477 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2478 (chan * 0x2000) | 0x0200); 2479 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2480 2481 for (i = 0; i < 6; i++) 2482 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2483 test_pat[chan][i]); 2484 2485 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2486 if (tg3_wait_macro_done(tp)) { 2487 *resetp = 1; 2488 return -EBUSY; 2489 } 2490 2491 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2492 (chan * 0x2000) | 0x0200); 2493 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2494 if (tg3_wait_macro_done(tp)) { 2495 *resetp = 1; 2496 return -EBUSY; 2497 } 2498 2499 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2500 if (tg3_wait_macro_done(tp)) { 2501 *resetp = 1; 2502 return -EBUSY; 2503 } 2504 2505 for (i = 0; i < 6; i += 2) { 2506 u32 low, high; 2507 2508 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2509 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2510 tg3_wait_macro_done(tp)) { 2511 *resetp = 1; 2512 return -EBUSY; 2513 } 2514 low &= 0x7fff; 2515 high &= 0x000f; 2516 if (low != test_pat[chan][i] || 2517 high != test_pat[chan][i+1]) { 2518 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2519 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2520 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2521 2522 return -EBUSY; 2523 } 2524 } 2525 } 2526 2527 return 0; 2528} 2529 2530static int tg3_phy_reset_chanpat(struct tg3 *tp) 2531{ 2532 int chan; 2533 2534 for (chan = 0; chan < 4; chan++) { 2535 int i; 2536 2537 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2538 (chan * 0x2000) | 0x0200); 2539 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2540 for (i = 0; i < 6; i++) 2541 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2542 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2543 if (tg3_wait_macro_done(tp)) 2544 return -EBUSY; 2545 } 2546 2547 return 0; 2548} 2549 2550static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2551{ 2552 u32 reg32, phy9_orig; 2553 int retries, do_phy_reset, err; 2554 2555 retries = 10; 2556 do_phy_reset = 1; 2557 do { 2558 if (do_phy_reset) { 2559 err = tg3_bmcr_reset(tp); 2560 if (err) 2561 return err; 2562 do_phy_reset = 0; 2563 } 2564 2565 /* Disable transmitter and interrupt. */ 2566 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2567 continue; 2568 2569 reg32 |= 0x3000; 2570 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2571 2572 /* Set full-duplex, 1000 mbps. */ 2573 tg3_writephy(tp, MII_BMCR, 2574 BMCR_FULLDPLX | BMCR_SPEED1000); 2575 2576 /* Set to master mode. */ 2577 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2578 continue; 2579 2580 tg3_writephy(tp, MII_CTRL1000, 2581 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2582 2583 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 2584 if (err) 2585 return err; 2586 2587 /* Block the PHY control access. */ 2588 tg3_phydsp_write(tp, 0x8005, 0x0800); 2589 2590 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2591 if (!err) 2592 break; 2593 } while (--retries); 2594 2595 err = tg3_phy_reset_chanpat(tp); 2596 if (err) 2597 return err; 2598 2599 tg3_phydsp_write(tp, 0x8005, 0x0000); 2600 2601 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2602 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2603 2604 tg3_phy_toggle_auxctl_smdsp(tp, false); 2605 2606 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2607 2608 err = tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32); 2609 if (err) 2610 return err; 2611 2612 reg32 &= ~0x3000; 2613 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2614 2615 return 0; 2616} 2617 2618static void tg3_carrier_off(struct tg3 *tp) 2619{ 2620 netif_carrier_off(tp->dev); 2621 tp->link_up = false; 2622} 2623 2624static void tg3_warn_mgmt_link_flap(struct tg3 *tp) 2625{ 2626 if (tg3_flag(tp, ENABLE_ASF)) 2627 netdev_warn(tp->dev, 2628 "Management side-band traffic will be interrupted during phy settings change\n"); 2629} 2630 2631/* This will reset the tigon3 PHY if there is no valid 2632 * link unless the FORCE argument is non-zero. 2633 */ 2634static int tg3_phy_reset(struct tg3 *tp) 2635{ 2636 u32 val, cpmuctrl; 2637 int err; 2638 2639 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2640 val = tr32(GRC_MISC_CFG); 2641 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2642 udelay(40); 2643 } 2644 err = tg3_readphy(tp, MII_BMSR, &val); 2645 err |= tg3_readphy(tp, MII_BMSR, &val); 2646 if (err != 0) 2647 return -EBUSY; 2648 2649 if (netif_running(tp->dev) && tp->link_up) { 2650 netif_carrier_off(tp->dev); 2651 tg3_link_report(tp); 2652 } 2653 2654 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 2655 tg3_asic_rev(tp) == ASIC_REV_5704 || 2656 tg3_asic_rev(tp) == ASIC_REV_5705) { 2657 err = tg3_phy_reset_5703_4_5(tp); 2658 if (err) 2659 return err; 2660 goto out; 2661 } 2662 2663 cpmuctrl = 0; 2664 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 2665 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 2666 cpmuctrl = tr32(TG3_CPMU_CTRL); 2667 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2668 tw32(TG3_CPMU_CTRL, 2669 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2670 } 2671 2672 err = tg3_bmcr_reset(tp); 2673 if (err) 2674 return err; 2675 2676 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2677 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2678 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2679 2680 tw32(TG3_CPMU_CTRL, cpmuctrl); 2681 } 2682 2683 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 2684 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 2685 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2686 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2687 CPMU_LSPD_1000MB_MACCLK_12_5) { 2688 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2689 udelay(40); 2690 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2691 } 2692 } 2693 2694 if (tg3_flag(tp, 5717_PLUS) && 2695 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2696 return 0; 2697 2698 tg3_phy_apply_otp(tp); 2699 2700 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2701 tg3_phy_toggle_apd(tp, true); 2702 else 2703 tg3_phy_toggle_apd(tp, false); 2704 2705out: 2706 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2707 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2708 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2709 tg3_phydsp_write(tp, 0x000a, 0x0323); 2710 tg3_phy_toggle_auxctl_smdsp(tp, false); 2711 } 2712 2713 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2714 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2715 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2716 } 2717 2718 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2719 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2720 tg3_phydsp_write(tp, 0x000a, 0x310b); 2721 tg3_phydsp_write(tp, 0x201f, 0x9506); 2722 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2723 tg3_phy_toggle_auxctl_smdsp(tp, false); 2724 } 2725 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2726 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2727 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2728 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2729 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2730 tg3_writephy(tp, MII_TG3_TEST1, 2731 MII_TG3_TEST1_TRIM_EN | 0x4); 2732 } else 2733 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2734 2735 tg3_phy_toggle_auxctl_smdsp(tp, false); 2736 } 2737 } 2738 2739 /* Set Extended packet length bit (bit 14) on all chips that */ 2740 /* support jumbo frames */ 2741 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2742 /* Cannot do read-modify-write on 5401 */ 2743 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2744 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2745 /* Set bit 14 with read-modify-write to preserve other bits */ 2746 err = tg3_phy_auxctl_read(tp, 2747 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2748 if (!err) 2749 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2750 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2751 } 2752 2753 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2754 * jumbo frames transmission. 2755 */ 2756 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2757 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2758 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2759 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2760 } 2761 2762 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2763 /* adjust output voltage */ 2764 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2765 } 2766 2767 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0) 2768 tg3_phydsp_write(tp, 0xffb, 0x4000); 2769 2770 tg3_phy_toggle_automdix(tp, true); 2771 tg3_phy_set_wirespeed(tp); 2772 return 0; 2773} 2774 2775#define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2776#define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2777#define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2778 TG3_GPIO_MSG_NEED_VAUX) 2779#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2780 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2781 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2782 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2783 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2784 2785#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2786 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2787 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2788 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2789 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2790 2791static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2792{ 2793 u32 status, shift; 2794 2795 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2796 tg3_asic_rev(tp) == ASIC_REV_5719) 2797 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2798 else 2799 status = tr32(TG3_CPMU_DRV_STATUS); 2800 2801 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2802 status &= ~(TG3_GPIO_MSG_MASK << shift); 2803 status |= (newstat << shift); 2804 2805 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2806 tg3_asic_rev(tp) == ASIC_REV_5719) 2807 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2808 else 2809 tw32(TG3_CPMU_DRV_STATUS, status); 2810 2811 return status >> TG3_APE_GPIO_MSG_SHIFT; 2812} 2813 2814static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2815{ 2816 if (!tg3_flag(tp, IS_NIC)) 2817 return 0; 2818 2819 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2820 tg3_asic_rev(tp) == ASIC_REV_5719 || 2821 tg3_asic_rev(tp) == ASIC_REV_5720) { 2822 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2823 return -EIO; 2824 2825 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2826 2827 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2828 TG3_GRC_LCLCTL_PWRSW_DELAY); 2829 2830 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2831 } else { 2832 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2833 TG3_GRC_LCLCTL_PWRSW_DELAY); 2834 } 2835 2836 return 0; 2837} 2838 2839static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2840{ 2841 u32 grc_local_ctrl; 2842 2843 if (!tg3_flag(tp, IS_NIC) || 2844 tg3_asic_rev(tp) == ASIC_REV_5700 || 2845 tg3_asic_rev(tp) == ASIC_REV_5701) 2846 return; 2847 2848 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2849 2850 tw32_wait_f(GRC_LOCAL_CTRL, 2851 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2852 TG3_GRC_LCLCTL_PWRSW_DELAY); 2853 2854 tw32_wait_f(GRC_LOCAL_CTRL, 2855 grc_local_ctrl, 2856 TG3_GRC_LCLCTL_PWRSW_DELAY); 2857 2858 tw32_wait_f(GRC_LOCAL_CTRL, 2859 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2860 TG3_GRC_LCLCTL_PWRSW_DELAY); 2861} 2862 2863static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2864{ 2865 if (!tg3_flag(tp, IS_NIC)) 2866 return; 2867 2868 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 2869 tg3_asic_rev(tp) == ASIC_REV_5701) { 2870 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2871 (GRC_LCLCTRL_GPIO_OE0 | 2872 GRC_LCLCTRL_GPIO_OE1 | 2873 GRC_LCLCTRL_GPIO_OE2 | 2874 GRC_LCLCTRL_GPIO_OUTPUT0 | 2875 GRC_LCLCTRL_GPIO_OUTPUT1), 2876 TG3_GRC_LCLCTL_PWRSW_DELAY); 2877 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2878 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2879 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2880 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2881 GRC_LCLCTRL_GPIO_OE1 | 2882 GRC_LCLCTRL_GPIO_OE2 | 2883 GRC_LCLCTRL_GPIO_OUTPUT0 | 2884 GRC_LCLCTRL_GPIO_OUTPUT1 | 2885 tp->grc_local_ctrl; 2886 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2887 TG3_GRC_LCLCTL_PWRSW_DELAY); 2888 2889 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2890 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2891 TG3_GRC_LCLCTL_PWRSW_DELAY); 2892 2893 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2894 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2895 TG3_GRC_LCLCTL_PWRSW_DELAY); 2896 } else { 2897 u32 no_gpio2; 2898 u32 grc_local_ctrl = 0; 2899 2900 /* Workaround to prevent overdrawing Amps. */ 2901 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 2902 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2903 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2904 grc_local_ctrl, 2905 TG3_GRC_LCLCTL_PWRSW_DELAY); 2906 } 2907 2908 /* On 5753 and variants, GPIO2 cannot be used. */ 2909 no_gpio2 = tp->nic_sram_data_cfg & 2910 NIC_SRAM_DATA_CFG_NO_GPIO2; 2911 2912 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2913 GRC_LCLCTRL_GPIO_OE1 | 2914 GRC_LCLCTRL_GPIO_OE2 | 2915 GRC_LCLCTRL_GPIO_OUTPUT1 | 2916 GRC_LCLCTRL_GPIO_OUTPUT2; 2917 if (no_gpio2) { 2918 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2919 GRC_LCLCTRL_GPIO_OUTPUT2); 2920 } 2921 tw32_wait_f(GRC_LOCAL_CTRL, 2922 tp->grc_local_ctrl | grc_local_ctrl, 2923 TG3_GRC_LCLCTL_PWRSW_DELAY); 2924 2925 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2926 2927 tw32_wait_f(GRC_LOCAL_CTRL, 2928 tp->grc_local_ctrl | grc_local_ctrl, 2929 TG3_GRC_LCLCTL_PWRSW_DELAY); 2930 2931 if (!no_gpio2) { 2932 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2933 tw32_wait_f(GRC_LOCAL_CTRL, 2934 tp->grc_local_ctrl | grc_local_ctrl, 2935 TG3_GRC_LCLCTL_PWRSW_DELAY); 2936 } 2937 } 2938} 2939 2940static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2941{ 2942 u32 msg = 0; 2943 2944 /* Serialize power state transitions */ 2945 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2946 return; 2947 2948 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2949 msg = TG3_GPIO_MSG_NEED_VAUX; 2950 2951 msg = tg3_set_function_status(tp, msg); 2952 2953 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2954 goto done; 2955 2956 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2957 tg3_pwrsrc_switch_to_vaux(tp); 2958 else 2959 tg3_pwrsrc_die_with_vmain(tp); 2960 2961done: 2962 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2963} 2964 2965static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2966{ 2967 bool need_vaux = false; 2968 2969 /* The GPIOs do something completely different on 57765. */ 2970 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2971 return; 2972 2973 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2974 tg3_asic_rev(tp) == ASIC_REV_5719 || 2975 tg3_asic_rev(tp) == ASIC_REV_5720) { 2976 tg3_frob_aux_power_5717(tp, include_wol ? 2977 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2978 return; 2979 } 2980 2981 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2982 struct net_device *dev_peer; 2983 2984 dev_peer = pci_get_drvdata(tp->pdev_peer); 2985 2986 /* remove_one() may have been run on the peer. */ 2987 if (dev_peer) { 2988 struct tg3 *tp_peer = netdev_priv(dev_peer); 2989 2990 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2991 return; 2992 2993 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2994 tg3_flag(tp_peer, ENABLE_ASF)) 2995 need_vaux = true; 2996 } 2997 } 2998 2999 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 3000 tg3_flag(tp, ENABLE_ASF)) 3001 need_vaux = true; 3002 3003 if (need_vaux) 3004 tg3_pwrsrc_switch_to_vaux(tp); 3005 else 3006 tg3_pwrsrc_die_with_vmain(tp); 3007} 3008 3009static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 3010{ 3011 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 3012 return 1; 3013 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 3014 if (speed != SPEED_10) 3015 return 1; 3016 } else if (speed == SPEED_10) 3017 return 1; 3018 3019 return 0; 3020} 3021 3022static bool tg3_phy_power_bug(struct tg3 *tp) 3023{ 3024 switch (tg3_asic_rev(tp)) { 3025 case ASIC_REV_5700: 3026 case ASIC_REV_5704: 3027 return true; 3028 case ASIC_REV_5780: 3029 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3030 return true; 3031 return false; 3032 case ASIC_REV_5717: 3033 if (!tp->pci_fn) 3034 return true; 3035 return false; 3036 case ASIC_REV_5719: 3037 case ASIC_REV_5720: 3038 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 3039 !tp->pci_fn) 3040 return true; 3041 return false; 3042 } 3043 3044 return false; 3045} 3046 3047static bool tg3_phy_led_bug(struct tg3 *tp) 3048{ 3049 switch (tg3_asic_rev(tp)) { 3050 case ASIC_REV_5719: 3051 case ASIC_REV_5720: 3052 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 3053 !tp->pci_fn) 3054 return true; 3055 return false; 3056 } 3057 3058 return false; 3059} 3060 3061static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 3062{ 3063 u32 val; 3064 3065 if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) 3066 return; 3067 3068 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 3069 if (tg3_asic_rev(tp) == ASIC_REV_5704) { 3070 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 3071 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 3072 3073 sg_dig_ctrl |= 3074 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 3075 tw32(SG_DIG_CTRL, sg_dig_ctrl); 3076 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 3077 } 3078 return; 3079 } 3080 3081 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3082 tg3_bmcr_reset(tp); 3083 val = tr32(GRC_MISC_CFG); 3084 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 3085 udelay(40); 3086 return; 3087 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3088 u32 phytest; 3089 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 3090 u32 phy; 3091 3092 tg3_writephy(tp, MII_ADVERTISE, 0); 3093 tg3_writephy(tp, MII_BMCR, 3094 BMCR_ANENABLE | BMCR_ANRESTART); 3095 3096 tg3_writephy(tp, MII_TG3_FET_TEST, 3097 phytest | MII_TG3_FET_SHADOW_EN); 3098 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 3099 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 3100 tg3_writephy(tp, 3101 MII_TG3_FET_SHDW_AUXMODE4, 3102 phy); 3103 } 3104 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 3105 } 3106 return; 3107 } else if (do_low_power) { 3108 if (!tg3_phy_led_bug(tp)) 3109 tg3_writephy(tp, MII_TG3_EXT_CTRL, 3110 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 3111 3112 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3113 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 3114 MII_TG3_AUXCTL_PCTL_VREG_11V; 3115 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 3116 } 3117 3118 /* The PHY should not be powered down on some chips because 3119 * of bugs. 3120 */ 3121 if (tg3_phy_power_bug(tp)) 3122 return; 3123 3124 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 3125 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 3126 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 3127 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 3128 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 3129 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 3130 } 3131 3132 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 3133} 3134 3135/* tp->lock is held. */ 3136static int tg3_nvram_lock(struct tg3 *tp) 3137{ 3138 if (tg3_flag(tp, NVRAM)) { 3139 int i; 3140 3141 if (tp->nvram_lock_cnt == 0) { 3142 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 3143 for (i = 0; i < 8000; i++) { 3144 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 3145 break; 3146 udelay(20); 3147 } 3148 if (i == 8000) { 3149 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 3150 return -ENODEV; 3151 } 3152 } 3153 tp->nvram_lock_cnt++; 3154 } 3155 return 0; 3156} 3157 3158/* tp->lock is held. */ 3159static void tg3_nvram_unlock(struct tg3 *tp) 3160{ 3161 if (tg3_flag(tp, NVRAM)) { 3162 if (tp->nvram_lock_cnt > 0) 3163 tp->nvram_lock_cnt--; 3164 if (tp->nvram_lock_cnt == 0) 3165 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 3166 } 3167} 3168 3169/* tp->lock is held. */ 3170static void tg3_enable_nvram_access(struct tg3 *tp) 3171{ 3172 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3173 u32 nvaccess = tr32(NVRAM_ACCESS); 3174 3175 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 3176 } 3177} 3178 3179/* tp->lock is held. */ 3180static void tg3_disable_nvram_access(struct tg3 *tp) 3181{ 3182 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3183 u32 nvaccess = tr32(NVRAM_ACCESS); 3184 3185 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 3186 } 3187} 3188 3189static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 3190 u32 offset, u32 *val) 3191{ 3192 u32 tmp; 3193 int i; 3194 3195 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 3196 return -EINVAL; 3197 3198 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 3199 EEPROM_ADDR_DEVID_MASK | 3200 EEPROM_ADDR_READ); 3201 tw32(GRC_EEPROM_ADDR, 3202 tmp | 3203 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3204 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 3205 EEPROM_ADDR_ADDR_MASK) | 3206 EEPROM_ADDR_READ | EEPROM_ADDR_START); 3207 3208 for (i = 0; i < 1000; i++) { 3209 tmp = tr32(GRC_EEPROM_ADDR); 3210 3211 if (tmp & EEPROM_ADDR_COMPLETE) 3212 break; 3213 msleep(1); 3214 } 3215 if (!(tmp & EEPROM_ADDR_COMPLETE)) 3216 return -EBUSY; 3217 3218 tmp = tr32(GRC_EEPROM_DATA); 3219 3220 /* 3221 * The data will always be opposite the native endian 3222 * format. Perform a blind byteswap to compensate. 3223 */ 3224 *val = swab32(tmp); 3225 3226 return 0; 3227} 3228 3229#define NVRAM_CMD_TIMEOUT 10000 3230 3231static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 3232{ 3233 int i; 3234 3235 tw32(NVRAM_CMD, nvram_cmd); 3236 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 3237 usleep_range(10, 40); 3238 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 3239 udelay(10); 3240 break; 3241 } 3242 } 3243 3244 if (i == NVRAM_CMD_TIMEOUT) 3245 return -EBUSY; 3246 3247 return 0; 3248} 3249 3250static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 3251{ 3252 if (tg3_flag(tp, NVRAM) && 3253 tg3_flag(tp, NVRAM_BUFFERED) && 3254 tg3_flag(tp, FLASH) && 3255 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3256 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3257 3258 addr = ((addr / tp->nvram_pagesize) << 3259 ATMEL_AT45DB0X1B_PAGE_POS) + 3260 (addr % tp->nvram_pagesize); 3261 3262 return addr; 3263} 3264 3265static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 3266{ 3267 if (tg3_flag(tp, NVRAM) && 3268 tg3_flag(tp, NVRAM_BUFFERED) && 3269 tg3_flag(tp, FLASH) && 3270 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3271 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3272 3273 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 3274 tp->nvram_pagesize) + 3275 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 3276 3277 return addr; 3278} 3279 3280/* NOTE: Data read in from NVRAM is byteswapped according to 3281 * the byteswapping settings for all other register accesses. 3282 * tg3 devices are BE devices, so on a BE machine, the data 3283 * returned will be exactly as it is seen in NVRAM. On a LE 3284 * machine, the 32-bit value will be byteswapped. 3285 */ 3286static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 3287{ 3288 int ret; 3289 3290 if (!tg3_flag(tp, NVRAM)) 3291 return tg3_nvram_read_using_eeprom(tp, offset, val); 3292 3293 offset = tg3_nvram_phys_addr(tp, offset); 3294 3295 if (offset > NVRAM_ADDR_MSK) 3296 return -EINVAL; 3297 3298 ret = tg3_nvram_lock(tp); 3299 if (ret) 3300 return ret; 3301 3302 tg3_enable_nvram_access(tp); 3303 3304 tw32(NVRAM_ADDR, offset); 3305 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 3306 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 3307 3308 if (ret == 0) 3309 *val = tr32(NVRAM_RDDATA); 3310 3311 tg3_disable_nvram_access(tp); 3312 3313 tg3_nvram_unlock(tp); 3314 3315 return ret; 3316} 3317 3318/* Ensures NVRAM data is in bytestream format. */ 3319static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 3320{ 3321 u32 v; 3322 int res = tg3_nvram_read(tp, offset, &v); 3323 if (!res) 3324 *val = cpu_to_be32(v); 3325 return res; 3326} 3327 3328static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 3329 u32 offset, u32 len, u8 *buf) 3330{ 3331 int i, j, rc = 0; 3332 u32 val; 3333 3334 for (i = 0; i < len; i += 4) { 3335 u32 addr; 3336 __be32 data; 3337 3338 addr = offset + i; 3339 3340 memcpy(&data, buf + i, 4); 3341 3342 /* 3343 * The SEEPROM interface expects the data to always be opposite 3344 * the native endian format. We accomplish this by reversing 3345 * all the operations that would have been performed on the 3346 * data from a call to tg3_nvram_read_be32(). 3347 */ 3348 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3349 3350 val = tr32(GRC_EEPROM_ADDR); 3351 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3352 3353 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3354 EEPROM_ADDR_READ); 3355 tw32(GRC_EEPROM_ADDR, val | 3356 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3357 (addr & EEPROM_ADDR_ADDR_MASK) | 3358 EEPROM_ADDR_START | 3359 EEPROM_ADDR_WRITE); 3360 3361 for (j = 0; j < 1000; j++) { 3362 val = tr32(GRC_EEPROM_ADDR); 3363 3364 if (val & EEPROM_ADDR_COMPLETE) 3365 break; 3366 msleep(1); 3367 } 3368 if (!(val & EEPROM_ADDR_COMPLETE)) { 3369 rc = -EBUSY; 3370 break; 3371 } 3372 } 3373 3374 return rc; 3375} 3376 3377/* offset and length are dword aligned */ 3378static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3379 u8 *buf) 3380{ 3381 int ret = 0; 3382 u32 pagesize = tp->nvram_pagesize; 3383 u32 pagemask = pagesize - 1; 3384 u32 nvram_cmd; 3385 u8 *tmp; 3386 3387 tmp = kmalloc(pagesize, GFP_KERNEL); 3388 if (tmp == NULL) 3389 return -ENOMEM; 3390 3391 while (len) { 3392 int j; 3393 u32 phy_addr, page_off, size; 3394 3395 phy_addr = offset & ~pagemask; 3396 3397 for (j = 0; j < pagesize; j += 4) { 3398 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3399 (__be32 *) (tmp + j)); 3400 if (ret) 3401 break; 3402 } 3403 if (ret) 3404 break; 3405 3406 page_off = offset & pagemask; 3407 size = pagesize; 3408 if (len < size) 3409 size = len; 3410 3411 len -= size; 3412 3413 memcpy(tmp + page_off, buf, size); 3414 3415 offset = offset + (pagesize - page_off); 3416 3417 tg3_enable_nvram_access(tp); 3418 3419 /* 3420 * Before we can erase the flash page, we need 3421 * to issue a special "write enable" command. 3422 */ 3423 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3424 3425 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3426 break; 3427 3428 /* Erase the target page */ 3429 tw32(NVRAM_ADDR, phy_addr); 3430 3431 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3432 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3433 3434 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3435 break; 3436 3437 /* Issue another write enable to start the write. */ 3438 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3439 3440 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3441 break; 3442 3443 for (j = 0; j < pagesize; j += 4) { 3444 __be32 data; 3445 3446 data = *((__be32 *) (tmp + j)); 3447 3448 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3449 3450 tw32(NVRAM_ADDR, phy_addr + j); 3451 3452 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3453 NVRAM_CMD_WR; 3454 3455 if (j == 0) 3456 nvram_cmd |= NVRAM_CMD_FIRST; 3457 else if (j == (pagesize - 4)) 3458 nvram_cmd |= NVRAM_CMD_LAST; 3459 3460 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3461 if (ret) 3462 break; 3463 } 3464 if (ret) 3465 break; 3466 } 3467 3468 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3469 tg3_nvram_exec_cmd(tp, nvram_cmd); 3470 3471 kfree(tmp); 3472 3473 return ret; 3474} 3475 3476/* offset and length are dword aligned */ 3477static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3478 u8 *buf) 3479{ 3480 int i, ret = 0; 3481 3482 for (i = 0; i < len; i += 4, offset += 4) { 3483 u32 page_off, phy_addr, nvram_cmd; 3484 __be32 data; 3485 3486 memcpy(&data, buf + i, 4); 3487 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3488 3489 page_off = offset % tp->nvram_pagesize; 3490 3491 phy_addr = tg3_nvram_phys_addr(tp, offset); 3492 3493 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3494 3495 if (page_off == 0 || i == 0) 3496 nvram_cmd |= NVRAM_CMD_FIRST; 3497 if (page_off == (tp->nvram_pagesize - 4)) 3498 nvram_cmd |= NVRAM_CMD_LAST; 3499 3500 if (i == (len - 4)) 3501 nvram_cmd |= NVRAM_CMD_LAST; 3502 3503 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3504 !tg3_flag(tp, FLASH) || 3505 !tg3_flag(tp, 57765_PLUS)) 3506 tw32(NVRAM_ADDR, phy_addr); 3507 3508 if (tg3_asic_rev(tp) != ASIC_REV_5752 && 3509 !tg3_flag(tp, 5755_PLUS) && 3510 (tp->nvram_jedecnum == JEDEC_ST) && 3511 (nvram_cmd & NVRAM_CMD_FIRST)) { 3512 u32 cmd; 3513 3514 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3515 ret = tg3_nvram_exec_cmd(tp, cmd); 3516 if (ret) 3517 break; 3518 } 3519 if (!tg3_flag(tp, FLASH)) { 3520 /* We always do complete word writes to eeprom. */ 3521 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3522 } 3523 3524 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3525 if (ret) 3526 break; 3527 } 3528 return ret; 3529} 3530 3531/* offset and length are dword aligned */ 3532static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3533{ 3534 int ret; 3535 3536 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3537 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3538 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3539 udelay(40); 3540 } 3541 3542 if (!tg3_flag(tp, NVRAM)) { 3543 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3544 } else { 3545 u32 grc_mode; 3546 3547 ret = tg3_nvram_lock(tp); 3548 if (ret) 3549 return ret; 3550 3551 tg3_enable_nvram_access(tp); 3552 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3553 tw32(NVRAM_WRITE1, 0x406); 3554 3555 grc_mode = tr32(GRC_MODE); 3556 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3557 3558 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3559 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3560 buf); 3561 } else { 3562 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3563 buf); 3564 } 3565 3566 grc_mode = tr32(GRC_MODE); 3567 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3568 3569 tg3_disable_nvram_access(tp); 3570 tg3_nvram_unlock(tp); 3571 } 3572 3573 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3574 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3575 udelay(40); 3576 } 3577 3578 return ret; 3579} 3580 3581#define RX_CPU_SCRATCH_BASE 0x30000 3582#define RX_CPU_SCRATCH_SIZE 0x04000 3583#define TX_CPU_SCRATCH_BASE 0x34000 3584#define TX_CPU_SCRATCH_SIZE 0x04000 3585 3586/* tp->lock is held. */ 3587static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base) 3588{ 3589 int i; 3590 const int iters = 10000; 3591 3592 for (i = 0; i < iters; i++) { 3593 tw32(cpu_base + CPU_STATE, 0xffffffff); 3594 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3595 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT) 3596 break; 3597 if (pci_channel_offline(tp->pdev)) 3598 return -EBUSY; 3599 } 3600 3601 return (i == iters) ? -EBUSY : 0; 3602} 3603 3604/* tp->lock is held. */ 3605static int tg3_rxcpu_pause(struct tg3 *tp) 3606{ 3607 int rc = tg3_pause_cpu(tp, RX_CPU_BASE); 3608 3609 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3610 tw32_f(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3611 udelay(10); 3612 3613 return rc; 3614} 3615 3616/* tp->lock is held. */ 3617static int tg3_txcpu_pause(struct tg3 *tp) 3618{ 3619 return tg3_pause_cpu(tp, TX_CPU_BASE); 3620} 3621 3622/* tp->lock is held. */ 3623static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base) 3624{ 3625 tw32(cpu_base + CPU_STATE, 0xffffffff); 3626 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3627} 3628 3629/* tp->lock is held. */ 3630static void tg3_rxcpu_resume(struct tg3 *tp) 3631{ 3632 tg3_resume_cpu(tp, RX_CPU_BASE); 3633} 3634 3635/* tp->lock is held. */ 3636static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base) 3637{ 3638 int rc; 3639 3640 BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3641 3642 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3643 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3644 3645 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3646 return 0; 3647 } 3648 if (cpu_base == RX_CPU_BASE) { 3649 rc = tg3_rxcpu_pause(tp); 3650 } else { 3651 /* 3652 * There is only an Rx CPU for the 5750 derivative in the 3653 * BCM4785. 3654 */ 3655 if (tg3_flag(tp, IS_SSB_CORE)) 3656 return 0; 3657 3658 rc = tg3_txcpu_pause(tp); 3659 } 3660 3661 if (rc) { 3662 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3663 __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX"); 3664 return -ENODEV; 3665 } 3666 3667 /* Clear firmware's nvram arbitration. */ 3668 if (tg3_flag(tp, NVRAM)) 3669 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3670 return 0; 3671} 3672 3673static int tg3_fw_data_len(struct tg3 *tp, 3674 const struct tg3_firmware_hdr *fw_hdr) 3675{ 3676 int fw_len; 3677 3678 /* Non fragmented firmware have one firmware header followed by a 3679 * contiguous chunk of data to be written. The length field in that 3680 * header is not the length of data to be written but the complete 3681 * length of the bss. The data length is determined based on 3682 * tp->fw->size minus headers. 3683 * 3684 * Fragmented firmware have a main header followed by multiple 3685 * fragments. Each fragment is identical to non fragmented firmware 3686 * with a firmware header followed by a contiguous chunk of data. In 3687 * the main header, the length field is unused and set to 0xffffffff. 3688 * In each fragment header the length is the entire size of that 3689 * fragment i.e. fragment data + header length. Data length is 3690 * therefore length field in the header minus TG3_FW_HDR_LEN. 3691 */ 3692 if (tp->fw_len == 0xffffffff) 3693 fw_len = be32_to_cpu(fw_hdr->len); 3694 else 3695 fw_len = tp->fw->size; 3696 3697 return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32); 3698} 3699 3700/* tp->lock is held. */ 3701static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3702 u32 cpu_scratch_base, int cpu_scratch_size, 3703 const struct tg3_firmware_hdr *fw_hdr) 3704{ 3705 int err, i; 3706 void (*write_op)(struct tg3 *, u32, u32); 3707 int total_len = tp->fw->size; 3708 3709 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3710 netdev_err(tp->dev, 3711 "%s: Trying to load TX cpu firmware which is 5705\n", 3712 __func__); 3713 return -EINVAL; 3714 } 3715 3716 if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766) 3717 write_op = tg3_write_mem; 3718 else 3719 write_op = tg3_write_indirect_reg32; 3720 3721 if (tg3_asic_rev(tp) != ASIC_REV_57766) { 3722 /* It is possible that bootcode is still loading at this point. 3723 * Get the nvram lock first before halting the cpu. 3724 */ 3725 int lock_err = tg3_nvram_lock(tp); 3726 err = tg3_halt_cpu(tp, cpu_base); 3727 if (!lock_err) 3728 tg3_nvram_unlock(tp); 3729 if (err) 3730 goto out; 3731 3732 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3733 write_op(tp, cpu_scratch_base + i, 0); 3734 tw32(cpu_base + CPU_STATE, 0xffffffff); 3735 tw32(cpu_base + CPU_MODE, 3736 tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT); 3737 } else { 3738 /* Subtract additional main header for fragmented firmware and 3739 * advance to the first fragment 3740 */ 3741 total_len -= TG3_FW_HDR_LEN; 3742 fw_hdr++; 3743 } 3744 3745 do { 3746 u32 *fw_data = (u32 *)(fw_hdr + 1); 3747 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++) 3748 write_op(tp, cpu_scratch_base + 3749 (be32_to_cpu(fw_hdr->base_addr) & 0xffff) + 3750 (i * sizeof(u32)), 3751 be32_to_cpu(fw_data[i])); 3752 3753 total_len -= be32_to_cpu(fw_hdr->len); 3754 3755 /* Advance to next fragment */ 3756 fw_hdr = (struct tg3_firmware_hdr *) 3757 ((void *)fw_hdr + be32_to_cpu(fw_hdr->len)); 3758 } while (total_len > 0); 3759 3760 err = 0; 3761 3762out: 3763 return err; 3764} 3765 3766/* tp->lock is held. */ 3767static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc) 3768{ 3769 int i; 3770 const int iters = 5; 3771 3772 tw32(cpu_base + CPU_STATE, 0xffffffff); 3773 tw32_f(cpu_base + CPU_PC, pc); 3774 3775 for (i = 0; i < iters; i++) { 3776 if (tr32(cpu_base + CPU_PC) == pc) 3777 break; 3778 tw32(cpu_base + CPU_STATE, 0xffffffff); 3779 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3780 tw32_f(cpu_base + CPU_PC, pc); 3781 udelay(1000); 3782 } 3783 3784 return (i == iters) ? -EBUSY : 0; 3785} 3786 3787/* tp->lock is held. */ 3788static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3789{ 3790 const struct tg3_firmware_hdr *fw_hdr; 3791 int err; 3792 3793 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3794 3795 /* Firmware blob starts with version numbers, followed by 3796 start address and length. We are setting complete length. 3797 length = end_address_of_bss - start_address_of_text. 3798 Remainder is the blob to be loaded contiguously 3799 from start address. */ 3800 3801 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3802 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3803 fw_hdr); 3804 if (err) 3805 return err; 3806 3807 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3808 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3809 fw_hdr); 3810 if (err) 3811 return err; 3812 3813 /* Now startup only the RX cpu. */ 3814 err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE, 3815 be32_to_cpu(fw_hdr->base_addr)); 3816 if (err) { 3817 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3818 "should be %08x\n", __func__, 3819 tr32(RX_CPU_BASE + CPU_PC), 3820 be32_to_cpu(fw_hdr->base_addr)); 3821 return -ENODEV; 3822 } 3823 3824 tg3_rxcpu_resume(tp); 3825 3826 return 0; 3827} 3828 3829static int tg3_validate_rxcpu_state(struct tg3 *tp) 3830{ 3831 const int iters = 1000; 3832 int i; 3833 u32 val; 3834 3835 /* Wait for boot code to complete initialization and enter service 3836 * loop. It is then safe to download service patches 3837 */ 3838 for (i = 0; i < iters; i++) { 3839 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP) 3840 break; 3841 3842 udelay(10); 3843 } 3844 3845 if (i == iters) { 3846 netdev_err(tp->dev, "Boot code not ready for service patches\n"); 3847 return -EBUSY; 3848 } 3849 3850 val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE); 3851 if (val & 0xff) { 3852 netdev_warn(tp->dev, 3853 "Other patches exist. Not downloading EEE patch\n"); 3854 return -EEXIST; 3855 } 3856 3857 return 0; 3858} 3859 3860/* tp->lock is held. */ 3861static void tg3_load_57766_firmware(struct tg3 *tp) 3862{ 3863 struct tg3_firmware_hdr *fw_hdr; 3864 3865 if (!tg3_flag(tp, NO_NVRAM)) 3866 return; 3867 3868 if (tg3_validate_rxcpu_state(tp)) 3869 return; 3870 3871 if (!tp->fw) 3872 return; 3873 3874 /* This firmware blob has a different format than older firmware 3875 * releases as given below. The main difference is we have fragmented 3876 * data to be written to non-contiguous locations. 3877 * 3878 * In the beginning we have a firmware header identical to other 3879 * firmware which consists of version, base addr and length. The length 3880 * here is unused and set to 0xffffffff. 3881 * 3882 * This is followed by a series of firmware fragments which are 3883 * individually identical to previous firmware. i.e. they have the 3884 * firmware header and followed by data for that fragment. The version 3885 * field of the individual fragment header is unused. 3886 */ 3887 3888 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3889 if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR) 3890 return; 3891 3892 if (tg3_rxcpu_pause(tp)) 3893 return; 3894 3895 /* tg3_load_firmware_cpu() will always succeed for the 57766 */ 3896 tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr); 3897 3898 tg3_rxcpu_resume(tp); 3899} 3900 3901/* tp->lock is held. */ 3902static int tg3_load_tso_firmware(struct tg3 *tp) 3903{ 3904 const struct tg3_firmware_hdr *fw_hdr; 3905 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3906 int err; 3907 3908 if (!tg3_flag(tp, FW_TSO)) 3909 return 0; 3910 3911 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3912 3913 /* Firmware blob starts with version numbers, followed by 3914 start address and length. We are setting complete length. 3915 length = end_address_of_bss - start_address_of_text. 3916 Remainder is the blob to be loaded contiguously 3917 from start address. */ 3918 3919 cpu_scratch_size = tp->fw_len; 3920 3921 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 3922 cpu_base = RX_CPU_BASE; 3923 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3924 } else { 3925 cpu_base = TX_CPU_BASE; 3926 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3927 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3928 } 3929 3930 err = tg3_load_firmware_cpu(tp, cpu_base, 3931 cpu_scratch_base, cpu_scratch_size, 3932 fw_hdr); 3933 if (err) 3934 return err; 3935 3936 /* Now startup the cpu. */ 3937 err = tg3_pause_cpu_and_set_pc(tp, cpu_base, 3938 be32_to_cpu(fw_hdr->base_addr)); 3939 if (err) { 3940 netdev_err(tp->dev, 3941 "%s fails to set CPU PC, is %08x should be %08x\n", 3942 __func__, tr32(cpu_base + CPU_PC), 3943 be32_to_cpu(fw_hdr->base_addr)); 3944 return -ENODEV; 3945 } 3946 3947 tg3_resume_cpu(tp, cpu_base); 3948 return 0; 3949} 3950 3951/* tp->lock is held. */ 3952static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index) 3953{ 3954 u32 addr_high, addr_low; 3955 3956 addr_high = ((mac_addr[0] << 8) | mac_addr[1]); 3957 addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) | 3958 (mac_addr[4] << 8) | mac_addr[5]); 3959 3960 if (index < 4) { 3961 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high); 3962 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low); 3963 } else { 3964 index -= 4; 3965 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high); 3966 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low); 3967 } 3968} 3969 3970/* tp->lock is held. */ 3971static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) 3972{ 3973 u32 addr_high; 3974 int i; 3975 3976 for (i = 0; i < 4; i++) { 3977 if (i == 1 && skip_mac_1) 3978 continue; 3979 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3980 } 3981 3982 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 3983 tg3_asic_rev(tp) == ASIC_REV_5704) { 3984 for (i = 4; i < 16; i++) 3985 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3986 } 3987 3988 addr_high = (tp->dev->dev_addr[0] + 3989 tp->dev->dev_addr[1] + 3990 tp->dev->dev_addr[2] + 3991 tp->dev->dev_addr[3] + 3992 tp->dev->dev_addr[4] + 3993 tp->dev->dev_addr[5]) & 3994 TX_BACKOFF_SEED_MASK; 3995 tw32(MAC_TX_BACKOFF_SEED, addr_high); 3996} 3997 3998static void tg3_enable_register_access(struct tg3 *tp) 3999{ 4000 /* 4001 * Make sure register accesses (indirect or otherwise) will function 4002 * correctly. 4003 */ 4004 pci_write_config_dword(tp->pdev, 4005 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 4006} 4007 4008static int tg3_power_up(struct tg3 *tp) 4009{ 4010 int err; 4011 4012 tg3_enable_register_access(tp); 4013 4014 err = pci_set_power_state(tp->pdev, PCI_D0); 4015 if (!err) { 4016 /* Switch out of Vaux if it is a NIC */ 4017 tg3_pwrsrc_switch_to_vmain(tp); 4018 } else { 4019 netdev_err(tp->dev, "Transition to D0 failed\n"); 4020 } 4021 4022 return err; 4023} 4024 4025static int tg3_setup_phy(struct tg3 *, bool); 4026 4027static int tg3_power_down_prepare(struct tg3 *tp) 4028{ 4029 u32 misc_host_ctrl; 4030 bool device_should_wake, do_low_power; 4031 4032 tg3_enable_register_access(tp); 4033 4034 /* Restore the CLKREQ setting. */ 4035 if (tg3_flag(tp, CLKREQ_BUG)) 4036 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 4037 PCI_EXP_LNKCTL_CLKREQ_EN); 4038 4039 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 4040 tw32(TG3PCI_MISC_HOST_CTRL, 4041 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 4042 4043 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 4044 tg3_flag(tp, WOL_ENABLE); 4045 4046 if (tg3_flag(tp, USE_PHYLIB)) { 4047 do_low_power = false; 4048 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 4049 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4050 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, }; 4051 struct phy_device *phydev; 4052 u32 phyid; 4053 4054 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 4055 4056 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4057 4058 tp->link_config.speed = phydev->speed; 4059 tp->link_config.duplex = phydev->duplex; 4060 tp->link_config.autoneg = phydev->autoneg; 4061 ethtool_convert_link_mode_to_legacy_u32( 4062 &tp->link_config.advertising, 4063 phydev->advertising); 4064 4065 linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising); 4066 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, 4067 advertising); 4068 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 4069 advertising); 4070 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, 4071 advertising); 4072 4073 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 4074 if (tg3_flag(tp, WOL_SPEED_100MB)) { 4075 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 4076 advertising); 4077 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 4078 advertising); 4079 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 4080 advertising); 4081 } else { 4082 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 4083 advertising); 4084 } 4085 } 4086 4087 linkmode_copy(phydev->advertising, advertising); 4088 phy_start_aneg(phydev); 4089 4090 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 4091 if (phyid != PHY_ID_BCMAC131) { 4092 phyid &= PHY_BCM_OUI_MASK; 4093 if (phyid == PHY_BCM_OUI_1 || 4094 phyid == PHY_BCM_OUI_2 || 4095 phyid == PHY_BCM_OUI_3) 4096 do_low_power = true; 4097 } 4098 } 4099 } else { 4100 do_low_power = true; 4101 4102 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 4103 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4104 4105 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 4106 tg3_setup_phy(tp, false); 4107 } 4108 4109 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 4110 u32 val; 4111 4112 val = tr32(GRC_VCPU_EXT_CTRL); 4113 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 4114 } else if (!tg3_flag(tp, ENABLE_ASF)) { 4115 int i; 4116 u32 val; 4117 4118 for (i = 0; i < 200; i++) { 4119 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 4120 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 4121 break; 4122 msleep(1); 4123 } 4124 } 4125 if (tg3_flag(tp, WOL_CAP)) 4126 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 4127 WOL_DRV_STATE_SHUTDOWN | 4128 WOL_DRV_WOL | 4129 WOL_SET_MAGIC_PKT); 4130 4131 if (device_should_wake) { 4132 u32 mac_mode; 4133 4134 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 4135 if (do_low_power && 4136 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 4137 tg3_phy_auxctl_write(tp, 4138 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 4139 MII_TG3_AUXCTL_PCTL_WOL_EN | 4140 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 4141 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 4142 udelay(40); 4143 } 4144 4145 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4146 mac_mode = MAC_MODE_PORT_MODE_GMII; 4147 else if (tp->phy_flags & 4148 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) { 4149 if (tp->link_config.active_speed == SPEED_1000) 4150 mac_mode = MAC_MODE_PORT_MODE_GMII; 4151 else 4152 mac_mode = MAC_MODE_PORT_MODE_MII; 4153 } else 4154 mac_mode = MAC_MODE_PORT_MODE_MII; 4155 4156 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 4157 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 4158 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 4159 SPEED_100 : SPEED_10; 4160 if (tg3_5700_link_polarity(tp, speed)) 4161 mac_mode |= MAC_MODE_LINK_POLARITY; 4162 else 4163 mac_mode &= ~MAC_MODE_LINK_POLARITY; 4164 } 4165 } else { 4166 mac_mode = MAC_MODE_PORT_MODE_TBI; 4167 } 4168 4169 if (!tg3_flag(tp, 5750_PLUS)) 4170 tw32(MAC_LED_CTRL, tp->led_ctrl); 4171 4172 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 4173 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 4174 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 4175 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 4176 4177 if (tg3_flag(tp, ENABLE_APE)) 4178 mac_mode |= MAC_MODE_APE_TX_EN | 4179 MAC_MODE_APE_RX_EN | 4180 MAC_MODE_TDE_ENABLE; 4181 4182 tw32_f(MAC_MODE, mac_mode); 4183 udelay(100); 4184 4185 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 4186 udelay(10); 4187 } 4188 4189 if (!tg3_flag(tp, WOL_SPEED_100MB) && 4190 (tg3_asic_rev(tp) == ASIC_REV_5700 || 4191 tg3_asic_rev(tp) == ASIC_REV_5701)) { 4192 u32 base_val; 4193 4194 base_val = tp->pci_clock_ctrl; 4195 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 4196 CLOCK_CTRL_TXCLK_DISABLE); 4197 4198 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 4199 CLOCK_CTRL_PWRDOWN_PLL133, 40); 4200 } else if (tg3_flag(tp, 5780_CLASS) || 4201 tg3_flag(tp, CPMU_PRESENT) || 4202 tg3_asic_rev(tp) == ASIC_REV_5906) { 4203 /* do nothing */ 4204 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 4205 u32 newbits1, newbits2; 4206 4207 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4208 tg3_asic_rev(tp) == ASIC_REV_5701) { 4209 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 4210 CLOCK_CTRL_TXCLK_DISABLE | 4211 CLOCK_CTRL_ALTCLK); 4212 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4213 } else if (tg3_flag(tp, 5705_PLUS)) { 4214 newbits1 = CLOCK_CTRL_625_CORE; 4215 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 4216 } else { 4217 newbits1 = CLOCK_CTRL_ALTCLK; 4218 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4219 } 4220 4221 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 4222 40); 4223 4224 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 4225 40); 4226 4227 if (!tg3_flag(tp, 5705_PLUS)) { 4228 u32 newbits3; 4229 4230 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4231 tg3_asic_rev(tp) == ASIC_REV_5701) { 4232 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 4233 CLOCK_CTRL_TXCLK_DISABLE | 4234 CLOCK_CTRL_44MHZ_CORE); 4235 } else { 4236 newbits3 = CLOCK_CTRL_44MHZ_CORE; 4237 } 4238 4239 tw32_wait_f(TG3PCI_CLOCK_CTRL, 4240 tp->pci_clock_ctrl | newbits3, 40); 4241 } 4242 } 4243 4244 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 4245 tg3_power_down_phy(tp, do_low_power); 4246 4247 tg3_frob_aux_power(tp, true); 4248 4249 /* Workaround for unstable PLL clock */ 4250 if ((!tg3_flag(tp, IS_SSB_CORE)) && 4251 ((tg3_chip_rev(tp) == CHIPREV_5750_AX) || 4252 (tg3_chip_rev(tp) == CHIPREV_5750_BX))) { 4253 u32 val = tr32(0x7d00); 4254 4255 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 4256 tw32(0x7d00, val); 4257 if (!tg3_flag(tp, ENABLE_ASF)) { 4258 int err; 4259 4260 err = tg3_nvram_lock(tp); 4261 tg3_halt_cpu(tp, RX_CPU_BASE); 4262 if (!err) 4263 tg3_nvram_unlock(tp); 4264 } 4265 } 4266 4267 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 4268 4269 tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN); 4270 4271 return 0; 4272} 4273 4274static void tg3_power_down(struct tg3 *tp) 4275{ 4276 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 4277 pci_set_power_state(tp->pdev, PCI_D3hot); 4278} 4279 4280static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex) 4281{ 4282 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 4283 case MII_TG3_AUX_STAT_10HALF: 4284 *speed = SPEED_10; 4285 *duplex = DUPLEX_HALF; 4286 break; 4287 4288 case MII_TG3_AUX_STAT_10FULL: 4289 *speed = SPEED_10; 4290 *duplex = DUPLEX_FULL; 4291 break; 4292 4293 case MII_TG3_AUX_STAT_100HALF: 4294 *speed = SPEED_100; 4295 *duplex = DUPLEX_HALF; 4296 break; 4297 4298 case MII_TG3_AUX_STAT_100FULL: 4299 *speed = SPEED_100; 4300 *duplex = DUPLEX_FULL; 4301 break; 4302 4303 case MII_TG3_AUX_STAT_1000HALF: 4304 *speed = SPEED_1000; 4305 *duplex = DUPLEX_HALF; 4306 break; 4307 4308 case MII_TG3_AUX_STAT_1000FULL: 4309 *speed = SPEED_1000; 4310 *duplex = DUPLEX_FULL; 4311 break; 4312 4313 default: 4314 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4315 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 4316 SPEED_10; 4317 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 4318 DUPLEX_HALF; 4319 break; 4320 } 4321 *speed = SPEED_UNKNOWN; 4322 *duplex = DUPLEX_UNKNOWN; 4323 break; 4324 } 4325} 4326 4327static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 4328{ 4329 int err = 0; 4330 u32 val, new_adv; 4331 4332 new_adv = ADVERTISE_CSMA; 4333 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 4334 new_adv |= mii_advertise_flowctrl(flowctrl); 4335 4336 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 4337 if (err) 4338 goto done; 4339 4340 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4341 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 4342 4343 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4344 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) 4345 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4346 4347 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 4348 if (err) 4349 goto done; 4350 } 4351 4352 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4353 goto done; 4354 4355 tw32(TG3_CPMU_EEE_MODE, 4356 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 4357 4358 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 4359 if (!err) { 4360 u32 err2; 4361 4362 val = 0; 4363 /* Advertise 100-BaseTX EEE ability */ 4364 if (advertise & ADVERTISED_100baseT_Full) 4365 val |= MDIO_AN_EEE_ADV_100TX; 4366 /* Advertise 1000-BaseT EEE ability */ 4367 if (advertise & ADVERTISED_1000baseT_Full) 4368 val |= MDIO_AN_EEE_ADV_1000T; 4369 4370 if (!tp->eee.eee_enabled) { 4371 val = 0; 4372 tp->eee.advertised = 0; 4373 } else { 4374 tp->eee.advertised = advertise & 4375 (ADVERTISED_100baseT_Full | 4376 ADVERTISED_1000baseT_Full); 4377 } 4378 4379 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 4380 if (err) 4381 val = 0; 4382 4383 switch (tg3_asic_rev(tp)) { 4384 case ASIC_REV_5717: 4385 case ASIC_REV_57765: 4386 case ASIC_REV_57766: 4387 case ASIC_REV_5719: 4388 /* If we advertised any eee advertisements above... */ 4389 if (val) 4390 val = MII_TG3_DSP_TAP26_ALNOKO | 4391 MII_TG3_DSP_TAP26_RMRXSTO | 4392 MII_TG3_DSP_TAP26_OPCSINPT; 4393 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 4394 fallthrough; 4395 case ASIC_REV_5720: 4396 case ASIC_REV_5762: 4397 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 4398 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 4399 MII_TG3_DSP_CH34TP2_HIBW01); 4400 } 4401 4402 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false); 4403 if (!err) 4404 err = err2; 4405 } 4406 4407done: 4408 return err; 4409} 4410 4411static void tg3_phy_copper_begin(struct tg3 *tp) 4412{ 4413 if (tp->link_config.autoneg == AUTONEG_ENABLE || 4414 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4415 u32 adv, fc; 4416 4417 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4418 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4419 adv = ADVERTISED_10baseT_Half | 4420 ADVERTISED_10baseT_Full; 4421 if (tg3_flag(tp, WOL_SPEED_100MB)) 4422 adv |= ADVERTISED_100baseT_Half | 4423 ADVERTISED_100baseT_Full; 4424 if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) { 4425 if (!(tp->phy_flags & 4426 TG3_PHYFLG_DISABLE_1G_HD_ADV)) 4427 adv |= ADVERTISED_1000baseT_Half; 4428 adv |= ADVERTISED_1000baseT_Full; 4429 } 4430 4431 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 4432 } else { 4433 adv = tp->link_config.advertising; 4434 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 4435 adv &= ~(ADVERTISED_1000baseT_Half | 4436 ADVERTISED_1000baseT_Full); 4437 4438 fc = tp->link_config.flowctrl; 4439 } 4440 4441 tg3_phy_autoneg_cfg(tp, adv, fc); 4442 4443 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4444 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4445 /* Normally during power down we want to autonegotiate 4446 * the lowest possible speed for WOL. However, to avoid 4447 * link flap, we leave it untouched. 4448 */ 4449 return; 4450 } 4451 4452 tg3_writephy(tp, MII_BMCR, 4453 BMCR_ANENABLE | BMCR_ANRESTART); 4454 } else { 4455 int i; 4456 u32 bmcr, orig_bmcr; 4457 4458 tp->link_config.active_speed = tp->link_config.speed; 4459 tp->link_config.active_duplex = tp->link_config.duplex; 4460 4461 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 4462 /* With autoneg disabled, 5715 only links up when the 4463 * advertisement register has the configured speed 4464 * enabled. 4465 */ 4466 tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL); 4467 } 4468 4469 bmcr = 0; 4470 switch (tp->link_config.speed) { 4471 default: 4472 case SPEED_10: 4473 break; 4474 4475 case SPEED_100: 4476 bmcr |= BMCR_SPEED100; 4477 break; 4478 4479 case SPEED_1000: 4480 bmcr |= BMCR_SPEED1000; 4481 break; 4482 } 4483 4484 if (tp->link_config.duplex == DUPLEX_FULL) 4485 bmcr |= BMCR_FULLDPLX; 4486 4487 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 4488 (bmcr != orig_bmcr)) { 4489 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 4490 for (i = 0; i < 1500; i++) { 4491 u32 tmp; 4492 4493 udelay(10); 4494 if (tg3_readphy(tp, MII_BMSR, &tmp) || 4495 tg3_readphy(tp, MII_BMSR, &tmp)) 4496 continue; 4497 if (!(tmp & BMSR_LSTATUS)) { 4498 udelay(40); 4499 break; 4500 } 4501 } 4502 tg3_writephy(tp, MII_BMCR, bmcr); 4503 udelay(40); 4504 } 4505 } 4506} 4507 4508static int tg3_phy_pull_config(struct tg3 *tp) 4509{ 4510 int err; 4511 u32 val; 4512 4513 err = tg3_readphy(tp, MII_BMCR, &val); 4514 if (err) 4515 goto done; 4516 4517 if (!(val & BMCR_ANENABLE)) { 4518 tp->link_config.autoneg = AUTONEG_DISABLE; 4519 tp->link_config.advertising = 0; 4520 tg3_flag_clear(tp, PAUSE_AUTONEG); 4521 4522 err = -EIO; 4523 4524 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) { 4525 case 0: 4526 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4527 goto done; 4528 4529 tp->link_config.speed = SPEED_10; 4530 break; 4531 case BMCR_SPEED100: 4532 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4533 goto done; 4534 4535 tp->link_config.speed = SPEED_100; 4536 break; 4537 case BMCR_SPEED1000: 4538 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4539 tp->link_config.speed = SPEED_1000; 4540 break; 4541 } 4542 fallthrough; 4543 default: 4544 goto done; 4545 } 4546 4547 if (val & BMCR_FULLDPLX) 4548 tp->link_config.duplex = DUPLEX_FULL; 4549 else 4550 tp->link_config.duplex = DUPLEX_HALF; 4551 4552 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX; 4553 4554 err = 0; 4555 goto done; 4556 } 4557 4558 tp->link_config.autoneg = AUTONEG_ENABLE; 4559 tp->link_config.advertising = ADVERTISED_Autoneg; 4560 tg3_flag_set(tp, PAUSE_AUTONEG); 4561 4562 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4563 u32 adv; 4564 4565 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4566 if (err) 4567 goto done; 4568 4569 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL); 4570 tp->link_config.advertising |= adv | ADVERTISED_TP; 4571 4572 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val); 4573 } else { 4574 tp->link_config.advertising |= ADVERTISED_FIBRE; 4575 } 4576 4577 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4578 u32 adv; 4579 4580 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4581 err = tg3_readphy(tp, MII_CTRL1000, &val); 4582 if (err) 4583 goto done; 4584 4585 adv = mii_ctrl1000_to_ethtool_adv_t(val); 4586 } else { 4587 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4588 if (err) 4589 goto done; 4590 4591 adv = tg3_decode_flowctrl_1000X(val); 4592 tp->link_config.flowctrl = adv; 4593 4594 val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL); 4595 adv = mii_adv_to_ethtool_adv_x(val); 4596 } 4597 4598 tp->link_config.advertising |= adv; 4599 } 4600 4601done: 4602 return err; 4603} 4604 4605static int tg3_init_5401phy_dsp(struct tg3 *tp) 4606{ 4607 int err; 4608 4609 /* Turn off tap power management. */ 4610 /* Set Extended packet length bit */ 4611 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 4612 4613 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 4614 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 4615 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 4616 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 4617 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 4618 4619 udelay(40); 4620 4621 return err; 4622} 4623 4624static bool tg3_phy_eee_config_ok(struct tg3 *tp) 4625{ 4626 struct ethtool_eee eee; 4627 4628 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4629 return true; 4630 4631 tg3_eee_pull_config(tp, &eee); 4632 4633 if (tp->eee.eee_enabled) { 4634 if (tp->eee.advertised != eee.advertised || 4635 tp->eee.tx_lpi_timer != eee.tx_lpi_timer || 4636 tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled) 4637 return false; 4638 } else { 4639 /* EEE is disabled but we're advertising */ 4640 if (eee.advertised) 4641 return false; 4642 } 4643 4644 return true; 4645} 4646 4647static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 4648{ 4649 u32 advmsk, tgtadv, advertising; 4650 4651 advertising = tp->link_config.advertising; 4652 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4653 4654 advmsk = ADVERTISE_ALL; 4655 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4656 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4657 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4658 } 4659 4660 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4661 return false; 4662 4663 if ((*lcladv & advmsk) != tgtadv) 4664 return false; 4665 4666 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4667 u32 tg3_ctrl; 4668 4669 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4670 4671 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4672 return false; 4673 4674 if (tgtadv && 4675 (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4676 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) { 4677 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4678 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4679 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4680 } else { 4681 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4682 } 4683 4684 if (tg3_ctrl != tgtadv) 4685 return false; 4686 } 4687 4688 return true; 4689} 4690 4691static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4692{ 4693 u32 lpeth = 0; 4694 4695 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4696 u32 val; 4697 4698 if (tg3_readphy(tp, MII_STAT1000, &val)) 4699 return false; 4700 4701 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4702 } 4703 4704 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4705 return false; 4706 4707 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4708 tp->link_config.rmt_adv = lpeth; 4709 4710 return true; 4711} 4712 4713static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up) 4714{ 4715 if (curr_link_up != tp->link_up) { 4716 if (curr_link_up) { 4717 netif_carrier_on(tp->dev); 4718 } else { 4719 netif_carrier_off(tp->dev); 4720 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4721 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4722 } 4723 4724 tg3_link_report(tp); 4725 return true; 4726 } 4727 4728 return false; 4729} 4730 4731static void tg3_clear_mac_status(struct tg3 *tp) 4732{ 4733 tw32(MAC_EVENT, 0); 4734 4735 tw32_f(MAC_STATUS, 4736 MAC_STATUS_SYNC_CHANGED | 4737 MAC_STATUS_CFG_CHANGED | 4738 MAC_STATUS_MI_COMPLETION | 4739 MAC_STATUS_LNKSTATE_CHANGED); 4740 udelay(40); 4741} 4742 4743static void tg3_setup_eee(struct tg3 *tp) 4744{ 4745 u32 val; 4746 4747 val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 4748 TG3_CPMU_EEE_LNKIDL_UART_IDL; 4749 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 4750 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT; 4751 4752 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val); 4753 4754 tw32_f(TG3_CPMU_EEE_CTRL, 4755 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 4756 4757 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 4758 (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) | 4759 TG3_CPMU_EEEMD_LPI_IN_RX | 4760 TG3_CPMU_EEEMD_EEE_ENABLE; 4761 4762 if (tg3_asic_rev(tp) != ASIC_REV_5717) 4763 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 4764 4765 if (tg3_flag(tp, ENABLE_APE)) 4766 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 4767 4768 tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0); 4769 4770 tw32_f(TG3_CPMU_EEE_DBTMR1, 4771 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 4772 (tp->eee.tx_lpi_timer & 0xffff)); 4773 4774 tw32_f(TG3_CPMU_EEE_DBTMR2, 4775 TG3_CPMU_DBTMR2_APE_TX_2047US | 4776 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 4777} 4778 4779static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset) 4780{ 4781 bool current_link_up; 4782 u32 bmsr, val; 4783 u32 lcl_adv, rmt_adv; 4784 u32 current_speed; 4785 u8 current_duplex; 4786 int i, err; 4787 4788 tg3_clear_mac_status(tp); 4789 4790 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4791 tw32_f(MAC_MI_MODE, 4792 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4793 udelay(80); 4794 } 4795 4796 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4797 4798 /* Some third-party PHYs need to be reset on link going 4799 * down. 4800 */ 4801 if ((tg3_asic_rev(tp) == ASIC_REV_5703 || 4802 tg3_asic_rev(tp) == ASIC_REV_5704 || 4803 tg3_asic_rev(tp) == ASIC_REV_5705) && 4804 tp->link_up) { 4805 tg3_readphy(tp, MII_BMSR, &bmsr); 4806 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4807 !(bmsr & BMSR_LSTATUS)) 4808 force_reset = true; 4809 } 4810 if (force_reset) 4811 tg3_phy_reset(tp); 4812 4813 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4814 tg3_readphy(tp, MII_BMSR, &bmsr); 4815 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4816 !tg3_flag(tp, INIT_COMPLETE)) 4817 bmsr = 0; 4818 4819 if (!(bmsr & BMSR_LSTATUS)) { 4820 err = tg3_init_5401phy_dsp(tp); 4821 if (err) 4822 return err; 4823 4824 tg3_readphy(tp, MII_BMSR, &bmsr); 4825 for (i = 0; i < 1000; i++) { 4826 udelay(10); 4827 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4828 (bmsr & BMSR_LSTATUS)) { 4829 udelay(40); 4830 break; 4831 } 4832 } 4833 4834 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4835 TG3_PHY_REV_BCM5401_B0 && 4836 !(bmsr & BMSR_LSTATUS) && 4837 tp->link_config.active_speed == SPEED_1000) { 4838 err = tg3_phy_reset(tp); 4839 if (!err) 4840 err = tg3_init_5401phy_dsp(tp); 4841 if (err) 4842 return err; 4843 } 4844 } 4845 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4846 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) { 4847 /* 5701 {A0,B0} CRC bug workaround */ 4848 tg3_writephy(tp, 0x15, 0x0a75); 4849 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4850 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4851 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4852 } 4853 4854 /* Clear pending interrupts... */ 4855 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4856 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4857 4858 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4859 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4860 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4861 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4862 4863 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4864 tg3_asic_rev(tp) == ASIC_REV_5701) { 4865 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4866 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4867 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4868 else 4869 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4870 } 4871 4872 current_link_up = false; 4873 current_speed = SPEED_UNKNOWN; 4874 current_duplex = DUPLEX_UNKNOWN; 4875 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4876 tp->link_config.rmt_adv = 0; 4877 4878 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4879 err = tg3_phy_auxctl_read(tp, 4880 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4881 &val); 4882 if (!err && !(val & (1 << 10))) { 4883 tg3_phy_auxctl_write(tp, 4884 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4885 val | (1 << 10)); 4886 goto relink; 4887 } 4888 } 4889 4890 bmsr = 0; 4891 for (i = 0; i < 100; i++) { 4892 tg3_readphy(tp, MII_BMSR, &bmsr); 4893 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4894 (bmsr & BMSR_LSTATUS)) 4895 break; 4896 udelay(40); 4897 } 4898 4899 if (bmsr & BMSR_LSTATUS) { 4900 u32 aux_stat, bmcr; 4901 4902 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4903 for (i = 0; i < 2000; i++) { 4904 udelay(10); 4905 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4906 aux_stat) 4907 break; 4908 } 4909 4910 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4911 ¤t_speed, 4912 ¤t_duplex); 4913 4914 bmcr = 0; 4915 for (i = 0; i < 200; i++) { 4916 tg3_readphy(tp, MII_BMCR, &bmcr); 4917 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4918 continue; 4919 if (bmcr && bmcr != 0x7fff) 4920 break; 4921 udelay(10); 4922 } 4923 4924 lcl_adv = 0; 4925 rmt_adv = 0; 4926 4927 tp->link_config.active_speed = current_speed; 4928 tp->link_config.active_duplex = current_duplex; 4929 4930 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4931 bool eee_config_ok = tg3_phy_eee_config_ok(tp); 4932 4933 if ((bmcr & BMCR_ANENABLE) && 4934 eee_config_ok && 4935 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4936 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4937 current_link_up = true; 4938 4939 /* EEE settings changes take effect only after a phy 4940 * reset. If we have skipped a reset due to Link Flap 4941 * Avoidance being enabled, do it now. 4942 */ 4943 if (!eee_config_ok && 4944 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 4945 !force_reset) { 4946 tg3_setup_eee(tp); 4947 tg3_phy_reset(tp); 4948 } 4949 } else { 4950 if (!(bmcr & BMCR_ANENABLE) && 4951 tp->link_config.speed == current_speed && 4952 tp->link_config.duplex == current_duplex) { 4953 current_link_up = true; 4954 } 4955 } 4956 4957 if (current_link_up && 4958 tp->link_config.active_duplex == DUPLEX_FULL) { 4959 u32 reg, bit; 4960 4961 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4962 reg = MII_TG3_FET_GEN_STAT; 4963 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4964 } else { 4965 reg = MII_TG3_EXT_STAT; 4966 bit = MII_TG3_EXT_STAT_MDIX; 4967 } 4968 4969 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4970 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4971 4972 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4973 } 4974 } 4975 4976relink: 4977 if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4978 tg3_phy_copper_begin(tp); 4979 4980 if (tg3_flag(tp, ROBOSWITCH)) { 4981 current_link_up = true; 4982 /* FIXME: when BCM5325 switch is used use 100 MBit/s */ 4983 current_speed = SPEED_1000; 4984 current_duplex = DUPLEX_FULL; 4985 tp->link_config.active_speed = current_speed; 4986 tp->link_config.active_duplex = current_duplex; 4987 } 4988 4989 tg3_readphy(tp, MII_BMSR, &bmsr); 4990 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4991 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4992 current_link_up = true; 4993 } 4994 4995 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4996 if (current_link_up) { 4997 if (tp->link_config.active_speed == SPEED_100 || 4998 tp->link_config.active_speed == SPEED_10) 4999 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5000 else 5001 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5002 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 5003 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5004 else 5005 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5006 5007 /* In order for the 5750 core in BCM4785 chip to work properly 5008 * in RGMII mode, the Led Control Register must be set up. 5009 */ 5010 if (tg3_flag(tp, RGMII_MODE)) { 5011 u32 led_ctrl = tr32(MAC_LED_CTRL); 5012 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON); 5013 5014 if (tp->link_config.active_speed == SPEED_10) 5015 led_ctrl |= LED_CTRL_LNKLED_OVERRIDE; 5016 else if (tp->link_config.active_speed == SPEED_100) 5017 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5018 LED_CTRL_100MBPS_ON); 5019 else if (tp->link_config.active_speed == SPEED_1000) 5020 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5021 LED_CTRL_1000MBPS_ON); 5022 5023 tw32(MAC_LED_CTRL, led_ctrl); 5024 udelay(40); 5025 } 5026 5027 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5028 if (tp->link_config.active_duplex == DUPLEX_HALF) 5029 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5030 5031 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 5032 if (current_link_up && 5033 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 5034 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 5035 else 5036 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 5037 } 5038 5039 /* ??? Without this setting Netgear GA302T PHY does not 5040 * ??? send/receive packets... 5041 */ 5042 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 5043 tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) { 5044 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 5045 tw32_f(MAC_MI_MODE, tp->mi_mode); 5046 udelay(80); 5047 } 5048 5049 tw32_f(MAC_MODE, tp->mac_mode); 5050 udelay(40); 5051 5052 tg3_phy_eee_adjust(tp, current_link_up); 5053 5054 if (tg3_flag(tp, USE_LINKCHG_REG)) { 5055 /* Polled via timer. */ 5056 tw32_f(MAC_EVENT, 0); 5057 } else { 5058 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5059 } 5060 udelay(40); 5061 5062 if (tg3_asic_rev(tp) == ASIC_REV_5700 && 5063 current_link_up && 5064 tp->link_config.active_speed == SPEED_1000 && 5065 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 5066 udelay(120); 5067 tw32_f(MAC_STATUS, 5068 (MAC_STATUS_SYNC_CHANGED | 5069 MAC_STATUS_CFG_CHANGED)); 5070 udelay(40); 5071 tg3_write_mem(tp, 5072 NIC_SRAM_FIRMWARE_MBOX, 5073 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 5074 } 5075 5076 /* Prevent send BD corruption. */ 5077 if (tg3_flag(tp, CLKREQ_BUG)) { 5078 if (tp->link_config.active_speed == SPEED_100 || 5079 tp->link_config.active_speed == SPEED_10) 5080 pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL, 5081 PCI_EXP_LNKCTL_CLKREQ_EN); 5082 else 5083 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 5084 PCI_EXP_LNKCTL_CLKREQ_EN); 5085 } 5086 5087 tg3_test_and_report_link_chg(tp, current_link_up); 5088 5089 return 0; 5090} 5091 5092struct tg3_fiber_aneginfo { 5093 int state; 5094#define ANEG_STATE_UNKNOWN 0 5095#define ANEG_STATE_AN_ENABLE 1 5096#define ANEG_STATE_RESTART_INIT 2 5097#define ANEG_STATE_RESTART 3 5098#define ANEG_STATE_DISABLE_LINK_OK 4 5099#define ANEG_STATE_ABILITY_DETECT_INIT 5 5100#define ANEG_STATE_ABILITY_DETECT 6 5101#define ANEG_STATE_ACK_DETECT_INIT 7 5102#define ANEG_STATE_ACK_DETECT 8 5103#define ANEG_STATE_COMPLETE_ACK_INIT 9 5104#define ANEG_STATE_COMPLETE_ACK 10 5105#define ANEG_STATE_IDLE_DETECT_INIT 11 5106#define ANEG_STATE_IDLE_DETECT 12 5107#define ANEG_STATE_LINK_OK 13 5108#define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 5109#define ANEG_STATE_NEXT_PAGE_WAIT 15 5110 5111 u32 flags; 5112#define MR_AN_ENABLE 0x00000001 5113#define MR_RESTART_AN 0x00000002 5114#define MR_AN_COMPLETE 0x00000004 5115#define MR_PAGE_RX 0x00000008 5116#define MR_NP_LOADED 0x00000010 5117#define MR_TOGGLE_TX 0x00000020 5118#define MR_LP_ADV_FULL_DUPLEX 0x00000040 5119#define MR_LP_ADV_HALF_DUPLEX 0x00000080 5120#define MR_LP_ADV_SYM_PAUSE 0x00000100 5121#define MR_LP_ADV_ASYM_PAUSE 0x00000200 5122#define MR_LP_ADV_REMOTE_FAULT1 0x00000400 5123#define MR_LP_ADV_REMOTE_FAULT2 0x00000800 5124#define MR_LP_ADV_NEXT_PAGE 0x00001000 5125#define MR_TOGGLE_RX 0x00002000 5126#define MR_NP_RX 0x00004000 5127 5128#define MR_LINK_OK 0x80000000 5129 5130 unsigned long link_time, cur_time; 5131 5132 u32 ability_match_cfg; 5133 int ability_match_count; 5134 5135 char ability_match, idle_match, ack_match; 5136 5137 u32 txconfig, rxconfig; 5138#define ANEG_CFG_NP 0x00000080 5139#define ANEG_CFG_ACK 0x00000040 5140#define ANEG_CFG_RF2 0x00000020 5141#define ANEG_CFG_RF1 0x00000010 5142#define ANEG_CFG_PS2 0x00000001 5143#define ANEG_CFG_PS1 0x00008000 5144#define ANEG_CFG_HD 0x00004000 5145#define ANEG_CFG_FD 0x00002000 5146#define ANEG_CFG_INVAL 0x00001f06 5147 5148}; 5149#define ANEG_OK 0 5150#define ANEG_DONE 1 5151#define ANEG_TIMER_ENAB 2 5152#define ANEG_FAILED -1 5153 5154#define ANEG_STATE_SETTLE_TIME 10000 5155 5156static int tg3_fiber_aneg_smachine(struct tg3 *tp, 5157 struct tg3_fiber_aneginfo *ap) 5158{ 5159 u16 flowctrl; 5160 unsigned long delta; 5161 u32 rx_cfg_reg; 5162 int ret; 5163 5164 if (ap->state == ANEG_STATE_UNKNOWN) { 5165 ap->rxconfig = 0; 5166 ap->link_time = 0; 5167 ap->cur_time = 0; 5168 ap->ability_match_cfg = 0; 5169 ap->ability_match_count = 0; 5170 ap->ability_match = 0; 5171 ap->idle_match = 0; 5172 ap->ack_match = 0; 5173 } 5174 ap->cur_time++; 5175 5176 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 5177 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 5178 5179 if (rx_cfg_reg != ap->ability_match_cfg) { 5180 ap->ability_match_cfg = rx_cfg_reg; 5181 ap->ability_match = 0; 5182 ap->ability_match_count = 0; 5183 } else { 5184 if (++ap->ability_match_count > 1) { 5185 ap->ability_match = 1; 5186 ap->ability_match_cfg = rx_cfg_reg; 5187 } 5188 } 5189 if (rx_cfg_reg & ANEG_CFG_ACK) 5190 ap->ack_match = 1; 5191 else 5192 ap->ack_match = 0; 5193 5194 ap->idle_match = 0; 5195 } else { 5196 ap->idle_match = 1; 5197 ap->ability_match_cfg = 0; 5198 ap->ability_match_count = 0; 5199 ap->ability_match = 0; 5200 ap->ack_match = 0; 5201 5202 rx_cfg_reg = 0; 5203 } 5204 5205 ap->rxconfig = rx_cfg_reg; 5206 ret = ANEG_OK; 5207 5208 switch (ap->state) { 5209 case ANEG_STATE_UNKNOWN: 5210 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 5211 ap->state = ANEG_STATE_AN_ENABLE; 5212 5213 fallthrough; 5214 case ANEG_STATE_AN_ENABLE: 5215 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 5216 if (ap->flags & MR_AN_ENABLE) { 5217 ap->link_time = 0; 5218 ap->cur_time = 0; 5219 ap->ability_match_cfg = 0; 5220 ap->ability_match_count = 0; 5221 ap->ability_match = 0; 5222 ap->idle_match = 0; 5223 ap->ack_match = 0; 5224 5225 ap->state = ANEG_STATE_RESTART_INIT; 5226 } else { 5227 ap->state = ANEG_STATE_DISABLE_LINK_OK; 5228 } 5229 break; 5230 5231 case ANEG_STATE_RESTART_INIT: 5232 ap->link_time = ap->cur_time; 5233 ap->flags &= ~(MR_NP_LOADED); 5234 ap->txconfig = 0; 5235 tw32(MAC_TX_AUTO_NEG, 0); 5236 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5237 tw32_f(MAC_MODE, tp->mac_mode); 5238 udelay(40); 5239 5240 ret = ANEG_TIMER_ENAB; 5241 ap->state = ANEG_STATE_RESTART; 5242 5243 fallthrough; 5244 case ANEG_STATE_RESTART: 5245 delta = ap->cur_time - ap->link_time; 5246 if (delta > ANEG_STATE_SETTLE_TIME) 5247 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 5248 else 5249 ret = ANEG_TIMER_ENAB; 5250 break; 5251 5252 case ANEG_STATE_DISABLE_LINK_OK: 5253 ret = ANEG_DONE; 5254 break; 5255 5256 case ANEG_STATE_ABILITY_DETECT_INIT: 5257 ap->flags &= ~(MR_TOGGLE_TX); 5258 ap->txconfig = ANEG_CFG_FD; 5259 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5260 if (flowctrl & ADVERTISE_1000XPAUSE) 5261 ap->txconfig |= ANEG_CFG_PS1; 5262 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5263 ap->txconfig |= ANEG_CFG_PS2; 5264 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5265 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5266 tw32_f(MAC_MODE, tp->mac_mode); 5267 udelay(40); 5268 5269 ap->state = ANEG_STATE_ABILITY_DETECT; 5270 break; 5271 5272 case ANEG_STATE_ABILITY_DETECT: 5273 if (ap->ability_match != 0 && ap->rxconfig != 0) 5274 ap->state = ANEG_STATE_ACK_DETECT_INIT; 5275 break; 5276 5277 case ANEG_STATE_ACK_DETECT_INIT: 5278 ap->txconfig |= ANEG_CFG_ACK; 5279 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5280 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5281 tw32_f(MAC_MODE, tp->mac_mode); 5282 udelay(40); 5283 5284 ap->state = ANEG_STATE_ACK_DETECT; 5285 5286 fallthrough; 5287 case ANEG_STATE_ACK_DETECT: 5288 if (ap->ack_match != 0) { 5289 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 5290 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 5291 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 5292 } else { 5293 ap->state = ANEG_STATE_AN_ENABLE; 5294 } 5295 } else if (ap->ability_match != 0 && 5296 ap->rxconfig == 0) { 5297 ap->state = ANEG_STATE_AN_ENABLE; 5298 } 5299 break; 5300 5301 case ANEG_STATE_COMPLETE_ACK_INIT: 5302 if (ap->rxconfig & ANEG_CFG_INVAL) { 5303 ret = ANEG_FAILED; 5304 break; 5305 } 5306 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 5307 MR_LP_ADV_HALF_DUPLEX | 5308 MR_LP_ADV_SYM_PAUSE | 5309 MR_LP_ADV_ASYM_PAUSE | 5310 MR_LP_ADV_REMOTE_FAULT1 | 5311 MR_LP_ADV_REMOTE_FAULT2 | 5312 MR_LP_ADV_NEXT_PAGE | 5313 MR_TOGGLE_RX | 5314 MR_NP_RX); 5315 if (ap->rxconfig & ANEG_CFG_FD) 5316 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 5317 if (ap->rxconfig & ANEG_CFG_HD) 5318 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 5319 if (ap->rxconfig & ANEG_CFG_PS1) 5320 ap->flags |= MR_LP_ADV_SYM_PAUSE; 5321 if (ap->rxconfig & ANEG_CFG_PS2) 5322 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 5323 if (ap->rxconfig & ANEG_CFG_RF1) 5324 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 5325 if (ap->rxconfig & ANEG_CFG_RF2) 5326 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 5327 if (ap->rxconfig & ANEG_CFG_NP) 5328 ap->flags |= MR_LP_ADV_NEXT_PAGE; 5329 5330 ap->link_time = ap->cur_time; 5331 5332 ap->flags ^= (MR_TOGGLE_TX); 5333 if (ap->rxconfig & 0x0008) 5334 ap->flags |= MR_TOGGLE_RX; 5335 if (ap->rxconfig & ANEG_CFG_NP) 5336 ap->flags |= MR_NP_RX; 5337 ap->flags |= MR_PAGE_RX; 5338 5339 ap->state = ANEG_STATE_COMPLETE_ACK; 5340 ret = ANEG_TIMER_ENAB; 5341 break; 5342 5343 case ANEG_STATE_COMPLETE_ACK: 5344 if (ap->ability_match != 0 && 5345 ap->rxconfig == 0) { 5346 ap->state = ANEG_STATE_AN_ENABLE; 5347 break; 5348 } 5349 delta = ap->cur_time - ap->link_time; 5350 if (delta > ANEG_STATE_SETTLE_TIME) { 5351 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 5352 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5353 } else { 5354 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 5355 !(ap->flags & MR_NP_RX)) { 5356 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5357 } else { 5358 ret = ANEG_FAILED; 5359 } 5360 } 5361 } 5362 break; 5363 5364 case ANEG_STATE_IDLE_DETECT_INIT: 5365 ap->link_time = ap->cur_time; 5366 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5367 tw32_f(MAC_MODE, tp->mac_mode); 5368 udelay(40); 5369 5370 ap->state = ANEG_STATE_IDLE_DETECT; 5371 ret = ANEG_TIMER_ENAB; 5372 break; 5373 5374 case ANEG_STATE_IDLE_DETECT: 5375 if (ap->ability_match != 0 && 5376 ap->rxconfig == 0) { 5377 ap->state = ANEG_STATE_AN_ENABLE; 5378 break; 5379 } 5380 delta = ap->cur_time - ap->link_time; 5381 if (delta > ANEG_STATE_SETTLE_TIME) { 5382 /* XXX another gem from the Broadcom driver :( */ 5383 ap->state = ANEG_STATE_LINK_OK; 5384 } 5385 break; 5386 5387 case ANEG_STATE_LINK_OK: 5388 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 5389 ret = ANEG_DONE; 5390 break; 5391 5392 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 5393 /* ??? unimplemented */ 5394 break; 5395 5396 case ANEG_STATE_NEXT_PAGE_WAIT: 5397 /* ??? unimplemented */ 5398 break; 5399 5400 default: 5401 ret = ANEG_FAILED; 5402 break; 5403 } 5404 5405 return ret; 5406} 5407 5408static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 5409{ 5410 int res = 0; 5411 struct tg3_fiber_aneginfo aninfo; 5412 int status = ANEG_FAILED; 5413 unsigned int tick; 5414 u32 tmp; 5415 5416 tw32_f(MAC_TX_AUTO_NEG, 0); 5417 5418 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 5419 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 5420 udelay(40); 5421 5422 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 5423 udelay(40); 5424 5425 memset(&aninfo, 0, sizeof(aninfo)); 5426 aninfo.flags |= MR_AN_ENABLE; 5427 aninfo.state = ANEG_STATE_UNKNOWN; 5428 aninfo.cur_time = 0; 5429 tick = 0; 5430 while (++tick < 195000) { 5431 status = tg3_fiber_aneg_smachine(tp, &aninfo); 5432 if (status == ANEG_DONE || status == ANEG_FAILED) 5433 break; 5434 5435 udelay(1); 5436 } 5437 5438 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5439 tw32_f(MAC_MODE, tp->mac_mode); 5440 udelay(40); 5441 5442 *txflags = aninfo.txconfig; 5443 *rxflags = aninfo.flags; 5444 5445 if (status == ANEG_DONE && 5446 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 5447 MR_LP_ADV_FULL_DUPLEX))) 5448 res = 1; 5449 5450 return res; 5451} 5452 5453static void tg3_init_bcm8002(struct tg3 *tp) 5454{ 5455 u32 mac_status = tr32(MAC_STATUS); 5456 int i; 5457 5458 /* Reset when initting first time or we have a link. */ 5459 if (tg3_flag(tp, INIT_COMPLETE) && 5460 !(mac_status & MAC_STATUS_PCS_SYNCED)) 5461 return; 5462 5463 /* Set PLL lock range. */ 5464 tg3_writephy(tp, 0x16, 0x8007); 5465 5466 /* SW reset */ 5467 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 5468 5469 /* Wait for reset to complete. */ 5470 /* XXX schedule_timeout() ... */ 5471 for (i = 0; i < 500; i++) 5472 udelay(10); 5473 5474 /* Config mode; select PMA/Ch 1 regs. */ 5475 tg3_writephy(tp, 0x10, 0x8411); 5476 5477 /* Enable auto-lock and comdet, select txclk for tx. */ 5478 tg3_writephy(tp, 0x11, 0x0a10); 5479 5480 tg3_writephy(tp, 0x18, 0x00a0); 5481 tg3_writephy(tp, 0x16, 0x41ff); 5482 5483 /* Assert and deassert POR. */ 5484 tg3_writephy(tp, 0x13, 0x0400); 5485 udelay(40); 5486 tg3_writephy(tp, 0x13, 0x0000); 5487 5488 tg3_writephy(tp, 0x11, 0x0a50); 5489 udelay(40); 5490 tg3_writephy(tp, 0x11, 0x0a10); 5491 5492 /* Wait for signal to stabilize */ 5493 /* XXX schedule_timeout() ... */ 5494 for (i = 0; i < 15000; i++) 5495 udelay(10); 5496 5497 /* Deselect the channel register so we can read the PHYID 5498 * later. 5499 */ 5500 tg3_writephy(tp, 0x10, 0x8011); 5501} 5502 5503static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 5504{ 5505 u16 flowctrl; 5506 bool current_link_up; 5507 u32 sg_dig_ctrl, sg_dig_status; 5508 u32 serdes_cfg, expected_sg_dig_ctrl; 5509 int workaround, port_a; 5510 5511 serdes_cfg = 0; 5512 expected_sg_dig_ctrl = 0; 5513 workaround = 0; 5514 port_a = 1; 5515 current_link_up = false; 5516 5517 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 && 5518 tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) { 5519 workaround = 1; 5520 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 5521 port_a = 0; 5522 5523 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 5524 /* preserve bits 20-23 for voltage regulator */ 5525 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 5526 } 5527 5528 sg_dig_ctrl = tr32(SG_DIG_CTRL); 5529 5530 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 5531 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 5532 if (workaround) { 5533 u32 val = serdes_cfg; 5534 5535 if (port_a) 5536 val |= 0xc010000; 5537 else 5538 val |= 0x4010000; 5539 tw32_f(MAC_SERDES_CFG, val); 5540 } 5541 5542 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5543 } 5544 if (mac_status & MAC_STATUS_PCS_SYNCED) { 5545 tg3_setup_flow_control(tp, 0, 0); 5546 current_link_up = true; 5547 } 5548 goto out; 5549 } 5550 5551 /* Want auto-negotiation. */ 5552 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 5553 5554 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5555 if (flowctrl & ADVERTISE_1000XPAUSE) 5556 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 5557 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5558 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 5559 5560 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 5561 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 5562 tp->serdes_counter && 5563 ((mac_status & (MAC_STATUS_PCS_SYNCED | 5564 MAC_STATUS_RCVD_CFG)) == 5565 MAC_STATUS_PCS_SYNCED)) { 5566 tp->serdes_counter--; 5567 current_link_up = true; 5568 goto out; 5569 } 5570restart_autoneg: 5571 if (workaround) 5572 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 5573 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 5574 udelay(5); 5575 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 5576 5577 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5578 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5579 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 5580 MAC_STATUS_SIGNAL_DET)) { 5581 sg_dig_status = tr32(SG_DIG_STATUS); 5582 mac_status = tr32(MAC_STATUS); 5583 5584 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 5585 (mac_status & MAC_STATUS_PCS_SYNCED)) { 5586 u32 local_adv = 0, remote_adv = 0; 5587 5588 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 5589 local_adv |= ADVERTISE_1000XPAUSE; 5590 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 5591 local_adv |= ADVERTISE_1000XPSE_ASYM; 5592 5593 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 5594 remote_adv |= LPA_1000XPAUSE; 5595 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 5596 remote_adv |= LPA_1000XPAUSE_ASYM; 5597 5598 tp->link_config.rmt_adv = 5599 mii_adv_to_ethtool_adv_x(remote_adv); 5600 5601 tg3_setup_flow_control(tp, local_adv, remote_adv); 5602 current_link_up = true; 5603 tp->serdes_counter = 0; 5604 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5605 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 5606 if (tp->serdes_counter) 5607 tp->serdes_counter--; 5608 else { 5609 if (workaround) { 5610 u32 val = serdes_cfg; 5611 5612 if (port_a) 5613 val |= 0xc010000; 5614 else 5615 val |= 0x4010000; 5616 5617 tw32_f(MAC_SERDES_CFG, val); 5618 } 5619 5620 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5621 udelay(40); 5622 5623 /* Link parallel detection - link is up */ 5624 /* only if we have PCS_SYNC and not */ 5625 /* receiving config code words */ 5626 mac_status = tr32(MAC_STATUS); 5627 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 5628 !(mac_status & MAC_STATUS_RCVD_CFG)) { 5629 tg3_setup_flow_control(tp, 0, 0); 5630 current_link_up = true; 5631 tp->phy_flags |= 5632 TG3_PHYFLG_PARALLEL_DETECT; 5633 tp->serdes_counter = 5634 SERDES_PARALLEL_DET_TIMEOUT; 5635 } else 5636 goto restart_autoneg; 5637 } 5638 } 5639 } else { 5640 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5641 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5642 } 5643 5644out: 5645 return current_link_up; 5646} 5647 5648static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 5649{ 5650 bool current_link_up = false; 5651 5652 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 5653 goto out; 5654 5655 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5656 u32 txflags, rxflags; 5657 int i; 5658 5659 if (fiber_autoneg(tp, &txflags, &rxflags)) { 5660 u32 local_adv = 0, remote_adv = 0; 5661 5662 if (txflags & ANEG_CFG_PS1) 5663 local_adv |= ADVERTISE_1000XPAUSE; 5664 if (txflags & ANEG_CFG_PS2) 5665 local_adv |= ADVERTISE_1000XPSE_ASYM; 5666 5667 if (rxflags & MR_LP_ADV_SYM_PAUSE) 5668 remote_adv |= LPA_1000XPAUSE; 5669 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 5670 remote_adv |= LPA_1000XPAUSE_ASYM; 5671 5672 tp->link_config.rmt_adv = 5673 mii_adv_to_ethtool_adv_x(remote_adv); 5674 5675 tg3_setup_flow_control(tp, local_adv, remote_adv); 5676 5677 current_link_up = true; 5678 } 5679 for (i = 0; i < 30; i++) { 5680 udelay(20); 5681 tw32_f(MAC_STATUS, 5682 (MAC_STATUS_SYNC_CHANGED | 5683 MAC_STATUS_CFG_CHANGED)); 5684 udelay(40); 5685 if ((tr32(MAC_STATUS) & 5686 (MAC_STATUS_SYNC_CHANGED | 5687 MAC_STATUS_CFG_CHANGED)) == 0) 5688 break; 5689 } 5690 5691 mac_status = tr32(MAC_STATUS); 5692 if (!current_link_up && 5693 (mac_status & MAC_STATUS_PCS_SYNCED) && 5694 !(mac_status & MAC_STATUS_RCVD_CFG)) 5695 current_link_up = true; 5696 } else { 5697 tg3_setup_flow_control(tp, 0, 0); 5698 5699 /* Forcing 1000FD link up. */ 5700 current_link_up = true; 5701 5702 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 5703 udelay(40); 5704 5705 tw32_f(MAC_MODE, tp->mac_mode); 5706 udelay(40); 5707 } 5708 5709out: 5710 return current_link_up; 5711} 5712 5713static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset) 5714{ 5715 u32 orig_pause_cfg; 5716 u32 orig_active_speed; 5717 u8 orig_active_duplex; 5718 u32 mac_status; 5719 bool current_link_up; 5720 int i; 5721 5722 orig_pause_cfg = tp->link_config.active_flowctrl; 5723 orig_active_speed = tp->link_config.active_speed; 5724 orig_active_duplex = tp->link_config.active_duplex; 5725 5726 if (!tg3_flag(tp, HW_AUTONEG) && 5727 tp->link_up && 5728 tg3_flag(tp, INIT_COMPLETE)) { 5729 mac_status = tr32(MAC_STATUS); 5730 mac_status &= (MAC_STATUS_PCS_SYNCED | 5731 MAC_STATUS_SIGNAL_DET | 5732 MAC_STATUS_CFG_CHANGED | 5733 MAC_STATUS_RCVD_CFG); 5734 if (mac_status == (MAC_STATUS_PCS_SYNCED | 5735 MAC_STATUS_SIGNAL_DET)) { 5736 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5737 MAC_STATUS_CFG_CHANGED)); 5738 return 0; 5739 } 5740 } 5741 5742 tw32_f(MAC_TX_AUTO_NEG, 0); 5743 5744 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5745 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5746 tw32_f(MAC_MODE, tp->mac_mode); 5747 udelay(40); 5748 5749 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5750 tg3_init_bcm8002(tp); 5751 5752 /* Enable link change event even when serdes polling. */ 5753 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5754 udelay(40); 5755 5756 current_link_up = false; 5757 tp->link_config.rmt_adv = 0; 5758 mac_status = tr32(MAC_STATUS); 5759 5760 if (tg3_flag(tp, HW_AUTONEG)) 5761 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5762 else 5763 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5764 5765 tp->napi[0].hw_status->status = 5766 (SD_STATUS_UPDATED | 5767 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5768 5769 for (i = 0; i < 100; i++) { 5770 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5771 MAC_STATUS_CFG_CHANGED)); 5772 udelay(5); 5773 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5774 MAC_STATUS_CFG_CHANGED | 5775 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5776 break; 5777 } 5778 5779 mac_status = tr32(MAC_STATUS); 5780 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5781 current_link_up = false; 5782 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5783 tp->serdes_counter == 0) { 5784 tw32_f(MAC_MODE, (tp->mac_mode | 5785 MAC_MODE_SEND_CONFIGS)); 5786 udelay(1); 5787 tw32_f(MAC_MODE, tp->mac_mode); 5788 } 5789 } 5790 5791 if (current_link_up) { 5792 tp->link_config.active_speed = SPEED_1000; 5793 tp->link_config.active_duplex = DUPLEX_FULL; 5794 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5795 LED_CTRL_LNKLED_OVERRIDE | 5796 LED_CTRL_1000MBPS_ON)); 5797 } else { 5798 tp->link_config.active_speed = SPEED_UNKNOWN; 5799 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5800 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5801 LED_CTRL_LNKLED_OVERRIDE | 5802 LED_CTRL_TRAFFIC_OVERRIDE)); 5803 } 5804 5805 if (!tg3_test_and_report_link_chg(tp, current_link_up)) { 5806 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5807 if (orig_pause_cfg != now_pause_cfg || 5808 orig_active_speed != tp->link_config.active_speed || 5809 orig_active_duplex != tp->link_config.active_duplex) 5810 tg3_link_report(tp); 5811 } 5812 5813 return 0; 5814} 5815 5816static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset) 5817{ 5818 int err = 0; 5819 u32 bmsr, bmcr; 5820 u32 current_speed = SPEED_UNKNOWN; 5821 u8 current_duplex = DUPLEX_UNKNOWN; 5822 bool current_link_up = false; 5823 u32 local_adv, remote_adv, sgsr; 5824 5825 if ((tg3_asic_rev(tp) == ASIC_REV_5719 || 5826 tg3_asic_rev(tp) == ASIC_REV_5720) && 5827 !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) && 5828 (sgsr & SERDES_TG3_SGMII_MODE)) { 5829 5830 if (force_reset) 5831 tg3_phy_reset(tp); 5832 5833 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 5834 5835 if (!(sgsr & SERDES_TG3_LINK_UP)) { 5836 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5837 } else { 5838 current_link_up = true; 5839 if (sgsr & SERDES_TG3_SPEED_1000) { 5840 current_speed = SPEED_1000; 5841 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5842 } else if (sgsr & SERDES_TG3_SPEED_100) { 5843 current_speed = SPEED_100; 5844 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5845 } else { 5846 current_speed = SPEED_10; 5847 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5848 } 5849 5850 if (sgsr & SERDES_TG3_FULL_DUPLEX) 5851 current_duplex = DUPLEX_FULL; 5852 else 5853 current_duplex = DUPLEX_HALF; 5854 } 5855 5856 tw32_f(MAC_MODE, tp->mac_mode); 5857 udelay(40); 5858 5859 tg3_clear_mac_status(tp); 5860 5861 goto fiber_setup_done; 5862 } 5863 5864 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5865 tw32_f(MAC_MODE, tp->mac_mode); 5866 udelay(40); 5867 5868 tg3_clear_mac_status(tp); 5869 5870 if (force_reset) 5871 tg3_phy_reset(tp); 5872 5873 tp->link_config.rmt_adv = 0; 5874 5875 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5876 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5877 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5878 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5879 bmsr |= BMSR_LSTATUS; 5880 else 5881 bmsr &= ~BMSR_LSTATUS; 5882 } 5883 5884 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5885 5886 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5887 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5888 /* do nothing, just check for link up at the end */ 5889 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5890 u32 adv, newadv; 5891 5892 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5893 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5894 ADVERTISE_1000XPAUSE | 5895 ADVERTISE_1000XPSE_ASYM | 5896 ADVERTISE_SLCT); 5897 5898 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5899 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5900 5901 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5902 tg3_writephy(tp, MII_ADVERTISE, newadv); 5903 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5904 tg3_writephy(tp, MII_BMCR, bmcr); 5905 5906 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5907 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5908 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5909 5910 return err; 5911 } 5912 } else { 5913 u32 new_bmcr; 5914 5915 bmcr &= ~BMCR_SPEED1000; 5916 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5917 5918 if (tp->link_config.duplex == DUPLEX_FULL) 5919 new_bmcr |= BMCR_FULLDPLX; 5920 5921 if (new_bmcr != bmcr) { 5922 /* BMCR_SPEED1000 is a reserved bit that needs 5923 * to be set on write. 5924 */ 5925 new_bmcr |= BMCR_SPEED1000; 5926 5927 /* Force a linkdown */ 5928 if (tp->link_up) { 5929 u32 adv; 5930 5931 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5932 adv &= ~(ADVERTISE_1000XFULL | 5933 ADVERTISE_1000XHALF | 5934 ADVERTISE_SLCT); 5935 tg3_writephy(tp, MII_ADVERTISE, adv); 5936 tg3_writephy(tp, MII_BMCR, bmcr | 5937 BMCR_ANRESTART | 5938 BMCR_ANENABLE); 5939 udelay(10); 5940 tg3_carrier_off(tp); 5941 } 5942 tg3_writephy(tp, MII_BMCR, new_bmcr); 5943 bmcr = new_bmcr; 5944 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5945 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5946 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5947 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5948 bmsr |= BMSR_LSTATUS; 5949 else 5950 bmsr &= ~BMSR_LSTATUS; 5951 } 5952 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5953 } 5954 } 5955 5956 if (bmsr & BMSR_LSTATUS) { 5957 current_speed = SPEED_1000; 5958 current_link_up = true; 5959 if (bmcr & BMCR_FULLDPLX) 5960 current_duplex = DUPLEX_FULL; 5961 else 5962 current_duplex = DUPLEX_HALF; 5963 5964 local_adv = 0; 5965 remote_adv = 0; 5966 5967 if (bmcr & BMCR_ANENABLE) { 5968 u32 common; 5969 5970 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5971 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5972 common = local_adv & remote_adv; 5973 if (common & (ADVERTISE_1000XHALF | 5974 ADVERTISE_1000XFULL)) { 5975 if (common & ADVERTISE_1000XFULL) 5976 current_duplex = DUPLEX_FULL; 5977 else 5978 current_duplex = DUPLEX_HALF; 5979 5980 tp->link_config.rmt_adv = 5981 mii_adv_to_ethtool_adv_x(remote_adv); 5982 } else if (!tg3_flag(tp, 5780_CLASS)) { 5983 /* Link is up via parallel detect */ 5984 } else { 5985 current_link_up = false; 5986 } 5987 } 5988 } 5989 5990fiber_setup_done: 5991 if (current_link_up && current_duplex == DUPLEX_FULL) 5992 tg3_setup_flow_control(tp, local_adv, remote_adv); 5993 5994 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5995 if (tp->link_config.active_duplex == DUPLEX_HALF) 5996 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5997 5998 tw32_f(MAC_MODE, tp->mac_mode); 5999 udelay(40); 6000 6001 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 6002 6003 tp->link_config.active_speed = current_speed; 6004 tp->link_config.active_duplex = current_duplex; 6005 6006 tg3_test_and_report_link_chg(tp, current_link_up); 6007 return err; 6008} 6009 6010static void tg3_serdes_parallel_detect(struct tg3 *tp) 6011{ 6012 if (tp->serdes_counter) { 6013 /* Give autoneg time to complete. */ 6014 tp->serdes_counter--; 6015 return; 6016 } 6017 6018 if (!tp->link_up && 6019 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 6020 u32 bmcr; 6021 6022 tg3_readphy(tp, MII_BMCR, &bmcr); 6023 if (bmcr & BMCR_ANENABLE) { 6024 u32 phy1, phy2; 6025 6026 /* Select shadow register 0x1f */ 6027 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 6028 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 6029 6030 /* Select expansion interrupt status register */ 6031 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6032 MII_TG3_DSP_EXP1_INT_STAT); 6033 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6034 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6035 6036 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 6037 /* We have signal detect and not receiving 6038 * config code words, link is up by parallel 6039 * detection. 6040 */ 6041 6042 bmcr &= ~BMCR_ANENABLE; 6043 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 6044 tg3_writephy(tp, MII_BMCR, bmcr); 6045 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 6046 } 6047 } 6048 } else if (tp->link_up && 6049 (tp->link_config.autoneg == AUTONEG_ENABLE) && 6050 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 6051 u32 phy2; 6052 6053 /* Select expansion interrupt status register */ 6054 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6055 MII_TG3_DSP_EXP1_INT_STAT); 6056 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6057 if (phy2 & 0x20) { 6058 u32 bmcr; 6059 6060 /* Config code words received, turn on autoneg. */ 6061 tg3_readphy(tp, MII_BMCR, &bmcr); 6062 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 6063 6064 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 6065 6066 } 6067 } 6068} 6069 6070static int tg3_setup_phy(struct tg3 *tp, bool force_reset) 6071{ 6072 u32 val; 6073 int err; 6074 6075 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 6076 err = tg3_setup_fiber_phy(tp, force_reset); 6077 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 6078 err = tg3_setup_fiber_mii_phy(tp, force_reset); 6079 else 6080 err = tg3_setup_copper_phy(tp, force_reset); 6081 6082 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 6083 u32 scale; 6084 6085 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 6086 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 6087 scale = 65; 6088 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 6089 scale = 6; 6090 else 6091 scale = 12; 6092 6093 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 6094 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 6095 tw32(GRC_MISC_CFG, val); 6096 } 6097 6098 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 6099 (6 << TX_LENGTHS_IPG_SHIFT); 6100 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 6101 tg3_asic_rev(tp) == ASIC_REV_5762) 6102 val |= tr32(MAC_TX_LENGTHS) & 6103 (TX_LENGTHS_JMB_FRM_LEN_MSK | 6104 TX_LENGTHS_CNT_DWN_VAL_MSK); 6105 6106 if (tp->link_config.active_speed == SPEED_1000 && 6107 tp->link_config.active_duplex == DUPLEX_HALF) 6108 tw32(MAC_TX_LENGTHS, val | 6109 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 6110 else 6111 tw32(MAC_TX_LENGTHS, val | 6112 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 6113 6114 if (!tg3_flag(tp, 5705_PLUS)) { 6115 if (tp->link_up) { 6116 tw32(HOSTCC_STAT_COAL_TICKS, 6117 tp->coal.stats_block_coalesce_usecs); 6118 } else { 6119 tw32(HOSTCC_STAT_COAL_TICKS, 0); 6120 } 6121 } 6122 6123 if (tg3_flag(tp, ASPM_WORKAROUND)) { 6124 val = tr32(PCIE_PWR_MGMT_THRESH); 6125 if (!tp->link_up) 6126 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 6127 tp->pwrmgmt_thresh; 6128 else 6129 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 6130 tw32(PCIE_PWR_MGMT_THRESH, val); 6131 } 6132 6133 return err; 6134} 6135 6136/* tp->lock must be held */ 6137static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts) 6138{ 6139 u64 stamp; 6140 6141 ptp_read_system_prets(sts); 6142 stamp = tr32(TG3_EAV_REF_CLCK_LSB); 6143 ptp_read_system_postts(sts); 6144 stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; 6145 6146 return stamp; 6147} 6148 6149/* tp->lock must be held */ 6150static void tg3_refclk_write(struct tg3 *tp, u64 newval) 6151{ 6152 u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6153 6154 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP); 6155 tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff); 6156 tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32); 6157 tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME); 6158} 6159 6160static inline void tg3_full_lock(struct tg3 *tp, int irq_sync); 6161static inline void tg3_full_unlock(struct tg3 *tp); 6162static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) 6163{ 6164 struct tg3 *tp = netdev_priv(dev); 6165 6166 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | 6167 SOF_TIMESTAMPING_RX_SOFTWARE | 6168 SOF_TIMESTAMPING_SOFTWARE; 6169 6170 if (tg3_flag(tp, PTP_CAPABLE)) { 6171 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE | 6172 SOF_TIMESTAMPING_RX_HARDWARE | 6173 SOF_TIMESTAMPING_RAW_HARDWARE; 6174 } 6175 6176 if (tp->ptp_clock) 6177 info->phc_index = ptp_clock_index(tp->ptp_clock); 6178 else 6179 info->phc_index = -1; 6180 6181 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); 6182 6183 info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | 6184 (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) | 6185 (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | 6186 (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT); 6187 return 0; 6188} 6189 6190static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) 6191{ 6192 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6193 bool neg_adj = false; 6194 u32 correction = 0; 6195 6196 if (ppb < 0) { 6197 neg_adj = true; 6198 ppb = -ppb; 6199 } 6200 6201 /* Frequency adjustment is performed using hardware with a 24 bit 6202 * accumulator and a programmable correction value. On each clk, the 6203 * correction value gets added to the accumulator and when it 6204 * overflows, the time counter is incremented/decremented. 6205 * 6206 * So conversion from ppb to correction value is 6207 * ppb * (1 << 24) / 1000000000 6208 */ 6209 correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) & 6210 TG3_EAV_REF_CLK_CORRECT_MASK; 6211 6212 tg3_full_lock(tp, 0); 6213 6214 if (correction) 6215 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 6216 TG3_EAV_REF_CLK_CORRECT_EN | 6217 (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction); 6218 else 6219 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); 6220 6221 tg3_full_unlock(tp); 6222 6223 return 0; 6224} 6225 6226static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) 6227{ 6228 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6229 6230 tg3_full_lock(tp, 0); 6231 tp->ptp_adjust += delta; 6232 tg3_full_unlock(tp); 6233 6234 return 0; 6235} 6236 6237static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts, 6238 struct ptp_system_timestamp *sts) 6239{ 6240 u64 ns; 6241 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6242 6243 tg3_full_lock(tp, 0); 6244 ns = tg3_refclk_read(tp, sts); 6245 ns += tp->ptp_adjust; 6246 tg3_full_unlock(tp); 6247 6248 *ts = ns_to_timespec64(ns); 6249 6250 return 0; 6251} 6252 6253static int tg3_ptp_settime(struct ptp_clock_info *ptp, 6254 const struct timespec64 *ts) 6255{ 6256 u64 ns; 6257 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6258 6259 ns = timespec64_to_ns(ts); 6260 6261 tg3_full_lock(tp, 0); 6262 tg3_refclk_write(tp, ns); 6263 tp->ptp_adjust = 0; 6264 tg3_full_unlock(tp); 6265 6266 return 0; 6267} 6268 6269static int tg3_ptp_enable(struct ptp_clock_info *ptp, 6270 struct ptp_clock_request *rq, int on) 6271{ 6272 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6273 u32 clock_ctl; 6274 int rval = 0; 6275 6276 switch (rq->type) { 6277 case PTP_CLK_REQ_PEROUT: 6278 /* Reject requests with unsupported flags */ 6279 if (rq->perout.flags) 6280 return -EOPNOTSUPP; 6281 6282 if (rq->perout.index != 0) 6283 return -EINVAL; 6284 6285 tg3_full_lock(tp, 0); 6286 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6287 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK; 6288 6289 if (on) { 6290 u64 nsec; 6291 6292 nsec = rq->perout.start.sec * 1000000000ULL + 6293 rq->perout.start.nsec; 6294 6295 if (rq->perout.period.sec || rq->perout.period.nsec) { 6296 netdev_warn(tp->dev, 6297 "Device supports only a one-shot timesync output, period must be 0\n"); 6298 rval = -EINVAL; 6299 goto err_out; 6300 } 6301 6302 if (nsec & (1ULL << 63)) { 6303 netdev_warn(tp->dev, 6304 "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n"); 6305 rval = -EINVAL; 6306 goto err_out; 6307 } 6308 6309 tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff)); 6310 tw32(TG3_EAV_WATCHDOG0_MSB, 6311 TG3_EAV_WATCHDOG0_EN | 6312 ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK)); 6313 6314 tw32(TG3_EAV_REF_CLCK_CTL, 6315 clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0); 6316 } else { 6317 tw32(TG3_EAV_WATCHDOG0_MSB, 0); 6318 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl); 6319 } 6320 6321err_out: 6322 tg3_full_unlock(tp); 6323 return rval; 6324 6325 default: 6326 break; 6327 } 6328 6329 return -EOPNOTSUPP; 6330} 6331 6332static const struct ptp_clock_info tg3_ptp_caps = { 6333 .owner = THIS_MODULE, 6334 .name = "tg3 clock", 6335 .max_adj = 250000000, 6336 .n_alarm = 0, 6337 .n_ext_ts = 0, 6338 .n_per_out = 1, 6339 .n_pins = 0, 6340 .pps = 0, 6341 .adjfreq = tg3_ptp_adjfreq, 6342 .adjtime = tg3_ptp_adjtime, 6343 .gettimex64 = tg3_ptp_gettimex, 6344 .settime64 = tg3_ptp_settime, 6345 .enable = tg3_ptp_enable, 6346}; 6347 6348static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, 6349 struct skb_shared_hwtstamps *timestamp) 6350{ 6351 memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); 6352 timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + 6353 tp->ptp_adjust); 6354} 6355 6356/* tp->lock must be held */ 6357static void tg3_ptp_init(struct tg3 *tp) 6358{ 6359 if (!tg3_flag(tp, PTP_CAPABLE)) 6360 return; 6361 6362 /* Initialize the hardware clock to the system time. */ 6363 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); 6364 tp->ptp_adjust = 0; 6365 tp->ptp_info = tg3_ptp_caps; 6366} 6367 6368/* tp->lock must be held */ 6369static void tg3_ptp_resume(struct tg3 *tp) 6370{ 6371 if (!tg3_flag(tp, PTP_CAPABLE)) 6372 return; 6373 6374 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); 6375 tp->ptp_adjust = 0; 6376} 6377 6378static void tg3_ptp_fini(struct tg3 *tp) 6379{ 6380 if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) 6381 return; 6382 6383 ptp_clock_unregister(tp->ptp_clock); 6384 tp->ptp_clock = NULL; 6385 tp->ptp_adjust = 0; 6386} 6387 6388static inline int tg3_irq_sync(struct tg3 *tp) 6389{ 6390 return tp->irq_sync; 6391} 6392 6393static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 6394{ 6395 int i; 6396 6397 dst = (u32 *)((u8 *)dst + off); 6398 for (i = 0; i < len; i += sizeof(u32)) 6399 *dst++ = tr32(off + i); 6400} 6401 6402static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 6403{ 6404 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 6405 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 6406 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 6407 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 6408 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 6409 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 6410 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 6411 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 6412 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 6413 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 6414 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 6415 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 6416 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 6417 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 6418 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 6419 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 6420 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 6421 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 6422 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 6423 6424 if (tg3_flag(tp, SUPPORT_MSIX)) 6425 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 6426 6427 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 6428 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 6429 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 6430 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 6431 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 6432 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 6433 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 6434 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 6435 6436 if (!tg3_flag(tp, 5705_PLUS)) { 6437 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 6438 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 6439 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 6440 } 6441 6442 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 6443 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 6444 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 6445 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 6446 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 6447 6448 if (tg3_flag(tp, NVRAM)) 6449 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 6450} 6451 6452static void tg3_dump_state(struct tg3 *tp) 6453{ 6454 int i; 6455 u32 *regs; 6456 6457 /* If it is a PCI error, all registers will be 0xffff, 6458 * we don't dump them out, just report the error and return 6459 */ 6460 if (tp->pdev->error_state != pci_channel_io_normal) { 6461 netdev_err(tp->dev, "PCI channel ERROR!\n"); 6462 return; 6463 } 6464 6465 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 6466 if (!regs) 6467 return; 6468 6469 if (tg3_flag(tp, PCI_EXPRESS)) { 6470 /* Read up to but not including private PCI registers */ 6471 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 6472 regs[i / sizeof(u32)] = tr32(i); 6473 } else 6474 tg3_dump_legacy_regs(tp, regs); 6475 6476 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 6477 if (!regs[i + 0] && !regs[i + 1] && 6478 !regs[i + 2] && !regs[i + 3]) 6479 continue; 6480 6481 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 6482 i * 4, 6483 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 6484 } 6485 6486 kfree(regs); 6487 6488 for (i = 0; i < tp->irq_cnt; i++) { 6489 struct tg3_napi *tnapi = &tp->napi[i]; 6490 6491 /* SW status block */ 6492 netdev_err(tp->dev, 6493 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 6494 i, 6495 tnapi->hw_status->status, 6496 tnapi->hw_status->status_tag, 6497 tnapi->hw_status->rx_jumbo_consumer, 6498 tnapi->hw_status->rx_consumer, 6499 tnapi->hw_status->rx_mini_consumer, 6500 tnapi->hw_status->idx[0].rx_producer, 6501 tnapi->hw_status->idx[0].tx_consumer); 6502 6503 netdev_err(tp->dev, 6504 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 6505 i, 6506 tnapi->last_tag, tnapi->last_irq_tag, 6507 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 6508 tnapi->rx_rcb_ptr, 6509 tnapi->prodring.rx_std_prod_idx, 6510 tnapi->prodring.rx_std_cons_idx, 6511 tnapi->prodring.rx_jmb_prod_idx, 6512 tnapi->prodring.rx_jmb_cons_idx); 6513 } 6514} 6515 6516/* This is called whenever we suspect that the system chipset is re- 6517 * ordering the sequence of MMIO to the tx send mailbox. The symptom 6518 * is bogus tx completions. We try to recover by setting the 6519 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 6520 * in the workqueue. 6521 */ 6522static void tg3_tx_recover(struct tg3 *tp) 6523{ 6524 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 6525 tp->write32_tx_mbox == tg3_write_indirect_mbox); 6526 6527 netdev_warn(tp->dev, 6528 "The system may be re-ordering memory-mapped I/O " 6529 "cycles to the network device, attempting to recover. " 6530 "Please report the problem to the driver maintainer " 6531 "and include system chipset information.\n"); 6532 6533 tg3_flag_set(tp, TX_RECOVERY_PENDING); 6534} 6535 6536static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 6537{ 6538 /* Tell compiler to fetch tx indices from memory. */ 6539 barrier(); 6540 return tnapi->tx_pending - 6541 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 6542} 6543 6544/* Tigon3 never reports partial packet sends. So we do not 6545 * need special logic to handle SKBs that have not had all 6546 * of their frags sent yet, like SunGEM does. 6547 */ 6548static void tg3_tx(struct tg3_napi *tnapi) 6549{ 6550 struct tg3 *tp = tnapi->tp; 6551 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 6552 u32 sw_idx = tnapi->tx_cons; 6553 struct netdev_queue *txq; 6554 int index = tnapi - tp->napi; 6555 unsigned int pkts_compl = 0, bytes_compl = 0; 6556 6557 if (tg3_flag(tp, ENABLE_TSS)) 6558 index--; 6559 6560 txq = netdev_get_tx_queue(tp->dev, index); 6561 6562 while (sw_idx != hw_idx) { 6563 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 6564 struct sk_buff *skb = ri->skb; 6565 int i, tx_bug = 0; 6566 6567 if (unlikely(skb == NULL)) { 6568 tg3_tx_recover(tp); 6569 return; 6570 } 6571 6572 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { 6573 struct skb_shared_hwtstamps timestamp; 6574 u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); 6575 hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; 6576 6577 tg3_hwclock_to_timestamp(tp, hwclock, ×tamp); 6578 6579 skb_tstamp_tx(skb, ×tamp); 6580 } 6581 6582 pci_unmap_single(tp->pdev, 6583 dma_unmap_addr(ri, mapping), 6584 skb_headlen(skb), 6585 PCI_DMA_TODEVICE); 6586 6587 ri->skb = NULL; 6588 6589 while (ri->fragmented) { 6590 ri->fragmented = false; 6591 sw_idx = NEXT_TX(sw_idx); 6592 ri = &tnapi->tx_buffers[sw_idx]; 6593 } 6594 6595 sw_idx = NEXT_TX(sw_idx); 6596 6597 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 6598 ri = &tnapi->tx_buffers[sw_idx]; 6599 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 6600 tx_bug = 1; 6601 6602 pci_unmap_page(tp->pdev, 6603 dma_unmap_addr(ri, mapping), 6604 skb_frag_size(&skb_shinfo(skb)->frags[i]), 6605 PCI_DMA_TODEVICE); 6606 6607 while (ri->fragmented) { 6608 ri->fragmented = false; 6609 sw_idx = NEXT_TX(sw_idx); 6610 ri = &tnapi->tx_buffers[sw_idx]; 6611 } 6612 6613 sw_idx = NEXT_TX(sw_idx); 6614 } 6615 6616 pkts_compl++; 6617 bytes_compl += skb->len; 6618 6619 dev_consume_skb_any(skb); 6620 6621 if (unlikely(tx_bug)) { 6622 tg3_tx_recover(tp); 6623 return; 6624 } 6625 } 6626 6627 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 6628 6629 tnapi->tx_cons = sw_idx; 6630 6631 /* Need to make the tx_cons update visible to tg3_start_xmit() 6632 * before checking for netif_queue_stopped(). Without the 6633 * memory barrier, there is a small possibility that tg3_start_xmit() 6634 * will miss it and cause the queue to be stopped forever. 6635 */ 6636 smp_mb(); 6637 6638 if (unlikely(netif_tx_queue_stopped(txq) && 6639 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 6640 __netif_tx_lock(txq, smp_processor_id()); 6641 if (netif_tx_queue_stopped(txq) && 6642 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 6643 netif_tx_wake_queue(txq); 6644 __netif_tx_unlock(txq); 6645 } 6646} 6647 6648static void tg3_frag_free(bool is_frag, void *data) 6649{ 6650 if (is_frag) 6651 skb_free_frag(data); 6652 else 6653 kfree(data); 6654} 6655 6656static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 6657{ 6658 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 6659 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6660 6661 if (!ri->data) 6662 return; 6663 6664 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), 6665 map_sz, PCI_DMA_FROMDEVICE); 6666 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 6667 ri->data = NULL; 6668} 6669 6670 6671/* Returns size of skb allocated or < 0 on error. 6672 * 6673 * We only need to fill in the address because the other members 6674 * of the RX descriptor are invariant, see tg3_init_rings. 6675 * 6676 * Note the purposeful assymetry of cpu vs. chip accesses. For 6677 * posting buffers we only dirty the first cache line of the RX 6678 * descriptor (containing the address). Whereas for the RX status 6679 * buffers the cpu only reads the last cacheline of the RX descriptor 6680 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 6681 */ 6682static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 6683 u32 opaque_key, u32 dest_idx_unmasked, 6684 unsigned int *frag_size) 6685{ 6686 struct tg3_rx_buffer_desc *desc; 6687 struct ring_info *map; 6688 u8 *data; 6689 dma_addr_t mapping; 6690 int skb_size, data_size, dest_idx; 6691 6692 switch (opaque_key) { 6693 case RXD_OPAQUE_RING_STD: 6694 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6695 desc = &tpr->rx_std[dest_idx]; 6696 map = &tpr->rx_std_buffers[dest_idx]; 6697 data_size = tp->rx_pkt_map_sz; 6698 break; 6699 6700 case RXD_OPAQUE_RING_JUMBO: 6701 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6702 desc = &tpr->rx_jmb[dest_idx].std; 6703 map = &tpr->rx_jmb_buffers[dest_idx]; 6704 data_size = TG3_RX_JMB_MAP_SZ; 6705 break; 6706 6707 default: 6708 return -EINVAL; 6709 } 6710 6711 /* Do not overwrite any of the map or rp information 6712 * until we are sure we can commit to a new buffer. 6713 * 6714 * Callers depend upon this behavior and assume that 6715 * we leave everything unchanged if we fail. 6716 */ 6717 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 6718 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6719 if (skb_size <= PAGE_SIZE) { 6720 data = napi_alloc_frag(skb_size); 6721 *frag_size = skb_size; 6722 } else { 6723 data = kmalloc(skb_size, GFP_ATOMIC); 6724 *frag_size = 0; 6725 } 6726 if (!data) 6727 return -ENOMEM; 6728 6729 mapping = pci_map_single(tp->pdev, 6730 data + TG3_RX_OFFSET(tp), 6731 data_size, 6732 PCI_DMA_FROMDEVICE); 6733 if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) { 6734 tg3_frag_free(skb_size <= PAGE_SIZE, data); 6735 return -EIO; 6736 } 6737 6738 map->data = data; 6739 dma_unmap_addr_set(map, mapping, mapping); 6740 6741 desc->addr_hi = ((u64)mapping >> 32); 6742 desc->addr_lo = ((u64)mapping & 0xffffffff); 6743 6744 return data_size; 6745} 6746 6747/* We only need to move over in the address because the other 6748 * members of the RX descriptor are invariant. See notes above 6749 * tg3_alloc_rx_data for full details. 6750 */ 6751static void tg3_recycle_rx(struct tg3_napi *tnapi, 6752 struct tg3_rx_prodring_set *dpr, 6753 u32 opaque_key, int src_idx, 6754 u32 dest_idx_unmasked) 6755{ 6756 struct tg3 *tp = tnapi->tp; 6757 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 6758 struct ring_info *src_map, *dest_map; 6759 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 6760 int dest_idx; 6761 6762 switch (opaque_key) { 6763 case RXD_OPAQUE_RING_STD: 6764 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6765 dest_desc = &dpr->rx_std[dest_idx]; 6766 dest_map = &dpr->rx_std_buffers[dest_idx]; 6767 src_desc = &spr->rx_std[src_idx]; 6768 src_map = &spr->rx_std_buffers[src_idx]; 6769 break; 6770 6771 case RXD_OPAQUE_RING_JUMBO: 6772 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6773 dest_desc = &dpr->rx_jmb[dest_idx].std; 6774 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 6775 src_desc = &spr->rx_jmb[src_idx].std; 6776 src_map = &spr->rx_jmb_buffers[src_idx]; 6777 break; 6778 6779 default: 6780 return; 6781 } 6782 6783 dest_map->data = src_map->data; 6784 dma_unmap_addr_set(dest_map, mapping, 6785 dma_unmap_addr(src_map, mapping)); 6786 dest_desc->addr_hi = src_desc->addr_hi; 6787 dest_desc->addr_lo = src_desc->addr_lo; 6788 6789 /* Ensure that the update to the skb happens after the physical 6790 * addresses have been transferred to the new BD location. 6791 */ 6792 smp_wmb(); 6793 6794 src_map->data = NULL; 6795} 6796 6797/* The RX ring scheme is composed of multiple rings which post fresh 6798 * buffers to the chip, and one special ring the chip uses to report 6799 * status back to the host. 6800 * 6801 * The special ring reports the status of received packets to the 6802 * host. The chip does not write into the original descriptor the 6803 * RX buffer was obtained from. The chip simply takes the original 6804 * descriptor as provided by the host, updates the status and length 6805 * field, then writes this into the next status ring entry. 6806 * 6807 * Each ring the host uses to post buffers to the chip is described 6808 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 6809 * it is first placed into the on-chip ram. When the packet's length 6810 * is known, it walks down the TG3_BDINFO entries to select the ring. 6811 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 6812 * which is within the range of the new packet's length is chosen. 6813 * 6814 * The "separate ring for rx status" scheme may sound queer, but it makes 6815 * sense from a cache coherency perspective. If only the host writes 6816 * to the buffer post rings, and only the chip writes to the rx status 6817 * rings, then cache lines never move beyond shared-modified state. 6818 * If both the host and chip were to write into the same ring, cache line 6819 * eviction could occur since both entities want it in an exclusive state. 6820 */ 6821static int tg3_rx(struct tg3_napi *tnapi, int budget) 6822{ 6823 struct tg3 *tp = tnapi->tp; 6824 u32 work_mask, rx_std_posted = 0; 6825 u32 std_prod_idx, jmb_prod_idx; 6826 u32 sw_idx = tnapi->rx_rcb_ptr; 6827 u16 hw_idx; 6828 int received; 6829 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 6830 6831 hw_idx = *(tnapi->rx_rcb_prod_idx); 6832 /* 6833 * We need to order the read of hw_idx and the read of 6834 * the opaque cookie. 6835 */ 6836 rmb(); 6837 work_mask = 0; 6838 received = 0; 6839 std_prod_idx = tpr->rx_std_prod_idx; 6840 jmb_prod_idx = tpr->rx_jmb_prod_idx; 6841 while (sw_idx != hw_idx && budget > 0) { 6842 struct ring_info *ri; 6843 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 6844 unsigned int len; 6845 struct sk_buff *skb; 6846 dma_addr_t dma_addr; 6847 u32 opaque_key, desc_idx, *post_ptr; 6848 u8 *data; 6849 u64 tstamp = 0; 6850 6851 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 6852 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 6853 if (opaque_key == RXD_OPAQUE_RING_STD) { 6854 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 6855 dma_addr = dma_unmap_addr(ri, mapping); 6856 data = ri->data; 6857 post_ptr = &std_prod_idx; 6858 rx_std_posted++; 6859 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 6860 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 6861 dma_addr = dma_unmap_addr(ri, mapping); 6862 data = ri->data; 6863 post_ptr = &jmb_prod_idx; 6864 } else 6865 goto next_pkt_nopost; 6866 6867 work_mask |= opaque_key; 6868 6869 if (desc->err_vlan & RXD_ERR_MASK) { 6870 drop_it: 6871 tg3_recycle_rx(tnapi, tpr, opaque_key, 6872 desc_idx, *post_ptr); 6873 drop_it_no_recycle: 6874 /* Other statistics kept track of by card. */ 6875 tnapi->rx_dropped++; 6876 goto next_pkt; 6877 } 6878 6879 prefetch(data + TG3_RX_OFFSET(tp)); 6880 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 6881 ETH_FCS_LEN; 6882 6883 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6884 RXD_FLAG_PTPSTAT_PTPV1 || 6885 (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6886 RXD_FLAG_PTPSTAT_PTPV2) { 6887 tstamp = tr32(TG3_RX_TSTAMP_LSB); 6888 tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; 6889 } 6890 6891 if (len > TG3_RX_COPY_THRESH(tp)) { 6892 int skb_size; 6893 unsigned int frag_size; 6894 6895 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 6896 *post_ptr, &frag_size); 6897 if (skb_size < 0) 6898 goto drop_it; 6899 6900 pci_unmap_single(tp->pdev, dma_addr, skb_size, 6901 PCI_DMA_FROMDEVICE); 6902 6903 /* Ensure that the update to the data happens 6904 * after the usage of the old DMA mapping. 6905 */ 6906 smp_wmb(); 6907 6908 ri->data = NULL; 6909 6910 skb = build_skb(data, frag_size); 6911 if (!skb) { 6912 tg3_frag_free(frag_size != 0, data); 6913 goto drop_it_no_recycle; 6914 } 6915 skb_reserve(skb, TG3_RX_OFFSET(tp)); 6916 } else { 6917 tg3_recycle_rx(tnapi, tpr, opaque_key, 6918 desc_idx, *post_ptr); 6919 6920 skb = netdev_alloc_skb(tp->dev, 6921 len + TG3_RAW_IP_ALIGN); 6922 if (skb == NULL) 6923 goto drop_it_no_recycle; 6924 6925 skb_reserve(skb, TG3_RAW_IP_ALIGN); 6926 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 6927 memcpy(skb->data, 6928 data + TG3_RX_OFFSET(tp), 6929 len); 6930 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 6931 } 6932 6933 skb_put(skb, len); 6934 if (tstamp) 6935 tg3_hwclock_to_timestamp(tp, tstamp, 6936 skb_hwtstamps(skb)); 6937 6938 if ((tp->dev->features & NETIF_F_RXCSUM) && 6939 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 6940 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 6941 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 6942 skb->ip_summed = CHECKSUM_UNNECESSARY; 6943 else 6944 skb_checksum_none_assert(skb); 6945 6946 skb->protocol = eth_type_trans(skb, tp->dev); 6947 6948 if (len > (tp->dev->mtu + ETH_HLEN) && 6949 skb->protocol != htons(ETH_P_8021Q) && 6950 skb->protocol != htons(ETH_P_8021AD)) { 6951 dev_kfree_skb_any(skb); 6952 goto drop_it_no_recycle; 6953 } 6954 6955 if (desc->type_flags & RXD_FLAG_VLAN && 6956 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6957 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 6958 desc->err_vlan & RXD_VLAN_MASK); 6959 6960 napi_gro_receive(&tnapi->napi, skb); 6961 6962 received++; 6963 budget--; 6964 6965next_pkt: 6966 (*post_ptr)++; 6967 6968 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6969 tpr->rx_std_prod_idx = std_prod_idx & 6970 tp->rx_std_ring_mask; 6971 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6972 tpr->rx_std_prod_idx); 6973 work_mask &= ~RXD_OPAQUE_RING_STD; 6974 rx_std_posted = 0; 6975 } 6976next_pkt_nopost: 6977 sw_idx++; 6978 sw_idx &= tp->rx_ret_ring_mask; 6979 6980 /* Refresh hw_idx to see if there is new work */ 6981 if (sw_idx == hw_idx) { 6982 hw_idx = *(tnapi->rx_rcb_prod_idx); 6983 rmb(); 6984 } 6985 } 6986 6987 /* ACK the status ring. */ 6988 tnapi->rx_rcb_ptr = sw_idx; 6989 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6990 6991 /* Refill RX ring(s). */ 6992 if (!tg3_flag(tp, ENABLE_RSS)) { 6993 /* Sync BD data before updating mailbox */ 6994 wmb(); 6995 6996 if (work_mask & RXD_OPAQUE_RING_STD) { 6997 tpr->rx_std_prod_idx = std_prod_idx & 6998 tp->rx_std_ring_mask; 6999 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 7000 tpr->rx_std_prod_idx); 7001 } 7002 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 7003 tpr->rx_jmb_prod_idx = jmb_prod_idx & 7004 tp->rx_jmb_ring_mask; 7005 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 7006 tpr->rx_jmb_prod_idx); 7007 } 7008 } else if (work_mask) { 7009 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 7010 * updated before the producer indices can be updated. 7011 */ 7012 smp_wmb(); 7013 7014 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 7015 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 7016 7017 if (tnapi != &tp->napi[1]) { 7018 tp->rx_refill = true; 7019 napi_schedule(&tp->napi[1].napi); 7020 } 7021 } 7022 7023 return received; 7024} 7025 7026static void tg3_poll_link(struct tg3 *tp) 7027{ 7028 /* handle link change and other phy events */ 7029 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 7030 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 7031 7032 if (sblk->status & SD_STATUS_LINK_CHG) { 7033 sblk->status = SD_STATUS_UPDATED | 7034 (sblk->status & ~SD_STATUS_LINK_CHG); 7035 spin_lock(&tp->lock); 7036 if (tg3_flag(tp, USE_PHYLIB)) { 7037 tw32_f(MAC_STATUS, 7038 (MAC_STATUS_SYNC_CHANGED | 7039 MAC_STATUS_CFG_CHANGED | 7040 MAC_STATUS_MI_COMPLETION | 7041 MAC_STATUS_LNKSTATE_CHANGED)); 7042 udelay(40); 7043 } else 7044 tg3_setup_phy(tp, false); 7045 spin_unlock(&tp->lock); 7046 } 7047 } 7048} 7049 7050static int tg3_rx_prodring_xfer(struct tg3 *tp, 7051 struct tg3_rx_prodring_set *dpr, 7052 struct tg3_rx_prodring_set *spr) 7053{ 7054 u32 si, di, cpycnt, src_prod_idx; 7055 int i, err = 0; 7056 7057 while (1) { 7058 src_prod_idx = spr->rx_std_prod_idx; 7059 7060 /* Make sure updates to the rx_std_buffers[] entries and the 7061 * standard producer index are seen in the correct order. 7062 */ 7063 smp_rmb(); 7064 7065 if (spr->rx_std_cons_idx == src_prod_idx) 7066 break; 7067 7068 if (spr->rx_std_cons_idx < src_prod_idx) 7069 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 7070 else 7071 cpycnt = tp->rx_std_ring_mask + 1 - 7072 spr->rx_std_cons_idx; 7073 7074 cpycnt = min(cpycnt, 7075 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 7076 7077 si = spr->rx_std_cons_idx; 7078 di = dpr->rx_std_prod_idx; 7079 7080 for (i = di; i < di + cpycnt; i++) { 7081 if (dpr->rx_std_buffers[i].data) { 7082 cpycnt = i - di; 7083 err = -ENOSPC; 7084 break; 7085 } 7086 } 7087 7088 if (!cpycnt) 7089 break; 7090 7091 /* Ensure that updates to the rx_std_buffers ring and the 7092 * shadowed hardware producer ring from tg3_recycle_skb() are 7093 * ordered correctly WRT the skb check above. 7094 */ 7095 smp_rmb(); 7096 7097 memcpy(&dpr->rx_std_buffers[di], 7098 &spr->rx_std_buffers[si], 7099 cpycnt * sizeof(struct ring_info)); 7100 7101 for (i = 0; i < cpycnt; i++, di++, si++) { 7102 struct tg3_rx_buffer_desc *sbd, *dbd; 7103 sbd = &spr->rx_std[si]; 7104 dbd = &dpr->rx_std[di]; 7105 dbd->addr_hi = sbd->addr_hi; 7106 dbd->addr_lo = sbd->addr_lo; 7107 } 7108 7109 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 7110 tp->rx_std_ring_mask; 7111 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 7112 tp->rx_std_ring_mask; 7113 } 7114 7115 while (1) { 7116 src_prod_idx = spr->rx_jmb_prod_idx; 7117 7118 /* Make sure updates to the rx_jmb_buffers[] entries and 7119 * the jumbo producer index are seen in the correct order. 7120 */ 7121 smp_rmb(); 7122 7123 if (spr->rx_jmb_cons_idx == src_prod_idx) 7124 break; 7125 7126 if (spr->rx_jmb_cons_idx < src_prod_idx) 7127 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 7128 else 7129 cpycnt = tp->rx_jmb_ring_mask + 1 - 7130 spr->rx_jmb_cons_idx; 7131 7132 cpycnt = min(cpycnt, 7133 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 7134 7135 si = spr->rx_jmb_cons_idx; 7136 di = dpr->rx_jmb_prod_idx; 7137 7138 for (i = di; i < di + cpycnt; i++) { 7139 if (dpr->rx_jmb_buffers[i].data) { 7140 cpycnt = i - di; 7141 err = -ENOSPC; 7142 break; 7143 } 7144 } 7145 7146 if (!cpycnt) 7147 break; 7148 7149 /* Ensure that updates to the rx_jmb_buffers ring and the 7150 * shadowed hardware producer ring from tg3_recycle_skb() are 7151 * ordered correctly WRT the skb check above. 7152 */ 7153 smp_rmb(); 7154 7155 memcpy(&dpr->rx_jmb_buffers[di], 7156 &spr->rx_jmb_buffers[si], 7157 cpycnt * sizeof(struct ring_info)); 7158 7159 for (i = 0; i < cpycnt; i++, di++, si++) { 7160 struct tg3_rx_buffer_desc *sbd, *dbd; 7161 sbd = &spr->rx_jmb[si].std; 7162 dbd = &dpr->rx_jmb[di].std; 7163 dbd->addr_hi = sbd->addr_hi; 7164 dbd->addr_lo = sbd->addr_lo; 7165 } 7166 7167 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 7168 tp->rx_jmb_ring_mask; 7169 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 7170 tp->rx_jmb_ring_mask; 7171 } 7172 7173 return err; 7174} 7175 7176static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 7177{ 7178 struct tg3 *tp = tnapi->tp; 7179 7180 /* run TX completion thread */ 7181 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 7182 tg3_tx(tnapi); 7183 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7184 return work_done; 7185 } 7186 7187 if (!tnapi->rx_rcb_prod_idx) 7188 return work_done; 7189 7190 /* run RX thread, within the bounds set by NAPI. 7191 * All RX "locking" is done by ensuring outside 7192 * code synchronizes with tg3->napi.poll() 7193 */ 7194 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 7195 work_done += tg3_rx(tnapi, budget - work_done); 7196 7197 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 7198 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 7199 int i, err = 0; 7200 u32 std_prod_idx = dpr->rx_std_prod_idx; 7201 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 7202 7203 tp->rx_refill = false; 7204 for (i = 1; i <= tp->rxq_cnt; i++) 7205 err |= tg3_rx_prodring_xfer(tp, dpr, 7206 &tp->napi[i].prodring); 7207 7208 wmb(); 7209 7210 if (std_prod_idx != dpr->rx_std_prod_idx) 7211 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 7212 dpr->rx_std_prod_idx); 7213 7214 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 7215 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 7216 dpr->rx_jmb_prod_idx); 7217 7218 if (err) 7219 tw32_f(HOSTCC_MODE, tp->coal_now); 7220 } 7221 7222 return work_done; 7223} 7224 7225static inline void tg3_reset_task_schedule(struct tg3 *tp) 7226{ 7227 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7228 schedule_work(&tp->reset_task); 7229} 7230 7231static inline void tg3_reset_task_cancel(struct tg3 *tp) 7232{ 7233 if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7234 cancel_work_sync(&tp->reset_task); 7235 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 7236} 7237 7238static int tg3_poll_msix(struct napi_struct *napi, int budget) 7239{ 7240 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7241 struct tg3 *tp = tnapi->tp; 7242 int work_done = 0; 7243 struct tg3_hw_status *sblk = tnapi->hw_status; 7244 7245 while (1) { 7246 work_done = tg3_poll_work(tnapi, work_done, budget); 7247 7248 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7249 goto tx_recovery; 7250 7251 if (unlikely(work_done >= budget)) 7252 break; 7253 7254 /* tp->last_tag is used in tg3_int_reenable() below 7255 * to tell the hw how much work has been processed, 7256 * so we must read it before checking for more work. 7257 */ 7258 tnapi->last_tag = sblk->status_tag; 7259 tnapi->last_irq_tag = tnapi->last_tag; 7260 rmb(); 7261 7262 /* check for RX/TX work to do */ 7263 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 7264 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 7265 7266 /* This test here is not race free, but will reduce 7267 * the number of interrupts by looping again. 7268 */ 7269 if (tnapi == &tp->napi[1] && tp->rx_refill) 7270 continue; 7271 7272 napi_complete_done(napi, work_done); 7273 /* Reenable interrupts. */ 7274 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 7275 7276 /* This test here is synchronized by napi_schedule() 7277 * and napi_complete() to close the race condition. 7278 */ 7279 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 7280 tw32(HOSTCC_MODE, tp->coalesce_mode | 7281 HOSTCC_MODE_ENABLE | 7282 tnapi->coal_now); 7283 } 7284 break; 7285 } 7286 } 7287 7288 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7289 return work_done; 7290 7291tx_recovery: 7292 /* work_done is guaranteed to be less than budget. */ 7293 napi_complete(napi); 7294 tg3_reset_task_schedule(tp); 7295 return work_done; 7296} 7297 7298static void tg3_process_error(struct tg3 *tp) 7299{ 7300 u32 val; 7301 bool real_error = false; 7302 7303 if (tg3_flag(tp, ERROR_PROCESSED)) 7304 return; 7305 7306 /* Check Flow Attention register */ 7307 val = tr32(HOSTCC_FLOW_ATTN); 7308 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 7309 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 7310 real_error = true; 7311 } 7312 7313 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 7314 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 7315 real_error = true; 7316 } 7317 7318 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 7319 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 7320 real_error = true; 7321 } 7322 7323 if (!real_error) 7324 return; 7325 7326 tg3_dump_state(tp); 7327 7328 tg3_flag_set(tp, ERROR_PROCESSED); 7329 tg3_reset_task_schedule(tp); 7330} 7331 7332static int tg3_poll(struct napi_struct *napi, int budget) 7333{ 7334 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7335 struct tg3 *tp = tnapi->tp; 7336 int work_done = 0; 7337 struct tg3_hw_status *sblk = tnapi->hw_status; 7338 7339 while (1) { 7340 if (sblk->status & SD_STATUS_ERROR) 7341 tg3_process_error(tp); 7342 7343 tg3_poll_link(tp); 7344 7345 work_done = tg3_poll_work(tnapi, work_done, budget); 7346 7347 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7348 goto tx_recovery; 7349 7350 if (unlikely(work_done >= budget)) 7351 break; 7352 7353 if (tg3_flag(tp, TAGGED_STATUS)) { 7354 /* tp->last_tag is used in tg3_int_reenable() below 7355 * to tell the hw how much work has been processed, 7356 * so we must read it before checking for more work. 7357 */ 7358 tnapi->last_tag = sblk->status_tag; 7359 tnapi->last_irq_tag = tnapi->last_tag; 7360 rmb(); 7361 } else 7362 sblk->status &= ~SD_STATUS_UPDATED; 7363 7364 if (likely(!tg3_has_work(tnapi))) { 7365 napi_complete_done(napi, work_done); 7366 tg3_int_reenable(tnapi); 7367 break; 7368 } 7369 } 7370 7371 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7372 return work_done; 7373 7374tx_recovery: 7375 /* work_done is guaranteed to be less than budget. */ 7376 napi_complete(napi); 7377 tg3_reset_task_schedule(tp); 7378 return work_done; 7379} 7380 7381static void tg3_napi_disable(struct tg3 *tp) 7382{ 7383 int i; 7384 7385 for (i = tp->irq_cnt - 1; i >= 0; i--) 7386 napi_disable(&tp->napi[i].napi); 7387} 7388 7389static void tg3_napi_enable(struct tg3 *tp) 7390{ 7391 int i; 7392 7393 for (i = 0; i < tp->irq_cnt; i++) 7394 napi_enable(&tp->napi[i].napi); 7395} 7396 7397static void tg3_napi_init(struct tg3 *tp) 7398{ 7399 int i; 7400 7401 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 7402 for (i = 1; i < tp->irq_cnt; i++) 7403 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 7404} 7405 7406static void tg3_napi_fini(struct tg3 *tp) 7407{ 7408 int i; 7409 7410 for (i = 0; i < tp->irq_cnt; i++) 7411 netif_napi_del(&tp->napi[i].napi); 7412} 7413 7414static inline void tg3_netif_stop(struct tg3 *tp) 7415{ 7416 netif_trans_update(tp->dev); /* prevent tx timeout */ 7417 tg3_napi_disable(tp); 7418 netif_carrier_off(tp->dev); 7419 netif_tx_disable(tp->dev); 7420} 7421 7422/* tp->lock must be held */ 7423static inline void tg3_netif_start(struct tg3 *tp) 7424{ 7425 tg3_ptp_resume(tp); 7426 7427 /* NOTE: unconditional netif_tx_wake_all_queues is only 7428 * appropriate so long as all callers are assured to 7429 * have free tx slots (such as after tg3_init_hw) 7430 */ 7431 netif_tx_wake_all_queues(tp->dev); 7432 7433 if (tp->link_up) 7434 netif_carrier_on(tp->dev); 7435 7436 tg3_napi_enable(tp); 7437 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 7438 tg3_enable_ints(tp); 7439} 7440 7441static void tg3_irq_quiesce(struct tg3 *tp) 7442 __releases(tp->lock) 7443 __acquires(tp->lock) 7444{ 7445 int i; 7446 7447 BUG_ON(tp->irq_sync); 7448 7449 tp->irq_sync = 1; 7450 smp_mb(); 7451 7452 spin_unlock_bh(&tp->lock); 7453 7454 for (i = 0; i < tp->irq_cnt; i++) 7455 synchronize_irq(tp->napi[i].irq_vec); 7456 7457 spin_lock_bh(&tp->lock); 7458} 7459 7460/* Fully shutdown all tg3 driver activity elsewhere in the system. 7461 * If irq_sync is non-zero, then the IRQ handler must be synchronized 7462 * with as well. Most of the time, this is not necessary except when 7463 * shutting down the device. 7464 */ 7465static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 7466{ 7467 spin_lock_bh(&tp->lock); 7468 if (irq_sync) 7469 tg3_irq_quiesce(tp); 7470} 7471 7472static inline void tg3_full_unlock(struct tg3 *tp) 7473{ 7474 spin_unlock_bh(&tp->lock); 7475} 7476 7477/* One-shot MSI handler - Chip automatically disables interrupt 7478 * after sending MSI so driver doesn't have to do it. 7479 */ 7480static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 7481{ 7482 struct tg3_napi *tnapi = dev_id; 7483 struct tg3 *tp = tnapi->tp; 7484 7485 prefetch(tnapi->hw_status); 7486 if (tnapi->rx_rcb) 7487 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7488 7489 if (likely(!tg3_irq_sync(tp))) 7490 napi_schedule(&tnapi->napi); 7491 7492 return IRQ_HANDLED; 7493} 7494 7495/* MSI ISR - No need to check for interrupt sharing and no need to 7496 * flush status block and interrupt mailbox. PCI ordering rules 7497 * guarantee that MSI will arrive after the status block. 7498 */ 7499static irqreturn_t tg3_msi(int irq, void *dev_id) 7500{ 7501 struct tg3_napi *tnapi = dev_id; 7502 struct tg3 *tp = tnapi->tp; 7503 7504 prefetch(tnapi->hw_status); 7505 if (tnapi->rx_rcb) 7506 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7507 /* 7508 * Writing any value to intr-mbox-0 clears PCI INTA# and 7509 * chip-internal interrupt pending events. 7510 * Writing non-zero to intr-mbox-0 additional tells the 7511 * NIC to stop sending us irqs, engaging "in-intr-handler" 7512 * event coalescing. 7513 */ 7514 tw32_mailbox(tnapi->int_mbox, 0x00000001); 7515 if (likely(!tg3_irq_sync(tp))) 7516 napi_schedule(&tnapi->napi); 7517 7518 return IRQ_RETVAL(1); 7519} 7520 7521static irqreturn_t tg3_interrupt(int irq, void *dev_id) 7522{ 7523 struct tg3_napi *tnapi = dev_id; 7524 struct tg3 *tp = tnapi->tp; 7525 struct tg3_hw_status *sblk = tnapi->hw_status; 7526 unsigned int handled = 1; 7527 7528 /* In INTx mode, it is possible for the interrupt to arrive at 7529 * the CPU before the status block posted prior to the interrupt. 7530 * Reading the PCI State register will confirm whether the 7531 * interrupt is ours and will flush the status block. 7532 */ 7533 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 7534 if (tg3_flag(tp, CHIP_RESETTING) || 7535 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7536 handled = 0; 7537 goto out; 7538 } 7539 } 7540 7541 /* 7542 * Writing any value to intr-mbox-0 clears PCI INTA# and 7543 * chip-internal interrupt pending events. 7544 * Writing non-zero to intr-mbox-0 additional tells the 7545 * NIC to stop sending us irqs, engaging "in-intr-handler" 7546 * event coalescing. 7547 * 7548 * Flush the mailbox to de-assert the IRQ immediately to prevent 7549 * spurious interrupts. The flush impacts performance but 7550 * excessive spurious interrupts can be worse in some cases. 7551 */ 7552 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7553 if (tg3_irq_sync(tp)) 7554 goto out; 7555 sblk->status &= ~SD_STATUS_UPDATED; 7556 if (likely(tg3_has_work(tnapi))) { 7557 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7558 napi_schedule(&tnapi->napi); 7559 } else { 7560 /* No work, shared interrupt perhaps? re-enable 7561 * interrupts, and flush that PCI write 7562 */ 7563 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 7564 0x00000000); 7565 } 7566out: 7567 return IRQ_RETVAL(handled); 7568} 7569 7570static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 7571{ 7572 struct tg3_napi *tnapi = dev_id; 7573 struct tg3 *tp = tnapi->tp; 7574 struct tg3_hw_status *sblk = tnapi->hw_status; 7575 unsigned int handled = 1; 7576 7577 /* In INTx mode, it is possible for the interrupt to arrive at 7578 * the CPU before the status block posted prior to the interrupt. 7579 * Reading the PCI State register will confirm whether the 7580 * interrupt is ours and will flush the status block. 7581 */ 7582 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 7583 if (tg3_flag(tp, CHIP_RESETTING) || 7584 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7585 handled = 0; 7586 goto out; 7587 } 7588 } 7589 7590 /* 7591 * writing any value to intr-mbox-0 clears PCI INTA# and 7592 * chip-internal interrupt pending events. 7593 * writing non-zero to intr-mbox-0 additional tells the 7594 * NIC to stop sending us irqs, engaging "in-intr-handler" 7595 * event coalescing. 7596 * 7597 * Flush the mailbox to de-assert the IRQ immediately to prevent 7598 * spurious interrupts. The flush impacts performance but 7599 * excessive spurious interrupts can be worse in some cases. 7600 */ 7601 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7602 7603 /* 7604 * In a shared interrupt configuration, sometimes other devices' 7605 * interrupts will scream. We record the current status tag here 7606 * so that the above check can report that the screaming interrupts 7607 * are unhandled. Eventually they will be silenced. 7608 */ 7609 tnapi->last_irq_tag = sblk->status_tag; 7610 7611 if (tg3_irq_sync(tp)) 7612 goto out; 7613 7614 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7615 7616 napi_schedule(&tnapi->napi); 7617 7618out: 7619 return IRQ_RETVAL(handled); 7620} 7621 7622/* ISR for interrupt test */ 7623static irqreturn_t tg3_test_isr(int irq, void *dev_id) 7624{ 7625 struct tg3_napi *tnapi = dev_id; 7626 struct tg3 *tp = tnapi->tp; 7627 struct tg3_hw_status *sblk = tnapi->hw_status; 7628 7629 if ((sblk->status & SD_STATUS_UPDATED) || 7630 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7631 tg3_disable_ints(tp); 7632 return IRQ_RETVAL(1); 7633 } 7634 return IRQ_RETVAL(0); 7635} 7636 7637#ifdef CONFIG_NET_POLL_CONTROLLER 7638static void tg3_poll_controller(struct net_device *dev) 7639{ 7640 int i; 7641 struct tg3 *tp = netdev_priv(dev); 7642 7643 if (tg3_irq_sync(tp)) 7644 return; 7645 7646 for (i = 0; i < tp->irq_cnt; i++) 7647 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 7648} 7649#endif 7650 7651static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue) 7652{ 7653 struct tg3 *tp = netdev_priv(dev); 7654 7655 if (netif_msg_tx_err(tp)) { 7656 netdev_err(dev, "transmit timed out, resetting\n"); 7657 tg3_dump_state(tp); 7658 } 7659 7660 tg3_reset_task_schedule(tp); 7661} 7662 7663/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 7664static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 7665{ 7666 u32 base = (u32) mapping & 0xffffffff; 7667 7668 return base + len + 8 < base; 7669} 7670 7671/* Test for TSO DMA buffers that cross into regions which are within MSS bytes 7672 * of any 4GB boundaries: 4G, 8G, etc 7673 */ 7674static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7675 u32 len, u32 mss) 7676{ 7677 if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) { 7678 u32 base = (u32) mapping & 0xffffffff; 7679 7680 return ((base + len + (mss & 0x3fff)) < base); 7681 } 7682 return 0; 7683} 7684 7685/* Test for DMA addresses > 40-bit */ 7686static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7687 int len) 7688{ 7689#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 7690 if (tg3_flag(tp, 40BIT_DMA_BUG)) 7691 return ((u64) mapping + len) > DMA_BIT_MASK(40); 7692 return 0; 7693#else 7694 return 0; 7695#endif 7696} 7697 7698static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 7699 dma_addr_t mapping, u32 len, u32 flags, 7700 u32 mss, u32 vlan) 7701{ 7702 txbd->addr_hi = ((u64) mapping >> 32); 7703 txbd->addr_lo = ((u64) mapping & 0xffffffff); 7704 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 7705 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 7706} 7707 7708static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 7709 dma_addr_t map, u32 len, u32 flags, 7710 u32 mss, u32 vlan) 7711{ 7712 struct tg3 *tp = tnapi->tp; 7713 bool hwbug = false; 7714 7715 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 7716 hwbug = true; 7717 7718 if (tg3_4g_overflow_test(map, len)) 7719 hwbug = true; 7720 7721 if (tg3_4g_tso_overflow_test(tp, map, len, mss)) 7722 hwbug = true; 7723 7724 if (tg3_40bit_overflow_test(tp, map, len)) 7725 hwbug = true; 7726 7727 if (tp->dma_limit) { 7728 u32 prvidx = *entry; 7729 u32 tmp_flag = flags & ~TXD_FLAG_END; 7730 while (len > tp->dma_limit && *budget) { 7731 u32 frag_len = tp->dma_limit; 7732 len -= tp->dma_limit; 7733 7734 /* Avoid the 8byte DMA problem */ 7735 if (len <= 8) { 7736 len += tp->dma_limit / 2; 7737 frag_len = tp->dma_limit / 2; 7738 } 7739 7740 tnapi->tx_buffers[*entry].fragmented = true; 7741 7742 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7743 frag_len, tmp_flag, mss, vlan); 7744 *budget -= 1; 7745 prvidx = *entry; 7746 *entry = NEXT_TX(*entry); 7747 7748 map += frag_len; 7749 } 7750 7751 if (len) { 7752 if (*budget) { 7753 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7754 len, flags, mss, vlan); 7755 *budget -= 1; 7756 *entry = NEXT_TX(*entry); 7757 } else { 7758 hwbug = true; 7759 tnapi->tx_buffers[prvidx].fragmented = false; 7760 } 7761 } 7762 } else { 7763 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7764 len, flags, mss, vlan); 7765 *entry = NEXT_TX(*entry); 7766 } 7767 7768 return hwbug; 7769} 7770 7771static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 7772{ 7773 int i; 7774 struct sk_buff *skb; 7775 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 7776 7777 skb = txb->skb; 7778 txb->skb = NULL; 7779 7780 pci_unmap_single(tnapi->tp->pdev, 7781 dma_unmap_addr(txb, mapping), 7782 skb_headlen(skb), 7783 PCI_DMA_TODEVICE); 7784 7785 while (txb->fragmented) { 7786 txb->fragmented = false; 7787 entry = NEXT_TX(entry); 7788 txb = &tnapi->tx_buffers[entry]; 7789 } 7790 7791 for (i = 0; i <= last; i++) { 7792 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7793 7794 entry = NEXT_TX(entry); 7795 txb = &tnapi->tx_buffers[entry]; 7796 7797 pci_unmap_page(tnapi->tp->pdev, 7798 dma_unmap_addr(txb, mapping), 7799 skb_frag_size(frag), PCI_DMA_TODEVICE); 7800 7801 while (txb->fragmented) { 7802 txb->fragmented = false; 7803 entry = NEXT_TX(entry); 7804 txb = &tnapi->tx_buffers[entry]; 7805 } 7806 } 7807} 7808 7809/* Workaround 4GB and 40-bit hardware DMA bugs. */ 7810static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 7811 struct sk_buff **pskb, 7812 u32 *entry, u32 *budget, 7813 u32 base_flags, u32 mss, u32 vlan) 7814{ 7815 struct tg3 *tp = tnapi->tp; 7816 struct sk_buff *new_skb, *skb = *pskb; 7817 dma_addr_t new_addr = 0; 7818 int ret = 0; 7819 7820 if (tg3_asic_rev(tp) != ASIC_REV_5701) 7821 new_skb = skb_copy(skb, GFP_ATOMIC); 7822 else { 7823 int more_headroom = 4 - ((unsigned long)skb->data & 3); 7824 7825 new_skb = skb_copy_expand(skb, 7826 skb_headroom(skb) + more_headroom, 7827 skb_tailroom(skb), GFP_ATOMIC); 7828 } 7829 7830 if (!new_skb) { 7831 ret = -1; 7832 } else { 7833 /* New SKB is guaranteed to be linear. */ 7834 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len, 7835 PCI_DMA_TODEVICE); 7836 /* Make sure the mapping succeeded */ 7837 if (pci_dma_mapping_error(tp->pdev, new_addr)) { 7838 dev_kfree_skb_any(new_skb); 7839 ret = -1; 7840 } else { 7841 u32 save_entry = *entry; 7842 7843 base_flags |= TXD_FLAG_END; 7844 7845 tnapi->tx_buffers[*entry].skb = new_skb; 7846 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 7847 mapping, new_addr); 7848 7849 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 7850 new_skb->len, base_flags, 7851 mss, vlan)) { 7852 tg3_tx_skb_unmap(tnapi, save_entry, -1); 7853 dev_kfree_skb_any(new_skb); 7854 ret = -1; 7855 } 7856 } 7857 } 7858 7859 dev_consume_skb_any(skb); 7860 *pskb = new_skb; 7861 return ret; 7862} 7863 7864static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb) 7865{ 7866 /* Check if we will never have enough descriptors, 7867 * as gso_segs can be more than current ring size 7868 */ 7869 return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3; 7870} 7871 7872static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 7873 7874/* Use GSO to workaround all TSO packets that meet HW bug conditions 7875 * indicated in tg3_tx_frag_set() 7876 */ 7877static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi, 7878 struct netdev_queue *txq, struct sk_buff *skb) 7879{ 7880 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 7881 struct sk_buff *segs, *seg, *next; 7882 7883 /* Estimate the number of fragments in the worst case */ 7884 if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) { 7885 netif_tx_stop_queue(txq); 7886 7887 /* netif_tx_stop_queue() must be done before checking 7888 * checking tx index in tg3_tx_avail() below, because in 7889 * tg3_tx(), we update tx index before checking for 7890 * netif_tx_queue_stopped(). 7891 */ 7892 smp_mb(); 7893 if (tg3_tx_avail(tnapi) <= frag_cnt_est) 7894 return NETDEV_TX_BUSY; 7895 7896 netif_tx_wake_queue(txq); 7897 } 7898 7899 segs = skb_gso_segment(skb, tp->dev->features & 7900 ~(NETIF_F_TSO | NETIF_F_TSO6)); 7901 if (IS_ERR(segs) || !segs) { 7902 tnapi->tx_dropped++; 7903 goto tg3_tso_bug_end; 7904 } 7905 7906 skb_list_walk_safe(segs, seg, next) { 7907 skb_mark_not_on_list(seg); 7908 tg3_start_xmit(seg, tp->dev); 7909 } 7910 7911tg3_tso_bug_end: 7912 dev_consume_skb_any(skb); 7913 7914 return NETDEV_TX_OK; 7915} 7916 7917/* hard_start_xmit for all devices */ 7918static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 7919{ 7920 struct tg3 *tp = netdev_priv(dev); 7921 u32 len, entry, base_flags, mss, vlan = 0; 7922 u32 budget; 7923 int i = -1, would_hit_hwbug; 7924 dma_addr_t mapping; 7925 struct tg3_napi *tnapi; 7926 struct netdev_queue *txq; 7927 unsigned int last; 7928 struct iphdr *iph = NULL; 7929 struct tcphdr *tcph = NULL; 7930 __sum16 tcp_csum = 0, ip_csum = 0; 7931 __be16 ip_tot_len = 0; 7932 7933 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 7934 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 7935 if (tg3_flag(tp, ENABLE_TSS)) 7936 tnapi++; 7937 7938 budget = tg3_tx_avail(tnapi); 7939 7940 /* We are running in BH disabled context with netif_tx_lock 7941 * and TX reclaim runs via tp->napi.poll inside of a software 7942 * interrupt. Furthermore, IRQ processing runs lockless so we have 7943 * no IRQ context deadlocks to worry about either. Rejoice! 7944 */ 7945 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 7946 if (!netif_tx_queue_stopped(txq)) { 7947 netif_tx_stop_queue(txq); 7948 7949 /* This is a hard error, log it. */ 7950 netdev_err(dev, 7951 "BUG! Tx Ring full when queue awake!\n"); 7952 } 7953 return NETDEV_TX_BUSY; 7954 } 7955 7956 entry = tnapi->tx_prod; 7957 base_flags = 0; 7958 7959 mss = skb_shinfo(skb)->gso_size; 7960 if (mss) { 7961 u32 tcp_opt_len, hdr_len; 7962 7963 if (skb_cow_head(skb, 0)) 7964 goto drop; 7965 7966 iph = ip_hdr(skb); 7967 tcp_opt_len = tcp_optlen(skb); 7968 7969 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 7970 7971 /* HW/FW can not correctly segment packets that have been 7972 * vlan encapsulated. 7973 */ 7974 if (skb->protocol == htons(ETH_P_8021Q) || 7975 skb->protocol == htons(ETH_P_8021AD)) { 7976 if (tg3_tso_bug_gso_check(tnapi, skb)) 7977 return tg3_tso_bug(tp, tnapi, txq, skb); 7978 goto drop; 7979 } 7980 7981 if (!skb_is_gso_v6(skb)) { 7982 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7983 tg3_flag(tp, TSO_BUG)) { 7984 if (tg3_tso_bug_gso_check(tnapi, skb)) 7985 return tg3_tso_bug(tp, tnapi, txq, skb); 7986 goto drop; 7987 } 7988 ip_csum = iph->check; 7989 ip_tot_len = iph->tot_len; 7990 iph->check = 0; 7991 iph->tot_len = htons(mss + hdr_len); 7992 } 7993 7994 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 7995 TXD_FLAG_CPU_POST_DMA); 7996 7997 tcph = tcp_hdr(skb); 7998 tcp_csum = tcph->check; 7999 8000 if (tg3_flag(tp, HW_TSO_1) || 8001 tg3_flag(tp, HW_TSO_2) || 8002 tg3_flag(tp, HW_TSO_3)) { 8003 tcph->check = 0; 8004 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 8005 } else { 8006 tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 8007 0, IPPROTO_TCP, 0); 8008 } 8009 8010 if (tg3_flag(tp, HW_TSO_3)) { 8011 mss |= (hdr_len & 0xc) << 12; 8012 if (hdr_len & 0x10) 8013 base_flags |= 0x00000010; 8014 base_flags |= (hdr_len & 0x3e0) << 5; 8015 } else if (tg3_flag(tp, HW_TSO_2)) 8016 mss |= hdr_len << 9; 8017 else if (tg3_flag(tp, HW_TSO_1) || 8018 tg3_asic_rev(tp) == ASIC_REV_5705) { 8019 if (tcp_opt_len || iph->ihl > 5) { 8020 int tsflags; 8021 8022 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8023 mss |= (tsflags << 11); 8024 } 8025 } else { 8026 if (tcp_opt_len || iph->ihl > 5) { 8027 int tsflags; 8028 8029 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8030 base_flags |= tsflags << 12; 8031 } 8032 } 8033 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { 8034 /* HW/FW can not correctly checksum packets that have been 8035 * vlan encapsulated. 8036 */ 8037 if (skb->protocol == htons(ETH_P_8021Q) || 8038 skb->protocol == htons(ETH_P_8021AD)) { 8039 if (skb_checksum_help(skb)) 8040 goto drop; 8041 } else { 8042 base_flags |= TXD_FLAG_TCPUDP_CSUM; 8043 } 8044 } 8045 8046 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 8047 !mss && skb->len > VLAN_ETH_FRAME_LEN) 8048 base_flags |= TXD_FLAG_JMB_PKT; 8049 8050 if (skb_vlan_tag_present(skb)) { 8051 base_flags |= TXD_FLAG_VLAN; 8052 vlan = skb_vlan_tag_get(skb); 8053 } 8054 8055 if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && 8056 tg3_flag(tp, TX_TSTAMP_EN)) { 8057 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 8058 base_flags |= TXD_FLAG_HWTSTAMP; 8059 } 8060 8061 len = skb_headlen(skb); 8062 8063 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 8064 if (pci_dma_mapping_error(tp->pdev, mapping)) 8065 goto drop; 8066 8067 8068 tnapi->tx_buffers[entry].skb = skb; 8069 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 8070 8071 would_hit_hwbug = 0; 8072 8073 if (tg3_flag(tp, 5701_DMA_BUG)) 8074 would_hit_hwbug = 1; 8075 8076 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 8077 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 8078 mss, vlan)) { 8079 would_hit_hwbug = 1; 8080 } else if (skb_shinfo(skb)->nr_frags > 0) { 8081 u32 tmp_mss = mss; 8082 8083 if (!tg3_flag(tp, HW_TSO_1) && 8084 !tg3_flag(tp, HW_TSO_2) && 8085 !tg3_flag(tp, HW_TSO_3)) 8086 tmp_mss = 0; 8087 8088 /* Now loop through additional data 8089 * fragments, and queue them. 8090 */ 8091 last = skb_shinfo(skb)->nr_frags - 1; 8092 for (i = 0; i <= last; i++) { 8093 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 8094 8095 len = skb_frag_size(frag); 8096 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 8097 len, DMA_TO_DEVICE); 8098 8099 tnapi->tx_buffers[entry].skb = NULL; 8100 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 8101 mapping); 8102 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8103 goto dma_error; 8104 8105 if (!budget || 8106 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 8107 len, base_flags | 8108 ((i == last) ? TXD_FLAG_END : 0), 8109 tmp_mss, vlan)) { 8110 would_hit_hwbug = 1; 8111 break; 8112 } 8113 } 8114 } 8115 8116 if (would_hit_hwbug) { 8117 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 8118 8119 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) { 8120 /* If it's a TSO packet, do GSO instead of 8121 * allocating and copying to a large linear SKB 8122 */ 8123 if (ip_tot_len) { 8124 iph->check = ip_csum; 8125 iph->tot_len = ip_tot_len; 8126 } 8127 tcph->check = tcp_csum; 8128 return tg3_tso_bug(tp, tnapi, txq, skb); 8129 } 8130 8131 /* If the workaround fails due to memory/mapping 8132 * failure, silently drop this packet. 8133 */ 8134 entry = tnapi->tx_prod; 8135 budget = tg3_tx_avail(tnapi); 8136 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 8137 base_flags, mss, vlan)) 8138 goto drop_nofree; 8139 } 8140 8141 skb_tx_timestamp(skb); 8142 netdev_tx_sent_queue(txq, skb->len); 8143 8144 /* Sync BD data before updating mailbox */ 8145 wmb(); 8146 8147 tnapi->tx_prod = entry; 8148 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 8149 netif_tx_stop_queue(txq); 8150 8151 /* netif_tx_stop_queue() must be done before checking 8152 * checking tx index in tg3_tx_avail() below, because in 8153 * tg3_tx(), we update tx index before checking for 8154 * netif_tx_queue_stopped(). 8155 */ 8156 smp_mb(); 8157 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 8158 netif_tx_wake_queue(txq); 8159 } 8160 8161 if (!netdev_xmit_more() || netif_xmit_stopped(txq)) { 8162 /* Packets are ready, update Tx producer idx on card. */ 8163 tw32_tx_mbox(tnapi->prodmbox, entry); 8164 } 8165 8166 return NETDEV_TX_OK; 8167 8168dma_error: 8169 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 8170 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 8171drop: 8172 dev_kfree_skb_any(skb); 8173drop_nofree: 8174 tnapi->tx_dropped++; 8175 return NETDEV_TX_OK; 8176} 8177 8178static void tg3_mac_loopback(struct tg3 *tp, bool enable) 8179{ 8180 if (enable) { 8181 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 8182 MAC_MODE_PORT_MODE_MASK); 8183 8184 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 8185 8186 if (!tg3_flag(tp, 5705_PLUS)) 8187 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 8188 8189 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 8190 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 8191 else 8192 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 8193 } else { 8194 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 8195 8196 if (tg3_flag(tp, 5705_PLUS) || 8197 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 8198 tg3_asic_rev(tp) == ASIC_REV_5700) 8199 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 8200 } 8201 8202 tw32(MAC_MODE, tp->mac_mode); 8203 udelay(40); 8204} 8205 8206static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 8207{ 8208 u32 val, bmcr, mac_mode, ptest = 0; 8209 8210 tg3_phy_toggle_apd(tp, false); 8211 tg3_phy_toggle_automdix(tp, false); 8212 8213 if (extlpbk && tg3_phy_set_extloopbk(tp)) 8214 return -EIO; 8215 8216 bmcr = BMCR_FULLDPLX; 8217 switch (speed) { 8218 case SPEED_10: 8219 break; 8220 case SPEED_100: 8221 bmcr |= BMCR_SPEED100; 8222 break; 8223 case SPEED_1000: 8224 default: 8225 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 8226 speed = SPEED_100; 8227 bmcr |= BMCR_SPEED100; 8228 } else { 8229 speed = SPEED_1000; 8230 bmcr |= BMCR_SPEED1000; 8231 } 8232 } 8233 8234 if (extlpbk) { 8235 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 8236 tg3_readphy(tp, MII_CTRL1000, &val); 8237 val |= CTL1000_AS_MASTER | 8238 CTL1000_ENABLE_MASTER; 8239 tg3_writephy(tp, MII_CTRL1000, val); 8240 } else { 8241 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 8242 MII_TG3_FET_PTEST_TRIM_2; 8243 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 8244 } 8245 } else 8246 bmcr |= BMCR_LOOPBACK; 8247 8248 tg3_writephy(tp, MII_BMCR, bmcr); 8249 8250 /* The write needs to be flushed for the FETs */ 8251 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 8252 tg3_readphy(tp, MII_BMCR, &bmcr); 8253 8254 udelay(40); 8255 8256 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 8257 tg3_asic_rev(tp) == ASIC_REV_5785) { 8258 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 8259 MII_TG3_FET_PTEST_FRC_TX_LINK | 8260 MII_TG3_FET_PTEST_FRC_TX_LOCK); 8261 8262 /* The write needs to be flushed for the AC131 */ 8263 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 8264 } 8265 8266 /* Reset to prevent losing 1st rx packet intermittently */ 8267 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 8268 tg3_flag(tp, 5780_CLASS)) { 8269 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8270 udelay(10); 8271 tw32_f(MAC_RX_MODE, tp->rx_mode); 8272 } 8273 8274 mac_mode = tp->mac_mode & 8275 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 8276 if (speed == SPEED_1000) 8277 mac_mode |= MAC_MODE_PORT_MODE_GMII; 8278 else 8279 mac_mode |= MAC_MODE_PORT_MODE_MII; 8280 8281 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 8282 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 8283 8284 if (masked_phy_id == TG3_PHY_ID_BCM5401) 8285 mac_mode &= ~MAC_MODE_LINK_POLARITY; 8286 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 8287 mac_mode |= MAC_MODE_LINK_POLARITY; 8288 8289 tg3_writephy(tp, MII_TG3_EXT_CTRL, 8290 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 8291 } 8292 8293 tw32(MAC_MODE, mac_mode); 8294 udelay(40); 8295 8296 return 0; 8297} 8298 8299static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 8300{ 8301 struct tg3 *tp = netdev_priv(dev); 8302 8303 if (features & NETIF_F_LOOPBACK) { 8304 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 8305 return; 8306 8307 spin_lock_bh(&tp->lock); 8308 tg3_mac_loopback(tp, true); 8309 netif_carrier_on(tp->dev); 8310 spin_unlock_bh(&tp->lock); 8311 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 8312 } else { 8313 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 8314 return; 8315 8316 spin_lock_bh(&tp->lock); 8317 tg3_mac_loopback(tp, false); 8318 /* Force link status check */ 8319 tg3_setup_phy(tp, true); 8320 spin_unlock_bh(&tp->lock); 8321 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 8322 } 8323} 8324 8325static netdev_features_t tg3_fix_features(struct net_device *dev, 8326 netdev_features_t features) 8327{ 8328 struct tg3 *tp = netdev_priv(dev); 8329 8330 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 8331 features &= ~NETIF_F_ALL_TSO; 8332 8333 return features; 8334} 8335 8336static int tg3_set_features(struct net_device *dev, netdev_features_t features) 8337{ 8338 netdev_features_t changed = dev->features ^ features; 8339 8340 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 8341 tg3_set_loopback(dev, features); 8342 8343 return 0; 8344} 8345 8346static void tg3_rx_prodring_free(struct tg3 *tp, 8347 struct tg3_rx_prodring_set *tpr) 8348{ 8349 int i; 8350 8351 if (tpr != &tp->napi[0].prodring) { 8352 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 8353 i = (i + 1) & tp->rx_std_ring_mask) 8354 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8355 tp->rx_pkt_map_sz); 8356 8357 if (tg3_flag(tp, JUMBO_CAPABLE)) { 8358 for (i = tpr->rx_jmb_cons_idx; 8359 i != tpr->rx_jmb_prod_idx; 8360 i = (i + 1) & tp->rx_jmb_ring_mask) { 8361 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8362 TG3_RX_JMB_MAP_SZ); 8363 } 8364 } 8365 8366 return; 8367 } 8368 8369 for (i = 0; i <= tp->rx_std_ring_mask; i++) 8370 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8371 tp->rx_pkt_map_sz); 8372 8373 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8374 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 8375 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8376 TG3_RX_JMB_MAP_SZ); 8377 } 8378} 8379 8380/* Initialize rx rings for packet processing. 8381 * 8382 * The chip has been shut down and the driver detached from 8383 * the networking, so no interrupts or new tx packets will 8384 * end up in the driver. tp->{tx,}lock are held and thus 8385 * we may not sleep. 8386 */ 8387static int tg3_rx_prodring_alloc(struct tg3 *tp, 8388 struct tg3_rx_prodring_set *tpr) 8389{ 8390 u32 i, rx_pkt_dma_sz; 8391 8392 tpr->rx_std_cons_idx = 0; 8393 tpr->rx_std_prod_idx = 0; 8394 tpr->rx_jmb_cons_idx = 0; 8395 tpr->rx_jmb_prod_idx = 0; 8396 8397 if (tpr != &tp->napi[0].prodring) { 8398 memset(&tpr->rx_std_buffers[0], 0, 8399 TG3_RX_STD_BUFF_RING_SIZE(tp)); 8400 if (tpr->rx_jmb_buffers) 8401 memset(&tpr->rx_jmb_buffers[0], 0, 8402 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 8403 goto done; 8404 } 8405 8406 /* Zero out all descriptors. */ 8407 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 8408 8409 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 8410 if (tg3_flag(tp, 5780_CLASS) && 8411 tp->dev->mtu > ETH_DATA_LEN) 8412 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 8413 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 8414 8415 /* Initialize invariants of the rings, we only set this 8416 * stuff once. This works because the card does not 8417 * write into the rx buffer posting rings. 8418 */ 8419 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 8420 struct tg3_rx_buffer_desc *rxd; 8421 8422 rxd = &tpr->rx_std[i]; 8423 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 8424 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 8425 rxd->opaque = (RXD_OPAQUE_RING_STD | 8426 (i << RXD_OPAQUE_INDEX_SHIFT)); 8427 } 8428 8429 /* Now allocate fresh SKBs for each rx ring. */ 8430 for (i = 0; i < tp->rx_pending; i++) { 8431 unsigned int frag_size; 8432 8433 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 8434 &frag_size) < 0) { 8435 netdev_warn(tp->dev, 8436 "Using a smaller RX standard ring. Only " 8437 "%d out of %d buffers were allocated " 8438 "successfully\n", i, tp->rx_pending); 8439 if (i == 0) 8440 goto initfail; 8441 tp->rx_pending = i; 8442 break; 8443 } 8444 } 8445 8446 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8447 goto done; 8448 8449 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 8450 8451 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 8452 goto done; 8453 8454 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 8455 struct tg3_rx_buffer_desc *rxd; 8456 8457 rxd = &tpr->rx_jmb[i].std; 8458 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 8459 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 8460 RXD_FLAG_JUMBO; 8461 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 8462 (i << RXD_OPAQUE_INDEX_SHIFT)); 8463 } 8464 8465 for (i = 0; i < tp->rx_jumbo_pending; i++) { 8466 unsigned int frag_size; 8467 8468 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 8469 &frag_size) < 0) { 8470 netdev_warn(tp->dev, 8471 "Using a smaller RX jumbo ring. Only %d " 8472 "out of %d buffers were allocated " 8473 "successfully\n", i, tp->rx_jumbo_pending); 8474 if (i == 0) 8475 goto initfail; 8476 tp->rx_jumbo_pending = i; 8477 break; 8478 } 8479 } 8480 8481done: 8482 return 0; 8483 8484initfail: 8485 tg3_rx_prodring_free(tp, tpr); 8486 return -ENOMEM; 8487} 8488 8489static void tg3_rx_prodring_fini(struct tg3 *tp, 8490 struct tg3_rx_prodring_set *tpr) 8491{ 8492 kfree(tpr->rx_std_buffers); 8493 tpr->rx_std_buffers = NULL; 8494 kfree(tpr->rx_jmb_buffers); 8495 tpr->rx_jmb_buffers = NULL; 8496 if (tpr->rx_std) { 8497 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 8498 tpr->rx_std, tpr->rx_std_mapping); 8499 tpr->rx_std = NULL; 8500 } 8501 if (tpr->rx_jmb) { 8502 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 8503 tpr->rx_jmb, tpr->rx_jmb_mapping); 8504 tpr->rx_jmb = NULL; 8505 } 8506} 8507 8508static int tg3_rx_prodring_init(struct tg3 *tp, 8509 struct tg3_rx_prodring_set *tpr) 8510{ 8511 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 8512 GFP_KERNEL); 8513 if (!tpr->rx_std_buffers) 8514 return -ENOMEM; 8515 8516 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 8517 TG3_RX_STD_RING_BYTES(tp), 8518 &tpr->rx_std_mapping, 8519 GFP_KERNEL); 8520 if (!tpr->rx_std) 8521 goto err_out; 8522 8523 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8524 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 8525 GFP_KERNEL); 8526 if (!tpr->rx_jmb_buffers) 8527 goto err_out; 8528 8529 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 8530 TG3_RX_JMB_RING_BYTES(tp), 8531 &tpr->rx_jmb_mapping, 8532 GFP_KERNEL); 8533 if (!tpr->rx_jmb) 8534 goto err_out; 8535 } 8536 8537 return 0; 8538 8539err_out: 8540 tg3_rx_prodring_fini(tp, tpr); 8541 return -ENOMEM; 8542} 8543 8544/* Free up pending packets in all rx/tx rings. 8545 * 8546 * The chip has been shut down and the driver detached from 8547 * the networking, so no interrupts or new tx packets will 8548 * end up in the driver. tp->{tx,}lock is not held and we are not 8549 * in an interrupt context and thus may sleep. 8550 */ 8551static void tg3_free_rings(struct tg3 *tp) 8552{ 8553 int i, j; 8554 8555 for (j = 0; j < tp->irq_cnt; j++) { 8556 struct tg3_napi *tnapi = &tp->napi[j]; 8557 8558 tg3_rx_prodring_free(tp, &tnapi->prodring); 8559 8560 if (!tnapi->tx_buffers) 8561 continue; 8562 8563 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 8564 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 8565 8566 if (!skb) 8567 continue; 8568 8569 tg3_tx_skb_unmap(tnapi, i, 8570 skb_shinfo(skb)->nr_frags - 1); 8571 8572 dev_consume_skb_any(skb); 8573 } 8574 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 8575 } 8576} 8577 8578/* Initialize tx/rx rings for packet processing. 8579 * 8580 * The chip has been shut down and the driver detached from 8581 * the networking, so no interrupts or new tx packets will 8582 * end up in the driver. tp->{tx,}lock are held and thus 8583 * we may not sleep. 8584 */ 8585static int tg3_init_rings(struct tg3 *tp) 8586{ 8587 int i; 8588 8589 /* Free up all the SKBs. */ 8590 tg3_free_rings(tp); 8591 8592 for (i = 0; i < tp->irq_cnt; i++) { 8593 struct tg3_napi *tnapi = &tp->napi[i]; 8594 8595 tnapi->last_tag = 0; 8596 tnapi->last_irq_tag = 0; 8597 tnapi->hw_status->status = 0; 8598 tnapi->hw_status->status_tag = 0; 8599 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8600 8601 tnapi->tx_prod = 0; 8602 tnapi->tx_cons = 0; 8603 if (tnapi->tx_ring) 8604 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 8605 8606 tnapi->rx_rcb_ptr = 0; 8607 if (tnapi->rx_rcb) 8608 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 8609 8610 if (tnapi->prodring.rx_std && 8611 tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 8612 tg3_free_rings(tp); 8613 return -ENOMEM; 8614 } 8615 } 8616 8617 return 0; 8618} 8619 8620static void tg3_mem_tx_release(struct tg3 *tp) 8621{ 8622 int i; 8623 8624 for (i = 0; i < tp->irq_max; i++) { 8625 struct tg3_napi *tnapi = &tp->napi[i]; 8626 8627 if (tnapi->tx_ring) { 8628 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 8629 tnapi->tx_ring, tnapi->tx_desc_mapping); 8630 tnapi->tx_ring = NULL; 8631 } 8632 8633 kfree(tnapi->tx_buffers); 8634 tnapi->tx_buffers = NULL; 8635 } 8636} 8637 8638static int tg3_mem_tx_acquire(struct tg3 *tp) 8639{ 8640 int i; 8641 struct tg3_napi *tnapi = &tp->napi[0]; 8642 8643 /* If multivector TSS is enabled, vector 0 does not handle 8644 * tx interrupts. Don't allocate any resources for it. 8645 */ 8646 if (tg3_flag(tp, ENABLE_TSS)) 8647 tnapi++; 8648 8649 for (i = 0; i < tp->txq_cnt; i++, tnapi++) { 8650 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE, 8651 sizeof(struct tg3_tx_ring_info), 8652 GFP_KERNEL); 8653 if (!tnapi->tx_buffers) 8654 goto err_out; 8655 8656 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 8657 TG3_TX_RING_BYTES, 8658 &tnapi->tx_desc_mapping, 8659 GFP_KERNEL); 8660 if (!tnapi->tx_ring) 8661 goto err_out; 8662 } 8663 8664 return 0; 8665 8666err_out: 8667 tg3_mem_tx_release(tp); 8668 return -ENOMEM; 8669} 8670 8671static void tg3_mem_rx_release(struct tg3 *tp) 8672{ 8673 int i; 8674 8675 for (i = 0; i < tp->irq_max; i++) { 8676 struct tg3_napi *tnapi = &tp->napi[i]; 8677 8678 tg3_rx_prodring_fini(tp, &tnapi->prodring); 8679 8680 if (!tnapi->rx_rcb) 8681 continue; 8682 8683 dma_free_coherent(&tp->pdev->dev, 8684 TG3_RX_RCB_RING_BYTES(tp), 8685 tnapi->rx_rcb, 8686 tnapi->rx_rcb_mapping); 8687 tnapi->rx_rcb = NULL; 8688 } 8689} 8690 8691static int tg3_mem_rx_acquire(struct tg3 *tp) 8692{ 8693 unsigned int i, limit; 8694 8695 limit = tp->rxq_cnt; 8696 8697 /* If RSS is enabled, we need a (dummy) producer ring 8698 * set on vector zero. This is the true hw prodring. 8699 */ 8700 if (tg3_flag(tp, ENABLE_RSS)) 8701 limit++; 8702 8703 for (i = 0; i < limit; i++) { 8704 struct tg3_napi *tnapi = &tp->napi[i]; 8705 8706 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 8707 goto err_out; 8708 8709 /* If multivector RSS is enabled, vector 0 8710 * does not handle rx or tx interrupts. 8711 * Don't allocate any resources for it. 8712 */ 8713 if (!i && tg3_flag(tp, ENABLE_RSS)) 8714 continue; 8715 8716 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 8717 TG3_RX_RCB_RING_BYTES(tp), 8718 &tnapi->rx_rcb_mapping, 8719 GFP_KERNEL); 8720 if (!tnapi->rx_rcb) 8721 goto err_out; 8722 } 8723 8724 return 0; 8725 8726err_out: 8727 tg3_mem_rx_release(tp); 8728 return -ENOMEM; 8729} 8730 8731/* 8732 * Must not be invoked with interrupt sources disabled and 8733 * the hardware shutdown down. 8734 */ 8735static void tg3_free_consistent(struct tg3 *tp) 8736{ 8737 int i; 8738 8739 for (i = 0; i < tp->irq_cnt; i++) { 8740 struct tg3_napi *tnapi = &tp->napi[i]; 8741 8742 if (tnapi->hw_status) { 8743 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 8744 tnapi->hw_status, 8745 tnapi->status_mapping); 8746 tnapi->hw_status = NULL; 8747 } 8748 } 8749 8750 tg3_mem_rx_release(tp); 8751 tg3_mem_tx_release(tp); 8752 8753 /* tp->hw_stats can be referenced safely: 8754 * 1. under rtnl_lock 8755 * 2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set. 8756 */ 8757 if (tp->hw_stats) { 8758 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8759 tp->hw_stats, tp->stats_mapping); 8760 tp->hw_stats = NULL; 8761 } 8762} 8763 8764/* 8765 * Must not be invoked with interrupt sources disabled and 8766 * the hardware shutdown down. Can sleep. 8767 */ 8768static int tg3_alloc_consistent(struct tg3 *tp) 8769{ 8770 int i; 8771 8772 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 8773 sizeof(struct tg3_hw_stats), 8774 &tp->stats_mapping, GFP_KERNEL); 8775 if (!tp->hw_stats) 8776 goto err_out; 8777 8778 for (i = 0; i < tp->irq_cnt; i++) { 8779 struct tg3_napi *tnapi = &tp->napi[i]; 8780 struct tg3_hw_status *sblk; 8781 8782 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 8783 TG3_HW_STATUS_SIZE, 8784 &tnapi->status_mapping, 8785 GFP_KERNEL); 8786 if (!tnapi->hw_status) 8787 goto err_out; 8788 8789 sblk = tnapi->hw_status; 8790 8791 if (tg3_flag(tp, ENABLE_RSS)) { 8792 u16 *prodptr = NULL; 8793 8794 /* 8795 * When RSS is enabled, the status block format changes 8796 * slightly. The "rx_jumbo_consumer", "reserved", 8797 * and "rx_mini_consumer" members get mapped to the 8798 * other three rx return ring producer indexes. 8799 */ 8800 switch (i) { 8801 case 1: 8802 prodptr = &sblk->idx[0].rx_producer; 8803 break; 8804 case 2: 8805 prodptr = &sblk->rx_jumbo_consumer; 8806 break; 8807 case 3: 8808 prodptr = &sblk->reserved; 8809 break; 8810 case 4: 8811 prodptr = &sblk->rx_mini_consumer; 8812 break; 8813 } 8814 tnapi->rx_rcb_prod_idx = prodptr; 8815 } else { 8816 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 8817 } 8818 } 8819 8820 if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp)) 8821 goto err_out; 8822 8823 return 0; 8824 8825err_out: 8826 tg3_free_consistent(tp); 8827 return -ENOMEM; 8828} 8829 8830#define MAX_WAIT_CNT 1000 8831 8832/* To stop a block, clear the enable bit and poll till it 8833 * clears. tp->lock is held. 8834 */ 8835static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent) 8836{ 8837 unsigned int i; 8838 u32 val; 8839 8840 if (tg3_flag(tp, 5705_PLUS)) { 8841 switch (ofs) { 8842 case RCVLSC_MODE: 8843 case DMAC_MODE: 8844 case MBFREE_MODE: 8845 case BUFMGR_MODE: 8846 case MEMARB_MODE: 8847 /* We can't enable/disable these bits of the 8848 * 5705/5750, just say success. 8849 */ 8850 return 0; 8851 8852 default: 8853 break; 8854 } 8855 } 8856 8857 val = tr32(ofs); 8858 val &= ~enable_bit; 8859 tw32_f(ofs, val); 8860 8861 for (i = 0; i < MAX_WAIT_CNT; i++) { 8862 if (pci_channel_offline(tp->pdev)) { 8863 dev_err(&tp->pdev->dev, 8864 "tg3_stop_block device offline, " 8865 "ofs=%lx enable_bit=%x\n", 8866 ofs, enable_bit); 8867 return -ENODEV; 8868 } 8869 8870 udelay(100); 8871 val = tr32(ofs); 8872 if ((val & enable_bit) == 0) 8873 break; 8874 } 8875 8876 if (i == MAX_WAIT_CNT && !silent) { 8877 dev_err(&tp->pdev->dev, 8878 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 8879 ofs, enable_bit); 8880 return -ENODEV; 8881 } 8882 8883 return 0; 8884} 8885 8886/* tp->lock is held. */ 8887static int tg3_abort_hw(struct tg3 *tp, bool silent) 8888{ 8889 int i, err; 8890 8891 tg3_disable_ints(tp); 8892 8893 if (pci_channel_offline(tp->pdev)) { 8894 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE); 8895 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8896 err = -ENODEV; 8897 goto err_no_dev; 8898 } 8899 8900 tp->rx_mode &= ~RX_MODE_ENABLE; 8901 tw32_f(MAC_RX_MODE, tp->rx_mode); 8902 udelay(10); 8903 8904 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 8905 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 8906 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 8907 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 8908 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 8909 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 8910 8911 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 8912 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 8913 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 8914 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 8915 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 8916 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 8917 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 8918 8919 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8920 tw32_f(MAC_MODE, tp->mac_mode); 8921 udelay(40); 8922 8923 tp->tx_mode &= ~TX_MODE_ENABLE; 8924 tw32_f(MAC_TX_MODE, tp->tx_mode); 8925 8926 for (i = 0; i < MAX_WAIT_CNT; i++) { 8927 udelay(100); 8928 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 8929 break; 8930 } 8931 if (i >= MAX_WAIT_CNT) { 8932 dev_err(&tp->pdev->dev, 8933 "%s timed out, TX_MODE_ENABLE will not clear " 8934 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 8935 err |= -ENODEV; 8936 } 8937 8938 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 8939 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 8940 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 8941 8942 tw32(FTQ_RESET, 0xffffffff); 8943 tw32(FTQ_RESET, 0x00000000); 8944 8945 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 8946 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 8947 8948err_no_dev: 8949 for (i = 0; i < tp->irq_cnt; i++) { 8950 struct tg3_napi *tnapi = &tp->napi[i]; 8951 if (tnapi->hw_status) 8952 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8953 } 8954 8955 return err; 8956} 8957 8958/* Save PCI command register before chip reset */ 8959static void tg3_save_pci_state(struct tg3 *tp) 8960{ 8961 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 8962} 8963 8964/* Restore PCI state after chip reset */ 8965static void tg3_restore_pci_state(struct tg3 *tp) 8966{ 8967 u32 val; 8968 8969 /* Re-enable indirect register accesses. */ 8970 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 8971 tp->misc_host_ctrl); 8972 8973 /* Set MAX PCI retry to zero. */ 8974 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 8975 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 8976 tg3_flag(tp, PCIX_MODE)) 8977 val |= PCISTATE_RETRY_SAME_DMA; 8978 /* Allow reads and writes to the APE register and memory space. */ 8979 if (tg3_flag(tp, ENABLE_APE)) 8980 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8981 PCISTATE_ALLOW_APE_SHMEM_WR | 8982 PCISTATE_ALLOW_APE_PSPACE_WR; 8983 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 8984 8985 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 8986 8987 if (!tg3_flag(tp, PCI_EXPRESS)) { 8988 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 8989 tp->pci_cacheline_sz); 8990 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 8991 tp->pci_lat_timer); 8992 } 8993 8994 /* Make sure PCI-X relaxed ordering bit is clear. */ 8995 if (tg3_flag(tp, PCIX_MODE)) { 8996 u16 pcix_cmd; 8997 8998 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8999 &pcix_cmd); 9000 pcix_cmd &= ~PCI_X_CMD_ERO; 9001 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9002 pcix_cmd); 9003 } 9004 9005 if (tg3_flag(tp, 5780_CLASS)) { 9006 9007 /* Chip reset on 5780 will reset MSI enable bit, 9008 * so need to restore it. 9009 */ 9010 if (tg3_flag(tp, USING_MSI)) { 9011 u16 ctrl; 9012 9013 pci_read_config_word(tp->pdev, 9014 tp->msi_cap + PCI_MSI_FLAGS, 9015 &ctrl); 9016 pci_write_config_word(tp->pdev, 9017 tp->msi_cap + PCI_MSI_FLAGS, 9018 ctrl | PCI_MSI_FLAGS_ENABLE); 9019 val = tr32(MSGINT_MODE); 9020 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 9021 } 9022 } 9023} 9024 9025static void tg3_override_clk(struct tg3 *tp) 9026{ 9027 u32 val; 9028 9029 switch (tg3_asic_rev(tp)) { 9030 case ASIC_REV_5717: 9031 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9032 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9033 TG3_CPMU_MAC_ORIDE_ENABLE); 9034 break; 9035 9036 case ASIC_REV_5719: 9037 case ASIC_REV_5720: 9038 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9039 break; 9040 9041 default: 9042 return; 9043 } 9044} 9045 9046static void tg3_restore_clk(struct tg3 *tp) 9047{ 9048 u32 val; 9049 9050 switch (tg3_asic_rev(tp)) { 9051 case ASIC_REV_5717: 9052 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9053 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, 9054 val & ~TG3_CPMU_MAC_ORIDE_ENABLE); 9055 break; 9056 9057 case ASIC_REV_5719: 9058 case ASIC_REV_5720: 9059 val = tr32(TG3_CPMU_CLCK_ORIDE); 9060 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9061 break; 9062 9063 default: 9064 return; 9065 } 9066} 9067 9068/* tp->lock is held. */ 9069static int tg3_chip_reset(struct tg3 *tp) 9070 __releases(tp->lock) 9071 __acquires(tp->lock) 9072{ 9073 u32 val; 9074 void (*write_op)(struct tg3 *, u32, u32); 9075 int i, err; 9076 9077 if (!pci_device_is_present(tp->pdev)) 9078 return -ENODEV; 9079 9080 tg3_nvram_lock(tp); 9081 9082 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 9083 9084 /* No matching tg3_nvram_unlock() after this because 9085 * chip reset below will undo the nvram lock. 9086 */ 9087 tp->nvram_lock_cnt = 0; 9088 9089 /* GRC_MISC_CFG core clock reset will clear the memory 9090 * enable bit in PCI register 4 and the MSI enable bit 9091 * on some chips, so we save relevant registers here. 9092 */ 9093 tg3_save_pci_state(tp); 9094 9095 if (tg3_asic_rev(tp) == ASIC_REV_5752 || 9096 tg3_flag(tp, 5755_PLUS)) 9097 tw32(GRC_FASTBOOT_PC, 0); 9098 9099 /* 9100 * We must avoid the readl() that normally takes place. 9101 * It locks machines, causes machine checks, and other 9102 * fun things. So, temporarily disable the 5701 9103 * hardware workaround, while we do the reset. 9104 */ 9105 write_op = tp->write32; 9106 if (write_op == tg3_write_flush_reg32) 9107 tp->write32 = tg3_write32; 9108 9109 /* Prevent the irq handler from reading or writing PCI registers 9110 * during chip reset when the memory enable bit in the PCI command 9111 * register may be cleared. The chip does not generate interrupt 9112 * at this time, but the irq handler may still be called due to irq 9113 * sharing or irqpoll. 9114 */ 9115 tg3_flag_set(tp, CHIP_RESETTING); 9116 for (i = 0; i < tp->irq_cnt; i++) { 9117 struct tg3_napi *tnapi = &tp->napi[i]; 9118 if (tnapi->hw_status) { 9119 tnapi->hw_status->status = 0; 9120 tnapi->hw_status->status_tag = 0; 9121 } 9122 tnapi->last_tag = 0; 9123 tnapi->last_irq_tag = 0; 9124 } 9125 smp_mb(); 9126 9127 tg3_full_unlock(tp); 9128 9129 for (i = 0; i < tp->irq_cnt; i++) 9130 synchronize_irq(tp->napi[i].irq_vec); 9131 9132 tg3_full_lock(tp, 0); 9133 9134 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9135 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9136 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9137 } 9138 9139 /* do the reset */ 9140 val = GRC_MISC_CFG_CORECLK_RESET; 9141 9142 if (tg3_flag(tp, PCI_EXPRESS)) { 9143 /* Force PCIe 1.0a mode */ 9144 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 9145 !tg3_flag(tp, 57765_PLUS) && 9146 tr32(TG3_PCIE_PHY_TSTCTL) == 9147 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 9148 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 9149 9150 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) { 9151 tw32(GRC_MISC_CFG, (1 << 29)); 9152 val |= (1 << 29); 9153 } 9154 } 9155 9156 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 9157 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 9158 tw32(GRC_VCPU_EXT_CTRL, 9159 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 9160 } 9161 9162 /* Set the clock to the highest frequency to avoid timeouts. With link 9163 * aware mode, the clock speed could be slow and bootcode does not 9164 * complete within the expected time. Override the clock to allow the 9165 * bootcode to finish sooner and then restore it. 9166 */ 9167 tg3_override_clk(tp); 9168 9169 /* Manage gphy power for all CPMU absent PCIe devices. */ 9170 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 9171 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 9172 9173 tw32(GRC_MISC_CFG, val); 9174 9175 /* restore 5701 hardware bug workaround write method */ 9176 tp->write32 = write_op; 9177 9178 /* Unfortunately, we have to delay before the PCI read back. 9179 * Some 575X chips even will not respond to a PCI cfg access 9180 * when the reset command is given to the chip. 9181 * 9182 * How do these hardware designers expect things to work 9183 * properly if the PCI write is posted for a long period 9184 * of time? It is always necessary to have some method by 9185 * which a register read back can occur to push the write 9186 * out which does the reset. 9187 * 9188 * For most tg3 variants the trick below was working. 9189 * Ho hum... 9190 */ 9191 udelay(120); 9192 9193 /* Flush PCI posted writes. The normal MMIO registers 9194 * are inaccessible at this time so this is the only 9195 * way to make this reliably (actually, this is no longer 9196 * the case, see above). I tried to use indirect 9197 * register read/write but this upset some 5701 variants. 9198 */ 9199 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 9200 9201 udelay(120); 9202 9203 if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) { 9204 u16 val16; 9205 9206 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) { 9207 int j; 9208 u32 cfg_val; 9209 9210 /* Wait for link training to complete. */ 9211 for (j = 0; j < 5000; j++) 9212 udelay(100); 9213 9214 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 9215 pci_write_config_dword(tp->pdev, 0xc4, 9216 cfg_val | (1 << 15)); 9217 } 9218 9219 /* Clear the "no snoop" and "relaxed ordering" bits. */ 9220 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN; 9221 /* 9222 * Older PCIe devices only support the 128 byte 9223 * MPS setting. Enforce the restriction. 9224 */ 9225 if (!tg3_flag(tp, CPMU_PRESENT)) 9226 val16 |= PCI_EXP_DEVCTL_PAYLOAD; 9227 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16); 9228 9229 /* Clear error status */ 9230 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA, 9231 PCI_EXP_DEVSTA_CED | 9232 PCI_EXP_DEVSTA_NFED | 9233 PCI_EXP_DEVSTA_FED | 9234 PCI_EXP_DEVSTA_URD); 9235 } 9236 9237 tg3_restore_pci_state(tp); 9238 9239 tg3_flag_clear(tp, CHIP_RESETTING); 9240 tg3_flag_clear(tp, ERROR_PROCESSED); 9241 9242 val = 0; 9243 if (tg3_flag(tp, 5780_CLASS)) 9244 val = tr32(MEMARB_MODE); 9245 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 9246 9247 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) { 9248 tg3_stop_fw(tp); 9249 tw32(0x5000, 0x400); 9250 } 9251 9252 if (tg3_flag(tp, IS_SSB_CORE)) { 9253 /* 9254 * BCM4785: In order to avoid repercussions from using 9255 * potentially defective internal ROM, stop the Rx RISC CPU, 9256 * which is not required. 9257 */ 9258 tg3_stop_fw(tp); 9259 tg3_halt_cpu(tp, RX_CPU_BASE); 9260 } 9261 9262 err = tg3_poll_fw(tp); 9263 if (err) 9264 return err; 9265 9266 tw32(GRC_MODE, tp->grc_mode); 9267 9268 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) { 9269 val = tr32(0xc4); 9270 9271 tw32(0xc4, val | (1 << 15)); 9272 } 9273 9274 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 9275 tg3_asic_rev(tp) == ASIC_REV_5705) { 9276 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 9277 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) 9278 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 9279 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9280 } 9281 9282 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9283 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 9284 val = tp->mac_mode; 9285 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9286 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 9287 val = tp->mac_mode; 9288 } else 9289 val = 0; 9290 9291 tw32_f(MAC_MODE, val); 9292 udelay(40); 9293 9294 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 9295 9296 tg3_mdio_start(tp); 9297 9298 if (tg3_flag(tp, PCI_EXPRESS) && 9299 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 9300 tg3_asic_rev(tp) != ASIC_REV_5785 && 9301 !tg3_flag(tp, 57765_PLUS)) { 9302 val = tr32(0x7c00); 9303 9304 tw32(0x7c00, val | (1 << 25)); 9305 } 9306 9307 tg3_restore_clk(tp); 9308 9309 /* Increase the core clock speed to fix tx timeout issue for 5762 9310 * with 100Mbps link speed. 9311 */ 9312 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 9313 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9314 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9315 TG3_CPMU_MAC_ORIDE_ENABLE); 9316 } 9317 9318 /* Reprobe ASF enable state. */ 9319 tg3_flag_clear(tp, ENABLE_ASF); 9320 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 9321 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 9322 9323 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 9324 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 9325 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 9326 u32 nic_cfg; 9327 9328 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 9329 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 9330 tg3_flag_set(tp, ENABLE_ASF); 9331 tp->last_event_jiffies = jiffies; 9332 if (tg3_flag(tp, 5750_PLUS)) 9333 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 9334 9335 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg); 9336 if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK) 9337 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 9338 if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID) 9339 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 9340 } 9341 } 9342 9343 return 0; 9344} 9345 9346static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 9347static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 9348static void __tg3_set_rx_mode(struct net_device *); 9349 9350/* tp->lock is held. */ 9351static int tg3_halt(struct tg3 *tp, int kind, bool silent) 9352{ 9353 int err, i; 9354 9355 tg3_stop_fw(tp); 9356 9357 tg3_write_sig_pre_reset(tp, kind); 9358 9359 tg3_abort_hw(tp, silent); 9360 err = tg3_chip_reset(tp); 9361 9362 __tg3_set_mac_addr(tp, false); 9363 9364 tg3_write_sig_legacy(tp, kind); 9365 tg3_write_sig_post_reset(tp, kind); 9366 9367 if (tp->hw_stats) { 9368 /* Save the stats across chip resets... */ 9369 tg3_get_nstats(tp, &tp->net_stats_prev); 9370 tg3_get_estats(tp, &tp->estats_prev); 9371 9372 /* And make sure the next sample is new data */ 9373 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 9374 9375 for (i = 0; i < TG3_IRQ_MAX_VECS; ++i) { 9376 struct tg3_napi *tnapi = &tp->napi[i]; 9377 9378 tnapi->rx_dropped = 0; 9379 tnapi->tx_dropped = 0; 9380 } 9381 } 9382 9383 return err; 9384} 9385 9386static int tg3_set_mac_addr(struct net_device *dev, void *p) 9387{ 9388 struct tg3 *tp = netdev_priv(dev); 9389 struct sockaddr *addr = p; 9390 int err = 0; 9391 bool skip_mac_1 = false; 9392 9393 if (!is_valid_ether_addr(addr->sa_data)) 9394 return -EADDRNOTAVAIL; 9395 9396 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 9397 9398 if (!netif_running(dev)) 9399 return 0; 9400 9401 if (tg3_flag(tp, ENABLE_ASF)) { 9402 u32 addr0_high, addr0_low, addr1_high, addr1_low; 9403 9404 addr0_high = tr32(MAC_ADDR_0_HIGH); 9405 addr0_low = tr32(MAC_ADDR_0_LOW); 9406 addr1_high = tr32(MAC_ADDR_1_HIGH); 9407 addr1_low = tr32(MAC_ADDR_1_LOW); 9408 9409 /* Skip MAC addr 1 if ASF is using it. */ 9410 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 9411 !(addr1_high == 0 && addr1_low == 0)) 9412 skip_mac_1 = true; 9413 } 9414 spin_lock_bh(&tp->lock); 9415 __tg3_set_mac_addr(tp, skip_mac_1); 9416 __tg3_set_rx_mode(dev); 9417 spin_unlock_bh(&tp->lock); 9418 9419 return err; 9420} 9421 9422/* tp->lock is held. */ 9423static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 9424 dma_addr_t mapping, u32 maxlen_flags, 9425 u32 nic_addr) 9426{ 9427 tg3_write_mem(tp, 9428 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 9429 ((u64) mapping >> 32)); 9430 tg3_write_mem(tp, 9431 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 9432 ((u64) mapping & 0xffffffff)); 9433 tg3_write_mem(tp, 9434 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 9435 maxlen_flags); 9436 9437 if (!tg3_flag(tp, 5705_PLUS)) 9438 tg3_write_mem(tp, 9439 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 9440 nic_addr); 9441} 9442 9443 9444static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9445{ 9446 int i = 0; 9447 9448 if (!tg3_flag(tp, ENABLE_TSS)) { 9449 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 9450 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 9451 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 9452 } else { 9453 tw32(HOSTCC_TXCOL_TICKS, 0); 9454 tw32(HOSTCC_TXMAX_FRAMES, 0); 9455 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 9456 9457 for (; i < tp->txq_cnt; i++) { 9458 u32 reg; 9459 9460 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 9461 tw32(reg, ec->tx_coalesce_usecs); 9462 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 9463 tw32(reg, ec->tx_max_coalesced_frames); 9464 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 9465 tw32(reg, ec->tx_max_coalesced_frames_irq); 9466 } 9467 } 9468 9469 for (; i < tp->irq_max - 1; i++) { 9470 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 9471 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 9472 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9473 } 9474} 9475 9476static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9477{ 9478 int i = 0; 9479 u32 limit = tp->rxq_cnt; 9480 9481 if (!tg3_flag(tp, ENABLE_RSS)) { 9482 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 9483 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 9484 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 9485 limit--; 9486 } else { 9487 tw32(HOSTCC_RXCOL_TICKS, 0); 9488 tw32(HOSTCC_RXMAX_FRAMES, 0); 9489 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 9490 } 9491 9492 for (; i < limit; i++) { 9493 u32 reg; 9494 9495 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 9496 tw32(reg, ec->rx_coalesce_usecs); 9497 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 9498 tw32(reg, ec->rx_max_coalesced_frames); 9499 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 9500 tw32(reg, ec->rx_max_coalesced_frames_irq); 9501 } 9502 9503 for (; i < tp->irq_max - 1; i++) { 9504 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 9505 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 9506 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9507 } 9508} 9509 9510static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 9511{ 9512 tg3_coal_tx_init(tp, ec); 9513 tg3_coal_rx_init(tp, ec); 9514 9515 if (!tg3_flag(tp, 5705_PLUS)) { 9516 u32 val = ec->stats_block_coalesce_usecs; 9517 9518 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 9519 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 9520 9521 if (!tp->link_up) 9522 val = 0; 9523 9524 tw32(HOSTCC_STAT_COAL_TICKS, val); 9525 } 9526} 9527 9528/* tp->lock is held. */ 9529static void tg3_tx_rcbs_disable(struct tg3 *tp) 9530{ 9531 u32 txrcb, limit; 9532 9533 /* Disable all transmit rings but the first. */ 9534 if (!tg3_flag(tp, 5705_PLUS)) 9535 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 9536 else if (tg3_flag(tp, 5717_PLUS)) 9537 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 9538 else if (tg3_flag(tp, 57765_CLASS) || 9539 tg3_asic_rev(tp) == ASIC_REV_5762) 9540 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 9541 else 9542 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9543 9544 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9545 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 9546 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 9547 BDINFO_FLAGS_DISABLED); 9548} 9549 9550/* tp->lock is held. */ 9551static void tg3_tx_rcbs_init(struct tg3 *tp) 9552{ 9553 int i = 0; 9554 u32 txrcb = NIC_SRAM_SEND_RCB; 9555 9556 if (tg3_flag(tp, ENABLE_TSS)) 9557 i++; 9558 9559 for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) { 9560 struct tg3_napi *tnapi = &tp->napi[i]; 9561 9562 if (!tnapi->tx_ring) 9563 continue; 9564 9565 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 9566 (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT), 9567 NIC_SRAM_TX_BUFFER_DESC); 9568 } 9569} 9570 9571/* tp->lock is held. */ 9572static void tg3_rx_ret_rcbs_disable(struct tg3 *tp) 9573{ 9574 u32 rxrcb, limit; 9575 9576 /* Disable all receive return rings but the first. */ 9577 if (tg3_flag(tp, 5717_PLUS)) 9578 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 9579 else if (!tg3_flag(tp, 5705_PLUS)) 9580 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 9581 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9582 tg3_asic_rev(tp) == ASIC_REV_5762 || 9583 tg3_flag(tp, 57765_CLASS)) 9584 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 9585 else 9586 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9587 9588 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9589 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 9590 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 9591 BDINFO_FLAGS_DISABLED); 9592} 9593 9594/* tp->lock is held. */ 9595static void tg3_rx_ret_rcbs_init(struct tg3 *tp) 9596{ 9597 int i = 0; 9598 u32 rxrcb = NIC_SRAM_RCV_RET_RCB; 9599 9600 if (tg3_flag(tp, ENABLE_RSS)) 9601 i++; 9602 9603 for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) { 9604 struct tg3_napi *tnapi = &tp->napi[i]; 9605 9606 if (!tnapi->rx_rcb) 9607 continue; 9608 9609 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 9610 (tp->rx_ret_ring_mask + 1) << 9611 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 9612 } 9613} 9614 9615/* tp->lock is held. */ 9616static void tg3_rings_reset(struct tg3 *tp) 9617{ 9618 int i; 9619 u32 stblk; 9620 struct tg3_napi *tnapi = &tp->napi[0]; 9621 9622 tg3_tx_rcbs_disable(tp); 9623 9624 tg3_rx_ret_rcbs_disable(tp); 9625 9626 /* Disable interrupts */ 9627 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 9628 tp->napi[0].chk_msi_cnt = 0; 9629 tp->napi[0].last_rx_cons = 0; 9630 tp->napi[0].last_tx_cons = 0; 9631 9632 /* Zero mailbox registers. */ 9633 if (tg3_flag(tp, SUPPORT_MSIX)) { 9634 for (i = 1; i < tp->irq_max; i++) { 9635 tp->napi[i].tx_prod = 0; 9636 tp->napi[i].tx_cons = 0; 9637 if (tg3_flag(tp, ENABLE_TSS)) 9638 tw32_mailbox(tp->napi[i].prodmbox, 0); 9639 tw32_rx_mbox(tp->napi[i].consmbox, 0); 9640 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 9641 tp->napi[i].chk_msi_cnt = 0; 9642 tp->napi[i].last_rx_cons = 0; 9643 tp->napi[i].last_tx_cons = 0; 9644 } 9645 if (!tg3_flag(tp, ENABLE_TSS)) 9646 tw32_mailbox(tp->napi[0].prodmbox, 0); 9647 } else { 9648 tp->napi[0].tx_prod = 0; 9649 tp->napi[0].tx_cons = 0; 9650 tw32_mailbox(tp->napi[0].prodmbox, 0); 9651 tw32_rx_mbox(tp->napi[0].consmbox, 0); 9652 } 9653 9654 /* Make sure the NIC-based send BD rings are disabled. */ 9655 if (!tg3_flag(tp, 5705_PLUS)) { 9656 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 9657 for (i = 0; i < 16; i++) 9658 tw32_tx_mbox(mbox + i * 8, 0); 9659 } 9660 9661 /* Clear status block in ram. */ 9662 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9663 9664 /* Set status block DMA address */ 9665 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9666 ((u64) tnapi->status_mapping >> 32)); 9667 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9668 ((u64) tnapi->status_mapping & 0xffffffff)); 9669 9670 stblk = HOSTCC_STATBLCK_RING1; 9671 9672 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 9673 u64 mapping = (u64)tnapi->status_mapping; 9674 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 9675 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 9676 stblk += 8; 9677 9678 /* Clear status block in ram. */ 9679 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9680 } 9681 9682 tg3_tx_rcbs_init(tp); 9683 tg3_rx_ret_rcbs_init(tp); 9684} 9685 9686static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 9687{ 9688 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 9689 9690 if (!tg3_flag(tp, 5750_PLUS) || 9691 tg3_flag(tp, 5780_CLASS) || 9692 tg3_asic_rev(tp) == ASIC_REV_5750 || 9693 tg3_asic_rev(tp) == ASIC_REV_5752 || 9694 tg3_flag(tp, 57765_PLUS)) 9695 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 9696 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9697 tg3_asic_rev(tp) == ASIC_REV_5787) 9698 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 9699 else 9700 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 9701 9702 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 9703 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 9704 9705 val = min(nic_rep_thresh, host_rep_thresh); 9706 tw32(RCVBDI_STD_THRESH, val); 9707 9708 if (tg3_flag(tp, 57765_PLUS)) 9709 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 9710 9711 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 9712 return; 9713 9714 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 9715 9716 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 9717 9718 val = min(bdcache_maxcnt / 2, host_rep_thresh); 9719 tw32(RCVBDI_JUMBO_THRESH, val); 9720 9721 if (tg3_flag(tp, 57765_PLUS)) 9722 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 9723} 9724 9725static inline u32 calc_crc(unsigned char *buf, int len) 9726{ 9727 u32 reg; 9728 u32 tmp; 9729 int j, k; 9730 9731 reg = 0xffffffff; 9732 9733 for (j = 0; j < len; j++) { 9734 reg ^= buf[j]; 9735 9736 for (k = 0; k < 8; k++) { 9737 tmp = reg & 0x01; 9738 9739 reg >>= 1; 9740 9741 if (tmp) 9742 reg ^= CRC32_POLY_LE; 9743 } 9744 } 9745 9746 return ~reg; 9747} 9748 9749static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 9750{ 9751 /* accept or reject all multicast frames */ 9752 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 9753 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 9754 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 9755 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 9756} 9757 9758static void __tg3_set_rx_mode(struct net_device *dev) 9759{ 9760 struct tg3 *tp = netdev_priv(dev); 9761 u32 rx_mode; 9762 9763 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 9764 RX_MODE_KEEP_VLAN_TAG); 9765 9766#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 9767 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 9768 * flag clear. 9769 */ 9770 if (!tg3_flag(tp, ENABLE_ASF)) 9771 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 9772#endif 9773 9774 if (dev->flags & IFF_PROMISC) { 9775 /* Promiscuous mode. */ 9776 rx_mode |= RX_MODE_PROMISC; 9777 } else if (dev->flags & IFF_ALLMULTI) { 9778 /* Accept all multicast. */ 9779 tg3_set_multi(tp, 1); 9780 } else if (netdev_mc_empty(dev)) { 9781 /* Reject all multicast. */ 9782 tg3_set_multi(tp, 0); 9783 } else { 9784 /* Accept one or more multicast(s). */ 9785 struct netdev_hw_addr *ha; 9786 u32 mc_filter[4] = { 0, }; 9787 u32 regidx; 9788 u32 bit; 9789 u32 crc; 9790 9791 netdev_for_each_mc_addr(ha, dev) { 9792 crc = calc_crc(ha->addr, ETH_ALEN); 9793 bit = ~crc & 0x7f; 9794 regidx = (bit & 0x60) >> 5; 9795 bit &= 0x1f; 9796 mc_filter[regidx] |= (1 << bit); 9797 } 9798 9799 tw32(MAC_HASH_REG_0, mc_filter[0]); 9800 tw32(MAC_HASH_REG_1, mc_filter[1]); 9801 tw32(MAC_HASH_REG_2, mc_filter[2]); 9802 tw32(MAC_HASH_REG_3, mc_filter[3]); 9803 } 9804 9805 if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) { 9806 rx_mode |= RX_MODE_PROMISC; 9807 } else if (!(dev->flags & IFF_PROMISC)) { 9808 /* Add all entries into to the mac addr filter list */ 9809 int i = 0; 9810 struct netdev_hw_addr *ha; 9811 9812 netdev_for_each_uc_addr(ha, dev) { 9813 __tg3_set_one_mac_addr(tp, ha->addr, 9814 i + TG3_UCAST_ADDR_IDX(tp)); 9815 i++; 9816 } 9817 } 9818 9819 if (rx_mode != tp->rx_mode) { 9820 tp->rx_mode = rx_mode; 9821 tw32_f(MAC_RX_MODE, rx_mode); 9822 udelay(10); 9823 } 9824} 9825 9826static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt) 9827{ 9828 int i; 9829 9830 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 9831 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt); 9832} 9833 9834static void tg3_rss_check_indir_tbl(struct tg3 *tp) 9835{ 9836 int i; 9837 9838 if (!tg3_flag(tp, SUPPORT_MSIX)) 9839 return; 9840 9841 if (tp->rxq_cnt == 1) { 9842 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 9843 return; 9844 } 9845 9846 /* Validate table against current IRQ count */ 9847 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 9848 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt) 9849 break; 9850 } 9851 9852 if (i != TG3_RSS_INDIR_TBL_SIZE) 9853 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt); 9854} 9855 9856static void tg3_rss_write_indir_tbl(struct tg3 *tp) 9857{ 9858 int i = 0; 9859 u32 reg = MAC_RSS_INDIR_TBL_0; 9860 9861 while (i < TG3_RSS_INDIR_TBL_SIZE) { 9862 u32 val = tp->rss_ind_tbl[i]; 9863 i++; 9864 for (; i % 8; i++) { 9865 val <<= 4; 9866 val |= tp->rss_ind_tbl[i]; 9867 } 9868 tw32(reg, val); 9869 reg += 4; 9870 } 9871} 9872 9873static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) 9874{ 9875 if (tg3_asic_rev(tp) == ASIC_REV_5719) 9876 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; 9877 else 9878 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; 9879} 9880 9881/* tp->lock is held. */ 9882static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) 9883{ 9884 u32 val, rdmac_mode; 9885 int i, err, limit; 9886 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 9887 9888 tg3_disable_ints(tp); 9889 9890 tg3_stop_fw(tp); 9891 9892 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 9893 9894 if (tg3_flag(tp, INIT_COMPLETE)) 9895 tg3_abort_hw(tp, 1); 9896 9897 if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 9898 !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) { 9899 tg3_phy_pull_config(tp); 9900 tg3_eee_pull_config(tp, NULL); 9901 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 9902 } 9903 9904 /* Enable MAC control of LPI */ 9905 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 9906 tg3_setup_eee(tp); 9907 9908 if (reset_phy) 9909 tg3_phy_reset(tp); 9910 9911 err = tg3_chip_reset(tp); 9912 if (err) 9913 return err; 9914 9915 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 9916 9917 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 9918 val = tr32(TG3_CPMU_CTRL); 9919 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 9920 tw32(TG3_CPMU_CTRL, val); 9921 9922 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9923 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9924 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9925 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9926 9927 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 9928 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 9929 val |= CPMU_LNK_AWARE_MACCLK_6_25; 9930 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 9931 9932 val = tr32(TG3_CPMU_HST_ACC); 9933 val &= ~CPMU_HST_ACC_MACCLK_MASK; 9934 val |= CPMU_HST_ACC_MACCLK_6_25; 9935 tw32(TG3_CPMU_HST_ACC, val); 9936 } 9937 9938 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9939 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 9940 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 9941 PCIE_PWR_MGMT_L1_THRESH_4MS; 9942 tw32(PCIE_PWR_MGMT_THRESH, val); 9943 9944 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 9945 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 9946 9947 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 9948 9949 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9950 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9951 } 9952 9953 if (tg3_flag(tp, L1PLLPD_EN)) { 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 + TG3_PCIE_PL_LO_PHYCTL1); 9961 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 9962 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 9963 9964 tw32(GRC_MODE, grc_mode); 9965 } 9966 9967 if (tg3_flag(tp, 57765_CLASS)) { 9968 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 9969 u32 grc_mode = tr32(GRC_MODE); 9970 9971 /* Access the lower 1K of PL PCIE block registers. */ 9972 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9973 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9974 9975 val = tr32(TG3_PCIE_TLDLPL_PORT + 9976 TG3_PCIE_PL_LO_PHYCTL5); 9977 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 9978 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 9979 9980 tw32(GRC_MODE, grc_mode); 9981 } 9982 9983 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) { 9984 u32 grc_mode; 9985 9986 /* Fix transmit hangs */ 9987 val = tr32(TG3_CPMU_PADRNG_CTL); 9988 val |= TG3_CPMU_PADRNG_CTL_RDIV2; 9989 tw32(TG3_CPMU_PADRNG_CTL, val); 9990 9991 grc_mode = tr32(GRC_MODE); 9992 9993 /* Access the lower 1K of DL PCIE block registers. */ 9994 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9995 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 9996 9997 val = tr32(TG3_PCIE_TLDLPL_PORT + 9998 TG3_PCIE_DL_LO_FTSMAX); 9999 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 10000 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 10001 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 10002 10003 tw32(GRC_MODE, grc_mode); 10004 } 10005 10006 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 10007 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 10008 val |= CPMU_LSPD_10MB_MACCLK_6_25; 10009 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 10010 } 10011 10012 /* This works around an issue with Athlon chipsets on 10013 * B3 tigon3 silicon. This bit has no effect on any 10014 * other revision. But do not set this on PCI Express 10015 * chips and don't even touch the clocks if the CPMU is present. 10016 */ 10017 if (!tg3_flag(tp, CPMU_PRESENT)) { 10018 if (!tg3_flag(tp, PCI_EXPRESS)) 10019 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 10020 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 10021 } 10022 10023 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 10024 tg3_flag(tp, PCIX_MODE)) { 10025 val = tr32(TG3PCI_PCISTATE); 10026 val |= PCISTATE_RETRY_SAME_DMA; 10027 tw32(TG3PCI_PCISTATE, val); 10028 } 10029 10030 if (tg3_flag(tp, ENABLE_APE)) { 10031 /* Allow reads and writes to the 10032 * APE register and memory space. 10033 */ 10034 val = tr32(TG3PCI_PCISTATE); 10035 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 10036 PCISTATE_ALLOW_APE_SHMEM_WR | 10037 PCISTATE_ALLOW_APE_PSPACE_WR; 10038 tw32(TG3PCI_PCISTATE, val); 10039 } 10040 10041 if (tg3_chip_rev(tp) == CHIPREV_5704_BX) { 10042 /* Enable some hw fixes. */ 10043 val = tr32(TG3PCI_MSI_DATA); 10044 val |= (1 << 26) | (1 << 28) | (1 << 29); 10045 tw32(TG3PCI_MSI_DATA, val); 10046 } 10047 10048 /* Descriptor ring init may make accesses to the 10049 * NIC SRAM area to setup the TX descriptors, so we 10050 * can only do this after the hardware has been 10051 * successfully reset. 10052 */ 10053 err = tg3_init_rings(tp); 10054 if (err) 10055 return err; 10056 10057 if (tg3_flag(tp, 57765_PLUS)) { 10058 val = tr32(TG3PCI_DMA_RW_CTRL) & 10059 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 10060 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 10061 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 10062 if (!tg3_flag(tp, 57765_CLASS) && 10063 tg3_asic_rev(tp) != ASIC_REV_5717 && 10064 tg3_asic_rev(tp) != ASIC_REV_5762) 10065 val |= DMA_RWCTRL_TAGGED_STAT_WA; 10066 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 10067 } else if (tg3_asic_rev(tp) != ASIC_REV_5784 && 10068 tg3_asic_rev(tp) != ASIC_REV_5761) { 10069 /* This value is determined during the probe time DMA 10070 * engine test, tg3_test_dma. 10071 */ 10072 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 10073 } 10074 10075 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 10076 GRC_MODE_4X_NIC_SEND_RINGS | 10077 GRC_MODE_NO_TX_PHDR_CSUM | 10078 GRC_MODE_NO_RX_PHDR_CSUM); 10079 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 10080 10081 /* Pseudo-header checksum is done by hardware logic and not 10082 * the offload processers, so make the chip do the pseudo- 10083 * header checksums on receive. For transmit it is more 10084 * convenient to do the pseudo-header checksum in software 10085 * as Linux does that on transmit for us in all cases. 10086 */ 10087 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 10088 10089 val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; 10090 if (tp->rxptpctl) 10091 tw32(TG3_RX_PTP_CTL, 10092 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 10093 10094 if (tg3_flag(tp, PTP_CAPABLE)) 10095 val |= GRC_MODE_TIME_SYNC_ENABLE; 10096 10097 tw32(GRC_MODE, tp->grc_mode | val); 10098 10099 /* On one of the AMD platform, MRRS is restricted to 4000 because of 10100 * south bridge limitation. As a workaround, Driver is setting MRRS 10101 * to 2048 instead of default 4096. 10102 */ 10103 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 10104 tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) { 10105 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK; 10106 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048); 10107 } 10108 10109 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 10110 val = tr32(GRC_MISC_CFG); 10111 val &= ~0xff; 10112 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 10113 tw32(GRC_MISC_CFG, val); 10114 10115 /* Initialize MBUF/DESC pool. */ 10116 if (tg3_flag(tp, 5750_PLUS)) { 10117 /* Do nothing. */ 10118 } else if (tg3_asic_rev(tp) != ASIC_REV_5705) { 10119 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 10120 if (tg3_asic_rev(tp) == ASIC_REV_5704) 10121 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 10122 else 10123 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 10124 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 10125 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 10126 } else if (tg3_flag(tp, TSO_CAPABLE)) { 10127 int fw_len; 10128 10129 fw_len = tp->fw_len; 10130 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 10131 tw32(BUFMGR_MB_POOL_ADDR, 10132 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 10133 tw32(BUFMGR_MB_POOL_SIZE, 10134 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 10135 } 10136 10137 if (tp->dev->mtu <= ETH_DATA_LEN) { 10138 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10139 tp->bufmgr_config.mbuf_read_dma_low_water); 10140 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10141 tp->bufmgr_config.mbuf_mac_rx_low_water); 10142 tw32(BUFMGR_MB_HIGH_WATER, 10143 tp->bufmgr_config.mbuf_high_water); 10144 } else { 10145 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10146 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 10147 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10148 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 10149 tw32(BUFMGR_MB_HIGH_WATER, 10150 tp->bufmgr_config.mbuf_high_water_jumbo); 10151 } 10152 tw32(BUFMGR_DMA_LOW_WATER, 10153 tp->bufmgr_config.dma_low_water); 10154 tw32(BUFMGR_DMA_HIGH_WATER, 10155 tp->bufmgr_config.dma_high_water); 10156 10157 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 10158 if (tg3_asic_rev(tp) == ASIC_REV_5719) 10159 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 10160 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10161 tg3_asic_rev(tp) == ASIC_REV_5762 || 10162 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10163 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) 10164 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 10165 tw32(BUFMGR_MODE, val); 10166 for (i = 0; i < 2000; i++) { 10167 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 10168 break; 10169 udelay(10); 10170 } 10171 if (i >= 2000) { 10172 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 10173 return -ENODEV; 10174 } 10175 10176 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1) 10177 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 10178 10179 tg3_setup_rxbd_thresholds(tp); 10180 10181 /* Initialize TG3_BDINFO's at: 10182 * RCVDBDI_STD_BD: standard eth size rx ring 10183 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 10184 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 10185 * 10186 * like so: 10187 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 10188 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 10189 * ring attribute flags 10190 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 10191 * 10192 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 10193 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 10194 * 10195 * The size of each ring is fixed in the firmware, but the location is 10196 * configurable. 10197 */ 10198 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10199 ((u64) tpr->rx_std_mapping >> 32)); 10200 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10201 ((u64) tpr->rx_std_mapping & 0xffffffff)); 10202 if (!tg3_flag(tp, 5717_PLUS)) 10203 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 10204 NIC_SRAM_RX_BUFFER_DESC); 10205 10206 /* Disable the mini ring */ 10207 if (!tg3_flag(tp, 5705_PLUS)) 10208 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 10209 BDINFO_FLAGS_DISABLED); 10210 10211 /* Program the jumbo buffer descriptor ring control 10212 * blocks on those devices that have them. 10213 */ 10214 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10215 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 10216 10217 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 10218 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10219 ((u64) tpr->rx_jmb_mapping >> 32)); 10220 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10221 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 10222 val = TG3_RX_JMB_RING_SIZE(tp) << 10223 BDINFO_FLAGS_MAXLEN_SHIFT; 10224 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10225 val | BDINFO_FLAGS_USE_EXT_RECV); 10226 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 10227 tg3_flag(tp, 57765_CLASS) || 10228 tg3_asic_rev(tp) == ASIC_REV_5762) 10229 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 10230 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 10231 } else { 10232 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10233 BDINFO_FLAGS_DISABLED); 10234 } 10235 10236 if (tg3_flag(tp, 57765_PLUS)) { 10237 val = TG3_RX_STD_RING_SIZE(tp); 10238 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 10239 val |= (TG3_RX_STD_DMA_SZ << 2); 10240 } else 10241 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 10242 } else 10243 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 10244 10245 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 10246 10247 tpr->rx_std_prod_idx = tp->rx_pending; 10248 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 10249 10250 tpr->rx_jmb_prod_idx = 10251 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 10252 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 10253 10254 tg3_rings_reset(tp); 10255 10256 /* Initialize MAC address and backoff seed. */ 10257 __tg3_set_mac_addr(tp, false); 10258 10259 /* MTU + ethernet header + FCS + optional VLAN tag */ 10260 tw32(MAC_RX_MTU_SIZE, 10261 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 10262 10263 /* The slot time is changed by tg3_setup_phy if we 10264 * run at gigabit with half duplex. 10265 */ 10266 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 10267 (6 << TX_LENGTHS_IPG_SHIFT) | 10268 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 10269 10270 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10271 tg3_asic_rev(tp) == ASIC_REV_5762) 10272 val |= tr32(MAC_TX_LENGTHS) & 10273 (TX_LENGTHS_JMB_FRM_LEN_MSK | 10274 TX_LENGTHS_CNT_DWN_VAL_MSK); 10275 10276 tw32(MAC_TX_LENGTHS, val); 10277 10278 /* Receive rules. */ 10279 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 10280 tw32(RCVLPC_CONFIG, 0x0181); 10281 10282 /* Calculate RDMAC_MODE setting early, we need it to determine 10283 * the RCVLPC_STATE_ENABLE mask. 10284 */ 10285 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 10286 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 10287 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 10288 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 10289 RDMAC_MODE_LNGREAD_ENAB); 10290 10291 if (tg3_asic_rev(tp) == ASIC_REV_5717) 10292 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 10293 10294 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 10295 tg3_asic_rev(tp) == ASIC_REV_5785 || 10296 tg3_asic_rev(tp) == ASIC_REV_57780) 10297 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 10298 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 10299 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 10300 10301 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10302 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10303 if (tg3_flag(tp, TSO_CAPABLE) && 10304 tg3_asic_rev(tp) == ASIC_REV_5705) { 10305 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 10306 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10307 !tg3_flag(tp, IS_5788)) { 10308 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10309 } 10310 } 10311 10312 if (tg3_flag(tp, PCI_EXPRESS)) 10313 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10314 10315 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10316 tp->dma_limit = 0; 10317 if (tp->dev->mtu <= ETH_DATA_LEN) { 10318 rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR; 10319 tp->dma_limit = TG3_TX_BD_DMA_MAX_2K; 10320 } 10321 } 10322 10323 if (tg3_flag(tp, HW_TSO_1) || 10324 tg3_flag(tp, HW_TSO_2) || 10325 tg3_flag(tp, HW_TSO_3)) 10326 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 10327 10328 if (tg3_flag(tp, 57765_PLUS) || 10329 tg3_asic_rev(tp) == ASIC_REV_5785 || 10330 tg3_asic_rev(tp) == ASIC_REV_57780) 10331 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 10332 10333 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10334 tg3_asic_rev(tp) == ASIC_REV_5762) 10335 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 10336 10337 if (tg3_asic_rev(tp) == ASIC_REV_5761 || 10338 tg3_asic_rev(tp) == ASIC_REV_5784 || 10339 tg3_asic_rev(tp) == ASIC_REV_5785 || 10340 tg3_asic_rev(tp) == ASIC_REV_57780 || 10341 tg3_flag(tp, 57765_PLUS)) { 10342 u32 tgtreg; 10343 10344 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10345 tgtreg = TG3_RDMA_RSRVCTRL_REG2; 10346 else 10347 tgtreg = TG3_RDMA_RSRVCTRL_REG; 10348 10349 val = tr32(tgtreg); 10350 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10351 tg3_asic_rev(tp) == ASIC_REV_5762) { 10352 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 10353 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 10354 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 10355 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 10356 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 10357 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 10358 } 10359 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 10360 } 10361 10362 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10363 tg3_asic_rev(tp) == ASIC_REV_5720 || 10364 tg3_asic_rev(tp) == ASIC_REV_5762) { 10365 u32 tgtreg; 10366 10367 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10368 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; 10369 else 10370 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; 10371 10372 val = tr32(tgtreg); 10373 tw32(tgtreg, val | 10374 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 10375 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 10376 } 10377 10378 /* Receive/send statistics. */ 10379 if (tg3_flag(tp, 5750_PLUS)) { 10380 val = tr32(RCVLPC_STATS_ENABLE); 10381 val &= ~RCVLPC_STATSENAB_DACK_FIX; 10382 tw32(RCVLPC_STATS_ENABLE, val); 10383 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 10384 tg3_flag(tp, TSO_CAPABLE)) { 10385 val = tr32(RCVLPC_STATS_ENABLE); 10386 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 10387 tw32(RCVLPC_STATS_ENABLE, val); 10388 } else { 10389 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 10390 } 10391 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 10392 tw32(SNDDATAI_STATSENAB, 0xffffff); 10393 tw32(SNDDATAI_STATSCTRL, 10394 (SNDDATAI_SCTRL_ENABLE | 10395 SNDDATAI_SCTRL_FASTUPD)); 10396 10397 /* Setup host coalescing engine. */ 10398 tw32(HOSTCC_MODE, 0); 10399 for (i = 0; i < 2000; i++) { 10400 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 10401 break; 10402 udelay(10); 10403 } 10404 10405 __tg3_set_coalesce(tp, &tp->coal); 10406 10407 if (!tg3_flag(tp, 5705_PLUS)) { 10408 /* Status/statistics block address. See tg3_timer, 10409 * the tg3_periodic_fetch_stats call there, and 10410 * tg3_get_stats to see how this works for 5705/5750 chips. 10411 */ 10412 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 10413 ((u64) tp->stats_mapping >> 32)); 10414 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 10415 ((u64) tp->stats_mapping & 0xffffffff)); 10416 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 10417 10418 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 10419 10420 /* Clear statistics and status block memory areas */ 10421 for (i = NIC_SRAM_STATS_BLK; 10422 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 10423 i += sizeof(u32)) { 10424 tg3_write_mem(tp, i, 0); 10425 udelay(40); 10426 } 10427 } 10428 10429 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 10430 10431 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 10432 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 10433 if (!tg3_flag(tp, 5705_PLUS)) 10434 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 10435 10436 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 10437 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 10438 /* reset to prevent losing 1st rx packet intermittently */ 10439 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10440 udelay(10); 10441 } 10442 10443 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 10444 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 10445 MAC_MODE_FHDE_ENABLE; 10446 if (tg3_flag(tp, ENABLE_APE)) 10447 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 10448 if (!tg3_flag(tp, 5705_PLUS) && 10449 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10450 tg3_asic_rev(tp) != ASIC_REV_5700) 10451 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 10452 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 10453 udelay(40); 10454 10455 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 10456 * If TG3_FLAG_IS_NIC is zero, we should read the 10457 * register to preserve the GPIO settings for LOMs. The GPIOs, 10458 * whether used as inputs or outputs, are set by boot code after 10459 * reset. 10460 */ 10461 if (!tg3_flag(tp, IS_NIC)) { 10462 u32 gpio_mask; 10463 10464 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 10465 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 10466 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 10467 10468 if (tg3_asic_rev(tp) == ASIC_REV_5752) 10469 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 10470 GRC_LCLCTRL_GPIO_OUTPUT3; 10471 10472 if (tg3_asic_rev(tp) == ASIC_REV_5755) 10473 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 10474 10475 tp->grc_local_ctrl &= ~gpio_mask; 10476 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 10477 10478 /* GPIO1 must be driven high for eeprom write protect */ 10479 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 10480 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 10481 GRC_LCLCTRL_GPIO_OUTPUT1); 10482 } 10483 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10484 udelay(100); 10485 10486 if (tg3_flag(tp, USING_MSIX)) { 10487 val = tr32(MSGINT_MODE); 10488 val |= MSGINT_MODE_ENABLE; 10489 if (tp->irq_cnt > 1) 10490 val |= MSGINT_MODE_MULTIVEC_EN; 10491 if (!tg3_flag(tp, 1SHOT_MSI)) 10492 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 10493 tw32(MSGINT_MODE, val); 10494 } 10495 10496 if (!tg3_flag(tp, 5705_PLUS)) { 10497 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 10498 udelay(40); 10499 } 10500 10501 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 10502 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 10503 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 10504 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 10505 WDMAC_MODE_LNGREAD_ENAB); 10506 10507 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10508 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10509 if (tg3_flag(tp, TSO_CAPABLE) && 10510 (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 || 10511 tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) { 10512 /* nothing */ 10513 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10514 !tg3_flag(tp, IS_5788)) { 10515 val |= WDMAC_MODE_RX_ACCEL; 10516 } 10517 } 10518 10519 /* Enable host coalescing bug fix */ 10520 if (tg3_flag(tp, 5755_PLUS)) 10521 val |= WDMAC_MODE_STATUS_TAG_FIX; 10522 10523 if (tg3_asic_rev(tp) == ASIC_REV_5785) 10524 val |= WDMAC_MODE_BURST_ALL_DATA; 10525 10526 tw32_f(WDMAC_MODE, val); 10527 udelay(40); 10528 10529 if (tg3_flag(tp, PCIX_MODE)) { 10530 u16 pcix_cmd; 10531 10532 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10533 &pcix_cmd); 10534 if (tg3_asic_rev(tp) == ASIC_REV_5703) { 10535 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 10536 pcix_cmd |= PCI_X_CMD_READ_2K; 10537 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) { 10538 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 10539 pcix_cmd |= PCI_X_CMD_READ_2K; 10540 } 10541 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10542 pcix_cmd); 10543 } 10544 10545 tw32_f(RDMAC_MODE, rdmac_mode); 10546 udelay(40); 10547 10548 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10549 tg3_asic_rev(tp) == ASIC_REV_5720) { 10550 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { 10551 if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) 10552 break; 10553 } 10554 if (i < TG3_NUM_RDMA_CHANNELS) { 10555 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10556 val |= tg3_lso_rd_dma_workaround_bit(tp); 10557 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10558 tg3_flag_set(tp, 5719_5720_RDMA_BUG); 10559 } 10560 } 10561 10562 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 10563 if (!tg3_flag(tp, 5705_PLUS)) 10564 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 10565 10566 if (tg3_asic_rev(tp) == ASIC_REV_5761) 10567 tw32(SNDDATAC_MODE, 10568 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 10569 else 10570 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 10571 10572 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 10573 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 10574 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 10575 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 10576 val |= RCVDBDI_MODE_LRG_RING_SZ; 10577 tw32(RCVDBDI_MODE, val); 10578 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 10579 if (tg3_flag(tp, HW_TSO_1) || 10580 tg3_flag(tp, HW_TSO_2) || 10581 tg3_flag(tp, HW_TSO_3)) 10582 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 10583 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 10584 if (tg3_flag(tp, ENABLE_TSS)) 10585 val |= SNDBDI_MODE_MULTI_TXQ_EN; 10586 tw32(SNDBDI_MODE, val); 10587 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 10588 10589 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 10590 err = tg3_load_5701_a0_firmware_fix(tp); 10591 if (err) 10592 return err; 10593 } 10594 10595 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10596 /* Ignore any errors for the firmware download. If download 10597 * fails, the device will operate with EEE disabled 10598 */ 10599 tg3_load_57766_firmware(tp); 10600 } 10601 10602 if (tg3_flag(tp, TSO_CAPABLE)) { 10603 err = tg3_load_tso_firmware(tp); 10604 if (err) 10605 return err; 10606 } 10607 10608 tp->tx_mode = TX_MODE_ENABLE; 10609 10610 if (tg3_flag(tp, 5755_PLUS) || 10611 tg3_asic_rev(tp) == ASIC_REV_5906) 10612 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 10613 10614 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10615 tg3_asic_rev(tp) == ASIC_REV_5762) { 10616 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 10617 tp->tx_mode &= ~val; 10618 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 10619 } 10620 10621 tw32_f(MAC_TX_MODE, tp->tx_mode); 10622 udelay(100); 10623 10624 if (tg3_flag(tp, ENABLE_RSS)) { 10625 u32 rss_key[10]; 10626 10627 tg3_rss_write_indir_tbl(tp); 10628 10629 netdev_rss_key_fill(rss_key, 10 * sizeof(u32)); 10630 10631 for (i = 0; i < 10 ; i++) 10632 tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]); 10633 } 10634 10635 tp->rx_mode = RX_MODE_ENABLE; 10636 if (tg3_flag(tp, 5755_PLUS)) 10637 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 10638 10639 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10640 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX; 10641 10642 if (tg3_flag(tp, ENABLE_RSS)) 10643 tp->rx_mode |= RX_MODE_RSS_ENABLE | 10644 RX_MODE_RSS_ITBL_HASH_BITS_7 | 10645 RX_MODE_RSS_IPV6_HASH_EN | 10646 RX_MODE_RSS_TCP_IPV6_HASH_EN | 10647 RX_MODE_RSS_IPV4_HASH_EN | 10648 RX_MODE_RSS_TCP_IPV4_HASH_EN; 10649 10650 tw32_f(MAC_RX_MODE, tp->rx_mode); 10651 udelay(10); 10652 10653 tw32(MAC_LED_CTRL, tp->led_ctrl); 10654 10655 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 10656 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10657 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10658 udelay(10); 10659 } 10660 tw32_f(MAC_RX_MODE, tp->rx_mode); 10661 udelay(10); 10662 10663 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10664 if ((tg3_asic_rev(tp) == ASIC_REV_5704) && 10665 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 10666 /* Set drive transmission level to 1.2V */ 10667 /* only if the signal pre-emphasis bit is not set */ 10668 val = tr32(MAC_SERDES_CFG); 10669 val &= 0xfffff000; 10670 val |= 0x880; 10671 tw32(MAC_SERDES_CFG, val); 10672 } 10673 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) 10674 tw32(MAC_SERDES_CFG, 0x616000); 10675 } 10676 10677 /* Prevent chip from dropping frames when flow control 10678 * is enabled. 10679 */ 10680 if (tg3_flag(tp, 57765_CLASS)) 10681 val = 1; 10682 else 10683 val = 2; 10684 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 10685 10686 if (tg3_asic_rev(tp) == ASIC_REV_5704 && 10687 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 10688 /* Use hardware link auto-negotiation */ 10689 tg3_flag_set(tp, HW_AUTONEG); 10690 } 10691 10692 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 10693 tg3_asic_rev(tp) == ASIC_REV_5714) { 10694 u32 tmp; 10695 10696 tmp = tr32(SERDES_RX_CTRL); 10697 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 10698 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 10699 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 10700 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10701 } 10702 10703 if (!tg3_flag(tp, USE_PHYLIB)) { 10704 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10705 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 10706 10707 err = tg3_setup_phy(tp, false); 10708 if (err) 10709 return err; 10710 10711 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10712 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 10713 u32 tmp; 10714 10715 /* Clear CRC stats. */ 10716 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 10717 tg3_writephy(tp, MII_TG3_TEST1, 10718 tmp | MII_TG3_TEST1_CRC_EN); 10719 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 10720 } 10721 } 10722 } 10723 10724 __tg3_set_rx_mode(tp->dev); 10725 10726 /* Initialize receive rules. */ 10727 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 10728 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 10729 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 10730 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 10731 10732 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 10733 limit = 8; 10734 else 10735 limit = 16; 10736 if (tg3_flag(tp, ENABLE_ASF)) 10737 limit -= 4; 10738 switch (limit) { 10739 case 16: 10740 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 10741 fallthrough; 10742 case 15: 10743 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 10744 fallthrough; 10745 case 14: 10746 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 10747 fallthrough; 10748 case 13: 10749 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 10750 fallthrough; 10751 case 12: 10752 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 10753 fallthrough; 10754 case 11: 10755 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 10756 fallthrough; 10757 case 10: 10758 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 10759 fallthrough; 10760 case 9: 10761 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 10762 fallthrough; 10763 case 8: 10764 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 10765 fallthrough; 10766 case 7: 10767 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 10768 fallthrough; 10769 case 6: 10770 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 10771 fallthrough; 10772 case 5: 10773 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 10774 fallthrough; 10775 case 4: 10776 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 10777 case 3: 10778 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 10779 case 2: 10780 case 1: 10781 10782 default: 10783 break; 10784 } 10785 10786 if (tg3_flag(tp, ENABLE_APE)) 10787 /* Write our heartbeat update interval to APE. */ 10788 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 10789 APE_HOST_HEARTBEAT_INT_5SEC); 10790 10791 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 10792 10793 return 0; 10794} 10795 10796/* Called at device open time to get the chip ready for 10797 * packet processing. Invoked with tp->lock held. 10798 */ 10799static int tg3_init_hw(struct tg3 *tp, bool reset_phy) 10800{ 10801 /* Chip may have been just powered on. If so, the boot code may still 10802 * be running initialization. Wait for it to finish to avoid races in 10803 * accessing the hardware. 10804 */ 10805 tg3_enable_register_access(tp); 10806 tg3_poll_fw(tp); 10807 10808 tg3_switch_clocks(tp); 10809 10810 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 10811 10812 return tg3_reset_hw(tp, reset_phy); 10813} 10814 10815#ifdef CONFIG_TIGON3_HWMON 10816static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 10817{ 10818 u32 off, len = TG3_OCIR_LEN; 10819 int i; 10820 10821 for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) { 10822 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 10823 10824 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 10825 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 10826 memset(ocir, 0, len); 10827 } 10828} 10829 10830/* sysfs attributes for hwmon */ 10831static ssize_t tg3_show_temp(struct device *dev, 10832 struct device_attribute *devattr, char *buf) 10833{ 10834 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 10835 struct tg3 *tp = dev_get_drvdata(dev); 10836 u32 temperature; 10837 10838 spin_lock_bh(&tp->lock); 10839 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 10840 sizeof(temperature)); 10841 spin_unlock_bh(&tp->lock); 10842 return sprintf(buf, "%u\n", temperature * 1000); 10843} 10844 10845 10846static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL, 10847 TG3_TEMP_SENSOR_OFFSET); 10848static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL, 10849 TG3_TEMP_CAUTION_OFFSET); 10850static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL, 10851 TG3_TEMP_MAX_OFFSET); 10852 10853static struct attribute *tg3_attrs[] = { 10854 &sensor_dev_attr_temp1_input.dev_attr.attr, 10855 &sensor_dev_attr_temp1_crit.dev_attr.attr, 10856 &sensor_dev_attr_temp1_max.dev_attr.attr, 10857 NULL 10858}; 10859ATTRIBUTE_GROUPS(tg3); 10860 10861static void tg3_hwmon_close(struct tg3 *tp) 10862{ 10863 if (tp->hwmon_dev) { 10864 hwmon_device_unregister(tp->hwmon_dev); 10865 tp->hwmon_dev = NULL; 10866 } 10867} 10868 10869static void tg3_hwmon_open(struct tg3 *tp) 10870{ 10871 int i; 10872 u32 size = 0; 10873 struct pci_dev *pdev = tp->pdev; 10874 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 10875 10876 tg3_sd_scan_scratchpad(tp, ocirs); 10877 10878 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 10879 if (!ocirs[i].src_data_length) 10880 continue; 10881 10882 size += ocirs[i].src_hdr_length; 10883 size += ocirs[i].src_data_length; 10884 } 10885 10886 if (!size) 10887 return; 10888 10889 tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3", 10890 tp, tg3_groups); 10891 if (IS_ERR(tp->hwmon_dev)) { 10892 tp->hwmon_dev = NULL; 10893 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 10894 } 10895} 10896#else 10897static inline void tg3_hwmon_close(struct tg3 *tp) { } 10898static inline void tg3_hwmon_open(struct tg3 *tp) { } 10899#endif /* CONFIG_TIGON3_HWMON */ 10900 10901 10902#define TG3_STAT_ADD32(PSTAT, REG) \ 10903do { u32 __val = tr32(REG); \ 10904 (PSTAT)->low += __val; \ 10905 if ((PSTAT)->low < __val) \ 10906 (PSTAT)->high += 1; \ 10907} while (0) 10908 10909static void tg3_periodic_fetch_stats(struct tg3 *tp) 10910{ 10911 struct tg3_hw_stats *sp = tp->hw_stats; 10912 10913 if (!tp->link_up) 10914 return; 10915 10916 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 10917 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 10918 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 10919 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 10920 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 10921 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 10922 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 10923 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 10924 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 10925 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 10926 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 10927 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 10928 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 10929 if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && 10930 (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + 10931 sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { 10932 u32 val; 10933 10934 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10935 val &= ~tg3_lso_rd_dma_workaround_bit(tp); 10936 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10937 tg3_flag_clear(tp, 5719_5720_RDMA_BUG); 10938 } 10939 10940 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 10941 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 10942 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 10943 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 10944 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 10945 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 10946 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 10947 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 10948 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 10949 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 10950 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 10951 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 10952 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 10953 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 10954 10955 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 10956 if (tg3_asic_rev(tp) != ASIC_REV_5717 && 10957 tg3_asic_rev(tp) != ASIC_REV_5762 && 10958 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 && 10959 tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) { 10960 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 10961 } else { 10962 u32 val = tr32(HOSTCC_FLOW_ATTN); 10963 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 10964 if (val) { 10965 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 10966 sp->rx_discards.low += val; 10967 if (sp->rx_discards.low < val) 10968 sp->rx_discards.high += 1; 10969 } 10970 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 10971 } 10972 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 10973} 10974 10975static void tg3_chk_missed_msi(struct tg3 *tp) 10976{ 10977 u32 i; 10978 10979 for (i = 0; i < tp->irq_cnt; i++) { 10980 struct tg3_napi *tnapi = &tp->napi[i]; 10981 10982 if (tg3_has_work(tnapi)) { 10983 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 10984 tnapi->last_tx_cons == tnapi->tx_cons) { 10985 if (tnapi->chk_msi_cnt < 1) { 10986 tnapi->chk_msi_cnt++; 10987 return; 10988 } 10989 tg3_msi(0, tnapi); 10990 } 10991 } 10992 tnapi->chk_msi_cnt = 0; 10993 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 10994 tnapi->last_tx_cons = tnapi->tx_cons; 10995 } 10996} 10997 10998static void tg3_timer(struct timer_list *t) 10999{ 11000 struct tg3 *tp = from_timer(tp, t, timer); 11001 11002 spin_lock(&tp->lock); 11003 11004 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) { 11005 spin_unlock(&tp->lock); 11006 goto restart_timer; 11007 } 11008 11009 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 11010 tg3_flag(tp, 57765_CLASS)) 11011 tg3_chk_missed_msi(tp); 11012 11013 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 11014 /* BCM4785: Flush posted writes from GbE to host memory. */ 11015 tr32(HOSTCC_MODE); 11016 } 11017 11018 if (!tg3_flag(tp, TAGGED_STATUS)) { 11019 /* All of this garbage is because when using non-tagged 11020 * IRQ status the mailbox/status_block protocol the chip 11021 * uses with the cpu is race prone. 11022 */ 11023 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 11024 tw32(GRC_LOCAL_CTRL, 11025 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 11026 } else { 11027 tw32(HOSTCC_MODE, tp->coalesce_mode | 11028 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 11029 } 11030 11031 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 11032 spin_unlock(&tp->lock); 11033 tg3_reset_task_schedule(tp); 11034 goto restart_timer; 11035 } 11036 } 11037 11038 /* This part only runs once per second. */ 11039 if (!--tp->timer_counter) { 11040 if (tg3_flag(tp, 5705_PLUS)) 11041 tg3_periodic_fetch_stats(tp); 11042 11043 if (tp->setlpicnt && !--tp->setlpicnt) 11044 tg3_phy_eee_enable(tp); 11045 11046 if (tg3_flag(tp, USE_LINKCHG_REG)) { 11047 u32 mac_stat; 11048 int phy_event; 11049 11050 mac_stat = tr32(MAC_STATUS); 11051 11052 phy_event = 0; 11053 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 11054 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 11055 phy_event = 1; 11056 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 11057 phy_event = 1; 11058 11059 if (phy_event) 11060 tg3_setup_phy(tp, false); 11061 } else if (tg3_flag(tp, POLL_SERDES)) { 11062 u32 mac_stat = tr32(MAC_STATUS); 11063 int need_setup = 0; 11064 11065 if (tp->link_up && 11066 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 11067 need_setup = 1; 11068 } 11069 if (!tp->link_up && 11070 (mac_stat & (MAC_STATUS_PCS_SYNCED | 11071 MAC_STATUS_SIGNAL_DET))) { 11072 need_setup = 1; 11073 } 11074 if (need_setup) { 11075 if (!tp->serdes_counter) { 11076 tw32_f(MAC_MODE, 11077 (tp->mac_mode & 11078 ~MAC_MODE_PORT_MODE_MASK)); 11079 udelay(40); 11080 tw32_f(MAC_MODE, tp->mac_mode); 11081 udelay(40); 11082 } 11083 tg3_setup_phy(tp, false); 11084 } 11085 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 11086 tg3_flag(tp, 5780_CLASS)) { 11087 tg3_serdes_parallel_detect(tp); 11088 } else if (tg3_flag(tp, POLL_CPMU_LINK)) { 11089 u32 cpmu = tr32(TG3_CPMU_STATUS); 11090 bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) == 11091 TG3_CPMU_STATUS_LINK_MASK); 11092 11093 if (link_up != tp->link_up) 11094 tg3_setup_phy(tp, false); 11095 } 11096 11097 tp->timer_counter = tp->timer_multiplier; 11098 } 11099 11100 /* Heartbeat is only sent once every 2 seconds. 11101 * 11102 * The heartbeat is to tell the ASF firmware that the host 11103 * driver is still alive. In the event that the OS crashes, 11104 * ASF needs to reset the hardware to free up the FIFO space 11105 * that may be filled with rx packets destined for the host. 11106 * If the FIFO is full, ASF will no longer function properly. 11107 * 11108 * Unintended resets have been reported on real time kernels 11109 * where the timer doesn't run on time. Netpoll will also have 11110 * same problem. 11111 * 11112 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 11113 * to check the ring condition when the heartbeat is expiring 11114 * before doing the reset. This will prevent most unintended 11115 * resets. 11116 */ 11117 if (!--tp->asf_counter) { 11118 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 11119 tg3_wait_for_event_ack(tp); 11120 11121 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 11122 FWCMD_NICDRV_ALIVE3); 11123 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 11124 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 11125 TG3_FW_UPDATE_TIMEOUT_SEC); 11126 11127 tg3_generate_fw_event(tp); 11128 } 11129 tp->asf_counter = tp->asf_multiplier; 11130 } 11131 11132 /* Update the APE heartbeat every 5 seconds.*/ 11133 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL); 11134 11135 spin_unlock(&tp->lock); 11136 11137restart_timer: 11138 tp->timer.expires = jiffies + tp->timer_offset; 11139 add_timer(&tp->timer); 11140} 11141 11142static void tg3_timer_init(struct tg3 *tp) 11143{ 11144 if (tg3_flag(tp, TAGGED_STATUS) && 11145 tg3_asic_rev(tp) != ASIC_REV_5717 && 11146 !tg3_flag(tp, 57765_CLASS)) 11147 tp->timer_offset = HZ; 11148 else 11149 tp->timer_offset = HZ / 10; 11150 11151 BUG_ON(tp->timer_offset > HZ); 11152 11153 tp->timer_multiplier = (HZ / tp->timer_offset); 11154 tp->asf_multiplier = (HZ / tp->timer_offset) * 11155 TG3_FW_UPDATE_FREQ_SEC; 11156 11157 timer_setup(&tp->timer, tg3_timer, 0); 11158} 11159 11160static void tg3_timer_start(struct tg3 *tp) 11161{ 11162 tp->asf_counter = tp->asf_multiplier; 11163 tp->timer_counter = tp->timer_multiplier; 11164 11165 tp->timer.expires = jiffies + tp->timer_offset; 11166 add_timer(&tp->timer); 11167} 11168 11169static void tg3_timer_stop(struct tg3 *tp) 11170{ 11171 del_timer_sync(&tp->timer); 11172} 11173 11174/* Restart hardware after configuration changes, self-test, etc. 11175 * Invoked with tp->lock held. 11176 */ 11177static int tg3_restart_hw(struct tg3 *tp, bool reset_phy) 11178 __releases(tp->lock) 11179 __acquires(tp->lock) 11180{ 11181 int err; 11182 11183 err = tg3_init_hw(tp, reset_phy); 11184 if (err) { 11185 netdev_err(tp->dev, 11186 "Failed to re-initialize device, aborting\n"); 11187 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11188 tg3_full_unlock(tp); 11189 tg3_timer_stop(tp); 11190 tp->irq_sync = 0; 11191 tg3_napi_enable(tp); 11192 dev_close(tp->dev); 11193 tg3_full_lock(tp, 0); 11194 } 11195 return err; 11196} 11197 11198static void tg3_reset_task(struct work_struct *work) 11199{ 11200 struct tg3 *tp = container_of(work, struct tg3, reset_task); 11201 int err; 11202 11203 rtnl_lock(); 11204 tg3_full_lock(tp, 0); 11205 11206 if (tp->pcierr_recovery || !netif_running(tp->dev) || 11207 tp->pdev->error_state != pci_channel_io_normal) { 11208 tg3_flag_clear(tp, RESET_TASK_PENDING); 11209 tg3_full_unlock(tp); 11210 rtnl_unlock(); 11211 return; 11212 } 11213 11214 tg3_full_unlock(tp); 11215 11216 tg3_phy_stop(tp); 11217 11218 tg3_netif_stop(tp); 11219 11220 tg3_full_lock(tp, 1); 11221 11222 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 11223 tp->write32_tx_mbox = tg3_write32_tx_mbox; 11224 tp->write32_rx_mbox = tg3_write_flush_reg32; 11225 tg3_flag_set(tp, MBOX_WRITE_REORDER); 11226 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 11227 } 11228 11229 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 11230 err = tg3_init_hw(tp, true); 11231 if (err) { 11232 tg3_full_unlock(tp); 11233 tp->irq_sync = 0; 11234 tg3_napi_enable(tp); 11235 /* Clear this flag so that tg3_reset_task_cancel() will not 11236 * call cancel_work_sync() and wait forever. 11237 */ 11238 tg3_flag_clear(tp, RESET_TASK_PENDING); 11239 dev_close(tp->dev); 11240 goto out; 11241 } 11242 11243 tg3_netif_start(tp); 11244 11245 tg3_full_unlock(tp); 11246 11247 if (!err) 11248 tg3_phy_start(tp); 11249 11250 tg3_flag_clear(tp, RESET_TASK_PENDING); 11251out: 11252 rtnl_unlock(); 11253} 11254 11255static int tg3_request_irq(struct tg3 *tp, int irq_num) 11256{ 11257 irq_handler_t fn; 11258 unsigned long flags; 11259 char *name; 11260 struct tg3_napi *tnapi = &tp->napi[irq_num]; 11261 11262 if (tp->irq_cnt == 1) 11263 name = tp->dev->name; 11264 else { 11265 name = &tnapi->irq_lbl[0]; 11266 if (tnapi->tx_buffers && tnapi->rx_rcb) 11267 snprintf(name, IFNAMSIZ, 11268 "%s-txrx-%d", tp->dev->name, irq_num); 11269 else if (tnapi->tx_buffers) 11270 snprintf(name, IFNAMSIZ, 11271 "%s-tx-%d", tp->dev->name, irq_num); 11272 else if (tnapi->rx_rcb) 11273 snprintf(name, IFNAMSIZ, 11274 "%s-rx-%d", tp->dev->name, irq_num); 11275 else 11276 snprintf(name, IFNAMSIZ, 11277 "%s-%d", tp->dev->name, irq_num); 11278 name[IFNAMSIZ-1] = 0; 11279 } 11280 11281 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11282 fn = tg3_msi; 11283 if (tg3_flag(tp, 1SHOT_MSI)) 11284 fn = tg3_msi_1shot; 11285 flags = 0; 11286 } else { 11287 fn = tg3_interrupt; 11288 if (tg3_flag(tp, TAGGED_STATUS)) 11289 fn = tg3_interrupt_tagged; 11290 flags = IRQF_SHARED; 11291 } 11292 11293 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 11294} 11295 11296static int tg3_test_interrupt(struct tg3 *tp) 11297{ 11298 struct tg3_napi *tnapi = &tp->napi[0]; 11299 struct net_device *dev = tp->dev; 11300 int err, i, intr_ok = 0; 11301 u32 val; 11302 11303 if (!netif_running(dev)) 11304 return -ENODEV; 11305 11306 tg3_disable_ints(tp); 11307 11308 free_irq(tnapi->irq_vec, tnapi); 11309 11310 /* 11311 * Turn off MSI one shot mode. Otherwise this test has no 11312 * observable way to know whether the interrupt was delivered. 11313 */ 11314 if (tg3_flag(tp, 57765_PLUS)) { 11315 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 11316 tw32(MSGINT_MODE, val); 11317 } 11318 11319 err = request_irq(tnapi->irq_vec, tg3_test_isr, 11320 IRQF_SHARED, dev->name, tnapi); 11321 if (err) 11322 return err; 11323 11324 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 11325 tg3_enable_ints(tp); 11326 11327 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11328 tnapi->coal_now); 11329 11330 for (i = 0; i < 5; i++) { 11331 u32 int_mbox, misc_host_ctrl; 11332 11333 int_mbox = tr32_mailbox(tnapi->int_mbox); 11334 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 11335 11336 if ((int_mbox != 0) || 11337 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 11338 intr_ok = 1; 11339 break; 11340 } 11341 11342 if (tg3_flag(tp, 57765_PLUS) && 11343 tnapi->hw_status->status_tag != tnapi->last_tag) 11344 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 11345 11346 msleep(10); 11347 } 11348 11349 tg3_disable_ints(tp); 11350 11351 free_irq(tnapi->irq_vec, tnapi); 11352 11353 err = tg3_request_irq(tp, 0); 11354 11355 if (err) 11356 return err; 11357 11358 if (intr_ok) { 11359 /* Reenable MSI one shot mode. */ 11360 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 11361 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 11362 tw32(MSGINT_MODE, val); 11363 } 11364 return 0; 11365 } 11366 11367 return -EIO; 11368} 11369 11370/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 11371 * successfully restored 11372 */ 11373static int tg3_test_msi(struct tg3 *tp) 11374{ 11375 int err; 11376 u16 pci_cmd; 11377 11378 if (!tg3_flag(tp, USING_MSI)) 11379 return 0; 11380 11381 /* Turn off SERR reporting in case MSI terminates with Master 11382 * Abort. 11383 */ 11384 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 11385 pci_write_config_word(tp->pdev, PCI_COMMAND, 11386 pci_cmd & ~PCI_COMMAND_SERR); 11387 11388 err = tg3_test_interrupt(tp); 11389 11390 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 11391 11392 if (!err) 11393 return 0; 11394 11395 /* other failures */ 11396 if (err != -EIO) 11397 return err; 11398 11399 /* MSI test failed, go back to INTx mode */ 11400 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 11401 "to INTx mode. Please report this failure to the PCI " 11402 "maintainer and include system chipset information\n"); 11403 11404 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11405 11406 pci_disable_msi(tp->pdev); 11407 11408 tg3_flag_clear(tp, USING_MSI); 11409 tp->napi[0].irq_vec = tp->pdev->irq; 11410 11411 err = tg3_request_irq(tp, 0); 11412 if (err) 11413 return err; 11414 11415 /* Need to reset the chip because the MSI cycle may have terminated 11416 * with Master Abort. 11417 */ 11418 tg3_full_lock(tp, 1); 11419 11420 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11421 err = tg3_init_hw(tp, true); 11422 11423 tg3_full_unlock(tp); 11424 11425 if (err) 11426 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11427 11428 return err; 11429} 11430 11431static int tg3_request_firmware(struct tg3 *tp) 11432{ 11433 const struct tg3_firmware_hdr *fw_hdr; 11434 11435 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 11436 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 11437 tp->fw_needed); 11438 return -ENOENT; 11439 } 11440 11441 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 11442 11443 /* Firmware blob starts with version numbers, followed by 11444 * start address and _full_ length including BSS sections 11445 * (which must be longer than the actual data, of course 11446 */ 11447 11448 tp->fw_len = be32_to_cpu(fw_hdr->len); /* includes bss */ 11449 if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) { 11450 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 11451 tp->fw_len, tp->fw_needed); 11452 release_firmware(tp->fw); 11453 tp->fw = NULL; 11454 return -EINVAL; 11455 } 11456 11457 /* We no longer need firmware; we have it. */ 11458 tp->fw_needed = NULL; 11459 return 0; 11460} 11461 11462static u32 tg3_irq_count(struct tg3 *tp) 11463{ 11464 u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt); 11465 11466 if (irq_cnt > 1) { 11467 /* We want as many rx rings enabled as there are cpus. 11468 * In multiqueue MSI-X mode, the first MSI-X vector 11469 * only deals with link interrupts, etc, so we add 11470 * one to the number of vectors we are requesting. 11471 */ 11472 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max); 11473 } 11474 11475 return irq_cnt; 11476} 11477 11478static bool tg3_enable_msix(struct tg3 *tp) 11479{ 11480 int i, rc; 11481 struct msix_entry msix_ent[TG3_IRQ_MAX_VECS]; 11482 11483 tp->txq_cnt = tp->txq_req; 11484 tp->rxq_cnt = tp->rxq_req; 11485 if (!tp->rxq_cnt) 11486 tp->rxq_cnt = netif_get_num_default_rss_queues(); 11487 if (tp->rxq_cnt > tp->rxq_max) 11488 tp->rxq_cnt = tp->rxq_max; 11489 11490 /* Disable multiple TX rings by default. Simple round-robin hardware 11491 * scheduling of the TX rings can cause starvation of rings with 11492 * small packets when other rings have TSO or jumbo packets. 11493 */ 11494 if (!tp->txq_req) 11495 tp->txq_cnt = 1; 11496 11497 tp->irq_cnt = tg3_irq_count(tp); 11498 11499 for (i = 0; i < tp->irq_max; i++) { 11500 msix_ent[i].entry = i; 11501 msix_ent[i].vector = 0; 11502 } 11503 11504 rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt); 11505 if (rc < 0) { 11506 return false; 11507 } else if (rc < tp->irq_cnt) { 11508 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 11509 tp->irq_cnt, rc); 11510 tp->irq_cnt = rc; 11511 tp->rxq_cnt = max(rc - 1, 1); 11512 if (tp->txq_cnt) 11513 tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max); 11514 } 11515 11516 for (i = 0; i < tp->irq_max; i++) 11517 tp->napi[i].irq_vec = msix_ent[i].vector; 11518 11519 if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) { 11520 pci_disable_msix(tp->pdev); 11521 return false; 11522 } 11523 11524 if (tp->irq_cnt == 1) 11525 return true; 11526 11527 tg3_flag_set(tp, ENABLE_RSS); 11528 11529 if (tp->txq_cnt > 1) 11530 tg3_flag_set(tp, ENABLE_TSS); 11531 11532 netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt); 11533 11534 return true; 11535} 11536 11537static void tg3_ints_init(struct tg3 *tp) 11538{ 11539 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 11540 !tg3_flag(tp, TAGGED_STATUS)) { 11541 /* All MSI supporting chips should support tagged 11542 * status. Assert that this is the case. 11543 */ 11544 netdev_warn(tp->dev, 11545 "MSI without TAGGED_STATUS? Not using MSI\n"); 11546 goto defcfg; 11547 } 11548 11549 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 11550 tg3_flag_set(tp, USING_MSIX); 11551 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 11552 tg3_flag_set(tp, USING_MSI); 11553 11554 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11555 u32 msi_mode = tr32(MSGINT_MODE); 11556 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 11557 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 11558 if (!tg3_flag(tp, 1SHOT_MSI)) 11559 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 11560 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 11561 } 11562defcfg: 11563 if (!tg3_flag(tp, USING_MSIX)) { 11564 tp->irq_cnt = 1; 11565 tp->napi[0].irq_vec = tp->pdev->irq; 11566 } 11567 11568 if (tp->irq_cnt == 1) { 11569 tp->txq_cnt = 1; 11570 tp->rxq_cnt = 1; 11571 netif_set_real_num_tx_queues(tp->dev, 1); 11572 netif_set_real_num_rx_queues(tp->dev, 1); 11573 } 11574} 11575 11576static void tg3_ints_fini(struct tg3 *tp) 11577{ 11578 if (tg3_flag(tp, USING_MSIX)) 11579 pci_disable_msix(tp->pdev); 11580 else if (tg3_flag(tp, USING_MSI)) 11581 pci_disable_msi(tp->pdev); 11582 tg3_flag_clear(tp, USING_MSI); 11583 tg3_flag_clear(tp, USING_MSIX); 11584 tg3_flag_clear(tp, ENABLE_RSS); 11585 tg3_flag_clear(tp, ENABLE_TSS); 11586} 11587 11588static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, 11589 bool init) 11590{ 11591 struct net_device *dev = tp->dev; 11592 int i, err; 11593 11594 /* 11595 * Setup interrupts first so we know how 11596 * many NAPI resources to allocate 11597 */ 11598 tg3_ints_init(tp); 11599 11600 tg3_rss_check_indir_tbl(tp); 11601 11602 /* The placement of this call is tied 11603 * to the setup and use of Host TX descriptors. 11604 */ 11605 err = tg3_alloc_consistent(tp); 11606 if (err) 11607 goto out_ints_fini; 11608 11609 tg3_napi_init(tp); 11610 11611 tg3_napi_enable(tp); 11612 11613 for (i = 0; i < tp->irq_cnt; i++) { 11614 err = tg3_request_irq(tp, i); 11615 if (err) { 11616 for (i--; i >= 0; i--) { 11617 struct tg3_napi *tnapi = &tp->napi[i]; 11618 11619 free_irq(tnapi->irq_vec, tnapi); 11620 } 11621 goto out_napi_fini; 11622 } 11623 } 11624 11625 tg3_full_lock(tp, 0); 11626 11627 if (init) 11628 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 11629 11630 err = tg3_init_hw(tp, reset_phy); 11631 if (err) { 11632 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11633 tg3_free_rings(tp); 11634 } 11635 11636 tg3_full_unlock(tp); 11637 11638 if (err) 11639 goto out_free_irq; 11640 11641 if (test_irq && tg3_flag(tp, USING_MSI)) { 11642 err = tg3_test_msi(tp); 11643 11644 if (err) { 11645 tg3_full_lock(tp, 0); 11646 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11647 tg3_free_rings(tp); 11648 tg3_full_unlock(tp); 11649 11650 goto out_napi_fini; 11651 } 11652 11653 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 11654 u32 val = tr32(PCIE_TRANSACTION_CFG); 11655 11656 tw32(PCIE_TRANSACTION_CFG, 11657 val | PCIE_TRANS_CFG_1SHOT_MSI); 11658 } 11659 } 11660 11661 tg3_phy_start(tp); 11662 11663 tg3_hwmon_open(tp); 11664 11665 tg3_full_lock(tp, 0); 11666 11667 tg3_timer_start(tp); 11668 tg3_flag_set(tp, INIT_COMPLETE); 11669 tg3_enable_ints(tp); 11670 11671 tg3_ptp_resume(tp); 11672 11673 tg3_full_unlock(tp); 11674 11675 netif_tx_start_all_queues(dev); 11676 11677 /* 11678 * Reset loopback feature if it was turned on while the device was down 11679 * make sure that it's installed properly now. 11680 */ 11681 if (dev->features & NETIF_F_LOOPBACK) 11682 tg3_set_loopback(dev, dev->features); 11683 11684 return 0; 11685 11686out_free_irq: 11687 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11688 struct tg3_napi *tnapi = &tp->napi[i]; 11689 free_irq(tnapi->irq_vec, tnapi); 11690 } 11691 11692out_napi_fini: 11693 tg3_napi_disable(tp); 11694 tg3_napi_fini(tp); 11695 tg3_free_consistent(tp); 11696 11697out_ints_fini: 11698 tg3_ints_fini(tp); 11699 11700 return err; 11701} 11702 11703static void tg3_stop(struct tg3 *tp) 11704{ 11705 int i; 11706 11707 tg3_reset_task_cancel(tp); 11708 tg3_netif_stop(tp); 11709 11710 tg3_timer_stop(tp); 11711 11712 tg3_hwmon_close(tp); 11713 11714 tg3_phy_stop(tp); 11715 11716 tg3_full_lock(tp, 1); 11717 11718 tg3_disable_ints(tp); 11719 11720 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11721 tg3_free_rings(tp); 11722 tg3_flag_clear(tp, INIT_COMPLETE); 11723 11724 tg3_full_unlock(tp); 11725 11726 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11727 struct tg3_napi *tnapi = &tp->napi[i]; 11728 free_irq(tnapi->irq_vec, tnapi); 11729 } 11730 11731 tg3_ints_fini(tp); 11732 11733 tg3_napi_fini(tp); 11734 11735 tg3_free_consistent(tp); 11736} 11737 11738static int tg3_open(struct net_device *dev) 11739{ 11740 struct tg3 *tp = netdev_priv(dev); 11741 int err; 11742 11743 if (tp->pcierr_recovery) { 11744 netdev_err(dev, "Failed to open device. PCI error recovery " 11745 "in progress\n"); 11746 return -EAGAIN; 11747 } 11748 11749 if (tp->fw_needed) { 11750 err = tg3_request_firmware(tp); 11751 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 11752 if (err) { 11753 netdev_warn(tp->dev, "EEE capability disabled\n"); 11754 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11755 } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 11756 netdev_warn(tp->dev, "EEE capability restored\n"); 11757 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 11758 } 11759 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 11760 if (err) 11761 return err; 11762 } else if (err) { 11763 netdev_warn(tp->dev, "TSO capability disabled\n"); 11764 tg3_flag_clear(tp, TSO_CAPABLE); 11765 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 11766 netdev_notice(tp->dev, "TSO capability restored\n"); 11767 tg3_flag_set(tp, TSO_CAPABLE); 11768 } 11769 } 11770 11771 tg3_carrier_off(tp); 11772 11773 err = tg3_power_up(tp); 11774 if (err) 11775 return err; 11776 11777 tg3_full_lock(tp, 0); 11778 11779 tg3_disable_ints(tp); 11780 tg3_flag_clear(tp, INIT_COMPLETE); 11781 11782 tg3_full_unlock(tp); 11783 11784 err = tg3_start(tp, 11785 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN), 11786 true, true); 11787 if (err) { 11788 tg3_frob_aux_power(tp, false); 11789 pci_set_power_state(tp->pdev, PCI_D3hot); 11790 } 11791 11792 return err; 11793} 11794 11795static int tg3_close(struct net_device *dev) 11796{ 11797 struct tg3 *tp = netdev_priv(dev); 11798 11799 if (tp->pcierr_recovery) { 11800 netdev_err(dev, "Failed to close device. PCI error recovery " 11801 "in progress\n"); 11802 return -EAGAIN; 11803 } 11804 11805 tg3_stop(tp); 11806 11807 if (pci_device_is_present(tp->pdev)) { 11808 tg3_power_down_prepare(tp); 11809 11810 tg3_carrier_off(tp); 11811 } 11812 return 0; 11813} 11814 11815static inline u64 get_stat64(tg3_stat64_t *val) 11816{ 11817 return ((u64)val->high << 32) | ((u64)val->low); 11818} 11819 11820static u64 tg3_calc_crc_errors(struct tg3 *tp) 11821{ 11822 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11823 11824 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11825 (tg3_asic_rev(tp) == ASIC_REV_5700 || 11826 tg3_asic_rev(tp) == ASIC_REV_5701)) { 11827 u32 val; 11828 11829 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 11830 tg3_writephy(tp, MII_TG3_TEST1, 11831 val | MII_TG3_TEST1_CRC_EN); 11832 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 11833 } else 11834 val = 0; 11835 11836 tp->phy_crc_errors += val; 11837 11838 return tp->phy_crc_errors; 11839 } 11840 11841 return get_stat64(&hw_stats->rx_fcs_errors); 11842} 11843 11844#define ESTAT_ADD(member) \ 11845 estats->member = old_estats->member + \ 11846 get_stat64(&hw_stats->member) 11847 11848static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 11849{ 11850 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 11851 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11852 11853 ESTAT_ADD(rx_octets); 11854 ESTAT_ADD(rx_fragments); 11855 ESTAT_ADD(rx_ucast_packets); 11856 ESTAT_ADD(rx_mcast_packets); 11857 ESTAT_ADD(rx_bcast_packets); 11858 ESTAT_ADD(rx_fcs_errors); 11859 ESTAT_ADD(rx_align_errors); 11860 ESTAT_ADD(rx_xon_pause_rcvd); 11861 ESTAT_ADD(rx_xoff_pause_rcvd); 11862 ESTAT_ADD(rx_mac_ctrl_rcvd); 11863 ESTAT_ADD(rx_xoff_entered); 11864 ESTAT_ADD(rx_frame_too_long_errors); 11865 ESTAT_ADD(rx_jabbers); 11866 ESTAT_ADD(rx_undersize_packets); 11867 ESTAT_ADD(rx_in_length_errors); 11868 ESTAT_ADD(rx_out_length_errors); 11869 ESTAT_ADD(rx_64_or_less_octet_packets); 11870 ESTAT_ADD(rx_65_to_127_octet_packets); 11871 ESTAT_ADD(rx_128_to_255_octet_packets); 11872 ESTAT_ADD(rx_256_to_511_octet_packets); 11873 ESTAT_ADD(rx_512_to_1023_octet_packets); 11874 ESTAT_ADD(rx_1024_to_1522_octet_packets); 11875 ESTAT_ADD(rx_1523_to_2047_octet_packets); 11876 ESTAT_ADD(rx_2048_to_4095_octet_packets); 11877 ESTAT_ADD(rx_4096_to_8191_octet_packets); 11878 ESTAT_ADD(rx_8192_to_9022_octet_packets); 11879 11880 ESTAT_ADD(tx_octets); 11881 ESTAT_ADD(tx_collisions); 11882 ESTAT_ADD(tx_xon_sent); 11883 ESTAT_ADD(tx_xoff_sent); 11884 ESTAT_ADD(tx_flow_control); 11885 ESTAT_ADD(tx_mac_errors); 11886 ESTAT_ADD(tx_single_collisions); 11887 ESTAT_ADD(tx_mult_collisions); 11888 ESTAT_ADD(tx_deferred); 11889 ESTAT_ADD(tx_excessive_collisions); 11890 ESTAT_ADD(tx_late_collisions); 11891 ESTAT_ADD(tx_collide_2times); 11892 ESTAT_ADD(tx_collide_3times); 11893 ESTAT_ADD(tx_collide_4times); 11894 ESTAT_ADD(tx_collide_5times); 11895 ESTAT_ADD(tx_collide_6times); 11896 ESTAT_ADD(tx_collide_7times); 11897 ESTAT_ADD(tx_collide_8times); 11898 ESTAT_ADD(tx_collide_9times); 11899 ESTAT_ADD(tx_collide_10times); 11900 ESTAT_ADD(tx_collide_11times); 11901 ESTAT_ADD(tx_collide_12times); 11902 ESTAT_ADD(tx_collide_13times); 11903 ESTAT_ADD(tx_collide_14times); 11904 ESTAT_ADD(tx_collide_15times); 11905 ESTAT_ADD(tx_ucast_packets); 11906 ESTAT_ADD(tx_mcast_packets); 11907 ESTAT_ADD(tx_bcast_packets); 11908 ESTAT_ADD(tx_carrier_sense_errors); 11909 ESTAT_ADD(tx_discards); 11910 ESTAT_ADD(tx_errors); 11911 11912 ESTAT_ADD(dma_writeq_full); 11913 ESTAT_ADD(dma_write_prioq_full); 11914 ESTAT_ADD(rxbds_empty); 11915 ESTAT_ADD(rx_discards); 11916 ESTAT_ADD(rx_errors); 11917 ESTAT_ADD(rx_threshold_hit); 11918 11919 ESTAT_ADD(dma_readq_full); 11920 ESTAT_ADD(dma_read_prioq_full); 11921 ESTAT_ADD(tx_comp_queue_full); 11922 11923 ESTAT_ADD(ring_set_send_prod_index); 11924 ESTAT_ADD(ring_status_update); 11925 ESTAT_ADD(nic_irqs); 11926 ESTAT_ADD(nic_avoided_irqs); 11927 ESTAT_ADD(nic_tx_threshold_hit); 11928 11929 ESTAT_ADD(mbuf_lwm_thresh_hit); 11930} 11931 11932static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 11933{ 11934 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 11935 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11936 unsigned long rx_dropped; 11937 unsigned long tx_dropped; 11938 int i; 11939 11940 stats->rx_packets = old_stats->rx_packets + 11941 get_stat64(&hw_stats->rx_ucast_packets) + 11942 get_stat64(&hw_stats->rx_mcast_packets) + 11943 get_stat64(&hw_stats->rx_bcast_packets); 11944 11945 stats->tx_packets = old_stats->tx_packets + 11946 get_stat64(&hw_stats->tx_ucast_packets) + 11947 get_stat64(&hw_stats->tx_mcast_packets) + 11948 get_stat64(&hw_stats->tx_bcast_packets); 11949 11950 stats->rx_bytes = old_stats->rx_bytes + 11951 get_stat64(&hw_stats->rx_octets); 11952 stats->tx_bytes = old_stats->tx_bytes + 11953 get_stat64(&hw_stats->tx_octets); 11954 11955 stats->rx_errors = old_stats->rx_errors + 11956 get_stat64(&hw_stats->rx_errors); 11957 stats->tx_errors = old_stats->tx_errors + 11958 get_stat64(&hw_stats->tx_errors) + 11959 get_stat64(&hw_stats->tx_mac_errors) + 11960 get_stat64(&hw_stats->tx_carrier_sense_errors) + 11961 get_stat64(&hw_stats->tx_discards); 11962 11963 stats->multicast = old_stats->multicast + 11964 get_stat64(&hw_stats->rx_mcast_packets); 11965 stats->collisions = old_stats->collisions + 11966 get_stat64(&hw_stats->tx_collisions); 11967 11968 stats->rx_length_errors = old_stats->rx_length_errors + 11969 get_stat64(&hw_stats->rx_frame_too_long_errors) + 11970 get_stat64(&hw_stats->rx_undersize_packets); 11971 11972 stats->rx_frame_errors = old_stats->rx_frame_errors + 11973 get_stat64(&hw_stats->rx_align_errors); 11974 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 11975 get_stat64(&hw_stats->tx_discards); 11976 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 11977 get_stat64(&hw_stats->tx_carrier_sense_errors); 11978 11979 stats->rx_crc_errors = old_stats->rx_crc_errors + 11980 tg3_calc_crc_errors(tp); 11981 11982 stats->rx_missed_errors = old_stats->rx_missed_errors + 11983 get_stat64(&hw_stats->rx_discards); 11984 11985 /* Aggregate per-queue counters. The per-queue counters are updated 11986 * by a single writer, race-free. The result computed by this loop 11987 * might not be 100% accurate (counters can be updated in the middle of 11988 * the loop) but the next tg3_get_nstats() will recompute the current 11989 * value so it is acceptable. 11990 * 11991 * Note that these counters wrap around at 4G on 32bit machines. 11992 */ 11993 rx_dropped = (unsigned long)(old_stats->rx_dropped); 11994 tx_dropped = (unsigned long)(old_stats->tx_dropped); 11995 11996 for (i = 0; i < tp->irq_cnt; i++) { 11997 struct tg3_napi *tnapi = &tp->napi[i]; 11998 11999 rx_dropped += tnapi->rx_dropped; 12000 tx_dropped += tnapi->tx_dropped; 12001 } 12002 12003 stats->rx_dropped = rx_dropped; 12004 stats->tx_dropped = tx_dropped; 12005} 12006 12007static int tg3_get_regs_len(struct net_device *dev) 12008{ 12009 return TG3_REG_BLK_SIZE; 12010} 12011 12012static void tg3_get_regs(struct net_device *dev, 12013 struct ethtool_regs *regs, void *_p) 12014{ 12015 struct tg3 *tp = netdev_priv(dev); 12016 12017 regs->version = 0; 12018 12019 memset(_p, 0, TG3_REG_BLK_SIZE); 12020 12021 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 12022 return; 12023 12024 tg3_full_lock(tp, 0); 12025 12026 tg3_dump_legacy_regs(tp, (u32 *)_p); 12027 12028 tg3_full_unlock(tp); 12029} 12030 12031static int tg3_get_eeprom_len(struct net_device *dev) 12032{ 12033 struct tg3 *tp = netdev_priv(dev); 12034 12035 return tp->nvram_size; 12036} 12037 12038static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12039{ 12040 struct tg3 *tp = netdev_priv(dev); 12041 int ret, cpmu_restore = 0; 12042 u8 *pd; 12043 u32 i, offset, len, b_offset, b_count, cpmu_val = 0; 12044 __be32 val; 12045 12046 if (tg3_flag(tp, NO_NVRAM)) 12047 return -EINVAL; 12048 12049 offset = eeprom->offset; 12050 len = eeprom->len; 12051 eeprom->len = 0; 12052 12053 eeprom->magic = TG3_EEPROM_MAGIC; 12054 12055 /* Override clock, link aware and link idle modes */ 12056 if (tg3_flag(tp, CPMU_PRESENT)) { 12057 cpmu_val = tr32(TG3_CPMU_CTRL); 12058 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE | 12059 CPMU_CTRL_LINK_IDLE_MODE)) { 12060 tw32(TG3_CPMU_CTRL, cpmu_val & 12061 ~(CPMU_CTRL_LINK_AWARE_MODE | 12062 CPMU_CTRL_LINK_IDLE_MODE)); 12063 cpmu_restore = 1; 12064 } 12065 } 12066 tg3_override_clk(tp); 12067 12068 if (offset & 3) { 12069 /* adjustments to start on required 4 byte boundary */ 12070 b_offset = offset & 3; 12071 b_count = 4 - b_offset; 12072 if (b_count > len) { 12073 /* i.e. offset=1 len=2 */ 12074 b_count = len; 12075 } 12076 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 12077 if (ret) 12078 goto eeprom_done; 12079 memcpy(data, ((char *)&val) + b_offset, b_count); 12080 len -= b_count; 12081 offset += b_count; 12082 eeprom->len += b_count; 12083 } 12084 12085 /* read bytes up to the last 4 byte boundary */ 12086 pd = &data[eeprom->len]; 12087 for (i = 0; i < (len - (len & 3)); i += 4) { 12088 ret = tg3_nvram_read_be32(tp, offset + i, &val); 12089 if (ret) { 12090 if (i) 12091 i -= 4; 12092 eeprom->len += i; 12093 goto eeprom_done; 12094 } 12095 memcpy(pd + i, &val, 4); 12096 if (need_resched()) { 12097 if (signal_pending(current)) { 12098 eeprom->len += i; 12099 ret = -EINTR; 12100 goto eeprom_done; 12101 } 12102 cond_resched(); 12103 } 12104 } 12105 eeprom->len += i; 12106 12107 if (len & 3) { 12108 /* read last bytes not ending on 4 byte boundary */ 12109 pd = &data[eeprom->len]; 12110 b_count = len & 3; 12111 b_offset = offset + len - b_count; 12112 ret = tg3_nvram_read_be32(tp, b_offset, &val); 12113 if (ret) 12114 goto eeprom_done; 12115 memcpy(pd, &val, b_count); 12116 eeprom->len += b_count; 12117 } 12118 ret = 0; 12119 12120eeprom_done: 12121 /* Restore clock, link aware and link idle modes */ 12122 tg3_restore_clk(tp); 12123 if (cpmu_restore) 12124 tw32(TG3_CPMU_CTRL, cpmu_val); 12125 12126 return ret; 12127} 12128 12129static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12130{ 12131 struct tg3 *tp = netdev_priv(dev); 12132 int ret; 12133 u32 offset, len, b_offset, odd_len; 12134 u8 *buf; 12135 __be32 start = 0, end; 12136 12137 if (tg3_flag(tp, NO_NVRAM) || 12138 eeprom->magic != TG3_EEPROM_MAGIC) 12139 return -EINVAL; 12140 12141 offset = eeprom->offset; 12142 len = eeprom->len; 12143 12144 if ((b_offset = (offset & 3))) { 12145 /* adjustments to start on required 4 byte boundary */ 12146 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 12147 if (ret) 12148 return ret; 12149 len += b_offset; 12150 offset &= ~3; 12151 if (len < 4) 12152 len = 4; 12153 } 12154 12155 odd_len = 0; 12156 if (len & 3) { 12157 /* adjustments to end on required 4 byte boundary */ 12158 odd_len = 1; 12159 len = (len + 3) & ~3; 12160 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 12161 if (ret) 12162 return ret; 12163 } 12164 12165 buf = data; 12166 if (b_offset || odd_len) { 12167 buf = kmalloc(len, GFP_KERNEL); 12168 if (!buf) 12169 return -ENOMEM; 12170 if (b_offset) 12171 memcpy(buf, &start, 4); 12172 if (odd_len) 12173 memcpy(buf+len-4, &end, 4); 12174 memcpy(buf + b_offset, data, eeprom->len); 12175 } 12176 12177 ret = tg3_nvram_write_block(tp, offset, len, buf); 12178 12179 if (buf != data) 12180 kfree(buf); 12181 12182 return ret; 12183} 12184 12185static int tg3_get_link_ksettings(struct net_device *dev, 12186 struct ethtool_link_ksettings *cmd) 12187{ 12188 struct tg3 *tp = netdev_priv(dev); 12189 u32 supported, advertising; 12190 12191 if (tg3_flag(tp, USE_PHYLIB)) { 12192 struct phy_device *phydev; 12193 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12194 return -EAGAIN; 12195 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12196 phy_ethtool_ksettings_get(phydev, cmd); 12197 12198 return 0; 12199 } 12200 12201 supported = (SUPPORTED_Autoneg); 12202 12203 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12204 supported |= (SUPPORTED_1000baseT_Half | 12205 SUPPORTED_1000baseT_Full); 12206 12207 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12208 supported |= (SUPPORTED_100baseT_Half | 12209 SUPPORTED_100baseT_Full | 12210 SUPPORTED_10baseT_Half | 12211 SUPPORTED_10baseT_Full | 12212 SUPPORTED_TP); 12213 cmd->base.port = PORT_TP; 12214 } else { 12215 supported |= SUPPORTED_FIBRE; 12216 cmd->base.port = PORT_FIBRE; 12217 } 12218 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 12219 supported); 12220 12221 advertising = tp->link_config.advertising; 12222 if (tg3_flag(tp, PAUSE_AUTONEG)) { 12223 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 12224 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12225 advertising |= ADVERTISED_Pause; 12226 } else { 12227 advertising |= ADVERTISED_Pause | 12228 ADVERTISED_Asym_Pause; 12229 } 12230 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12231 advertising |= ADVERTISED_Asym_Pause; 12232 } 12233 } 12234 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 12235 advertising); 12236 12237 if (netif_running(dev) && tp->link_up) { 12238 cmd->base.speed = tp->link_config.active_speed; 12239 cmd->base.duplex = tp->link_config.active_duplex; 12240 ethtool_convert_legacy_u32_to_link_mode( 12241 cmd->link_modes.lp_advertising, 12242 tp->link_config.rmt_adv); 12243 12244 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12245 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 12246 cmd->base.eth_tp_mdix = ETH_TP_MDI_X; 12247 else 12248 cmd->base.eth_tp_mdix = ETH_TP_MDI; 12249 } 12250 } else { 12251 cmd->base.speed = SPEED_UNKNOWN; 12252 cmd->base.duplex = DUPLEX_UNKNOWN; 12253 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; 12254 } 12255 cmd->base.phy_address = tp->phy_addr; 12256 cmd->base.autoneg = tp->link_config.autoneg; 12257 return 0; 12258} 12259 12260static int tg3_set_link_ksettings(struct net_device *dev, 12261 const struct ethtool_link_ksettings *cmd) 12262{ 12263 struct tg3 *tp = netdev_priv(dev); 12264 u32 speed = cmd->base.speed; 12265 u32 advertising; 12266 12267 if (tg3_flag(tp, USE_PHYLIB)) { 12268 struct phy_device *phydev; 12269 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12270 return -EAGAIN; 12271 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12272 return phy_ethtool_ksettings_set(phydev, cmd); 12273 } 12274 12275 if (cmd->base.autoneg != AUTONEG_ENABLE && 12276 cmd->base.autoneg != AUTONEG_DISABLE) 12277 return -EINVAL; 12278 12279 if (cmd->base.autoneg == AUTONEG_DISABLE && 12280 cmd->base.duplex != DUPLEX_FULL && 12281 cmd->base.duplex != DUPLEX_HALF) 12282 return -EINVAL; 12283 12284 ethtool_convert_link_mode_to_legacy_u32(&advertising, 12285 cmd->link_modes.advertising); 12286 12287 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12288 u32 mask = ADVERTISED_Autoneg | 12289 ADVERTISED_Pause | 12290 ADVERTISED_Asym_Pause; 12291 12292 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12293 mask |= ADVERTISED_1000baseT_Half | 12294 ADVERTISED_1000baseT_Full; 12295 12296 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 12297 mask |= ADVERTISED_100baseT_Half | 12298 ADVERTISED_100baseT_Full | 12299 ADVERTISED_10baseT_Half | 12300 ADVERTISED_10baseT_Full | 12301 ADVERTISED_TP; 12302 else 12303 mask |= ADVERTISED_FIBRE; 12304 12305 if (advertising & ~mask) 12306 return -EINVAL; 12307 12308 mask &= (ADVERTISED_1000baseT_Half | 12309 ADVERTISED_1000baseT_Full | 12310 ADVERTISED_100baseT_Half | 12311 ADVERTISED_100baseT_Full | 12312 ADVERTISED_10baseT_Half | 12313 ADVERTISED_10baseT_Full); 12314 12315 advertising &= mask; 12316 } else { 12317 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 12318 if (speed != SPEED_1000) 12319 return -EINVAL; 12320 12321 if (cmd->base.duplex != DUPLEX_FULL) 12322 return -EINVAL; 12323 } else { 12324 if (speed != SPEED_100 && 12325 speed != SPEED_10) 12326 return -EINVAL; 12327 } 12328 } 12329 12330 tg3_full_lock(tp, 0); 12331 12332 tp->link_config.autoneg = cmd->base.autoneg; 12333 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12334 tp->link_config.advertising = (advertising | 12335 ADVERTISED_Autoneg); 12336 tp->link_config.speed = SPEED_UNKNOWN; 12337 tp->link_config.duplex = DUPLEX_UNKNOWN; 12338 } else { 12339 tp->link_config.advertising = 0; 12340 tp->link_config.speed = speed; 12341 tp->link_config.duplex = cmd->base.duplex; 12342 } 12343 12344 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12345 12346 tg3_warn_mgmt_link_flap(tp); 12347 12348 if (netif_running(dev)) 12349 tg3_setup_phy(tp, true); 12350 12351 tg3_full_unlock(tp); 12352 12353 return 0; 12354} 12355 12356static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 12357{ 12358 struct tg3 *tp = netdev_priv(dev); 12359 12360 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 12361 strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 12362 strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 12363} 12364 12365static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12366{ 12367 struct tg3 *tp = netdev_priv(dev); 12368 12369 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 12370 wol->supported = WAKE_MAGIC; 12371 else 12372 wol->supported = 0; 12373 wol->wolopts = 0; 12374 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 12375 wol->wolopts = WAKE_MAGIC; 12376 memset(&wol->sopass, 0, sizeof(wol->sopass)); 12377} 12378 12379static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12380{ 12381 struct tg3 *tp = netdev_priv(dev); 12382 struct device *dp = &tp->pdev->dev; 12383 12384 if (wol->wolopts & ~WAKE_MAGIC) 12385 return -EINVAL; 12386 if ((wol->wolopts & WAKE_MAGIC) && 12387 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 12388 return -EINVAL; 12389 12390 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 12391 12392 if (device_may_wakeup(dp)) 12393 tg3_flag_set(tp, WOL_ENABLE); 12394 else 12395 tg3_flag_clear(tp, WOL_ENABLE); 12396 12397 return 0; 12398} 12399 12400static u32 tg3_get_msglevel(struct net_device *dev) 12401{ 12402 struct tg3 *tp = netdev_priv(dev); 12403 return tp->msg_enable; 12404} 12405 12406static void tg3_set_msglevel(struct net_device *dev, u32 value) 12407{ 12408 struct tg3 *tp = netdev_priv(dev); 12409 tp->msg_enable = value; 12410} 12411 12412static int tg3_nway_reset(struct net_device *dev) 12413{ 12414 struct tg3 *tp = netdev_priv(dev); 12415 int r; 12416 12417 if (!netif_running(dev)) 12418 return -EAGAIN; 12419 12420 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12421 return -EINVAL; 12422 12423 tg3_warn_mgmt_link_flap(tp); 12424 12425 if (tg3_flag(tp, USE_PHYLIB)) { 12426 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12427 return -EAGAIN; 12428 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 12429 } else { 12430 u32 bmcr; 12431 12432 spin_lock_bh(&tp->lock); 12433 r = -EINVAL; 12434 tg3_readphy(tp, MII_BMCR, &bmcr); 12435 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 12436 ((bmcr & BMCR_ANENABLE) || 12437 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 12438 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 12439 BMCR_ANENABLE); 12440 r = 0; 12441 } 12442 spin_unlock_bh(&tp->lock); 12443 } 12444 12445 return r; 12446} 12447 12448static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 12449{ 12450 struct tg3 *tp = netdev_priv(dev); 12451 12452 ering->rx_max_pending = tp->rx_std_ring_mask; 12453 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12454 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 12455 else 12456 ering->rx_jumbo_max_pending = 0; 12457 12458 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 12459 12460 ering->rx_pending = tp->rx_pending; 12461 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12462 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 12463 else 12464 ering->rx_jumbo_pending = 0; 12465 12466 ering->tx_pending = tp->napi[0].tx_pending; 12467} 12468 12469static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 12470{ 12471 struct tg3 *tp = netdev_priv(dev); 12472 int i, irq_sync = 0, err = 0; 12473 bool reset_phy = false; 12474 12475 if ((ering->rx_pending > tp->rx_std_ring_mask) || 12476 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 12477 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 12478 (ering->tx_pending <= MAX_SKB_FRAGS) || 12479 (tg3_flag(tp, TSO_BUG) && 12480 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 12481 return -EINVAL; 12482 12483 if (netif_running(dev)) { 12484 tg3_phy_stop(tp); 12485 tg3_netif_stop(tp); 12486 irq_sync = 1; 12487 } 12488 12489 tg3_full_lock(tp, irq_sync); 12490 12491 tp->rx_pending = ering->rx_pending; 12492 12493 if (tg3_flag(tp, MAX_RXPEND_64) && 12494 tp->rx_pending > 63) 12495 tp->rx_pending = 63; 12496 12497 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12498 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 12499 12500 for (i = 0; i < tp->irq_max; i++) 12501 tp->napi[i].tx_pending = ering->tx_pending; 12502 12503 if (netif_running(dev)) { 12504 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12505 /* Reset PHY to avoid PHY lock up */ 12506 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12507 tg3_asic_rev(tp) == ASIC_REV_5719 || 12508 tg3_asic_rev(tp) == ASIC_REV_5720) 12509 reset_phy = true; 12510 12511 err = tg3_restart_hw(tp, reset_phy); 12512 if (!err) 12513 tg3_netif_start(tp); 12514 } 12515 12516 tg3_full_unlock(tp); 12517 12518 if (irq_sync && !err) 12519 tg3_phy_start(tp); 12520 12521 return err; 12522} 12523 12524static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12525{ 12526 struct tg3 *tp = netdev_priv(dev); 12527 12528 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 12529 12530 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 12531 epause->rx_pause = 1; 12532 else 12533 epause->rx_pause = 0; 12534 12535 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 12536 epause->tx_pause = 1; 12537 else 12538 epause->tx_pause = 0; 12539} 12540 12541static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12542{ 12543 struct tg3 *tp = netdev_priv(dev); 12544 int err = 0; 12545 bool reset_phy = false; 12546 12547 if (tp->link_config.autoneg == AUTONEG_ENABLE) 12548 tg3_warn_mgmt_link_flap(tp); 12549 12550 if (tg3_flag(tp, USE_PHYLIB)) { 12551 struct phy_device *phydev; 12552 12553 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12554 12555 if (!phy_validate_pause(phydev, epause)) 12556 return -EINVAL; 12557 12558 tp->link_config.flowctrl = 0; 12559 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause); 12560 if (epause->rx_pause) { 12561 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12562 12563 if (epause->tx_pause) { 12564 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12565 } 12566 } else if (epause->tx_pause) { 12567 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12568 } 12569 12570 if (epause->autoneg) 12571 tg3_flag_set(tp, PAUSE_AUTONEG); 12572 else 12573 tg3_flag_clear(tp, PAUSE_AUTONEG); 12574 12575 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 12576 if (phydev->autoneg) { 12577 /* phy_set_asym_pause() will 12578 * renegotiate the link to inform our 12579 * link partner of our flow control 12580 * settings, even if the flow control 12581 * is forced. Let tg3_adjust_link() 12582 * do the final flow control setup. 12583 */ 12584 return 0; 12585 } 12586 12587 if (!epause->autoneg) 12588 tg3_setup_flow_control(tp, 0, 0); 12589 } 12590 } else { 12591 int irq_sync = 0; 12592 12593 if (netif_running(dev)) { 12594 tg3_netif_stop(tp); 12595 irq_sync = 1; 12596 } 12597 12598 tg3_full_lock(tp, irq_sync); 12599 12600 if (epause->autoneg) 12601 tg3_flag_set(tp, PAUSE_AUTONEG); 12602 else 12603 tg3_flag_clear(tp, PAUSE_AUTONEG); 12604 if (epause->rx_pause) 12605 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12606 else 12607 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 12608 if (epause->tx_pause) 12609 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12610 else 12611 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 12612 12613 if (netif_running(dev)) { 12614 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12615 /* Reset PHY to avoid PHY lock up */ 12616 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12617 tg3_asic_rev(tp) == ASIC_REV_5719 || 12618 tg3_asic_rev(tp) == ASIC_REV_5720) 12619 reset_phy = true; 12620 12621 err = tg3_restart_hw(tp, reset_phy); 12622 if (!err) 12623 tg3_netif_start(tp); 12624 } 12625 12626 tg3_full_unlock(tp); 12627 } 12628 12629 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12630 12631 return err; 12632} 12633 12634static int tg3_get_sset_count(struct net_device *dev, int sset) 12635{ 12636 switch (sset) { 12637 case ETH_SS_TEST: 12638 return TG3_NUM_TEST; 12639 case ETH_SS_STATS: 12640 return TG3_NUM_STATS; 12641 default: 12642 return -EOPNOTSUPP; 12643 } 12644} 12645 12646static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 12647 u32 *rules __always_unused) 12648{ 12649 struct tg3 *tp = netdev_priv(dev); 12650 12651 if (!tg3_flag(tp, SUPPORT_MSIX)) 12652 return -EOPNOTSUPP; 12653 12654 switch (info->cmd) { 12655 case ETHTOOL_GRXRINGS: 12656 if (netif_running(tp->dev)) 12657 info->data = tp->rxq_cnt; 12658 else { 12659 info->data = num_online_cpus(); 12660 if (info->data > TG3_RSS_MAX_NUM_QS) 12661 info->data = TG3_RSS_MAX_NUM_QS; 12662 } 12663 12664 return 0; 12665 12666 default: 12667 return -EOPNOTSUPP; 12668 } 12669} 12670 12671static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 12672{ 12673 u32 size = 0; 12674 struct tg3 *tp = netdev_priv(dev); 12675 12676 if (tg3_flag(tp, SUPPORT_MSIX)) 12677 size = TG3_RSS_INDIR_TBL_SIZE; 12678 12679 return size; 12680} 12681 12682static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc) 12683{ 12684 struct tg3 *tp = netdev_priv(dev); 12685 int i; 12686 12687 if (hfunc) 12688 *hfunc = ETH_RSS_HASH_TOP; 12689 if (!indir) 12690 return 0; 12691 12692 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12693 indir[i] = tp->rss_ind_tbl[i]; 12694 12695 return 0; 12696} 12697 12698static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, 12699 const u8 hfunc) 12700{ 12701 struct tg3 *tp = netdev_priv(dev); 12702 size_t i; 12703 12704 /* We require at least one supported parameter to be changed and no 12705 * change in any of the unsupported parameters 12706 */ 12707 if (key || 12708 (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)) 12709 return -EOPNOTSUPP; 12710 12711 if (!indir) 12712 return 0; 12713 12714 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12715 tp->rss_ind_tbl[i] = indir[i]; 12716 12717 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 12718 return 0; 12719 12720 /* It is legal to write the indirection 12721 * table while the device is running. 12722 */ 12723 tg3_full_lock(tp, 0); 12724 tg3_rss_write_indir_tbl(tp); 12725 tg3_full_unlock(tp); 12726 12727 return 0; 12728} 12729 12730static void tg3_get_channels(struct net_device *dev, 12731 struct ethtool_channels *channel) 12732{ 12733 struct tg3 *tp = netdev_priv(dev); 12734 u32 deflt_qs = netif_get_num_default_rss_queues(); 12735 12736 channel->max_rx = tp->rxq_max; 12737 channel->max_tx = tp->txq_max; 12738 12739 if (netif_running(dev)) { 12740 channel->rx_count = tp->rxq_cnt; 12741 channel->tx_count = tp->txq_cnt; 12742 } else { 12743 if (tp->rxq_req) 12744 channel->rx_count = tp->rxq_req; 12745 else 12746 channel->rx_count = min(deflt_qs, tp->rxq_max); 12747 12748 if (tp->txq_req) 12749 channel->tx_count = tp->txq_req; 12750 else 12751 channel->tx_count = min(deflt_qs, tp->txq_max); 12752 } 12753} 12754 12755static int tg3_set_channels(struct net_device *dev, 12756 struct ethtool_channels *channel) 12757{ 12758 struct tg3 *tp = netdev_priv(dev); 12759 12760 if (!tg3_flag(tp, SUPPORT_MSIX)) 12761 return -EOPNOTSUPP; 12762 12763 if (channel->rx_count > tp->rxq_max || 12764 channel->tx_count > tp->txq_max) 12765 return -EINVAL; 12766 12767 tp->rxq_req = channel->rx_count; 12768 tp->txq_req = channel->tx_count; 12769 12770 if (!netif_running(dev)) 12771 return 0; 12772 12773 tg3_stop(tp); 12774 12775 tg3_carrier_off(tp); 12776 12777 tg3_start(tp, true, false, false); 12778 12779 return 0; 12780} 12781 12782static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 12783{ 12784 switch (stringset) { 12785 case ETH_SS_STATS: 12786 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 12787 break; 12788 case ETH_SS_TEST: 12789 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 12790 break; 12791 default: 12792 WARN_ON(1); /* we need a WARN() */ 12793 break; 12794 } 12795} 12796 12797static int tg3_set_phys_id(struct net_device *dev, 12798 enum ethtool_phys_id_state state) 12799{ 12800 struct tg3 *tp = netdev_priv(dev); 12801 12802 switch (state) { 12803 case ETHTOOL_ID_ACTIVE: 12804 return 1; /* cycle on/off once per second */ 12805 12806 case ETHTOOL_ID_ON: 12807 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12808 LED_CTRL_1000MBPS_ON | 12809 LED_CTRL_100MBPS_ON | 12810 LED_CTRL_10MBPS_ON | 12811 LED_CTRL_TRAFFIC_OVERRIDE | 12812 LED_CTRL_TRAFFIC_BLINK | 12813 LED_CTRL_TRAFFIC_LED); 12814 break; 12815 12816 case ETHTOOL_ID_OFF: 12817 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12818 LED_CTRL_TRAFFIC_OVERRIDE); 12819 break; 12820 12821 case ETHTOOL_ID_INACTIVE: 12822 tw32(MAC_LED_CTRL, tp->led_ctrl); 12823 break; 12824 } 12825 12826 return 0; 12827} 12828 12829static void tg3_get_ethtool_stats(struct net_device *dev, 12830 struct ethtool_stats *estats, u64 *tmp_stats) 12831{ 12832 struct tg3 *tp = netdev_priv(dev); 12833 12834 if (tp->hw_stats) 12835 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 12836 else 12837 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 12838} 12839 12840static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen) 12841{ 12842 int i; 12843 __be32 *buf; 12844 u32 offset = 0, len = 0; 12845 u32 magic, val; 12846 12847 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 12848 return NULL; 12849 12850 if (magic == TG3_EEPROM_MAGIC) { 12851 for (offset = TG3_NVM_DIR_START; 12852 offset < TG3_NVM_DIR_END; 12853 offset += TG3_NVM_DIRENT_SIZE) { 12854 if (tg3_nvram_read(tp, offset, &val)) 12855 return NULL; 12856 12857 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 12858 TG3_NVM_DIRTYPE_EXTVPD) 12859 break; 12860 } 12861 12862 if (offset != TG3_NVM_DIR_END) { 12863 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 12864 if (tg3_nvram_read(tp, offset + 4, &offset)) 12865 return NULL; 12866 12867 offset = tg3_nvram_logical_addr(tp, offset); 12868 } 12869 } 12870 12871 if (!offset || !len) { 12872 offset = TG3_NVM_VPD_OFF; 12873 len = TG3_NVM_VPD_LEN; 12874 } 12875 12876 buf = kmalloc(len, GFP_KERNEL); 12877 if (buf == NULL) 12878 return NULL; 12879 12880 if (magic == TG3_EEPROM_MAGIC) { 12881 for (i = 0; i < len; i += 4) { 12882 /* The data is in little-endian format in NVRAM. 12883 * Use the big-endian read routines to preserve 12884 * the byte order as it exists in NVRAM. 12885 */ 12886 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 12887 goto error; 12888 } 12889 } else { 12890 u8 *ptr; 12891 ssize_t cnt; 12892 unsigned int pos = 0; 12893 12894 ptr = (u8 *)&buf[0]; 12895 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) { 12896 cnt = pci_read_vpd(tp->pdev, pos, 12897 len - pos, ptr); 12898 if (cnt == -ETIMEDOUT || cnt == -EINTR) 12899 cnt = 0; 12900 else if (cnt < 0) 12901 goto error; 12902 } 12903 if (pos != len) 12904 goto error; 12905 } 12906 12907 *vpdlen = len; 12908 12909 return buf; 12910 12911error: 12912 kfree(buf); 12913 return NULL; 12914} 12915 12916#define NVRAM_TEST_SIZE 0x100 12917#define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 12918#define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 12919#define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 12920#define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 12921#define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 12922#define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 12923#define NVRAM_SELFBOOT_HW_SIZE 0x20 12924#define NVRAM_SELFBOOT_DATA_SIZE 0x1c 12925 12926static int tg3_test_nvram(struct tg3 *tp) 12927{ 12928 u32 csum, magic, len; 12929 __be32 *buf; 12930 int i, j, k, err = 0, size; 12931 12932 if (tg3_flag(tp, NO_NVRAM)) 12933 return 0; 12934 12935 if (tg3_nvram_read(tp, 0, &magic) != 0) 12936 return -EIO; 12937 12938 if (magic == TG3_EEPROM_MAGIC) 12939 size = NVRAM_TEST_SIZE; 12940 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 12941 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 12942 TG3_EEPROM_SB_FORMAT_1) { 12943 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 12944 case TG3_EEPROM_SB_REVISION_0: 12945 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 12946 break; 12947 case TG3_EEPROM_SB_REVISION_2: 12948 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 12949 break; 12950 case TG3_EEPROM_SB_REVISION_3: 12951 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 12952 break; 12953 case TG3_EEPROM_SB_REVISION_4: 12954 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 12955 break; 12956 case TG3_EEPROM_SB_REVISION_5: 12957 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 12958 break; 12959 case TG3_EEPROM_SB_REVISION_6: 12960 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 12961 break; 12962 default: 12963 return -EIO; 12964 } 12965 } else 12966 return 0; 12967 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 12968 size = NVRAM_SELFBOOT_HW_SIZE; 12969 else 12970 return -EIO; 12971 12972 buf = kmalloc(size, GFP_KERNEL); 12973 if (buf == NULL) 12974 return -ENOMEM; 12975 12976 err = -EIO; 12977 for (i = 0, j = 0; i < size; i += 4, j++) { 12978 err = tg3_nvram_read_be32(tp, i, &buf[j]); 12979 if (err) 12980 break; 12981 } 12982 if (i < size) 12983 goto out; 12984 12985 /* Selfboot format */ 12986 magic = be32_to_cpu(buf[0]); 12987 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 12988 TG3_EEPROM_MAGIC_FW) { 12989 u8 *buf8 = (u8 *) buf, csum8 = 0; 12990 12991 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 12992 TG3_EEPROM_SB_REVISION_2) { 12993 /* For rev 2, the csum doesn't include the MBA. */ 12994 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 12995 csum8 += buf8[i]; 12996 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 12997 csum8 += buf8[i]; 12998 } else { 12999 for (i = 0; i < size; i++) 13000 csum8 += buf8[i]; 13001 } 13002 13003 if (csum8 == 0) { 13004 err = 0; 13005 goto out; 13006 } 13007 13008 err = -EIO; 13009 goto out; 13010 } 13011 13012 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 13013 TG3_EEPROM_MAGIC_HW) { 13014 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 13015 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 13016 u8 *buf8 = (u8 *) buf; 13017 13018 /* Separate the parity bits and the data bytes. */ 13019 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 13020 if ((i == 0) || (i == 8)) { 13021 int l; 13022 u8 msk; 13023 13024 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 13025 parity[k++] = buf8[i] & msk; 13026 i++; 13027 } else if (i == 16) { 13028 int l; 13029 u8 msk; 13030 13031 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 13032 parity[k++] = buf8[i] & msk; 13033 i++; 13034 13035 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 13036 parity[k++] = buf8[i] & msk; 13037 i++; 13038 } 13039 data[j++] = buf8[i]; 13040 } 13041 13042 err = -EIO; 13043 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 13044 u8 hw8 = hweight8(data[i]); 13045 13046 if ((hw8 & 0x1) && parity[i]) 13047 goto out; 13048 else if (!(hw8 & 0x1) && !parity[i]) 13049 goto out; 13050 } 13051 err = 0; 13052 goto out; 13053 } 13054 13055 err = -EIO; 13056 13057 /* Bootstrap checksum at offset 0x10 */ 13058 csum = calc_crc((unsigned char *) buf, 0x10); 13059 if (csum != le32_to_cpu(buf[0x10/4])) 13060 goto out; 13061 13062 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 13063 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 13064 if (csum != le32_to_cpu(buf[0xfc/4])) 13065 goto out; 13066 13067 kfree(buf); 13068 13069 buf = tg3_vpd_readblock(tp, &len); 13070 if (!buf) 13071 return -ENOMEM; 13072 13073 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA); 13074 if (i > 0) { 13075 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]); 13076 if (j < 0) 13077 goto out; 13078 13079 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len) 13080 goto out; 13081 13082 i += PCI_VPD_LRDT_TAG_SIZE; 13083 j = pci_vpd_find_info_keyword((u8 *)buf, i, j, 13084 PCI_VPD_RO_KEYWORD_CHKSUM); 13085 if (j > 0) { 13086 u8 csum8 = 0; 13087 13088 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13089 13090 for (i = 0; i <= j; i++) 13091 csum8 += ((u8 *)buf)[i]; 13092 13093 if (csum8) 13094 goto out; 13095 } 13096 } 13097 13098 err = 0; 13099 13100out: 13101 kfree(buf); 13102 return err; 13103} 13104 13105#define TG3_SERDES_TIMEOUT_SEC 2 13106#define TG3_COPPER_TIMEOUT_SEC 6 13107 13108static int tg3_test_link(struct tg3 *tp) 13109{ 13110 int i, max; 13111 13112 if (!netif_running(tp->dev)) 13113 return -ENODEV; 13114 13115 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 13116 max = TG3_SERDES_TIMEOUT_SEC; 13117 else 13118 max = TG3_COPPER_TIMEOUT_SEC; 13119 13120 for (i = 0; i < max; i++) { 13121 if (tp->link_up) 13122 return 0; 13123 13124 if (msleep_interruptible(1000)) 13125 break; 13126 } 13127 13128 return -EIO; 13129} 13130 13131/* Only test the commonly used registers */ 13132static int tg3_test_registers(struct tg3 *tp) 13133{ 13134 int i, is_5705, is_5750; 13135 u32 offset, read_mask, write_mask, val, save_val, read_val; 13136 static struct { 13137 u16 offset; 13138 u16 flags; 13139#define TG3_FL_5705 0x1 13140#define TG3_FL_NOT_5705 0x2 13141#define TG3_FL_NOT_5788 0x4 13142#define TG3_FL_NOT_5750 0x8 13143 u32 read_mask; 13144 u32 write_mask; 13145 } reg_tbl[] = { 13146 /* MAC Control Registers */ 13147 { MAC_MODE, TG3_FL_NOT_5705, 13148 0x00000000, 0x00ef6f8c }, 13149 { MAC_MODE, TG3_FL_5705, 13150 0x00000000, 0x01ef6b8c }, 13151 { MAC_STATUS, TG3_FL_NOT_5705, 13152 0x03800107, 0x00000000 }, 13153 { MAC_STATUS, TG3_FL_5705, 13154 0x03800100, 0x00000000 }, 13155 { MAC_ADDR_0_HIGH, 0x0000, 13156 0x00000000, 0x0000ffff }, 13157 { MAC_ADDR_0_LOW, 0x0000, 13158 0x00000000, 0xffffffff }, 13159 { MAC_RX_MTU_SIZE, 0x0000, 13160 0x00000000, 0x0000ffff }, 13161 { MAC_TX_MODE, 0x0000, 13162 0x00000000, 0x00000070 }, 13163 { MAC_TX_LENGTHS, 0x0000, 13164 0x00000000, 0x00003fff }, 13165 { MAC_RX_MODE, TG3_FL_NOT_5705, 13166 0x00000000, 0x000007fc }, 13167 { MAC_RX_MODE, TG3_FL_5705, 13168 0x00000000, 0x000007dc }, 13169 { MAC_HASH_REG_0, 0x0000, 13170 0x00000000, 0xffffffff }, 13171 { MAC_HASH_REG_1, 0x0000, 13172 0x00000000, 0xffffffff }, 13173 { MAC_HASH_REG_2, 0x0000, 13174 0x00000000, 0xffffffff }, 13175 { MAC_HASH_REG_3, 0x0000, 13176 0x00000000, 0xffffffff }, 13177 13178 /* Receive Data and Receive BD Initiator Control Registers. */ 13179 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 13180 0x00000000, 0xffffffff }, 13181 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 13182 0x00000000, 0xffffffff }, 13183 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 13184 0x00000000, 0x00000003 }, 13185 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 13186 0x00000000, 0xffffffff }, 13187 { RCVDBDI_STD_BD+0, 0x0000, 13188 0x00000000, 0xffffffff }, 13189 { RCVDBDI_STD_BD+4, 0x0000, 13190 0x00000000, 0xffffffff }, 13191 { RCVDBDI_STD_BD+8, 0x0000, 13192 0x00000000, 0xffff0002 }, 13193 { RCVDBDI_STD_BD+0xc, 0x0000, 13194 0x00000000, 0xffffffff }, 13195 13196 /* Receive BD Initiator Control Registers. */ 13197 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 13198 0x00000000, 0xffffffff }, 13199 { RCVBDI_STD_THRESH, TG3_FL_5705, 13200 0x00000000, 0x000003ff }, 13201 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 13202 0x00000000, 0xffffffff }, 13203 13204 /* Host Coalescing Control Registers. */ 13205 { HOSTCC_MODE, TG3_FL_NOT_5705, 13206 0x00000000, 0x00000004 }, 13207 { HOSTCC_MODE, TG3_FL_5705, 13208 0x00000000, 0x000000f6 }, 13209 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 13210 0x00000000, 0xffffffff }, 13211 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 13212 0x00000000, 0x000003ff }, 13213 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 13214 0x00000000, 0xffffffff }, 13215 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 13216 0x00000000, 0x000003ff }, 13217 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 13218 0x00000000, 0xffffffff }, 13219 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13220 0x00000000, 0x000000ff }, 13221 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 13222 0x00000000, 0xffffffff }, 13223 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13224 0x00000000, 0x000000ff }, 13225 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 13226 0x00000000, 0xffffffff }, 13227 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 13228 0x00000000, 0xffffffff }, 13229 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13230 0x00000000, 0xffffffff }, 13231 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13232 0x00000000, 0x000000ff }, 13233 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13234 0x00000000, 0xffffffff }, 13235 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13236 0x00000000, 0x000000ff }, 13237 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 13238 0x00000000, 0xffffffff }, 13239 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 13240 0x00000000, 0xffffffff }, 13241 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 13242 0x00000000, 0xffffffff }, 13243 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 13244 0x00000000, 0xffffffff }, 13245 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 13246 0x00000000, 0xffffffff }, 13247 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 13248 0xffffffff, 0x00000000 }, 13249 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 13250 0xffffffff, 0x00000000 }, 13251 13252 /* Buffer Manager Control Registers. */ 13253 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 13254 0x00000000, 0x007fff80 }, 13255 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 13256 0x00000000, 0x007fffff }, 13257 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 13258 0x00000000, 0x0000003f }, 13259 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 13260 0x00000000, 0x000001ff }, 13261 { BUFMGR_MB_HIGH_WATER, 0x0000, 13262 0x00000000, 0x000001ff }, 13263 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 13264 0xffffffff, 0x00000000 }, 13265 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 13266 0xffffffff, 0x00000000 }, 13267 13268 /* Mailbox Registers */ 13269 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 13270 0x00000000, 0x000001ff }, 13271 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 13272 0x00000000, 0x000001ff }, 13273 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 13274 0x00000000, 0x000007ff }, 13275 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 13276 0x00000000, 0x000001ff }, 13277 13278 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 13279 }; 13280 13281 is_5705 = is_5750 = 0; 13282 if (tg3_flag(tp, 5705_PLUS)) { 13283 is_5705 = 1; 13284 if (tg3_flag(tp, 5750_PLUS)) 13285 is_5750 = 1; 13286 } 13287 13288 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 13289 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 13290 continue; 13291 13292 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 13293 continue; 13294 13295 if (tg3_flag(tp, IS_5788) && 13296 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 13297 continue; 13298 13299 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 13300 continue; 13301 13302 offset = (u32) reg_tbl[i].offset; 13303 read_mask = reg_tbl[i].read_mask; 13304 write_mask = reg_tbl[i].write_mask; 13305 13306 /* Save the original register content */ 13307 save_val = tr32(offset); 13308 13309 /* Determine the read-only value. */ 13310 read_val = save_val & read_mask; 13311 13312 /* Write zero to the register, then make sure the read-only bits 13313 * are not changed and the read/write bits are all zeros. 13314 */ 13315 tw32(offset, 0); 13316 13317 val = tr32(offset); 13318 13319 /* Test the read-only and read/write bits. */ 13320 if (((val & read_mask) != read_val) || (val & write_mask)) 13321 goto out; 13322 13323 /* Write ones to all the bits defined by RdMask and WrMask, then 13324 * make sure the read-only bits are not changed and the 13325 * read/write bits are all ones. 13326 */ 13327 tw32(offset, read_mask | write_mask); 13328 13329 val = tr32(offset); 13330 13331 /* Test the read-only bits. */ 13332 if ((val & read_mask) != read_val) 13333 goto out; 13334 13335 /* Test the read/write bits. */ 13336 if ((val & write_mask) != write_mask) 13337 goto out; 13338 13339 tw32(offset, save_val); 13340 } 13341 13342 return 0; 13343 13344out: 13345 if (netif_msg_hw(tp)) 13346 netdev_err(tp->dev, 13347 "Register test failed at offset %x\n", offset); 13348 tw32(offset, save_val); 13349 return -EIO; 13350} 13351 13352static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 13353{ 13354 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 13355 int i; 13356 u32 j; 13357 13358 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 13359 for (j = 0; j < len; j += 4) { 13360 u32 val; 13361 13362 tg3_write_mem(tp, offset + j, test_pattern[i]); 13363 tg3_read_mem(tp, offset + j, &val); 13364 if (val != test_pattern[i]) 13365 return -EIO; 13366 } 13367 } 13368 return 0; 13369} 13370 13371static int tg3_test_memory(struct tg3 *tp) 13372{ 13373 static struct mem_entry { 13374 u32 offset; 13375 u32 len; 13376 } mem_tbl_570x[] = { 13377 { 0x00000000, 0x00b50}, 13378 { 0x00002000, 0x1c000}, 13379 { 0xffffffff, 0x00000} 13380 }, mem_tbl_5705[] = { 13381 { 0x00000100, 0x0000c}, 13382 { 0x00000200, 0x00008}, 13383 { 0x00004000, 0x00800}, 13384 { 0x00006000, 0x01000}, 13385 { 0x00008000, 0x02000}, 13386 { 0x00010000, 0x0e000}, 13387 { 0xffffffff, 0x00000} 13388 }, mem_tbl_5755[] = { 13389 { 0x00000200, 0x00008}, 13390 { 0x00004000, 0x00800}, 13391 { 0x00006000, 0x00800}, 13392 { 0x00008000, 0x02000}, 13393 { 0x00010000, 0x0c000}, 13394 { 0xffffffff, 0x00000} 13395 }, mem_tbl_5906[] = { 13396 { 0x00000200, 0x00008}, 13397 { 0x00004000, 0x00400}, 13398 { 0x00006000, 0x00400}, 13399 { 0x00008000, 0x01000}, 13400 { 0x00010000, 0x01000}, 13401 { 0xffffffff, 0x00000} 13402 }, mem_tbl_5717[] = { 13403 { 0x00000200, 0x00008}, 13404 { 0x00010000, 0x0a000}, 13405 { 0x00020000, 0x13c00}, 13406 { 0xffffffff, 0x00000} 13407 }, mem_tbl_57765[] = { 13408 { 0x00000200, 0x00008}, 13409 { 0x00004000, 0x00800}, 13410 { 0x00006000, 0x09800}, 13411 { 0x00010000, 0x0a000}, 13412 { 0xffffffff, 0x00000} 13413 }; 13414 struct mem_entry *mem_tbl; 13415 int err = 0; 13416 int i; 13417 13418 if (tg3_flag(tp, 5717_PLUS)) 13419 mem_tbl = mem_tbl_5717; 13420 else if (tg3_flag(tp, 57765_CLASS) || 13421 tg3_asic_rev(tp) == ASIC_REV_5762) 13422 mem_tbl = mem_tbl_57765; 13423 else if (tg3_flag(tp, 5755_PLUS)) 13424 mem_tbl = mem_tbl_5755; 13425 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 13426 mem_tbl = mem_tbl_5906; 13427 else if (tg3_flag(tp, 5705_PLUS)) 13428 mem_tbl = mem_tbl_5705; 13429 else 13430 mem_tbl = mem_tbl_570x; 13431 13432 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 13433 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 13434 if (err) 13435 break; 13436 } 13437 13438 return err; 13439} 13440 13441#define TG3_TSO_MSS 500 13442 13443#define TG3_TSO_IP_HDR_LEN 20 13444#define TG3_TSO_TCP_HDR_LEN 20 13445#define TG3_TSO_TCP_OPT_LEN 12 13446 13447static const u8 tg3_tso_header[] = { 134480x08, 0x00, 134490x45, 0x00, 0x00, 0x00, 134500x00, 0x00, 0x40, 0x00, 134510x40, 0x06, 0x00, 0x00, 134520x0a, 0x00, 0x00, 0x01, 134530x0a, 0x00, 0x00, 0x02, 134540x0d, 0x00, 0xe0, 0x00, 134550x00, 0x00, 0x01, 0x00, 134560x00, 0x00, 0x02, 0x00, 134570x80, 0x10, 0x10, 0x00, 134580x14, 0x09, 0x00, 0x00, 134590x01, 0x01, 0x08, 0x0a, 134600x11, 0x11, 0x11, 0x11, 134610x11, 0x11, 0x11, 0x11, 13462}; 13463 13464static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 13465{ 13466 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 13467 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 13468 u32 budget; 13469 struct sk_buff *skb; 13470 u8 *tx_data, *rx_data; 13471 dma_addr_t map; 13472 int num_pkts, tx_len, rx_len, i, err; 13473 struct tg3_rx_buffer_desc *desc; 13474 struct tg3_napi *tnapi, *rnapi; 13475 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 13476 13477 tnapi = &tp->napi[0]; 13478 rnapi = &tp->napi[0]; 13479 if (tp->irq_cnt > 1) { 13480 if (tg3_flag(tp, ENABLE_RSS)) 13481 rnapi = &tp->napi[1]; 13482 if (tg3_flag(tp, ENABLE_TSS)) 13483 tnapi = &tp->napi[1]; 13484 } 13485 coal_now = tnapi->coal_now | rnapi->coal_now; 13486 13487 err = -EIO; 13488 13489 tx_len = pktsz; 13490 skb = netdev_alloc_skb(tp->dev, tx_len); 13491 if (!skb) 13492 return -ENOMEM; 13493 13494 tx_data = skb_put(skb, tx_len); 13495 memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN); 13496 memset(tx_data + ETH_ALEN, 0x0, 8); 13497 13498 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 13499 13500 if (tso_loopback) { 13501 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 13502 13503 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 13504 TG3_TSO_TCP_OPT_LEN; 13505 13506 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 13507 sizeof(tg3_tso_header)); 13508 mss = TG3_TSO_MSS; 13509 13510 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 13511 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 13512 13513 /* Set the total length field in the IP header */ 13514 iph->tot_len = htons((u16)(mss + hdr_len)); 13515 13516 base_flags = (TXD_FLAG_CPU_PRE_DMA | 13517 TXD_FLAG_CPU_POST_DMA); 13518 13519 if (tg3_flag(tp, HW_TSO_1) || 13520 tg3_flag(tp, HW_TSO_2) || 13521 tg3_flag(tp, HW_TSO_3)) { 13522 struct tcphdr *th; 13523 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 13524 th = (struct tcphdr *)&tx_data[val]; 13525 th->check = 0; 13526 } else 13527 base_flags |= TXD_FLAG_TCPUDP_CSUM; 13528 13529 if (tg3_flag(tp, HW_TSO_3)) { 13530 mss |= (hdr_len & 0xc) << 12; 13531 if (hdr_len & 0x10) 13532 base_flags |= 0x00000010; 13533 base_flags |= (hdr_len & 0x3e0) << 5; 13534 } else if (tg3_flag(tp, HW_TSO_2)) 13535 mss |= hdr_len << 9; 13536 else if (tg3_flag(tp, HW_TSO_1) || 13537 tg3_asic_rev(tp) == ASIC_REV_5705) { 13538 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 13539 } else { 13540 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 13541 } 13542 13543 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 13544 } else { 13545 num_pkts = 1; 13546 data_off = ETH_HLEN; 13547 13548 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 13549 tx_len > VLAN_ETH_FRAME_LEN) 13550 base_flags |= TXD_FLAG_JMB_PKT; 13551 } 13552 13553 for (i = data_off; i < tx_len; i++) 13554 tx_data[i] = (u8) (i & 0xff); 13555 13556 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE); 13557 if (pci_dma_mapping_error(tp->pdev, map)) { 13558 dev_kfree_skb(skb); 13559 return -EIO; 13560 } 13561 13562 val = tnapi->tx_prod; 13563 tnapi->tx_buffers[val].skb = skb; 13564 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 13565 13566 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13567 rnapi->coal_now); 13568 13569 udelay(10); 13570 13571 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 13572 13573 budget = tg3_tx_avail(tnapi); 13574 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 13575 base_flags | TXD_FLAG_END, mss, 0)) { 13576 tnapi->tx_buffers[val].skb = NULL; 13577 dev_kfree_skb(skb); 13578 return -EIO; 13579 } 13580 13581 tnapi->tx_prod++; 13582 13583 /* Sync BD data before updating mailbox */ 13584 wmb(); 13585 13586 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 13587 tr32_mailbox(tnapi->prodmbox); 13588 13589 udelay(10); 13590 13591 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 13592 for (i = 0; i < 35; i++) { 13593 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13594 coal_now); 13595 13596 udelay(10); 13597 13598 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 13599 rx_idx = rnapi->hw_status->idx[0].rx_producer; 13600 if ((tx_idx == tnapi->tx_prod) && 13601 (rx_idx == (rx_start_idx + num_pkts))) 13602 break; 13603 } 13604 13605 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 13606 dev_kfree_skb(skb); 13607 13608 if (tx_idx != tnapi->tx_prod) 13609 goto out; 13610 13611 if (rx_idx != rx_start_idx + num_pkts) 13612 goto out; 13613 13614 val = data_off; 13615 while (rx_idx != rx_start_idx) { 13616 desc = &rnapi->rx_rcb[rx_start_idx++]; 13617 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 13618 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 13619 13620 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 13621 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 13622 goto out; 13623 13624 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 13625 - ETH_FCS_LEN; 13626 13627 if (!tso_loopback) { 13628 if (rx_len != tx_len) 13629 goto out; 13630 13631 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 13632 if (opaque_key != RXD_OPAQUE_RING_STD) 13633 goto out; 13634 } else { 13635 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 13636 goto out; 13637 } 13638 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 13639 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 13640 >> RXD_TCPCSUM_SHIFT != 0xffff) { 13641 goto out; 13642 } 13643 13644 if (opaque_key == RXD_OPAQUE_RING_STD) { 13645 rx_data = tpr->rx_std_buffers[desc_idx].data; 13646 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 13647 mapping); 13648 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 13649 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 13650 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 13651 mapping); 13652 } else 13653 goto out; 13654 13655 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, 13656 PCI_DMA_FROMDEVICE); 13657 13658 rx_data += TG3_RX_OFFSET(tp); 13659 for (i = data_off; i < rx_len; i++, val++) { 13660 if (*(rx_data + i) != (u8) (val & 0xff)) 13661 goto out; 13662 } 13663 } 13664 13665 err = 0; 13666 13667 /* tg3_free_rings will unmap and free the rx_data */ 13668out: 13669 return err; 13670} 13671 13672#define TG3_STD_LOOPBACK_FAILED 1 13673#define TG3_JMB_LOOPBACK_FAILED 2 13674#define TG3_TSO_LOOPBACK_FAILED 4 13675#define TG3_LOOPBACK_FAILED \ 13676 (TG3_STD_LOOPBACK_FAILED | \ 13677 TG3_JMB_LOOPBACK_FAILED | \ 13678 TG3_TSO_LOOPBACK_FAILED) 13679 13680static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 13681{ 13682 int err = -EIO; 13683 u32 eee_cap; 13684 u32 jmb_pkt_sz = 9000; 13685 13686 if (tp->dma_limit) 13687 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 13688 13689 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 13690 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 13691 13692 if (!netif_running(tp->dev)) { 13693 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13694 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13695 if (do_extlpbk) 13696 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13697 goto done; 13698 } 13699 13700 err = tg3_reset_hw(tp, true); 13701 if (err) { 13702 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13703 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13704 if (do_extlpbk) 13705 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13706 goto done; 13707 } 13708 13709 if (tg3_flag(tp, ENABLE_RSS)) { 13710 int i; 13711 13712 /* Reroute all rx packets to the 1st queue */ 13713 for (i = MAC_RSS_INDIR_TBL_0; 13714 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 13715 tw32(i, 0x0); 13716 } 13717 13718 /* HW errata - mac loopback fails in some cases on 5780. 13719 * Normal traffic and PHY loopback are not affected by 13720 * errata. Also, the MAC loopback test is deprecated for 13721 * all newer ASIC revisions. 13722 */ 13723 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 13724 !tg3_flag(tp, CPMU_PRESENT)) { 13725 tg3_mac_loopback(tp, true); 13726 13727 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13728 data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13729 13730 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13731 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13732 data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13733 13734 tg3_mac_loopback(tp, false); 13735 } 13736 13737 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 13738 !tg3_flag(tp, USE_PHYLIB)) { 13739 int i; 13740 13741 tg3_phy_lpbk_set(tp, 0, false); 13742 13743 /* Wait for link */ 13744 for (i = 0; i < 100; i++) { 13745 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 13746 break; 13747 mdelay(1); 13748 } 13749 13750 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13751 data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13752 if (tg3_flag(tp, TSO_CAPABLE) && 13753 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13754 data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED; 13755 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13756 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13757 data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13758 13759 if (do_extlpbk) { 13760 tg3_phy_lpbk_set(tp, 0, true); 13761 13762 /* All link indications report up, but the hardware 13763 * isn't really ready for about 20 msec. Double it 13764 * to be sure. 13765 */ 13766 mdelay(40); 13767 13768 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13769 data[TG3_EXT_LOOPB_TEST] |= 13770 TG3_STD_LOOPBACK_FAILED; 13771 if (tg3_flag(tp, TSO_CAPABLE) && 13772 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13773 data[TG3_EXT_LOOPB_TEST] |= 13774 TG3_TSO_LOOPBACK_FAILED; 13775 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13776 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13777 data[TG3_EXT_LOOPB_TEST] |= 13778 TG3_JMB_LOOPBACK_FAILED; 13779 } 13780 13781 /* Re-enable gphy autopowerdown. */ 13782 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 13783 tg3_phy_toggle_apd(tp, true); 13784 } 13785 13786 err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] | 13787 data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0; 13788 13789done: 13790 tp->phy_flags |= eee_cap; 13791 13792 return err; 13793} 13794 13795static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 13796 u64 *data) 13797{ 13798 struct tg3 *tp = netdev_priv(dev); 13799 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 13800 13801 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 13802 if (tg3_power_up(tp)) { 13803 etest->flags |= ETH_TEST_FL_FAILED; 13804 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 13805 return; 13806 } 13807 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 13808 } 13809 13810 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 13811 13812 if (tg3_test_nvram(tp) != 0) { 13813 etest->flags |= ETH_TEST_FL_FAILED; 13814 data[TG3_NVRAM_TEST] = 1; 13815 } 13816 if (!doextlpbk && tg3_test_link(tp)) { 13817 etest->flags |= ETH_TEST_FL_FAILED; 13818 data[TG3_LINK_TEST] = 1; 13819 } 13820 if (etest->flags & ETH_TEST_FL_OFFLINE) { 13821 int err, err2 = 0, irq_sync = 0; 13822 13823 if (netif_running(dev)) { 13824 tg3_phy_stop(tp); 13825 tg3_netif_stop(tp); 13826 irq_sync = 1; 13827 } 13828 13829 tg3_full_lock(tp, irq_sync); 13830 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 13831 err = tg3_nvram_lock(tp); 13832 tg3_halt_cpu(tp, RX_CPU_BASE); 13833 if (!tg3_flag(tp, 5705_PLUS)) 13834 tg3_halt_cpu(tp, TX_CPU_BASE); 13835 if (!err) 13836 tg3_nvram_unlock(tp); 13837 13838 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 13839 tg3_phy_reset(tp); 13840 13841 if (tg3_test_registers(tp) != 0) { 13842 etest->flags |= ETH_TEST_FL_FAILED; 13843 data[TG3_REGISTER_TEST] = 1; 13844 } 13845 13846 if (tg3_test_memory(tp) != 0) { 13847 etest->flags |= ETH_TEST_FL_FAILED; 13848 data[TG3_MEMORY_TEST] = 1; 13849 } 13850 13851 if (doextlpbk) 13852 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 13853 13854 if (tg3_test_loopback(tp, data, doextlpbk)) 13855 etest->flags |= ETH_TEST_FL_FAILED; 13856 13857 tg3_full_unlock(tp); 13858 13859 if (tg3_test_interrupt(tp) != 0) { 13860 etest->flags |= ETH_TEST_FL_FAILED; 13861 data[TG3_INTERRUPT_TEST] = 1; 13862 } 13863 13864 tg3_full_lock(tp, 0); 13865 13866 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 13867 if (netif_running(dev)) { 13868 tg3_flag_set(tp, INIT_COMPLETE); 13869 err2 = tg3_restart_hw(tp, true); 13870 if (!err2) 13871 tg3_netif_start(tp); 13872 } 13873 13874 tg3_full_unlock(tp); 13875 13876 if (irq_sync && !err2) 13877 tg3_phy_start(tp); 13878 } 13879 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 13880 tg3_power_down_prepare(tp); 13881 13882} 13883 13884static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr) 13885{ 13886 struct tg3 *tp = netdev_priv(dev); 13887 struct hwtstamp_config stmpconf; 13888 13889 if (!tg3_flag(tp, PTP_CAPABLE)) 13890 return -EOPNOTSUPP; 13891 13892 if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) 13893 return -EFAULT; 13894 13895 if (stmpconf.flags) 13896 return -EINVAL; 13897 13898 if (stmpconf.tx_type != HWTSTAMP_TX_ON && 13899 stmpconf.tx_type != HWTSTAMP_TX_OFF) 13900 return -ERANGE; 13901 13902 switch (stmpconf.rx_filter) { 13903 case HWTSTAMP_FILTER_NONE: 13904 tp->rxptpctl = 0; 13905 break; 13906 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 13907 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13908 TG3_RX_PTP_CTL_ALL_V1_EVENTS; 13909 break; 13910 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 13911 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13912 TG3_RX_PTP_CTL_SYNC_EVNT; 13913 break; 13914 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 13915 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13916 TG3_RX_PTP_CTL_DELAY_REQ; 13917 break; 13918 case HWTSTAMP_FILTER_PTP_V2_EVENT: 13919 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13920 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13921 break; 13922 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 13923 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13924 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13925 break; 13926 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 13927 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13928 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13929 break; 13930 case HWTSTAMP_FILTER_PTP_V2_SYNC: 13931 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13932 TG3_RX_PTP_CTL_SYNC_EVNT; 13933 break; 13934 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 13935 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13936 TG3_RX_PTP_CTL_SYNC_EVNT; 13937 break; 13938 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 13939 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13940 TG3_RX_PTP_CTL_SYNC_EVNT; 13941 break; 13942 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 13943 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13944 TG3_RX_PTP_CTL_DELAY_REQ; 13945 break; 13946 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 13947 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13948 TG3_RX_PTP_CTL_DELAY_REQ; 13949 break; 13950 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 13951 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13952 TG3_RX_PTP_CTL_DELAY_REQ; 13953 break; 13954 default: 13955 return -ERANGE; 13956 } 13957 13958 if (netif_running(dev) && tp->rxptpctl) 13959 tw32(TG3_RX_PTP_CTL, 13960 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 13961 13962 if (stmpconf.tx_type == HWTSTAMP_TX_ON) 13963 tg3_flag_set(tp, TX_TSTAMP_EN); 13964 else 13965 tg3_flag_clear(tp, TX_TSTAMP_EN); 13966 13967 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13968 -EFAULT : 0; 13969} 13970 13971static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr) 13972{ 13973 struct tg3 *tp = netdev_priv(dev); 13974 struct hwtstamp_config stmpconf; 13975 13976 if (!tg3_flag(tp, PTP_CAPABLE)) 13977 return -EOPNOTSUPP; 13978 13979 stmpconf.flags = 0; 13980 stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ? 13981 HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF); 13982 13983 switch (tp->rxptpctl) { 13984 case 0: 13985 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE; 13986 break; 13987 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS: 13988 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 13989 break; 13990 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13991 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC; 13992 break; 13993 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13994 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ; 13995 break; 13996 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13997 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 13998 break; 13999 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 14000 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT; 14001 break; 14002 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 14003 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 14004 break; 14005 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 14006 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC; 14007 break; 14008 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 14009 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC; 14010 break; 14011 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 14012 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC; 14013 break; 14014 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 14015 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ; 14016 break; 14017 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 14018 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ; 14019 break; 14020 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ: 14021 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ; 14022 break; 14023 default: 14024 WARN_ON_ONCE(1); 14025 return -ERANGE; 14026 } 14027 14028 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 14029 -EFAULT : 0; 14030} 14031 14032static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 14033{ 14034 struct mii_ioctl_data *data = if_mii(ifr); 14035 struct tg3 *tp = netdev_priv(dev); 14036 int err; 14037 14038 if (tg3_flag(tp, USE_PHYLIB)) { 14039 struct phy_device *phydev; 14040 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 14041 return -EAGAIN; 14042 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 14043 return phy_mii_ioctl(phydev, ifr, cmd); 14044 } 14045 14046 switch (cmd) { 14047 case SIOCGMIIPHY: 14048 data->phy_id = tp->phy_addr; 14049 14050 fallthrough; 14051 case SIOCGMIIREG: { 14052 u32 mii_regval; 14053 14054 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14055 break; /* We have no PHY */ 14056 14057 if (!netif_running(dev)) 14058 return -EAGAIN; 14059 14060 spin_lock_bh(&tp->lock); 14061 err = __tg3_readphy(tp, data->phy_id & 0x1f, 14062 data->reg_num & 0x1f, &mii_regval); 14063 spin_unlock_bh(&tp->lock); 14064 14065 data->val_out = mii_regval; 14066 14067 return err; 14068 } 14069 14070 case SIOCSMIIREG: 14071 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14072 break; /* We have no PHY */ 14073 14074 if (!netif_running(dev)) 14075 return -EAGAIN; 14076 14077 spin_lock_bh(&tp->lock); 14078 err = __tg3_writephy(tp, data->phy_id & 0x1f, 14079 data->reg_num & 0x1f, data->val_in); 14080 spin_unlock_bh(&tp->lock); 14081 14082 return err; 14083 14084 case SIOCSHWTSTAMP: 14085 return tg3_hwtstamp_set(dev, ifr); 14086 14087 case SIOCGHWTSTAMP: 14088 return tg3_hwtstamp_get(dev, ifr); 14089 14090 default: 14091 /* do nothing */ 14092 break; 14093 } 14094 return -EOPNOTSUPP; 14095} 14096 14097static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 14098{ 14099 struct tg3 *tp = netdev_priv(dev); 14100 14101 memcpy(ec, &tp->coal, sizeof(*ec)); 14102 return 0; 14103} 14104 14105static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 14106{ 14107 struct tg3 *tp = netdev_priv(dev); 14108 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 14109 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 14110 14111 if (!tg3_flag(tp, 5705_PLUS)) { 14112 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 14113 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 14114 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 14115 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 14116 } 14117 14118 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 14119 (!ec->rx_coalesce_usecs) || 14120 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 14121 (!ec->tx_coalesce_usecs) || 14122 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 14123 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 14124 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 14125 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 14126 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 14127 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 14128 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 14129 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 14130 return -EINVAL; 14131 14132 /* Only copy relevant parameters, ignore all others. */ 14133 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 14134 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 14135 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 14136 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 14137 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 14138 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 14139 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 14140 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 14141 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 14142 14143 if (netif_running(dev)) { 14144 tg3_full_lock(tp, 0); 14145 __tg3_set_coalesce(tp, &tp->coal); 14146 tg3_full_unlock(tp); 14147 } 14148 return 0; 14149} 14150 14151static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata) 14152{ 14153 struct tg3 *tp = netdev_priv(dev); 14154 14155 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14156 netdev_warn(tp->dev, "Board does not support EEE!\n"); 14157 return -EOPNOTSUPP; 14158 } 14159 14160 if (edata->advertised != tp->eee.advertised) { 14161 netdev_warn(tp->dev, 14162 "Direct manipulation of EEE advertisement is not supported\n"); 14163 return -EINVAL; 14164 } 14165 14166 if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) { 14167 netdev_warn(tp->dev, 14168 "Maximal Tx Lpi timer supported is %#x(u)\n", 14169 TG3_CPMU_DBTMR1_LNKIDLE_MAX); 14170 return -EINVAL; 14171 } 14172 14173 tp->eee = *edata; 14174 14175 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 14176 tg3_warn_mgmt_link_flap(tp); 14177 14178 if (netif_running(tp->dev)) { 14179 tg3_full_lock(tp, 0); 14180 tg3_setup_eee(tp); 14181 tg3_phy_reset(tp); 14182 tg3_full_unlock(tp); 14183 } 14184 14185 return 0; 14186} 14187 14188static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata) 14189{ 14190 struct tg3 *tp = netdev_priv(dev); 14191 14192 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14193 netdev_warn(tp->dev, 14194 "Board does not support EEE!\n"); 14195 return -EOPNOTSUPP; 14196 } 14197 14198 *edata = tp->eee; 14199 return 0; 14200} 14201 14202static const struct ethtool_ops tg3_ethtool_ops = { 14203 .supported_coalesce_params = ETHTOOL_COALESCE_USECS | 14204 ETHTOOL_COALESCE_MAX_FRAMES | 14205 ETHTOOL_COALESCE_USECS_IRQ | 14206 ETHTOOL_COALESCE_MAX_FRAMES_IRQ | 14207 ETHTOOL_COALESCE_STATS_BLOCK_USECS, 14208 .get_drvinfo = tg3_get_drvinfo, 14209 .get_regs_len = tg3_get_regs_len, 14210 .get_regs = tg3_get_regs, 14211 .get_wol = tg3_get_wol, 14212 .set_wol = tg3_set_wol, 14213 .get_msglevel = tg3_get_msglevel, 14214 .set_msglevel = tg3_set_msglevel, 14215 .nway_reset = tg3_nway_reset, 14216 .get_link = ethtool_op_get_link, 14217 .get_eeprom_len = tg3_get_eeprom_len, 14218 .get_eeprom = tg3_get_eeprom, 14219 .set_eeprom = tg3_set_eeprom, 14220 .get_ringparam = tg3_get_ringparam, 14221 .set_ringparam = tg3_set_ringparam, 14222 .get_pauseparam = tg3_get_pauseparam, 14223 .set_pauseparam = tg3_set_pauseparam, 14224 .self_test = tg3_self_test, 14225 .get_strings = tg3_get_strings, 14226 .set_phys_id = tg3_set_phys_id, 14227 .get_ethtool_stats = tg3_get_ethtool_stats, 14228 .get_coalesce = tg3_get_coalesce, 14229 .set_coalesce = tg3_set_coalesce, 14230 .get_sset_count = tg3_get_sset_count, 14231 .get_rxnfc = tg3_get_rxnfc, 14232 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 14233 .get_rxfh = tg3_get_rxfh, 14234 .set_rxfh = tg3_set_rxfh, 14235 .get_channels = tg3_get_channels, 14236 .set_channels = tg3_set_channels, 14237 .get_ts_info = tg3_get_ts_info, 14238 .get_eee = tg3_get_eee, 14239 .set_eee = tg3_set_eee, 14240 .get_link_ksettings = tg3_get_link_ksettings, 14241 .set_link_ksettings = tg3_set_link_ksettings, 14242}; 14243 14244static void tg3_get_stats64(struct net_device *dev, 14245 struct rtnl_link_stats64 *stats) 14246{ 14247 struct tg3 *tp = netdev_priv(dev); 14248 14249 spin_lock_bh(&tp->lock); 14250 if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) { 14251 *stats = tp->net_stats_prev; 14252 spin_unlock_bh(&tp->lock); 14253 return; 14254 } 14255 14256 tg3_get_nstats(tp, stats); 14257 spin_unlock_bh(&tp->lock); 14258} 14259 14260static void tg3_set_rx_mode(struct net_device *dev) 14261{ 14262 struct tg3 *tp = netdev_priv(dev); 14263 14264 if (!netif_running(dev)) 14265 return; 14266 14267 tg3_full_lock(tp, 0); 14268 __tg3_set_rx_mode(dev); 14269 tg3_full_unlock(tp); 14270} 14271 14272static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 14273 int new_mtu) 14274{ 14275 dev->mtu = new_mtu; 14276 14277 if (new_mtu > ETH_DATA_LEN) { 14278 if (tg3_flag(tp, 5780_CLASS)) { 14279 netdev_update_features(dev); 14280 tg3_flag_clear(tp, TSO_CAPABLE); 14281 } else { 14282 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14283 } 14284 } else { 14285 if (tg3_flag(tp, 5780_CLASS)) { 14286 tg3_flag_set(tp, TSO_CAPABLE); 14287 netdev_update_features(dev); 14288 } 14289 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 14290 } 14291} 14292 14293static int tg3_change_mtu(struct net_device *dev, int new_mtu) 14294{ 14295 struct tg3 *tp = netdev_priv(dev); 14296 int err; 14297 bool reset_phy = false; 14298 14299 if (!netif_running(dev)) { 14300 /* We'll just catch it later when the 14301 * device is up'd. 14302 */ 14303 tg3_set_mtu(dev, tp, new_mtu); 14304 return 0; 14305 } 14306 14307 tg3_phy_stop(tp); 14308 14309 tg3_netif_stop(tp); 14310 14311 tg3_set_mtu(dev, tp, new_mtu); 14312 14313 tg3_full_lock(tp, 1); 14314 14315 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 14316 14317 /* Reset PHY, otherwise the read DMA engine will be in a mode that 14318 * breaks all requests to 256 bytes. 14319 */ 14320 if (tg3_asic_rev(tp) == ASIC_REV_57766 || 14321 tg3_asic_rev(tp) == ASIC_REV_5717 || 14322 tg3_asic_rev(tp) == ASIC_REV_5719 || 14323 tg3_asic_rev(tp) == ASIC_REV_5720) 14324 reset_phy = true; 14325 14326 err = tg3_restart_hw(tp, reset_phy); 14327 14328 if (!err) 14329 tg3_netif_start(tp); 14330 14331 tg3_full_unlock(tp); 14332 14333 if (!err) 14334 tg3_phy_start(tp); 14335 14336 return err; 14337} 14338 14339static const struct net_device_ops tg3_netdev_ops = { 14340 .ndo_open = tg3_open, 14341 .ndo_stop = tg3_close, 14342 .ndo_start_xmit = tg3_start_xmit, 14343 .ndo_get_stats64 = tg3_get_stats64, 14344 .ndo_validate_addr = eth_validate_addr, 14345 .ndo_set_rx_mode = tg3_set_rx_mode, 14346 .ndo_set_mac_address = tg3_set_mac_addr, 14347 .ndo_do_ioctl = tg3_ioctl, 14348 .ndo_tx_timeout = tg3_tx_timeout, 14349 .ndo_change_mtu = tg3_change_mtu, 14350 .ndo_fix_features = tg3_fix_features, 14351 .ndo_set_features = tg3_set_features, 14352#ifdef CONFIG_NET_POLL_CONTROLLER 14353 .ndo_poll_controller = tg3_poll_controller, 14354#endif 14355}; 14356 14357static void tg3_get_eeprom_size(struct tg3 *tp) 14358{ 14359 u32 cursize, val, magic; 14360 14361 tp->nvram_size = EEPROM_CHIP_SIZE; 14362 14363 if (tg3_nvram_read(tp, 0, &magic) != 0) 14364 return; 14365 14366 if ((magic != TG3_EEPROM_MAGIC) && 14367 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 14368 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 14369 return; 14370 14371 /* 14372 * Size the chip by reading offsets at increasing powers of two. 14373 * When we encounter our validation signature, we know the addressing 14374 * has wrapped around, and thus have our chip size. 14375 */ 14376 cursize = 0x10; 14377 14378 while (cursize < tp->nvram_size) { 14379 if (tg3_nvram_read(tp, cursize, &val) != 0) 14380 return; 14381 14382 if (val == magic) 14383 break; 14384 14385 cursize <<= 1; 14386 } 14387 14388 tp->nvram_size = cursize; 14389} 14390 14391static void tg3_get_nvram_size(struct tg3 *tp) 14392{ 14393 u32 val; 14394 14395 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 14396 return; 14397 14398 /* Selfboot format */ 14399 if (val != TG3_EEPROM_MAGIC) { 14400 tg3_get_eeprom_size(tp); 14401 return; 14402 } 14403 14404 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 14405 if (val != 0) { 14406 /* This is confusing. We want to operate on the 14407 * 16-bit value at offset 0xf2. The tg3_nvram_read() 14408 * call will read from NVRAM and byteswap the data 14409 * according to the byteswapping settings for all 14410 * other register accesses. This ensures the data we 14411 * want will always reside in the lower 16-bits. 14412 * However, the data in NVRAM is in LE format, which 14413 * means the data from the NVRAM read will always be 14414 * opposite the endianness of the CPU. The 16-bit 14415 * byteswap then brings the data to CPU endianness. 14416 */ 14417 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 14418 return; 14419 } 14420 } 14421 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14422} 14423 14424static void tg3_get_nvram_info(struct tg3 *tp) 14425{ 14426 u32 nvcfg1; 14427 14428 nvcfg1 = tr32(NVRAM_CFG1); 14429 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 14430 tg3_flag_set(tp, FLASH); 14431 } else { 14432 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14433 tw32(NVRAM_CFG1, nvcfg1); 14434 } 14435 14436 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 14437 tg3_flag(tp, 5780_CLASS)) { 14438 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 14439 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 14440 tp->nvram_jedecnum = JEDEC_ATMEL; 14441 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14442 tg3_flag_set(tp, NVRAM_BUFFERED); 14443 break; 14444 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 14445 tp->nvram_jedecnum = JEDEC_ATMEL; 14446 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 14447 break; 14448 case FLASH_VENDOR_ATMEL_EEPROM: 14449 tp->nvram_jedecnum = JEDEC_ATMEL; 14450 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14451 tg3_flag_set(tp, NVRAM_BUFFERED); 14452 break; 14453 case FLASH_VENDOR_ST: 14454 tp->nvram_jedecnum = JEDEC_ST; 14455 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 14456 tg3_flag_set(tp, NVRAM_BUFFERED); 14457 break; 14458 case FLASH_VENDOR_SAIFUN: 14459 tp->nvram_jedecnum = JEDEC_SAIFUN; 14460 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 14461 break; 14462 case FLASH_VENDOR_SST_SMALL: 14463 case FLASH_VENDOR_SST_LARGE: 14464 tp->nvram_jedecnum = JEDEC_SST; 14465 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 14466 break; 14467 } 14468 } else { 14469 tp->nvram_jedecnum = JEDEC_ATMEL; 14470 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14471 tg3_flag_set(tp, NVRAM_BUFFERED); 14472 } 14473} 14474 14475static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 14476{ 14477 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 14478 case FLASH_5752PAGE_SIZE_256: 14479 tp->nvram_pagesize = 256; 14480 break; 14481 case FLASH_5752PAGE_SIZE_512: 14482 tp->nvram_pagesize = 512; 14483 break; 14484 case FLASH_5752PAGE_SIZE_1K: 14485 tp->nvram_pagesize = 1024; 14486 break; 14487 case FLASH_5752PAGE_SIZE_2K: 14488 tp->nvram_pagesize = 2048; 14489 break; 14490 case FLASH_5752PAGE_SIZE_4K: 14491 tp->nvram_pagesize = 4096; 14492 break; 14493 case FLASH_5752PAGE_SIZE_264: 14494 tp->nvram_pagesize = 264; 14495 break; 14496 case FLASH_5752PAGE_SIZE_528: 14497 tp->nvram_pagesize = 528; 14498 break; 14499 } 14500} 14501 14502static void tg3_get_5752_nvram_info(struct tg3 *tp) 14503{ 14504 u32 nvcfg1; 14505 14506 nvcfg1 = tr32(NVRAM_CFG1); 14507 14508 /* NVRAM protection for TPM */ 14509 if (nvcfg1 & (1 << 27)) 14510 tg3_flag_set(tp, PROTECTED_NVRAM); 14511 14512 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14513 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 14514 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 14515 tp->nvram_jedecnum = JEDEC_ATMEL; 14516 tg3_flag_set(tp, NVRAM_BUFFERED); 14517 break; 14518 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14519 tp->nvram_jedecnum = JEDEC_ATMEL; 14520 tg3_flag_set(tp, NVRAM_BUFFERED); 14521 tg3_flag_set(tp, FLASH); 14522 break; 14523 case FLASH_5752VENDOR_ST_M45PE10: 14524 case FLASH_5752VENDOR_ST_M45PE20: 14525 case FLASH_5752VENDOR_ST_M45PE40: 14526 tp->nvram_jedecnum = JEDEC_ST; 14527 tg3_flag_set(tp, NVRAM_BUFFERED); 14528 tg3_flag_set(tp, FLASH); 14529 break; 14530 } 14531 14532 if (tg3_flag(tp, FLASH)) { 14533 tg3_nvram_get_pagesize(tp, nvcfg1); 14534 } else { 14535 /* For eeprom, set pagesize to maximum eeprom size */ 14536 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14537 14538 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14539 tw32(NVRAM_CFG1, nvcfg1); 14540 } 14541} 14542 14543static void tg3_get_5755_nvram_info(struct tg3 *tp) 14544{ 14545 u32 nvcfg1, protect = 0; 14546 14547 nvcfg1 = tr32(NVRAM_CFG1); 14548 14549 /* NVRAM protection for TPM */ 14550 if (nvcfg1 & (1 << 27)) { 14551 tg3_flag_set(tp, PROTECTED_NVRAM); 14552 protect = 1; 14553 } 14554 14555 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14556 switch (nvcfg1) { 14557 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14558 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14559 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14560 case FLASH_5755VENDOR_ATMEL_FLASH_5: 14561 tp->nvram_jedecnum = JEDEC_ATMEL; 14562 tg3_flag_set(tp, NVRAM_BUFFERED); 14563 tg3_flag_set(tp, FLASH); 14564 tp->nvram_pagesize = 264; 14565 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 14566 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 14567 tp->nvram_size = (protect ? 0x3e200 : 14568 TG3_NVRAM_SIZE_512KB); 14569 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 14570 tp->nvram_size = (protect ? 0x1f200 : 14571 TG3_NVRAM_SIZE_256KB); 14572 else 14573 tp->nvram_size = (protect ? 0x1f200 : 14574 TG3_NVRAM_SIZE_128KB); 14575 break; 14576 case FLASH_5752VENDOR_ST_M45PE10: 14577 case FLASH_5752VENDOR_ST_M45PE20: 14578 case FLASH_5752VENDOR_ST_M45PE40: 14579 tp->nvram_jedecnum = JEDEC_ST; 14580 tg3_flag_set(tp, NVRAM_BUFFERED); 14581 tg3_flag_set(tp, FLASH); 14582 tp->nvram_pagesize = 256; 14583 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 14584 tp->nvram_size = (protect ? 14585 TG3_NVRAM_SIZE_64KB : 14586 TG3_NVRAM_SIZE_128KB); 14587 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 14588 tp->nvram_size = (protect ? 14589 TG3_NVRAM_SIZE_64KB : 14590 TG3_NVRAM_SIZE_256KB); 14591 else 14592 tp->nvram_size = (protect ? 14593 TG3_NVRAM_SIZE_128KB : 14594 TG3_NVRAM_SIZE_512KB); 14595 break; 14596 } 14597} 14598 14599static void tg3_get_5787_nvram_info(struct tg3 *tp) 14600{ 14601 u32 nvcfg1; 14602 14603 nvcfg1 = tr32(NVRAM_CFG1); 14604 14605 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14606 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 14607 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14608 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 14609 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14610 tp->nvram_jedecnum = JEDEC_ATMEL; 14611 tg3_flag_set(tp, NVRAM_BUFFERED); 14612 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14613 14614 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14615 tw32(NVRAM_CFG1, nvcfg1); 14616 break; 14617 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14618 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14619 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14620 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14621 tp->nvram_jedecnum = JEDEC_ATMEL; 14622 tg3_flag_set(tp, NVRAM_BUFFERED); 14623 tg3_flag_set(tp, FLASH); 14624 tp->nvram_pagesize = 264; 14625 break; 14626 case FLASH_5752VENDOR_ST_M45PE10: 14627 case FLASH_5752VENDOR_ST_M45PE20: 14628 case FLASH_5752VENDOR_ST_M45PE40: 14629 tp->nvram_jedecnum = JEDEC_ST; 14630 tg3_flag_set(tp, NVRAM_BUFFERED); 14631 tg3_flag_set(tp, FLASH); 14632 tp->nvram_pagesize = 256; 14633 break; 14634 } 14635} 14636 14637static void tg3_get_5761_nvram_info(struct tg3 *tp) 14638{ 14639 u32 nvcfg1, protect = 0; 14640 14641 nvcfg1 = tr32(NVRAM_CFG1); 14642 14643 /* NVRAM protection for TPM */ 14644 if (nvcfg1 & (1 << 27)) { 14645 tg3_flag_set(tp, PROTECTED_NVRAM); 14646 protect = 1; 14647 } 14648 14649 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14650 switch (nvcfg1) { 14651 case FLASH_5761VENDOR_ATMEL_ADB021D: 14652 case FLASH_5761VENDOR_ATMEL_ADB041D: 14653 case FLASH_5761VENDOR_ATMEL_ADB081D: 14654 case FLASH_5761VENDOR_ATMEL_ADB161D: 14655 case FLASH_5761VENDOR_ATMEL_MDB021D: 14656 case FLASH_5761VENDOR_ATMEL_MDB041D: 14657 case FLASH_5761VENDOR_ATMEL_MDB081D: 14658 case FLASH_5761VENDOR_ATMEL_MDB161D: 14659 tp->nvram_jedecnum = JEDEC_ATMEL; 14660 tg3_flag_set(tp, NVRAM_BUFFERED); 14661 tg3_flag_set(tp, FLASH); 14662 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14663 tp->nvram_pagesize = 256; 14664 break; 14665 case FLASH_5761VENDOR_ST_A_M45PE20: 14666 case FLASH_5761VENDOR_ST_A_M45PE40: 14667 case FLASH_5761VENDOR_ST_A_M45PE80: 14668 case FLASH_5761VENDOR_ST_A_M45PE16: 14669 case FLASH_5761VENDOR_ST_M_M45PE20: 14670 case FLASH_5761VENDOR_ST_M_M45PE40: 14671 case FLASH_5761VENDOR_ST_M_M45PE80: 14672 case FLASH_5761VENDOR_ST_M_M45PE16: 14673 tp->nvram_jedecnum = JEDEC_ST; 14674 tg3_flag_set(tp, NVRAM_BUFFERED); 14675 tg3_flag_set(tp, FLASH); 14676 tp->nvram_pagesize = 256; 14677 break; 14678 } 14679 14680 if (protect) { 14681 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 14682 } else { 14683 switch (nvcfg1) { 14684 case FLASH_5761VENDOR_ATMEL_ADB161D: 14685 case FLASH_5761VENDOR_ATMEL_MDB161D: 14686 case FLASH_5761VENDOR_ST_A_M45PE16: 14687 case FLASH_5761VENDOR_ST_M_M45PE16: 14688 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 14689 break; 14690 case FLASH_5761VENDOR_ATMEL_ADB081D: 14691 case FLASH_5761VENDOR_ATMEL_MDB081D: 14692 case FLASH_5761VENDOR_ST_A_M45PE80: 14693 case FLASH_5761VENDOR_ST_M_M45PE80: 14694 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14695 break; 14696 case FLASH_5761VENDOR_ATMEL_ADB041D: 14697 case FLASH_5761VENDOR_ATMEL_MDB041D: 14698 case FLASH_5761VENDOR_ST_A_M45PE40: 14699 case FLASH_5761VENDOR_ST_M_M45PE40: 14700 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14701 break; 14702 case FLASH_5761VENDOR_ATMEL_ADB021D: 14703 case FLASH_5761VENDOR_ATMEL_MDB021D: 14704 case FLASH_5761VENDOR_ST_A_M45PE20: 14705 case FLASH_5761VENDOR_ST_M_M45PE20: 14706 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14707 break; 14708 } 14709 } 14710} 14711 14712static void tg3_get_5906_nvram_info(struct tg3 *tp) 14713{ 14714 tp->nvram_jedecnum = JEDEC_ATMEL; 14715 tg3_flag_set(tp, NVRAM_BUFFERED); 14716 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14717} 14718 14719static void tg3_get_57780_nvram_info(struct tg3 *tp) 14720{ 14721 u32 nvcfg1; 14722 14723 nvcfg1 = tr32(NVRAM_CFG1); 14724 14725 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14726 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14727 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14728 tp->nvram_jedecnum = JEDEC_ATMEL; 14729 tg3_flag_set(tp, NVRAM_BUFFERED); 14730 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14731 14732 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14733 tw32(NVRAM_CFG1, nvcfg1); 14734 return; 14735 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14736 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14737 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14738 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14739 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14740 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14741 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14742 tp->nvram_jedecnum = JEDEC_ATMEL; 14743 tg3_flag_set(tp, NVRAM_BUFFERED); 14744 tg3_flag_set(tp, FLASH); 14745 14746 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14747 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14748 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14749 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14750 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14751 break; 14752 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14753 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14754 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14755 break; 14756 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14757 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14758 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14759 break; 14760 } 14761 break; 14762 case FLASH_5752VENDOR_ST_M45PE10: 14763 case FLASH_5752VENDOR_ST_M45PE20: 14764 case FLASH_5752VENDOR_ST_M45PE40: 14765 tp->nvram_jedecnum = JEDEC_ST; 14766 tg3_flag_set(tp, NVRAM_BUFFERED); 14767 tg3_flag_set(tp, FLASH); 14768 14769 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14770 case FLASH_5752VENDOR_ST_M45PE10: 14771 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14772 break; 14773 case FLASH_5752VENDOR_ST_M45PE20: 14774 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14775 break; 14776 case FLASH_5752VENDOR_ST_M45PE40: 14777 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14778 break; 14779 } 14780 break; 14781 default: 14782 tg3_flag_set(tp, NO_NVRAM); 14783 return; 14784 } 14785 14786 tg3_nvram_get_pagesize(tp, nvcfg1); 14787 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14788 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14789} 14790 14791 14792static void tg3_get_5717_nvram_info(struct tg3 *tp) 14793{ 14794 u32 nvcfg1; 14795 14796 nvcfg1 = tr32(NVRAM_CFG1); 14797 14798 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14799 case FLASH_5717VENDOR_ATMEL_EEPROM: 14800 case FLASH_5717VENDOR_MICRO_EEPROM: 14801 tp->nvram_jedecnum = JEDEC_ATMEL; 14802 tg3_flag_set(tp, NVRAM_BUFFERED); 14803 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14804 14805 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14806 tw32(NVRAM_CFG1, nvcfg1); 14807 return; 14808 case FLASH_5717VENDOR_ATMEL_MDB011D: 14809 case FLASH_5717VENDOR_ATMEL_ADB011B: 14810 case FLASH_5717VENDOR_ATMEL_ADB011D: 14811 case FLASH_5717VENDOR_ATMEL_MDB021D: 14812 case FLASH_5717VENDOR_ATMEL_ADB021B: 14813 case FLASH_5717VENDOR_ATMEL_ADB021D: 14814 case FLASH_5717VENDOR_ATMEL_45USPT: 14815 tp->nvram_jedecnum = JEDEC_ATMEL; 14816 tg3_flag_set(tp, NVRAM_BUFFERED); 14817 tg3_flag_set(tp, FLASH); 14818 14819 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14820 case FLASH_5717VENDOR_ATMEL_MDB021D: 14821 /* Detect size with tg3_nvram_get_size() */ 14822 break; 14823 case FLASH_5717VENDOR_ATMEL_ADB021B: 14824 case FLASH_5717VENDOR_ATMEL_ADB021D: 14825 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14826 break; 14827 default: 14828 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14829 break; 14830 } 14831 break; 14832 case FLASH_5717VENDOR_ST_M_M25PE10: 14833 case FLASH_5717VENDOR_ST_A_M25PE10: 14834 case FLASH_5717VENDOR_ST_M_M45PE10: 14835 case FLASH_5717VENDOR_ST_A_M45PE10: 14836 case FLASH_5717VENDOR_ST_M_M25PE20: 14837 case FLASH_5717VENDOR_ST_A_M25PE20: 14838 case FLASH_5717VENDOR_ST_M_M45PE20: 14839 case FLASH_5717VENDOR_ST_A_M45PE20: 14840 case FLASH_5717VENDOR_ST_25USPT: 14841 case FLASH_5717VENDOR_ST_45USPT: 14842 tp->nvram_jedecnum = JEDEC_ST; 14843 tg3_flag_set(tp, NVRAM_BUFFERED); 14844 tg3_flag_set(tp, FLASH); 14845 14846 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14847 case FLASH_5717VENDOR_ST_M_M25PE20: 14848 case FLASH_5717VENDOR_ST_M_M45PE20: 14849 /* Detect size with tg3_nvram_get_size() */ 14850 break; 14851 case FLASH_5717VENDOR_ST_A_M25PE20: 14852 case FLASH_5717VENDOR_ST_A_M45PE20: 14853 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14854 break; 14855 default: 14856 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14857 break; 14858 } 14859 break; 14860 default: 14861 tg3_flag_set(tp, NO_NVRAM); 14862 return; 14863 } 14864 14865 tg3_nvram_get_pagesize(tp, nvcfg1); 14866 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14867 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14868} 14869 14870static void tg3_get_5720_nvram_info(struct tg3 *tp) 14871{ 14872 u32 nvcfg1, nvmpinstrp, nv_status; 14873 14874 nvcfg1 = tr32(NVRAM_CFG1); 14875 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 14876 14877 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14878 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) { 14879 tg3_flag_set(tp, NO_NVRAM); 14880 return; 14881 } 14882 14883 switch (nvmpinstrp) { 14884 case FLASH_5762_MX25L_100: 14885 case FLASH_5762_MX25L_200: 14886 case FLASH_5762_MX25L_400: 14887 case FLASH_5762_MX25L_800: 14888 case FLASH_5762_MX25L_160_320: 14889 tp->nvram_pagesize = 4096; 14890 tp->nvram_jedecnum = JEDEC_MACRONIX; 14891 tg3_flag_set(tp, NVRAM_BUFFERED); 14892 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14893 tg3_flag_set(tp, FLASH); 14894 nv_status = tr32(NVRAM_AUTOSENSE_STATUS); 14895 tp->nvram_size = 14896 (1 << (nv_status >> AUTOSENSE_DEVID & 14897 AUTOSENSE_DEVID_MASK) 14898 << AUTOSENSE_SIZE_IN_MB); 14899 return; 14900 14901 case FLASH_5762_EEPROM_HD: 14902 nvmpinstrp = FLASH_5720_EEPROM_HD; 14903 break; 14904 case FLASH_5762_EEPROM_LD: 14905 nvmpinstrp = FLASH_5720_EEPROM_LD; 14906 break; 14907 case FLASH_5720VENDOR_M_ST_M45PE20: 14908 /* This pinstrap supports multiple sizes, so force it 14909 * to read the actual size from location 0xf0. 14910 */ 14911 nvmpinstrp = FLASH_5720VENDOR_ST_45USPT; 14912 break; 14913 } 14914 } 14915 14916 switch (nvmpinstrp) { 14917 case FLASH_5720_EEPROM_HD: 14918 case FLASH_5720_EEPROM_LD: 14919 tp->nvram_jedecnum = JEDEC_ATMEL; 14920 tg3_flag_set(tp, NVRAM_BUFFERED); 14921 14922 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14923 tw32(NVRAM_CFG1, nvcfg1); 14924 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 14925 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14926 else 14927 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 14928 return; 14929 case FLASH_5720VENDOR_M_ATMEL_DB011D: 14930 case FLASH_5720VENDOR_A_ATMEL_DB011B: 14931 case FLASH_5720VENDOR_A_ATMEL_DB011D: 14932 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14933 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14934 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14935 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14936 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14937 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14938 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14939 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14940 case FLASH_5720VENDOR_ATMEL_45USPT: 14941 tp->nvram_jedecnum = JEDEC_ATMEL; 14942 tg3_flag_set(tp, NVRAM_BUFFERED); 14943 tg3_flag_set(tp, FLASH); 14944 14945 switch (nvmpinstrp) { 14946 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14947 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14948 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14949 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14950 break; 14951 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14952 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14953 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14954 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14955 break; 14956 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14957 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14958 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14959 break; 14960 default: 14961 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14962 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14963 break; 14964 } 14965 break; 14966 case FLASH_5720VENDOR_M_ST_M25PE10: 14967 case FLASH_5720VENDOR_M_ST_M45PE10: 14968 case FLASH_5720VENDOR_A_ST_M25PE10: 14969 case FLASH_5720VENDOR_A_ST_M45PE10: 14970 case FLASH_5720VENDOR_M_ST_M25PE20: 14971 case FLASH_5720VENDOR_M_ST_M45PE20: 14972 case FLASH_5720VENDOR_A_ST_M25PE20: 14973 case FLASH_5720VENDOR_A_ST_M45PE20: 14974 case FLASH_5720VENDOR_M_ST_M25PE40: 14975 case FLASH_5720VENDOR_M_ST_M45PE40: 14976 case FLASH_5720VENDOR_A_ST_M25PE40: 14977 case FLASH_5720VENDOR_A_ST_M45PE40: 14978 case FLASH_5720VENDOR_M_ST_M25PE80: 14979 case FLASH_5720VENDOR_M_ST_M45PE80: 14980 case FLASH_5720VENDOR_A_ST_M25PE80: 14981 case FLASH_5720VENDOR_A_ST_M45PE80: 14982 case FLASH_5720VENDOR_ST_25USPT: 14983 case FLASH_5720VENDOR_ST_45USPT: 14984 tp->nvram_jedecnum = JEDEC_ST; 14985 tg3_flag_set(tp, NVRAM_BUFFERED); 14986 tg3_flag_set(tp, FLASH); 14987 14988 switch (nvmpinstrp) { 14989 case FLASH_5720VENDOR_M_ST_M25PE20: 14990 case FLASH_5720VENDOR_M_ST_M45PE20: 14991 case FLASH_5720VENDOR_A_ST_M25PE20: 14992 case FLASH_5720VENDOR_A_ST_M45PE20: 14993 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14994 break; 14995 case FLASH_5720VENDOR_M_ST_M25PE40: 14996 case FLASH_5720VENDOR_M_ST_M45PE40: 14997 case FLASH_5720VENDOR_A_ST_M25PE40: 14998 case FLASH_5720VENDOR_A_ST_M45PE40: 14999 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 15000 break; 15001 case FLASH_5720VENDOR_M_ST_M25PE80: 15002 case FLASH_5720VENDOR_M_ST_M45PE80: 15003 case FLASH_5720VENDOR_A_ST_M25PE80: 15004 case FLASH_5720VENDOR_A_ST_M45PE80: 15005 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 15006 break; 15007 default: 15008 if (tg3_asic_rev(tp) != ASIC_REV_5762) 15009 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 15010 break; 15011 } 15012 break; 15013 default: 15014 tg3_flag_set(tp, NO_NVRAM); 15015 return; 15016 } 15017 15018 tg3_nvram_get_pagesize(tp, nvcfg1); 15019 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 15020 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 15021 15022 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 15023 u32 val; 15024 15025 if (tg3_nvram_read(tp, 0, &val)) 15026 return; 15027 15028 if (val != TG3_EEPROM_MAGIC && 15029 (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) 15030 tg3_flag_set(tp, NO_NVRAM); 15031 } 15032} 15033 15034/* Chips other than 5700/5701 use the NVRAM for fetching info. */ 15035static void tg3_nvram_init(struct tg3 *tp) 15036{ 15037 if (tg3_flag(tp, IS_SSB_CORE)) { 15038 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */ 15039 tg3_flag_clear(tp, NVRAM); 15040 tg3_flag_clear(tp, NVRAM_BUFFERED); 15041 tg3_flag_set(tp, NO_NVRAM); 15042 return; 15043 } 15044 15045 tw32_f(GRC_EEPROM_ADDR, 15046 (EEPROM_ADDR_FSM_RESET | 15047 (EEPROM_DEFAULT_CLOCK_PERIOD << 15048 EEPROM_ADDR_CLKPERD_SHIFT))); 15049 15050 msleep(1); 15051 15052 /* Enable seeprom accesses. */ 15053 tw32_f(GRC_LOCAL_CTRL, 15054 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 15055 udelay(100); 15056 15057 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15058 tg3_asic_rev(tp) != ASIC_REV_5701) { 15059 tg3_flag_set(tp, NVRAM); 15060 15061 if (tg3_nvram_lock(tp)) { 15062 netdev_warn(tp->dev, 15063 "Cannot get nvram lock, %s failed\n", 15064 __func__); 15065 return; 15066 } 15067 tg3_enable_nvram_access(tp); 15068 15069 tp->nvram_size = 0; 15070 15071 if (tg3_asic_rev(tp) == ASIC_REV_5752) 15072 tg3_get_5752_nvram_info(tp); 15073 else if (tg3_asic_rev(tp) == ASIC_REV_5755) 15074 tg3_get_5755_nvram_info(tp); 15075 else if (tg3_asic_rev(tp) == ASIC_REV_5787 || 15076 tg3_asic_rev(tp) == ASIC_REV_5784 || 15077 tg3_asic_rev(tp) == ASIC_REV_5785) 15078 tg3_get_5787_nvram_info(tp); 15079 else if (tg3_asic_rev(tp) == ASIC_REV_5761) 15080 tg3_get_5761_nvram_info(tp); 15081 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 15082 tg3_get_5906_nvram_info(tp); 15083 else if (tg3_asic_rev(tp) == ASIC_REV_57780 || 15084 tg3_flag(tp, 57765_CLASS)) 15085 tg3_get_57780_nvram_info(tp); 15086 else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15087 tg3_asic_rev(tp) == ASIC_REV_5719) 15088 tg3_get_5717_nvram_info(tp); 15089 else if (tg3_asic_rev(tp) == ASIC_REV_5720 || 15090 tg3_asic_rev(tp) == ASIC_REV_5762) 15091 tg3_get_5720_nvram_info(tp); 15092 else 15093 tg3_get_nvram_info(tp); 15094 15095 if (tp->nvram_size == 0) 15096 tg3_get_nvram_size(tp); 15097 15098 tg3_disable_nvram_access(tp); 15099 tg3_nvram_unlock(tp); 15100 15101 } else { 15102 tg3_flag_clear(tp, NVRAM); 15103 tg3_flag_clear(tp, NVRAM_BUFFERED); 15104 15105 tg3_get_eeprom_size(tp); 15106 } 15107} 15108 15109struct subsys_tbl_ent { 15110 u16 subsys_vendor, subsys_devid; 15111 u32 phy_id; 15112}; 15113 15114static struct subsys_tbl_ent subsys_id_to_phy_id[] = { 15115 /* Broadcom boards. */ 15116 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15117 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 15118 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15119 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 15120 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15121 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 15122 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15123 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 15124 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15125 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 15126 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15127 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 15128 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15129 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 15130 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15131 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 15132 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15133 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 15134 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15135 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 15136 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15137 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 15138 15139 /* 3com boards. */ 15140 { TG3PCI_SUBVENDOR_ID_3COM, 15141 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 15142 { TG3PCI_SUBVENDOR_ID_3COM, 15143 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 15144 { TG3PCI_SUBVENDOR_ID_3COM, 15145 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 15146 { TG3PCI_SUBVENDOR_ID_3COM, 15147 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 15148 { TG3PCI_SUBVENDOR_ID_3COM, 15149 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 15150 15151 /* DELL boards. */ 15152 { TG3PCI_SUBVENDOR_ID_DELL, 15153 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 15154 { TG3PCI_SUBVENDOR_ID_DELL, 15155 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 15156 { TG3PCI_SUBVENDOR_ID_DELL, 15157 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 15158 { TG3PCI_SUBVENDOR_ID_DELL, 15159 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 15160 15161 /* Compaq boards. */ 15162 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15163 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 15164 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15165 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 15166 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15167 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 15168 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15169 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 15170 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15171 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 15172 15173 /* IBM boards. */ 15174 { TG3PCI_SUBVENDOR_ID_IBM, 15175 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 15176}; 15177 15178static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) 15179{ 15180 int i; 15181 15182 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 15183 if ((subsys_id_to_phy_id[i].subsys_vendor == 15184 tp->pdev->subsystem_vendor) && 15185 (subsys_id_to_phy_id[i].subsys_devid == 15186 tp->pdev->subsystem_device)) 15187 return &subsys_id_to_phy_id[i]; 15188 } 15189 return NULL; 15190} 15191 15192static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) 15193{ 15194 u32 val; 15195 15196 tp->phy_id = TG3_PHY_ID_INVALID; 15197 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15198 15199 /* Assume an onboard device and WOL capable by default. */ 15200 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15201 tg3_flag_set(tp, WOL_CAP); 15202 15203 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15204 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 15205 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15206 tg3_flag_set(tp, IS_NIC); 15207 } 15208 val = tr32(VCPU_CFGSHDW); 15209 if (val & VCPU_CFGSHDW_ASPM_DBNC) 15210 tg3_flag_set(tp, ASPM_WORKAROUND); 15211 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 15212 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 15213 tg3_flag_set(tp, WOL_ENABLE); 15214 device_set_wakeup_enable(&tp->pdev->dev, true); 15215 } 15216 goto done; 15217 } 15218 15219 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 15220 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 15221 u32 nic_cfg, led_cfg; 15222 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0; 15223 u32 nic_phy_id, ver, eeprom_phy_id; 15224 int eeprom_phy_serdes = 0; 15225 15226 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 15227 tp->nic_sram_data_cfg = nic_cfg; 15228 15229 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 15230 ver >>= NIC_SRAM_DATA_VER_SHIFT; 15231 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15232 tg3_asic_rev(tp) != ASIC_REV_5701 && 15233 tg3_asic_rev(tp) != ASIC_REV_5703 && 15234 (ver > 0) && (ver < 0x100)) 15235 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 15236 15237 if (tg3_asic_rev(tp) == ASIC_REV_5785) 15238 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 15239 15240 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15241 tg3_asic_rev(tp) == ASIC_REV_5719 || 15242 tg3_asic_rev(tp) == ASIC_REV_5720) 15243 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5); 15244 15245 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 15246 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 15247 eeprom_phy_serdes = 1; 15248 15249 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 15250 if (nic_phy_id != 0) { 15251 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 15252 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 15253 15254 eeprom_phy_id = (id1 >> 16) << 10; 15255 eeprom_phy_id |= (id2 & 0xfc00) << 16; 15256 eeprom_phy_id |= (id2 & 0x03ff) << 0; 15257 } else 15258 eeprom_phy_id = 0; 15259 15260 tp->phy_id = eeprom_phy_id; 15261 if (eeprom_phy_serdes) { 15262 if (!tg3_flag(tp, 5705_PLUS)) 15263 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15264 else 15265 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 15266 } 15267 15268 if (tg3_flag(tp, 5750_PLUS)) 15269 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 15270 SHASTA_EXT_LED_MODE_MASK); 15271 else 15272 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 15273 15274 switch (led_cfg) { 15275 default: 15276 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 15277 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15278 break; 15279 15280 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 15281 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15282 break; 15283 15284 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 15285 tp->led_ctrl = LED_CTRL_MODE_MAC; 15286 15287 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 15288 * read on some older 5700/5701 bootcode. 15289 */ 15290 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 15291 tg3_asic_rev(tp) == ASIC_REV_5701) 15292 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15293 15294 break; 15295 15296 case SHASTA_EXT_LED_SHARED: 15297 tp->led_ctrl = LED_CTRL_MODE_SHARED; 15298 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 15299 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1) 15300 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15301 LED_CTRL_MODE_PHY_2); 15302 15303 if (tg3_flag(tp, 5717_PLUS) || 15304 tg3_asic_rev(tp) == ASIC_REV_5762) 15305 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE | 15306 LED_CTRL_BLINK_RATE_MASK; 15307 15308 break; 15309 15310 case SHASTA_EXT_LED_MAC: 15311 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 15312 break; 15313 15314 case SHASTA_EXT_LED_COMBO: 15315 tp->led_ctrl = LED_CTRL_MODE_COMBO; 15316 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) 15317 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15318 LED_CTRL_MODE_PHY_2); 15319 break; 15320 15321 } 15322 15323 if ((tg3_asic_rev(tp) == ASIC_REV_5700 || 15324 tg3_asic_rev(tp) == ASIC_REV_5701) && 15325 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 15326 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15327 15328 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) 15329 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15330 15331 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 15332 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15333 if ((tp->pdev->subsystem_vendor == 15334 PCI_VENDOR_ID_ARIMA) && 15335 (tp->pdev->subsystem_device == 0x205a || 15336 tp->pdev->subsystem_device == 0x2063)) 15337 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15338 } else { 15339 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15340 tg3_flag_set(tp, IS_NIC); 15341 } 15342 15343 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 15344 tg3_flag_set(tp, ENABLE_ASF); 15345 if (tg3_flag(tp, 5750_PLUS)) 15346 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 15347 } 15348 15349 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 15350 tg3_flag(tp, 5750_PLUS)) 15351 tg3_flag_set(tp, ENABLE_APE); 15352 15353 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 15354 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 15355 tg3_flag_clear(tp, WOL_CAP); 15356 15357 if (tg3_flag(tp, WOL_CAP) && 15358 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 15359 tg3_flag_set(tp, WOL_ENABLE); 15360 device_set_wakeup_enable(&tp->pdev->dev, true); 15361 } 15362 15363 if (cfg2 & (1 << 17)) 15364 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 15365 15366 /* serdes signal pre-emphasis in register 0x590 set by */ 15367 /* bootcode if bit 18 is set */ 15368 if (cfg2 & (1 << 18)) 15369 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 15370 15371 if ((tg3_flag(tp, 57765_PLUS) || 15372 (tg3_asic_rev(tp) == ASIC_REV_5784 && 15373 tg3_chip_rev(tp) != CHIPREV_5784_AX)) && 15374 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 15375 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 15376 15377 if (tg3_flag(tp, PCI_EXPRESS)) { 15378 u32 cfg3; 15379 15380 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 15381 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 15382 !tg3_flag(tp, 57765_PLUS) && 15383 (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)) 15384 tg3_flag_set(tp, ASPM_WORKAROUND); 15385 if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID) 15386 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 15387 if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK) 15388 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 15389 } 15390 15391 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 15392 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 15393 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 15394 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 15395 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 15396 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 15397 15398 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV) 15399 tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV; 15400 } 15401done: 15402 if (tg3_flag(tp, WOL_CAP)) 15403 device_set_wakeup_enable(&tp->pdev->dev, 15404 tg3_flag(tp, WOL_ENABLE)); 15405 else 15406 device_set_wakeup_capable(&tp->pdev->dev, false); 15407} 15408 15409static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val) 15410{ 15411 int i, err; 15412 u32 val2, off = offset * 8; 15413 15414 err = tg3_nvram_lock(tp); 15415 if (err) 15416 return err; 15417 15418 tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE); 15419 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN | 15420 APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START); 15421 tg3_ape_read32(tp, TG3_APE_OTP_CTRL); 15422 udelay(10); 15423 15424 for (i = 0; i < 100; i++) { 15425 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS); 15426 if (val2 & APE_OTP_STATUS_CMD_DONE) { 15427 *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA); 15428 break; 15429 } 15430 udelay(10); 15431 } 15432 15433 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0); 15434 15435 tg3_nvram_unlock(tp); 15436 if (val2 & APE_OTP_STATUS_CMD_DONE) 15437 return 0; 15438 15439 return -EBUSY; 15440} 15441 15442static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 15443{ 15444 int i; 15445 u32 val; 15446 15447 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 15448 tw32(OTP_CTRL, cmd); 15449 15450 /* Wait for up to 1 ms for command to execute. */ 15451 for (i = 0; i < 100; i++) { 15452 val = tr32(OTP_STATUS); 15453 if (val & OTP_STATUS_CMD_DONE) 15454 break; 15455 udelay(10); 15456 } 15457 15458 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 15459} 15460 15461/* Read the gphy configuration from the OTP region of the chip. The gphy 15462 * configuration is a 32-bit value that straddles the alignment boundary. 15463 * We do two 32-bit reads and then shift and merge the results. 15464 */ 15465static u32 tg3_read_otp_phycfg(struct tg3 *tp) 15466{ 15467 u32 bhalf_otp, thalf_otp; 15468 15469 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 15470 15471 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 15472 return 0; 15473 15474 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 15475 15476 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15477 return 0; 15478 15479 thalf_otp = tr32(OTP_READ_DATA); 15480 15481 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 15482 15483 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15484 return 0; 15485 15486 bhalf_otp = tr32(OTP_READ_DATA); 15487 15488 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 15489} 15490 15491static void tg3_phy_init_link_config(struct tg3 *tp) 15492{ 15493 u32 adv = ADVERTISED_Autoneg; 15494 15495 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 15496 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV)) 15497 adv |= ADVERTISED_1000baseT_Half; 15498 adv |= ADVERTISED_1000baseT_Full; 15499 } 15500 15501 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 15502 adv |= ADVERTISED_100baseT_Half | 15503 ADVERTISED_100baseT_Full | 15504 ADVERTISED_10baseT_Half | 15505 ADVERTISED_10baseT_Full | 15506 ADVERTISED_TP; 15507 else 15508 adv |= ADVERTISED_FIBRE; 15509 15510 tp->link_config.advertising = adv; 15511 tp->link_config.speed = SPEED_UNKNOWN; 15512 tp->link_config.duplex = DUPLEX_UNKNOWN; 15513 tp->link_config.autoneg = AUTONEG_ENABLE; 15514 tp->link_config.active_speed = SPEED_UNKNOWN; 15515 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 15516 15517 tp->old_link = -1; 15518} 15519 15520static int tg3_phy_probe(struct tg3 *tp) 15521{ 15522 u32 hw_phy_id_1, hw_phy_id_2; 15523 u32 hw_phy_id, hw_phy_id_masked; 15524 int err; 15525 15526 /* flow control autonegotiation is default behavior */ 15527 tg3_flag_set(tp, PAUSE_AUTONEG); 15528 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 15529 15530 if (tg3_flag(tp, ENABLE_APE)) { 15531 switch (tp->pci_fn) { 15532 case 0: 15533 tp->phy_ape_lock = TG3_APE_LOCK_PHY0; 15534 break; 15535 case 1: 15536 tp->phy_ape_lock = TG3_APE_LOCK_PHY1; 15537 break; 15538 case 2: 15539 tp->phy_ape_lock = TG3_APE_LOCK_PHY2; 15540 break; 15541 case 3: 15542 tp->phy_ape_lock = TG3_APE_LOCK_PHY3; 15543 break; 15544 } 15545 } 15546 15547 if (!tg3_flag(tp, ENABLE_ASF) && 15548 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15549 !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 15550 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 15551 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 15552 15553 if (tg3_flag(tp, USE_PHYLIB)) 15554 return tg3_phy_init(tp); 15555 15556 /* Reading the PHY ID register can conflict with ASF 15557 * firmware access to the PHY hardware. 15558 */ 15559 err = 0; 15560 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 15561 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 15562 } else { 15563 /* Now read the physical PHY_ID from the chip and verify 15564 * that it is sane. If it doesn't look good, we fall back 15565 * to either the hard-coded table based PHY_ID and failing 15566 * that the value found in the eeprom area. 15567 */ 15568 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 15569 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 15570 15571 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 15572 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 15573 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 15574 15575 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 15576 } 15577 15578 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 15579 tp->phy_id = hw_phy_id; 15580 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 15581 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15582 else 15583 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 15584 } else { 15585 if (tp->phy_id != TG3_PHY_ID_INVALID) { 15586 /* Do nothing, phy ID already set up in 15587 * tg3_get_eeprom_hw_cfg(). 15588 */ 15589 } else { 15590 struct subsys_tbl_ent *p; 15591 15592 /* No eeprom signature? Try the hardcoded 15593 * subsys device table. 15594 */ 15595 p = tg3_lookup_by_subsys(tp); 15596 if (p) { 15597 tp->phy_id = p->phy_id; 15598 } else if (!tg3_flag(tp, IS_SSB_CORE)) { 15599 /* For now we saw the IDs 0xbc050cd0, 15600 * 0xbc050f80 and 0xbc050c30 on devices 15601 * connected to an BCM4785 and there are 15602 * probably more. Just assume that the phy is 15603 * supported when it is connected to a SSB core 15604 * for now. 15605 */ 15606 return -ENODEV; 15607 } 15608 15609 if (!tp->phy_id || 15610 tp->phy_id == TG3_PHY_ID_BCM8002) 15611 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15612 } 15613 } 15614 15615 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15616 (tg3_asic_rev(tp) == ASIC_REV_5719 || 15617 tg3_asic_rev(tp) == ASIC_REV_5720 || 15618 tg3_asic_rev(tp) == ASIC_REV_57766 || 15619 tg3_asic_rev(tp) == ASIC_REV_5762 || 15620 (tg3_asic_rev(tp) == ASIC_REV_5717 && 15621 tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) || 15622 (tg3_asic_rev(tp) == ASIC_REV_57765 && 15623 tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) { 15624 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 15625 15626 tp->eee.supported = SUPPORTED_100baseT_Full | 15627 SUPPORTED_1000baseT_Full; 15628 tp->eee.advertised = ADVERTISED_100baseT_Full | 15629 ADVERTISED_1000baseT_Full; 15630 tp->eee.eee_enabled = 1; 15631 tp->eee.tx_lpi_enabled = 1; 15632 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US; 15633 } 15634 15635 tg3_phy_init_link_config(tp); 15636 15637 if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 15638 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15639 !tg3_flag(tp, ENABLE_APE) && 15640 !tg3_flag(tp, ENABLE_ASF)) { 15641 u32 bmsr, dummy; 15642 15643 tg3_readphy(tp, MII_BMSR, &bmsr); 15644 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 15645 (bmsr & BMSR_LSTATUS)) 15646 goto skip_phy_reset; 15647 15648 err = tg3_phy_reset(tp); 15649 if (err) 15650 return err; 15651 15652 tg3_phy_set_wirespeed(tp); 15653 15654 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 15655 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 15656 tp->link_config.flowctrl); 15657 15658 tg3_writephy(tp, MII_BMCR, 15659 BMCR_ANENABLE | BMCR_ANRESTART); 15660 } 15661 } 15662 15663skip_phy_reset: 15664 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 15665 err = tg3_init_5401phy_dsp(tp); 15666 if (err) 15667 return err; 15668 15669 err = tg3_init_5401phy_dsp(tp); 15670 } 15671 15672 return err; 15673} 15674 15675static void tg3_read_vpd(struct tg3 *tp) 15676{ 15677 u8 *vpd_data; 15678 unsigned int block_end, rosize, len; 15679 u32 vpdlen; 15680 int j, i = 0; 15681 15682 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 15683 if (!vpd_data) 15684 goto out_no_vpd; 15685 15686 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA); 15687 if (i < 0) 15688 goto out_not_found; 15689 15690 rosize = pci_vpd_lrdt_size(&vpd_data[i]); 15691 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize; 15692 i += PCI_VPD_LRDT_TAG_SIZE; 15693 15694 if (block_end > vpdlen) 15695 goto out_not_found; 15696 15697 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 15698 PCI_VPD_RO_KEYWORD_MFR_ID); 15699 if (j > 0) { 15700 len = pci_vpd_info_field_size(&vpd_data[j]); 15701 15702 j += PCI_VPD_INFO_FLD_HDR_SIZE; 15703 if (j + len > block_end || len != 4 || 15704 memcmp(&vpd_data[j], "1028", 4)) 15705 goto partno; 15706 15707 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 15708 PCI_VPD_RO_KEYWORD_VENDOR0); 15709 if (j < 0) 15710 goto partno; 15711 15712 len = pci_vpd_info_field_size(&vpd_data[j]); 15713 15714 j += PCI_VPD_INFO_FLD_HDR_SIZE; 15715 if (j + len > block_end) 15716 goto partno; 15717 15718 if (len >= sizeof(tp->fw_ver)) 15719 len = sizeof(tp->fw_ver) - 1; 15720 memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); 15721 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, 15722 &vpd_data[j]); 15723 } 15724 15725partno: 15726 i = pci_vpd_find_info_keyword(vpd_data, i, rosize, 15727 PCI_VPD_RO_KEYWORD_PARTNO); 15728 if (i < 0) 15729 goto out_not_found; 15730 15731 len = pci_vpd_info_field_size(&vpd_data[i]); 15732 15733 i += PCI_VPD_INFO_FLD_HDR_SIZE; 15734 if (len > TG3_BPN_SIZE || 15735 (len + i) > vpdlen) 15736 goto out_not_found; 15737 15738 memcpy(tp->board_part_number, &vpd_data[i], len); 15739 15740out_not_found: 15741 kfree(vpd_data); 15742 if (tp->board_part_number[0]) 15743 return; 15744 15745out_no_vpd: 15746 if (tg3_asic_rev(tp) == ASIC_REV_5717) { 15747 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15748 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C) 15749 strcpy(tp->board_part_number, "BCM5717"); 15750 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 15751 strcpy(tp->board_part_number, "BCM5718"); 15752 else 15753 goto nomatch; 15754 } else if (tg3_asic_rev(tp) == ASIC_REV_57780) { 15755 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 15756 strcpy(tp->board_part_number, "BCM57780"); 15757 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 15758 strcpy(tp->board_part_number, "BCM57760"); 15759 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 15760 strcpy(tp->board_part_number, "BCM57790"); 15761 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 15762 strcpy(tp->board_part_number, "BCM57788"); 15763 else 15764 goto nomatch; 15765 } else if (tg3_asic_rev(tp) == ASIC_REV_57765) { 15766 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 15767 strcpy(tp->board_part_number, "BCM57761"); 15768 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 15769 strcpy(tp->board_part_number, "BCM57765"); 15770 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 15771 strcpy(tp->board_part_number, "BCM57781"); 15772 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 15773 strcpy(tp->board_part_number, "BCM57785"); 15774 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 15775 strcpy(tp->board_part_number, "BCM57791"); 15776 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 15777 strcpy(tp->board_part_number, "BCM57795"); 15778 else 15779 goto nomatch; 15780 } else if (tg3_asic_rev(tp) == ASIC_REV_57766) { 15781 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 15782 strcpy(tp->board_part_number, "BCM57762"); 15783 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 15784 strcpy(tp->board_part_number, "BCM57766"); 15785 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 15786 strcpy(tp->board_part_number, "BCM57782"); 15787 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 15788 strcpy(tp->board_part_number, "BCM57786"); 15789 else 15790 goto nomatch; 15791 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15792 strcpy(tp->board_part_number, "BCM95906"); 15793 } else { 15794nomatch: 15795 strcpy(tp->board_part_number, "none"); 15796 } 15797} 15798 15799static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 15800{ 15801 u32 val; 15802 15803 if (tg3_nvram_read(tp, offset, &val) || 15804 (val & 0xfc000000) != 0x0c000000 || 15805 tg3_nvram_read(tp, offset + 4, &val) || 15806 val != 0) 15807 return 0; 15808 15809 return 1; 15810} 15811 15812static void tg3_read_bc_ver(struct tg3 *tp) 15813{ 15814 u32 val, offset, start, ver_offset; 15815 int i, dst_off; 15816 bool newver = false; 15817 15818 if (tg3_nvram_read(tp, 0xc, &offset) || 15819 tg3_nvram_read(tp, 0x4, &start)) 15820 return; 15821 15822 offset = tg3_nvram_logical_addr(tp, offset); 15823 15824 if (tg3_nvram_read(tp, offset, &val)) 15825 return; 15826 15827 if ((val & 0xfc000000) == 0x0c000000) { 15828 if (tg3_nvram_read(tp, offset + 4, &val)) 15829 return; 15830 15831 if (val == 0) 15832 newver = true; 15833 } 15834 15835 dst_off = strlen(tp->fw_ver); 15836 15837 if (newver) { 15838 if (TG3_VER_SIZE - dst_off < 16 || 15839 tg3_nvram_read(tp, offset + 8, &ver_offset)) 15840 return; 15841 15842 offset = offset + ver_offset - start; 15843 for (i = 0; i < 16; i += 4) { 15844 __be32 v; 15845 if (tg3_nvram_read_be32(tp, offset + i, &v)) 15846 return; 15847 15848 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 15849 } 15850 } else { 15851 u32 major, minor; 15852 15853 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 15854 return; 15855 15856 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 15857 TG3_NVM_BCVER_MAJSFT; 15858 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 15859 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 15860 "v%d.%02d", major, minor); 15861 } 15862} 15863 15864static void tg3_read_hwsb_ver(struct tg3 *tp) 15865{ 15866 u32 val, major, minor; 15867 15868 /* Use native endian representation */ 15869 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 15870 return; 15871 15872 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 15873 TG3_NVM_HWSB_CFG1_MAJSFT; 15874 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 15875 TG3_NVM_HWSB_CFG1_MINSFT; 15876 15877 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 15878} 15879 15880static void tg3_read_sb_ver(struct tg3 *tp, u32 val) 15881{ 15882 u32 offset, major, minor, build; 15883 15884 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 15885 15886 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 15887 return; 15888 15889 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 15890 case TG3_EEPROM_SB_REVISION_0: 15891 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 15892 break; 15893 case TG3_EEPROM_SB_REVISION_2: 15894 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 15895 break; 15896 case TG3_EEPROM_SB_REVISION_3: 15897 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 15898 break; 15899 case TG3_EEPROM_SB_REVISION_4: 15900 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 15901 break; 15902 case TG3_EEPROM_SB_REVISION_5: 15903 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 15904 break; 15905 case TG3_EEPROM_SB_REVISION_6: 15906 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 15907 break; 15908 default: 15909 return; 15910 } 15911 15912 if (tg3_nvram_read(tp, offset, &val)) 15913 return; 15914 15915 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 15916 TG3_EEPROM_SB_EDH_BLD_SHFT; 15917 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 15918 TG3_EEPROM_SB_EDH_MAJ_SHFT; 15919 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 15920 15921 if (minor > 99 || build > 26) 15922 return; 15923 15924 offset = strlen(tp->fw_ver); 15925 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 15926 " v%d.%02d", major, minor); 15927 15928 if (build > 0) { 15929 offset = strlen(tp->fw_ver); 15930 if (offset < TG3_VER_SIZE - 1) 15931 tp->fw_ver[offset] = 'a' + build - 1; 15932 } 15933} 15934 15935static void tg3_read_mgmtfw_ver(struct tg3 *tp) 15936{ 15937 u32 val, offset, start; 15938 int i, vlen; 15939 15940 for (offset = TG3_NVM_DIR_START; 15941 offset < TG3_NVM_DIR_END; 15942 offset += TG3_NVM_DIRENT_SIZE) { 15943 if (tg3_nvram_read(tp, offset, &val)) 15944 return; 15945 15946 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 15947 break; 15948 } 15949 15950 if (offset == TG3_NVM_DIR_END) 15951 return; 15952 15953 if (!tg3_flag(tp, 5705_PLUS)) 15954 start = 0x08000000; 15955 else if (tg3_nvram_read(tp, offset - 4, &start)) 15956 return; 15957 15958 if (tg3_nvram_read(tp, offset + 4, &offset) || 15959 !tg3_fw_img_is_valid(tp, offset) || 15960 tg3_nvram_read(tp, offset + 8, &val)) 15961 return; 15962 15963 offset += val - start; 15964 15965 vlen = strlen(tp->fw_ver); 15966 15967 tp->fw_ver[vlen++] = ','; 15968 tp->fw_ver[vlen++] = ' '; 15969 15970 for (i = 0; i < 4; i++) { 15971 __be32 v; 15972 if (tg3_nvram_read_be32(tp, offset, &v)) 15973 return; 15974 15975 offset += sizeof(v); 15976 15977 if (vlen > TG3_VER_SIZE - sizeof(v)) { 15978 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 15979 break; 15980 } 15981 15982 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 15983 vlen += sizeof(v); 15984 } 15985} 15986 15987static void tg3_probe_ncsi(struct tg3 *tp) 15988{ 15989 u32 apedata; 15990 15991 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 15992 if (apedata != APE_SEG_SIG_MAGIC) 15993 return; 15994 15995 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 15996 if (!(apedata & APE_FW_STATUS_READY)) 15997 return; 15998 15999 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 16000 tg3_flag_set(tp, APE_HAS_NCSI); 16001} 16002 16003static void tg3_read_dash_ver(struct tg3 *tp) 16004{ 16005 int vlen; 16006 u32 apedata; 16007 char *fwtype; 16008 16009 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 16010 16011 if (tg3_flag(tp, APE_HAS_NCSI)) 16012 fwtype = "NCSI"; 16013 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725) 16014 fwtype = "SMASH"; 16015 else 16016 fwtype = "DASH"; 16017 16018 vlen = strlen(tp->fw_ver); 16019 16020 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 16021 fwtype, 16022 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 16023 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 16024 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 16025 (apedata & APE_FW_VERSION_BLDMSK)); 16026} 16027 16028static void tg3_read_otp_ver(struct tg3 *tp) 16029{ 16030 u32 val, val2; 16031 16032 if (tg3_asic_rev(tp) != ASIC_REV_5762) 16033 return; 16034 16035 if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) && 16036 !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) && 16037 TG3_OTP_MAGIC0_VALID(val)) { 16038 u64 val64 = (u64) val << 32 | val2; 16039 u32 ver = 0; 16040 int i, vlen; 16041 16042 for (i = 0; i < 7; i++) { 16043 if ((val64 & 0xff) == 0) 16044 break; 16045 ver = val64 & 0xff; 16046 val64 >>= 8; 16047 } 16048 vlen = strlen(tp->fw_ver); 16049 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver); 16050 } 16051} 16052 16053static void tg3_read_fw_ver(struct tg3 *tp) 16054{ 16055 u32 val; 16056 bool vpd_vers = false; 16057 16058 if (tp->fw_ver[0] != 0) 16059 vpd_vers = true; 16060 16061 if (tg3_flag(tp, NO_NVRAM)) { 16062 strcat(tp->fw_ver, "sb"); 16063 tg3_read_otp_ver(tp); 16064 return; 16065 } 16066 16067 if (tg3_nvram_read(tp, 0, &val)) 16068 return; 16069 16070 if (val == TG3_EEPROM_MAGIC) 16071 tg3_read_bc_ver(tp); 16072 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 16073 tg3_read_sb_ver(tp, val); 16074 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 16075 tg3_read_hwsb_ver(tp); 16076 16077 if (tg3_flag(tp, ENABLE_ASF)) { 16078 if (tg3_flag(tp, ENABLE_APE)) { 16079 tg3_probe_ncsi(tp); 16080 if (!vpd_vers) 16081 tg3_read_dash_ver(tp); 16082 } else if (!vpd_vers) { 16083 tg3_read_mgmtfw_ver(tp); 16084 } 16085 } 16086 16087 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 16088} 16089 16090static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 16091{ 16092 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 16093 return TG3_RX_RET_MAX_SIZE_5717; 16094 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 16095 return TG3_RX_RET_MAX_SIZE_5700; 16096 else 16097 return TG3_RX_RET_MAX_SIZE_5705; 16098} 16099 16100static const struct pci_device_id tg3_write_reorder_chipsets[] = { 16101 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 16102 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 16103 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 16104 { }, 16105}; 16106 16107static struct pci_dev *tg3_find_peer(struct tg3 *tp) 16108{ 16109 struct pci_dev *peer; 16110 unsigned int func, devnr = tp->pdev->devfn & ~7; 16111 16112 for (func = 0; func < 8; func++) { 16113 peer = pci_get_slot(tp->pdev->bus, devnr | func); 16114 if (peer && peer != tp->pdev) 16115 break; 16116 pci_dev_put(peer); 16117 } 16118 /* 5704 can be configured in single-port mode, set peer to 16119 * tp->pdev in that case. 16120 */ 16121 if (!peer) { 16122 peer = tp->pdev; 16123 return peer; 16124 } 16125 16126 /* 16127 * We don't need to keep the refcount elevated; there's no way 16128 * to remove one half of this device without removing the other 16129 */ 16130 pci_dev_put(peer); 16131 16132 return peer; 16133} 16134 16135static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 16136{ 16137 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 16138 if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) { 16139 u32 reg; 16140 16141 /* All devices that use the alternate 16142 * ASIC REV location have a CPMU. 16143 */ 16144 tg3_flag_set(tp, CPMU_PRESENT); 16145 16146 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 16147 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 16148 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 16149 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 16150 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 16151 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 16152 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 16153 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 16154 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 16155 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 16156 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) 16157 reg = TG3PCI_GEN2_PRODID_ASICREV; 16158 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 16159 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 16160 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 16161 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 16162 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 16163 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 16164 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 16165 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 16166 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 16167 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 16168 reg = TG3PCI_GEN15_PRODID_ASICREV; 16169 else 16170 reg = TG3PCI_PRODID_ASICREV; 16171 16172 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 16173 } 16174 16175 /* Wrong chip ID in 5752 A0. This code can be removed later 16176 * as A0 is not in production. 16177 */ 16178 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW) 16179 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 16180 16181 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0) 16182 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0; 16183 16184 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16185 tg3_asic_rev(tp) == ASIC_REV_5719 || 16186 tg3_asic_rev(tp) == ASIC_REV_5720) 16187 tg3_flag_set(tp, 5717_PLUS); 16188 16189 if (tg3_asic_rev(tp) == ASIC_REV_57765 || 16190 tg3_asic_rev(tp) == ASIC_REV_57766) 16191 tg3_flag_set(tp, 57765_CLASS); 16192 16193 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || 16194 tg3_asic_rev(tp) == ASIC_REV_5762) 16195 tg3_flag_set(tp, 57765_PLUS); 16196 16197 /* Intentionally exclude ASIC_REV_5906 */ 16198 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16199 tg3_asic_rev(tp) == ASIC_REV_5787 || 16200 tg3_asic_rev(tp) == ASIC_REV_5784 || 16201 tg3_asic_rev(tp) == ASIC_REV_5761 || 16202 tg3_asic_rev(tp) == ASIC_REV_5785 || 16203 tg3_asic_rev(tp) == ASIC_REV_57780 || 16204 tg3_flag(tp, 57765_PLUS)) 16205 tg3_flag_set(tp, 5755_PLUS); 16206 16207 if (tg3_asic_rev(tp) == ASIC_REV_5780 || 16208 tg3_asic_rev(tp) == ASIC_REV_5714) 16209 tg3_flag_set(tp, 5780_CLASS); 16210 16211 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16212 tg3_asic_rev(tp) == ASIC_REV_5752 || 16213 tg3_asic_rev(tp) == ASIC_REV_5906 || 16214 tg3_flag(tp, 5755_PLUS) || 16215 tg3_flag(tp, 5780_CLASS)) 16216 tg3_flag_set(tp, 5750_PLUS); 16217 16218 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 16219 tg3_flag(tp, 5750_PLUS)) 16220 tg3_flag_set(tp, 5705_PLUS); 16221} 16222 16223static bool tg3_10_100_only_device(struct tg3 *tp, 16224 const struct pci_device_id *ent) 16225{ 16226 u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK; 16227 16228 if ((tg3_asic_rev(tp) == ASIC_REV_5703 && 16229 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 16230 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 16231 return true; 16232 16233 if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) { 16234 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 16235 if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100) 16236 return true; 16237 } else { 16238 return true; 16239 } 16240 } 16241 16242 return false; 16243} 16244 16245static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) 16246{ 16247 u32 misc_ctrl_reg; 16248 u32 pci_state_reg, grc_misc_cfg; 16249 u32 val; 16250 u16 pci_cmd; 16251 int err; 16252 16253 /* Force memory write invalidate off. If we leave it on, 16254 * then on 5700_BX chips we have to enable a workaround. 16255 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 16256 * to match the cacheline size. The Broadcom driver have this 16257 * workaround but turns MWI off all the times so never uses 16258 * it. This seems to suggest that the workaround is insufficient. 16259 */ 16260 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16261 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 16262 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16263 16264 /* Important! -- Make sure register accesses are byteswapped 16265 * correctly. Also, for those chips that require it, make 16266 * sure that indirect register accesses are enabled before 16267 * the first operation. 16268 */ 16269 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16270 &misc_ctrl_reg); 16271 tp->misc_host_ctrl |= (misc_ctrl_reg & 16272 MISC_HOST_CTRL_CHIPREV); 16273 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16274 tp->misc_host_ctrl); 16275 16276 tg3_detect_asic_rev(tp, misc_ctrl_reg); 16277 16278 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 16279 * we need to disable memory and use config. cycles 16280 * only to access all registers. The 5702/03 chips 16281 * can mistakenly decode the special cycles from the 16282 * ICH chipsets as memory write cycles, causing corruption 16283 * of register and memory space. Only certain ICH bridges 16284 * will drive special cycles with non-zero data during the 16285 * address phase which can fall within the 5703's address 16286 * range. This is not an ICH bug as the PCI spec allows 16287 * non-zero address during special cycles. However, only 16288 * these ICH bridges are known to drive non-zero addresses 16289 * during special cycles. 16290 * 16291 * Since special cycles do not cross PCI bridges, we only 16292 * enable this workaround if the 5703 is on the secondary 16293 * bus of these ICH bridges. 16294 */ 16295 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) || 16296 (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) { 16297 static struct tg3_dev_id { 16298 u32 vendor; 16299 u32 device; 16300 u32 rev; 16301 } ich_chipsets[] = { 16302 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 16303 PCI_ANY_ID }, 16304 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 16305 PCI_ANY_ID }, 16306 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 16307 0xa }, 16308 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 16309 PCI_ANY_ID }, 16310 { }, 16311 }; 16312 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 16313 struct pci_dev *bridge = NULL; 16314 16315 while (pci_id->vendor != 0) { 16316 bridge = pci_get_device(pci_id->vendor, pci_id->device, 16317 bridge); 16318 if (!bridge) { 16319 pci_id++; 16320 continue; 16321 } 16322 if (pci_id->rev != PCI_ANY_ID) { 16323 if (bridge->revision > pci_id->rev) 16324 continue; 16325 } 16326 if (bridge->subordinate && 16327 (bridge->subordinate->number == 16328 tp->pdev->bus->number)) { 16329 tg3_flag_set(tp, ICH_WORKAROUND); 16330 pci_dev_put(bridge); 16331 break; 16332 } 16333 } 16334 } 16335 16336 if (tg3_asic_rev(tp) == ASIC_REV_5701) { 16337 static struct tg3_dev_id { 16338 u32 vendor; 16339 u32 device; 16340 } bridge_chipsets[] = { 16341 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 16342 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 16343 { }, 16344 }; 16345 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 16346 struct pci_dev *bridge = NULL; 16347 16348 while (pci_id->vendor != 0) { 16349 bridge = pci_get_device(pci_id->vendor, 16350 pci_id->device, 16351 bridge); 16352 if (!bridge) { 16353 pci_id++; 16354 continue; 16355 } 16356 if (bridge->subordinate && 16357 (bridge->subordinate->number <= 16358 tp->pdev->bus->number) && 16359 (bridge->subordinate->busn_res.end >= 16360 tp->pdev->bus->number)) { 16361 tg3_flag_set(tp, 5701_DMA_BUG); 16362 pci_dev_put(bridge); 16363 break; 16364 } 16365 } 16366 } 16367 16368 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 16369 * DMA addresses > 40-bit. This bridge may have other additional 16370 * 57xx devices behind it in some 4-port NIC designs for example. 16371 * Any tg3 device found behind the bridge will also need the 40-bit 16372 * DMA workaround. 16373 */ 16374 if (tg3_flag(tp, 5780_CLASS)) { 16375 tg3_flag_set(tp, 40BIT_DMA_BUG); 16376 tp->msi_cap = tp->pdev->msi_cap; 16377 } else { 16378 struct pci_dev *bridge = NULL; 16379 16380 do { 16381 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 16382 PCI_DEVICE_ID_SERVERWORKS_EPB, 16383 bridge); 16384 if (bridge && bridge->subordinate && 16385 (bridge->subordinate->number <= 16386 tp->pdev->bus->number) && 16387 (bridge->subordinate->busn_res.end >= 16388 tp->pdev->bus->number)) { 16389 tg3_flag_set(tp, 40BIT_DMA_BUG); 16390 pci_dev_put(bridge); 16391 break; 16392 } 16393 } while (bridge); 16394 } 16395 16396 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16397 tg3_asic_rev(tp) == ASIC_REV_5714) 16398 tp->pdev_peer = tg3_find_peer(tp); 16399 16400 /* Determine TSO capabilities */ 16401 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0) 16402 ; /* Do nothing. HW bug. */ 16403 else if (tg3_flag(tp, 57765_PLUS)) 16404 tg3_flag_set(tp, HW_TSO_3); 16405 else if (tg3_flag(tp, 5755_PLUS) || 16406 tg3_asic_rev(tp) == ASIC_REV_5906) 16407 tg3_flag_set(tp, HW_TSO_2); 16408 else if (tg3_flag(tp, 5750_PLUS)) { 16409 tg3_flag_set(tp, HW_TSO_1); 16410 tg3_flag_set(tp, TSO_BUG); 16411 if (tg3_asic_rev(tp) == ASIC_REV_5750 && 16412 tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2) 16413 tg3_flag_clear(tp, TSO_BUG); 16414 } else if (tg3_asic_rev(tp) != ASIC_REV_5700 && 16415 tg3_asic_rev(tp) != ASIC_REV_5701 && 16416 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 16417 tg3_flag_set(tp, FW_TSO); 16418 tg3_flag_set(tp, TSO_BUG); 16419 if (tg3_asic_rev(tp) == ASIC_REV_5705) 16420 tp->fw_needed = FIRMWARE_TG3TSO5; 16421 else 16422 tp->fw_needed = FIRMWARE_TG3TSO; 16423 } 16424 16425 /* Selectively allow TSO based on operating conditions */ 16426 if (tg3_flag(tp, HW_TSO_1) || 16427 tg3_flag(tp, HW_TSO_2) || 16428 tg3_flag(tp, HW_TSO_3) || 16429 tg3_flag(tp, FW_TSO)) { 16430 /* For firmware TSO, assume ASF is disabled. 16431 * We'll disable TSO later if we discover ASF 16432 * is enabled in tg3_get_eeprom_hw_cfg(). 16433 */ 16434 tg3_flag_set(tp, TSO_CAPABLE); 16435 } else { 16436 tg3_flag_clear(tp, TSO_CAPABLE); 16437 tg3_flag_clear(tp, TSO_BUG); 16438 tp->fw_needed = NULL; 16439 } 16440 16441 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) 16442 tp->fw_needed = FIRMWARE_TG3; 16443 16444 if (tg3_asic_rev(tp) == ASIC_REV_57766) 16445 tp->fw_needed = FIRMWARE_TG357766; 16446 16447 tp->irq_max = 1; 16448 16449 if (tg3_flag(tp, 5750_PLUS)) { 16450 tg3_flag_set(tp, SUPPORT_MSI); 16451 if (tg3_chip_rev(tp) == CHIPREV_5750_AX || 16452 tg3_chip_rev(tp) == CHIPREV_5750_BX || 16453 (tg3_asic_rev(tp) == ASIC_REV_5714 && 16454 tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 && 16455 tp->pdev_peer == tp->pdev)) 16456 tg3_flag_clear(tp, SUPPORT_MSI); 16457 16458 if (tg3_flag(tp, 5755_PLUS) || 16459 tg3_asic_rev(tp) == ASIC_REV_5906) { 16460 tg3_flag_set(tp, 1SHOT_MSI); 16461 } 16462 16463 if (tg3_flag(tp, 57765_PLUS)) { 16464 tg3_flag_set(tp, SUPPORT_MSIX); 16465 tp->irq_max = TG3_IRQ_MAX_VECS; 16466 } 16467 } 16468 16469 tp->txq_max = 1; 16470 tp->rxq_max = 1; 16471 if (tp->irq_max > 1) { 16472 tp->rxq_max = TG3_RSS_MAX_NUM_QS; 16473 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS); 16474 16475 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 16476 tg3_asic_rev(tp) == ASIC_REV_5720) 16477 tp->txq_max = tp->irq_max - 1; 16478 } 16479 16480 if (tg3_flag(tp, 5755_PLUS) || 16481 tg3_asic_rev(tp) == ASIC_REV_5906) 16482 tg3_flag_set(tp, SHORT_DMA_BUG); 16483 16484 if (tg3_asic_rev(tp) == ASIC_REV_5719) 16485 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 16486 16487 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16488 tg3_asic_rev(tp) == ASIC_REV_5719 || 16489 tg3_asic_rev(tp) == ASIC_REV_5720 || 16490 tg3_asic_rev(tp) == ASIC_REV_5762) 16491 tg3_flag_set(tp, LRG_PROD_RING_CAP); 16492 16493 if (tg3_flag(tp, 57765_PLUS) && 16494 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0) 16495 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 16496 16497 if (!tg3_flag(tp, 5705_PLUS) || 16498 tg3_flag(tp, 5780_CLASS) || 16499 tg3_flag(tp, USE_JUMBO_BDFLAG)) 16500 tg3_flag_set(tp, JUMBO_CAPABLE); 16501 16502 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16503 &pci_state_reg); 16504 16505 if (pci_is_pcie(tp->pdev)) { 16506 u16 lnkctl; 16507 16508 tg3_flag_set(tp, PCI_EXPRESS); 16509 16510 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl); 16511 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 16512 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16513 tg3_flag_clear(tp, HW_TSO_2); 16514 tg3_flag_clear(tp, TSO_CAPABLE); 16515 } 16516 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 16517 tg3_asic_rev(tp) == ASIC_REV_5761 || 16518 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 || 16519 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1) 16520 tg3_flag_set(tp, CLKREQ_BUG); 16521 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) { 16522 tg3_flag_set(tp, L1PLLPD_EN); 16523 } 16524 } else if (tg3_asic_rev(tp) == ASIC_REV_5785) { 16525 /* BCM5785 devices are effectively PCIe devices, and should 16526 * follow PCIe codepaths, but do not have a PCIe capabilities 16527 * section. 16528 */ 16529 tg3_flag_set(tp, PCI_EXPRESS); 16530 } else if (!tg3_flag(tp, 5705_PLUS) || 16531 tg3_flag(tp, 5780_CLASS)) { 16532 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 16533 if (!tp->pcix_cap) { 16534 dev_err(&tp->pdev->dev, 16535 "Cannot find PCI-X capability, aborting\n"); 16536 return -EIO; 16537 } 16538 16539 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 16540 tg3_flag_set(tp, PCIX_MODE); 16541 } 16542 16543 /* If we have an AMD 762 or VIA K8T800 chipset, write 16544 * reordering to the mailbox registers done by the host 16545 * controller can cause major troubles. We read back from 16546 * every mailbox register write to force the writes to be 16547 * posted to the chip in order. 16548 */ 16549 if (pci_dev_present(tg3_write_reorder_chipsets) && 16550 !tg3_flag(tp, PCI_EXPRESS)) 16551 tg3_flag_set(tp, MBOX_WRITE_REORDER); 16552 16553 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 16554 &tp->pci_cacheline_sz); 16555 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16556 &tp->pci_lat_timer); 16557 if (tg3_asic_rev(tp) == ASIC_REV_5703 && 16558 tp->pci_lat_timer < 64) { 16559 tp->pci_lat_timer = 64; 16560 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16561 tp->pci_lat_timer); 16562 } 16563 16564 /* Important! -- It is critical that the PCI-X hw workaround 16565 * situation is decided before the first MMIO register access. 16566 */ 16567 if (tg3_chip_rev(tp) == CHIPREV_5700_BX) { 16568 /* 5700 BX chips need to have their TX producer index 16569 * mailboxes written twice to workaround a bug. 16570 */ 16571 tg3_flag_set(tp, TXD_MBOX_HWBUG); 16572 16573 /* If we are in PCI-X mode, enable register write workaround. 16574 * 16575 * The workaround is to use indirect register accesses 16576 * for all chip writes not to mailbox registers. 16577 */ 16578 if (tg3_flag(tp, PCIX_MODE)) { 16579 u32 pm_reg; 16580 16581 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16582 16583 /* The chip can have it's power management PCI config 16584 * space registers clobbered due to this bug. 16585 * So explicitly force the chip into D0 here. 16586 */ 16587 pci_read_config_dword(tp->pdev, 16588 tp->pdev->pm_cap + PCI_PM_CTRL, 16589 &pm_reg); 16590 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 16591 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 16592 pci_write_config_dword(tp->pdev, 16593 tp->pdev->pm_cap + PCI_PM_CTRL, 16594 pm_reg); 16595 16596 /* Also, force SERR#/PERR# in PCI command. */ 16597 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16598 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 16599 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16600 } 16601 } 16602 16603 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 16604 tg3_flag_set(tp, PCI_HIGH_SPEED); 16605 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 16606 tg3_flag_set(tp, PCI_32BIT); 16607 16608 /* Chip-specific fixup from Broadcom driver */ 16609 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) && 16610 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 16611 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 16612 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 16613 } 16614 16615 /* Default fast path register access methods */ 16616 tp->read32 = tg3_read32; 16617 tp->write32 = tg3_write32; 16618 tp->read32_mbox = tg3_read32; 16619 tp->write32_mbox = tg3_write32; 16620 tp->write32_tx_mbox = tg3_write32; 16621 tp->write32_rx_mbox = tg3_write32; 16622 16623 /* Various workaround register access methods */ 16624 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 16625 tp->write32 = tg3_write_indirect_reg32; 16626 else if (tg3_asic_rev(tp) == ASIC_REV_5701 || 16627 (tg3_flag(tp, PCI_EXPRESS) && 16628 tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) { 16629 /* 16630 * Back to back register writes can cause problems on these 16631 * chips, the workaround is to read back all reg writes 16632 * except those to mailbox regs. 16633 * 16634 * See tg3_write_indirect_reg32(). 16635 */ 16636 tp->write32 = tg3_write_flush_reg32; 16637 } 16638 16639 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 16640 tp->write32_tx_mbox = tg3_write32_tx_mbox; 16641 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 16642 tp->write32_rx_mbox = tg3_write_flush_reg32; 16643 } 16644 16645 if (tg3_flag(tp, ICH_WORKAROUND)) { 16646 tp->read32 = tg3_read_indirect_reg32; 16647 tp->write32 = tg3_write_indirect_reg32; 16648 tp->read32_mbox = tg3_read_indirect_mbox; 16649 tp->write32_mbox = tg3_write_indirect_mbox; 16650 tp->write32_tx_mbox = tg3_write_indirect_mbox; 16651 tp->write32_rx_mbox = tg3_write_indirect_mbox; 16652 16653 iounmap(tp->regs); 16654 tp->regs = NULL; 16655 16656 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16657 pci_cmd &= ~PCI_COMMAND_MEMORY; 16658 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16659 } 16660 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16661 tp->read32_mbox = tg3_read32_mbox_5906; 16662 tp->write32_mbox = tg3_write32_mbox_5906; 16663 tp->write32_tx_mbox = tg3_write32_mbox_5906; 16664 tp->write32_rx_mbox = tg3_write32_mbox_5906; 16665 } 16666 16667 if (tp->write32 == tg3_write_indirect_reg32 || 16668 (tg3_flag(tp, PCIX_MODE) && 16669 (tg3_asic_rev(tp) == ASIC_REV_5700 || 16670 tg3_asic_rev(tp) == ASIC_REV_5701))) 16671 tg3_flag_set(tp, SRAM_USE_CONFIG); 16672 16673 /* The memory arbiter has to be enabled in order for SRAM accesses 16674 * to succeed. Normally on powerup the tg3 chip firmware will make 16675 * sure it is enabled, but other entities such as system netboot 16676 * code might disable it. 16677 */ 16678 val = tr32(MEMARB_MODE); 16679 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 16680 16681 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 16682 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16683 tg3_flag(tp, 5780_CLASS)) { 16684 if (tg3_flag(tp, PCIX_MODE)) { 16685 pci_read_config_dword(tp->pdev, 16686 tp->pcix_cap + PCI_X_STATUS, 16687 &val); 16688 tp->pci_fn = val & 0x7; 16689 } 16690 } else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16691 tg3_asic_rev(tp) == ASIC_REV_5719 || 16692 tg3_asic_rev(tp) == ASIC_REV_5720) { 16693 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 16694 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG) 16695 val = tr32(TG3_CPMU_STATUS); 16696 16697 if (tg3_asic_rev(tp) == ASIC_REV_5717) 16698 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0; 16699 else 16700 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 16701 TG3_CPMU_STATUS_FSHFT_5719; 16702 } 16703 16704 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 16705 tp->write32_tx_mbox = tg3_write_flush_reg32; 16706 tp->write32_rx_mbox = tg3_write_flush_reg32; 16707 } 16708 16709 /* Get eeprom hw config before calling tg3_set_power_state(). 16710 * In particular, the TG3_FLAG_IS_NIC flag must be 16711 * determined before calling tg3_set_power_state() so that 16712 * we know whether or not to switch out of Vaux power. 16713 * When the flag is set, it means that GPIO1 is used for eeprom 16714 * write protect and also implies that it is a LOM where GPIOs 16715 * are not used to switch power. 16716 */ 16717 tg3_get_eeprom_hw_cfg(tp); 16718 16719 if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) { 16720 tg3_flag_clear(tp, TSO_CAPABLE); 16721 tg3_flag_clear(tp, TSO_BUG); 16722 tp->fw_needed = NULL; 16723 } 16724 16725 if (tg3_flag(tp, ENABLE_APE)) { 16726 /* Allow reads and writes to the 16727 * APE register and memory space. 16728 */ 16729 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 16730 PCISTATE_ALLOW_APE_SHMEM_WR | 16731 PCISTATE_ALLOW_APE_PSPACE_WR; 16732 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 16733 pci_state_reg); 16734 16735 tg3_ape_lock_init(tp); 16736 tp->ape_hb_interval = 16737 msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC); 16738 } 16739 16740 /* Set up tp->grc_local_ctrl before calling 16741 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 16742 * will bring 5700's external PHY out of reset. 16743 * It is also used as eeprom write protect on LOMs. 16744 */ 16745 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 16746 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16747 tg3_flag(tp, EEPROM_WRITE_PROT)) 16748 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 16749 GRC_LCLCTRL_GPIO_OUTPUT1); 16750 /* Unused GPIO3 must be driven as output on 5752 because there 16751 * are no pull-up resistors on unused GPIO pins. 16752 */ 16753 else if (tg3_asic_rev(tp) == ASIC_REV_5752) 16754 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 16755 16756 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16757 tg3_asic_rev(tp) == ASIC_REV_57780 || 16758 tg3_flag(tp, 57765_CLASS)) 16759 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16760 16761 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 16762 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 16763 /* Turn off the debug UART. */ 16764 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16765 if (tg3_flag(tp, IS_NIC)) 16766 /* Keep VMain power. */ 16767 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 16768 GRC_LCLCTRL_GPIO_OUTPUT0; 16769 } 16770 16771 if (tg3_asic_rev(tp) == ASIC_REV_5762) 16772 tp->grc_local_ctrl |= 16773 tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL; 16774 16775 /* Switch out of Vaux if it is a NIC */ 16776 tg3_pwrsrc_switch_to_vmain(tp); 16777 16778 /* Derive initial jumbo mode from MTU assigned in 16779 * ether_setup() via the alloc_etherdev() call 16780 */ 16781 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 16782 tg3_flag_set(tp, JUMBO_RING_ENABLE); 16783 16784 /* Determine WakeOnLan speed to use. */ 16785 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16786 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16787 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16788 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) { 16789 tg3_flag_clear(tp, WOL_SPEED_100MB); 16790 } else { 16791 tg3_flag_set(tp, WOL_SPEED_100MB); 16792 } 16793 16794 if (tg3_asic_rev(tp) == ASIC_REV_5906) 16795 tp->phy_flags |= TG3_PHYFLG_IS_FET; 16796 16797 /* A few boards don't want Ethernet@WireSpeed phy feature */ 16798 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16799 (tg3_asic_rev(tp) == ASIC_REV_5705 && 16800 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) && 16801 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) || 16802 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 16803 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 16804 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 16805 16806 if (tg3_chip_rev(tp) == CHIPREV_5703_AX || 16807 tg3_chip_rev(tp) == CHIPREV_5704_AX) 16808 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 16809 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) 16810 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 16811 16812 if (tg3_flag(tp, 5705_PLUS) && 16813 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 16814 tg3_asic_rev(tp) != ASIC_REV_5785 && 16815 tg3_asic_rev(tp) != ASIC_REV_57780 && 16816 !tg3_flag(tp, 57765_PLUS)) { 16817 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16818 tg3_asic_rev(tp) == ASIC_REV_5787 || 16819 tg3_asic_rev(tp) == ASIC_REV_5784 || 16820 tg3_asic_rev(tp) == ASIC_REV_5761) { 16821 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 16822 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 16823 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 16824 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 16825 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 16826 } else 16827 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 16828 } 16829 16830 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 16831 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 16832 tp->phy_otp = tg3_read_otp_phycfg(tp); 16833 if (tp->phy_otp == 0) 16834 tp->phy_otp = TG3_OTP_DEFAULT; 16835 } 16836 16837 if (tg3_flag(tp, CPMU_PRESENT)) 16838 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 16839 else 16840 tp->mi_mode = MAC_MI_MODE_BASE; 16841 16842 tp->coalesce_mode = 0; 16843 if (tg3_chip_rev(tp) != CHIPREV_5700_AX && 16844 tg3_chip_rev(tp) != CHIPREV_5700_BX) 16845 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 16846 16847 /* Set these bits to enable statistics workaround. */ 16848 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16849 tg3_asic_rev(tp) == ASIC_REV_5762 || 16850 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 16851 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) { 16852 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 16853 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 16854 } 16855 16856 if (tg3_asic_rev(tp) == ASIC_REV_5785 || 16857 tg3_asic_rev(tp) == ASIC_REV_57780) 16858 tg3_flag_set(tp, USE_PHYLIB); 16859 16860 err = tg3_mdio_init(tp); 16861 if (err) 16862 return err; 16863 16864 /* Initialize data/descriptor byte/word swapping. */ 16865 val = tr32(GRC_MODE); 16866 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 16867 tg3_asic_rev(tp) == ASIC_REV_5762) 16868 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 16869 GRC_MODE_WORD_SWAP_B2HRX_DATA | 16870 GRC_MODE_B2HRX_ENABLE | 16871 GRC_MODE_HTX2B_ENABLE | 16872 GRC_MODE_HOST_STACKUP); 16873 else 16874 val &= GRC_MODE_HOST_STACKUP; 16875 16876 tw32(GRC_MODE, val | tp->grc_mode); 16877 16878 tg3_switch_clocks(tp); 16879 16880 /* Clear this out for sanity. */ 16881 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 16882 16883 /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */ 16884 tw32(TG3PCI_REG_BASE_ADDR, 0); 16885 16886 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16887 &pci_state_reg); 16888 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 16889 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 16890 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16891 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16892 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 || 16893 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) { 16894 void __iomem *sram_base; 16895 16896 /* Write some dummy words into the SRAM status block 16897 * area, see if it reads back correctly. If the return 16898 * value is bad, force enable the PCIX workaround. 16899 */ 16900 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 16901 16902 writel(0x00000000, sram_base); 16903 writel(0x00000000, sram_base + 4); 16904 writel(0xffffffff, sram_base + 4); 16905 if (readl(sram_base) != 0x00000000) 16906 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16907 } 16908 } 16909 16910 udelay(50); 16911 tg3_nvram_init(tp); 16912 16913 /* If the device has an NVRAM, no need to load patch firmware */ 16914 if (tg3_asic_rev(tp) == ASIC_REV_57766 && 16915 !tg3_flag(tp, NO_NVRAM)) 16916 tp->fw_needed = NULL; 16917 16918 grc_misc_cfg = tr32(GRC_MISC_CFG); 16919 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 16920 16921 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 16922 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 16923 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 16924 tg3_flag_set(tp, IS_5788); 16925 16926 if (!tg3_flag(tp, IS_5788) && 16927 tg3_asic_rev(tp) != ASIC_REV_5700) 16928 tg3_flag_set(tp, TAGGED_STATUS); 16929 if (tg3_flag(tp, TAGGED_STATUS)) { 16930 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 16931 HOSTCC_MODE_CLRTICK_TXBD); 16932 16933 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 16934 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16935 tp->misc_host_ctrl); 16936 } 16937 16938 /* Preserve the APE MAC_MODE bits */ 16939 if (tg3_flag(tp, ENABLE_APE)) 16940 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 16941 else 16942 tp->mac_mode = 0; 16943 16944 if (tg3_10_100_only_device(tp, ent)) 16945 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 16946 16947 err = tg3_phy_probe(tp); 16948 if (err) { 16949 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 16950 /* ... but do not return immediately ... */ 16951 tg3_mdio_fini(tp); 16952 } 16953 16954 tg3_read_vpd(tp); 16955 tg3_read_fw_ver(tp); 16956 16957 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 16958 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16959 } else { 16960 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16961 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16962 else 16963 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16964 } 16965 16966 /* 5700 {AX,BX} chips have a broken status block link 16967 * change bit implementation, so we must use the 16968 * status register in those cases. 16969 */ 16970 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16971 tg3_flag_set(tp, USE_LINKCHG_REG); 16972 else 16973 tg3_flag_clear(tp, USE_LINKCHG_REG); 16974 16975 /* The led_ctrl is set during tg3_phy_probe, here we might 16976 * have to force the link status polling mechanism based 16977 * upon subsystem IDs. 16978 */ 16979 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 16980 tg3_asic_rev(tp) == ASIC_REV_5701 && 16981 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 16982 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16983 tg3_flag_set(tp, USE_LINKCHG_REG); 16984 } 16985 16986 /* For all SERDES we poll the MAC status register. */ 16987 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 16988 tg3_flag_set(tp, POLL_SERDES); 16989 else 16990 tg3_flag_clear(tp, POLL_SERDES); 16991 16992 if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF)) 16993 tg3_flag_set(tp, POLL_CPMU_LINK); 16994 16995 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 16996 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 16997 if (tg3_asic_rev(tp) == ASIC_REV_5701 && 16998 tg3_flag(tp, PCIX_MODE)) { 16999 tp->rx_offset = NET_SKB_PAD; 17000#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 17001 tp->rx_copy_thresh = ~(u16)0; 17002#endif 17003 } 17004 17005 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 17006 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 17007 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 17008 17009 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 17010 17011 /* Increment the rx prod index on the rx std ring by at most 17012 * 8 for these chips to workaround hw errata. 17013 */ 17014 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 17015 tg3_asic_rev(tp) == ASIC_REV_5752 || 17016 tg3_asic_rev(tp) == ASIC_REV_5755) 17017 tp->rx_std_max_post = 8; 17018 17019 if (tg3_flag(tp, ASPM_WORKAROUND)) 17020 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 17021 PCIE_PWR_MGMT_L1_THRESH_MSK; 17022 17023 return err; 17024} 17025 17026static int tg3_get_device_address(struct tg3 *tp) 17027{ 17028 struct net_device *dev = tp->dev; 17029 u32 hi, lo, mac_offset; 17030 int addr_ok = 0; 17031 int err; 17032 17033 if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr)) 17034 return 0; 17035 17036 if (tg3_flag(tp, IS_SSB_CORE)) { 17037 err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]); 17038 if (!err && is_valid_ether_addr(&dev->dev_addr[0])) 17039 return 0; 17040 } 17041 17042 mac_offset = 0x7c; 17043 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 17044 tg3_flag(tp, 5780_CLASS)) { 17045 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 17046 mac_offset = 0xcc; 17047 if (tg3_nvram_lock(tp)) 17048 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 17049 else 17050 tg3_nvram_unlock(tp); 17051 } else if (tg3_flag(tp, 5717_PLUS)) { 17052 if (tp->pci_fn & 1) 17053 mac_offset = 0xcc; 17054 if (tp->pci_fn > 1) 17055 mac_offset += 0x18c; 17056 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) 17057 mac_offset = 0x10; 17058 17059 /* First try to get it from MAC address mailbox. */ 17060 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 17061 if ((hi >> 16) == 0x484b) { 17062 dev->dev_addr[0] = (hi >> 8) & 0xff; 17063 dev->dev_addr[1] = (hi >> 0) & 0xff; 17064 17065 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 17066 dev->dev_addr[2] = (lo >> 24) & 0xff; 17067 dev->dev_addr[3] = (lo >> 16) & 0xff; 17068 dev->dev_addr[4] = (lo >> 8) & 0xff; 17069 dev->dev_addr[5] = (lo >> 0) & 0xff; 17070 17071 /* Some old bootcode may report a 0 MAC address in SRAM */ 17072 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]); 17073 } 17074 if (!addr_ok) { 17075 /* Next, try NVRAM. */ 17076 if (!tg3_flag(tp, NO_NVRAM) && 17077 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 17078 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 17079 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2); 17080 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo)); 17081 } 17082 /* Finally just fetch it out of the MAC control regs. */ 17083 else { 17084 hi = tr32(MAC_ADDR_0_HIGH); 17085 lo = tr32(MAC_ADDR_0_LOW); 17086 17087 dev->dev_addr[5] = lo & 0xff; 17088 dev->dev_addr[4] = (lo >> 8) & 0xff; 17089 dev->dev_addr[3] = (lo >> 16) & 0xff; 17090 dev->dev_addr[2] = (lo >> 24) & 0xff; 17091 dev->dev_addr[1] = hi & 0xff; 17092 dev->dev_addr[0] = (hi >> 8) & 0xff; 17093 } 17094 } 17095 17096 if (!is_valid_ether_addr(&dev->dev_addr[0])) 17097 return -EINVAL; 17098 return 0; 17099} 17100 17101#define BOUNDARY_SINGLE_CACHELINE 1 17102#define BOUNDARY_MULTI_CACHELINE 2 17103 17104static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 17105{ 17106 int cacheline_size; 17107 u8 byte; 17108 int goal; 17109 17110 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 17111 if (byte == 0) 17112 cacheline_size = 1024; 17113 else 17114 cacheline_size = (int) byte * 4; 17115 17116 /* On 5703 and later chips, the boundary bits have no 17117 * effect. 17118 */ 17119 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17120 tg3_asic_rev(tp) != ASIC_REV_5701 && 17121 !tg3_flag(tp, PCI_EXPRESS)) 17122 goto out; 17123 17124#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 17125 goal = BOUNDARY_MULTI_CACHELINE; 17126#else 17127#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 17128 goal = BOUNDARY_SINGLE_CACHELINE; 17129#else 17130 goal = 0; 17131#endif 17132#endif 17133 17134 if (tg3_flag(tp, 57765_PLUS)) { 17135 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 17136 goto out; 17137 } 17138 17139 if (!goal) 17140 goto out; 17141 17142 /* PCI controllers on most RISC systems tend to disconnect 17143 * when a device tries to burst across a cache-line boundary. 17144 * Therefore, letting tg3 do so just wastes PCI bandwidth. 17145 * 17146 * Unfortunately, for PCI-E there are only limited 17147 * write-side controls for this, and thus for reads 17148 * we will still get the disconnects. We'll also waste 17149 * these PCI cycles for both read and write for chips 17150 * other than 5700 and 5701 which do not implement the 17151 * boundary bits. 17152 */ 17153 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 17154 switch (cacheline_size) { 17155 case 16: 17156 case 32: 17157 case 64: 17158 case 128: 17159 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17160 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 17161 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 17162 } else { 17163 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17164 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17165 } 17166 break; 17167 17168 case 256: 17169 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 17170 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 17171 break; 17172 17173 default: 17174 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17175 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17176 break; 17177 } 17178 } else if (tg3_flag(tp, PCI_EXPRESS)) { 17179 switch (cacheline_size) { 17180 case 16: 17181 case 32: 17182 case 64: 17183 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17184 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17185 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 17186 break; 17187 } 17188 fallthrough; 17189 case 128: 17190 default: 17191 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17192 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 17193 break; 17194 } 17195 } else { 17196 switch (cacheline_size) { 17197 case 16: 17198 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17199 val |= (DMA_RWCTRL_READ_BNDRY_16 | 17200 DMA_RWCTRL_WRITE_BNDRY_16); 17201 break; 17202 } 17203 fallthrough; 17204 case 32: 17205 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17206 val |= (DMA_RWCTRL_READ_BNDRY_32 | 17207 DMA_RWCTRL_WRITE_BNDRY_32); 17208 break; 17209 } 17210 fallthrough; 17211 case 64: 17212 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17213 val |= (DMA_RWCTRL_READ_BNDRY_64 | 17214 DMA_RWCTRL_WRITE_BNDRY_64); 17215 break; 17216 } 17217 fallthrough; 17218 case 128: 17219 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17220 val |= (DMA_RWCTRL_READ_BNDRY_128 | 17221 DMA_RWCTRL_WRITE_BNDRY_128); 17222 break; 17223 } 17224 fallthrough; 17225 case 256: 17226 val |= (DMA_RWCTRL_READ_BNDRY_256 | 17227 DMA_RWCTRL_WRITE_BNDRY_256); 17228 break; 17229 case 512: 17230 val |= (DMA_RWCTRL_READ_BNDRY_512 | 17231 DMA_RWCTRL_WRITE_BNDRY_512); 17232 break; 17233 case 1024: 17234 default: 17235 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 17236 DMA_RWCTRL_WRITE_BNDRY_1024); 17237 break; 17238 } 17239 } 17240 17241out: 17242 return val; 17243} 17244 17245static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, 17246 int size, bool to_device) 17247{ 17248 struct tg3_internal_buffer_desc test_desc; 17249 u32 sram_dma_descs; 17250 int i, ret; 17251 17252 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 17253 17254 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 17255 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 17256 tw32(RDMAC_STATUS, 0); 17257 tw32(WDMAC_STATUS, 0); 17258 17259 tw32(BUFMGR_MODE, 0); 17260 tw32(FTQ_RESET, 0); 17261 17262 test_desc.addr_hi = ((u64) buf_dma) >> 32; 17263 test_desc.addr_lo = buf_dma & 0xffffffff; 17264 test_desc.nic_mbuf = 0x00002100; 17265 test_desc.len = size; 17266 17267 /* 17268 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 17269 * the *second* time the tg3 driver was getting loaded after an 17270 * initial scan. 17271 * 17272 * Broadcom tells me: 17273 * ...the DMA engine is connected to the GRC block and a DMA 17274 * reset may affect the GRC block in some unpredictable way... 17275 * The behavior of resets to individual blocks has not been tested. 17276 * 17277 * Broadcom noted the GRC reset will also reset all sub-components. 17278 */ 17279 if (to_device) { 17280 test_desc.cqid_sqid = (13 << 8) | 2; 17281 17282 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 17283 udelay(40); 17284 } else { 17285 test_desc.cqid_sqid = (16 << 8) | 7; 17286 17287 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 17288 udelay(40); 17289 } 17290 test_desc.flags = 0x00000005; 17291 17292 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 17293 u32 val; 17294 17295 val = *(((u32 *)&test_desc) + i); 17296 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 17297 sram_dma_descs + (i * sizeof(u32))); 17298 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 17299 } 17300 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 17301 17302 if (to_device) 17303 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 17304 else 17305 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 17306 17307 ret = -ENODEV; 17308 for (i = 0; i < 40; i++) { 17309 u32 val; 17310 17311 if (to_device) 17312 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 17313 else 17314 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 17315 if ((val & 0xffff) == sram_dma_descs) { 17316 ret = 0; 17317 break; 17318 } 17319 17320 udelay(100); 17321 } 17322 17323 return ret; 17324} 17325 17326#define TEST_BUFFER_SIZE 0x2000 17327 17328static const struct pci_device_id tg3_dma_wait_state_chipsets[] = { 17329 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 17330 { }, 17331}; 17332 17333static int tg3_test_dma(struct tg3 *tp) 17334{ 17335 dma_addr_t buf_dma; 17336 u32 *buf, saved_dma_rwctrl; 17337 int ret = 0; 17338 17339 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 17340 &buf_dma, GFP_KERNEL); 17341 if (!buf) { 17342 ret = -ENOMEM; 17343 goto out_nofree; 17344 } 17345 17346 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 17347 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 17348 17349 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 17350 17351 if (tg3_flag(tp, 57765_PLUS)) 17352 goto out; 17353 17354 if (tg3_flag(tp, PCI_EXPRESS)) { 17355 /* DMA read watermark not used on PCIE */ 17356 tp->dma_rwctrl |= 0x00180000; 17357 } else if (!tg3_flag(tp, PCIX_MODE)) { 17358 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 17359 tg3_asic_rev(tp) == ASIC_REV_5750) 17360 tp->dma_rwctrl |= 0x003f0000; 17361 else 17362 tp->dma_rwctrl |= 0x003f000f; 17363 } else { 17364 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17365 tg3_asic_rev(tp) == ASIC_REV_5704) { 17366 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 17367 u32 read_water = 0x7; 17368 17369 /* If the 5704 is behind the EPB bridge, we can 17370 * do the less restrictive ONE_DMA workaround for 17371 * better performance. 17372 */ 17373 if (tg3_flag(tp, 40BIT_DMA_BUG) && 17374 tg3_asic_rev(tp) == ASIC_REV_5704) 17375 tp->dma_rwctrl |= 0x8000; 17376 else if (ccval == 0x6 || ccval == 0x7) 17377 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17378 17379 if (tg3_asic_rev(tp) == ASIC_REV_5703) 17380 read_water = 4; 17381 /* Set bit 23 to enable PCIX hw bug fix */ 17382 tp->dma_rwctrl |= 17383 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 17384 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 17385 (1 << 23); 17386 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) { 17387 /* 5780 always in PCIX mode */ 17388 tp->dma_rwctrl |= 0x00144000; 17389 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) { 17390 /* 5714 always in PCIX mode */ 17391 tp->dma_rwctrl |= 0x00148000; 17392 } else { 17393 tp->dma_rwctrl |= 0x001b000f; 17394 } 17395 } 17396 if (tg3_flag(tp, ONE_DMA_AT_ONCE)) 17397 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17398 17399 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17400 tg3_asic_rev(tp) == ASIC_REV_5704) 17401 tp->dma_rwctrl &= 0xfffffff0; 17402 17403 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 17404 tg3_asic_rev(tp) == ASIC_REV_5701) { 17405 /* Remove this if it causes problems for some boards. */ 17406 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 17407 17408 /* On 5700/5701 chips, we need to set this bit. 17409 * Otherwise the chip will issue cacheline transactions 17410 * to streamable DMA memory with not all the byte 17411 * enables turned on. This is an error on several 17412 * RISC PCI controllers, in particular sparc64. 17413 * 17414 * On 5703/5704 chips, this bit has been reassigned 17415 * a different meaning. In particular, it is used 17416 * on those chips to enable a PCI-X workaround. 17417 */ 17418 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 17419 } 17420 17421 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17422 17423 17424 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17425 tg3_asic_rev(tp) != ASIC_REV_5701) 17426 goto out; 17427 17428 /* It is best to perform DMA test with maximum write burst size 17429 * to expose the 5700/5701 write DMA bug. 17430 */ 17431 saved_dma_rwctrl = tp->dma_rwctrl; 17432 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17433 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17434 17435 while (1) { 17436 u32 *p = buf, i; 17437 17438 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 17439 p[i] = i; 17440 17441 /* Send the buffer to the chip. */ 17442 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true); 17443 if (ret) { 17444 dev_err(&tp->pdev->dev, 17445 "%s: Buffer write failed. err = %d\n", 17446 __func__, ret); 17447 break; 17448 } 17449 17450 /* Now read it back. */ 17451 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false); 17452 if (ret) { 17453 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 17454 "err = %d\n", __func__, ret); 17455 break; 17456 } 17457 17458 /* Verify it. */ 17459 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 17460 if (p[i] == i) 17461 continue; 17462 17463 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17464 DMA_RWCTRL_WRITE_BNDRY_16) { 17465 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17466 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17467 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17468 break; 17469 } else { 17470 dev_err(&tp->pdev->dev, 17471 "%s: Buffer corrupted on read back! " 17472 "(%d != %d)\n", __func__, p[i], i); 17473 ret = -ENODEV; 17474 goto out; 17475 } 17476 } 17477 17478 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 17479 /* Success. */ 17480 ret = 0; 17481 break; 17482 } 17483 } 17484 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17485 DMA_RWCTRL_WRITE_BNDRY_16) { 17486 /* DMA test passed without adjusting DMA boundary, 17487 * now look for chipsets that are known to expose the 17488 * DMA bug without failing the test. 17489 */ 17490 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 17491 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17492 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17493 } else { 17494 /* Safe to use the calculated DMA boundary. */ 17495 tp->dma_rwctrl = saved_dma_rwctrl; 17496 } 17497 17498 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17499 } 17500 17501out: 17502 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 17503out_nofree: 17504 return ret; 17505} 17506 17507static void tg3_init_bufmgr_config(struct tg3 *tp) 17508{ 17509 if (tg3_flag(tp, 57765_PLUS)) { 17510 tp->bufmgr_config.mbuf_read_dma_low_water = 17511 DEFAULT_MB_RDMA_LOW_WATER_5705; 17512 tp->bufmgr_config.mbuf_mac_rx_low_water = 17513 DEFAULT_MB_MACRX_LOW_WATER_57765; 17514 tp->bufmgr_config.mbuf_high_water = 17515 DEFAULT_MB_HIGH_WATER_57765; 17516 17517 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17518 DEFAULT_MB_RDMA_LOW_WATER_5705; 17519 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17520 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 17521 tp->bufmgr_config.mbuf_high_water_jumbo = 17522 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 17523 } else if (tg3_flag(tp, 5705_PLUS)) { 17524 tp->bufmgr_config.mbuf_read_dma_low_water = 17525 DEFAULT_MB_RDMA_LOW_WATER_5705; 17526 tp->bufmgr_config.mbuf_mac_rx_low_water = 17527 DEFAULT_MB_MACRX_LOW_WATER_5705; 17528 tp->bufmgr_config.mbuf_high_water = 17529 DEFAULT_MB_HIGH_WATER_5705; 17530 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 17531 tp->bufmgr_config.mbuf_mac_rx_low_water = 17532 DEFAULT_MB_MACRX_LOW_WATER_5906; 17533 tp->bufmgr_config.mbuf_high_water = 17534 DEFAULT_MB_HIGH_WATER_5906; 17535 } 17536 17537 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17538 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 17539 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17540 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 17541 tp->bufmgr_config.mbuf_high_water_jumbo = 17542 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 17543 } else { 17544 tp->bufmgr_config.mbuf_read_dma_low_water = 17545 DEFAULT_MB_RDMA_LOW_WATER; 17546 tp->bufmgr_config.mbuf_mac_rx_low_water = 17547 DEFAULT_MB_MACRX_LOW_WATER; 17548 tp->bufmgr_config.mbuf_high_water = 17549 DEFAULT_MB_HIGH_WATER; 17550 17551 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17552 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 17553 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17554 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 17555 tp->bufmgr_config.mbuf_high_water_jumbo = 17556 DEFAULT_MB_HIGH_WATER_JUMBO; 17557 } 17558 17559 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 17560 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 17561} 17562 17563static char *tg3_phy_string(struct tg3 *tp) 17564{ 17565 switch (tp->phy_id & TG3_PHY_ID_MASK) { 17566 case TG3_PHY_ID_BCM5400: return "5400"; 17567 case TG3_PHY_ID_BCM5401: return "5401"; 17568 case TG3_PHY_ID_BCM5411: return "5411"; 17569 case TG3_PHY_ID_BCM5701: return "5701"; 17570 case TG3_PHY_ID_BCM5703: return "5703"; 17571 case TG3_PHY_ID_BCM5704: return "5704"; 17572 case TG3_PHY_ID_BCM5705: return "5705"; 17573 case TG3_PHY_ID_BCM5750: return "5750"; 17574 case TG3_PHY_ID_BCM5752: return "5752"; 17575 case TG3_PHY_ID_BCM5714: return "5714"; 17576 case TG3_PHY_ID_BCM5780: return "5780"; 17577 case TG3_PHY_ID_BCM5755: return "5755"; 17578 case TG3_PHY_ID_BCM5787: return "5787"; 17579 case TG3_PHY_ID_BCM5784: return "5784"; 17580 case TG3_PHY_ID_BCM5756: return "5722/5756"; 17581 case TG3_PHY_ID_BCM5906: return "5906"; 17582 case TG3_PHY_ID_BCM5761: return "5761"; 17583 case TG3_PHY_ID_BCM5718C: return "5718C"; 17584 case TG3_PHY_ID_BCM5718S: return "5718S"; 17585 case TG3_PHY_ID_BCM57765: return "57765"; 17586 case TG3_PHY_ID_BCM5719C: return "5719C"; 17587 case TG3_PHY_ID_BCM5720C: return "5720C"; 17588 case TG3_PHY_ID_BCM5762: return "5762C"; 17589 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 17590 case 0: return "serdes"; 17591 default: return "unknown"; 17592 } 17593} 17594 17595static char *tg3_bus_string(struct tg3 *tp, char *str) 17596{ 17597 if (tg3_flag(tp, PCI_EXPRESS)) { 17598 strcpy(str, "PCI Express"); 17599 return str; 17600 } else if (tg3_flag(tp, PCIX_MODE)) { 17601 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 17602 17603 strcpy(str, "PCIX:"); 17604 17605 if ((clock_ctrl == 7) || 17606 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 17607 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 17608 strcat(str, "133MHz"); 17609 else if (clock_ctrl == 0) 17610 strcat(str, "33MHz"); 17611 else if (clock_ctrl == 2) 17612 strcat(str, "50MHz"); 17613 else if (clock_ctrl == 4) 17614 strcat(str, "66MHz"); 17615 else if (clock_ctrl == 6) 17616 strcat(str, "100MHz"); 17617 } else { 17618 strcpy(str, "PCI:"); 17619 if (tg3_flag(tp, PCI_HIGH_SPEED)) 17620 strcat(str, "66MHz"); 17621 else 17622 strcat(str, "33MHz"); 17623 } 17624 if (tg3_flag(tp, PCI_32BIT)) 17625 strcat(str, ":32-bit"); 17626 else 17627 strcat(str, ":64-bit"); 17628 return str; 17629} 17630 17631static void tg3_init_coal(struct tg3 *tp) 17632{ 17633 struct ethtool_coalesce *ec = &tp->coal; 17634 17635 memset(ec, 0, sizeof(*ec)); 17636 ec->cmd = ETHTOOL_GCOALESCE; 17637 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 17638 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 17639 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 17640 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 17641 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 17642 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 17643 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 17644 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 17645 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 17646 17647 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 17648 HOSTCC_MODE_CLRTICK_TXBD)) { 17649 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 17650 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 17651 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 17652 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 17653 } 17654 17655 if (tg3_flag(tp, 5705_PLUS)) { 17656 ec->rx_coalesce_usecs_irq = 0; 17657 ec->tx_coalesce_usecs_irq = 0; 17658 ec->stats_block_coalesce_usecs = 0; 17659 } 17660} 17661 17662static int tg3_init_one(struct pci_dev *pdev, 17663 const struct pci_device_id *ent) 17664{ 17665 struct net_device *dev; 17666 struct tg3 *tp; 17667 int i, err; 17668 u32 sndmbx, rcvmbx, intmbx; 17669 char str[40]; 17670 u64 dma_mask, persist_dma_mask; 17671 netdev_features_t features = 0; 17672 17673 err = pci_enable_device(pdev); 17674 if (err) { 17675 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 17676 return err; 17677 } 17678 17679 err = pci_request_regions(pdev, DRV_MODULE_NAME); 17680 if (err) { 17681 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 17682 goto err_out_disable_pdev; 17683 } 17684 17685 pci_set_master(pdev); 17686 17687 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 17688 if (!dev) { 17689 err = -ENOMEM; 17690 goto err_out_free_res; 17691 } 17692 17693 SET_NETDEV_DEV(dev, &pdev->dev); 17694 17695 tp = netdev_priv(dev); 17696 tp->pdev = pdev; 17697 tp->dev = dev; 17698 tp->rx_mode = TG3_DEF_RX_MODE; 17699 tp->tx_mode = TG3_DEF_TX_MODE; 17700 tp->irq_sync = 1; 17701 tp->pcierr_recovery = false; 17702 17703 if (tg3_debug > 0) 17704 tp->msg_enable = tg3_debug; 17705 else 17706 tp->msg_enable = TG3_DEF_MSG_ENABLE; 17707 17708 if (pdev_is_ssb_gige_core(pdev)) { 17709 tg3_flag_set(tp, IS_SSB_CORE); 17710 if (ssb_gige_must_flush_posted_writes(pdev)) 17711 tg3_flag_set(tp, FLUSH_POSTED_WRITES); 17712 if (ssb_gige_one_dma_at_once(pdev)) 17713 tg3_flag_set(tp, ONE_DMA_AT_ONCE); 17714 if (ssb_gige_have_roboswitch(pdev)) { 17715 tg3_flag_set(tp, USE_PHYLIB); 17716 tg3_flag_set(tp, ROBOSWITCH); 17717 } 17718 if (ssb_gige_is_rgmii(pdev)) 17719 tg3_flag_set(tp, RGMII_MODE); 17720 } 17721 17722 /* The word/byte swap controls here control register access byte 17723 * swapping. DMA data byte swapping is controlled in the GRC_MODE 17724 * setting below. 17725 */ 17726 tp->misc_host_ctrl = 17727 MISC_HOST_CTRL_MASK_PCI_INT | 17728 MISC_HOST_CTRL_WORD_SWAP | 17729 MISC_HOST_CTRL_INDIR_ACCESS | 17730 MISC_HOST_CTRL_PCISTATE_RW; 17731 17732 /* The NONFRM (non-frame) byte/word swap controls take effect 17733 * on descriptor entries, anything which isn't packet data. 17734 * 17735 * The StrongARM chips on the board (one for tx, one for rx) 17736 * are running in big-endian mode. 17737 */ 17738 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 17739 GRC_MODE_WSWAP_NONFRM_DATA); 17740#ifdef __BIG_ENDIAN 17741 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 17742#endif 17743 spin_lock_init(&tp->lock); 17744 spin_lock_init(&tp->indirect_lock); 17745 INIT_WORK(&tp->reset_task, tg3_reset_task); 17746 17747 tp->regs = pci_ioremap_bar(pdev, BAR_0); 17748 if (!tp->regs) { 17749 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 17750 err = -ENOMEM; 17751 goto err_out_free_dev; 17752 } 17753 17754 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 17755 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 17756 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 17757 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 17758 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 17759 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 17760 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 17761 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 17762 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 17763 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 17764 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 17765 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 17766 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 17767 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 17768 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) { 17769 tg3_flag_set(tp, ENABLE_APE); 17770 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 17771 if (!tp->aperegs) { 17772 dev_err(&pdev->dev, 17773 "Cannot map APE registers, aborting\n"); 17774 err = -ENOMEM; 17775 goto err_out_iounmap; 17776 } 17777 } 17778 17779 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 17780 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 17781 17782 dev->ethtool_ops = &tg3_ethtool_ops; 17783 dev->watchdog_timeo = TG3_TX_TIMEOUT; 17784 dev->netdev_ops = &tg3_netdev_ops; 17785 dev->irq = pdev->irq; 17786 17787 err = tg3_get_invariants(tp, ent); 17788 if (err) { 17789 dev_err(&pdev->dev, 17790 "Problem fetching invariants of chip, aborting\n"); 17791 goto err_out_apeunmap; 17792 } 17793 17794 /* The EPB bridge inside 5714, 5715, and 5780 and any 17795 * device behind the EPB cannot support DMA addresses > 40-bit. 17796 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 17797 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 17798 * do DMA address check in tg3_start_xmit(). 17799 */ 17800 if (tg3_flag(tp, IS_5788)) 17801 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 17802 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 17803 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 17804#ifdef CONFIG_HIGHMEM 17805 dma_mask = DMA_BIT_MASK(64); 17806#endif 17807 } else 17808 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 17809 17810 /* Configure DMA attributes. */ 17811 if (dma_mask > DMA_BIT_MASK(32)) { 17812 err = pci_set_dma_mask(pdev, dma_mask); 17813 if (!err) { 17814 features |= NETIF_F_HIGHDMA; 17815 err = pci_set_consistent_dma_mask(pdev, 17816 persist_dma_mask); 17817 if (err < 0) { 17818 dev_err(&pdev->dev, "Unable to obtain 64 bit " 17819 "DMA for consistent allocations\n"); 17820 goto err_out_apeunmap; 17821 } 17822 } 17823 } 17824 if (err || dma_mask == DMA_BIT_MASK(32)) { 17825 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 17826 if (err) { 17827 dev_err(&pdev->dev, 17828 "No usable DMA configuration, aborting\n"); 17829 goto err_out_apeunmap; 17830 } 17831 } 17832 17833 tg3_init_bufmgr_config(tp); 17834 17835 /* 5700 B0 chips do not support checksumming correctly due 17836 * to hardware bugs. 17837 */ 17838 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) { 17839 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 17840 17841 if (tg3_flag(tp, 5755_PLUS)) 17842 features |= NETIF_F_IPV6_CSUM; 17843 } 17844 17845 /* TSO is on by default on chips that support hardware TSO. 17846 * Firmware TSO on older chips gives lower performance, so it 17847 * is off by default, but can be enabled using ethtool. 17848 */ 17849 if ((tg3_flag(tp, HW_TSO_1) || 17850 tg3_flag(tp, HW_TSO_2) || 17851 tg3_flag(tp, HW_TSO_3)) && 17852 (features & NETIF_F_IP_CSUM)) 17853 features |= NETIF_F_TSO; 17854 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 17855 if (features & NETIF_F_IPV6_CSUM) 17856 features |= NETIF_F_TSO6; 17857 if (tg3_flag(tp, HW_TSO_3) || 17858 tg3_asic_rev(tp) == ASIC_REV_5761 || 17859 (tg3_asic_rev(tp) == ASIC_REV_5784 && 17860 tg3_chip_rev(tp) != CHIPREV_5784_AX) || 17861 tg3_asic_rev(tp) == ASIC_REV_5785 || 17862 tg3_asic_rev(tp) == ASIC_REV_57780) 17863 features |= NETIF_F_TSO_ECN; 17864 } 17865 17866 dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX | 17867 NETIF_F_HW_VLAN_CTAG_RX; 17868 dev->vlan_features |= features; 17869 17870 /* 17871 * Add loopback capability only for a subset of devices that support 17872 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 17873 * loopback for the remaining devices. 17874 */ 17875 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 17876 !tg3_flag(tp, CPMU_PRESENT)) 17877 /* Add the loopback capability */ 17878 features |= NETIF_F_LOOPBACK; 17879 17880 dev->hw_features |= features; 17881 dev->priv_flags |= IFF_UNICAST_FLT; 17882 17883 /* MTU range: 60 - 9000 or 1500, depending on hardware */ 17884 dev->min_mtu = TG3_MIN_MTU; 17885 dev->max_mtu = TG3_MAX_MTU(tp); 17886 17887 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 && 17888 !tg3_flag(tp, TSO_CAPABLE) && 17889 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 17890 tg3_flag_set(tp, MAX_RXPEND_64); 17891 tp->rx_pending = 63; 17892 } 17893 17894 err = tg3_get_device_address(tp); 17895 if (err) { 17896 dev_err(&pdev->dev, 17897 "Could not obtain valid ethernet address, aborting\n"); 17898 goto err_out_apeunmap; 17899 } 17900 17901 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 17902 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 17903 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 17904 for (i = 0; i < tp->irq_max; i++) { 17905 struct tg3_napi *tnapi = &tp->napi[i]; 17906 17907 tnapi->tp = tp; 17908 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 17909 17910 tnapi->int_mbox = intmbx; 17911 if (i <= 4) 17912 intmbx += 0x8; 17913 else 17914 intmbx += 0x4; 17915 17916 tnapi->consmbox = rcvmbx; 17917 tnapi->prodmbox = sndmbx; 17918 17919 if (i) 17920 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 17921 else 17922 tnapi->coal_now = HOSTCC_MODE_NOW; 17923 17924 if (!tg3_flag(tp, SUPPORT_MSIX)) 17925 break; 17926 17927 /* 17928 * If we support MSIX, we'll be using RSS. If we're using 17929 * RSS, the first vector only handles link interrupts and the 17930 * remaining vectors handle rx and tx interrupts. Reuse the 17931 * mailbox values for the next iteration. The values we setup 17932 * above are still useful for the single vectored mode. 17933 */ 17934 if (!i) 17935 continue; 17936 17937 rcvmbx += 0x8; 17938 17939 if (sndmbx & 0x4) 17940 sndmbx -= 0x4; 17941 else 17942 sndmbx += 0xc; 17943 } 17944 17945 /* 17946 * Reset chip in case UNDI or EFI driver did not shutdown 17947 * DMA self test will enable WDMAC and we'll see (spurious) 17948 * pending DMA on the PCI bus at that point. 17949 */ 17950 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 17951 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 17952 tg3_full_lock(tp, 0); 17953 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 17954 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 17955 tg3_full_unlock(tp); 17956 } 17957 17958 err = tg3_test_dma(tp); 17959 if (err) { 17960 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 17961 goto err_out_apeunmap; 17962 } 17963 17964 tg3_init_coal(tp); 17965 17966 pci_set_drvdata(pdev, dev); 17967 17968 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 17969 tg3_asic_rev(tp) == ASIC_REV_5720 || 17970 tg3_asic_rev(tp) == ASIC_REV_5762) 17971 tg3_flag_set(tp, PTP_CAPABLE); 17972 17973 tg3_timer_init(tp); 17974 17975 tg3_carrier_off(tp); 17976 17977 err = register_netdev(dev); 17978 if (err) { 17979 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 17980 goto err_out_apeunmap; 17981 } 17982 17983 if (tg3_flag(tp, PTP_CAPABLE)) { 17984 tg3_ptp_init(tp); 17985 tp->ptp_clock = ptp_clock_register(&tp->ptp_info, 17986 &tp->pdev->dev); 17987 if (IS_ERR(tp->ptp_clock)) 17988 tp->ptp_clock = NULL; 17989 } 17990 17991 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 17992 tp->board_part_number, 17993 tg3_chip_rev_id(tp), 17994 tg3_bus_string(tp, str), 17995 dev->dev_addr); 17996 17997 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) { 17998 char *ethtype; 17999 18000 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 18001 ethtype = "10/100Base-TX"; 18002 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 18003 ethtype = "1000Base-SX"; 18004 else 18005 ethtype = "10/100/1000Base-T"; 18006 18007 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 18008 "(WireSpeed[%d], EEE[%d])\n", 18009 tg3_phy_string(tp), ethtype, 18010 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 18011 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 18012 } 18013 18014 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 18015 (dev->features & NETIF_F_RXCSUM) != 0, 18016 tg3_flag(tp, USE_LINKCHG_REG) != 0, 18017 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 18018 tg3_flag(tp, ENABLE_ASF) != 0, 18019 tg3_flag(tp, TSO_CAPABLE) != 0); 18020 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 18021 tp->dma_rwctrl, 18022 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 18023 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 18024 18025 pci_save_state(pdev); 18026 18027 return 0; 18028 18029err_out_apeunmap: 18030 if (tp->aperegs) { 18031 iounmap(tp->aperegs); 18032 tp->aperegs = NULL; 18033 } 18034 18035err_out_iounmap: 18036 if (tp->regs) { 18037 iounmap(tp->regs); 18038 tp->regs = NULL; 18039 } 18040 18041err_out_free_dev: 18042 free_netdev(dev); 18043 18044err_out_free_res: 18045 pci_release_regions(pdev); 18046 18047err_out_disable_pdev: 18048 if (pci_is_enabled(pdev)) 18049 pci_disable_device(pdev); 18050 return err; 18051} 18052 18053static void tg3_remove_one(struct pci_dev *pdev) 18054{ 18055 struct net_device *dev = pci_get_drvdata(pdev); 18056 18057 if (dev) { 18058 struct tg3 *tp = netdev_priv(dev); 18059 18060 tg3_ptp_fini(tp); 18061 18062 release_firmware(tp->fw); 18063 18064 tg3_reset_task_cancel(tp); 18065 18066 if (tg3_flag(tp, USE_PHYLIB)) { 18067 tg3_phy_fini(tp); 18068 tg3_mdio_fini(tp); 18069 } 18070 18071 unregister_netdev(dev); 18072 if (tp->aperegs) { 18073 iounmap(tp->aperegs); 18074 tp->aperegs = NULL; 18075 } 18076 if (tp->regs) { 18077 iounmap(tp->regs); 18078 tp->regs = NULL; 18079 } 18080 free_netdev(dev); 18081 pci_release_regions(pdev); 18082 pci_disable_device(pdev); 18083 } 18084} 18085 18086#ifdef CONFIG_PM_SLEEP 18087static int tg3_suspend(struct device *device) 18088{ 18089 struct net_device *dev = dev_get_drvdata(device); 18090 struct tg3 *tp = netdev_priv(dev); 18091 int err = 0; 18092 18093 rtnl_lock(); 18094 18095 if (!netif_running(dev)) 18096 goto unlock; 18097 18098 tg3_reset_task_cancel(tp); 18099 tg3_phy_stop(tp); 18100 tg3_netif_stop(tp); 18101 18102 tg3_timer_stop(tp); 18103 18104 tg3_full_lock(tp, 1); 18105 tg3_disable_ints(tp); 18106 tg3_full_unlock(tp); 18107 18108 netif_device_detach(dev); 18109 18110 tg3_full_lock(tp, 0); 18111 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 18112 tg3_flag_clear(tp, INIT_COMPLETE); 18113 tg3_full_unlock(tp); 18114 18115 err = tg3_power_down_prepare(tp); 18116 if (err) { 18117 int err2; 18118 18119 tg3_full_lock(tp, 0); 18120 18121 tg3_flag_set(tp, INIT_COMPLETE); 18122 err2 = tg3_restart_hw(tp, true); 18123 if (err2) 18124 goto out; 18125 18126 tg3_timer_start(tp); 18127 18128 netif_device_attach(dev); 18129 tg3_netif_start(tp); 18130 18131out: 18132 tg3_full_unlock(tp); 18133 18134 if (!err2) 18135 tg3_phy_start(tp); 18136 } 18137 18138unlock: 18139 rtnl_unlock(); 18140 return err; 18141} 18142 18143static int tg3_resume(struct device *device) 18144{ 18145 struct net_device *dev = dev_get_drvdata(device); 18146 struct tg3 *tp = netdev_priv(dev); 18147 int err = 0; 18148 18149 rtnl_lock(); 18150 18151 if (!netif_running(dev)) 18152 goto unlock; 18153 18154 netif_device_attach(dev); 18155 18156 tg3_full_lock(tp, 0); 18157 18158 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18159 18160 tg3_flag_set(tp, INIT_COMPLETE); 18161 err = tg3_restart_hw(tp, 18162 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)); 18163 if (err) 18164 goto out; 18165 18166 tg3_timer_start(tp); 18167 18168 tg3_netif_start(tp); 18169 18170out: 18171 tg3_full_unlock(tp); 18172 18173 if (!err) 18174 tg3_phy_start(tp); 18175 18176unlock: 18177 rtnl_unlock(); 18178 return err; 18179} 18180#endif /* CONFIG_PM_SLEEP */ 18181 18182static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 18183 18184static void tg3_shutdown(struct pci_dev *pdev) 18185{ 18186 struct net_device *dev = pci_get_drvdata(pdev); 18187 struct tg3 *tp = netdev_priv(dev); 18188 18189 tg3_reset_task_cancel(tp); 18190 18191 rtnl_lock(); 18192 18193 netif_device_detach(dev); 18194 18195 if (netif_running(dev)) 18196 dev_close(dev); 18197 18198 if (system_state == SYSTEM_POWER_OFF) 18199 tg3_power_down(tp); 18200 18201 rtnl_unlock(); 18202 18203 pci_disable_device(pdev); 18204} 18205 18206/** 18207 * tg3_io_error_detected - called when PCI error is detected 18208 * @pdev: Pointer to PCI device 18209 * @state: The current pci connection state 18210 * 18211 * This function is called after a PCI bus error affecting 18212 * this device has been detected. 18213 */ 18214static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 18215 pci_channel_state_t state) 18216{ 18217 struct net_device *netdev = pci_get_drvdata(pdev); 18218 struct tg3 *tp = netdev_priv(netdev); 18219 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 18220 18221 netdev_info(netdev, "PCI I/O error detected\n"); 18222 18223 /* Want to make sure that the reset task doesn't run */ 18224 tg3_reset_task_cancel(tp); 18225 18226 rtnl_lock(); 18227 18228 /* Could be second call or maybe we don't have netdev yet */ 18229 if (!netdev || tp->pcierr_recovery || !netif_running(netdev)) 18230 goto done; 18231 18232 /* We needn't recover from permanent error */ 18233 if (state == pci_channel_io_frozen) 18234 tp->pcierr_recovery = true; 18235 18236 tg3_phy_stop(tp); 18237 18238 tg3_netif_stop(tp); 18239 18240 tg3_timer_stop(tp); 18241 18242 netif_device_detach(netdev); 18243 18244 /* Clean up software state, even if MMIO is blocked */ 18245 tg3_full_lock(tp, 0); 18246 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 18247 tg3_full_unlock(tp); 18248 18249done: 18250 if (state == pci_channel_io_perm_failure) { 18251 if (netdev) { 18252 tg3_napi_enable(tp); 18253 dev_close(netdev); 18254 } 18255 err = PCI_ERS_RESULT_DISCONNECT; 18256 } else { 18257 pci_disable_device(pdev); 18258 } 18259 18260 rtnl_unlock(); 18261 18262 return err; 18263} 18264 18265/** 18266 * tg3_io_slot_reset - called after the pci bus has been reset. 18267 * @pdev: Pointer to PCI device 18268 * 18269 * Restart the card from scratch, as if from a cold-boot. 18270 * At this point, the card has exprienced a hard reset, 18271 * followed by fixups by BIOS, and has its config space 18272 * set up identically to what it was at cold boot. 18273 */ 18274static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 18275{ 18276 struct net_device *netdev = pci_get_drvdata(pdev); 18277 struct tg3 *tp = netdev_priv(netdev); 18278 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 18279 int err; 18280 18281 rtnl_lock(); 18282 18283 if (pci_enable_device(pdev)) { 18284 dev_err(&pdev->dev, 18285 "Cannot re-enable PCI device after reset.\n"); 18286 goto done; 18287 } 18288 18289 pci_set_master(pdev); 18290 pci_restore_state(pdev); 18291 pci_save_state(pdev); 18292 18293 if (!netdev || !netif_running(netdev)) { 18294 rc = PCI_ERS_RESULT_RECOVERED; 18295 goto done; 18296 } 18297 18298 err = tg3_power_up(tp); 18299 if (err) 18300 goto done; 18301 18302 rc = PCI_ERS_RESULT_RECOVERED; 18303 18304done: 18305 if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) { 18306 tg3_napi_enable(tp); 18307 dev_close(netdev); 18308 } 18309 rtnl_unlock(); 18310 18311 return rc; 18312} 18313 18314/** 18315 * tg3_io_resume - called when traffic can start flowing again. 18316 * @pdev: Pointer to PCI device 18317 * 18318 * This callback is called when the error recovery driver tells 18319 * us that its OK to resume normal operation. 18320 */ 18321static void tg3_io_resume(struct pci_dev *pdev) 18322{ 18323 struct net_device *netdev = pci_get_drvdata(pdev); 18324 struct tg3 *tp = netdev_priv(netdev); 18325 int err; 18326 18327 rtnl_lock(); 18328 18329 if (!netdev || !netif_running(netdev)) 18330 goto done; 18331 18332 tg3_full_lock(tp, 0); 18333 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18334 tg3_flag_set(tp, INIT_COMPLETE); 18335 err = tg3_restart_hw(tp, true); 18336 if (err) { 18337 tg3_full_unlock(tp); 18338 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 18339 goto done; 18340 } 18341 18342 netif_device_attach(netdev); 18343 18344 tg3_timer_start(tp); 18345 18346 tg3_netif_start(tp); 18347 18348 tg3_full_unlock(tp); 18349 18350 tg3_phy_start(tp); 18351 18352done: 18353 tp->pcierr_recovery = false; 18354 rtnl_unlock(); 18355} 18356 18357static const struct pci_error_handlers tg3_err_handler = { 18358 .error_detected = tg3_io_error_detected, 18359 .slot_reset = tg3_io_slot_reset, 18360 .resume = tg3_io_resume 18361}; 18362 18363static struct pci_driver tg3_driver = { 18364 .name = DRV_MODULE_NAME, 18365 .id_table = tg3_pci_tbl, 18366 .probe = tg3_init_one, 18367 .remove = tg3_remove_one, 18368 .err_handler = &tg3_err_handler, 18369 .driver.pm = &tg3_pm_ops, 18370 .shutdown = tg3_shutdown, 18371}; 18372 18373module_pci_driver(tg3_driver); 18374