tg3.c (477709B)
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_TG3TSO); 228MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 229 230static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 231module_param(tg3_debug, int, 0); 232MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 233 234#define TG3_DRV_DATA_FLAG_10_100_ONLY 0x0001 235#define TG3_DRV_DATA_FLAG_5705_10_100 0x0002 236 237static const struct pci_device_id tg3_pci_tbl[] = { 238 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901), 257 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 258 TG3_DRV_DATA_FLAG_5705_10_100}, 259 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2), 260 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 261 TG3_DRV_DATA_FLAG_5705_10_100}, 262 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F), 264 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 265 TG3_DRV_DATA_FLAG_5705_10_100}, 266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F), 272 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F), 278 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 286 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M, 287 PCI_VENDOR_ID_LENOVO, 288 TG3PCI_SUBDEVICE_ID_LENOVO_5787M), 289 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F), 292 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 293 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 294 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 299 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 302 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 303 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 308 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 309 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 310 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 311 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 312 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A), 313 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 314 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 315 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B), 316 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 317 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 318 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 319 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790), 320 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 321 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 322 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 323 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)}, 324 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 325 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 326 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 327 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 328 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 329 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791), 330 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 331 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795), 332 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 333 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 334 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 335 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 336 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)}, 337 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)}, 338 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)}, 339 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)}, 340 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)}, 341 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)}, 342 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)}, 343 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)}, 344 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)}, 345 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 346 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 347 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 348 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 349 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 350 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 351 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 352 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 353 {} 354}; 355 356MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 357 358static const struct { 359 const char string[ETH_GSTRING_LEN]; 360} ethtool_stats_keys[] = { 361 { "rx_octets" }, 362 { "rx_fragments" }, 363 { "rx_ucast_packets" }, 364 { "rx_mcast_packets" }, 365 { "rx_bcast_packets" }, 366 { "rx_fcs_errors" }, 367 { "rx_align_errors" }, 368 { "rx_xon_pause_rcvd" }, 369 { "rx_xoff_pause_rcvd" }, 370 { "rx_mac_ctrl_rcvd" }, 371 { "rx_xoff_entered" }, 372 { "rx_frame_too_long_errors" }, 373 { "rx_jabbers" }, 374 { "rx_undersize_packets" }, 375 { "rx_in_length_errors" }, 376 { "rx_out_length_errors" }, 377 { "rx_64_or_less_octet_packets" }, 378 { "rx_65_to_127_octet_packets" }, 379 { "rx_128_to_255_octet_packets" }, 380 { "rx_256_to_511_octet_packets" }, 381 { "rx_512_to_1023_octet_packets" }, 382 { "rx_1024_to_1522_octet_packets" }, 383 { "rx_1523_to_2047_octet_packets" }, 384 { "rx_2048_to_4095_octet_packets" }, 385 { "rx_4096_to_8191_octet_packets" }, 386 { "rx_8192_to_9022_octet_packets" }, 387 388 { "tx_octets" }, 389 { "tx_collisions" }, 390 391 { "tx_xon_sent" }, 392 { "tx_xoff_sent" }, 393 { "tx_flow_control" }, 394 { "tx_mac_errors" }, 395 { "tx_single_collisions" }, 396 { "tx_mult_collisions" }, 397 { "tx_deferred" }, 398 { "tx_excessive_collisions" }, 399 { "tx_late_collisions" }, 400 { "tx_collide_2times" }, 401 { "tx_collide_3times" }, 402 { "tx_collide_4times" }, 403 { "tx_collide_5times" }, 404 { "tx_collide_6times" }, 405 { "tx_collide_7times" }, 406 { "tx_collide_8times" }, 407 { "tx_collide_9times" }, 408 { "tx_collide_10times" }, 409 { "tx_collide_11times" }, 410 { "tx_collide_12times" }, 411 { "tx_collide_13times" }, 412 { "tx_collide_14times" }, 413 { "tx_collide_15times" }, 414 { "tx_ucast_packets" }, 415 { "tx_mcast_packets" }, 416 { "tx_bcast_packets" }, 417 { "tx_carrier_sense_errors" }, 418 { "tx_discards" }, 419 { "tx_errors" }, 420 421 { "dma_writeq_full" }, 422 { "dma_write_prioq_full" }, 423 { "rxbds_empty" }, 424 { "rx_discards" }, 425 { "rx_errors" }, 426 { "rx_threshold_hit" }, 427 428 { "dma_readq_full" }, 429 { "dma_read_prioq_full" }, 430 { "tx_comp_queue_full" }, 431 432 { "ring_set_send_prod_index" }, 433 { "ring_status_update" }, 434 { "nic_irqs" }, 435 { "nic_avoided_irqs" }, 436 { "nic_tx_threshold_hit" }, 437 438 { "mbuf_lwm_thresh_hit" }, 439}; 440 441#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 442#define TG3_NVRAM_TEST 0 443#define TG3_LINK_TEST 1 444#define TG3_REGISTER_TEST 2 445#define TG3_MEMORY_TEST 3 446#define TG3_MAC_LOOPB_TEST 4 447#define TG3_PHY_LOOPB_TEST 5 448#define TG3_EXT_LOOPB_TEST 6 449#define TG3_INTERRUPT_TEST 7 450 451 452static const struct { 453 const char string[ETH_GSTRING_LEN]; 454} ethtool_test_keys[] = { 455 [TG3_NVRAM_TEST] = { "nvram test (online) " }, 456 [TG3_LINK_TEST] = { "link test (online) " }, 457 [TG3_REGISTER_TEST] = { "register test (offline)" }, 458 [TG3_MEMORY_TEST] = { "memory test (offline)" }, 459 [TG3_MAC_LOOPB_TEST] = { "mac loopback test (offline)" }, 460 [TG3_PHY_LOOPB_TEST] = { "phy loopback test (offline)" }, 461 [TG3_EXT_LOOPB_TEST] = { "ext loopback test (offline)" }, 462 [TG3_INTERRUPT_TEST] = { "interrupt test (offline)" }, 463}; 464 465#define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 466 467 468static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 469{ 470 writel(val, tp->regs + off); 471} 472 473static u32 tg3_read32(struct tg3 *tp, u32 off) 474{ 475 return readl(tp->regs + off); 476} 477 478static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 479{ 480 writel(val, tp->aperegs + off); 481} 482 483static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 484{ 485 return readl(tp->aperegs + off); 486} 487 488static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 489{ 490 unsigned long flags; 491 492 spin_lock_irqsave(&tp->indirect_lock, flags); 493 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 494 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 495 spin_unlock_irqrestore(&tp->indirect_lock, flags); 496} 497 498static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 499{ 500 writel(val, tp->regs + off); 501 readl(tp->regs + off); 502} 503 504static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 505{ 506 unsigned long flags; 507 u32 val; 508 509 spin_lock_irqsave(&tp->indirect_lock, flags); 510 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 511 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 512 spin_unlock_irqrestore(&tp->indirect_lock, flags); 513 return val; 514} 515 516static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 517{ 518 unsigned long flags; 519 520 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 521 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 522 TG3_64BIT_REG_LOW, val); 523 return; 524 } 525 if (off == TG3_RX_STD_PROD_IDX_REG) { 526 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 527 TG3_64BIT_REG_LOW, val); 528 return; 529 } 530 531 spin_lock_irqsave(&tp->indirect_lock, flags); 532 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 533 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 534 spin_unlock_irqrestore(&tp->indirect_lock, flags); 535 536 /* In indirect mode when disabling interrupts, we also need 537 * to clear the interrupt bit in the GRC local ctrl register. 538 */ 539 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 540 (val == 0x1)) { 541 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 542 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 543 } 544} 545 546static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 547{ 548 unsigned long flags; 549 u32 val; 550 551 spin_lock_irqsave(&tp->indirect_lock, flags); 552 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 553 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 554 spin_unlock_irqrestore(&tp->indirect_lock, flags); 555 return val; 556} 557 558/* usec_wait specifies the wait time in usec when writing to certain registers 559 * where it is unsafe to read back the register without some delay. 560 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 561 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 562 */ 563static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 564{ 565 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 566 /* Non-posted methods */ 567 tp->write32(tp, off, val); 568 else { 569 /* Posted method */ 570 tg3_write32(tp, off, val); 571 if (usec_wait) 572 udelay(usec_wait); 573 tp->read32(tp, off); 574 } 575 /* Wait again after the read for the posted method to guarantee that 576 * the wait time is met. 577 */ 578 if (usec_wait) 579 udelay(usec_wait); 580} 581 582static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 583{ 584 tp->write32_mbox(tp, off, val); 585 if (tg3_flag(tp, FLUSH_POSTED_WRITES) || 586 (!tg3_flag(tp, MBOX_WRITE_REORDER) && 587 !tg3_flag(tp, ICH_WORKAROUND))) 588 tp->read32_mbox(tp, off); 589} 590 591static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 592{ 593 void __iomem *mbox = tp->regs + off; 594 writel(val, mbox); 595 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 596 writel(val, mbox); 597 if (tg3_flag(tp, MBOX_WRITE_REORDER) || 598 tg3_flag(tp, FLUSH_POSTED_WRITES)) 599 readl(mbox); 600} 601 602static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 603{ 604 return readl(tp->regs + off + GRCMBOX_BASE); 605} 606 607static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 608{ 609 writel(val, tp->regs + off + GRCMBOX_BASE); 610} 611 612#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 613#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 614#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 615#define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 616#define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 617 618#define tw32(reg, val) tp->write32(tp, reg, val) 619#define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 620#define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 621#define tr32(reg) tp->read32(tp, reg) 622 623static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 624{ 625 unsigned long flags; 626 627 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 628 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 629 return; 630 631 spin_lock_irqsave(&tp->indirect_lock, flags); 632 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 633 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 634 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 635 636 /* Always leave this as zero. */ 637 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 638 } else { 639 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 640 tw32_f(TG3PCI_MEM_WIN_DATA, val); 641 642 /* Always leave this as zero. */ 643 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 644 } 645 spin_unlock_irqrestore(&tp->indirect_lock, flags); 646} 647 648static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 649{ 650 unsigned long flags; 651 652 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 653 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 654 *val = 0; 655 return; 656 } 657 658 spin_lock_irqsave(&tp->indirect_lock, flags); 659 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 660 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 661 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 662 663 /* Always leave this as zero. */ 664 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 665 } else { 666 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 667 *val = tr32(TG3PCI_MEM_WIN_DATA); 668 669 /* Always leave this as zero. */ 670 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 671 } 672 spin_unlock_irqrestore(&tp->indirect_lock, flags); 673} 674 675static void tg3_ape_lock_init(struct tg3 *tp) 676{ 677 int i; 678 u32 regbase, bit; 679 680 if (tg3_asic_rev(tp) == ASIC_REV_5761) 681 regbase = TG3_APE_LOCK_GRANT; 682 else 683 regbase = TG3_APE_PER_LOCK_GRANT; 684 685 /* Make sure the driver hasn't any stale locks. */ 686 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 687 switch (i) { 688 case TG3_APE_LOCK_PHY0: 689 case TG3_APE_LOCK_PHY1: 690 case TG3_APE_LOCK_PHY2: 691 case TG3_APE_LOCK_PHY3: 692 bit = APE_LOCK_GRANT_DRIVER; 693 break; 694 default: 695 if (!tp->pci_fn) 696 bit = APE_LOCK_GRANT_DRIVER; 697 else 698 bit = 1 << tp->pci_fn; 699 } 700 tg3_ape_write32(tp, regbase + 4 * i, bit); 701 } 702 703} 704 705static int tg3_ape_lock(struct tg3 *tp, int locknum) 706{ 707 int i, off; 708 int ret = 0; 709 u32 status, req, gnt, bit; 710 711 if (!tg3_flag(tp, ENABLE_APE)) 712 return 0; 713 714 switch (locknum) { 715 case TG3_APE_LOCK_GPIO: 716 if (tg3_asic_rev(tp) == ASIC_REV_5761) 717 return 0; 718 fallthrough; 719 case TG3_APE_LOCK_GRC: 720 case TG3_APE_LOCK_MEM: 721 if (!tp->pci_fn) 722 bit = APE_LOCK_REQ_DRIVER; 723 else 724 bit = 1 << tp->pci_fn; 725 break; 726 case TG3_APE_LOCK_PHY0: 727 case TG3_APE_LOCK_PHY1: 728 case TG3_APE_LOCK_PHY2: 729 case TG3_APE_LOCK_PHY3: 730 bit = APE_LOCK_REQ_DRIVER; 731 break; 732 default: 733 return -EINVAL; 734 } 735 736 if (tg3_asic_rev(tp) == ASIC_REV_5761) { 737 req = TG3_APE_LOCK_REQ; 738 gnt = TG3_APE_LOCK_GRANT; 739 } else { 740 req = TG3_APE_PER_LOCK_REQ; 741 gnt = TG3_APE_PER_LOCK_GRANT; 742 } 743 744 off = 4 * locknum; 745 746 tg3_ape_write32(tp, req + off, bit); 747 748 /* Wait for up to 1 millisecond to acquire lock. */ 749 for (i = 0; i < 100; i++) { 750 status = tg3_ape_read32(tp, gnt + off); 751 if (status == bit) 752 break; 753 if (pci_channel_offline(tp->pdev)) 754 break; 755 756 udelay(10); 757 } 758 759 if (status != bit) { 760 /* Revoke the lock request. */ 761 tg3_ape_write32(tp, gnt + off, bit); 762 ret = -EBUSY; 763 } 764 765 return ret; 766} 767 768static void tg3_ape_unlock(struct tg3 *tp, int locknum) 769{ 770 u32 gnt, bit; 771 772 if (!tg3_flag(tp, ENABLE_APE)) 773 return; 774 775 switch (locknum) { 776 case TG3_APE_LOCK_GPIO: 777 if (tg3_asic_rev(tp) == ASIC_REV_5761) 778 return; 779 fallthrough; 780 case TG3_APE_LOCK_GRC: 781 case TG3_APE_LOCK_MEM: 782 if (!tp->pci_fn) 783 bit = APE_LOCK_GRANT_DRIVER; 784 else 785 bit = 1 << tp->pci_fn; 786 break; 787 case TG3_APE_LOCK_PHY0: 788 case TG3_APE_LOCK_PHY1: 789 case TG3_APE_LOCK_PHY2: 790 case TG3_APE_LOCK_PHY3: 791 bit = APE_LOCK_GRANT_DRIVER; 792 break; 793 default: 794 return; 795 } 796 797 if (tg3_asic_rev(tp) == ASIC_REV_5761) 798 gnt = TG3_APE_LOCK_GRANT; 799 else 800 gnt = TG3_APE_PER_LOCK_GRANT; 801 802 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 803} 804 805static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us) 806{ 807 u32 apedata; 808 809 while (timeout_us) { 810 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 811 return -EBUSY; 812 813 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 814 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 815 break; 816 817 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 818 819 udelay(10); 820 timeout_us -= (timeout_us > 10) ? 10 : timeout_us; 821 } 822 823 return timeout_us ? 0 : -EBUSY; 824} 825 826#ifdef CONFIG_TIGON3_HWMON 827static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us) 828{ 829 u32 i, apedata; 830 831 for (i = 0; i < timeout_us / 10; i++) { 832 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 833 834 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 835 break; 836 837 udelay(10); 838 } 839 840 return i == timeout_us / 10; 841} 842 843static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, 844 u32 len) 845{ 846 int err; 847 u32 i, bufoff, msgoff, maxlen, apedata; 848 849 if (!tg3_flag(tp, APE_HAS_NCSI)) 850 return 0; 851 852 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 853 if (apedata != APE_SEG_SIG_MAGIC) 854 return -ENODEV; 855 856 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 857 if (!(apedata & APE_FW_STATUS_READY)) 858 return -EAGAIN; 859 860 bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) + 861 TG3_APE_SHMEM_BASE; 862 msgoff = bufoff + 2 * sizeof(u32); 863 maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN); 864 865 while (len) { 866 u32 length; 867 868 /* Cap xfer sizes to scratchpad limits. */ 869 length = (len > maxlen) ? maxlen : len; 870 len -= length; 871 872 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 873 if (!(apedata & APE_FW_STATUS_READY)) 874 return -EAGAIN; 875 876 /* Wait for up to 1 msec for APE to service previous event. */ 877 err = tg3_ape_event_lock(tp, 1000); 878 if (err) 879 return err; 880 881 apedata = APE_EVENT_STATUS_DRIVER_EVNT | 882 APE_EVENT_STATUS_SCRTCHPD_READ | 883 APE_EVENT_STATUS_EVENT_PENDING; 884 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata); 885 886 tg3_ape_write32(tp, bufoff, base_off); 887 tg3_ape_write32(tp, bufoff + sizeof(u32), length); 888 889 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 890 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 891 892 base_off += length; 893 894 if (tg3_ape_wait_for_event(tp, 30000)) 895 return -EAGAIN; 896 897 for (i = 0; length; i += 4, length -= 4) { 898 u32 val = tg3_ape_read32(tp, msgoff + i); 899 memcpy(data, &val, sizeof(u32)); 900 data++; 901 } 902 } 903 904 return 0; 905} 906#endif 907 908static int tg3_ape_send_event(struct tg3 *tp, u32 event) 909{ 910 int err; 911 u32 apedata; 912 913 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 914 if (apedata != APE_SEG_SIG_MAGIC) 915 return -EAGAIN; 916 917 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 918 if (!(apedata & APE_FW_STATUS_READY)) 919 return -EAGAIN; 920 921 /* Wait for up to 20 millisecond for APE to service previous event. */ 922 err = tg3_ape_event_lock(tp, 20000); 923 if (err) 924 return err; 925 926 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 927 event | APE_EVENT_STATUS_EVENT_PENDING); 928 929 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 930 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 931 932 return 0; 933} 934 935static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 936{ 937 u32 event; 938 u32 apedata; 939 940 if (!tg3_flag(tp, ENABLE_APE)) 941 return; 942 943 switch (kind) { 944 case RESET_KIND_INIT: 945 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 946 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 947 APE_HOST_SEG_SIG_MAGIC); 948 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 949 APE_HOST_SEG_LEN_MAGIC); 950 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 951 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 952 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 953 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 954 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 955 APE_HOST_BEHAV_NO_PHYLOCK); 956 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 957 TG3_APE_HOST_DRVR_STATE_START); 958 959 event = APE_EVENT_STATUS_STATE_START; 960 break; 961 case RESET_KIND_SHUTDOWN: 962 if (device_may_wakeup(&tp->pdev->dev) && 963 tg3_flag(tp, WOL_ENABLE)) { 964 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 965 TG3_APE_HOST_WOL_SPEED_AUTO); 966 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 967 } else 968 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 969 970 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 971 972 event = APE_EVENT_STATUS_STATE_UNLOAD; 973 break; 974 default: 975 return; 976 } 977 978 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 979 980 tg3_ape_send_event(tp, event); 981} 982 983static void tg3_send_ape_heartbeat(struct tg3 *tp, 984 unsigned long interval) 985{ 986 /* Check if hb interval has exceeded */ 987 if (!tg3_flag(tp, ENABLE_APE) || 988 time_before(jiffies, tp->ape_hb_jiffies + interval)) 989 return; 990 991 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 992 tp->ape_hb_jiffies = jiffies; 993} 994 995static void tg3_disable_ints(struct tg3 *tp) 996{ 997 int i; 998 999 tw32(TG3PCI_MISC_HOST_CTRL, 1000 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 1001 for (i = 0; i < tp->irq_max; i++) 1002 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 1003} 1004 1005static void tg3_enable_ints(struct tg3 *tp) 1006{ 1007 int i; 1008 1009 tp->irq_sync = 0; 1010 wmb(); 1011 1012 tw32(TG3PCI_MISC_HOST_CTRL, 1013 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 1014 1015 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 1016 for (i = 0; i < tp->irq_cnt; i++) { 1017 struct tg3_napi *tnapi = &tp->napi[i]; 1018 1019 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1020 if (tg3_flag(tp, 1SHOT_MSI)) 1021 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1022 1023 tp->coal_now |= tnapi->coal_now; 1024 } 1025 1026 /* Force an initial interrupt */ 1027 if (!tg3_flag(tp, TAGGED_STATUS) && 1028 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 1029 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 1030 else 1031 tw32(HOSTCC_MODE, tp->coal_now); 1032 1033 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 1034} 1035 1036static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 1037{ 1038 struct tg3 *tp = tnapi->tp; 1039 struct tg3_hw_status *sblk = tnapi->hw_status; 1040 unsigned int work_exists = 0; 1041 1042 /* check for phy events */ 1043 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 1044 if (sblk->status & SD_STATUS_LINK_CHG) 1045 work_exists = 1; 1046 } 1047 1048 /* check for TX work to do */ 1049 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 1050 work_exists = 1; 1051 1052 /* check for RX work to do */ 1053 if (tnapi->rx_rcb_prod_idx && 1054 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 1055 work_exists = 1; 1056 1057 return work_exists; 1058} 1059 1060/* tg3_int_reenable 1061 * similar to tg3_enable_ints, but it accurately determines whether there 1062 * is new work pending and can return without flushing the PIO write 1063 * which reenables interrupts 1064 */ 1065static void tg3_int_reenable(struct tg3_napi *tnapi) 1066{ 1067 struct tg3 *tp = tnapi->tp; 1068 1069 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 1070 1071 /* When doing tagged status, this work check is unnecessary. 1072 * The last_tag we write above tells the chip which piece of 1073 * work we've completed. 1074 */ 1075 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 1076 tw32(HOSTCC_MODE, tp->coalesce_mode | 1077 HOSTCC_MODE_ENABLE | tnapi->coal_now); 1078} 1079 1080static void tg3_switch_clocks(struct tg3 *tp) 1081{ 1082 u32 clock_ctrl; 1083 u32 orig_clock_ctrl; 1084 1085 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 1086 return; 1087 1088 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 1089 1090 orig_clock_ctrl = clock_ctrl; 1091 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 1092 CLOCK_CTRL_CLKRUN_OENABLE | 1093 0x1f); 1094 tp->pci_clock_ctrl = clock_ctrl; 1095 1096 if (tg3_flag(tp, 5705_PLUS)) { 1097 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 1098 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1099 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 1100 } 1101 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 1102 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1103 clock_ctrl | 1104 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 1105 40); 1106 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1107 clock_ctrl | (CLOCK_CTRL_ALTCLK), 1108 40); 1109 } 1110 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 1111} 1112 1113#define PHY_BUSY_LOOPS 5000 1114 1115static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg, 1116 u32 *val) 1117{ 1118 u32 frame_val; 1119 unsigned int loops; 1120 int ret; 1121 1122 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1123 tw32_f(MAC_MI_MODE, 1124 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1125 udelay(80); 1126 } 1127 1128 tg3_ape_lock(tp, tp->phy_ape_lock); 1129 1130 *val = 0x0; 1131 1132 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1133 MI_COM_PHY_ADDR_MASK); 1134 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1135 MI_COM_REG_ADDR_MASK); 1136 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 1137 1138 tw32_f(MAC_MI_COM, frame_val); 1139 1140 loops = PHY_BUSY_LOOPS; 1141 while (loops != 0) { 1142 udelay(10); 1143 frame_val = tr32(MAC_MI_COM); 1144 1145 if ((frame_val & MI_COM_BUSY) == 0) { 1146 udelay(5); 1147 frame_val = tr32(MAC_MI_COM); 1148 break; 1149 } 1150 loops -= 1; 1151 } 1152 1153 ret = -EBUSY; 1154 if (loops != 0) { 1155 *val = frame_val & MI_COM_DATA_MASK; 1156 ret = 0; 1157 } 1158 1159 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1160 tw32_f(MAC_MI_MODE, tp->mi_mode); 1161 udelay(80); 1162 } 1163 1164 tg3_ape_unlock(tp, tp->phy_ape_lock); 1165 1166 return ret; 1167} 1168 1169static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 1170{ 1171 return __tg3_readphy(tp, tp->phy_addr, reg, val); 1172} 1173 1174static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg, 1175 u32 val) 1176{ 1177 u32 frame_val; 1178 unsigned int loops; 1179 int ret; 1180 1181 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1182 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1183 return 0; 1184 1185 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1186 tw32_f(MAC_MI_MODE, 1187 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1188 udelay(80); 1189 } 1190 1191 tg3_ape_lock(tp, tp->phy_ape_lock); 1192 1193 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1194 MI_COM_PHY_ADDR_MASK); 1195 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1196 MI_COM_REG_ADDR_MASK); 1197 frame_val |= (val & MI_COM_DATA_MASK); 1198 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1199 1200 tw32_f(MAC_MI_COM, frame_val); 1201 1202 loops = PHY_BUSY_LOOPS; 1203 while (loops != 0) { 1204 udelay(10); 1205 frame_val = tr32(MAC_MI_COM); 1206 if ((frame_val & MI_COM_BUSY) == 0) { 1207 udelay(5); 1208 frame_val = tr32(MAC_MI_COM); 1209 break; 1210 } 1211 loops -= 1; 1212 } 1213 1214 ret = -EBUSY; 1215 if (loops != 0) 1216 ret = 0; 1217 1218 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1219 tw32_f(MAC_MI_MODE, tp->mi_mode); 1220 udelay(80); 1221 } 1222 1223 tg3_ape_unlock(tp, tp->phy_ape_lock); 1224 1225 return ret; 1226} 1227 1228static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1229{ 1230 return __tg3_writephy(tp, tp->phy_addr, reg, val); 1231} 1232 1233static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1234{ 1235 int err; 1236 1237 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1238 if (err) 1239 goto done; 1240 1241 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1242 if (err) 1243 goto done; 1244 1245 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1246 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1247 if (err) 1248 goto done; 1249 1250 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1251 1252done: 1253 return err; 1254} 1255 1256static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1257{ 1258 int err; 1259 1260 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1261 if (err) 1262 goto done; 1263 1264 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1265 if (err) 1266 goto done; 1267 1268 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1269 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1270 if (err) 1271 goto done; 1272 1273 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1274 1275done: 1276 return err; 1277} 1278 1279static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1280{ 1281 int err; 1282 1283 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1284 if (!err) 1285 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1286 1287 return err; 1288} 1289 1290static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1291{ 1292 int err; 1293 1294 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1295 if (!err) 1296 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1297 1298 return err; 1299} 1300 1301static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1302{ 1303 int err; 1304 1305 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1306 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1307 MII_TG3_AUXCTL_SHDWSEL_MISC); 1308 if (!err) 1309 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1310 1311 return err; 1312} 1313 1314static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1315{ 1316 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1317 set |= MII_TG3_AUXCTL_MISC_WREN; 1318 1319 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1320} 1321 1322static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable) 1323{ 1324 u32 val; 1325 int err; 1326 1327 err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 1328 1329 if (err) 1330 return err; 1331 1332 if (enable) 1333 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1334 else 1335 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1336 1337 err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 1338 val | MII_TG3_AUXCTL_ACTL_TX_6DB); 1339 1340 return err; 1341} 1342 1343static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val) 1344{ 1345 return tg3_writephy(tp, MII_TG3_MISC_SHDW, 1346 reg | val | MII_TG3_MISC_SHDW_WREN); 1347} 1348 1349static int tg3_bmcr_reset(struct tg3 *tp) 1350{ 1351 u32 phy_control; 1352 int limit, err; 1353 1354 /* OK, reset it, and poll the BMCR_RESET bit until it 1355 * clears or we time out. 1356 */ 1357 phy_control = BMCR_RESET; 1358 err = tg3_writephy(tp, MII_BMCR, phy_control); 1359 if (err != 0) 1360 return -EBUSY; 1361 1362 limit = 5000; 1363 while (limit--) { 1364 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1365 if (err != 0) 1366 return -EBUSY; 1367 1368 if ((phy_control & BMCR_RESET) == 0) { 1369 udelay(40); 1370 break; 1371 } 1372 udelay(10); 1373 } 1374 if (limit < 0) 1375 return -EBUSY; 1376 1377 return 0; 1378} 1379 1380static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1381{ 1382 struct tg3 *tp = bp->priv; 1383 u32 val; 1384 1385 spin_lock_bh(&tp->lock); 1386 1387 if (__tg3_readphy(tp, mii_id, reg, &val)) 1388 val = -EIO; 1389 1390 spin_unlock_bh(&tp->lock); 1391 1392 return val; 1393} 1394 1395static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1396{ 1397 struct tg3 *tp = bp->priv; 1398 u32 ret = 0; 1399 1400 spin_lock_bh(&tp->lock); 1401 1402 if (__tg3_writephy(tp, mii_id, reg, val)) 1403 ret = -EIO; 1404 1405 spin_unlock_bh(&tp->lock); 1406 1407 return ret; 1408} 1409 1410static void tg3_mdio_config_5785(struct tg3 *tp) 1411{ 1412 u32 val; 1413 struct phy_device *phydev; 1414 1415 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1416 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1417 case PHY_ID_BCM50610: 1418 case PHY_ID_BCM50610M: 1419 val = MAC_PHYCFG2_50610_LED_MODES; 1420 break; 1421 case PHY_ID_BCMAC131: 1422 val = MAC_PHYCFG2_AC131_LED_MODES; 1423 break; 1424 case PHY_ID_RTL8211C: 1425 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1426 break; 1427 case PHY_ID_RTL8201E: 1428 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1429 break; 1430 default: 1431 return; 1432 } 1433 1434 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1435 tw32(MAC_PHYCFG2, val); 1436 1437 val = tr32(MAC_PHYCFG1); 1438 val &= ~(MAC_PHYCFG1_RGMII_INT | 1439 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1440 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1441 tw32(MAC_PHYCFG1, val); 1442 1443 return; 1444 } 1445 1446 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1447 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1448 MAC_PHYCFG2_FMODE_MASK_MASK | 1449 MAC_PHYCFG2_GMODE_MASK_MASK | 1450 MAC_PHYCFG2_ACT_MASK_MASK | 1451 MAC_PHYCFG2_QUAL_MASK_MASK | 1452 MAC_PHYCFG2_INBAND_ENABLE; 1453 1454 tw32(MAC_PHYCFG2, val); 1455 1456 val = tr32(MAC_PHYCFG1); 1457 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1458 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1459 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1460 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1461 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1462 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1463 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1464 } 1465 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1466 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1467 tw32(MAC_PHYCFG1, val); 1468 1469 val = tr32(MAC_EXT_RGMII_MODE); 1470 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1471 MAC_RGMII_MODE_RX_QUALITY | 1472 MAC_RGMII_MODE_RX_ACTIVITY | 1473 MAC_RGMII_MODE_RX_ENG_DET | 1474 MAC_RGMII_MODE_TX_ENABLE | 1475 MAC_RGMII_MODE_TX_LOWPWR | 1476 MAC_RGMII_MODE_TX_RESET); 1477 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1478 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1479 val |= MAC_RGMII_MODE_RX_INT_B | 1480 MAC_RGMII_MODE_RX_QUALITY | 1481 MAC_RGMII_MODE_RX_ACTIVITY | 1482 MAC_RGMII_MODE_RX_ENG_DET; 1483 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1484 val |= MAC_RGMII_MODE_TX_ENABLE | 1485 MAC_RGMII_MODE_TX_LOWPWR | 1486 MAC_RGMII_MODE_TX_RESET; 1487 } 1488 tw32(MAC_EXT_RGMII_MODE, val); 1489} 1490 1491static void tg3_mdio_start(struct tg3 *tp) 1492{ 1493 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1494 tw32_f(MAC_MI_MODE, tp->mi_mode); 1495 udelay(80); 1496 1497 if (tg3_flag(tp, MDIOBUS_INITED) && 1498 tg3_asic_rev(tp) == ASIC_REV_5785) 1499 tg3_mdio_config_5785(tp); 1500} 1501 1502static int tg3_mdio_init(struct tg3 *tp) 1503{ 1504 int i; 1505 u32 reg; 1506 struct phy_device *phydev; 1507 1508 if (tg3_flag(tp, 5717_PLUS)) { 1509 u32 is_serdes; 1510 1511 tp->phy_addr = tp->pci_fn + 1; 1512 1513 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) 1514 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1515 else 1516 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1517 TG3_CPMU_PHY_STRAP_IS_SERDES; 1518 if (is_serdes) 1519 tp->phy_addr += 7; 1520 } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) { 1521 int addr; 1522 1523 addr = ssb_gige_get_phyaddr(tp->pdev); 1524 if (addr < 0) 1525 return addr; 1526 tp->phy_addr = addr; 1527 } else 1528 tp->phy_addr = TG3_PHY_MII_ADDR; 1529 1530 tg3_mdio_start(tp); 1531 1532 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1533 return 0; 1534 1535 tp->mdio_bus = mdiobus_alloc(); 1536 if (tp->mdio_bus == NULL) 1537 return -ENOMEM; 1538 1539 tp->mdio_bus->name = "tg3 mdio bus"; 1540 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1541 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 1542 tp->mdio_bus->priv = tp; 1543 tp->mdio_bus->parent = &tp->pdev->dev; 1544 tp->mdio_bus->read = &tg3_mdio_read; 1545 tp->mdio_bus->write = &tg3_mdio_write; 1546 tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr); 1547 1548 /* The bus registration will look for all the PHYs on the mdio bus. 1549 * Unfortunately, it does not ensure the PHY is powered up before 1550 * accessing the PHY ID registers. A chip reset is the 1551 * quickest way to bring the device back to an operational state.. 1552 */ 1553 if (tg3_readphy(tp, MII_BMCR, ®) || (reg & BMCR_PDOWN)) 1554 tg3_bmcr_reset(tp); 1555 1556 i = mdiobus_register(tp->mdio_bus); 1557 if (i) { 1558 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1559 mdiobus_free(tp->mdio_bus); 1560 return i; 1561 } 1562 1563 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1564 1565 if (!phydev || !phydev->drv) { 1566 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1567 mdiobus_unregister(tp->mdio_bus); 1568 mdiobus_free(tp->mdio_bus); 1569 return -ENODEV; 1570 } 1571 1572 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1573 case PHY_ID_BCM57780: 1574 phydev->interface = PHY_INTERFACE_MODE_GMII; 1575 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1576 break; 1577 case PHY_ID_BCM50610: 1578 case PHY_ID_BCM50610M: 1579 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1580 PHY_BRCM_RX_REFCLK_UNUSED | 1581 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1582 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1583 fallthrough; 1584 case PHY_ID_RTL8211C: 1585 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1586 break; 1587 case PHY_ID_RTL8201E: 1588 case PHY_ID_BCMAC131: 1589 phydev->interface = PHY_INTERFACE_MODE_MII; 1590 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1591 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1592 break; 1593 } 1594 1595 tg3_flag_set(tp, MDIOBUS_INITED); 1596 1597 if (tg3_asic_rev(tp) == ASIC_REV_5785) 1598 tg3_mdio_config_5785(tp); 1599 1600 return 0; 1601} 1602 1603static void tg3_mdio_fini(struct tg3 *tp) 1604{ 1605 if (tg3_flag(tp, MDIOBUS_INITED)) { 1606 tg3_flag_clear(tp, MDIOBUS_INITED); 1607 mdiobus_unregister(tp->mdio_bus); 1608 mdiobus_free(tp->mdio_bus); 1609 } 1610} 1611 1612/* tp->lock is held. */ 1613static inline void tg3_generate_fw_event(struct tg3 *tp) 1614{ 1615 u32 val; 1616 1617 val = tr32(GRC_RX_CPU_EVENT); 1618 val |= GRC_RX_CPU_DRIVER_EVENT; 1619 tw32_f(GRC_RX_CPU_EVENT, val); 1620 1621 tp->last_event_jiffies = jiffies; 1622} 1623 1624#define TG3_FW_EVENT_TIMEOUT_USEC 2500 1625 1626/* tp->lock is held. */ 1627static void tg3_wait_for_event_ack(struct tg3 *tp) 1628{ 1629 int i; 1630 unsigned int delay_cnt; 1631 long time_remain; 1632 1633 /* If enough time has passed, no wait is necessary. */ 1634 time_remain = (long)(tp->last_event_jiffies + 1 + 1635 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1636 (long)jiffies; 1637 if (time_remain < 0) 1638 return; 1639 1640 /* Check if we can shorten the wait time. */ 1641 delay_cnt = jiffies_to_usecs(time_remain); 1642 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1643 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1644 delay_cnt = (delay_cnt >> 3) + 1; 1645 1646 for (i = 0; i < delay_cnt; i++) { 1647 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1648 break; 1649 if (pci_channel_offline(tp->pdev)) 1650 break; 1651 1652 udelay(8); 1653 } 1654} 1655 1656/* tp->lock is held. */ 1657static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1658{ 1659 u32 reg, val; 1660 1661 val = 0; 1662 if (!tg3_readphy(tp, MII_BMCR, ®)) 1663 val = reg << 16; 1664 if (!tg3_readphy(tp, MII_BMSR, ®)) 1665 val |= (reg & 0xffff); 1666 *data++ = val; 1667 1668 val = 0; 1669 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1670 val = reg << 16; 1671 if (!tg3_readphy(tp, MII_LPA, ®)) 1672 val |= (reg & 0xffff); 1673 *data++ = val; 1674 1675 val = 0; 1676 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1677 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1678 val = reg << 16; 1679 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1680 val |= (reg & 0xffff); 1681 } 1682 *data++ = val; 1683 1684 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1685 val = reg << 16; 1686 else 1687 val = 0; 1688 *data++ = val; 1689} 1690 1691/* tp->lock is held. */ 1692static void tg3_ump_link_report(struct tg3 *tp) 1693{ 1694 u32 data[4]; 1695 1696 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1697 return; 1698 1699 tg3_phy_gather_ump_data(tp, data); 1700 1701 tg3_wait_for_event_ack(tp); 1702 1703 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1704 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1705 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1706 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1707 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1708 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1709 1710 tg3_generate_fw_event(tp); 1711} 1712 1713/* tp->lock is held. */ 1714static void tg3_stop_fw(struct tg3 *tp) 1715{ 1716 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1717 /* Wait for RX cpu to ACK the previous event. */ 1718 tg3_wait_for_event_ack(tp); 1719 1720 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1721 1722 tg3_generate_fw_event(tp); 1723 1724 /* Wait for RX cpu to ACK this event. */ 1725 tg3_wait_for_event_ack(tp); 1726 } 1727} 1728 1729/* tp->lock is held. */ 1730static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1731{ 1732 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1733 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1734 1735 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1736 switch (kind) { 1737 case RESET_KIND_INIT: 1738 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1739 DRV_STATE_START); 1740 break; 1741 1742 case RESET_KIND_SHUTDOWN: 1743 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1744 DRV_STATE_UNLOAD); 1745 break; 1746 1747 case RESET_KIND_SUSPEND: 1748 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1749 DRV_STATE_SUSPEND); 1750 break; 1751 1752 default: 1753 break; 1754 } 1755 } 1756} 1757 1758/* tp->lock is held. */ 1759static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1760{ 1761 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1762 switch (kind) { 1763 case RESET_KIND_INIT: 1764 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1765 DRV_STATE_START_DONE); 1766 break; 1767 1768 case RESET_KIND_SHUTDOWN: 1769 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1770 DRV_STATE_UNLOAD_DONE); 1771 break; 1772 1773 default: 1774 break; 1775 } 1776 } 1777} 1778 1779/* tp->lock is held. */ 1780static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1781{ 1782 if (tg3_flag(tp, ENABLE_ASF)) { 1783 switch (kind) { 1784 case RESET_KIND_INIT: 1785 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1786 DRV_STATE_START); 1787 break; 1788 1789 case RESET_KIND_SHUTDOWN: 1790 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1791 DRV_STATE_UNLOAD); 1792 break; 1793 1794 case RESET_KIND_SUSPEND: 1795 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1796 DRV_STATE_SUSPEND); 1797 break; 1798 1799 default: 1800 break; 1801 } 1802 } 1803} 1804 1805static int tg3_poll_fw(struct tg3 *tp) 1806{ 1807 int i; 1808 u32 val; 1809 1810 if (tg3_flag(tp, NO_FWARE_REPORTED)) 1811 return 0; 1812 1813 if (tg3_flag(tp, IS_SSB_CORE)) { 1814 /* We don't use firmware. */ 1815 return 0; 1816 } 1817 1818 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 1819 /* Wait up to 20ms for init done. */ 1820 for (i = 0; i < 200; i++) { 1821 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1822 return 0; 1823 if (pci_channel_offline(tp->pdev)) 1824 return -ENODEV; 1825 1826 udelay(100); 1827 } 1828 return -ENODEV; 1829 } 1830 1831 /* Wait for firmware initialization to complete. */ 1832 for (i = 0; i < 100000; i++) { 1833 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1834 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1835 break; 1836 if (pci_channel_offline(tp->pdev)) { 1837 if (!tg3_flag(tp, NO_FWARE_REPORTED)) { 1838 tg3_flag_set(tp, NO_FWARE_REPORTED); 1839 netdev_info(tp->dev, "No firmware running\n"); 1840 } 1841 1842 break; 1843 } 1844 1845 udelay(10); 1846 } 1847 1848 /* Chip might not be fitted with firmware. Some Sun onboard 1849 * parts are configured like that. So don't signal the timeout 1850 * of the above loop as an error, but do report the lack of 1851 * running firmware once. 1852 */ 1853 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1854 tg3_flag_set(tp, NO_FWARE_REPORTED); 1855 1856 netdev_info(tp->dev, "No firmware running\n"); 1857 } 1858 1859 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 1860 /* The 57765 A0 needs a little more 1861 * time to do some important work. 1862 */ 1863 mdelay(10); 1864 } 1865 1866 return 0; 1867} 1868 1869static void tg3_link_report(struct tg3 *tp) 1870{ 1871 if (!netif_carrier_ok(tp->dev)) { 1872 netif_info(tp, link, tp->dev, "Link is down\n"); 1873 tg3_ump_link_report(tp); 1874 } else if (netif_msg_link(tp)) { 1875 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1876 (tp->link_config.active_speed == SPEED_1000 ? 1877 1000 : 1878 (tp->link_config.active_speed == SPEED_100 ? 1879 100 : 10)), 1880 (tp->link_config.active_duplex == DUPLEX_FULL ? 1881 "full" : "half")); 1882 1883 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1884 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1885 "on" : "off", 1886 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1887 "on" : "off"); 1888 1889 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1890 netdev_info(tp->dev, "EEE is %s\n", 1891 tp->setlpicnt ? "enabled" : "disabled"); 1892 1893 tg3_ump_link_report(tp); 1894 } 1895 1896 tp->link_up = netif_carrier_ok(tp->dev); 1897} 1898 1899static u32 tg3_decode_flowctrl_1000T(u32 adv) 1900{ 1901 u32 flowctrl = 0; 1902 1903 if (adv & ADVERTISE_PAUSE_CAP) { 1904 flowctrl |= FLOW_CTRL_RX; 1905 if (!(adv & ADVERTISE_PAUSE_ASYM)) 1906 flowctrl |= FLOW_CTRL_TX; 1907 } else if (adv & ADVERTISE_PAUSE_ASYM) 1908 flowctrl |= FLOW_CTRL_TX; 1909 1910 return flowctrl; 1911} 1912 1913static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1914{ 1915 u16 miireg; 1916 1917 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1918 miireg = ADVERTISE_1000XPAUSE; 1919 else if (flow_ctrl & FLOW_CTRL_TX) 1920 miireg = ADVERTISE_1000XPSE_ASYM; 1921 else if (flow_ctrl & FLOW_CTRL_RX) 1922 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1923 else 1924 miireg = 0; 1925 1926 return miireg; 1927} 1928 1929static u32 tg3_decode_flowctrl_1000X(u32 adv) 1930{ 1931 u32 flowctrl = 0; 1932 1933 if (adv & ADVERTISE_1000XPAUSE) { 1934 flowctrl |= FLOW_CTRL_RX; 1935 if (!(adv & ADVERTISE_1000XPSE_ASYM)) 1936 flowctrl |= FLOW_CTRL_TX; 1937 } else if (adv & ADVERTISE_1000XPSE_ASYM) 1938 flowctrl |= FLOW_CTRL_TX; 1939 1940 return flowctrl; 1941} 1942 1943static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1944{ 1945 u8 cap = 0; 1946 1947 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1948 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1949 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1950 if (lcladv & ADVERTISE_1000XPAUSE) 1951 cap = FLOW_CTRL_RX; 1952 if (rmtadv & ADVERTISE_1000XPAUSE) 1953 cap = FLOW_CTRL_TX; 1954 } 1955 1956 return cap; 1957} 1958 1959static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1960{ 1961 u8 autoneg; 1962 u8 flowctrl = 0; 1963 u32 old_rx_mode = tp->rx_mode; 1964 u32 old_tx_mode = tp->tx_mode; 1965 1966 if (tg3_flag(tp, USE_PHYLIB)) 1967 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg; 1968 else 1969 autoneg = tp->link_config.autoneg; 1970 1971 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1972 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1973 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1974 else 1975 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1976 } else 1977 flowctrl = tp->link_config.flowctrl; 1978 1979 tp->link_config.active_flowctrl = flowctrl; 1980 1981 if (flowctrl & FLOW_CTRL_RX) 1982 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1983 else 1984 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1985 1986 if (old_rx_mode != tp->rx_mode) 1987 tw32_f(MAC_RX_MODE, tp->rx_mode); 1988 1989 if (flowctrl & FLOW_CTRL_TX) 1990 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1991 else 1992 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 1993 1994 if (old_tx_mode != tp->tx_mode) 1995 tw32_f(MAC_TX_MODE, tp->tx_mode); 1996} 1997 1998static void tg3_adjust_link(struct net_device *dev) 1999{ 2000 u8 oldflowctrl, linkmesg = 0; 2001 u32 mac_mode, lcl_adv, rmt_adv; 2002 struct tg3 *tp = netdev_priv(dev); 2003 struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2004 2005 spin_lock_bh(&tp->lock); 2006 2007 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 2008 MAC_MODE_HALF_DUPLEX); 2009 2010 oldflowctrl = tp->link_config.active_flowctrl; 2011 2012 if (phydev->link) { 2013 lcl_adv = 0; 2014 rmt_adv = 0; 2015 2016 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 2017 mac_mode |= MAC_MODE_PORT_MODE_MII; 2018 else if (phydev->speed == SPEED_1000 || 2019 tg3_asic_rev(tp) != ASIC_REV_5785) 2020 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2021 else 2022 mac_mode |= MAC_MODE_PORT_MODE_MII; 2023 2024 if (phydev->duplex == DUPLEX_HALF) 2025 mac_mode |= MAC_MODE_HALF_DUPLEX; 2026 else { 2027 lcl_adv = mii_advertise_flowctrl( 2028 tp->link_config.flowctrl); 2029 2030 if (phydev->pause) 2031 rmt_adv = LPA_PAUSE_CAP; 2032 if (phydev->asym_pause) 2033 rmt_adv |= LPA_PAUSE_ASYM; 2034 } 2035 2036 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 2037 } else 2038 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2039 2040 if (mac_mode != tp->mac_mode) { 2041 tp->mac_mode = mac_mode; 2042 tw32_f(MAC_MODE, tp->mac_mode); 2043 udelay(40); 2044 } 2045 2046 if (tg3_asic_rev(tp) == ASIC_REV_5785) { 2047 if (phydev->speed == SPEED_10) 2048 tw32(MAC_MI_STAT, 2049 MAC_MI_STAT_10MBPS_MODE | 2050 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2051 else 2052 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2053 } 2054 2055 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 2056 tw32(MAC_TX_LENGTHS, 2057 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2058 (6 << TX_LENGTHS_IPG_SHIFT) | 2059 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 2060 else 2061 tw32(MAC_TX_LENGTHS, 2062 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2063 (6 << TX_LENGTHS_IPG_SHIFT) | 2064 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 2065 2066 if (phydev->link != tp->old_link || 2067 phydev->speed != tp->link_config.active_speed || 2068 phydev->duplex != tp->link_config.active_duplex || 2069 oldflowctrl != tp->link_config.active_flowctrl) 2070 linkmesg = 1; 2071 2072 tp->old_link = phydev->link; 2073 tp->link_config.active_speed = phydev->speed; 2074 tp->link_config.active_duplex = phydev->duplex; 2075 2076 spin_unlock_bh(&tp->lock); 2077 2078 if (linkmesg) 2079 tg3_link_report(tp); 2080} 2081 2082static int tg3_phy_init(struct tg3 *tp) 2083{ 2084 struct phy_device *phydev; 2085 2086 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 2087 return 0; 2088 2089 /* Bring the PHY back to a known state. */ 2090 tg3_bmcr_reset(tp); 2091 2092 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2093 2094 /* Attach the MAC to the PHY. */ 2095 phydev = phy_connect(tp->dev, phydev_name(phydev), 2096 tg3_adjust_link, phydev->interface); 2097 if (IS_ERR(phydev)) { 2098 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 2099 return PTR_ERR(phydev); 2100 } 2101 2102 /* Mask with MAC supported features. */ 2103 switch (phydev->interface) { 2104 case PHY_INTERFACE_MODE_GMII: 2105 case PHY_INTERFACE_MODE_RGMII: 2106 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 2107 phy_set_max_speed(phydev, SPEED_1000); 2108 phy_support_asym_pause(phydev); 2109 break; 2110 } 2111 fallthrough; 2112 case PHY_INTERFACE_MODE_MII: 2113 phy_set_max_speed(phydev, SPEED_100); 2114 phy_support_asym_pause(phydev); 2115 break; 2116 default: 2117 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2118 return -EINVAL; 2119 } 2120 2121 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 2122 2123 phy_attached_info(phydev); 2124 2125 return 0; 2126} 2127 2128static void tg3_phy_start(struct tg3 *tp) 2129{ 2130 struct phy_device *phydev; 2131 2132 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2133 return; 2134 2135 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2136 2137 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 2138 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 2139 phydev->speed = tp->link_config.speed; 2140 phydev->duplex = tp->link_config.duplex; 2141 phydev->autoneg = tp->link_config.autoneg; 2142 ethtool_convert_legacy_u32_to_link_mode( 2143 phydev->advertising, tp->link_config.advertising); 2144 } 2145 2146 phy_start(phydev); 2147 2148 phy_start_aneg(phydev); 2149} 2150 2151static void tg3_phy_stop(struct tg3 *tp) 2152{ 2153 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2154 return; 2155 2156 phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2157} 2158 2159static void tg3_phy_fini(struct tg3 *tp) 2160{ 2161 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 2162 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2163 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 2164 } 2165} 2166 2167static int tg3_phy_set_extloopbk(struct tg3 *tp) 2168{ 2169 int err; 2170 u32 val; 2171 2172 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 2173 return 0; 2174 2175 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2176 /* Cannot do read-modify-write on 5401 */ 2177 err = tg3_phy_auxctl_write(tp, 2178 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2179 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 2180 0x4c20); 2181 goto done; 2182 } 2183 2184 err = tg3_phy_auxctl_read(tp, 2185 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2186 if (err) 2187 return err; 2188 2189 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 2190 err = tg3_phy_auxctl_write(tp, 2191 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 2192 2193done: 2194 return err; 2195} 2196 2197static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 2198{ 2199 u32 phytest; 2200 2201 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2202 u32 phy; 2203 2204 tg3_writephy(tp, MII_TG3_FET_TEST, 2205 phytest | MII_TG3_FET_SHADOW_EN); 2206 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 2207 if (enable) 2208 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 2209 else 2210 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 2211 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 2212 } 2213 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2214 } 2215} 2216 2217static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 2218{ 2219 u32 reg; 2220 2221 if (!tg3_flag(tp, 5705_PLUS) || 2222 (tg3_flag(tp, 5717_PLUS) && 2223 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2224 return; 2225 2226 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2227 tg3_phy_fet_toggle_apd(tp, enable); 2228 return; 2229 } 2230 2231 reg = MII_TG3_MISC_SHDW_SCR5_LPED | 2232 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 2233 MII_TG3_MISC_SHDW_SCR5_SDTL | 2234 MII_TG3_MISC_SHDW_SCR5_C125OE; 2235 if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable) 2236 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2237 2238 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg); 2239 2240 2241 reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2242 if (enable) 2243 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2244 2245 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg); 2246} 2247 2248static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable) 2249{ 2250 u32 phy; 2251 2252 if (!tg3_flag(tp, 5705_PLUS) || 2253 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2254 return; 2255 2256 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2257 u32 ephy; 2258 2259 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2260 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2261 2262 tg3_writephy(tp, MII_TG3_FET_TEST, 2263 ephy | MII_TG3_FET_SHADOW_EN); 2264 if (!tg3_readphy(tp, reg, &phy)) { 2265 if (enable) 2266 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2267 else 2268 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2269 tg3_writephy(tp, reg, phy); 2270 } 2271 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2272 } 2273 } else { 2274 int ret; 2275 2276 ret = tg3_phy_auxctl_read(tp, 2277 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2278 if (!ret) { 2279 if (enable) 2280 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2281 else 2282 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2283 tg3_phy_auxctl_write(tp, 2284 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2285 } 2286 } 2287} 2288 2289static void tg3_phy_set_wirespeed(struct tg3 *tp) 2290{ 2291 int ret; 2292 u32 val; 2293 2294 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2295 return; 2296 2297 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2298 if (!ret) 2299 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2300 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2301} 2302 2303static void tg3_phy_apply_otp(struct tg3 *tp) 2304{ 2305 u32 otp, phy; 2306 2307 if (!tp->phy_otp) 2308 return; 2309 2310 otp = tp->phy_otp; 2311 2312 if (tg3_phy_toggle_auxctl_smdsp(tp, true)) 2313 return; 2314 2315 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2316 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2317 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2318 2319 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2320 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2321 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2322 2323 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2324 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2325 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2326 2327 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2328 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2329 2330 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2331 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2332 2333 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2334 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2335 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2336 2337 tg3_phy_toggle_auxctl_smdsp(tp, false); 2338} 2339 2340static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee) 2341{ 2342 u32 val; 2343 struct ethtool_eee *dest = &tp->eee; 2344 2345 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2346 return; 2347 2348 if (eee) 2349 dest = eee; 2350 2351 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val)) 2352 return; 2353 2354 /* Pull eee_active */ 2355 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2356 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) { 2357 dest->eee_active = 1; 2358 } else 2359 dest->eee_active = 0; 2360 2361 /* Pull lp advertised settings */ 2362 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val)) 2363 return; 2364 dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2365 2366 /* Pull advertised and eee_enabled settings */ 2367 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val)) 2368 return; 2369 dest->eee_enabled = !!val; 2370 dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2371 2372 /* Pull tx_lpi_enabled */ 2373 val = tr32(TG3_CPMU_EEE_MODE); 2374 dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX); 2375 2376 /* Pull lpi timer value */ 2377 dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff; 2378} 2379 2380static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up) 2381{ 2382 u32 val; 2383 2384 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2385 return; 2386 2387 tp->setlpicnt = 0; 2388 2389 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2390 current_link_up && 2391 tp->link_config.active_duplex == DUPLEX_FULL && 2392 (tp->link_config.active_speed == SPEED_100 || 2393 tp->link_config.active_speed == SPEED_1000)) { 2394 u32 eeectl; 2395 2396 if (tp->link_config.active_speed == SPEED_1000) 2397 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2398 else 2399 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2400 2401 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2402 2403 tg3_eee_pull_config(tp, NULL); 2404 if (tp->eee.eee_active) 2405 tp->setlpicnt = 2; 2406 } 2407 2408 if (!tp->setlpicnt) { 2409 if (current_link_up && 2410 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2411 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2412 tg3_phy_toggle_auxctl_smdsp(tp, false); 2413 } 2414 2415 val = tr32(TG3_CPMU_EEE_MODE); 2416 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2417 } 2418} 2419 2420static void tg3_phy_eee_enable(struct tg3 *tp) 2421{ 2422 u32 val; 2423 2424 if (tp->link_config.active_speed == SPEED_1000 && 2425 (tg3_asic_rev(tp) == ASIC_REV_5717 || 2426 tg3_asic_rev(tp) == ASIC_REV_5719 || 2427 tg3_flag(tp, 57765_CLASS)) && 2428 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2429 val = MII_TG3_DSP_TAP26_ALNOKO | 2430 MII_TG3_DSP_TAP26_RMRXSTO; 2431 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2432 tg3_phy_toggle_auxctl_smdsp(tp, false); 2433 } 2434 2435 val = tr32(TG3_CPMU_EEE_MODE); 2436 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2437} 2438 2439static int tg3_wait_macro_done(struct tg3 *tp) 2440{ 2441 int limit = 100; 2442 2443 while (limit--) { 2444 u32 tmp32; 2445 2446 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2447 if ((tmp32 & 0x1000) == 0) 2448 break; 2449 } 2450 } 2451 if (limit < 0) 2452 return -EBUSY; 2453 2454 return 0; 2455} 2456 2457static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2458{ 2459 static const u32 test_pat[4][6] = { 2460 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2461 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2462 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2463 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2464 }; 2465 int chan; 2466 2467 for (chan = 0; chan < 4; chan++) { 2468 int i; 2469 2470 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2471 (chan * 0x2000) | 0x0200); 2472 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2473 2474 for (i = 0; i < 6; i++) 2475 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2476 test_pat[chan][i]); 2477 2478 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2479 if (tg3_wait_macro_done(tp)) { 2480 *resetp = 1; 2481 return -EBUSY; 2482 } 2483 2484 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2485 (chan * 0x2000) | 0x0200); 2486 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2487 if (tg3_wait_macro_done(tp)) { 2488 *resetp = 1; 2489 return -EBUSY; 2490 } 2491 2492 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2493 if (tg3_wait_macro_done(tp)) { 2494 *resetp = 1; 2495 return -EBUSY; 2496 } 2497 2498 for (i = 0; i < 6; i += 2) { 2499 u32 low, high; 2500 2501 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2502 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2503 tg3_wait_macro_done(tp)) { 2504 *resetp = 1; 2505 return -EBUSY; 2506 } 2507 low &= 0x7fff; 2508 high &= 0x000f; 2509 if (low != test_pat[chan][i] || 2510 high != test_pat[chan][i+1]) { 2511 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2512 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2513 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2514 2515 return -EBUSY; 2516 } 2517 } 2518 } 2519 2520 return 0; 2521} 2522 2523static int tg3_phy_reset_chanpat(struct tg3 *tp) 2524{ 2525 int chan; 2526 2527 for (chan = 0; chan < 4; chan++) { 2528 int i; 2529 2530 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2531 (chan * 0x2000) | 0x0200); 2532 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2533 for (i = 0; i < 6; i++) 2534 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2535 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2536 if (tg3_wait_macro_done(tp)) 2537 return -EBUSY; 2538 } 2539 2540 return 0; 2541} 2542 2543static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2544{ 2545 u32 reg32, phy9_orig; 2546 int retries, do_phy_reset, err; 2547 2548 retries = 10; 2549 do_phy_reset = 1; 2550 do { 2551 if (do_phy_reset) { 2552 err = tg3_bmcr_reset(tp); 2553 if (err) 2554 return err; 2555 do_phy_reset = 0; 2556 } 2557 2558 /* Disable transmitter and interrupt. */ 2559 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2560 continue; 2561 2562 reg32 |= 0x3000; 2563 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2564 2565 /* Set full-duplex, 1000 mbps. */ 2566 tg3_writephy(tp, MII_BMCR, 2567 BMCR_FULLDPLX | BMCR_SPEED1000); 2568 2569 /* Set to master mode. */ 2570 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2571 continue; 2572 2573 tg3_writephy(tp, MII_CTRL1000, 2574 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2575 2576 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 2577 if (err) 2578 return err; 2579 2580 /* Block the PHY control access. */ 2581 tg3_phydsp_write(tp, 0x8005, 0x0800); 2582 2583 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2584 if (!err) 2585 break; 2586 } while (--retries); 2587 2588 err = tg3_phy_reset_chanpat(tp); 2589 if (err) 2590 return err; 2591 2592 tg3_phydsp_write(tp, 0x8005, 0x0000); 2593 2594 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2595 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2596 2597 tg3_phy_toggle_auxctl_smdsp(tp, false); 2598 2599 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2600 2601 err = tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32); 2602 if (err) 2603 return err; 2604 2605 reg32 &= ~0x3000; 2606 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2607 2608 return 0; 2609} 2610 2611static void tg3_carrier_off(struct tg3 *tp) 2612{ 2613 netif_carrier_off(tp->dev); 2614 tp->link_up = false; 2615} 2616 2617static void tg3_warn_mgmt_link_flap(struct tg3 *tp) 2618{ 2619 if (tg3_flag(tp, ENABLE_ASF)) 2620 netdev_warn(tp->dev, 2621 "Management side-band traffic will be interrupted during phy settings change\n"); 2622} 2623 2624/* This will reset the tigon3 PHY if there is no valid 2625 * link unless the FORCE argument is non-zero. 2626 */ 2627static int tg3_phy_reset(struct tg3 *tp) 2628{ 2629 u32 val, cpmuctrl; 2630 int err; 2631 2632 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2633 val = tr32(GRC_MISC_CFG); 2634 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2635 udelay(40); 2636 } 2637 err = tg3_readphy(tp, MII_BMSR, &val); 2638 err |= tg3_readphy(tp, MII_BMSR, &val); 2639 if (err != 0) 2640 return -EBUSY; 2641 2642 if (netif_running(tp->dev) && tp->link_up) { 2643 netif_carrier_off(tp->dev); 2644 tg3_link_report(tp); 2645 } 2646 2647 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 2648 tg3_asic_rev(tp) == ASIC_REV_5704 || 2649 tg3_asic_rev(tp) == ASIC_REV_5705) { 2650 err = tg3_phy_reset_5703_4_5(tp); 2651 if (err) 2652 return err; 2653 goto out; 2654 } 2655 2656 cpmuctrl = 0; 2657 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 2658 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 2659 cpmuctrl = tr32(TG3_CPMU_CTRL); 2660 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2661 tw32(TG3_CPMU_CTRL, 2662 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2663 } 2664 2665 err = tg3_bmcr_reset(tp); 2666 if (err) 2667 return err; 2668 2669 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2670 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2671 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2672 2673 tw32(TG3_CPMU_CTRL, cpmuctrl); 2674 } 2675 2676 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 2677 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 2678 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2679 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2680 CPMU_LSPD_1000MB_MACCLK_12_5) { 2681 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2682 udelay(40); 2683 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2684 } 2685 } 2686 2687 if (tg3_flag(tp, 5717_PLUS) && 2688 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2689 return 0; 2690 2691 tg3_phy_apply_otp(tp); 2692 2693 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2694 tg3_phy_toggle_apd(tp, true); 2695 else 2696 tg3_phy_toggle_apd(tp, false); 2697 2698out: 2699 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2700 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2701 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2702 tg3_phydsp_write(tp, 0x000a, 0x0323); 2703 tg3_phy_toggle_auxctl_smdsp(tp, false); 2704 } 2705 2706 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2707 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2708 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2709 } 2710 2711 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2712 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2713 tg3_phydsp_write(tp, 0x000a, 0x310b); 2714 tg3_phydsp_write(tp, 0x201f, 0x9506); 2715 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2716 tg3_phy_toggle_auxctl_smdsp(tp, false); 2717 } 2718 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2719 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2720 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2721 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2722 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2723 tg3_writephy(tp, MII_TG3_TEST1, 2724 MII_TG3_TEST1_TRIM_EN | 0x4); 2725 } else 2726 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2727 2728 tg3_phy_toggle_auxctl_smdsp(tp, false); 2729 } 2730 } 2731 2732 /* Set Extended packet length bit (bit 14) on all chips that */ 2733 /* support jumbo frames */ 2734 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2735 /* Cannot do read-modify-write on 5401 */ 2736 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2737 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2738 /* Set bit 14 with read-modify-write to preserve other bits */ 2739 err = tg3_phy_auxctl_read(tp, 2740 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2741 if (!err) 2742 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2743 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2744 } 2745 2746 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2747 * jumbo frames transmission. 2748 */ 2749 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2750 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2751 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2752 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2753 } 2754 2755 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2756 /* adjust output voltage */ 2757 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2758 } 2759 2760 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0) 2761 tg3_phydsp_write(tp, 0xffb, 0x4000); 2762 2763 tg3_phy_toggle_automdix(tp, true); 2764 tg3_phy_set_wirespeed(tp); 2765 return 0; 2766} 2767 2768#define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2769#define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2770#define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2771 TG3_GPIO_MSG_NEED_VAUX) 2772#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2773 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2774 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2775 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2776 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2777 2778#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2779 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2780 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2781 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2782 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2783 2784static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2785{ 2786 u32 status, shift; 2787 2788 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2789 tg3_asic_rev(tp) == ASIC_REV_5719) 2790 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2791 else 2792 status = tr32(TG3_CPMU_DRV_STATUS); 2793 2794 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2795 status &= ~(TG3_GPIO_MSG_MASK << shift); 2796 status |= (newstat << shift); 2797 2798 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2799 tg3_asic_rev(tp) == ASIC_REV_5719) 2800 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2801 else 2802 tw32(TG3_CPMU_DRV_STATUS, status); 2803 2804 return status >> TG3_APE_GPIO_MSG_SHIFT; 2805} 2806 2807static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2808{ 2809 if (!tg3_flag(tp, IS_NIC)) 2810 return 0; 2811 2812 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2813 tg3_asic_rev(tp) == ASIC_REV_5719 || 2814 tg3_asic_rev(tp) == ASIC_REV_5720) { 2815 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2816 return -EIO; 2817 2818 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2819 2820 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2821 TG3_GRC_LCLCTL_PWRSW_DELAY); 2822 2823 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2824 } else { 2825 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2826 TG3_GRC_LCLCTL_PWRSW_DELAY); 2827 } 2828 2829 return 0; 2830} 2831 2832static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2833{ 2834 u32 grc_local_ctrl; 2835 2836 if (!tg3_flag(tp, IS_NIC) || 2837 tg3_asic_rev(tp) == ASIC_REV_5700 || 2838 tg3_asic_rev(tp) == ASIC_REV_5701) 2839 return; 2840 2841 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2842 2843 tw32_wait_f(GRC_LOCAL_CTRL, 2844 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2845 TG3_GRC_LCLCTL_PWRSW_DELAY); 2846 2847 tw32_wait_f(GRC_LOCAL_CTRL, 2848 grc_local_ctrl, 2849 TG3_GRC_LCLCTL_PWRSW_DELAY); 2850 2851 tw32_wait_f(GRC_LOCAL_CTRL, 2852 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2853 TG3_GRC_LCLCTL_PWRSW_DELAY); 2854} 2855 2856static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2857{ 2858 if (!tg3_flag(tp, IS_NIC)) 2859 return; 2860 2861 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 2862 tg3_asic_rev(tp) == ASIC_REV_5701) { 2863 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2864 (GRC_LCLCTRL_GPIO_OE0 | 2865 GRC_LCLCTRL_GPIO_OE1 | 2866 GRC_LCLCTRL_GPIO_OE2 | 2867 GRC_LCLCTRL_GPIO_OUTPUT0 | 2868 GRC_LCLCTRL_GPIO_OUTPUT1), 2869 TG3_GRC_LCLCTL_PWRSW_DELAY); 2870 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2871 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2872 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2873 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2874 GRC_LCLCTRL_GPIO_OE1 | 2875 GRC_LCLCTRL_GPIO_OE2 | 2876 GRC_LCLCTRL_GPIO_OUTPUT0 | 2877 GRC_LCLCTRL_GPIO_OUTPUT1 | 2878 tp->grc_local_ctrl; 2879 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2880 TG3_GRC_LCLCTL_PWRSW_DELAY); 2881 2882 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2883 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2884 TG3_GRC_LCLCTL_PWRSW_DELAY); 2885 2886 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2887 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2888 TG3_GRC_LCLCTL_PWRSW_DELAY); 2889 } else { 2890 u32 no_gpio2; 2891 u32 grc_local_ctrl = 0; 2892 2893 /* Workaround to prevent overdrawing Amps. */ 2894 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 2895 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2896 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2897 grc_local_ctrl, 2898 TG3_GRC_LCLCTL_PWRSW_DELAY); 2899 } 2900 2901 /* On 5753 and variants, GPIO2 cannot be used. */ 2902 no_gpio2 = tp->nic_sram_data_cfg & 2903 NIC_SRAM_DATA_CFG_NO_GPIO2; 2904 2905 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2906 GRC_LCLCTRL_GPIO_OE1 | 2907 GRC_LCLCTRL_GPIO_OE2 | 2908 GRC_LCLCTRL_GPIO_OUTPUT1 | 2909 GRC_LCLCTRL_GPIO_OUTPUT2; 2910 if (no_gpio2) { 2911 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2912 GRC_LCLCTRL_GPIO_OUTPUT2); 2913 } 2914 tw32_wait_f(GRC_LOCAL_CTRL, 2915 tp->grc_local_ctrl | grc_local_ctrl, 2916 TG3_GRC_LCLCTL_PWRSW_DELAY); 2917 2918 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2919 2920 tw32_wait_f(GRC_LOCAL_CTRL, 2921 tp->grc_local_ctrl | grc_local_ctrl, 2922 TG3_GRC_LCLCTL_PWRSW_DELAY); 2923 2924 if (!no_gpio2) { 2925 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2926 tw32_wait_f(GRC_LOCAL_CTRL, 2927 tp->grc_local_ctrl | grc_local_ctrl, 2928 TG3_GRC_LCLCTL_PWRSW_DELAY); 2929 } 2930 } 2931} 2932 2933static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2934{ 2935 u32 msg = 0; 2936 2937 /* Serialize power state transitions */ 2938 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2939 return; 2940 2941 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2942 msg = TG3_GPIO_MSG_NEED_VAUX; 2943 2944 msg = tg3_set_function_status(tp, msg); 2945 2946 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2947 goto done; 2948 2949 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2950 tg3_pwrsrc_switch_to_vaux(tp); 2951 else 2952 tg3_pwrsrc_die_with_vmain(tp); 2953 2954done: 2955 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2956} 2957 2958static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2959{ 2960 bool need_vaux = false; 2961 2962 /* The GPIOs do something completely different on 57765. */ 2963 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2964 return; 2965 2966 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2967 tg3_asic_rev(tp) == ASIC_REV_5719 || 2968 tg3_asic_rev(tp) == ASIC_REV_5720) { 2969 tg3_frob_aux_power_5717(tp, include_wol ? 2970 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2971 return; 2972 } 2973 2974 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2975 struct net_device *dev_peer; 2976 2977 dev_peer = pci_get_drvdata(tp->pdev_peer); 2978 2979 /* remove_one() may have been run on the peer. */ 2980 if (dev_peer) { 2981 struct tg3 *tp_peer = netdev_priv(dev_peer); 2982 2983 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2984 return; 2985 2986 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2987 tg3_flag(tp_peer, ENABLE_ASF)) 2988 need_vaux = true; 2989 } 2990 } 2991 2992 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 2993 tg3_flag(tp, ENABLE_ASF)) 2994 need_vaux = true; 2995 2996 if (need_vaux) 2997 tg3_pwrsrc_switch_to_vaux(tp); 2998 else 2999 tg3_pwrsrc_die_with_vmain(tp); 3000} 3001 3002static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 3003{ 3004 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 3005 return 1; 3006 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 3007 if (speed != SPEED_10) 3008 return 1; 3009 } else if (speed == SPEED_10) 3010 return 1; 3011 3012 return 0; 3013} 3014 3015static bool tg3_phy_power_bug(struct tg3 *tp) 3016{ 3017 switch (tg3_asic_rev(tp)) { 3018 case ASIC_REV_5700: 3019 case ASIC_REV_5704: 3020 return true; 3021 case ASIC_REV_5780: 3022 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3023 return true; 3024 return false; 3025 case ASIC_REV_5717: 3026 if (!tp->pci_fn) 3027 return true; 3028 return false; 3029 case ASIC_REV_5719: 3030 case ASIC_REV_5720: 3031 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 3032 !tp->pci_fn) 3033 return true; 3034 return false; 3035 } 3036 3037 return false; 3038} 3039 3040static bool tg3_phy_led_bug(struct tg3 *tp) 3041{ 3042 switch (tg3_asic_rev(tp)) { 3043 case ASIC_REV_5719: 3044 case ASIC_REV_5720: 3045 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 3046 !tp->pci_fn) 3047 return true; 3048 return false; 3049 } 3050 3051 return false; 3052} 3053 3054static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 3055{ 3056 u32 val; 3057 3058 if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) 3059 return; 3060 3061 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 3062 if (tg3_asic_rev(tp) == ASIC_REV_5704) { 3063 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 3064 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 3065 3066 sg_dig_ctrl |= 3067 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 3068 tw32(SG_DIG_CTRL, sg_dig_ctrl); 3069 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 3070 } 3071 return; 3072 } 3073 3074 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3075 tg3_bmcr_reset(tp); 3076 val = tr32(GRC_MISC_CFG); 3077 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 3078 udelay(40); 3079 return; 3080 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3081 u32 phytest; 3082 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 3083 u32 phy; 3084 3085 tg3_writephy(tp, MII_ADVERTISE, 0); 3086 tg3_writephy(tp, MII_BMCR, 3087 BMCR_ANENABLE | BMCR_ANRESTART); 3088 3089 tg3_writephy(tp, MII_TG3_FET_TEST, 3090 phytest | MII_TG3_FET_SHADOW_EN); 3091 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 3092 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 3093 tg3_writephy(tp, 3094 MII_TG3_FET_SHDW_AUXMODE4, 3095 phy); 3096 } 3097 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 3098 } 3099 return; 3100 } else if (do_low_power) { 3101 if (!tg3_phy_led_bug(tp)) 3102 tg3_writephy(tp, MII_TG3_EXT_CTRL, 3103 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 3104 3105 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3106 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 3107 MII_TG3_AUXCTL_PCTL_VREG_11V; 3108 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 3109 } 3110 3111 /* The PHY should not be powered down on some chips because 3112 * of bugs. 3113 */ 3114 if (tg3_phy_power_bug(tp)) 3115 return; 3116 3117 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 3118 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 3119 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 3120 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 3121 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 3122 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 3123 } 3124 3125 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 3126} 3127 3128/* tp->lock is held. */ 3129static int tg3_nvram_lock(struct tg3 *tp) 3130{ 3131 if (tg3_flag(tp, NVRAM)) { 3132 int i; 3133 3134 if (tp->nvram_lock_cnt == 0) { 3135 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 3136 for (i = 0; i < 8000; i++) { 3137 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 3138 break; 3139 udelay(20); 3140 } 3141 if (i == 8000) { 3142 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 3143 return -ENODEV; 3144 } 3145 } 3146 tp->nvram_lock_cnt++; 3147 } 3148 return 0; 3149} 3150 3151/* tp->lock is held. */ 3152static void tg3_nvram_unlock(struct tg3 *tp) 3153{ 3154 if (tg3_flag(tp, NVRAM)) { 3155 if (tp->nvram_lock_cnt > 0) 3156 tp->nvram_lock_cnt--; 3157 if (tp->nvram_lock_cnt == 0) 3158 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 3159 } 3160} 3161 3162/* tp->lock is held. */ 3163static void tg3_enable_nvram_access(struct tg3 *tp) 3164{ 3165 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3166 u32 nvaccess = tr32(NVRAM_ACCESS); 3167 3168 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 3169 } 3170} 3171 3172/* tp->lock is held. */ 3173static void tg3_disable_nvram_access(struct tg3 *tp) 3174{ 3175 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3176 u32 nvaccess = tr32(NVRAM_ACCESS); 3177 3178 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 3179 } 3180} 3181 3182static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 3183 u32 offset, u32 *val) 3184{ 3185 u32 tmp; 3186 int i; 3187 3188 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 3189 return -EINVAL; 3190 3191 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 3192 EEPROM_ADDR_DEVID_MASK | 3193 EEPROM_ADDR_READ); 3194 tw32(GRC_EEPROM_ADDR, 3195 tmp | 3196 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3197 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 3198 EEPROM_ADDR_ADDR_MASK) | 3199 EEPROM_ADDR_READ | EEPROM_ADDR_START); 3200 3201 for (i = 0; i < 1000; i++) { 3202 tmp = tr32(GRC_EEPROM_ADDR); 3203 3204 if (tmp & EEPROM_ADDR_COMPLETE) 3205 break; 3206 msleep(1); 3207 } 3208 if (!(tmp & EEPROM_ADDR_COMPLETE)) 3209 return -EBUSY; 3210 3211 tmp = tr32(GRC_EEPROM_DATA); 3212 3213 /* 3214 * The data will always be opposite the native endian 3215 * format. Perform a blind byteswap to compensate. 3216 */ 3217 *val = swab32(tmp); 3218 3219 return 0; 3220} 3221 3222#define NVRAM_CMD_TIMEOUT 10000 3223 3224static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 3225{ 3226 int i; 3227 3228 tw32(NVRAM_CMD, nvram_cmd); 3229 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 3230 usleep_range(10, 40); 3231 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 3232 udelay(10); 3233 break; 3234 } 3235 } 3236 3237 if (i == NVRAM_CMD_TIMEOUT) 3238 return -EBUSY; 3239 3240 return 0; 3241} 3242 3243static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 3244{ 3245 if (tg3_flag(tp, NVRAM) && 3246 tg3_flag(tp, NVRAM_BUFFERED) && 3247 tg3_flag(tp, FLASH) && 3248 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3249 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3250 3251 addr = ((addr / tp->nvram_pagesize) << 3252 ATMEL_AT45DB0X1B_PAGE_POS) + 3253 (addr % tp->nvram_pagesize); 3254 3255 return addr; 3256} 3257 3258static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 3259{ 3260 if (tg3_flag(tp, NVRAM) && 3261 tg3_flag(tp, NVRAM_BUFFERED) && 3262 tg3_flag(tp, FLASH) && 3263 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3264 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3265 3266 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 3267 tp->nvram_pagesize) + 3268 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 3269 3270 return addr; 3271} 3272 3273/* NOTE: Data read in from NVRAM is byteswapped according to 3274 * the byteswapping settings for all other register accesses. 3275 * tg3 devices are BE devices, so on a BE machine, the data 3276 * returned will be exactly as it is seen in NVRAM. On a LE 3277 * machine, the 32-bit value will be byteswapped. 3278 */ 3279static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 3280{ 3281 int ret; 3282 3283 if (!tg3_flag(tp, NVRAM)) 3284 return tg3_nvram_read_using_eeprom(tp, offset, val); 3285 3286 offset = tg3_nvram_phys_addr(tp, offset); 3287 3288 if (offset > NVRAM_ADDR_MSK) 3289 return -EINVAL; 3290 3291 ret = tg3_nvram_lock(tp); 3292 if (ret) 3293 return ret; 3294 3295 tg3_enable_nvram_access(tp); 3296 3297 tw32(NVRAM_ADDR, offset); 3298 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 3299 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 3300 3301 if (ret == 0) 3302 *val = tr32(NVRAM_RDDATA); 3303 3304 tg3_disable_nvram_access(tp); 3305 3306 tg3_nvram_unlock(tp); 3307 3308 return ret; 3309} 3310 3311/* Ensures NVRAM data is in bytestream format. */ 3312static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 3313{ 3314 u32 v; 3315 int res = tg3_nvram_read(tp, offset, &v); 3316 if (!res) 3317 *val = cpu_to_be32(v); 3318 return res; 3319} 3320 3321static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 3322 u32 offset, u32 len, u8 *buf) 3323{ 3324 int i, j, rc = 0; 3325 u32 val; 3326 3327 for (i = 0; i < len; i += 4) { 3328 u32 addr; 3329 __be32 data; 3330 3331 addr = offset + i; 3332 3333 memcpy(&data, buf + i, 4); 3334 3335 /* 3336 * The SEEPROM interface expects the data to always be opposite 3337 * the native endian format. We accomplish this by reversing 3338 * all the operations that would have been performed on the 3339 * data from a call to tg3_nvram_read_be32(). 3340 */ 3341 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3342 3343 val = tr32(GRC_EEPROM_ADDR); 3344 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3345 3346 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3347 EEPROM_ADDR_READ); 3348 tw32(GRC_EEPROM_ADDR, val | 3349 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3350 (addr & EEPROM_ADDR_ADDR_MASK) | 3351 EEPROM_ADDR_START | 3352 EEPROM_ADDR_WRITE); 3353 3354 for (j = 0; j < 1000; j++) { 3355 val = tr32(GRC_EEPROM_ADDR); 3356 3357 if (val & EEPROM_ADDR_COMPLETE) 3358 break; 3359 msleep(1); 3360 } 3361 if (!(val & EEPROM_ADDR_COMPLETE)) { 3362 rc = -EBUSY; 3363 break; 3364 } 3365 } 3366 3367 return rc; 3368} 3369 3370/* offset and length are dword aligned */ 3371static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3372 u8 *buf) 3373{ 3374 int ret = 0; 3375 u32 pagesize = tp->nvram_pagesize; 3376 u32 pagemask = pagesize - 1; 3377 u32 nvram_cmd; 3378 u8 *tmp; 3379 3380 tmp = kmalloc(pagesize, GFP_KERNEL); 3381 if (tmp == NULL) 3382 return -ENOMEM; 3383 3384 while (len) { 3385 int j; 3386 u32 phy_addr, page_off, size; 3387 3388 phy_addr = offset & ~pagemask; 3389 3390 for (j = 0; j < pagesize; j += 4) { 3391 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3392 (__be32 *) (tmp + j)); 3393 if (ret) 3394 break; 3395 } 3396 if (ret) 3397 break; 3398 3399 page_off = offset & pagemask; 3400 size = pagesize; 3401 if (len < size) 3402 size = len; 3403 3404 len -= size; 3405 3406 memcpy(tmp + page_off, buf, size); 3407 3408 offset = offset + (pagesize - page_off); 3409 3410 tg3_enable_nvram_access(tp); 3411 3412 /* 3413 * Before we can erase the flash page, we need 3414 * to issue a special "write enable" command. 3415 */ 3416 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3417 3418 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3419 break; 3420 3421 /* Erase the target page */ 3422 tw32(NVRAM_ADDR, phy_addr); 3423 3424 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3425 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3426 3427 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3428 break; 3429 3430 /* Issue another write enable to start the write. */ 3431 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3432 3433 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3434 break; 3435 3436 for (j = 0; j < pagesize; j += 4) { 3437 __be32 data; 3438 3439 data = *((__be32 *) (tmp + j)); 3440 3441 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3442 3443 tw32(NVRAM_ADDR, phy_addr + j); 3444 3445 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3446 NVRAM_CMD_WR; 3447 3448 if (j == 0) 3449 nvram_cmd |= NVRAM_CMD_FIRST; 3450 else if (j == (pagesize - 4)) 3451 nvram_cmd |= NVRAM_CMD_LAST; 3452 3453 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3454 if (ret) 3455 break; 3456 } 3457 if (ret) 3458 break; 3459 } 3460 3461 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3462 tg3_nvram_exec_cmd(tp, nvram_cmd); 3463 3464 kfree(tmp); 3465 3466 return ret; 3467} 3468 3469/* offset and length are dword aligned */ 3470static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3471 u8 *buf) 3472{ 3473 int i, ret = 0; 3474 3475 for (i = 0; i < len; i += 4, offset += 4) { 3476 u32 page_off, phy_addr, nvram_cmd; 3477 __be32 data; 3478 3479 memcpy(&data, buf + i, 4); 3480 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3481 3482 page_off = offset % tp->nvram_pagesize; 3483 3484 phy_addr = tg3_nvram_phys_addr(tp, offset); 3485 3486 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3487 3488 if (page_off == 0 || i == 0) 3489 nvram_cmd |= NVRAM_CMD_FIRST; 3490 if (page_off == (tp->nvram_pagesize - 4)) 3491 nvram_cmd |= NVRAM_CMD_LAST; 3492 3493 if (i == (len - 4)) 3494 nvram_cmd |= NVRAM_CMD_LAST; 3495 3496 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3497 !tg3_flag(tp, FLASH) || 3498 !tg3_flag(tp, 57765_PLUS)) 3499 tw32(NVRAM_ADDR, phy_addr); 3500 3501 if (tg3_asic_rev(tp) != ASIC_REV_5752 && 3502 !tg3_flag(tp, 5755_PLUS) && 3503 (tp->nvram_jedecnum == JEDEC_ST) && 3504 (nvram_cmd & NVRAM_CMD_FIRST)) { 3505 u32 cmd; 3506 3507 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3508 ret = tg3_nvram_exec_cmd(tp, cmd); 3509 if (ret) 3510 break; 3511 } 3512 if (!tg3_flag(tp, FLASH)) { 3513 /* We always do complete word writes to eeprom. */ 3514 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3515 } 3516 3517 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3518 if (ret) 3519 break; 3520 } 3521 return ret; 3522} 3523 3524/* offset and length are dword aligned */ 3525static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3526{ 3527 int ret; 3528 3529 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3530 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3531 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3532 udelay(40); 3533 } 3534 3535 if (!tg3_flag(tp, NVRAM)) { 3536 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3537 } else { 3538 u32 grc_mode; 3539 3540 ret = tg3_nvram_lock(tp); 3541 if (ret) 3542 return ret; 3543 3544 tg3_enable_nvram_access(tp); 3545 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3546 tw32(NVRAM_WRITE1, 0x406); 3547 3548 grc_mode = tr32(GRC_MODE); 3549 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3550 3551 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3552 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3553 buf); 3554 } else { 3555 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3556 buf); 3557 } 3558 3559 grc_mode = tr32(GRC_MODE); 3560 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3561 3562 tg3_disable_nvram_access(tp); 3563 tg3_nvram_unlock(tp); 3564 } 3565 3566 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3567 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3568 udelay(40); 3569 } 3570 3571 return ret; 3572} 3573 3574#define RX_CPU_SCRATCH_BASE 0x30000 3575#define RX_CPU_SCRATCH_SIZE 0x04000 3576#define TX_CPU_SCRATCH_BASE 0x34000 3577#define TX_CPU_SCRATCH_SIZE 0x04000 3578 3579/* tp->lock is held. */ 3580static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base) 3581{ 3582 int i; 3583 const int iters = 10000; 3584 3585 for (i = 0; i < iters; i++) { 3586 tw32(cpu_base + CPU_STATE, 0xffffffff); 3587 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3588 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT) 3589 break; 3590 if (pci_channel_offline(tp->pdev)) 3591 return -EBUSY; 3592 } 3593 3594 return (i == iters) ? -EBUSY : 0; 3595} 3596 3597/* tp->lock is held. */ 3598static int tg3_rxcpu_pause(struct tg3 *tp) 3599{ 3600 int rc = tg3_pause_cpu(tp, RX_CPU_BASE); 3601 3602 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3603 tw32_f(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3604 udelay(10); 3605 3606 return rc; 3607} 3608 3609/* tp->lock is held. */ 3610static int tg3_txcpu_pause(struct tg3 *tp) 3611{ 3612 return tg3_pause_cpu(tp, TX_CPU_BASE); 3613} 3614 3615/* tp->lock is held. */ 3616static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base) 3617{ 3618 tw32(cpu_base + CPU_STATE, 0xffffffff); 3619 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3620} 3621 3622/* tp->lock is held. */ 3623static void tg3_rxcpu_resume(struct tg3 *tp) 3624{ 3625 tg3_resume_cpu(tp, RX_CPU_BASE); 3626} 3627 3628/* tp->lock is held. */ 3629static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base) 3630{ 3631 int rc; 3632 3633 BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3634 3635 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3636 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3637 3638 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3639 return 0; 3640 } 3641 if (cpu_base == RX_CPU_BASE) { 3642 rc = tg3_rxcpu_pause(tp); 3643 } else { 3644 /* 3645 * There is only an Rx CPU for the 5750 derivative in the 3646 * BCM4785. 3647 */ 3648 if (tg3_flag(tp, IS_SSB_CORE)) 3649 return 0; 3650 3651 rc = tg3_txcpu_pause(tp); 3652 } 3653 3654 if (rc) { 3655 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3656 __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX"); 3657 return -ENODEV; 3658 } 3659 3660 /* Clear firmware's nvram arbitration. */ 3661 if (tg3_flag(tp, NVRAM)) 3662 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3663 return 0; 3664} 3665 3666static int tg3_fw_data_len(struct tg3 *tp, 3667 const struct tg3_firmware_hdr *fw_hdr) 3668{ 3669 int fw_len; 3670 3671 /* Non fragmented firmware have one firmware header followed by a 3672 * contiguous chunk of data to be written. The length field in that 3673 * header is not the length of data to be written but the complete 3674 * length of the bss. The data length is determined based on 3675 * tp->fw->size minus headers. 3676 * 3677 * Fragmented firmware have a main header followed by multiple 3678 * fragments. Each fragment is identical to non fragmented firmware 3679 * with a firmware header followed by a contiguous chunk of data. In 3680 * the main header, the length field is unused and set to 0xffffffff. 3681 * In each fragment header the length is the entire size of that 3682 * fragment i.e. fragment data + header length. Data length is 3683 * therefore length field in the header minus TG3_FW_HDR_LEN. 3684 */ 3685 if (tp->fw_len == 0xffffffff) 3686 fw_len = be32_to_cpu(fw_hdr->len); 3687 else 3688 fw_len = tp->fw->size; 3689 3690 return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32); 3691} 3692 3693/* tp->lock is held. */ 3694static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3695 u32 cpu_scratch_base, int cpu_scratch_size, 3696 const struct tg3_firmware_hdr *fw_hdr) 3697{ 3698 int err, i; 3699 void (*write_op)(struct tg3 *, u32, u32); 3700 int total_len = tp->fw->size; 3701 3702 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3703 netdev_err(tp->dev, 3704 "%s: Trying to load TX cpu firmware which is 5705\n", 3705 __func__); 3706 return -EINVAL; 3707 } 3708 3709 if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766) 3710 write_op = tg3_write_mem; 3711 else 3712 write_op = tg3_write_indirect_reg32; 3713 3714 if (tg3_asic_rev(tp) != ASIC_REV_57766) { 3715 /* It is possible that bootcode is still loading at this point. 3716 * Get the nvram lock first before halting the cpu. 3717 */ 3718 int lock_err = tg3_nvram_lock(tp); 3719 err = tg3_halt_cpu(tp, cpu_base); 3720 if (!lock_err) 3721 tg3_nvram_unlock(tp); 3722 if (err) 3723 goto out; 3724 3725 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3726 write_op(tp, cpu_scratch_base + i, 0); 3727 tw32(cpu_base + CPU_STATE, 0xffffffff); 3728 tw32(cpu_base + CPU_MODE, 3729 tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT); 3730 } else { 3731 /* Subtract additional main header for fragmented firmware and 3732 * advance to the first fragment 3733 */ 3734 total_len -= TG3_FW_HDR_LEN; 3735 fw_hdr++; 3736 } 3737 3738 do { 3739 u32 *fw_data = (u32 *)(fw_hdr + 1); 3740 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++) 3741 write_op(tp, cpu_scratch_base + 3742 (be32_to_cpu(fw_hdr->base_addr) & 0xffff) + 3743 (i * sizeof(u32)), 3744 be32_to_cpu(fw_data[i])); 3745 3746 total_len -= be32_to_cpu(fw_hdr->len); 3747 3748 /* Advance to next fragment */ 3749 fw_hdr = (struct tg3_firmware_hdr *) 3750 ((void *)fw_hdr + be32_to_cpu(fw_hdr->len)); 3751 } while (total_len > 0); 3752 3753 err = 0; 3754 3755out: 3756 return err; 3757} 3758 3759/* tp->lock is held. */ 3760static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc) 3761{ 3762 int i; 3763 const int iters = 5; 3764 3765 tw32(cpu_base + CPU_STATE, 0xffffffff); 3766 tw32_f(cpu_base + CPU_PC, pc); 3767 3768 for (i = 0; i < iters; i++) { 3769 if (tr32(cpu_base + CPU_PC) == pc) 3770 break; 3771 tw32(cpu_base + CPU_STATE, 0xffffffff); 3772 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3773 tw32_f(cpu_base + CPU_PC, pc); 3774 udelay(1000); 3775 } 3776 3777 return (i == iters) ? -EBUSY : 0; 3778} 3779 3780/* tp->lock is held. */ 3781static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3782{ 3783 const struct tg3_firmware_hdr *fw_hdr; 3784 int err; 3785 3786 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3787 3788 /* Firmware blob starts with version numbers, followed by 3789 start address and length. We are setting complete length. 3790 length = end_address_of_bss - start_address_of_text. 3791 Remainder is the blob to be loaded contiguously 3792 from start address. */ 3793 3794 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3795 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3796 fw_hdr); 3797 if (err) 3798 return err; 3799 3800 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3801 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3802 fw_hdr); 3803 if (err) 3804 return err; 3805 3806 /* Now startup only the RX cpu. */ 3807 err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE, 3808 be32_to_cpu(fw_hdr->base_addr)); 3809 if (err) { 3810 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3811 "should be %08x\n", __func__, 3812 tr32(RX_CPU_BASE + CPU_PC), 3813 be32_to_cpu(fw_hdr->base_addr)); 3814 return -ENODEV; 3815 } 3816 3817 tg3_rxcpu_resume(tp); 3818 3819 return 0; 3820} 3821 3822static int tg3_validate_rxcpu_state(struct tg3 *tp) 3823{ 3824 const int iters = 1000; 3825 int i; 3826 u32 val; 3827 3828 /* Wait for boot code to complete initialization and enter service 3829 * loop. It is then safe to download service patches 3830 */ 3831 for (i = 0; i < iters; i++) { 3832 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP) 3833 break; 3834 3835 udelay(10); 3836 } 3837 3838 if (i == iters) { 3839 netdev_err(tp->dev, "Boot code not ready for service patches\n"); 3840 return -EBUSY; 3841 } 3842 3843 val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE); 3844 if (val & 0xff) { 3845 netdev_warn(tp->dev, 3846 "Other patches exist. Not downloading EEE patch\n"); 3847 return -EEXIST; 3848 } 3849 3850 return 0; 3851} 3852 3853/* tp->lock is held. */ 3854static void tg3_load_57766_firmware(struct tg3 *tp) 3855{ 3856 struct tg3_firmware_hdr *fw_hdr; 3857 3858 if (!tg3_flag(tp, NO_NVRAM)) 3859 return; 3860 3861 if (tg3_validate_rxcpu_state(tp)) 3862 return; 3863 3864 if (!tp->fw) 3865 return; 3866 3867 /* This firmware blob has a different format than older firmware 3868 * releases as given below. The main difference is we have fragmented 3869 * data to be written to non-contiguous locations. 3870 * 3871 * In the beginning we have a firmware header identical to other 3872 * firmware which consists of version, base addr and length. The length 3873 * here is unused and set to 0xffffffff. 3874 * 3875 * This is followed by a series of firmware fragments which are 3876 * individually identical to previous firmware. i.e. they have the 3877 * firmware header and followed by data for that fragment. The version 3878 * field of the individual fragment header is unused. 3879 */ 3880 3881 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3882 if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR) 3883 return; 3884 3885 if (tg3_rxcpu_pause(tp)) 3886 return; 3887 3888 /* tg3_load_firmware_cpu() will always succeed for the 57766 */ 3889 tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr); 3890 3891 tg3_rxcpu_resume(tp); 3892} 3893 3894/* tp->lock is held. */ 3895static int tg3_load_tso_firmware(struct tg3 *tp) 3896{ 3897 const struct tg3_firmware_hdr *fw_hdr; 3898 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3899 int err; 3900 3901 if (!tg3_flag(tp, FW_TSO)) 3902 return 0; 3903 3904 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3905 3906 /* Firmware blob starts with version numbers, followed by 3907 start address and length. We are setting complete length. 3908 length = end_address_of_bss - start_address_of_text. 3909 Remainder is the blob to be loaded contiguously 3910 from start address. */ 3911 3912 cpu_scratch_size = tp->fw_len; 3913 3914 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 3915 cpu_base = RX_CPU_BASE; 3916 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3917 } else { 3918 cpu_base = TX_CPU_BASE; 3919 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3920 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3921 } 3922 3923 err = tg3_load_firmware_cpu(tp, cpu_base, 3924 cpu_scratch_base, cpu_scratch_size, 3925 fw_hdr); 3926 if (err) 3927 return err; 3928 3929 /* Now startup the cpu. */ 3930 err = tg3_pause_cpu_and_set_pc(tp, cpu_base, 3931 be32_to_cpu(fw_hdr->base_addr)); 3932 if (err) { 3933 netdev_err(tp->dev, 3934 "%s fails to set CPU PC, is %08x should be %08x\n", 3935 __func__, tr32(cpu_base + CPU_PC), 3936 be32_to_cpu(fw_hdr->base_addr)); 3937 return -ENODEV; 3938 } 3939 3940 tg3_resume_cpu(tp, cpu_base); 3941 return 0; 3942} 3943 3944/* tp->lock is held. */ 3945static void __tg3_set_one_mac_addr(struct tg3 *tp, const u8 *mac_addr, 3946 int index) 3947{ 3948 u32 addr_high, addr_low; 3949 3950 addr_high = ((mac_addr[0] << 8) | mac_addr[1]); 3951 addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) | 3952 (mac_addr[4] << 8) | mac_addr[5]); 3953 3954 if (index < 4) { 3955 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high); 3956 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low); 3957 } else { 3958 index -= 4; 3959 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high); 3960 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low); 3961 } 3962} 3963 3964/* tp->lock is held. */ 3965static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) 3966{ 3967 u32 addr_high; 3968 int i; 3969 3970 for (i = 0; i < 4; i++) { 3971 if (i == 1 && skip_mac_1) 3972 continue; 3973 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3974 } 3975 3976 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 3977 tg3_asic_rev(tp) == ASIC_REV_5704) { 3978 for (i = 4; i < 16; i++) 3979 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3980 } 3981 3982 addr_high = (tp->dev->dev_addr[0] + 3983 tp->dev->dev_addr[1] + 3984 tp->dev->dev_addr[2] + 3985 tp->dev->dev_addr[3] + 3986 tp->dev->dev_addr[4] + 3987 tp->dev->dev_addr[5]) & 3988 TX_BACKOFF_SEED_MASK; 3989 tw32(MAC_TX_BACKOFF_SEED, addr_high); 3990} 3991 3992static void tg3_enable_register_access(struct tg3 *tp) 3993{ 3994 /* 3995 * Make sure register accesses (indirect or otherwise) will function 3996 * correctly. 3997 */ 3998 pci_write_config_dword(tp->pdev, 3999 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 4000} 4001 4002static int tg3_power_up(struct tg3 *tp) 4003{ 4004 int err; 4005 4006 tg3_enable_register_access(tp); 4007 4008 err = pci_set_power_state(tp->pdev, PCI_D0); 4009 if (!err) { 4010 /* Switch out of Vaux if it is a NIC */ 4011 tg3_pwrsrc_switch_to_vmain(tp); 4012 } else { 4013 netdev_err(tp->dev, "Transition to D0 failed\n"); 4014 } 4015 4016 return err; 4017} 4018 4019static int tg3_setup_phy(struct tg3 *, bool); 4020 4021static int tg3_power_down_prepare(struct tg3 *tp) 4022{ 4023 u32 misc_host_ctrl; 4024 bool device_should_wake, do_low_power; 4025 4026 tg3_enable_register_access(tp); 4027 4028 /* Restore the CLKREQ setting. */ 4029 if (tg3_flag(tp, CLKREQ_BUG)) 4030 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 4031 PCI_EXP_LNKCTL_CLKREQ_EN); 4032 4033 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 4034 tw32(TG3PCI_MISC_HOST_CTRL, 4035 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 4036 4037 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 4038 tg3_flag(tp, WOL_ENABLE); 4039 4040 if (tg3_flag(tp, USE_PHYLIB)) { 4041 do_low_power = false; 4042 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 4043 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4044 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, }; 4045 struct phy_device *phydev; 4046 u32 phyid; 4047 4048 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 4049 4050 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4051 4052 tp->link_config.speed = phydev->speed; 4053 tp->link_config.duplex = phydev->duplex; 4054 tp->link_config.autoneg = phydev->autoneg; 4055 ethtool_convert_link_mode_to_legacy_u32( 4056 &tp->link_config.advertising, 4057 phydev->advertising); 4058 4059 linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising); 4060 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, 4061 advertising); 4062 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 4063 advertising); 4064 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, 4065 advertising); 4066 4067 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 4068 if (tg3_flag(tp, WOL_SPEED_100MB)) { 4069 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 4070 advertising); 4071 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 4072 advertising); 4073 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 4074 advertising); 4075 } else { 4076 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, 4077 advertising); 4078 } 4079 } 4080 4081 linkmode_copy(phydev->advertising, advertising); 4082 phy_start_aneg(phydev); 4083 4084 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 4085 if (phyid != PHY_ID_BCMAC131) { 4086 phyid &= PHY_BCM_OUI_MASK; 4087 if (phyid == PHY_BCM_OUI_1 || 4088 phyid == PHY_BCM_OUI_2 || 4089 phyid == PHY_BCM_OUI_3) 4090 do_low_power = true; 4091 } 4092 } 4093 } else { 4094 do_low_power = true; 4095 4096 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 4097 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4098 4099 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 4100 tg3_setup_phy(tp, false); 4101 } 4102 4103 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 4104 u32 val; 4105 4106 val = tr32(GRC_VCPU_EXT_CTRL); 4107 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 4108 } else if (!tg3_flag(tp, ENABLE_ASF)) { 4109 int i; 4110 u32 val; 4111 4112 for (i = 0; i < 200; i++) { 4113 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 4114 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 4115 break; 4116 msleep(1); 4117 } 4118 } 4119 if (tg3_flag(tp, WOL_CAP)) 4120 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 4121 WOL_DRV_STATE_SHUTDOWN | 4122 WOL_DRV_WOL | 4123 WOL_SET_MAGIC_PKT); 4124 4125 if (device_should_wake) { 4126 u32 mac_mode; 4127 4128 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 4129 if (do_low_power && 4130 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 4131 tg3_phy_auxctl_write(tp, 4132 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 4133 MII_TG3_AUXCTL_PCTL_WOL_EN | 4134 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 4135 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 4136 udelay(40); 4137 } 4138 4139 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4140 mac_mode = MAC_MODE_PORT_MODE_GMII; 4141 else if (tp->phy_flags & 4142 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) { 4143 if (tp->link_config.active_speed == SPEED_1000) 4144 mac_mode = MAC_MODE_PORT_MODE_GMII; 4145 else 4146 mac_mode = MAC_MODE_PORT_MODE_MII; 4147 } else 4148 mac_mode = MAC_MODE_PORT_MODE_MII; 4149 4150 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 4151 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 4152 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 4153 SPEED_100 : SPEED_10; 4154 if (tg3_5700_link_polarity(tp, speed)) 4155 mac_mode |= MAC_MODE_LINK_POLARITY; 4156 else 4157 mac_mode &= ~MAC_MODE_LINK_POLARITY; 4158 } 4159 } else { 4160 mac_mode = MAC_MODE_PORT_MODE_TBI; 4161 } 4162 4163 if (!tg3_flag(tp, 5750_PLUS)) 4164 tw32(MAC_LED_CTRL, tp->led_ctrl); 4165 4166 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 4167 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 4168 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 4169 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 4170 4171 if (tg3_flag(tp, ENABLE_APE)) 4172 mac_mode |= MAC_MODE_APE_TX_EN | 4173 MAC_MODE_APE_RX_EN | 4174 MAC_MODE_TDE_ENABLE; 4175 4176 tw32_f(MAC_MODE, mac_mode); 4177 udelay(100); 4178 4179 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 4180 udelay(10); 4181 } 4182 4183 if (!tg3_flag(tp, WOL_SPEED_100MB) && 4184 (tg3_asic_rev(tp) == ASIC_REV_5700 || 4185 tg3_asic_rev(tp) == ASIC_REV_5701)) { 4186 u32 base_val; 4187 4188 base_val = tp->pci_clock_ctrl; 4189 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 4190 CLOCK_CTRL_TXCLK_DISABLE); 4191 4192 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 4193 CLOCK_CTRL_PWRDOWN_PLL133, 40); 4194 } else if (tg3_flag(tp, 5780_CLASS) || 4195 tg3_flag(tp, CPMU_PRESENT) || 4196 tg3_asic_rev(tp) == ASIC_REV_5906) { 4197 /* do nothing */ 4198 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 4199 u32 newbits1, newbits2; 4200 4201 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4202 tg3_asic_rev(tp) == ASIC_REV_5701) { 4203 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 4204 CLOCK_CTRL_TXCLK_DISABLE | 4205 CLOCK_CTRL_ALTCLK); 4206 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4207 } else if (tg3_flag(tp, 5705_PLUS)) { 4208 newbits1 = CLOCK_CTRL_625_CORE; 4209 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 4210 } else { 4211 newbits1 = CLOCK_CTRL_ALTCLK; 4212 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4213 } 4214 4215 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 4216 40); 4217 4218 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 4219 40); 4220 4221 if (!tg3_flag(tp, 5705_PLUS)) { 4222 u32 newbits3; 4223 4224 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4225 tg3_asic_rev(tp) == ASIC_REV_5701) { 4226 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 4227 CLOCK_CTRL_TXCLK_DISABLE | 4228 CLOCK_CTRL_44MHZ_CORE); 4229 } else { 4230 newbits3 = CLOCK_CTRL_44MHZ_CORE; 4231 } 4232 4233 tw32_wait_f(TG3PCI_CLOCK_CTRL, 4234 tp->pci_clock_ctrl | newbits3, 40); 4235 } 4236 } 4237 4238 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 4239 tg3_power_down_phy(tp, do_low_power); 4240 4241 tg3_frob_aux_power(tp, true); 4242 4243 /* Workaround for unstable PLL clock */ 4244 if ((!tg3_flag(tp, IS_SSB_CORE)) && 4245 ((tg3_chip_rev(tp) == CHIPREV_5750_AX) || 4246 (tg3_chip_rev(tp) == CHIPREV_5750_BX))) { 4247 u32 val = tr32(0x7d00); 4248 4249 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 4250 tw32(0x7d00, val); 4251 if (!tg3_flag(tp, ENABLE_ASF)) { 4252 int err; 4253 4254 err = tg3_nvram_lock(tp); 4255 tg3_halt_cpu(tp, RX_CPU_BASE); 4256 if (!err) 4257 tg3_nvram_unlock(tp); 4258 } 4259 } 4260 4261 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 4262 4263 tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN); 4264 4265 return 0; 4266} 4267 4268static void tg3_power_down(struct tg3 *tp) 4269{ 4270 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 4271 pci_set_power_state(tp->pdev, PCI_D3hot); 4272} 4273 4274static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex) 4275{ 4276 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 4277 case MII_TG3_AUX_STAT_10HALF: 4278 *speed = SPEED_10; 4279 *duplex = DUPLEX_HALF; 4280 break; 4281 4282 case MII_TG3_AUX_STAT_10FULL: 4283 *speed = SPEED_10; 4284 *duplex = DUPLEX_FULL; 4285 break; 4286 4287 case MII_TG3_AUX_STAT_100HALF: 4288 *speed = SPEED_100; 4289 *duplex = DUPLEX_HALF; 4290 break; 4291 4292 case MII_TG3_AUX_STAT_100FULL: 4293 *speed = SPEED_100; 4294 *duplex = DUPLEX_FULL; 4295 break; 4296 4297 case MII_TG3_AUX_STAT_1000HALF: 4298 *speed = SPEED_1000; 4299 *duplex = DUPLEX_HALF; 4300 break; 4301 4302 case MII_TG3_AUX_STAT_1000FULL: 4303 *speed = SPEED_1000; 4304 *duplex = DUPLEX_FULL; 4305 break; 4306 4307 default: 4308 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4309 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 4310 SPEED_10; 4311 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 4312 DUPLEX_HALF; 4313 break; 4314 } 4315 *speed = SPEED_UNKNOWN; 4316 *duplex = DUPLEX_UNKNOWN; 4317 break; 4318 } 4319} 4320 4321static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 4322{ 4323 int err = 0; 4324 u32 val, new_adv; 4325 4326 new_adv = ADVERTISE_CSMA; 4327 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 4328 new_adv |= mii_advertise_flowctrl(flowctrl); 4329 4330 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 4331 if (err) 4332 goto done; 4333 4334 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4335 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 4336 4337 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4338 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) 4339 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4340 4341 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 4342 if (err) 4343 goto done; 4344 } 4345 4346 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4347 goto done; 4348 4349 tw32(TG3_CPMU_EEE_MODE, 4350 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 4351 4352 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 4353 if (!err) { 4354 u32 err2; 4355 4356 val = 0; 4357 /* Advertise 100-BaseTX EEE ability */ 4358 if (advertise & ADVERTISED_100baseT_Full) 4359 val |= MDIO_AN_EEE_ADV_100TX; 4360 /* Advertise 1000-BaseT EEE ability */ 4361 if (advertise & ADVERTISED_1000baseT_Full) 4362 val |= MDIO_AN_EEE_ADV_1000T; 4363 4364 if (!tp->eee.eee_enabled) { 4365 val = 0; 4366 tp->eee.advertised = 0; 4367 } else { 4368 tp->eee.advertised = advertise & 4369 (ADVERTISED_100baseT_Full | 4370 ADVERTISED_1000baseT_Full); 4371 } 4372 4373 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 4374 if (err) 4375 val = 0; 4376 4377 switch (tg3_asic_rev(tp)) { 4378 case ASIC_REV_5717: 4379 case ASIC_REV_57765: 4380 case ASIC_REV_57766: 4381 case ASIC_REV_5719: 4382 /* If we advertised any eee advertisements above... */ 4383 if (val) 4384 val = MII_TG3_DSP_TAP26_ALNOKO | 4385 MII_TG3_DSP_TAP26_RMRXSTO | 4386 MII_TG3_DSP_TAP26_OPCSINPT; 4387 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 4388 fallthrough; 4389 case ASIC_REV_5720: 4390 case ASIC_REV_5762: 4391 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 4392 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 4393 MII_TG3_DSP_CH34TP2_HIBW01); 4394 } 4395 4396 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false); 4397 if (!err) 4398 err = err2; 4399 } 4400 4401done: 4402 return err; 4403} 4404 4405static void tg3_phy_copper_begin(struct tg3 *tp) 4406{ 4407 if (tp->link_config.autoneg == AUTONEG_ENABLE || 4408 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4409 u32 adv, fc; 4410 4411 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4412 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4413 adv = ADVERTISED_10baseT_Half | 4414 ADVERTISED_10baseT_Full; 4415 if (tg3_flag(tp, WOL_SPEED_100MB)) 4416 adv |= ADVERTISED_100baseT_Half | 4417 ADVERTISED_100baseT_Full; 4418 if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) { 4419 if (!(tp->phy_flags & 4420 TG3_PHYFLG_DISABLE_1G_HD_ADV)) 4421 adv |= ADVERTISED_1000baseT_Half; 4422 adv |= ADVERTISED_1000baseT_Full; 4423 } 4424 4425 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 4426 } else { 4427 adv = tp->link_config.advertising; 4428 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 4429 adv &= ~(ADVERTISED_1000baseT_Half | 4430 ADVERTISED_1000baseT_Full); 4431 4432 fc = tp->link_config.flowctrl; 4433 } 4434 4435 tg3_phy_autoneg_cfg(tp, adv, fc); 4436 4437 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4438 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4439 /* Normally during power down we want to autonegotiate 4440 * the lowest possible speed for WOL. However, to avoid 4441 * link flap, we leave it untouched. 4442 */ 4443 return; 4444 } 4445 4446 tg3_writephy(tp, MII_BMCR, 4447 BMCR_ANENABLE | BMCR_ANRESTART); 4448 } else { 4449 int i; 4450 u32 bmcr, orig_bmcr; 4451 4452 tp->link_config.active_speed = tp->link_config.speed; 4453 tp->link_config.active_duplex = tp->link_config.duplex; 4454 4455 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 4456 /* With autoneg disabled, 5715 only links up when the 4457 * advertisement register has the configured speed 4458 * enabled. 4459 */ 4460 tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL); 4461 } 4462 4463 bmcr = 0; 4464 switch (tp->link_config.speed) { 4465 default: 4466 case SPEED_10: 4467 break; 4468 4469 case SPEED_100: 4470 bmcr |= BMCR_SPEED100; 4471 break; 4472 4473 case SPEED_1000: 4474 bmcr |= BMCR_SPEED1000; 4475 break; 4476 } 4477 4478 if (tp->link_config.duplex == DUPLEX_FULL) 4479 bmcr |= BMCR_FULLDPLX; 4480 4481 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 4482 (bmcr != orig_bmcr)) { 4483 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 4484 for (i = 0; i < 1500; i++) { 4485 u32 tmp; 4486 4487 udelay(10); 4488 if (tg3_readphy(tp, MII_BMSR, &tmp) || 4489 tg3_readphy(tp, MII_BMSR, &tmp)) 4490 continue; 4491 if (!(tmp & BMSR_LSTATUS)) { 4492 udelay(40); 4493 break; 4494 } 4495 } 4496 tg3_writephy(tp, MII_BMCR, bmcr); 4497 udelay(40); 4498 } 4499 } 4500} 4501 4502static int tg3_phy_pull_config(struct tg3 *tp) 4503{ 4504 int err; 4505 u32 val; 4506 4507 err = tg3_readphy(tp, MII_BMCR, &val); 4508 if (err) 4509 goto done; 4510 4511 if (!(val & BMCR_ANENABLE)) { 4512 tp->link_config.autoneg = AUTONEG_DISABLE; 4513 tp->link_config.advertising = 0; 4514 tg3_flag_clear(tp, PAUSE_AUTONEG); 4515 4516 err = -EIO; 4517 4518 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) { 4519 case 0: 4520 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4521 goto done; 4522 4523 tp->link_config.speed = SPEED_10; 4524 break; 4525 case BMCR_SPEED100: 4526 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4527 goto done; 4528 4529 tp->link_config.speed = SPEED_100; 4530 break; 4531 case BMCR_SPEED1000: 4532 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4533 tp->link_config.speed = SPEED_1000; 4534 break; 4535 } 4536 fallthrough; 4537 default: 4538 goto done; 4539 } 4540 4541 if (val & BMCR_FULLDPLX) 4542 tp->link_config.duplex = DUPLEX_FULL; 4543 else 4544 tp->link_config.duplex = DUPLEX_HALF; 4545 4546 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX; 4547 4548 err = 0; 4549 goto done; 4550 } 4551 4552 tp->link_config.autoneg = AUTONEG_ENABLE; 4553 tp->link_config.advertising = ADVERTISED_Autoneg; 4554 tg3_flag_set(tp, PAUSE_AUTONEG); 4555 4556 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4557 u32 adv; 4558 4559 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4560 if (err) 4561 goto done; 4562 4563 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL); 4564 tp->link_config.advertising |= adv | ADVERTISED_TP; 4565 4566 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val); 4567 } else { 4568 tp->link_config.advertising |= ADVERTISED_FIBRE; 4569 } 4570 4571 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4572 u32 adv; 4573 4574 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4575 err = tg3_readphy(tp, MII_CTRL1000, &val); 4576 if (err) 4577 goto done; 4578 4579 adv = mii_ctrl1000_to_ethtool_adv_t(val); 4580 } else { 4581 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4582 if (err) 4583 goto done; 4584 4585 adv = tg3_decode_flowctrl_1000X(val); 4586 tp->link_config.flowctrl = adv; 4587 4588 val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL); 4589 adv = mii_adv_to_ethtool_adv_x(val); 4590 } 4591 4592 tp->link_config.advertising |= adv; 4593 } 4594 4595done: 4596 return err; 4597} 4598 4599static int tg3_init_5401phy_dsp(struct tg3 *tp) 4600{ 4601 int err; 4602 4603 /* Turn off tap power management. */ 4604 /* Set Extended packet length bit */ 4605 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 4606 4607 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 4608 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 4609 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 4610 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 4611 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 4612 4613 udelay(40); 4614 4615 return err; 4616} 4617 4618static bool tg3_phy_eee_config_ok(struct tg3 *tp) 4619{ 4620 struct ethtool_eee eee; 4621 4622 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4623 return true; 4624 4625 tg3_eee_pull_config(tp, &eee); 4626 4627 if (tp->eee.eee_enabled) { 4628 if (tp->eee.advertised != eee.advertised || 4629 tp->eee.tx_lpi_timer != eee.tx_lpi_timer || 4630 tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled) 4631 return false; 4632 } else { 4633 /* EEE is disabled but we're advertising */ 4634 if (eee.advertised) 4635 return false; 4636 } 4637 4638 return true; 4639} 4640 4641static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 4642{ 4643 u32 advmsk, tgtadv, advertising; 4644 4645 advertising = tp->link_config.advertising; 4646 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4647 4648 advmsk = ADVERTISE_ALL; 4649 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4650 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4651 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4652 } 4653 4654 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4655 return false; 4656 4657 if ((*lcladv & advmsk) != tgtadv) 4658 return false; 4659 4660 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4661 u32 tg3_ctrl; 4662 4663 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4664 4665 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4666 return false; 4667 4668 if (tgtadv && 4669 (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4670 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) { 4671 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4672 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4673 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4674 } else { 4675 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4676 } 4677 4678 if (tg3_ctrl != tgtadv) 4679 return false; 4680 } 4681 4682 return true; 4683} 4684 4685static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4686{ 4687 u32 lpeth = 0; 4688 4689 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4690 u32 val; 4691 4692 if (tg3_readphy(tp, MII_STAT1000, &val)) 4693 return false; 4694 4695 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4696 } 4697 4698 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4699 return false; 4700 4701 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4702 tp->link_config.rmt_adv = lpeth; 4703 4704 return true; 4705} 4706 4707static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up) 4708{ 4709 if (curr_link_up != tp->link_up) { 4710 if (curr_link_up) { 4711 netif_carrier_on(tp->dev); 4712 } else { 4713 netif_carrier_off(tp->dev); 4714 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4715 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4716 } 4717 4718 tg3_link_report(tp); 4719 return true; 4720 } 4721 4722 return false; 4723} 4724 4725static void tg3_clear_mac_status(struct tg3 *tp) 4726{ 4727 tw32(MAC_EVENT, 0); 4728 4729 tw32_f(MAC_STATUS, 4730 MAC_STATUS_SYNC_CHANGED | 4731 MAC_STATUS_CFG_CHANGED | 4732 MAC_STATUS_MI_COMPLETION | 4733 MAC_STATUS_LNKSTATE_CHANGED); 4734 udelay(40); 4735} 4736 4737static void tg3_setup_eee(struct tg3 *tp) 4738{ 4739 u32 val; 4740 4741 val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 4742 TG3_CPMU_EEE_LNKIDL_UART_IDL; 4743 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 4744 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT; 4745 4746 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val); 4747 4748 tw32_f(TG3_CPMU_EEE_CTRL, 4749 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 4750 4751 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 4752 (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) | 4753 TG3_CPMU_EEEMD_LPI_IN_RX | 4754 TG3_CPMU_EEEMD_EEE_ENABLE; 4755 4756 if (tg3_asic_rev(tp) != ASIC_REV_5717) 4757 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 4758 4759 if (tg3_flag(tp, ENABLE_APE)) 4760 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 4761 4762 tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0); 4763 4764 tw32_f(TG3_CPMU_EEE_DBTMR1, 4765 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 4766 (tp->eee.tx_lpi_timer & 0xffff)); 4767 4768 tw32_f(TG3_CPMU_EEE_DBTMR2, 4769 TG3_CPMU_DBTMR2_APE_TX_2047US | 4770 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 4771} 4772 4773static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset) 4774{ 4775 bool current_link_up; 4776 u32 bmsr, val; 4777 u32 lcl_adv, rmt_adv; 4778 u32 current_speed; 4779 u8 current_duplex; 4780 int i, err; 4781 4782 tg3_clear_mac_status(tp); 4783 4784 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4785 tw32_f(MAC_MI_MODE, 4786 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4787 udelay(80); 4788 } 4789 4790 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4791 4792 /* Some third-party PHYs need to be reset on link going 4793 * down. 4794 */ 4795 if ((tg3_asic_rev(tp) == ASIC_REV_5703 || 4796 tg3_asic_rev(tp) == ASIC_REV_5704 || 4797 tg3_asic_rev(tp) == ASIC_REV_5705) && 4798 tp->link_up) { 4799 tg3_readphy(tp, MII_BMSR, &bmsr); 4800 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4801 !(bmsr & BMSR_LSTATUS)) 4802 force_reset = true; 4803 } 4804 if (force_reset) 4805 tg3_phy_reset(tp); 4806 4807 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4808 tg3_readphy(tp, MII_BMSR, &bmsr); 4809 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4810 !tg3_flag(tp, INIT_COMPLETE)) 4811 bmsr = 0; 4812 4813 if (!(bmsr & BMSR_LSTATUS)) { 4814 err = tg3_init_5401phy_dsp(tp); 4815 if (err) 4816 return err; 4817 4818 tg3_readphy(tp, MII_BMSR, &bmsr); 4819 for (i = 0; i < 1000; i++) { 4820 udelay(10); 4821 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4822 (bmsr & BMSR_LSTATUS)) { 4823 udelay(40); 4824 break; 4825 } 4826 } 4827 4828 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4829 TG3_PHY_REV_BCM5401_B0 && 4830 !(bmsr & BMSR_LSTATUS) && 4831 tp->link_config.active_speed == SPEED_1000) { 4832 err = tg3_phy_reset(tp); 4833 if (!err) 4834 err = tg3_init_5401phy_dsp(tp); 4835 if (err) 4836 return err; 4837 } 4838 } 4839 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4840 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) { 4841 /* 5701 {A0,B0} CRC bug workaround */ 4842 tg3_writephy(tp, 0x15, 0x0a75); 4843 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4844 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4845 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4846 } 4847 4848 /* Clear pending interrupts... */ 4849 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4850 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4851 4852 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4853 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4854 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4855 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4856 4857 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4858 tg3_asic_rev(tp) == ASIC_REV_5701) { 4859 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4860 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4861 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4862 else 4863 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4864 } 4865 4866 current_link_up = false; 4867 current_speed = SPEED_UNKNOWN; 4868 current_duplex = DUPLEX_UNKNOWN; 4869 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4870 tp->link_config.rmt_adv = 0; 4871 4872 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4873 err = tg3_phy_auxctl_read(tp, 4874 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4875 &val); 4876 if (!err && !(val & (1 << 10))) { 4877 tg3_phy_auxctl_write(tp, 4878 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4879 val | (1 << 10)); 4880 goto relink; 4881 } 4882 } 4883 4884 bmsr = 0; 4885 for (i = 0; i < 100; i++) { 4886 tg3_readphy(tp, MII_BMSR, &bmsr); 4887 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4888 (bmsr & BMSR_LSTATUS)) 4889 break; 4890 udelay(40); 4891 } 4892 4893 if (bmsr & BMSR_LSTATUS) { 4894 u32 aux_stat, bmcr; 4895 4896 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4897 for (i = 0; i < 2000; i++) { 4898 udelay(10); 4899 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4900 aux_stat) 4901 break; 4902 } 4903 4904 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4905 ¤t_speed, 4906 ¤t_duplex); 4907 4908 bmcr = 0; 4909 for (i = 0; i < 200; i++) { 4910 tg3_readphy(tp, MII_BMCR, &bmcr); 4911 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4912 continue; 4913 if (bmcr && bmcr != 0x7fff) 4914 break; 4915 udelay(10); 4916 } 4917 4918 lcl_adv = 0; 4919 rmt_adv = 0; 4920 4921 tp->link_config.active_speed = current_speed; 4922 tp->link_config.active_duplex = current_duplex; 4923 4924 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4925 bool eee_config_ok = tg3_phy_eee_config_ok(tp); 4926 4927 if ((bmcr & BMCR_ANENABLE) && 4928 eee_config_ok && 4929 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4930 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4931 current_link_up = true; 4932 4933 /* EEE settings changes take effect only after a phy 4934 * reset. If we have skipped a reset due to Link Flap 4935 * Avoidance being enabled, do it now. 4936 */ 4937 if (!eee_config_ok && 4938 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 4939 !force_reset) { 4940 tg3_setup_eee(tp); 4941 tg3_phy_reset(tp); 4942 } 4943 } else { 4944 if (!(bmcr & BMCR_ANENABLE) && 4945 tp->link_config.speed == current_speed && 4946 tp->link_config.duplex == current_duplex) { 4947 current_link_up = true; 4948 } 4949 } 4950 4951 if (current_link_up && 4952 tp->link_config.active_duplex == DUPLEX_FULL) { 4953 u32 reg, bit; 4954 4955 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4956 reg = MII_TG3_FET_GEN_STAT; 4957 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4958 } else { 4959 reg = MII_TG3_EXT_STAT; 4960 bit = MII_TG3_EXT_STAT_MDIX; 4961 } 4962 4963 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4964 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4965 4966 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4967 } 4968 } 4969 4970relink: 4971 if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4972 tg3_phy_copper_begin(tp); 4973 4974 if (tg3_flag(tp, ROBOSWITCH)) { 4975 current_link_up = true; 4976 /* FIXME: when BCM5325 switch is used use 100 MBit/s */ 4977 current_speed = SPEED_1000; 4978 current_duplex = DUPLEX_FULL; 4979 tp->link_config.active_speed = current_speed; 4980 tp->link_config.active_duplex = current_duplex; 4981 } 4982 4983 tg3_readphy(tp, MII_BMSR, &bmsr); 4984 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4985 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4986 current_link_up = true; 4987 } 4988 4989 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4990 if (current_link_up) { 4991 if (tp->link_config.active_speed == SPEED_100 || 4992 tp->link_config.active_speed == SPEED_10) 4993 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4994 else 4995 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4996 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 4997 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4998 else 4999 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5000 5001 /* In order for the 5750 core in BCM4785 chip to work properly 5002 * in RGMII mode, the Led Control Register must be set up. 5003 */ 5004 if (tg3_flag(tp, RGMII_MODE)) { 5005 u32 led_ctrl = tr32(MAC_LED_CTRL); 5006 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON); 5007 5008 if (tp->link_config.active_speed == SPEED_10) 5009 led_ctrl |= LED_CTRL_LNKLED_OVERRIDE; 5010 else if (tp->link_config.active_speed == SPEED_100) 5011 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5012 LED_CTRL_100MBPS_ON); 5013 else if (tp->link_config.active_speed == SPEED_1000) 5014 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5015 LED_CTRL_1000MBPS_ON); 5016 5017 tw32(MAC_LED_CTRL, led_ctrl); 5018 udelay(40); 5019 } 5020 5021 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5022 if (tp->link_config.active_duplex == DUPLEX_HALF) 5023 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5024 5025 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 5026 if (current_link_up && 5027 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 5028 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 5029 else 5030 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 5031 } 5032 5033 /* ??? Without this setting Netgear GA302T PHY does not 5034 * ??? send/receive packets... 5035 */ 5036 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 5037 tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) { 5038 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 5039 tw32_f(MAC_MI_MODE, tp->mi_mode); 5040 udelay(80); 5041 } 5042 5043 tw32_f(MAC_MODE, tp->mac_mode); 5044 udelay(40); 5045 5046 tg3_phy_eee_adjust(tp, current_link_up); 5047 5048 if (tg3_flag(tp, USE_LINKCHG_REG)) { 5049 /* Polled via timer. */ 5050 tw32_f(MAC_EVENT, 0); 5051 } else { 5052 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5053 } 5054 udelay(40); 5055 5056 if (tg3_asic_rev(tp) == ASIC_REV_5700 && 5057 current_link_up && 5058 tp->link_config.active_speed == SPEED_1000 && 5059 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 5060 udelay(120); 5061 tw32_f(MAC_STATUS, 5062 (MAC_STATUS_SYNC_CHANGED | 5063 MAC_STATUS_CFG_CHANGED)); 5064 udelay(40); 5065 tg3_write_mem(tp, 5066 NIC_SRAM_FIRMWARE_MBOX, 5067 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 5068 } 5069 5070 /* Prevent send BD corruption. */ 5071 if (tg3_flag(tp, CLKREQ_BUG)) { 5072 if (tp->link_config.active_speed == SPEED_100 || 5073 tp->link_config.active_speed == SPEED_10) 5074 pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL, 5075 PCI_EXP_LNKCTL_CLKREQ_EN); 5076 else 5077 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 5078 PCI_EXP_LNKCTL_CLKREQ_EN); 5079 } 5080 5081 tg3_test_and_report_link_chg(tp, current_link_up); 5082 5083 return 0; 5084} 5085 5086struct tg3_fiber_aneginfo { 5087 int state; 5088#define ANEG_STATE_UNKNOWN 0 5089#define ANEG_STATE_AN_ENABLE 1 5090#define ANEG_STATE_RESTART_INIT 2 5091#define ANEG_STATE_RESTART 3 5092#define ANEG_STATE_DISABLE_LINK_OK 4 5093#define ANEG_STATE_ABILITY_DETECT_INIT 5 5094#define ANEG_STATE_ABILITY_DETECT 6 5095#define ANEG_STATE_ACK_DETECT_INIT 7 5096#define ANEG_STATE_ACK_DETECT 8 5097#define ANEG_STATE_COMPLETE_ACK_INIT 9 5098#define ANEG_STATE_COMPLETE_ACK 10 5099#define ANEG_STATE_IDLE_DETECT_INIT 11 5100#define ANEG_STATE_IDLE_DETECT 12 5101#define ANEG_STATE_LINK_OK 13 5102#define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 5103#define ANEG_STATE_NEXT_PAGE_WAIT 15 5104 5105 u32 flags; 5106#define MR_AN_ENABLE 0x00000001 5107#define MR_RESTART_AN 0x00000002 5108#define MR_AN_COMPLETE 0x00000004 5109#define MR_PAGE_RX 0x00000008 5110#define MR_NP_LOADED 0x00000010 5111#define MR_TOGGLE_TX 0x00000020 5112#define MR_LP_ADV_FULL_DUPLEX 0x00000040 5113#define MR_LP_ADV_HALF_DUPLEX 0x00000080 5114#define MR_LP_ADV_SYM_PAUSE 0x00000100 5115#define MR_LP_ADV_ASYM_PAUSE 0x00000200 5116#define MR_LP_ADV_REMOTE_FAULT1 0x00000400 5117#define MR_LP_ADV_REMOTE_FAULT2 0x00000800 5118#define MR_LP_ADV_NEXT_PAGE 0x00001000 5119#define MR_TOGGLE_RX 0x00002000 5120#define MR_NP_RX 0x00004000 5121 5122#define MR_LINK_OK 0x80000000 5123 5124 unsigned long link_time, cur_time; 5125 5126 u32 ability_match_cfg; 5127 int ability_match_count; 5128 5129 char ability_match, idle_match, ack_match; 5130 5131 u32 txconfig, rxconfig; 5132#define ANEG_CFG_NP 0x00000080 5133#define ANEG_CFG_ACK 0x00000040 5134#define ANEG_CFG_RF2 0x00000020 5135#define ANEG_CFG_RF1 0x00000010 5136#define ANEG_CFG_PS2 0x00000001 5137#define ANEG_CFG_PS1 0x00008000 5138#define ANEG_CFG_HD 0x00004000 5139#define ANEG_CFG_FD 0x00002000 5140#define ANEG_CFG_INVAL 0x00001f06 5141 5142}; 5143#define ANEG_OK 0 5144#define ANEG_DONE 1 5145#define ANEG_TIMER_ENAB 2 5146#define ANEG_FAILED -1 5147 5148#define ANEG_STATE_SETTLE_TIME 10000 5149 5150static int tg3_fiber_aneg_smachine(struct tg3 *tp, 5151 struct tg3_fiber_aneginfo *ap) 5152{ 5153 u16 flowctrl; 5154 unsigned long delta; 5155 u32 rx_cfg_reg; 5156 int ret; 5157 5158 if (ap->state == ANEG_STATE_UNKNOWN) { 5159 ap->rxconfig = 0; 5160 ap->link_time = 0; 5161 ap->cur_time = 0; 5162 ap->ability_match_cfg = 0; 5163 ap->ability_match_count = 0; 5164 ap->ability_match = 0; 5165 ap->idle_match = 0; 5166 ap->ack_match = 0; 5167 } 5168 ap->cur_time++; 5169 5170 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 5171 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 5172 5173 if (rx_cfg_reg != ap->ability_match_cfg) { 5174 ap->ability_match_cfg = rx_cfg_reg; 5175 ap->ability_match = 0; 5176 ap->ability_match_count = 0; 5177 } else { 5178 if (++ap->ability_match_count > 1) { 5179 ap->ability_match = 1; 5180 ap->ability_match_cfg = rx_cfg_reg; 5181 } 5182 } 5183 if (rx_cfg_reg & ANEG_CFG_ACK) 5184 ap->ack_match = 1; 5185 else 5186 ap->ack_match = 0; 5187 5188 ap->idle_match = 0; 5189 } else { 5190 ap->idle_match = 1; 5191 ap->ability_match_cfg = 0; 5192 ap->ability_match_count = 0; 5193 ap->ability_match = 0; 5194 ap->ack_match = 0; 5195 5196 rx_cfg_reg = 0; 5197 } 5198 5199 ap->rxconfig = rx_cfg_reg; 5200 ret = ANEG_OK; 5201 5202 switch (ap->state) { 5203 case ANEG_STATE_UNKNOWN: 5204 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 5205 ap->state = ANEG_STATE_AN_ENABLE; 5206 5207 fallthrough; 5208 case ANEG_STATE_AN_ENABLE: 5209 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 5210 if (ap->flags & MR_AN_ENABLE) { 5211 ap->link_time = 0; 5212 ap->cur_time = 0; 5213 ap->ability_match_cfg = 0; 5214 ap->ability_match_count = 0; 5215 ap->ability_match = 0; 5216 ap->idle_match = 0; 5217 ap->ack_match = 0; 5218 5219 ap->state = ANEG_STATE_RESTART_INIT; 5220 } else { 5221 ap->state = ANEG_STATE_DISABLE_LINK_OK; 5222 } 5223 break; 5224 5225 case ANEG_STATE_RESTART_INIT: 5226 ap->link_time = ap->cur_time; 5227 ap->flags &= ~(MR_NP_LOADED); 5228 ap->txconfig = 0; 5229 tw32(MAC_TX_AUTO_NEG, 0); 5230 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5231 tw32_f(MAC_MODE, tp->mac_mode); 5232 udelay(40); 5233 5234 ret = ANEG_TIMER_ENAB; 5235 ap->state = ANEG_STATE_RESTART; 5236 5237 fallthrough; 5238 case ANEG_STATE_RESTART: 5239 delta = ap->cur_time - ap->link_time; 5240 if (delta > ANEG_STATE_SETTLE_TIME) 5241 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 5242 else 5243 ret = ANEG_TIMER_ENAB; 5244 break; 5245 5246 case ANEG_STATE_DISABLE_LINK_OK: 5247 ret = ANEG_DONE; 5248 break; 5249 5250 case ANEG_STATE_ABILITY_DETECT_INIT: 5251 ap->flags &= ~(MR_TOGGLE_TX); 5252 ap->txconfig = ANEG_CFG_FD; 5253 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5254 if (flowctrl & ADVERTISE_1000XPAUSE) 5255 ap->txconfig |= ANEG_CFG_PS1; 5256 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5257 ap->txconfig |= ANEG_CFG_PS2; 5258 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5259 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5260 tw32_f(MAC_MODE, tp->mac_mode); 5261 udelay(40); 5262 5263 ap->state = ANEG_STATE_ABILITY_DETECT; 5264 break; 5265 5266 case ANEG_STATE_ABILITY_DETECT: 5267 if (ap->ability_match != 0 && ap->rxconfig != 0) 5268 ap->state = ANEG_STATE_ACK_DETECT_INIT; 5269 break; 5270 5271 case ANEG_STATE_ACK_DETECT_INIT: 5272 ap->txconfig |= ANEG_CFG_ACK; 5273 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5274 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5275 tw32_f(MAC_MODE, tp->mac_mode); 5276 udelay(40); 5277 5278 ap->state = ANEG_STATE_ACK_DETECT; 5279 5280 fallthrough; 5281 case ANEG_STATE_ACK_DETECT: 5282 if (ap->ack_match != 0) { 5283 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 5284 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 5285 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 5286 } else { 5287 ap->state = ANEG_STATE_AN_ENABLE; 5288 } 5289 } else if (ap->ability_match != 0 && 5290 ap->rxconfig == 0) { 5291 ap->state = ANEG_STATE_AN_ENABLE; 5292 } 5293 break; 5294 5295 case ANEG_STATE_COMPLETE_ACK_INIT: 5296 if (ap->rxconfig & ANEG_CFG_INVAL) { 5297 ret = ANEG_FAILED; 5298 break; 5299 } 5300 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 5301 MR_LP_ADV_HALF_DUPLEX | 5302 MR_LP_ADV_SYM_PAUSE | 5303 MR_LP_ADV_ASYM_PAUSE | 5304 MR_LP_ADV_REMOTE_FAULT1 | 5305 MR_LP_ADV_REMOTE_FAULT2 | 5306 MR_LP_ADV_NEXT_PAGE | 5307 MR_TOGGLE_RX | 5308 MR_NP_RX); 5309 if (ap->rxconfig & ANEG_CFG_FD) 5310 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 5311 if (ap->rxconfig & ANEG_CFG_HD) 5312 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 5313 if (ap->rxconfig & ANEG_CFG_PS1) 5314 ap->flags |= MR_LP_ADV_SYM_PAUSE; 5315 if (ap->rxconfig & ANEG_CFG_PS2) 5316 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 5317 if (ap->rxconfig & ANEG_CFG_RF1) 5318 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 5319 if (ap->rxconfig & ANEG_CFG_RF2) 5320 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 5321 if (ap->rxconfig & ANEG_CFG_NP) 5322 ap->flags |= MR_LP_ADV_NEXT_PAGE; 5323 5324 ap->link_time = ap->cur_time; 5325 5326 ap->flags ^= (MR_TOGGLE_TX); 5327 if (ap->rxconfig & 0x0008) 5328 ap->flags |= MR_TOGGLE_RX; 5329 if (ap->rxconfig & ANEG_CFG_NP) 5330 ap->flags |= MR_NP_RX; 5331 ap->flags |= MR_PAGE_RX; 5332 5333 ap->state = ANEG_STATE_COMPLETE_ACK; 5334 ret = ANEG_TIMER_ENAB; 5335 break; 5336 5337 case ANEG_STATE_COMPLETE_ACK: 5338 if (ap->ability_match != 0 && 5339 ap->rxconfig == 0) { 5340 ap->state = ANEG_STATE_AN_ENABLE; 5341 break; 5342 } 5343 delta = ap->cur_time - ap->link_time; 5344 if (delta > ANEG_STATE_SETTLE_TIME) { 5345 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 5346 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5347 } else { 5348 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 5349 !(ap->flags & MR_NP_RX)) { 5350 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5351 } else { 5352 ret = ANEG_FAILED; 5353 } 5354 } 5355 } 5356 break; 5357 5358 case ANEG_STATE_IDLE_DETECT_INIT: 5359 ap->link_time = ap->cur_time; 5360 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5361 tw32_f(MAC_MODE, tp->mac_mode); 5362 udelay(40); 5363 5364 ap->state = ANEG_STATE_IDLE_DETECT; 5365 ret = ANEG_TIMER_ENAB; 5366 break; 5367 5368 case ANEG_STATE_IDLE_DETECT: 5369 if (ap->ability_match != 0 && 5370 ap->rxconfig == 0) { 5371 ap->state = ANEG_STATE_AN_ENABLE; 5372 break; 5373 } 5374 delta = ap->cur_time - ap->link_time; 5375 if (delta > ANEG_STATE_SETTLE_TIME) { 5376 /* XXX another gem from the Broadcom driver :( */ 5377 ap->state = ANEG_STATE_LINK_OK; 5378 } 5379 break; 5380 5381 case ANEG_STATE_LINK_OK: 5382 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 5383 ret = ANEG_DONE; 5384 break; 5385 5386 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 5387 /* ??? unimplemented */ 5388 break; 5389 5390 case ANEG_STATE_NEXT_PAGE_WAIT: 5391 /* ??? unimplemented */ 5392 break; 5393 5394 default: 5395 ret = ANEG_FAILED; 5396 break; 5397 } 5398 5399 return ret; 5400} 5401 5402static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 5403{ 5404 int res = 0; 5405 struct tg3_fiber_aneginfo aninfo; 5406 int status = ANEG_FAILED; 5407 unsigned int tick; 5408 u32 tmp; 5409 5410 tw32_f(MAC_TX_AUTO_NEG, 0); 5411 5412 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 5413 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 5414 udelay(40); 5415 5416 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 5417 udelay(40); 5418 5419 memset(&aninfo, 0, sizeof(aninfo)); 5420 aninfo.flags |= MR_AN_ENABLE; 5421 aninfo.state = ANEG_STATE_UNKNOWN; 5422 aninfo.cur_time = 0; 5423 tick = 0; 5424 while (++tick < 195000) { 5425 status = tg3_fiber_aneg_smachine(tp, &aninfo); 5426 if (status == ANEG_DONE || status == ANEG_FAILED) 5427 break; 5428 5429 udelay(1); 5430 } 5431 5432 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5433 tw32_f(MAC_MODE, tp->mac_mode); 5434 udelay(40); 5435 5436 *txflags = aninfo.txconfig; 5437 *rxflags = aninfo.flags; 5438 5439 if (status == ANEG_DONE && 5440 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 5441 MR_LP_ADV_FULL_DUPLEX))) 5442 res = 1; 5443 5444 return res; 5445} 5446 5447static void tg3_init_bcm8002(struct tg3 *tp) 5448{ 5449 u32 mac_status = tr32(MAC_STATUS); 5450 int i; 5451 5452 /* Reset when initting first time or we have a link. */ 5453 if (tg3_flag(tp, INIT_COMPLETE) && 5454 !(mac_status & MAC_STATUS_PCS_SYNCED)) 5455 return; 5456 5457 /* Set PLL lock range. */ 5458 tg3_writephy(tp, 0x16, 0x8007); 5459 5460 /* SW reset */ 5461 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 5462 5463 /* Wait for reset to complete. */ 5464 /* XXX schedule_timeout() ... */ 5465 for (i = 0; i < 500; i++) 5466 udelay(10); 5467 5468 /* Config mode; select PMA/Ch 1 regs. */ 5469 tg3_writephy(tp, 0x10, 0x8411); 5470 5471 /* Enable auto-lock and comdet, select txclk for tx. */ 5472 tg3_writephy(tp, 0x11, 0x0a10); 5473 5474 tg3_writephy(tp, 0x18, 0x00a0); 5475 tg3_writephy(tp, 0x16, 0x41ff); 5476 5477 /* Assert and deassert POR. */ 5478 tg3_writephy(tp, 0x13, 0x0400); 5479 udelay(40); 5480 tg3_writephy(tp, 0x13, 0x0000); 5481 5482 tg3_writephy(tp, 0x11, 0x0a50); 5483 udelay(40); 5484 tg3_writephy(tp, 0x11, 0x0a10); 5485 5486 /* Wait for signal to stabilize */ 5487 /* XXX schedule_timeout() ... */ 5488 for (i = 0; i < 15000; i++) 5489 udelay(10); 5490 5491 /* Deselect the channel register so we can read the PHYID 5492 * later. 5493 */ 5494 tg3_writephy(tp, 0x10, 0x8011); 5495} 5496 5497static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 5498{ 5499 u16 flowctrl; 5500 bool current_link_up; 5501 u32 sg_dig_ctrl, sg_dig_status; 5502 u32 serdes_cfg, expected_sg_dig_ctrl; 5503 int workaround, port_a; 5504 5505 serdes_cfg = 0; 5506 workaround = 0; 5507 port_a = 1; 5508 current_link_up = false; 5509 5510 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 && 5511 tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) { 5512 workaround = 1; 5513 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 5514 port_a = 0; 5515 5516 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 5517 /* preserve bits 20-23 for voltage regulator */ 5518 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 5519 } 5520 5521 sg_dig_ctrl = tr32(SG_DIG_CTRL); 5522 5523 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 5524 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 5525 if (workaround) { 5526 u32 val = serdes_cfg; 5527 5528 if (port_a) 5529 val |= 0xc010000; 5530 else 5531 val |= 0x4010000; 5532 tw32_f(MAC_SERDES_CFG, val); 5533 } 5534 5535 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5536 } 5537 if (mac_status & MAC_STATUS_PCS_SYNCED) { 5538 tg3_setup_flow_control(tp, 0, 0); 5539 current_link_up = true; 5540 } 5541 goto out; 5542 } 5543 5544 /* Want auto-negotiation. */ 5545 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 5546 5547 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5548 if (flowctrl & ADVERTISE_1000XPAUSE) 5549 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 5550 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5551 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 5552 5553 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 5554 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 5555 tp->serdes_counter && 5556 ((mac_status & (MAC_STATUS_PCS_SYNCED | 5557 MAC_STATUS_RCVD_CFG)) == 5558 MAC_STATUS_PCS_SYNCED)) { 5559 tp->serdes_counter--; 5560 current_link_up = true; 5561 goto out; 5562 } 5563restart_autoneg: 5564 if (workaround) 5565 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 5566 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 5567 udelay(5); 5568 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 5569 5570 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5571 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5572 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 5573 MAC_STATUS_SIGNAL_DET)) { 5574 sg_dig_status = tr32(SG_DIG_STATUS); 5575 mac_status = tr32(MAC_STATUS); 5576 5577 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 5578 (mac_status & MAC_STATUS_PCS_SYNCED)) { 5579 u32 local_adv = 0, remote_adv = 0; 5580 5581 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 5582 local_adv |= ADVERTISE_1000XPAUSE; 5583 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 5584 local_adv |= ADVERTISE_1000XPSE_ASYM; 5585 5586 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 5587 remote_adv |= LPA_1000XPAUSE; 5588 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 5589 remote_adv |= LPA_1000XPAUSE_ASYM; 5590 5591 tp->link_config.rmt_adv = 5592 mii_adv_to_ethtool_adv_x(remote_adv); 5593 5594 tg3_setup_flow_control(tp, local_adv, remote_adv); 5595 current_link_up = true; 5596 tp->serdes_counter = 0; 5597 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5598 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 5599 if (tp->serdes_counter) 5600 tp->serdes_counter--; 5601 else { 5602 if (workaround) { 5603 u32 val = serdes_cfg; 5604 5605 if (port_a) 5606 val |= 0xc010000; 5607 else 5608 val |= 0x4010000; 5609 5610 tw32_f(MAC_SERDES_CFG, val); 5611 } 5612 5613 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5614 udelay(40); 5615 5616 /* Link parallel detection - link is up */ 5617 /* only if we have PCS_SYNC and not */ 5618 /* receiving config code words */ 5619 mac_status = tr32(MAC_STATUS); 5620 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 5621 !(mac_status & MAC_STATUS_RCVD_CFG)) { 5622 tg3_setup_flow_control(tp, 0, 0); 5623 current_link_up = true; 5624 tp->phy_flags |= 5625 TG3_PHYFLG_PARALLEL_DETECT; 5626 tp->serdes_counter = 5627 SERDES_PARALLEL_DET_TIMEOUT; 5628 } else 5629 goto restart_autoneg; 5630 } 5631 } 5632 } else { 5633 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5634 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5635 } 5636 5637out: 5638 return current_link_up; 5639} 5640 5641static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 5642{ 5643 bool current_link_up = false; 5644 5645 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 5646 goto out; 5647 5648 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5649 u32 txflags, rxflags; 5650 int i; 5651 5652 if (fiber_autoneg(tp, &txflags, &rxflags)) { 5653 u32 local_adv = 0, remote_adv = 0; 5654 5655 if (txflags & ANEG_CFG_PS1) 5656 local_adv |= ADVERTISE_1000XPAUSE; 5657 if (txflags & ANEG_CFG_PS2) 5658 local_adv |= ADVERTISE_1000XPSE_ASYM; 5659 5660 if (rxflags & MR_LP_ADV_SYM_PAUSE) 5661 remote_adv |= LPA_1000XPAUSE; 5662 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 5663 remote_adv |= LPA_1000XPAUSE_ASYM; 5664 5665 tp->link_config.rmt_adv = 5666 mii_adv_to_ethtool_adv_x(remote_adv); 5667 5668 tg3_setup_flow_control(tp, local_adv, remote_adv); 5669 5670 current_link_up = true; 5671 } 5672 for (i = 0; i < 30; i++) { 5673 udelay(20); 5674 tw32_f(MAC_STATUS, 5675 (MAC_STATUS_SYNC_CHANGED | 5676 MAC_STATUS_CFG_CHANGED)); 5677 udelay(40); 5678 if ((tr32(MAC_STATUS) & 5679 (MAC_STATUS_SYNC_CHANGED | 5680 MAC_STATUS_CFG_CHANGED)) == 0) 5681 break; 5682 } 5683 5684 mac_status = tr32(MAC_STATUS); 5685 if (!current_link_up && 5686 (mac_status & MAC_STATUS_PCS_SYNCED) && 5687 !(mac_status & MAC_STATUS_RCVD_CFG)) 5688 current_link_up = true; 5689 } else { 5690 tg3_setup_flow_control(tp, 0, 0); 5691 5692 /* Forcing 1000FD link up. */ 5693 current_link_up = true; 5694 5695 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 5696 udelay(40); 5697 5698 tw32_f(MAC_MODE, tp->mac_mode); 5699 udelay(40); 5700 } 5701 5702out: 5703 return current_link_up; 5704} 5705 5706static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset) 5707{ 5708 u32 orig_pause_cfg; 5709 u32 orig_active_speed; 5710 u8 orig_active_duplex; 5711 u32 mac_status; 5712 bool current_link_up; 5713 int i; 5714 5715 orig_pause_cfg = tp->link_config.active_flowctrl; 5716 orig_active_speed = tp->link_config.active_speed; 5717 orig_active_duplex = tp->link_config.active_duplex; 5718 5719 if (!tg3_flag(tp, HW_AUTONEG) && 5720 tp->link_up && 5721 tg3_flag(tp, INIT_COMPLETE)) { 5722 mac_status = tr32(MAC_STATUS); 5723 mac_status &= (MAC_STATUS_PCS_SYNCED | 5724 MAC_STATUS_SIGNAL_DET | 5725 MAC_STATUS_CFG_CHANGED | 5726 MAC_STATUS_RCVD_CFG); 5727 if (mac_status == (MAC_STATUS_PCS_SYNCED | 5728 MAC_STATUS_SIGNAL_DET)) { 5729 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5730 MAC_STATUS_CFG_CHANGED)); 5731 return 0; 5732 } 5733 } 5734 5735 tw32_f(MAC_TX_AUTO_NEG, 0); 5736 5737 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5738 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5739 tw32_f(MAC_MODE, tp->mac_mode); 5740 udelay(40); 5741 5742 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5743 tg3_init_bcm8002(tp); 5744 5745 /* Enable link change event even when serdes polling. */ 5746 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5747 udelay(40); 5748 5749 tp->link_config.rmt_adv = 0; 5750 mac_status = tr32(MAC_STATUS); 5751 5752 if (tg3_flag(tp, HW_AUTONEG)) 5753 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5754 else 5755 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5756 5757 tp->napi[0].hw_status->status = 5758 (SD_STATUS_UPDATED | 5759 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5760 5761 for (i = 0; i < 100; i++) { 5762 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5763 MAC_STATUS_CFG_CHANGED)); 5764 udelay(5); 5765 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5766 MAC_STATUS_CFG_CHANGED | 5767 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5768 break; 5769 } 5770 5771 mac_status = tr32(MAC_STATUS); 5772 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5773 current_link_up = false; 5774 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5775 tp->serdes_counter == 0) { 5776 tw32_f(MAC_MODE, (tp->mac_mode | 5777 MAC_MODE_SEND_CONFIGS)); 5778 udelay(1); 5779 tw32_f(MAC_MODE, tp->mac_mode); 5780 } 5781 } 5782 5783 if (current_link_up) { 5784 tp->link_config.active_speed = SPEED_1000; 5785 tp->link_config.active_duplex = DUPLEX_FULL; 5786 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5787 LED_CTRL_LNKLED_OVERRIDE | 5788 LED_CTRL_1000MBPS_ON)); 5789 } else { 5790 tp->link_config.active_speed = SPEED_UNKNOWN; 5791 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5792 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5793 LED_CTRL_LNKLED_OVERRIDE | 5794 LED_CTRL_TRAFFIC_OVERRIDE)); 5795 } 5796 5797 if (!tg3_test_and_report_link_chg(tp, current_link_up)) { 5798 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5799 if (orig_pause_cfg != now_pause_cfg || 5800 orig_active_speed != tp->link_config.active_speed || 5801 orig_active_duplex != tp->link_config.active_duplex) 5802 tg3_link_report(tp); 5803 } 5804 5805 return 0; 5806} 5807 5808static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset) 5809{ 5810 int err = 0; 5811 u32 bmsr, bmcr; 5812 u32 current_speed = SPEED_UNKNOWN; 5813 u8 current_duplex = DUPLEX_UNKNOWN; 5814 bool current_link_up = false; 5815 u32 local_adv, remote_adv, sgsr; 5816 5817 if ((tg3_asic_rev(tp) == ASIC_REV_5719 || 5818 tg3_asic_rev(tp) == ASIC_REV_5720) && 5819 !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) && 5820 (sgsr & SERDES_TG3_SGMII_MODE)) { 5821 5822 if (force_reset) 5823 tg3_phy_reset(tp); 5824 5825 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 5826 5827 if (!(sgsr & SERDES_TG3_LINK_UP)) { 5828 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5829 } else { 5830 current_link_up = true; 5831 if (sgsr & SERDES_TG3_SPEED_1000) { 5832 current_speed = SPEED_1000; 5833 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5834 } else if (sgsr & SERDES_TG3_SPEED_100) { 5835 current_speed = SPEED_100; 5836 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5837 } else { 5838 current_speed = SPEED_10; 5839 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5840 } 5841 5842 if (sgsr & SERDES_TG3_FULL_DUPLEX) 5843 current_duplex = DUPLEX_FULL; 5844 else 5845 current_duplex = DUPLEX_HALF; 5846 } 5847 5848 tw32_f(MAC_MODE, tp->mac_mode); 5849 udelay(40); 5850 5851 tg3_clear_mac_status(tp); 5852 5853 goto fiber_setup_done; 5854 } 5855 5856 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5857 tw32_f(MAC_MODE, tp->mac_mode); 5858 udelay(40); 5859 5860 tg3_clear_mac_status(tp); 5861 5862 if (force_reset) 5863 tg3_phy_reset(tp); 5864 5865 tp->link_config.rmt_adv = 0; 5866 5867 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5868 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5869 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5870 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5871 bmsr |= BMSR_LSTATUS; 5872 else 5873 bmsr &= ~BMSR_LSTATUS; 5874 } 5875 5876 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5877 5878 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5879 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5880 /* do nothing, just check for link up at the end */ 5881 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5882 u32 adv, newadv; 5883 5884 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5885 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5886 ADVERTISE_1000XPAUSE | 5887 ADVERTISE_1000XPSE_ASYM | 5888 ADVERTISE_SLCT); 5889 5890 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5891 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5892 5893 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5894 tg3_writephy(tp, MII_ADVERTISE, newadv); 5895 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5896 tg3_writephy(tp, MII_BMCR, bmcr); 5897 5898 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5899 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5900 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5901 5902 return err; 5903 } 5904 } else { 5905 u32 new_bmcr; 5906 5907 bmcr &= ~BMCR_SPEED1000; 5908 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5909 5910 if (tp->link_config.duplex == DUPLEX_FULL) 5911 new_bmcr |= BMCR_FULLDPLX; 5912 5913 if (new_bmcr != bmcr) { 5914 /* BMCR_SPEED1000 is a reserved bit that needs 5915 * to be set on write. 5916 */ 5917 new_bmcr |= BMCR_SPEED1000; 5918 5919 /* Force a linkdown */ 5920 if (tp->link_up) { 5921 u32 adv; 5922 5923 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5924 adv &= ~(ADVERTISE_1000XFULL | 5925 ADVERTISE_1000XHALF | 5926 ADVERTISE_SLCT); 5927 tg3_writephy(tp, MII_ADVERTISE, adv); 5928 tg3_writephy(tp, MII_BMCR, bmcr | 5929 BMCR_ANRESTART | 5930 BMCR_ANENABLE); 5931 udelay(10); 5932 tg3_carrier_off(tp); 5933 } 5934 tg3_writephy(tp, MII_BMCR, new_bmcr); 5935 bmcr = new_bmcr; 5936 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5937 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5938 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5939 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5940 bmsr |= BMSR_LSTATUS; 5941 else 5942 bmsr &= ~BMSR_LSTATUS; 5943 } 5944 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5945 } 5946 } 5947 5948 if (bmsr & BMSR_LSTATUS) { 5949 current_speed = SPEED_1000; 5950 current_link_up = true; 5951 if (bmcr & BMCR_FULLDPLX) 5952 current_duplex = DUPLEX_FULL; 5953 else 5954 current_duplex = DUPLEX_HALF; 5955 5956 local_adv = 0; 5957 remote_adv = 0; 5958 5959 if (bmcr & BMCR_ANENABLE) { 5960 u32 common; 5961 5962 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5963 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5964 common = local_adv & remote_adv; 5965 if (common & (ADVERTISE_1000XHALF | 5966 ADVERTISE_1000XFULL)) { 5967 if (common & ADVERTISE_1000XFULL) 5968 current_duplex = DUPLEX_FULL; 5969 else 5970 current_duplex = DUPLEX_HALF; 5971 5972 tp->link_config.rmt_adv = 5973 mii_adv_to_ethtool_adv_x(remote_adv); 5974 } else if (!tg3_flag(tp, 5780_CLASS)) { 5975 /* Link is up via parallel detect */ 5976 } else { 5977 current_link_up = false; 5978 } 5979 } 5980 } 5981 5982fiber_setup_done: 5983 if (current_link_up && current_duplex == DUPLEX_FULL) 5984 tg3_setup_flow_control(tp, local_adv, remote_adv); 5985 5986 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5987 if (tp->link_config.active_duplex == DUPLEX_HALF) 5988 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5989 5990 tw32_f(MAC_MODE, tp->mac_mode); 5991 udelay(40); 5992 5993 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5994 5995 tp->link_config.active_speed = current_speed; 5996 tp->link_config.active_duplex = current_duplex; 5997 5998 tg3_test_and_report_link_chg(tp, current_link_up); 5999 return err; 6000} 6001 6002static void tg3_serdes_parallel_detect(struct tg3 *tp) 6003{ 6004 if (tp->serdes_counter) { 6005 /* Give autoneg time to complete. */ 6006 tp->serdes_counter--; 6007 return; 6008 } 6009 6010 if (!tp->link_up && 6011 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 6012 u32 bmcr; 6013 6014 tg3_readphy(tp, MII_BMCR, &bmcr); 6015 if (bmcr & BMCR_ANENABLE) { 6016 u32 phy1, phy2; 6017 6018 /* Select shadow register 0x1f */ 6019 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 6020 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 6021 6022 /* Select expansion interrupt status register */ 6023 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6024 MII_TG3_DSP_EXP1_INT_STAT); 6025 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6026 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6027 6028 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 6029 /* We have signal detect and not receiving 6030 * config code words, link is up by parallel 6031 * detection. 6032 */ 6033 6034 bmcr &= ~BMCR_ANENABLE; 6035 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 6036 tg3_writephy(tp, MII_BMCR, bmcr); 6037 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 6038 } 6039 } 6040 } else if (tp->link_up && 6041 (tp->link_config.autoneg == AUTONEG_ENABLE) && 6042 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 6043 u32 phy2; 6044 6045 /* Select expansion interrupt status register */ 6046 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6047 MII_TG3_DSP_EXP1_INT_STAT); 6048 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6049 if (phy2 & 0x20) { 6050 u32 bmcr; 6051 6052 /* Config code words received, turn on autoneg. */ 6053 tg3_readphy(tp, MII_BMCR, &bmcr); 6054 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 6055 6056 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 6057 6058 } 6059 } 6060} 6061 6062static int tg3_setup_phy(struct tg3 *tp, bool force_reset) 6063{ 6064 u32 val; 6065 int err; 6066 6067 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 6068 err = tg3_setup_fiber_phy(tp, force_reset); 6069 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 6070 err = tg3_setup_fiber_mii_phy(tp, force_reset); 6071 else 6072 err = tg3_setup_copper_phy(tp, force_reset); 6073 6074 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 6075 u32 scale; 6076 6077 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 6078 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 6079 scale = 65; 6080 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 6081 scale = 6; 6082 else 6083 scale = 12; 6084 6085 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 6086 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 6087 tw32(GRC_MISC_CFG, val); 6088 } 6089 6090 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 6091 (6 << TX_LENGTHS_IPG_SHIFT); 6092 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 6093 tg3_asic_rev(tp) == ASIC_REV_5762) 6094 val |= tr32(MAC_TX_LENGTHS) & 6095 (TX_LENGTHS_JMB_FRM_LEN_MSK | 6096 TX_LENGTHS_CNT_DWN_VAL_MSK); 6097 6098 if (tp->link_config.active_speed == SPEED_1000 && 6099 tp->link_config.active_duplex == DUPLEX_HALF) 6100 tw32(MAC_TX_LENGTHS, val | 6101 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 6102 else 6103 tw32(MAC_TX_LENGTHS, val | 6104 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 6105 6106 if (!tg3_flag(tp, 5705_PLUS)) { 6107 if (tp->link_up) { 6108 tw32(HOSTCC_STAT_COAL_TICKS, 6109 tp->coal.stats_block_coalesce_usecs); 6110 } else { 6111 tw32(HOSTCC_STAT_COAL_TICKS, 0); 6112 } 6113 } 6114 6115 if (tg3_flag(tp, ASPM_WORKAROUND)) { 6116 val = tr32(PCIE_PWR_MGMT_THRESH); 6117 if (!tp->link_up) 6118 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 6119 tp->pwrmgmt_thresh; 6120 else 6121 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 6122 tw32(PCIE_PWR_MGMT_THRESH, val); 6123 } 6124 6125 return err; 6126} 6127 6128/* tp->lock must be held */ 6129static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts) 6130{ 6131 u64 stamp; 6132 6133 ptp_read_system_prets(sts); 6134 stamp = tr32(TG3_EAV_REF_CLCK_LSB); 6135 ptp_read_system_postts(sts); 6136 stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; 6137 6138 return stamp; 6139} 6140 6141/* tp->lock must be held */ 6142static void tg3_refclk_write(struct tg3 *tp, u64 newval) 6143{ 6144 u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6145 6146 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP); 6147 tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff); 6148 tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32); 6149 tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME); 6150} 6151 6152static inline void tg3_full_lock(struct tg3 *tp, int irq_sync); 6153static inline void tg3_full_unlock(struct tg3 *tp); 6154static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) 6155{ 6156 struct tg3 *tp = netdev_priv(dev); 6157 6158 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | 6159 SOF_TIMESTAMPING_RX_SOFTWARE | 6160 SOF_TIMESTAMPING_SOFTWARE; 6161 6162 if (tg3_flag(tp, PTP_CAPABLE)) { 6163 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE | 6164 SOF_TIMESTAMPING_RX_HARDWARE | 6165 SOF_TIMESTAMPING_RAW_HARDWARE; 6166 } 6167 6168 if (tp->ptp_clock) 6169 info->phc_index = ptp_clock_index(tp->ptp_clock); 6170 else 6171 info->phc_index = -1; 6172 6173 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); 6174 6175 info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | 6176 (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) | 6177 (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | 6178 (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT); 6179 return 0; 6180} 6181 6182static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) 6183{ 6184 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6185 bool neg_adj = false; 6186 u32 correction = 0; 6187 6188 if (ppb < 0) { 6189 neg_adj = true; 6190 ppb = -ppb; 6191 } 6192 6193 /* Frequency adjustment is performed using hardware with a 24 bit 6194 * accumulator and a programmable correction value. On each clk, the 6195 * correction value gets added to the accumulator and when it 6196 * overflows, the time counter is incremented/decremented. 6197 * 6198 * So conversion from ppb to correction value is 6199 * ppb * (1 << 24) / 1000000000 6200 */ 6201 correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) & 6202 TG3_EAV_REF_CLK_CORRECT_MASK; 6203 6204 tg3_full_lock(tp, 0); 6205 6206 if (correction) 6207 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 6208 TG3_EAV_REF_CLK_CORRECT_EN | 6209 (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction); 6210 else 6211 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); 6212 6213 tg3_full_unlock(tp); 6214 6215 return 0; 6216} 6217 6218static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) 6219{ 6220 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6221 6222 tg3_full_lock(tp, 0); 6223 tp->ptp_adjust += delta; 6224 tg3_full_unlock(tp); 6225 6226 return 0; 6227} 6228 6229static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts, 6230 struct ptp_system_timestamp *sts) 6231{ 6232 u64 ns; 6233 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6234 6235 tg3_full_lock(tp, 0); 6236 ns = tg3_refclk_read(tp, sts); 6237 ns += tp->ptp_adjust; 6238 tg3_full_unlock(tp); 6239 6240 *ts = ns_to_timespec64(ns); 6241 6242 return 0; 6243} 6244 6245static int tg3_ptp_settime(struct ptp_clock_info *ptp, 6246 const struct timespec64 *ts) 6247{ 6248 u64 ns; 6249 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6250 6251 ns = timespec64_to_ns(ts); 6252 6253 tg3_full_lock(tp, 0); 6254 tg3_refclk_write(tp, ns); 6255 tp->ptp_adjust = 0; 6256 tg3_full_unlock(tp); 6257 6258 return 0; 6259} 6260 6261static int tg3_ptp_enable(struct ptp_clock_info *ptp, 6262 struct ptp_clock_request *rq, int on) 6263{ 6264 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6265 u32 clock_ctl; 6266 int rval = 0; 6267 6268 switch (rq->type) { 6269 case PTP_CLK_REQ_PEROUT: 6270 /* Reject requests with unsupported flags */ 6271 if (rq->perout.flags) 6272 return -EOPNOTSUPP; 6273 6274 if (rq->perout.index != 0) 6275 return -EINVAL; 6276 6277 tg3_full_lock(tp, 0); 6278 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6279 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK; 6280 6281 if (on) { 6282 u64 nsec; 6283 6284 nsec = rq->perout.start.sec * 1000000000ULL + 6285 rq->perout.start.nsec; 6286 6287 if (rq->perout.period.sec || rq->perout.period.nsec) { 6288 netdev_warn(tp->dev, 6289 "Device supports only a one-shot timesync output, period must be 0\n"); 6290 rval = -EINVAL; 6291 goto err_out; 6292 } 6293 6294 if (nsec & (1ULL << 63)) { 6295 netdev_warn(tp->dev, 6296 "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n"); 6297 rval = -EINVAL; 6298 goto err_out; 6299 } 6300 6301 tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff)); 6302 tw32(TG3_EAV_WATCHDOG0_MSB, 6303 TG3_EAV_WATCHDOG0_EN | 6304 ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK)); 6305 6306 tw32(TG3_EAV_REF_CLCK_CTL, 6307 clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0); 6308 } else { 6309 tw32(TG3_EAV_WATCHDOG0_MSB, 0); 6310 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl); 6311 } 6312 6313err_out: 6314 tg3_full_unlock(tp); 6315 return rval; 6316 6317 default: 6318 break; 6319 } 6320 6321 return -EOPNOTSUPP; 6322} 6323 6324static const struct ptp_clock_info tg3_ptp_caps = { 6325 .owner = THIS_MODULE, 6326 .name = "tg3 clock", 6327 .max_adj = 250000000, 6328 .n_alarm = 0, 6329 .n_ext_ts = 0, 6330 .n_per_out = 1, 6331 .n_pins = 0, 6332 .pps = 0, 6333 .adjfreq = tg3_ptp_adjfreq, 6334 .adjtime = tg3_ptp_adjtime, 6335 .gettimex64 = tg3_ptp_gettimex, 6336 .settime64 = tg3_ptp_settime, 6337 .enable = tg3_ptp_enable, 6338}; 6339 6340static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, 6341 struct skb_shared_hwtstamps *timestamp) 6342{ 6343 memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); 6344 timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + 6345 tp->ptp_adjust); 6346} 6347 6348/* tp->lock must be held */ 6349static void tg3_ptp_init(struct tg3 *tp) 6350{ 6351 if (!tg3_flag(tp, PTP_CAPABLE)) 6352 return; 6353 6354 /* Initialize the hardware clock to the system time. */ 6355 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); 6356 tp->ptp_adjust = 0; 6357 tp->ptp_info = tg3_ptp_caps; 6358} 6359 6360/* tp->lock must be held */ 6361static void tg3_ptp_resume(struct tg3 *tp) 6362{ 6363 if (!tg3_flag(tp, PTP_CAPABLE)) 6364 return; 6365 6366 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); 6367 tp->ptp_adjust = 0; 6368} 6369 6370static void tg3_ptp_fini(struct tg3 *tp) 6371{ 6372 if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) 6373 return; 6374 6375 ptp_clock_unregister(tp->ptp_clock); 6376 tp->ptp_clock = NULL; 6377 tp->ptp_adjust = 0; 6378} 6379 6380static inline int tg3_irq_sync(struct tg3 *tp) 6381{ 6382 return tp->irq_sync; 6383} 6384 6385static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 6386{ 6387 int i; 6388 6389 dst = (u32 *)((u8 *)dst + off); 6390 for (i = 0; i < len; i += sizeof(u32)) 6391 *dst++ = tr32(off + i); 6392} 6393 6394static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 6395{ 6396 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 6397 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 6398 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 6399 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 6400 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 6401 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 6402 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 6403 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 6404 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 6405 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 6406 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 6407 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 6408 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 6409 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 6410 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 6411 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 6412 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 6413 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 6414 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 6415 6416 if (tg3_flag(tp, SUPPORT_MSIX)) 6417 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 6418 6419 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 6420 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 6421 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 6422 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 6423 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 6424 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 6425 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 6426 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 6427 6428 if (!tg3_flag(tp, 5705_PLUS)) { 6429 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 6430 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 6431 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 6432 } 6433 6434 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 6435 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 6436 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 6437 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 6438 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 6439 6440 if (tg3_flag(tp, NVRAM)) 6441 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 6442} 6443 6444static void tg3_dump_state(struct tg3 *tp) 6445{ 6446 int i; 6447 u32 *regs; 6448 6449 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 6450 if (!regs) 6451 return; 6452 6453 if (tg3_flag(tp, PCI_EXPRESS)) { 6454 /* Read up to but not including private PCI registers */ 6455 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 6456 regs[i / sizeof(u32)] = tr32(i); 6457 } else 6458 tg3_dump_legacy_regs(tp, regs); 6459 6460 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 6461 if (!regs[i + 0] && !regs[i + 1] && 6462 !regs[i + 2] && !regs[i + 3]) 6463 continue; 6464 6465 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 6466 i * 4, 6467 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 6468 } 6469 6470 kfree(regs); 6471 6472 for (i = 0; i < tp->irq_cnt; i++) { 6473 struct tg3_napi *tnapi = &tp->napi[i]; 6474 6475 /* SW status block */ 6476 netdev_err(tp->dev, 6477 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 6478 i, 6479 tnapi->hw_status->status, 6480 tnapi->hw_status->status_tag, 6481 tnapi->hw_status->rx_jumbo_consumer, 6482 tnapi->hw_status->rx_consumer, 6483 tnapi->hw_status->rx_mini_consumer, 6484 tnapi->hw_status->idx[0].rx_producer, 6485 tnapi->hw_status->idx[0].tx_consumer); 6486 6487 netdev_err(tp->dev, 6488 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 6489 i, 6490 tnapi->last_tag, tnapi->last_irq_tag, 6491 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 6492 tnapi->rx_rcb_ptr, 6493 tnapi->prodring.rx_std_prod_idx, 6494 tnapi->prodring.rx_std_cons_idx, 6495 tnapi->prodring.rx_jmb_prod_idx, 6496 tnapi->prodring.rx_jmb_cons_idx); 6497 } 6498} 6499 6500/* This is called whenever we suspect that the system chipset is re- 6501 * ordering the sequence of MMIO to the tx send mailbox. The symptom 6502 * is bogus tx completions. We try to recover by setting the 6503 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 6504 * in the workqueue. 6505 */ 6506static void tg3_tx_recover(struct tg3 *tp) 6507{ 6508 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 6509 tp->write32_tx_mbox == tg3_write_indirect_mbox); 6510 6511 netdev_warn(tp->dev, 6512 "The system may be re-ordering memory-mapped I/O " 6513 "cycles to the network device, attempting to recover. " 6514 "Please report the problem to the driver maintainer " 6515 "and include system chipset information.\n"); 6516 6517 tg3_flag_set(tp, TX_RECOVERY_PENDING); 6518} 6519 6520static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 6521{ 6522 /* Tell compiler to fetch tx indices from memory. */ 6523 barrier(); 6524 return tnapi->tx_pending - 6525 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 6526} 6527 6528/* Tigon3 never reports partial packet sends. So we do not 6529 * need special logic to handle SKBs that have not had all 6530 * of their frags sent yet, like SunGEM does. 6531 */ 6532static void tg3_tx(struct tg3_napi *tnapi) 6533{ 6534 struct tg3 *tp = tnapi->tp; 6535 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 6536 u32 sw_idx = tnapi->tx_cons; 6537 struct netdev_queue *txq; 6538 int index = tnapi - tp->napi; 6539 unsigned int pkts_compl = 0, bytes_compl = 0; 6540 6541 if (tg3_flag(tp, ENABLE_TSS)) 6542 index--; 6543 6544 txq = netdev_get_tx_queue(tp->dev, index); 6545 6546 while (sw_idx != hw_idx) { 6547 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 6548 struct sk_buff *skb = ri->skb; 6549 int i, tx_bug = 0; 6550 6551 if (unlikely(skb == NULL)) { 6552 tg3_tx_recover(tp); 6553 return; 6554 } 6555 6556 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { 6557 struct skb_shared_hwtstamps timestamp; 6558 u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); 6559 hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; 6560 6561 tg3_hwclock_to_timestamp(tp, hwclock, ×tamp); 6562 6563 skb_tstamp_tx(skb, ×tamp); 6564 } 6565 6566 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), 6567 skb_headlen(skb), DMA_TO_DEVICE); 6568 6569 ri->skb = NULL; 6570 6571 while (ri->fragmented) { 6572 ri->fragmented = false; 6573 sw_idx = NEXT_TX(sw_idx); 6574 ri = &tnapi->tx_buffers[sw_idx]; 6575 } 6576 6577 sw_idx = NEXT_TX(sw_idx); 6578 6579 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 6580 ri = &tnapi->tx_buffers[sw_idx]; 6581 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 6582 tx_bug = 1; 6583 6584 dma_unmap_page(&tp->pdev->dev, 6585 dma_unmap_addr(ri, mapping), 6586 skb_frag_size(&skb_shinfo(skb)->frags[i]), 6587 DMA_TO_DEVICE); 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 6598 pkts_compl++; 6599 bytes_compl += skb->len; 6600 6601 dev_consume_skb_any(skb); 6602 6603 if (unlikely(tx_bug)) { 6604 tg3_tx_recover(tp); 6605 return; 6606 } 6607 } 6608 6609 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 6610 6611 tnapi->tx_cons = sw_idx; 6612 6613 /* Need to make the tx_cons update visible to tg3_start_xmit() 6614 * before checking for netif_queue_stopped(). Without the 6615 * memory barrier, there is a small possibility that tg3_start_xmit() 6616 * will miss it and cause the queue to be stopped forever. 6617 */ 6618 smp_mb(); 6619 6620 if (unlikely(netif_tx_queue_stopped(txq) && 6621 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 6622 __netif_tx_lock(txq, smp_processor_id()); 6623 if (netif_tx_queue_stopped(txq) && 6624 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 6625 netif_tx_wake_queue(txq); 6626 __netif_tx_unlock(txq); 6627 } 6628} 6629 6630static void tg3_frag_free(bool is_frag, void *data) 6631{ 6632 if (is_frag) 6633 skb_free_frag(data); 6634 else 6635 kfree(data); 6636} 6637 6638static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 6639{ 6640 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 6641 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6642 6643 if (!ri->data) 6644 return; 6645 6646 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz, 6647 DMA_FROM_DEVICE); 6648 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 6649 ri->data = NULL; 6650} 6651 6652 6653/* Returns size of skb allocated or < 0 on error. 6654 * 6655 * We only need to fill in the address because the other members 6656 * of the RX descriptor are invariant, see tg3_init_rings. 6657 * 6658 * Note the purposeful assymetry of cpu vs. chip accesses. For 6659 * posting buffers we only dirty the first cache line of the RX 6660 * descriptor (containing the address). Whereas for the RX status 6661 * buffers the cpu only reads the last cacheline of the RX descriptor 6662 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 6663 */ 6664static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 6665 u32 opaque_key, u32 dest_idx_unmasked, 6666 unsigned int *frag_size) 6667{ 6668 struct tg3_rx_buffer_desc *desc; 6669 struct ring_info *map; 6670 u8 *data; 6671 dma_addr_t mapping; 6672 int skb_size, data_size, dest_idx; 6673 6674 switch (opaque_key) { 6675 case RXD_OPAQUE_RING_STD: 6676 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6677 desc = &tpr->rx_std[dest_idx]; 6678 map = &tpr->rx_std_buffers[dest_idx]; 6679 data_size = tp->rx_pkt_map_sz; 6680 break; 6681 6682 case RXD_OPAQUE_RING_JUMBO: 6683 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6684 desc = &tpr->rx_jmb[dest_idx].std; 6685 map = &tpr->rx_jmb_buffers[dest_idx]; 6686 data_size = TG3_RX_JMB_MAP_SZ; 6687 break; 6688 6689 default: 6690 return -EINVAL; 6691 } 6692 6693 /* Do not overwrite any of the map or rp information 6694 * until we are sure we can commit to a new buffer. 6695 * 6696 * Callers depend upon this behavior and assume that 6697 * we leave everything unchanged if we fail. 6698 */ 6699 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 6700 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6701 if (skb_size <= PAGE_SIZE) { 6702 data = napi_alloc_frag(skb_size); 6703 *frag_size = skb_size; 6704 } else { 6705 data = kmalloc(skb_size, GFP_ATOMIC); 6706 *frag_size = 0; 6707 } 6708 if (!data) 6709 return -ENOMEM; 6710 6711 mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp), 6712 data_size, DMA_FROM_DEVICE); 6713 if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) { 6714 tg3_frag_free(skb_size <= PAGE_SIZE, data); 6715 return -EIO; 6716 } 6717 6718 map->data = data; 6719 dma_unmap_addr_set(map, mapping, mapping); 6720 6721 desc->addr_hi = ((u64)mapping >> 32); 6722 desc->addr_lo = ((u64)mapping & 0xffffffff); 6723 6724 return data_size; 6725} 6726 6727/* We only need to move over in the address because the other 6728 * members of the RX descriptor are invariant. See notes above 6729 * tg3_alloc_rx_data for full details. 6730 */ 6731static void tg3_recycle_rx(struct tg3_napi *tnapi, 6732 struct tg3_rx_prodring_set *dpr, 6733 u32 opaque_key, int src_idx, 6734 u32 dest_idx_unmasked) 6735{ 6736 struct tg3 *tp = tnapi->tp; 6737 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 6738 struct ring_info *src_map, *dest_map; 6739 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 6740 int dest_idx; 6741 6742 switch (opaque_key) { 6743 case RXD_OPAQUE_RING_STD: 6744 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6745 dest_desc = &dpr->rx_std[dest_idx]; 6746 dest_map = &dpr->rx_std_buffers[dest_idx]; 6747 src_desc = &spr->rx_std[src_idx]; 6748 src_map = &spr->rx_std_buffers[src_idx]; 6749 break; 6750 6751 case RXD_OPAQUE_RING_JUMBO: 6752 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6753 dest_desc = &dpr->rx_jmb[dest_idx].std; 6754 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 6755 src_desc = &spr->rx_jmb[src_idx].std; 6756 src_map = &spr->rx_jmb_buffers[src_idx]; 6757 break; 6758 6759 default: 6760 return; 6761 } 6762 6763 dest_map->data = src_map->data; 6764 dma_unmap_addr_set(dest_map, mapping, 6765 dma_unmap_addr(src_map, mapping)); 6766 dest_desc->addr_hi = src_desc->addr_hi; 6767 dest_desc->addr_lo = src_desc->addr_lo; 6768 6769 /* Ensure that the update to the skb happens after the physical 6770 * addresses have been transferred to the new BD location. 6771 */ 6772 smp_wmb(); 6773 6774 src_map->data = NULL; 6775} 6776 6777/* The RX ring scheme is composed of multiple rings which post fresh 6778 * buffers to the chip, and one special ring the chip uses to report 6779 * status back to the host. 6780 * 6781 * The special ring reports the status of received packets to the 6782 * host. The chip does not write into the original descriptor the 6783 * RX buffer was obtained from. The chip simply takes the original 6784 * descriptor as provided by the host, updates the status and length 6785 * field, then writes this into the next status ring entry. 6786 * 6787 * Each ring the host uses to post buffers to the chip is described 6788 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 6789 * it is first placed into the on-chip ram. When the packet's length 6790 * is known, it walks down the TG3_BDINFO entries to select the ring. 6791 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 6792 * which is within the range of the new packet's length is chosen. 6793 * 6794 * The "separate ring for rx status" scheme may sound queer, but it makes 6795 * sense from a cache coherency perspective. If only the host writes 6796 * to the buffer post rings, and only the chip writes to the rx status 6797 * rings, then cache lines never move beyond shared-modified state. 6798 * If both the host and chip were to write into the same ring, cache line 6799 * eviction could occur since both entities want it in an exclusive state. 6800 */ 6801static int tg3_rx(struct tg3_napi *tnapi, int budget) 6802{ 6803 struct tg3 *tp = tnapi->tp; 6804 u32 work_mask, rx_std_posted = 0; 6805 u32 std_prod_idx, jmb_prod_idx; 6806 u32 sw_idx = tnapi->rx_rcb_ptr; 6807 u16 hw_idx; 6808 int received; 6809 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 6810 6811 hw_idx = *(tnapi->rx_rcb_prod_idx); 6812 /* 6813 * We need to order the read of hw_idx and the read of 6814 * the opaque cookie. 6815 */ 6816 rmb(); 6817 work_mask = 0; 6818 received = 0; 6819 std_prod_idx = tpr->rx_std_prod_idx; 6820 jmb_prod_idx = tpr->rx_jmb_prod_idx; 6821 while (sw_idx != hw_idx && budget > 0) { 6822 struct ring_info *ri; 6823 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 6824 unsigned int len; 6825 struct sk_buff *skb; 6826 dma_addr_t dma_addr; 6827 u32 opaque_key, desc_idx, *post_ptr; 6828 u8 *data; 6829 u64 tstamp = 0; 6830 6831 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 6832 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 6833 if (opaque_key == RXD_OPAQUE_RING_STD) { 6834 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 6835 dma_addr = dma_unmap_addr(ri, mapping); 6836 data = ri->data; 6837 post_ptr = &std_prod_idx; 6838 rx_std_posted++; 6839 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 6840 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 6841 dma_addr = dma_unmap_addr(ri, mapping); 6842 data = ri->data; 6843 post_ptr = &jmb_prod_idx; 6844 } else 6845 goto next_pkt_nopost; 6846 6847 work_mask |= opaque_key; 6848 6849 if (desc->err_vlan & RXD_ERR_MASK) { 6850 drop_it: 6851 tg3_recycle_rx(tnapi, tpr, opaque_key, 6852 desc_idx, *post_ptr); 6853 drop_it_no_recycle: 6854 /* Other statistics kept track of by card. */ 6855 tp->rx_dropped++; 6856 goto next_pkt; 6857 } 6858 6859 prefetch(data + TG3_RX_OFFSET(tp)); 6860 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 6861 ETH_FCS_LEN; 6862 6863 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6864 RXD_FLAG_PTPSTAT_PTPV1 || 6865 (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6866 RXD_FLAG_PTPSTAT_PTPV2) { 6867 tstamp = tr32(TG3_RX_TSTAMP_LSB); 6868 tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; 6869 } 6870 6871 if (len > TG3_RX_COPY_THRESH(tp)) { 6872 int skb_size; 6873 unsigned int frag_size; 6874 6875 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 6876 *post_ptr, &frag_size); 6877 if (skb_size < 0) 6878 goto drop_it; 6879 6880 dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size, 6881 DMA_FROM_DEVICE); 6882 6883 /* Ensure that the update to the data happens 6884 * after the usage of the old DMA mapping. 6885 */ 6886 smp_wmb(); 6887 6888 ri->data = NULL; 6889 6890 skb = build_skb(data, frag_size); 6891 if (!skb) { 6892 tg3_frag_free(frag_size != 0, data); 6893 goto drop_it_no_recycle; 6894 } 6895 skb_reserve(skb, TG3_RX_OFFSET(tp)); 6896 } else { 6897 tg3_recycle_rx(tnapi, tpr, opaque_key, 6898 desc_idx, *post_ptr); 6899 6900 skb = netdev_alloc_skb(tp->dev, 6901 len + TG3_RAW_IP_ALIGN); 6902 if (skb == NULL) 6903 goto drop_it_no_recycle; 6904 6905 skb_reserve(skb, TG3_RAW_IP_ALIGN); 6906 dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len, 6907 DMA_FROM_DEVICE); 6908 memcpy(skb->data, 6909 data + TG3_RX_OFFSET(tp), 6910 len); 6911 dma_sync_single_for_device(&tp->pdev->dev, dma_addr, 6912 len, DMA_FROM_DEVICE); 6913 } 6914 6915 skb_put(skb, len); 6916 if (tstamp) 6917 tg3_hwclock_to_timestamp(tp, tstamp, 6918 skb_hwtstamps(skb)); 6919 6920 if ((tp->dev->features & NETIF_F_RXCSUM) && 6921 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 6922 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 6923 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 6924 skb->ip_summed = CHECKSUM_UNNECESSARY; 6925 else 6926 skb_checksum_none_assert(skb); 6927 6928 skb->protocol = eth_type_trans(skb, tp->dev); 6929 6930 if (len > (tp->dev->mtu + ETH_HLEN) && 6931 skb->protocol != htons(ETH_P_8021Q) && 6932 skb->protocol != htons(ETH_P_8021AD)) { 6933 dev_kfree_skb_any(skb); 6934 goto drop_it_no_recycle; 6935 } 6936 6937 if (desc->type_flags & RXD_FLAG_VLAN && 6938 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6939 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 6940 desc->err_vlan & RXD_VLAN_MASK); 6941 6942 napi_gro_receive(&tnapi->napi, skb); 6943 6944 received++; 6945 budget--; 6946 6947next_pkt: 6948 (*post_ptr)++; 6949 6950 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6951 tpr->rx_std_prod_idx = std_prod_idx & 6952 tp->rx_std_ring_mask; 6953 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6954 tpr->rx_std_prod_idx); 6955 work_mask &= ~RXD_OPAQUE_RING_STD; 6956 rx_std_posted = 0; 6957 } 6958next_pkt_nopost: 6959 sw_idx++; 6960 sw_idx &= tp->rx_ret_ring_mask; 6961 6962 /* Refresh hw_idx to see if there is new work */ 6963 if (sw_idx == hw_idx) { 6964 hw_idx = *(tnapi->rx_rcb_prod_idx); 6965 rmb(); 6966 } 6967 } 6968 6969 /* ACK the status ring. */ 6970 tnapi->rx_rcb_ptr = sw_idx; 6971 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6972 6973 /* Refill RX ring(s). */ 6974 if (!tg3_flag(tp, ENABLE_RSS)) { 6975 /* Sync BD data before updating mailbox */ 6976 wmb(); 6977 6978 if (work_mask & RXD_OPAQUE_RING_STD) { 6979 tpr->rx_std_prod_idx = std_prod_idx & 6980 tp->rx_std_ring_mask; 6981 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6982 tpr->rx_std_prod_idx); 6983 } 6984 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 6985 tpr->rx_jmb_prod_idx = jmb_prod_idx & 6986 tp->rx_jmb_ring_mask; 6987 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6988 tpr->rx_jmb_prod_idx); 6989 } 6990 } else if (work_mask) { 6991 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 6992 * updated before the producer indices can be updated. 6993 */ 6994 smp_wmb(); 6995 6996 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 6997 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 6998 6999 if (tnapi != &tp->napi[1]) { 7000 tp->rx_refill = true; 7001 napi_schedule(&tp->napi[1].napi); 7002 } 7003 } 7004 7005 return received; 7006} 7007 7008static void tg3_poll_link(struct tg3 *tp) 7009{ 7010 /* handle link change and other phy events */ 7011 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 7012 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 7013 7014 if (sblk->status & SD_STATUS_LINK_CHG) { 7015 sblk->status = SD_STATUS_UPDATED | 7016 (sblk->status & ~SD_STATUS_LINK_CHG); 7017 spin_lock(&tp->lock); 7018 if (tg3_flag(tp, USE_PHYLIB)) { 7019 tw32_f(MAC_STATUS, 7020 (MAC_STATUS_SYNC_CHANGED | 7021 MAC_STATUS_CFG_CHANGED | 7022 MAC_STATUS_MI_COMPLETION | 7023 MAC_STATUS_LNKSTATE_CHANGED)); 7024 udelay(40); 7025 } else 7026 tg3_setup_phy(tp, false); 7027 spin_unlock(&tp->lock); 7028 } 7029 } 7030} 7031 7032static int tg3_rx_prodring_xfer(struct tg3 *tp, 7033 struct tg3_rx_prodring_set *dpr, 7034 struct tg3_rx_prodring_set *spr) 7035{ 7036 u32 si, di, cpycnt, src_prod_idx; 7037 int i, err = 0; 7038 7039 while (1) { 7040 src_prod_idx = spr->rx_std_prod_idx; 7041 7042 /* Make sure updates to the rx_std_buffers[] entries and the 7043 * standard producer index are seen in the correct order. 7044 */ 7045 smp_rmb(); 7046 7047 if (spr->rx_std_cons_idx == src_prod_idx) 7048 break; 7049 7050 if (spr->rx_std_cons_idx < src_prod_idx) 7051 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 7052 else 7053 cpycnt = tp->rx_std_ring_mask + 1 - 7054 spr->rx_std_cons_idx; 7055 7056 cpycnt = min(cpycnt, 7057 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 7058 7059 si = spr->rx_std_cons_idx; 7060 di = dpr->rx_std_prod_idx; 7061 7062 for (i = di; i < di + cpycnt; i++) { 7063 if (dpr->rx_std_buffers[i].data) { 7064 cpycnt = i - di; 7065 err = -ENOSPC; 7066 break; 7067 } 7068 } 7069 7070 if (!cpycnt) 7071 break; 7072 7073 /* Ensure that updates to the rx_std_buffers ring and the 7074 * shadowed hardware producer ring from tg3_recycle_skb() are 7075 * ordered correctly WRT the skb check above. 7076 */ 7077 smp_rmb(); 7078 7079 memcpy(&dpr->rx_std_buffers[di], 7080 &spr->rx_std_buffers[si], 7081 cpycnt * sizeof(struct ring_info)); 7082 7083 for (i = 0; i < cpycnt; i++, di++, si++) { 7084 struct tg3_rx_buffer_desc *sbd, *dbd; 7085 sbd = &spr->rx_std[si]; 7086 dbd = &dpr->rx_std[di]; 7087 dbd->addr_hi = sbd->addr_hi; 7088 dbd->addr_lo = sbd->addr_lo; 7089 } 7090 7091 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 7092 tp->rx_std_ring_mask; 7093 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 7094 tp->rx_std_ring_mask; 7095 } 7096 7097 while (1) { 7098 src_prod_idx = spr->rx_jmb_prod_idx; 7099 7100 /* Make sure updates to the rx_jmb_buffers[] entries and 7101 * the jumbo producer index are seen in the correct order. 7102 */ 7103 smp_rmb(); 7104 7105 if (spr->rx_jmb_cons_idx == src_prod_idx) 7106 break; 7107 7108 if (spr->rx_jmb_cons_idx < src_prod_idx) 7109 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 7110 else 7111 cpycnt = tp->rx_jmb_ring_mask + 1 - 7112 spr->rx_jmb_cons_idx; 7113 7114 cpycnt = min(cpycnt, 7115 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 7116 7117 si = spr->rx_jmb_cons_idx; 7118 di = dpr->rx_jmb_prod_idx; 7119 7120 for (i = di; i < di + cpycnt; i++) { 7121 if (dpr->rx_jmb_buffers[i].data) { 7122 cpycnt = i - di; 7123 err = -ENOSPC; 7124 break; 7125 } 7126 } 7127 7128 if (!cpycnt) 7129 break; 7130 7131 /* Ensure that updates to the rx_jmb_buffers ring and the 7132 * shadowed hardware producer ring from tg3_recycle_skb() are 7133 * ordered correctly WRT the skb check above. 7134 */ 7135 smp_rmb(); 7136 7137 memcpy(&dpr->rx_jmb_buffers[di], 7138 &spr->rx_jmb_buffers[si], 7139 cpycnt * sizeof(struct ring_info)); 7140 7141 for (i = 0; i < cpycnt; i++, di++, si++) { 7142 struct tg3_rx_buffer_desc *sbd, *dbd; 7143 sbd = &spr->rx_jmb[si].std; 7144 dbd = &dpr->rx_jmb[di].std; 7145 dbd->addr_hi = sbd->addr_hi; 7146 dbd->addr_lo = sbd->addr_lo; 7147 } 7148 7149 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 7150 tp->rx_jmb_ring_mask; 7151 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 7152 tp->rx_jmb_ring_mask; 7153 } 7154 7155 return err; 7156} 7157 7158static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 7159{ 7160 struct tg3 *tp = tnapi->tp; 7161 7162 /* run TX completion thread */ 7163 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 7164 tg3_tx(tnapi); 7165 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7166 return work_done; 7167 } 7168 7169 if (!tnapi->rx_rcb_prod_idx) 7170 return work_done; 7171 7172 /* run RX thread, within the bounds set by NAPI. 7173 * All RX "locking" is done by ensuring outside 7174 * code synchronizes with tg3->napi.poll() 7175 */ 7176 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 7177 work_done += tg3_rx(tnapi, budget - work_done); 7178 7179 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 7180 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 7181 int i, err = 0; 7182 u32 std_prod_idx = dpr->rx_std_prod_idx; 7183 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 7184 7185 tp->rx_refill = false; 7186 for (i = 1; i <= tp->rxq_cnt; i++) 7187 err |= tg3_rx_prodring_xfer(tp, dpr, 7188 &tp->napi[i].prodring); 7189 7190 wmb(); 7191 7192 if (std_prod_idx != dpr->rx_std_prod_idx) 7193 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 7194 dpr->rx_std_prod_idx); 7195 7196 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 7197 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 7198 dpr->rx_jmb_prod_idx); 7199 7200 if (err) 7201 tw32_f(HOSTCC_MODE, tp->coal_now); 7202 } 7203 7204 return work_done; 7205} 7206 7207static inline void tg3_reset_task_schedule(struct tg3 *tp) 7208{ 7209 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7210 schedule_work(&tp->reset_task); 7211} 7212 7213static inline void tg3_reset_task_cancel(struct tg3 *tp) 7214{ 7215 if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7216 cancel_work_sync(&tp->reset_task); 7217 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 7218} 7219 7220static int tg3_poll_msix(struct napi_struct *napi, int budget) 7221{ 7222 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7223 struct tg3 *tp = tnapi->tp; 7224 int work_done = 0; 7225 struct tg3_hw_status *sblk = tnapi->hw_status; 7226 7227 while (1) { 7228 work_done = tg3_poll_work(tnapi, work_done, budget); 7229 7230 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7231 goto tx_recovery; 7232 7233 if (unlikely(work_done >= budget)) 7234 break; 7235 7236 /* tp->last_tag is used in tg3_int_reenable() below 7237 * to tell the hw how much work has been processed, 7238 * so we must read it before checking for more work. 7239 */ 7240 tnapi->last_tag = sblk->status_tag; 7241 tnapi->last_irq_tag = tnapi->last_tag; 7242 rmb(); 7243 7244 /* check for RX/TX work to do */ 7245 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 7246 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 7247 7248 /* This test here is not race free, but will reduce 7249 * the number of interrupts by looping again. 7250 */ 7251 if (tnapi == &tp->napi[1] && tp->rx_refill) 7252 continue; 7253 7254 napi_complete_done(napi, work_done); 7255 /* Reenable interrupts. */ 7256 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 7257 7258 /* This test here is synchronized by napi_schedule() 7259 * and napi_complete() to close the race condition. 7260 */ 7261 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 7262 tw32(HOSTCC_MODE, tp->coalesce_mode | 7263 HOSTCC_MODE_ENABLE | 7264 tnapi->coal_now); 7265 } 7266 break; 7267 } 7268 } 7269 7270 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7271 return work_done; 7272 7273tx_recovery: 7274 /* work_done is guaranteed to be less than budget. */ 7275 napi_complete(napi); 7276 tg3_reset_task_schedule(tp); 7277 return work_done; 7278} 7279 7280static void tg3_process_error(struct tg3 *tp) 7281{ 7282 u32 val; 7283 bool real_error = false; 7284 7285 if (tg3_flag(tp, ERROR_PROCESSED)) 7286 return; 7287 7288 /* Check Flow Attention register */ 7289 val = tr32(HOSTCC_FLOW_ATTN); 7290 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 7291 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 7292 real_error = true; 7293 } 7294 7295 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 7296 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 7297 real_error = true; 7298 } 7299 7300 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 7301 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 7302 real_error = true; 7303 } 7304 7305 if (!real_error) 7306 return; 7307 7308 tg3_dump_state(tp); 7309 7310 tg3_flag_set(tp, ERROR_PROCESSED); 7311 tg3_reset_task_schedule(tp); 7312} 7313 7314static int tg3_poll(struct napi_struct *napi, int budget) 7315{ 7316 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7317 struct tg3 *tp = tnapi->tp; 7318 int work_done = 0; 7319 struct tg3_hw_status *sblk = tnapi->hw_status; 7320 7321 while (1) { 7322 if (sblk->status & SD_STATUS_ERROR) 7323 tg3_process_error(tp); 7324 7325 tg3_poll_link(tp); 7326 7327 work_done = tg3_poll_work(tnapi, work_done, budget); 7328 7329 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7330 goto tx_recovery; 7331 7332 if (unlikely(work_done >= budget)) 7333 break; 7334 7335 if (tg3_flag(tp, TAGGED_STATUS)) { 7336 /* tp->last_tag is used in tg3_int_reenable() below 7337 * to tell the hw how much work has been processed, 7338 * so we must read it before checking for more work. 7339 */ 7340 tnapi->last_tag = sblk->status_tag; 7341 tnapi->last_irq_tag = tnapi->last_tag; 7342 rmb(); 7343 } else 7344 sblk->status &= ~SD_STATUS_UPDATED; 7345 7346 if (likely(!tg3_has_work(tnapi))) { 7347 napi_complete_done(napi, work_done); 7348 tg3_int_reenable(tnapi); 7349 break; 7350 } 7351 } 7352 7353 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7354 return work_done; 7355 7356tx_recovery: 7357 /* work_done is guaranteed to be less than budget. */ 7358 napi_complete(napi); 7359 tg3_reset_task_schedule(tp); 7360 return work_done; 7361} 7362 7363static void tg3_napi_disable(struct tg3 *tp) 7364{ 7365 int i; 7366 7367 for (i = tp->irq_cnt - 1; i >= 0; i--) 7368 napi_disable(&tp->napi[i].napi); 7369} 7370 7371static void tg3_napi_enable(struct tg3 *tp) 7372{ 7373 int i; 7374 7375 for (i = 0; i < tp->irq_cnt; i++) 7376 napi_enable(&tp->napi[i].napi); 7377} 7378 7379static void tg3_napi_init(struct tg3 *tp) 7380{ 7381 int i; 7382 7383 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 7384 for (i = 1; i < tp->irq_cnt; i++) 7385 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 7386} 7387 7388static void tg3_napi_fini(struct tg3 *tp) 7389{ 7390 int i; 7391 7392 for (i = 0; i < tp->irq_cnt; i++) 7393 netif_napi_del(&tp->napi[i].napi); 7394} 7395 7396static inline void tg3_netif_stop(struct tg3 *tp) 7397{ 7398 netif_trans_update(tp->dev); /* prevent tx timeout */ 7399 tg3_napi_disable(tp); 7400 netif_carrier_off(tp->dev); 7401 netif_tx_disable(tp->dev); 7402} 7403 7404/* tp->lock must be held */ 7405static inline void tg3_netif_start(struct tg3 *tp) 7406{ 7407 tg3_ptp_resume(tp); 7408 7409 /* NOTE: unconditional netif_tx_wake_all_queues is only 7410 * appropriate so long as all callers are assured to 7411 * have free tx slots (such as after tg3_init_hw) 7412 */ 7413 netif_tx_wake_all_queues(tp->dev); 7414 7415 if (tp->link_up) 7416 netif_carrier_on(tp->dev); 7417 7418 tg3_napi_enable(tp); 7419 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 7420 tg3_enable_ints(tp); 7421} 7422 7423static void tg3_irq_quiesce(struct tg3 *tp) 7424 __releases(tp->lock) 7425 __acquires(tp->lock) 7426{ 7427 int i; 7428 7429 BUG_ON(tp->irq_sync); 7430 7431 tp->irq_sync = 1; 7432 smp_mb(); 7433 7434 spin_unlock_bh(&tp->lock); 7435 7436 for (i = 0; i < tp->irq_cnt; i++) 7437 synchronize_irq(tp->napi[i].irq_vec); 7438 7439 spin_lock_bh(&tp->lock); 7440} 7441 7442/* Fully shutdown all tg3 driver activity elsewhere in the system. 7443 * If irq_sync is non-zero, then the IRQ handler must be synchronized 7444 * with as well. Most of the time, this is not necessary except when 7445 * shutting down the device. 7446 */ 7447static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 7448{ 7449 spin_lock_bh(&tp->lock); 7450 if (irq_sync) 7451 tg3_irq_quiesce(tp); 7452} 7453 7454static inline void tg3_full_unlock(struct tg3 *tp) 7455{ 7456 spin_unlock_bh(&tp->lock); 7457} 7458 7459/* One-shot MSI handler - Chip automatically disables interrupt 7460 * after sending MSI so driver doesn't have to do it. 7461 */ 7462static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 7463{ 7464 struct tg3_napi *tnapi = dev_id; 7465 struct tg3 *tp = tnapi->tp; 7466 7467 prefetch(tnapi->hw_status); 7468 if (tnapi->rx_rcb) 7469 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7470 7471 if (likely(!tg3_irq_sync(tp))) 7472 napi_schedule(&tnapi->napi); 7473 7474 return IRQ_HANDLED; 7475} 7476 7477/* MSI ISR - No need to check for interrupt sharing and no need to 7478 * flush status block and interrupt mailbox. PCI ordering rules 7479 * guarantee that MSI will arrive after the status block. 7480 */ 7481static irqreturn_t tg3_msi(int irq, void *dev_id) 7482{ 7483 struct tg3_napi *tnapi = dev_id; 7484 struct tg3 *tp = tnapi->tp; 7485 7486 prefetch(tnapi->hw_status); 7487 if (tnapi->rx_rcb) 7488 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7489 /* 7490 * Writing any value to intr-mbox-0 clears PCI INTA# and 7491 * chip-internal interrupt pending events. 7492 * Writing non-zero to intr-mbox-0 additional tells the 7493 * NIC to stop sending us irqs, engaging "in-intr-handler" 7494 * event coalescing. 7495 */ 7496 tw32_mailbox(tnapi->int_mbox, 0x00000001); 7497 if (likely(!tg3_irq_sync(tp))) 7498 napi_schedule(&tnapi->napi); 7499 7500 return IRQ_RETVAL(1); 7501} 7502 7503static irqreturn_t tg3_interrupt(int irq, void *dev_id) 7504{ 7505 struct tg3_napi *tnapi = dev_id; 7506 struct tg3 *tp = tnapi->tp; 7507 struct tg3_hw_status *sblk = tnapi->hw_status; 7508 unsigned int handled = 1; 7509 7510 /* In INTx mode, it is possible for the interrupt to arrive at 7511 * the CPU before the status block posted prior to the interrupt. 7512 * Reading the PCI State register will confirm whether the 7513 * interrupt is ours and will flush the status block. 7514 */ 7515 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 7516 if (tg3_flag(tp, CHIP_RESETTING) || 7517 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7518 handled = 0; 7519 goto out; 7520 } 7521 } 7522 7523 /* 7524 * Writing any value to intr-mbox-0 clears PCI INTA# and 7525 * chip-internal interrupt pending events. 7526 * Writing non-zero to intr-mbox-0 additional tells the 7527 * NIC to stop sending us irqs, engaging "in-intr-handler" 7528 * event coalescing. 7529 * 7530 * Flush the mailbox to de-assert the IRQ immediately to prevent 7531 * spurious interrupts. The flush impacts performance but 7532 * excessive spurious interrupts can be worse in some cases. 7533 */ 7534 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7535 if (tg3_irq_sync(tp)) 7536 goto out; 7537 sblk->status &= ~SD_STATUS_UPDATED; 7538 if (likely(tg3_has_work(tnapi))) { 7539 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7540 napi_schedule(&tnapi->napi); 7541 } else { 7542 /* No work, shared interrupt perhaps? re-enable 7543 * interrupts, and flush that PCI write 7544 */ 7545 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 7546 0x00000000); 7547 } 7548out: 7549 return IRQ_RETVAL(handled); 7550} 7551 7552static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 7553{ 7554 struct tg3_napi *tnapi = dev_id; 7555 struct tg3 *tp = tnapi->tp; 7556 struct tg3_hw_status *sblk = tnapi->hw_status; 7557 unsigned int handled = 1; 7558 7559 /* In INTx mode, it is possible for the interrupt to arrive at 7560 * the CPU before the status block posted prior to the interrupt. 7561 * Reading the PCI State register will confirm whether the 7562 * interrupt is ours and will flush the status block. 7563 */ 7564 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 7565 if (tg3_flag(tp, CHIP_RESETTING) || 7566 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7567 handled = 0; 7568 goto out; 7569 } 7570 } 7571 7572 /* 7573 * writing any value to intr-mbox-0 clears PCI INTA# and 7574 * chip-internal interrupt pending events. 7575 * writing non-zero to intr-mbox-0 additional tells the 7576 * NIC to stop sending us irqs, engaging "in-intr-handler" 7577 * event coalescing. 7578 * 7579 * Flush the mailbox to de-assert the IRQ immediately to prevent 7580 * spurious interrupts. The flush impacts performance but 7581 * excessive spurious interrupts can be worse in some cases. 7582 */ 7583 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7584 7585 /* 7586 * In a shared interrupt configuration, sometimes other devices' 7587 * interrupts will scream. We record the current status tag here 7588 * so that the above check can report that the screaming interrupts 7589 * are unhandled. Eventually they will be silenced. 7590 */ 7591 tnapi->last_irq_tag = sblk->status_tag; 7592 7593 if (tg3_irq_sync(tp)) 7594 goto out; 7595 7596 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7597 7598 napi_schedule(&tnapi->napi); 7599 7600out: 7601 return IRQ_RETVAL(handled); 7602} 7603 7604/* ISR for interrupt test */ 7605static irqreturn_t tg3_test_isr(int irq, void *dev_id) 7606{ 7607 struct tg3_napi *tnapi = dev_id; 7608 struct tg3 *tp = tnapi->tp; 7609 struct tg3_hw_status *sblk = tnapi->hw_status; 7610 7611 if ((sblk->status & SD_STATUS_UPDATED) || 7612 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7613 tg3_disable_ints(tp); 7614 return IRQ_RETVAL(1); 7615 } 7616 return IRQ_RETVAL(0); 7617} 7618 7619#ifdef CONFIG_NET_POLL_CONTROLLER 7620static void tg3_poll_controller(struct net_device *dev) 7621{ 7622 int i; 7623 struct tg3 *tp = netdev_priv(dev); 7624 7625 if (tg3_irq_sync(tp)) 7626 return; 7627 7628 for (i = 0; i < tp->irq_cnt; i++) 7629 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 7630} 7631#endif 7632 7633static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue) 7634{ 7635 struct tg3 *tp = netdev_priv(dev); 7636 7637 if (netif_msg_tx_err(tp)) { 7638 netdev_err(dev, "transmit timed out, resetting\n"); 7639 tg3_dump_state(tp); 7640 } 7641 7642 tg3_reset_task_schedule(tp); 7643} 7644 7645/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 7646static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 7647{ 7648 u32 base = (u32) mapping & 0xffffffff; 7649 7650 return base + len + 8 < base; 7651} 7652 7653/* Test for TSO DMA buffers that cross into regions which are within MSS bytes 7654 * of any 4GB boundaries: 4G, 8G, etc 7655 */ 7656static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7657 u32 len, u32 mss) 7658{ 7659 if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) { 7660 u32 base = (u32) mapping & 0xffffffff; 7661 7662 return ((base + len + (mss & 0x3fff)) < base); 7663 } 7664 return 0; 7665} 7666 7667/* Test for DMA addresses > 40-bit */ 7668static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7669 int len) 7670{ 7671#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 7672 if (tg3_flag(tp, 40BIT_DMA_BUG)) 7673 return ((u64) mapping + len) > DMA_BIT_MASK(40); 7674 return 0; 7675#else 7676 return 0; 7677#endif 7678} 7679 7680static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 7681 dma_addr_t mapping, u32 len, u32 flags, 7682 u32 mss, u32 vlan) 7683{ 7684 txbd->addr_hi = ((u64) mapping >> 32); 7685 txbd->addr_lo = ((u64) mapping & 0xffffffff); 7686 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 7687 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 7688} 7689 7690static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 7691 dma_addr_t map, u32 len, u32 flags, 7692 u32 mss, u32 vlan) 7693{ 7694 struct tg3 *tp = tnapi->tp; 7695 bool hwbug = false; 7696 7697 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 7698 hwbug = true; 7699 7700 if (tg3_4g_overflow_test(map, len)) 7701 hwbug = true; 7702 7703 if (tg3_4g_tso_overflow_test(tp, map, len, mss)) 7704 hwbug = true; 7705 7706 if (tg3_40bit_overflow_test(tp, map, len)) 7707 hwbug = true; 7708 7709 if (tp->dma_limit) { 7710 u32 prvidx = *entry; 7711 u32 tmp_flag = flags & ~TXD_FLAG_END; 7712 while (len > tp->dma_limit && *budget) { 7713 u32 frag_len = tp->dma_limit; 7714 len -= tp->dma_limit; 7715 7716 /* Avoid the 8byte DMA problem */ 7717 if (len <= 8) { 7718 len += tp->dma_limit / 2; 7719 frag_len = tp->dma_limit / 2; 7720 } 7721 7722 tnapi->tx_buffers[*entry].fragmented = true; 7723 7724 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7725 frag_len, tmp_flag, mss, vlan); 7726 *budget -= 1; 7727 prvidx = *entry; 7728 *entry = NEXT_TX(*entry); 7729 7730 map += frag_len; 7731 } 7732 7733 if (len) { 7734 if (*budget) { 7735 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7736 len, flags, mss, vlan); 7737 *budget -= 1; 7738 *entry = NEXT_TX(*entry); 7739 } else { 7740 hwbug = true; 7741 tnapi->tx_buffers[prvidx].fragmented = false; 7742 } 7743 } 7744 } else { 7745 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7746 len, flags, mss, vlan); 7747 *entry = NEXT_TX(*entry); 7748 } 7749 7750 return hwbug; 7751} 7752 7753static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 7754{ 7755 int i; 7756 struct sk_buff *skb; 7757 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 7758 7759 skb = txb->skb; 7760 txb->skb = NULL; 7761 7762 dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping), 7763 skb_headlen(skb), DMA_TO_DEVICE); 7764 7765 while (txb->fragmented) { 7766 txb->fragmented = false; 7767 entry = NEXT_TX(entry); 7768 txb = &tnapi->tx_buffers[entry]; 7769 } 7770 7771 for (i = 0; i <= last; i++) { 7772 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7773 7774 entry = NEXT_TX(entry); 7775 txb = &tnapi->tx_buffers[entry]; 7776 7777 dma_unmap_page(&tnapi->tp->pdev->dev, 7778 dma_unmap_addr(txb, mapping), 7779 skb_frag_size(frag), DMA_TO_DEVICE); 7780 7781 while (txb->fragmented) { 7782 txb->fragmented = false; 7783 entry = NEXT_TX(entry); 7784 txb = &tnapi->tx_buffers[entry]; 7785 } 7786 } 7787} 7788 7789/* Workaround 4GB and 40-bit hardware DMA bugs. */ 7790static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 7791 struct sk_buff **pskb, 7792 u32 *entry, u32 *budget, 7793 u32 base_flags, u32 mss, u32 vlan) 7794{ 7795 struct tg3 *tp = tnapi->tp; 7796 struct sk_buff *new_skb, *skb = *pskb; 7797 dma_addr_t new_addr = 0; 7798 int ret = 0; 7799 7800 if (tg3_asic_rev(tp) != ASIC_REV_5701) 7801 new_skb = skb_copy(skb, GFP_ATOMIC); 7802 else { 7803 int more_headroom = 4 - ((unsigned long)skb->data & 3); 7804 7805 new_skb = skb_copy_expand(skb, 7806 skb_headroom(skb) + more_headroom, 7807 skb_tailroom(skb), GFP_ATOMIC); 7808 } 7809 7810 if (!new_skb) { 7811 ret = -1; 7812 } else { 7813 /* New SKB is guaranteed to be linear. */ 7814 new_addr = dma_map_single(&tp->pdev->dev, new_skb->data, 7815 new_skb->len, DMA_TO_DEVICE); 7816 /* Make sure the mapping succeeded */ 7817 if (dma_mapping_error(&tp->pdev->dev, new_addr)) { 7818 dev_kfree_skb_any(new_skb); 7819 ret = -1; 7820 } else { 7821 u32 save_entry = *entry; 7822 7823 base_flags |= TXD_FLAG_END; 7824 7825 tnapi->tx_buffers[*entry].skb = new_skb; 7826 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 7827 mapping, new_addr); 7828 7829 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 7830 new_skb->len, base_flags, 7831 mss, vlan)) { 7832 tg3_tx_skb_unmap(tnapi, save_entry, -1); 7833 dev_kfree_skb_any(new_skb); 7834 ret = -1; 7835 } 7836 } 7837 } 7838 7839 dev_consume_skb_any(skb); 7840 *pskb = new_skb; 7841 return ret; 7842} 7843 7844static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb) 7845{ 7846 /* Check if we will never have enough descriptors, 7847 * as gso_segs can be more than current ring size 7848 */ 7849 return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3; 7850} 7851 7852static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 7853 7854/* Use GSO to workaround all TSO packets that meet HW bug conditions 7855 * indicated in tg3_tx_frag_set() 7856 */ 7857static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi, 7858 struct netdev_queue *txq, struct sk_buff *skb) 7859{ 7860 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 7861 struct sk_buff *segs, *seg, *next; 7862 7863 /* Estimate the number of fragments in the worst case */ 7864 if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) { 7865 netif_tx_stop_queue(txq); 7866 7867 /* netif_tx_stop_queue() must be done before checking 7868 * checking tx index in tg3_tx_avail() below, because in 7869 * tg3_tx(), we update tx index before checking for 7870 * netif_tx_queue_stopped(). 7871 */ 7872 smp_mb(); 7873 if (tg3_tx_avail(tnapi) <= frag_cnt_est) 7874 return NETDEV_TX_BUSY; 7875 7876 netif_tx_wake_queue(txq); 7877 } 7878 7879 segs = skb_gso_segment(skb, tp->dev->features & 7880 ~(NETIF_F_TSO | NETIF_F_TSO6)); 7881 if (IS_ERR(segs) || !segs) 7882 goto tg3_tso_bug_end; 7883 7884 skb_list_walk_safe(segs, seg, next) { 7885 skb_mark_not_on_list(seg); 7886 tg3_start_xmit(seg, tp->dev); 7887 } 7888 7889tg3_tso_bug_end: 7890 dev_consume_skb_any(skb); 7891 7892 return NETDEV_TX_OK; 7893} 7894 7895/* hard_start_xmit for all devices */ 7896static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 7897{ 7898 struct tg3 *tp = netdev_priv(dev); 7899 u32 len, entry, base_flags, mss, vlan = 0; 7900 u32 budget; 7901 int i = -1, would_hit_hwbug; 7902 dma_addr_t mapping; 7903 struct tg3_napi *tnapi; 7904 struct netdev_queue *txq; 7905 unsigned int last; 7906 struct iphdr *iph = NULL; 7907 struct tcphdr *tcph = NULL; 7908 __sum16 tcp_csum = 0, ip_csum = 0; 7909 __be16 ip_tot_len = 0; 7910 7911 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 7912 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 7913 if (tg3_flag(tp, ENABLE_TSS)) 7914 tnapi++; 7915 7916 budget = tg3_tx_avail(tnapi); 7917 7918 /* We are running in BH disabled context with netif_tx_lock 7919 * and TX reclaim runs via tp->napi.poll inside of a software 7920 * interrupt. Furthermore, IRQ processing runs lockless so we have 7921 * no IRQ context deadlocks to worry about either. Rejoice! 7922 */ 7923 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 7924 if (!netif_tx_queue_stopped(txq)) { 7925 netif_tx_stop_queue(txq); 7926 7927 /* This is a hard error, log it. */ 7928 netdev_err(dev, 7929 "BUG! Tx Ring full when queue awake!\n"); 7930 } 7931 return NETDEV_TX_BUSY; 7932 } 7933 7934 entry = tnapi->tx_prod; 7935 base_flags = 0; 7936 7937 mss = skb_shinfo(skb)->gso_size; 7938 if (mss) { 7939 u32 tcp_opt_len, hdr_len; 7940 7941 if (skb_cow_head(skb, 0)) 7942 goto drop; 7943 7944 iph = ip_hdr(skb); 7945 tcp_opt_len = tcp_optlen(skb); 7946 7947 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 7948 7949 /* HW/FW can not correctly segment packets that have been 7950 * vlan encapsulated. 7951 */ 7952 if (skb->protocol == htons(ETH_P_8021Q) || 7953 skb->protocol == htons(ETH_P_8021AD)) { 7954 if (tg3_tso_bug_gso_check(tnapi, skb)) 7955 return tg3_tso_bug(tp, tnapi, txq, skb); 7956 goto drop; 7957 } 7958 7959 if (!skb_is_gso_v6(skb)) { 7960 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7961 tg3_flag(tp, TSO_BUG)) { 7962 if (tg3_tso_bug_gso_check(tnapi, skb)) 7963 return tg3_tso_bug(tp, tnapi, txq, skb); 7964 goto drop; 7965 } 7966 ip_csum = iph->check; 7967 ip_tot_len = iph->tot_len; 7968 iph->check = 0; 7969 iph->tot_len = htons(mss + hdr_len); 7970 } 7971 7972 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 7973 TXD_FLAG_CPU_POST_DMA); 7974 7975 tcph = tcp_hdr(skb); 7976 tcp_csum = tcph->check; 7977 7978 if (tg3_flag(tp, HW_TSO_1) || 7979 tg3_flag(tp, HW_TSO_2) || 7980 tg3_flag(tp, HW_TSO_3)) { 7981 tcph->check = 0; 7982 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 7983 } else { 7984 tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 7985 0, IPPROTO_TCP, 0); 7986 } 7987 7988 if (tg3_flag(tp, HW_TSO_3)) { 7989 mss |= (hdr_len & 0xc) << 12; 7990 if (hdr_len & 0x10) 7991 base_flags |= 0x00000010; 7992 base_flags |= (hdr_len & 0x3e0) << 5; 7993 } else if (tg3_flag(tp, HW_TSO_2)) 7994 mss |= hdr_len << 9; 7995 else if (tg3_flag(tp, HW_TSO_1) || 7996 tg3_asic_rev(tp) == ASIC_REV_5705) { 7997 if (tcp_opt_len || iph->ihl > 5) { 7998 int tsflags; 7999 8000 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8001 mss |= (tsflags << 11); 8002 } 8003 } else { 8004 if (tcp_opt_len || iph->ihl > 5) { 8005 int tsflags; 8006 8007 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8008 base_flags |= tsflags << 12; 8009 } 8010 } 8011 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { 8012 /* HW/FW can not correctly checksum packets that have been 8013 * vlan encapsulated. 8014 */ 8015 if (skb->protocol == htons(ETH_P_8021Q) || 8016 skb->protocol == htons(ETH_P_8021AD)) { 8017 if (skb_checksum_help(skb)) 8018 goto drop; 8019 } else { 8020 base_flags |= TXD_FLAG_TCPUDP_CSUM; 8021 } 8022 } 8023 8024 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 8025 !mss && skb->len > VLAN_ETH_FRAME_LEN) 8026 base_flags |= TXD_FLAG_JMB_PKT; 8027 8028 if (skb_vlan_tag_present(skb)) { 8029 base_flags |= TXD_FLAG_VLAN; 8030 vlan = skb_vlan_tag_get(skb); 8031 } 8032 8033 if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && 8034 tg3_flag(tp, TX_TSTAMP_EN)) { 8035 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 8036 base_flags |= TXD_FLAG_HWTSTAMP; 8037 } 8038 8039 len = skb_headlen(skb); 8040 8041 mapping = dma_map_single(&tp->pdev->dev, skb->data, len, 8042 DMA_TO_DEVICE); 8043 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8044 goto drop; 8045 8046 8047 tnapi->tx_buffers[entry].skb = skb; 8048 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 8049 8050 would_hit_hwbug = 0; 8051 8052 if (tg3_flag(tp, 5701_DMA_BUG)) 8053 would_hit_hwbug = 1; 8054 8055 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 8056 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 8057 mss, vlan)) { 8058 would_hit_hwbug = 1; 8059 } else if (skb_shinfo(skb)->nr_frags > 0) { 8060 u32 tmp_mss = mss; 8061 8062 if (!tg3_flag(tp, HW_TSO_1) && 8063 !tg3_flag(tp, HW_TSO_2) && 8064 !tg3_flag(tp, HW_TSO_3)) 8065 tmp_mss = 0; 8066 8067 /* Now loop through additional data 8068 * fragments, and queue them. 8069 */ 8070 last = skb_shinfo(skb)->nr_frags - 1; 8071 for (i = 0; i <= last; i++) { 8072 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 8073 8074 len = skb_frag_size(frag); 8075 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 8076 len, DMA_TO_DEVICE); 8077 8078 tnapi->tx_buffers[entry].skb = NULL; 8079 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 8080 mapping); 8081 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8082 goto dma_error; 8083 8084 if (!budget || 8085 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 8086 len, base_flags | 8087 ((i == last) ? TXD_FLAG_END : 0), 8088 tmp_mss, vlan)) { 8089 would_hit_hwbug = 1; 8090 break; 8091 } 8092 } 8093 } 8094 8095 if (would_hit_hwbug) { 8096 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 8097 8098 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) { 8099 /* If it's a TSO packet, do GSO instead of 8100 * allocating and copying to a large linear SKB 8101 */ 8102 if (ip_tot_len) { 8103 iph->check = ip_csum; 8104 iph->tot_len = ip_tot_len; 8105 } 8106 tcph->check = tcp_csum; 8107 return tg3_tso_bug(tp, tnapi, txq, skb); 8108 } 8109 8110 /* If the workaround fails due to memory/mapping 8111 * failure, silently drop this packet. 8112 */ 8113 entry = tnapi->tx_prod; 8114 budget = tg3_tx_avail(tnapi); 8115 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 8116 base_flags, mss, vlan)) 8117 goto drop_nofree; 8118 } 8119 8120 skb_tx_timestamp(skb); 8121 netdev_tx_sent_queue(txq, skb->len); 8122 8123 /* Sync BD data before updating mailbox */ 8124 wmb(); 8125 8126 tnapi->tx_prod = entry; 8127 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 8128 netif_tx_stop_queue(txq); 8129 8130 /* netif_tx_stop_queue() must be done before checking 8131 * checking tx index in tg3_tx_avail() below, because in 8132 * tg3_tx(), we update tx index before checking for 8133 * netif_tx_queue_stopped(). 8134 */ 8135 smp_mb(); 8136 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 8137 netif_tx_wake_queue(txq); 8138 } 8139 8140 if (!netdev_xmit_more() || netif_xmit_stopped(txq)) { 8141 /* Packets are ready, update Tx producer idx on card. */ 8142 tw32_tx_mbox(tnapi->prodmbox, entry); 8143 } 8144 8145 return NETDEV_TX_OK; 8146 8147dma_error: 8148 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 8149 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 8150drop: 8151 dev_kfree_skb_any(skb); 8152drop_nofree: 8153 tp->tx_dropped++; 8154 return NETDEV_TX_OK; 8155} 8156 8157static void tg3_mac_loopback(struct tg3 *tp, bool enable) 8158{ 8159 if (enable) { 8160 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 8161 MAC_MODE_PORT_MODE_MASK); 8162 8163 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 8164 8165 if (!tg3_flag(tp, 5705_PLUS)) 8166 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 8167 8168 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 8169 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 8170 else 8171 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 8172 } else { 8173 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 8174 8175 if (tg3_flag(tp, 5705_PLUS) || 8176 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 8177 tg3_asic_rev(tp) == ASIC_REV_5700) 8178 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 8179 } 8180 8181 tw32(MAC_MODE, tp->mac_mode); 8182 udelay(40); 8183} 8184 8185static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 8186{ 8187 u32 val, bmcr, mac_mode, ptest = 0; 8188 8189 tg3_phy_toggle_apd(tp, false); 8190 tg3_phy_toggle_automdix(tp, false); 8191 8192 if (extlpbk && tg3_phy_set_extloopbk(tp)) 8193 return -EIO; 8194 8195 bmcr = BMCR_FULLDPLX; 8196 switch (speed) { 8197 case SPEED_10: 8198 break; 8199 case SPEED_100: 8200 bmcr |= BMCR_SPEED100; 8201 break; 8202 case SPEED_1000: 8203 default: 8204 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 8205 speed = SPEED_100; 8206 bmcr |= BMCR_SPEED100; 8207 } else { 8208 speed = SPEED_1000; 8209 bmcr |= BMCR_SPEED1000; 8210 } 8211 } 8212 8213 if (extlpbk) { 8214 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 8215 tg3_readphy(tp, MII_CTRL1000, &val); 8216 val |= CTL1000_AS_MASTER | 8217 CTL1000_ENABLE_MASTER; 8218 tg3_writephy(tp, MII_CTRL1000, val); 8219 } else { 8220 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 8221 MII_TG3_FET_PTEST_TRIM_2; 8222 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 8223 } 8224 } else 8225 bmcr |= BMCR_LOOPBACK; 8226 8227 tg3_writephy(tp, MII_BMCR, bmcr); 8228 8229 /* The write needs to be flushed for the FETs */ 8230 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 8231 tg3_readphy(tp, MII_BMCR, &bmcr); 8232 8233 udelay(40); 8234 8235 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 8236 tg3_asic_rev(tp) == ASIC_REV_5785) { 8237 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 8238 MII_TG3_FET_PTEST_FRC_TX_LINK | 8239 MII_TG3_FET_PTEST_FRC_TX_LOCK); 8240 8241 /* The write needs to be flushed for the AC131 */ 8242 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 8243 } 8244 8245 /* Reset to prevent losing 1st rx packet intermittently */ 8246 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 8247 tg3_flag(tp, 5780_CLASS)) { 8248 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8249 udelay(10); 8250 tw32_f(MAC_RX_MODE, tp->rx_mode); 8251 } 8252 8253 mac_mode = tp->mac_mode & 8254 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 8255 if (speed == SPEED_1000) 8256 mac_mode |= MAC_MODE_PORT_MODE_GMII; 8257 else 8258 mac_mode |= MAC_MODE_PORT_MODE_MII; 8259 8260 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 8261 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 8262 8263 if (masked_phy_id == TG3_PHY_ID_BCM5401) 8264 mac_mode &= ~MAC_MODE_LINK_POLARITY; 8265 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 8266 mac_mode |= MAC_MODE_LINK_POLARITY; 8267 8268 tg3_writephy(tp, MII_TG3_EXT_CTRL, 8269 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 8270 } 8271 8272 tw32(MAC_MODE, mac_mode); 8273 udelay(40); 8274 8275 return 0; 8276} 8277 8278static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 8279{ 8280 struct tg3 *tp = netdev_priv(dev); 8281 8282 if (features & NETIF_F_LOOPBACK) { 8283 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 8284 return; 8285 8286 spin_lock_bh(&tp->lock); 8287 tg3_mac_loopback(tp, true); 8288 netif_carrier_on(tp->dev); 8289 spin_unlock_bh(&tp->lock); 8290 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 8291 } else { 8292 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 8293 return; 8294 8295 spin_lock_bh(&tp->lock); 8296 tg3_mac_loopback(tp, false); 8297 /* Force link status check */ 8298 tg3_setup_phy(tp, true); 8299 spin_unlock_bh(&tp->lock); 8300 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 8301 } 8302} 8303 8304static netdev_features_t tg3_fix_features(struct net_device *dev, 8305 netdev_features_t features) 8306{ 8307 struct tg3 *tp = netdev_priv(dev); 8308 8309 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 8310 features &= ~NETIF_F_ALL_TSO; 8311 8312 return features; 8313} 8314 8315static int tg3_set_features(struct net_device *dev, netdev_features_t features) 8316{ 8317 netdev_features_t changed = dev->features ^ features; 8318 8319 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 8320 tg3_set_loopback(dev, features); 8321 8322 return 0; 8323} 8324 8325static void tg3_rx_prodring_free(struct tg3 *tp, 8326 struct tg3_rx_prodring_set *tpr) 8327{ 8328 int i; 8329 8330 if (tpr != &tp->napi[0].prodring) { 8331 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 8332 i = (i + 1) & tp->rx_std_ring_mask) 8333 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8334 tp->rx_pkt_map_sz); 8335 8336 if (tg3_flag(tp, JUMBO_CAPABLE)) { 8337 for (i = tpr->rx_jmb_cons_idx; 8338 i != tpr->rx_jmb_prod_idx; 8339 i = (i + 1) & tp->rx_jmb_ring_mask) { 8340 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8341 TG3_RX_JMB_MAP_SZ); 8342 } 8343 } 8344 8345 return; 8346 } 8347 8348 for (i = 0; i <= tp->rx_std_ring_mask; i++) 8349 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8350 tp->rx_pkt_map_sz); 8351 8352 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8353 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 8354 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8355 TG3_RX_JMB_MAP_SZ); 8356 } 8357} 8358 8359/* Initialize rx rings for packet processing. 8360 * 8361 * The chip has been shut down and the driver detached from 8362 * the networking, so no interrupts or new tx packets will 8363 * end up in the driver. tp->{tx,}lock are held and thus 8364 * we may not sleep. 8365 */ 8366static int tg3_rx_prodring_alloc(struct tg3 *tp, 8367 struct tg3_rx_prodring_set *tpr) 8368{ 8369 u32 i, rx_pkt_dma_sz; 8370 8371 tpr->rx_std_cons_idx = 0; 8372 tpr->rx_std_prod_idx = 0; 8373 tpr->rx_jmb_cons_idx = 0; 8374 tpr->rx_jmb_prod_idx = 0; 8375 8376 if (tpr != &tp->napi[0].prodring) { 8377 memset(&tpr->rx_std_buffers[0], 0, 8378 TG3_RX_STD_BUFF_RING_SIZE(tp)); 8379 if (tpr->rx_jmb_buffers) 8380 memset(&tpr->rx_jmb_buffers[0], 0, 8381 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 8382 goto done; 8383 } 8384 8385 /* Zero out all descriptors. */ 8386 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 8387 8388 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 8389 if (tg3_flag(tp, 5780_CLASS) && 8390 tp->dev->mtu > ETH_DATA_LEN) 8391 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 8392 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 8393 8394 /* Initialize invariants of the rings, we only set this 8395 * stuff once. This works because the card does not 8396 * write into the rx buffer posting rings. 8397 */ 8398 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 8399 struct tg3_rx_buffer_desc *rxd; 8400 8401 rxd = &tpr->rx_std[i]; 8402 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 8403 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 8404 rxd->opaque = (RXD_OPAQUE_RING_STD | 8405 (i << RXD_OPAQUE_INDEX_SHIFT)); 8406 } 8407 8408 /* Now allocate fresh SKBs for each rx ring. */ 8409 for (i = 0; i < tp->rx_pending; i++) { 8410 unsigned int frag_size; 8411 8412 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 8413 &frag_size) < 0) { 8414 netdev_warn(tp->dev, 8415 "Using a smaller RX standard ring. Only " 8416 "%d out of %d buffers were allocated " 8417 "successfully\n", i, tp->rx_pending); 8418 if (i == 0) 8419 goto initfail; 8420 tp->rx_pending = i; 8421 break; 8422 } 8423 } 8424 8425 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8426 goto done; 8427 8428 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 8429 8430 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 8431 goto done; 8432 8433 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 8434 struct tg3_rx_buffer_desc *rxd; 8435 8436 rxd = &tpr->rx_jmb[i].std; 8437 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 8438 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 8439 RXD_FLAG_JUMBO; 8440 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 8441 (i << RXD_OPAQUE_INDEX_SHIFT)); 8442 } 8443 8444 for (i = 0; i < tp->rx_jumbo_pending; i++) { 8445 unsigned int frag_size; 8446 8447 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 8448 &frag_size) < 0) { 8449 netdev_warn(tp->dev, 8450 "Using a smaller RX jumbo ring. Only %d " 8451 "out of %d buffers were allocated " 8452 "successfully\n", i, tp->rx_jumbo_pending); 8453 if (i == 0) 8454 goto initfail; 8455 tp->rx_jumbo_pending = i; 8456 break; 8457 } 8458 } 8459 8460done: 8461 return 0; 8462 8463initfail: 8464 tg3_rx_prodring_free(tp, tpr); 8465 return -ENOMEM; 8466} 8467 8468static void tg3_rx_prodring_fini(struct tg3 *tp, 8469 struct tg3_rx_prodring_set *tpr) 8470{ 8471 kfree(tpr->rx_std_buffers); 8472 tpr->rx_std_buffers = NULL; 8473 kfree(tpr->rx_jmb_buffers); 8474 tpr->rx_jmb_buffers = NULL; 8475 if (tpr->rx_std) { 8476 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 8477 tpr->rx_std, tpr->rx_std_mapping); 8478 tpr->rx_std = NULL; 8479 } 8480 if (tpr->rx_jmb) { 8481 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 8482 tpr->rx_jmb, tpr->rx_jmb_mapping); 8483 tpr->rx_jmb = NULL; 8484 } 8485} 8486 8487static int tg3_rx_prodring_init(struct tg3 *tp, 8488 struct tg3_rx_prodring_set *tpr) 8489{ 8490 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 8491 GFP_KERNEL); 8492 if (!tpr->rx_std_buffers) 8493 return -ENOMEM; 8494 8495 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 8496 TG3_RX_STD_RING_BYTES(tp), 8497 &tpr->rx_std_mapping, 8498 GFP_KERNEL); 8499 if (!tpr->rx_std) 8500 goto err_out; 8501 8502 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8503 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 8504 GFP_KERNEL); 8505 if (!tpr->rx_jmb_buffers) 8506 goto err_out; 8507 8508 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 8509 TG3_RX_JMB_RING_BYTES(tp), 8510 &tpr->rx_jmb_mapping, 8511 GFP_KERNEL); 8512 if (!tpr->rx_jmb) 8513 goto err_out; 8514 } 8515 8516 return 0; 8517 8518err_out: 8519 tg3_rx_prodring_fini(tp, tpr); 8520 return -ENOMEM; 8521} 8522 8523/* Free up pending packets in all rx/tx rings. 8524 * 8525 * The chip has been shut down and the driver detached from 8526 * the networking, so no interrupts or new tx packets will 8527 * end up in the driver. tp->{tx,}lock is not held and we are not 8528 * in an interrupt context and thus may sleep. 8529 */ 8530static void tg3_free_rings(struct tg3 *tp) 8531{ 8532 int i, j; 8533 8534 for (j = 0; j < tp->irq_cnt; j++) { 8535 struct tg3_napi *tnapi = &tp->napi[j]; 8536 8537 tg3_rx_prodring_free(tp, &tnapi->prodring); 8538 8539 if (!tnapi->tx_buffers) 8540 continue; 8541 8542 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 8543 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 8544 8545 if (!skb) 8546 continue; 8547 8548 tg3_tx_skb_unmap(tnapi, i, 8549 skb_shinfo(skb)->nr_frags - 1); 8550 8551 dev_consume_skb_any(skb); 8552 } 8553 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 8554 } 8555} 8556 8557/* Initialize tx/rx rings for packet processing. 8558 * 8559 * The chip has been shut down and the driver detached from 8560 * the networking, so no interrupts or new tx packets will 8561 * end up in the driver. tp->{tx,}lock are held and thus 8562 * we may not sleep. 8563 */ 8564static int tg3_init_rings(struct tg3 *tp) 8565{ 8566 int i; 8567 8568 /* Free up all the SKBs. */ 8569 tg3_free_rings(tp); 8570 8571 for (i = 0; i < tp->irq_cnt; i++) { 8572 struct tg3_napi *tnapi = &tp->napi[i]; 8573 8574 tnapi->last_tag = 0; 8575 tnapi->last_irq_tag = 0; 8576 tnapi->hw_status->status = 0; 8577 tnapi->hw_status->status_tag = 0; 8578 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8579 8580 tnapi->tx_prod = 0; 8581 tnapi->tx_cons = 0; 8582 if (tnapi->tx_ring) 8583 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 8584 8585 tnapi->rx_rcb_ptr = 0; 8586 if (tnapi->rx_rcb) 8587 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 8588 8589 if (tnapi->prodring.rx_std && 8590 tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 8591 tg3_free_rings(tp); 8592 return -ENOMEM; 8593 } 8594 } 8595 8596 return 0; 8597} 8598 8599static void tg3_mem_tx_release(struct tg3 *tp) 8600{ 8601 int i; 8602 8603 for (i = 0; i < tp->irq_max; i++) { 8604 struct tg3_napi *tnapi = &tp->napi[i]; 8605 8606 if (tnapi->tx_ring) { 8607 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 8608 tnapi->tx_ring, tnapi->tx_desc_mapping); 8609 tnapi->tx_ring = NULL; 8610 } 8611 8612 kfree(tnapi->tx_buffers); 8613 tnapi->tx_buffers = NULL; 8614 } 8615} 8616 8617static int tg3_mem_tx_acquire(struct tg3 *tp) 8618{ 8619 int i; 8620 struct tg3_napi *tnapi = &tp->napi[0]; 8621 8622 /* If multivector TSS is enabled, vector 0 does not handle 8623 * tx interrupts. Don't allocate any resources for it. 8624 */ 8625 if (tg3_flag(tp, ENABLE_TSS)) 8626 tnapi++; 8627 8628 for (i = 0; i < tp->txq_cnt; i++, tnapi++) { 8629 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE, 8630 sizeof(struct tg3_tx_ring_info), 8631 GFP_KERNEL); 8632 if (!tnapi->tx_buffers) 8633 goto err_out; 8634 8635 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 8636 TG3_TX_RING_BYTES, 8637 &tnapi->tx_desc_mapping, 8638 GFP_KERNEL); 8639 if (!tnapi->tx_ring) 8640 goto err_out; 8641 } 8642 8643 return 0; 8644 8645err_out: 8646 tg3_mem_tx_release(tp); 8647 return -ENOMEM; 8648} 8649 8650static void tg3_mem_rx_release(struct tg3 *tp) 8651{ 8652 int i; 8653 8654 for (i = 0; i < tp->irq_max; i++) { 8655 struct tg3_napi *tnapi = &tp->napi[i]; 8656 8657 tg3_rx_prodring_fini(tp, &tnapi->prodring); 8658 8659 if (!tnapi->rx_rcb) 8660 continue; 8661 8662 dma_free_coherent(&tp->pdev->dev, 8663 TG3_RX_RCB_RING_BYTES(tp), 8664 tnapi->rx_rcb, 8665 tnapi->rx_rcb_mapping); 8666 tnapi->rx_rcb = NULL; 8667 } 8668} 8669 8670static int tg3_mem_rx_acquire(struct tg3 *tp) 8671{ 8672 unsigned int i, limit; 8673 8674 limit = tp->rxq_cnt; 8675 8676 /* If RSS is enabled, we need a (dummy) producer ring 8677 * set on vector zero. This is the true hw prodring. 8678 */ 8679 if (tg3_flag(tp, ENABLE_RSS)) 8680 limit++; 8681 8682 for (i = 0; i < limit; i++) { 8683 struct tg3_napi *tnapi = &tp->napi[i]; 8684 8685 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 8686 goto err_out; 8687 8688 /* If multivector RSS is enabled, vector 0 8689 * does not handle rx or tx interrupts. 8690 * Don't allocate any resources for it. 8691 */ 8692 if (!i && tg3_flag(tp, ENABLE_RSS)) 8693 continue; 8694 8695 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 8696 TG3_RX_RCB_RING_BYTES(tp), 8697 &tnapi->rx_rcb_mapping, 8698 GFP_KERNEL); 8699 if (!tnapi->rx_rcb) 8700 goto err_out; 8701 } 8702 8703 return 0; 8704 8705err_out: 8706 tg3_mem_rx_release(tp); 8707 return -ENOMEM; 8708} 8709 8710/* 8711 * Must not be invoked with interrupt sources disabled and 8712 * the hardware shutdown down. 8713 */ 8714static void tg3_free_consistent(struct tg3 *tp) 8715{ 8716 int i; 8717 8718 for (i = 0; i < tp->irq_cnt; i++) { 8719 struct tg3_napi *tnapi = &tp->napi[i]; 8720 8721 if (tnapi->hw_status) { 8722 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 8723 tnapi->hw_status, 8724 tnapi->status_mapping); 8725 tnapi->hw_status = NULL; 8726 } 8727 } 8728 8729 tg3_mem_rx_release(tp); 8730 tg3_mem_tx_release(tp); 8731 8732 /* tp->hw_stats can be referenced safely: 8733 * 1. under rtnl_lock 8734 * 2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set. 8735 */ 8736 if (tp->hw_stats) { 8737 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8738 tp->hw_stats, tp->stats_mapping); 8739 tp->hw_stats = NULL; 8740 } 8741} 8742 8743/* 8744 * Must not be invoked with interrupt sources disabled and 8745 * the hardware shutdown down. Can sleep. 8746 */ 8747static int tg3_alloc_consistent(struct tg3 *tp) 8748{ 8749 int i; 8750 8751 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 8752 sizeof(struct tg3_hw_stats), 8753 &tp->stats_mapping, GFP_KERNEL); 8754 if (!tp->hw_stats) 8755 goto err_out; 8756 8757 for (i = 0; i < tp->irq_cnt; i++) { 8758 struct tg3_napi *tnapi = &tp->napi[i]; 8759 struct tg3_hw_status *sblk; 8760 8761 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 8762 TG3_HW_STATUS_SIZE, 8763 &tnapi->status_mapping, 8764 GFP_KERNEL); 8765 if (!tnapi->hw_status) 8766 goto err_out; 8767 8768 sblk = tnapi->hw_status; 8769 8770 if (tg3_flag(tp, ENABLE_RSS)) { 8771 u16 *prodptr = NULL; 8772 8773 /* 8774 * When RSS is enabled, the status block format changes 8775 * slightly. The "rx_jumbo_consumer", "reserved", 8776 * and "rx_mini_consumer" members get mapped to the 8777 * other three rx return ring producer indexes. 8778 */ 8779 switch (i) { 8780 case 1: 8781 prodptr = &sblk->idx[0].rx_producer; 8782 break; 8783 case 2: 8784 prodptr = &sblk->rx_jumbo_consumer; 8785 break; 8786 case 3: 8787 prodptr = &sblk->reserved; 8788 break; 8789 case 4: 8790 prodptr = &sblk->rx_mini_consumer; 8791 break; 8792 } 8793 tnapi->rx_rcb_prod_idx = prodptr; 8794 } else { 8795 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 8796 } 8797 } 8798 8799 if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp)) 8800 goto err_out; 8801 8802 return 0; 8803 8804err_out: 8805 tg3_free_consistent(tp); 8806 return -ENOMEM; 8807} 8808 8809#define MAX_WAIT_CNT 1000 8810 8811/* To stop a block, clear the enable bit and poll till it 8812 * clears. tp->lock is held. 8813 */ 8814static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent) 8815{ 8816 unsigned int i; 8817 u32 val; 8818 8819 if (tg3_flag(tp, 5705_PLUS)) { 8820 switch (ofs) { 8821 case RCVLSC_MODE: 8822 case DMAC_MODE: 8823 case MBFREE_MODE: 8824 case BUFMGR_MODE: 8825 case MEMARB_MODE: 8826 /* We can't enable/disable these bits of the 8827 * 5705/5750, just say success. 8828 */ 8829 return 0; 8830 8831 default: 8832 break; 8833 } 8834 } 8835 8836 val = tr32(ofs); 8837 val &= ~enable_bit; 8838 tw32_f(ofs, val); 8839 8840 for (i = 0; i < MAX_WAIT_CNT; i++) { 8841 if (pci_channel_offline(tp->pdev)) { 8842 dev_err(&tp->pdev->dev, 8843 "tg3_stop_block device offline, " 8844 "ofs=%lx enable_bit=%x\n", 8845 ofs, enable_bit); 8846 return -ENODEV; 8847 } 8848 8849 udelay(100); 8850 val = tr32(ofs); 8851 if ((val & enable_bit) == 0) 8852 break; 8853 } 8854 8855 if (i == MAX_WAIT_CNT && !silent) { 8856 dev_err(&tp->pdev->dev, 8857 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 8858 ofs, enable_bit); 8859 return -ENODEV; 8860 } 8861 8862 return 0; 8863} 8864 8865/* tp->lock is held. */ 8866static int tg3_abort_hw(struct tg3 *tp, bool silent) 8867{ 8868 int i, err; 8869 8870 tg3_disable_ints(tp); 8871 8872 if (pci_channel_offline(tp->pdev)) { 8873 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE); 8874 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8875 err = -ENODEV; 8876 goto err_no_dev; 8877 } 8878 8879 tp->rx_mode &= ~RX_MODE_ENABLE; 8880 tw32_f(MAC_RX_MODE, tp->rx_mode); 8881 udelay(10); 8882 8883 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 8884 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 8885 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 8886 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 8887 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 8888 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 8889 8890 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 8891 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 8892 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 8893 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 8894 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 8895 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 8896 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 8897 8898 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8899 tw32_f(MAC_MODE, tp->mac_mode); 8900 udelay(40); 8901 8902 tp->tx_mode &= ~TX_MODE_ENABLE; 8903 tw32_f(MAC_TX_MODE, tp->tx_mode); 8904 8905 for (i = 0; i < MAX_WAIT_CNT; i++) { 8906 udelay(100); 8907 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 8908 break; 8909 } 8910 if (i >= MAX_WAIT_CNT) { 8911 dev_err(&tp->pdev->dev, 8912 "%s timed out, TX_MODE_ENABLE will not clear " 8913 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 8914 err |= -ENODEV; 8915 } 8916 8917 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 8918 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 8919 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 8920 8921 tw32(FTQ_RESET, 0xffffffff); 8922 tw32(FTQ_RESET, 0x00000000); 8923 8924 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 8925 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 8926 8927err_no_dev: 8928 for (i = 0; i < tp->irq_cnt; i++) { 8929 struct tg3_napi *tnapi = &tp->napi[i]; 8930 if (tnapi->hw_status) 8931 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8932 } 8933 8934 return err; 8935} 8936 8937/* Save PCI command register before chip reset */ 8938static void tg3_save_pci_state(struct tg3 *tp) 8939{ 8940 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 8941} 8942 8943/* Restore PCI state after chip reset */ 8944static void tg3_restore_pci_state(struct tg3 *tp) 8945{ 8946 u32 val; 8947 8948 /* Re-enable indirect register accesses. */ 8949 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 8950 tp->misc_host_ctrl); 8951 8952 /* Set MAX PCI retry to zero. */ 8953 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 8954 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 8955 tg3_flag(tp, PCIX_MODE)) 8956 val |= PCISTATE_RETRY_SAME_DMA; 8957 /* Allow reads and writes to the APE register and memory space. */ 8958 if (tg3_flag(tp, ENABLE_APE)) 8959 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8960 PCISTATE_ALLOW_APE_SHMEM_WR | 8961 PCISTATE_ALLOW_APE_PSPACE_WR; 8962 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 8963 8964 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 8965 8966 if (!tg3_flag(tp, PCI_EXPRESS)) { 8967 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 8968 tp->pci_cacheline_sz); 8969 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 8970 tp->pci_lat_timer); 8971 } 8972 8973 /* Make sure PCI-X relaxed ordering bit is clear. */ 8974 if (tg3_flag(tp, PCIX_MODE)) { 8975 u16 pcix_cmd; 8976 8977 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8978 &pcix_cmd); 8979 pcix_cmd &= ~PCI_X_CMD_ERO; 8980 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8981 pcix_cmd); 8982 } 8983 8984 if (tg3_flag(tp, 5780_CLASS)) { 8985 8986 /* Chip reset on 5780 will reset MSI enable bit, 8987 * so need to restore it. 8988 */ 8989 if (tg3_flag(tp, USING_MSI)) { 8990 u16 ctrl; 8991 8992 pci_read_config_word(tp->pdev, 8993 tp->msi_cap + PCI_MSI_FLAGS, 8994 &ctrl); 8995 pci_write_config_word(tp->pdev, 8996 tp->msi_cap + PCI_MSI_FLAGS, 8997 ctrl | PCI_MSI_FLAGS_ENABLE); 8998 val = tr32(MSGINT_MODE); 8999 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 9000 } 9001 } 9002} 9003 9004static void tg3_override_clk(struct tg3 *tp) 9005{ 9006 u32 val; 9007 9008 switch (tg3_asic_rev(tp)) { 9009 case ASIC_REV_5717: 9010 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9011 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9012 TG3_CPMU_MAC_ORIDE_ENABLE); 9013 break; 9014 9015 case ASIC_REV_5719: 9016 case ASIC_REV_5720: 9017 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9018 break; 9019 9020 default: 9021 return; 9022 } 9023} 9024 9025static void tg3_restore_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, 9033 val & ~TG3_CPMU_MAC_ORIDE_ENABLE); 9034 break; 9035 9036 case ASIC_REV_5719: 9037 case ASIC_REV_5720: 9038 val = tr32(TG3_CPMU_CLCK_ORIDE); 9039 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9040 break; 9041 9042 default: 9043 return; 9044 } 9045} 9046 9047/* tp->lock is held. */ 9048static int tg3_chip_reset(struct tg3 *tp) 9049 __releases(tp->lock) 9050 __acquires(tp->lock) 9051{ 9052 u32 val; 9053 void (*write_op)(struct tg3 *, u32, u32); 9054 int i, err; 9055 9056 if (!pci_device_is_present(tp->pdev)) 9057 return -ENODEV; 9058 9059 tg3_nvram_lock(tp); 9060 9061 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 9062 9063 /* No matching tg3_nvram_unlock() after this because 9064 * chip reset below will undo the nvram lock. 9065 */ 9066 tp->nvram_lock_cnt = 0; 9067 9068 /* GRC_MISC_CFG core clock reset will clear the memory 9069 * enable bit in PCI register 4 and the MSI enable bit 9070 * on some chips, so we save relevant registers here. 9071 */ 9072 tg3_save_pci_state(tp); 9073 9074 if (tg3_asic_rev(tp) == ASIC_REV_5752 || 9075 tg3_flag(tp, 5755_PLUS)) 9076 tw32(GRC_FASTBOOT_PC, 0); 9077 9078 /* 9079 * We must avoid the readl() that normally takes place. 9080 * It locks machines, causes machine checks, and other 9081 * fun things. So, temporarily disable the 5701 9082 * hardware workaround, while we do the reset. 9083 */ 9084 write_op = tp->write32; 9085 if (write_op == tg3_write_flush_reg32) 9086 tp->write32 = tg3_write32; 9087 9088 /* Prevent the irq handler from reading or writing PCI registers 9089 * during chip reset when the memory enable bit in the PCI command 9090 * register may be cleared. The chip does not generate interrupt 9091 * at this time, but the irq handler may still be called due to irq 9092 * sharing or irqpoll. 9093 */ 9094 tg3_flag_set(tp, CHIP_RESETTING); 9095 for (i = 0; i < tp->irq_cnt; i++) { 9096 struct tg3_napi *tnapi = &tp->napi[i]; 9097 if (tnapi->hw_status) { 9098 tnapi->hw_status->status = 0; 9099 tnapi->hw_status->status_tag = 0; 9100 } 9101 tnapi->last_tag = 0; 9102 tnapi->last_irq_tag = 0; 9103 } 9104 smp_mb(); 9105 9106 tg3_full_unlock(tp); 9107 9108 for (i = 0; i < tp->irq_cnt; i++) 9109 synchronize_irq(tp->napi[i].irq_vec); 9110 9111 tg3_full_lock(tp, 0); 9112 9113 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9114 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9115 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9116 } 9117 9118 /* do the reset */ 9119 val = GRC_MISC_CFG_CORECLK_RESET; 9120 9121 if (tg3_flag(tp, PCI_EXPRESS)) { 9122 /* Force PCIe 1.0a mode */ 9123 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 9124 !tg3_flag(tp, 57765_PLUS) && 9125 tr32(TG3_PCIE_PHY_TSTCTL) == 9126 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 9127 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 9128 9129 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) { 9130 tw32(GRC_MISC_CFG, (1 << 29)); 9131 val |= (1 << 29); 9132 } 9133 } 9134 9135 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 9136 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 9137 tw32(GRC_VCPU_EXT_CTRL, 9138 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 9139 } 9140 9141 /* Set the clock to the highest frequency to avoid timeouts. With link 9142 * aware mode, the clock speed could be slow and bootcode does not 9143 * complete within the expected time. Override the clock to allow the 9144 * bootcode to finish sooner and then restore it. 9145 */ 9146 tg3_override_clk(tp); 9147 9148 /* Manage gphy power for all CPMU absent PCIe devices. */ 9149 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 9150 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 9151 9152 tw32(GRC_MISC_CFG, val); 9153 9154 /* restore 5701 hardware bug workaround write method */ 9155 tp->write32 = write_op; 9156 9157 /* Unfortunately, we have to delay before the PCI read back. 9158 * Some 575X chips even will not respond to a PCI cfg access 9159 * when the reset command is given to the chip. 9160 * 9161 * How do these hardware designers expect things to work 9162 * properly if the PCI write is posted for a long period 9163 * of time? It is always necessary to have some method by 9164 * which a register read back can occur to push the write 9165 * out which does the reset. 9166 * 9167 * For most tg3 variants the trick below was working. 9168 * Ho hum... 9169 */ 9170 udelay(120); 9171 9172 /* Flush PCI posted writes. The normal MMIO registers 9173 * are inaccessible at this time so this is the only 9174 * way to make this reliably (actually, this is no longer 9175 * the case, see above). I tried to use indirect 9176 * register read/write but this upset some 5701 variants. 9177 */ 9178 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 9179 9180 udelay(120); 9181 9182 if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) { 9183 u16 val16; 9184 9185 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) { 9186 int j; 9187 u32 cfg_val; 9188 9189 /* Wait for link training to complete. */ 9190 for (j = 0; j < 5000; j++) 9191 udelay(100); 9192 9193 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 9194 pci_write_config_dword(tp->pdev, 0xc4, 9195 cfg_val | (1 << 15)); 9196 } 9197 9198 /* Clear the "no snoop" and "relaxed ordering" bits. */ 9199 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN; 9200 /* 9201 * Older PCIe devices only support the 128 byte 9202 * MPS setting. Enforce the restriction. 9203 */ 9204 if (!tg3_flag(tp, CPMU_PRESENT)) 9205 val16 |= PCI_EXP_DEVCTL_PAYLOAD; 9206 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16); 9207 9208 /* Clear error status */ 9209 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA, 9210 PCI_EXP_DEVSTA_CED | 9211 PCI_EXP_DEVSTA_NFED | 9212 PCI_EXP_DEVSTA_FED | 9213 PCI_EXP_DEVSTA_URD); 9214 } 9215 9216 tg3_restore_pci_state(tp); 9217 9218 tg3_flag_clear(tp, CHIP_RESETTING); 9219 tg3_flag_clear(tp, ERROR_PROCESSED); 9220 9221 val = 0; 9222 if (tg3_flag(tp, 5780_CLASS)) 9223 val = tr32(MEMARB_MODE); 9224 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 9225 9226 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) { 9227 tg3_stop_fw(tp); 9228 tw32(0x5000, 0x400); 9229 } 9230 9231 if (tg3_flag(tp, IS_SSB_CORE)) { 9232 /* 9233 * BCM4785: In order to avoid repercussions from using 9234 * potentially defective internal ROM, stop the Rx RISC CPU, 9235 * which is not required. 9236 */ 9237 tg3_stop_fw(tp); 9238 tg3_halt_cpu(tp, RX_CPU_BASE); 9239 } 9240 9241 err = tg3_poll_fw(tp); 9242 if (err) 9243 return err; 9244 9245 tw32(GRC_MODE, tp->grc_mode); 9246 9247 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) { 9248 val = tr32(0xc4); 9249 9250 tw32(0xc4, val | (1 << 15)); 9251 } 9252 9253 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 9254 tg3_asic_rev(tp) == ASIC_REV_5705) { 9255 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 9256 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) 9257 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 9258 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9259 } 9260 9261 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9262 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 9263 val = tp->mac_mode; 9264 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9265 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 9266 val = tp->mac_mode; 9267 } else 9268 val = 0; 9269 9270 tw32_f(MAC_MODE, val); 9271 udelay(40); 9272 9273 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 9274 9275 tg3_mdio_start(tp); 9276 9277 if (tg3_flag(tp, PCI_EXPRESS) && 9278 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 9279 tg3_asic_rev(tp) != ASIC_REV_5785 && 9280 !tg3_flag(tp, 57765_PLUS)) { 9281 val = tr32(0x7c00); 9282 9283 tw32(0x7c00, val | (1 << 25)); 9284 } 9285 9286 tg3_restore_clk(tp); 9287 9288 /* Increase the core clock speed to fix tx timeout issue for 5762 9289 * with 100Mbps link speed. 9290 */ 9291 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 9292 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9293 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9294 TG3_CPMU_MAC_ORIDE_ENABLE); 9295 } 9296 9297 /* Reprobe ASF enable state. */ 9298 tg3_flag_clear(tp, ENABLE_ASF); 9299 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 9300 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 9301 9302 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 9303 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 9304 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 9305 u32 nic_cfg; 9306 9307 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 9308 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 9309 tg3_flag_set(tp, ENABLE_ASF); 9310 tp->last_event_jiffies = jiffies; 9311 if (tg3_flag(tp, 5750_PLUS)) 9312 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 9313 9314 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg); 9315 if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK) 9316 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 9317 if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID) 9318 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 9319 } 9320 } 9321 9322 return 0; 9323} 9324 9325static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 9326static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 9327static void __tg3_set_rx_mode(struct net_device *); 9328 9329/* tp->lock is held. */ 9330static int tg3_halt(struct tg3 *tp, int kind, bool silent) 9331{ 9332 int err; 9333 9334 tg3_stop_fw(tp); 9335 9336 tg3_write_sig_pre_reset(tp, kind); 9337 9338 tg3_abort_hw(tp, silent); 9339 err = tg3_chip_reset(tp); 9340 9341 __tg3_set_mac_addr(tp, false); 9342 9343 tg3_write_sig_legacy(tp, kind); 9344 tg3_write_sig_post_reset(tp, kind); 9345 9346 if (tp->hw_stats) { 9347 /* Save the stats across chip resets... */ 9348 tg3_get_nstats(tp, &tp->net_stats_prev); 9349 tg3_get_estats(tp, &tp->estats_prev); 9350 9351 /* And make sure the next sample is new data */ 9352 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 9353 } 9354 9355 return err; 9356} 9357 9358static int tg3_set_mac_addr(struct net_device *dev, void *p) 9359{ 9360 struct tg3 *tp = netdev_priv(dev); 9361 struct sockaddr *addr = p; 9362 int err = 0; 9363 bool skip_mac_1 = false; 9364 9365 if (!is_valid_ether_addr(addr->sa_data)) 9366 return -EADDRNOTAVAIL; 9367 9368 eth_hw_addr_set(dev, addr->sa_data); 9369 9370 if (!netif_running(dev)) 9371 return 0; 9372 9373 if (tg3_flag(tp, ENABLE_ASF)) { 9374 u32 addr0_high, addr0_low, addr1_high, addr1_low; 9375 9376 addr0_high = tr32(MAC_ADDR_0_HIGH); 9377 addr0_low = tr32(MAC_ADDR_0_LOW); 9378 addr1_high = tr32(MAC_ADDR_1_HIGH); 9379 addr1_low = tr32(MAC_ADDR_1_LOW); 9380 9381 /* Skip MAC addr 1 if ASF is using it. */ 9382 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 9383 !(addr1_high == 0 && addr1_low == 0)) 9384 skip_mac_1 = true; 9385 } 9386 spin_lock_bh(&tp->lock); 9387 __tg3_set_mac_addr(tp, skip_mac_1); 9388 __tg3_set_rx_mode(dev); 9389 spin_unlock_bh(&tp->lock); 9390 9391 return err; 9392} 9393 9394/* tp->lock is held. */ 9395static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 9396 dma_addr_t mapping, u32 maxlen_flags, 9397 u32 nic_addr) 9398{ 9399 tg3_write_mem(tp, 9400 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 9401 ((u64) mapping >> 32)); 9402 tg3_write_mem(tp, 9403 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 9404 ((u64) mapping & 0xffffffff)); 9405 tg3_write_mem(tp, 9406 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 9407 maxlen_flags); 9408 9409 if (!tg3_flag(tp, 5705_PLUS)) 9410 tg3_write_mem(tp, 9411 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 9412 nic_addr); 9413} 9414 9415 9416static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9417{ 9418 int i = 0; 9419 9420 if (!tg3_flag(tp, ENABLE_TSS)) { 9421 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 9422 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 9423 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 9424 } else { 9425 tw32(HOSTCC_TXCOL_TICKS, 0); 9426 tw32(HOSTCC_TXMAX_FRAMES, 0); 9427 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 9428 9429 for (; i < tp->txq_cnt; i++) { 9430 u32 reg; 9431 9432 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 9433 tw32(reg, ec->tx_coalesce_usecs); 9434 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 9435 tw32(reg, ec->tx_max_coalesced_frames); 9436 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 9437 tw32(reg, ec->tx_max_coalesced_frames_irq); 9438 } 9439 } 9440 9441 for (; i < tp->irq_max - 1; i++) { 9442 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 9443 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 9444 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9445 } 9446} 9447 9448static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9449{ 9450 int i = 0; 9451 u32 limit = tp->rxq_cnt; 9452 9453 if (!tg3_flag(tp, ENABLE_RSS)) { 9454 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 9455 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 9456 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 9457 limit--; 9458 } else { 9459 tw32(HOSTCC_RXCOL_TICKS, 0); 9460 tw32(HOSTCC_RXMAX_FRAMES, 0); 9461 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 9462 } 9463 9464 for (; i < limit; i++) { 9465 u32 reg; 9466 9467 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 9468 tw32(reg, ec->rx_coalesce_usecs); 9469 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 9470 tw32(reg, ec->rx_max_coalesced_frames); 9471 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 9472 tw32(reg, ec->rx_max_coalesced_frames_irq); 9473 } 9474 9475 for (; i < tp->irq_max - 1; i++) { 9476 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 9477 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 9478 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9479 } 9480} 9481 9482static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 9483{ 9484 tg3_coal_tx_init(tp, ec); 9485 tg3_coal_rx_init(tp, ec); 9486 9487 if (!tg3_flag(tp, 5705_PLUS)) { 9488 u32 val = ec->stats_block_coalesce_usecs; 9489 9490 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 9491 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 9492 9493 if (!tp->link_up) 9494 val = 0; 9495 9496 tw32(HOSTCC_STAT_COAL_TICKS, val); 9497 } 9498} 9499 9500/* tp->lock is held. */ 9501static void tg3_tx_rcbs_disable(struct tg3 *tp) 9502{ 9503 u32 txrcb, limit; 9504 9505 /* Disable all transmit rings but the first. */ 9506 if (!tg3_flag(tp, 5705_PLUS)) 9507 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 9508 else if (tg3_flag(tp, 5717_PLUS)) 9509 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 9510 else if (tg3_flag(tp, 57765_CLASS) || 9511 tg3_asic_rev(tp) == ASIC_REV_5762) 9512 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 9513 else 9514 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9515 9516 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9517 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 9518 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 9519 BDINFO_FLAGS_DISABLED); 9520} 9521 9522/* tp->lock is held. */ 9523static void tg3_tx_rcbs_init(struct tg3 *tp) 9524{ 9525 int i = 0; 9526 u32 txrcb = NIC_SRAM_SEND_RCB; 9527 9528 if (tg3_flag(tp, ENABLE_TSS)) 9529 i++; 9530 9531 for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) { 9532 struct tg3_napi *tnapi = &tp->napi[i]; 9533 9534 if (!tnapi->tx_ring) 9535 continue; 9536 9537 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 9538 (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT), 9539 NIC_SRAM_TX_BUFFER_DESC); 9540 } 9541} 9542 9543/* tp->lock is held. */ 9544static void tg3_rx_ret_rcbs_disable(struct tg3 *tp) 9545{ 9546 u32 rxrcb, limit; 9547 9548 /* Disable all receive return rings but the first. */ 9549 if (tg3_flag(tp, 5717_PLUS)) 9550 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 9551 else if (!tg3_flag(tp, 5705_PLUS)) 9552 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 9553 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9554 tg3_asic_rev(tp) == ASIC_REV_5762 || 9555 tg3_flag(tp, 57765_CLASS)) 9556 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 9557 else 9558 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9559 9560 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9561 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 9562 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 9563 BDINFO_FLAGS_DISABLED); 9564} 9565 9566/* tp->lock is held. */ 9567static void tg3_rx_ret_rcbs_init(struct tg3 *tp) 9568{ 9569 int i = 0; 9570 u32 rxrcb = NIC_SRAM_RCV_RET_RCB; 9571 9572 if (tg3_flag(tp, ENABLE_RSS)) 9573 i++; 9574 9575 for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) { 9576 struct tg3_napi *tnapi = &tp->napi[i]; 9577 9578 if (!tnapi->rx_rcb) 9579 continue; 9580 9581 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 9582 (tp->rx_ret_ring_mask + 1) << 9583 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 9584 } 9585} 9586 9587/* tp->lock is held. */ 9588static void tg3_rings_reset(struct tg3 *tp) 9589{ 9590 int i; 9591 u32 stblk; 9592 struct tg3_napi *tnapi = &tp->napi[0]; 9593 9594 tg3_tx_rcbs_disable(tp); 9595 9596 tg3_rx_ret_rcbs_disable(tp); 9597 9598 /* Disable interrupts */ 9599 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 9600 tp->napi[0].chk_msi_cnt = 0; 9601 tp->napi[0].last_rx_cons = 0; 9602 tp->napi[0].last_tx_cons = 0; 9603 9604 /* Zero mailbox registers. */ 9605 if (tg3_flag(tp, SUPPORT_MSIX)) { 9606 for (i = 1; i < tp->irq_max; i++) { 9607 tp->napi[i].tx_prod = 0; 9608 tp->napi[i].tx_cons = 0; 9609 if (tg3_flag(tp, ENABLE_TSS)) 9610 tw32_mailbox(tp->napi[i].prodmbox, 0); 9611 tw32_rx_mbox(tp->napi[i].consmbox, 0); 9612 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 9613 tp->napi[i].chk_msi_cnt = 0; 9614 tp->napi[i].last_rx_cons = 0; 9615 tp->napi[i].last_tx_cons = 0; 9616 } 9617 if (!tg3_flag(tp, ENABLE_TSS)) 9618 tw32_mailbox(tp->napi[0].prodmbox, 0); 9619 } else { 9620 tp->napi[0].tx_prod = 0; 9621 tp->napi[0].tx_cons = 0; 9622 tw32_mailbox(tp->napi[0].prodmbox, 0); 9623 tw32_rx_mbox(tp->napi[0].consmbox, 0); 9624 } 9625 9626 /* Make sure the NIC-based send BD rings are disabled. */ 9627 if (!tg3_flag(tp, 5705_PLUS)) { 9628 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 9629 for (i = 0; i < 16; i++) 9630 tw32_tx_mbox(mbox + i * 8, 0); 9631 } 9632 9633 /* Clear status block in ram. */ 9634 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9635 9636 /* Set status block DMA address */ 9637 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9638 ((u64) tnapi->status_mapping >> 32)); 9639 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9640 ((u64) tnapi->status_mapping & 0xffffffff)); 9641 9642 stblk = HOSTCC_STATBLCK_RING1; 9643 9644 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 9645 u64 mapping = (u64)tnapi->status_mapping; 9646 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 9647 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 9648 stblk += 8; 9649 9650 /* Clear status block in ram. */ 9651 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9652 } 9653 9654 tg3_tx_rcbs_init(tp); 9655 tg3_rx_ret_rcbs_init(tp); 9656} 9657 9658static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 9659{ 9660 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 9661 9662 if (!tg3_flag(tp, 5750_PLUS) || 9663 tg3_flag(tp, 5780_CLASS) || 9664 tg3_asic_rev(tp) == ASIC_REV_5750 || 9665 tg3_asic_rev(tp) == ASIC_REV_5752 || 9666 tg3_flag(tp, 57765_PLUS)) 9667 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 9668 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9669 tg3_asic_rev(tp) == ASIC_REV_5787) 9670 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 9671 else 9672 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 9673 9674 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 9675 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 9676 9677 val = min(nic_rep_thresh, host_rep_thresh); 9678 tw32(RCVBDI_STD_THRESH, val); 9679 9680 if (tg3_flag(tp, 57765_PLUS)) 9681 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 9682 9683 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 9684 return; 9685 9686 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 9687 9688 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 9689 9690 val = min(bdcache_maxcnt / 2, host_rep_thresh); 9691 tw32(RCVBDI_JUMBO_THRESH, val); 9692 9693 if (tg3_flag(tp, 57765_PLUS)) 9694 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 9695} 9696 9697static inline u32 calc_crc(unsigned char *buf, int len) 9698{ 9699 u32 reg; 9700 u32 tmp; 9701 int j, k; 9702 9703 reg = 0xffffffff; 9704 9705 for (j = 0; j < len; j++) { 9706 reg ^= buf[j]; 9707 9708 for (k = 0; k < 8; k++) { 9709 tmp = reg & 0x01; 9710 9711 reg >>= 1; 9712 9713 if (tmp) 9714 reg ^= CRC32_POLY_LE; 9715 } 9716 } 9717 9718 return ~reg; 9719} 9720 9721static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 9722{ 9723 /* accept or reject all multicast frames */ 9724 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 9725 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 9726 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 9727 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 9728} 9729 9730static void __tg3_set_rx_mode(struct net_device *dev) 9731{ 9732 struct tg3 *tp = netdev_priv(dev); 9733 u32 rx_mode; 9734 9735 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 9736 RX_MODE_KEEP_VLAN_TAG); 9737 9738#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 9739 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 9740 * flag clear. 9741 */ 9742 if (!tg3_flag(tp, ENABLE_ASF)) 9743 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 9744#endif 9745 9746 if (dev->flags & IFF_PROMISC) { 9747 /* Promiscuous mode. */ 9748 rx_mode |= RX_MODE_PROMISC; 9749 } else if (dev->flags & IFF_ALLMULTI) { 9750 /* Accept all multicast. */ 9751 tg3_set_multi(tp, 1); 9752 } else if (netdev_mc_empty(dev)) { 9753 /* Reject all multicast. */ 9754 tg3_set_multi(tp, 0); 9755 } else { 9756 /* Accept one or more multicast(s). */ 9757 struct netdev_hw_addr *ha; 9758 u32 mc_filter[4] = { 0, }; 9759 u32 regidx; 9760 u32 bit; 9761 u32 crc; 9762 9763 netdev_for_each_mc_addr(ha, dev) { 9764 crc = calc_crc(ha->addr, ETH_ALEN); 9765 bit = ~crc & 0x7f; 9766 regidx = (bit & 0x60) >> 5; 9767 bit &= 0x1f; 9768 mc_filter[regidx] |= (1 << bit); 9769 } 9770 9771 tw32(MAC_HASH_REG_0, mc_filter[0]); 9772 tw32(MAC_HASH_REG_1, mc_filter[1]); 9773 tw32(MAC_HASH_REG_2, mc_filter[2]); 9774 tw32(MAC_HASH_REG_3, mc_filter[3]); 9775 } 9776 9777 if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) { 9778 rx_mode |= RX_MODE_PROMISC; 9779 } else if (!(dev->flags & IFF_PROMISC)) { 9780 /* Add all entries into to the mac addr filter list */ 9781 int i = 0; 9782 struct netdev_hw_addr *ha; 9783 9784 netdev_for_each_uc_addr(ha, dev) { 9785 __tg3_set_one_mac_addr(tp, ha->addr, 9786 i + TG3_UCAST_ADDR_IDX(tp)); 9787 i++; 9788 } 9789 } 9790 9791 if (rx_mode != tp->rx_mode) { 9792 tp->rx_mode = rx_mode; 9793 tw32_f(MAC_RX_MODE, rx_mode); 9794 udelay(10); 9795 } 9796} 9797 9798static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt) 9799{ 9800 int i; 9801 9802 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 9803 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt); 9804} 9805 9806static void tg3_rss_check_indir_tbl(struct tg3 *tp) 9807{ 9808 int i; 9809 9810 if (!tg3_flag(tp, SUPPORT_MSIX)) 9811 return; 9812 9813 if (tp->rxq_cnt == 1) { 9814 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 9815 return; 9816 } 9817 9818 /* Validate table against current IRQ count */ 9819 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 9820 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt) 9821 break; 9822 } 9823 9824 if (i != TG3_RSS_INDIR_TBL_SIZE) 9825 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt); 9826} 9827 9828static void tg3_rss_write_indir_tbl(struct tg3 *tp) 9829{ 9830 int i = 0; 9831 u32 reg = MAC_RSS_INDIR_TBL_0; 9832 9833 while (i < TG3_RSS_INDIR_TBL_SIZE) { 9834 u32 val = tp->rss_ind_tbl[i]; 9835 i++; 9836 for (; i % 8; i++) { 9837 val <<= 4; 9838 val |= tp->rss_ind_tbl[i]; 9839 } 9840 tw32(reg, val); 9841 reg += 4; 9842 } 9843} 9844 9845static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) 9846{ 9847 if (tg3_asic_rev(tp) == ASIC_REV_5719) 9848 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; 9849 else 9850 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; 9851} 9852 9853/* tp->lock is held. */ 9854static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) 9855{ 9856 u32 val, rdmac_mode; 9857 int i, err, limit; 9858 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 9859 9860 tg3_disable_ints(tp); 9861 9862 tg3_stop_fw(tp); 9863 9864 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 9865 9866 if (tg3_flag(tp, INIT_COMPLETE)) 9867 tg3_abort_hw(tp, 1); 9868 9869 if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 9870 !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) { 9871 tg3_phy_pull_config(tp); 9872 tg3_eee_pull_config(tp, NULL); 9873 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 9874 } 9875 9876 /* Enable MAC control of LPI */ 9877 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 9878 tg3_setup_eee(tp); 9879 9880 if (reset_phy) 9881 tg3_phy_reset(tp); 9882 9883 err = tg3_chip_reset(tp); 9884 if (err) 9885 return err; 9886 9887 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 9888 9889 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 9890 val = tr32(TG3_CPMU_CTRL); 9891 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 9892 tw32(TG3_CPMU_CTRL, val); 9893 9894 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9895 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9896 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9897 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9898 9899 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 9900 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 9901 val |= CPMU_LNK_AWARE_MACCLK_6_25; 9902 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 9903 9904 val = tr32(TG3_CPMU_HST_ACC); 9905 val &= ~CPMU_HST_ACC_MACCLK_MASK; 9906 val |= CPMU_HST_ACC_MACCLK_6_25; 9907 tw32(TG3_CPMU_HST_ACC, val); 9908 } 9909 9910 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9911 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 9912 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 9913 PCIE_PWR_MGMT_L1_THRESH_4MS; 9914 tw32(PCIE_PWR_MGMT_THRESH, val); 9915 9916 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 9917 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 9918 9919 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 9920 9921 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9922 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9923 } 9924 9925 if (tg3_flag(tp, L1PLLPD_EN)) { 9926 u32 grc_mode = tr32(GRC_MODE); 9927 9928 /* Access the lower 1K of PL PCIE block registers. */ 9929 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9930 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9931 9932 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 9933 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 9934 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 9935 9936 tw32(GRC_MODE, grc_mode); 9937 } 9938 9939 if (tg3_flag(tp, 57765_CLASS)) { 9940 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 9941 u32 grc_mode = tr32(GRC_MODE); 9942 9943 /* Access the lower 1K of PL PCIE block registers. */ 9944 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9945 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9946 9947 val = tr32(TG3_PCIE_TLDLPL_PORT + 9948 TG3_PCIE_PL_LO_PHYCTL5); 9949 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 9950 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 9951 9952 tw32(GRC_MODE, grc_mode); 9953 } 9954 9955 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) { 9956 u32 grc_mode; 9957 9958 /* Fix transmit hangs */ 9959 val = tr32(TG3_CPMU_PADRNG_CTL); 9960 val |= TG3_CPMU_PADRNG_CTL_RDIV2; 9961 tw32(TG3_CPMU_PADRNG_CTL, val); 9962 9963 grc_mode = tr32(GRC_MODE); 9964 9965 /* Access the lower 1K of DL PCIE block registers. */ 9966 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9967 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 9968 9969 val = tr32(TG3_PCIE_TLDLPL_PORT + 9970 TG3_PCIE_DL_LO_FTSMAX); 9971 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 9972 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 9973 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 9974 9975 tw32(GRC_MODE, grc_mode); 9976 } 9977 9978 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9979 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9980 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9981 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9982 } 9983 9984 /* This works around an issue with Athlon chipsets on 9985 * B3 tigon3 silicon. This bit has no effect on any 9986 * other revision. But do not set this on PCI Express 9987 * chips and don't even touch the clocks if the CPMU is present. 9988 */ 9989 if (!tg3_flag(tp, CPMU_PRESENT)) { 9990 if (!tg3_flag(tp, PCI_EXPRESS)) 9991 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 9992 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9993 } 9994 9995 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 9996 tg3_flag(tp, PCIX_MODE)) { 9997 val = tr32(TG3PCI_PCISTATE); 9998 val |= PCISTATE_RETRY_SAME_DMA; 9999 tw32(TG3PCI_PCISTATE, val); 10000 } 10001 10002 if (tg3_flag(tp, ENABLE_APE)) { 10003 /* Allow reads and writes to the 10004 * APE register and memory space. 10005 */ 10006 val = tr32(TG3PCI_PCISTATE); 10007 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 10008 PCISTATE_ALLOW_APE_SHMEM_WR | 10009 PCISTATE_ALLOW_APE_PSPACE_WR; 10010 tw32(TG3PCI_PCISTATE, val); 10011 } 10012 10013 if (tg3_chip_rev(tp) == CHIPREV_5704_BX) { 10014 /* Enable some hw fixes. */ 10015 val = tr32(TG3PCI_MSI_DATA); 10016 val |= (1 << 26) | (1 << 28) | (1 << 29); 10017 tw32(TG3PCI_MSI_DATA, val); 10018 } 10019 10020 /* Descriptor ring init may make accesses to the 10021 * NIC SRAM area to setup the TX descriptors, so we 10022 * can only do this after the hardware has been 10023 * successfully reset. 10024 */ 10025 err = tg3_init_rings(tp); 10026 if (err) 10027 return err; 10028 10029 if (tg3_flag(tp, 57765_PLUS)) { 10030 val = tr32(TG3PCI_DMA_RW_CTRL) & 10031 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 10032 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 10033 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 10034 if (!tg3_flag(tp, 57765_CLASS) && 10035 tg3_asic_rev(tp) != ASIC_REV_5717 && 10036 tg3_asic_rev(tp) != ASIC_REV_5762) 10037 val |= DMA_RWCTRL_TAGGED_STAT_WA; 10038 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 10039 } else if (tg3_asic_rev(tp) != ASIC_REV_5784 && 10040 tg3_asic_rev(tp) != ASIC_REV_5761) { 10041 /* This value is determined during the probe time DMA 10042 * engine test, tg3_test_dma. 10043 */ 10044 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 10045 } 10046 10047 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 10048 GRC_MODE_4X_NIC_SEND_RINGS | 10049 GRC_MODE_NO_TX_PHDR_CSUM | 10050 GRC_MODE_NO_RX_PHDR_CSUM); 10051 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 10052 10053 /* Pseudo-header checksum is done by hardware logic and not 10054 * the offload processers, so make the chip do the pseudo- 10055 * header checksums on receive. For transmit it is more 10056 * convenient to do the pseudo-header checksum in software 10057 * as Linux does that on transmit for us in all cases. 10058 */ 10059 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 10060 10061 val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; 10062 if (tp->rxptpctl) 10063 tw32(TG3_RX_PTP_CTL, 10064 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 10065 10066 if (tg3_flag(tp, PTP_CAPABLE)) 10067 val |= GRC_MODE_TIME_SYNC_ENABLE; 10068 10069 tw32(GRC_MODE, tp->grc_mode | val); 10070 10071 /* On one of the AMD platform, MRRS is restricted to 4000 because of 10072 * south bridge limitation. As a workaround, Driver is setting MRRS 10073 * to 2048 instead of default 4096. 10074 */ 10075 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 10076 tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) { 10077 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK; 10078 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048); 10079 } 10080 10081 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 10082 val = tr32(GRC_MISC_CFG); 10083 val &= ~0xff; 10084 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 10085 tw32(GRC_MISC_CFG, val); 10086 10087 /* Initialize MBUF/DESC pool. */ 10088 if (tg3_flag(tp, 5750_PLUS)) { 10089 /* Do nothing. */ 10090 } else if (tg3_asic_rev(tp) != ASIC_REV_5705) { 10091 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 10092 if (tg3_asic_rev(tp) == ASIC_REV_5704) 10093 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 10094 else 10095 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 10096 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 10097 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 10098 } else if (tg3_flag(tp, TSO_CAPABLE)) { 10099 int fw_len; 10100 10101 fw_len = tp->fw_len; 10102 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 10103 tw32(BUFMGR_MB_POOL_ADDR, 10104 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 10105 tw32(BUFMGR_MB_POOL_SIZE, 10106 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 10107 } 10108 10109 if (tp->dev->mtu <= ETH_DATA_LEN) { 10110 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10111 tp->bufmgr_config.mbuf_read_dma_low_water); 10112 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10113 tp->bufmgr_config.mbuf_mac_rx_low_water); 10114 tw32(BUFMGR_MB_HIGH_WATER, 10115 tp->bufmgr_config.mbuf_high_water); 10116 } else { 10117 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10118 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 10119 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10120 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 10121 tw32(BUFMGR_MB_HIGH_WATER, 10122 tp->bufmgr_config.mbuf_high_water_jumbo); 10123 } 10124 tw32(BUFMGR_DMA_LOW_WATER, 10125 tp->bufmgr_config.dma_low_water); 10126 tw32(BUFMGR_DMA_HIGH_WATER, 10127 tp->bufmgr_config.dma_high_water); 10128 10129 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 10130 if (tg3_asic_rev(tp) == ASIC_REV_5719) 10131 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 10132 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10133 tg3_asic_rev(tp) == ASIC_REV_5762 || 10134 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10135 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) 10136 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 10137 tw32(BUFMGR_MODE, val); 10138 for (i = 0; i < 2000; i++) { 10139 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 10140 break; 10141 udelay(10); 10142 } 10143 if (i >= 2000) { 10144 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 10145 return -ENODEV; 10146 } 10147 10148 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1) 10149 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 10150 10151 tg3_setup_rxbd_thresholds(tp); 10152 10153 /* Initialize TG3_BDINFO's at: 10154 * RCVDBDI_STD_BD: standard eth size rx ring 10155 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 10156 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 10157 * 10158 * like so: 10159 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 10160 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 10161 * ring attribute flags 10162 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 10163 * 10164 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 10165 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 10166 * 10167 * The size of each ring is fixed in the firmware, but the location is 10168 * configurable. 10169 */ 10170 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10171 ((u64) tpr->rx_std_mapping >> 32)); 10172 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10173 ((u64) tpr->rx_std_mapping & 0xffffffff)); 10174 if (!tg3_flag(tp, 5717_PLUS)) 10175 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 10176 NIC_SRAM_RX_BUFFER_DESC); 10177 10178 /* Disable the mini ring */ 10179 if (!tg3_flag(tp, 5705_PLUS)) 10180 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 10181 BDINFO_FLAGS_DISABLED); 10182 10183 /* Program the jumbo buffer descriptor ring control 10184 * blocks on those devices that have them. 10185 */ 10186 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10187 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 10188 10189 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 10190 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10191 ((u64) tpr->rx_jmb_mapping >> 32)); 10192 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10193 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 10194 val = TG3_RX_JMB_RING_SIZE(tp) << 10195 BDINFO_FLAGS_MAXLEN_SHIFT; 10196 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10197 val | BDINFO_FLAGS_USE_EXT_RECV); 10198 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 10199 tg3_flag(tp, 57765_CLASS) || 10200 tg3_asic_rev(tp) == ASIC_REV_5762) 10201 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 10202 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 10203 } else { 10204 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10205 BDINFO_FLAGS_DISABLED); 10206 } 10207 10208 if (tg3_flag(tp, 57765_PLUS)) { 10209 val = TG3_RX_STD_RING_SIZE(tp); 10210 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 10211 val |= (TG3_RX_STD_DMA_SZ << 2); 10212 } else 10213 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 10214 } else 10215 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 10216 10217 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 10218 10219 tpr->rx_std_prod_idx = tp->rx_pending; 10220 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 10221 10222 tpr->rx_jmb_prod_idx = 10223 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 10224 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 10225 10226 tg3_rings_reset(tp); 10227 10228 /* Initialize MAC address and backoff seed. */ 10229 __tg3_set_mac_addr(tp, false); 10230 10231 /* MTU + ethernet header + FCS + optional VLAN tag */ 10232 tw32(MAC_RX_MTU_SIZE, 10233 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 10234 10235 /* The slot time is changed by tg3_setup_phy if we 10236 * run at gigabit with half duplex. 10237 */ 10238 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 10239 (6 << TX_LENGTHS_IPG_SHIFT) | 10240 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 10241 10242 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10243 tg3_asic_rev(tp) == ASIC_REV_5762) 10244 val |= tr32(MAC_TX_LENGTHS) & 10245 (TX_LENGTHS_JMB_FRM_LEN_MSK | 10246 TX_LENGTHS_CNT_DWN_VAL_MSK); 10247 10248 tw32(MAC_TX_LENGTHS, val); 10249 10250 /* Receive rules. */ 10251 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 10252 tw32(RCVLPC_CONFIG, 0x0181); 10253 10254 /* Calculate RDMAC_MODE setting early, we need it to determine 10255 * the RCVLPC_STATE_ENABLE mask. 10256 */ 10257 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 10258 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 10259 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 10260 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 10261 RDMAC_MODE_LNGREAD_ENAB); 10262 10263 if (tg3_asic_rev(tp) == ASIC_REV_5717) 10264 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 10265 10266 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 10267 tg3_asic_rev(tp) == ASIC_REV_5785 || 10268 tg3_asic_rev(tp) == ASIC_REV_57780) 10269 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 10270 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 10271 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 10272 10273 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10274 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10275 if (tg3_flag(tp, TSO_CAPABLE)) { 10276 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 10277 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10278 !tg3_flag(tp, IS_5788)) { 10279 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10280 } 10281 } 10282 10283 if (tg3_flag(tp, PCI_EXPRESS)) 10284 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10285 10286 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10287 tp->dma_limit = 0; 10288 if (tp->dev->mtu <= ETH_DATA_LEN) { 10289 rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR; 10290 tp->dma_limit = TG3_TX_BD_DMA_MAX_2K; 10291 } 10292 } 10293 10294 if (tg3_flag(tp, HW_TSO_1) || 10295 tg3_flag(tp, HW_TSO_2) || 10296 tg3_flag(tp, HW_TSO_3)) 10297 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 10298 10299 if (tg3_flag(tp, 57765_PLUS) || 10300 tg3_asic_rev(tp) == ASIC_REV_5785 || 10301 tg3_asic_rev(tp) == ASIC_REV_57780) 10302 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 10303 10304 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10305 tg3_asic_rev(tp) == ASIC_REV_5762) 10306 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 10307 10308 if (tg3_asic_rev(tp) == ASIC_REV_5761 || 10309 tg3_asic_rev(tp) == ASIC_REV_5784 || 10310 tg3_asic_rev(tp) == ASIC_REV_5785 || 10311 tg3_asic_rev(tp) == ASIC_REV_57780 || 10312 tg3_flag(tp, 57765_PLUS)) { 10313 u32 tgtreg; 10314 10315 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10316 tgtreg = TG3_RDMA_RSRVCTRL_REG2; 10317 else 10318 tgtreg = TG3_RDMA_RSRVCTRL_REG; 10319 10320 val = tr32(tgtreg); 10321 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10322 tg3_asic_rev(tp) == ASIC_REV_5762) { 10323 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 10324 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 10325 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 10326 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 10327 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 10328 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 10329 } 10330 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 10331 } 10332 10333 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10334 tg3_asic_rev(tp) == ASIC_REV_5720 || 10335 tg3_asic_rev(tp) == ASIC_REV_5762) { 10336 u32 tgtreg; 10337 10338 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10339 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; 10340 else 10341 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; 10342 10343 val = tr32(tgtreg); 10344 tw32(tgtreg, val | 10345 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 10346 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 10347 } 10348 10349 /* Receive/send statistics. */ 10350 if (tg3_flag(tp, 5750_PLUS)) { 10351 val = tr32(RCVLPC_STATS_ENABLE); 10352 val &= ~RCVLPC_STATSENAB_DACK_FIX; 10353 tw32(RCVLPC_STATS_ENABLE, val); 10354 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 10355 tg3_flag(tp, TSO_CAPABLE)) { 10356 val = tr32(RCVLPC_STATS_ENABLE); 10357 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 10358 tw32(RCVLPC_STATS_ENABLE, val); 10359 } else { 10360 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 10361 } 10362 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 10363 tw32(SNDDATAI_STATSENAB, 0xffffff); 10364 tw32(SNDDATAI_STATSCTRL, 10365 (SNDDATAI_SCTRL_ENABLE | 10366 SNDDATAI_SCTRL_FASTUPD)); 10367 10368 /* Setup host coalescing engine. */ 10369 tw32(HOSTCC_MODE, 0); 10370 for (i = 0; i < 2000; i++) { 10371 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 10372 break; 10373 udelay(10); 10374 } 10375 10376 __tg3_set_coalesce(tp, &tp->coal); 10377 10378 if (!tg3_flag(tp, 5705_PLUS)) { 10379 /* Status/statistics block address. See tg3_timer, 10380 * the tg3_periodic_fetch_stats call there, and 10381 * tg3_get_stats to see how this works for 5705/5750 chips. 10382 */ 10383 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 10384 ((u64) tp->stats_mapping >> 32)); 10385 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 10386 ((u64) tp->stats_mapping & 0xffffffff)); 10387 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 10388 10389 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 10390 10391 /* Clear statistics and status block memory areas */ 10392 for (i = NIC_SRAM_STATS_BLK; 10393 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 10394 i += sizeof(u32)) { 10395 tg3_write_mem(tp, i, 0); 10396 udelay(40); 10397 } 10398 } 10399 10400 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 10401 10402 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 10403 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 10404 if (!tg3_flag(tp, 5705_PLUS)) 10405 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 10406 10407 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 10408 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 10409 /* reset to prevent losing 1st rx packet intermittently */ 10410 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10411 udelay(10); 10412 } 10413 10414 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 10415 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 10416 MAC_MODE_FHDE_ENABLE; 10417 if (tg3_flag(tp, ENABLE_APE)) 10418 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 10419 if (!tg3_flag(tp, 5705_PLUS) && 10420 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10421 tg3_asic_rev(tp) != ASIC_REV_5700) 10422 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 10423 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 10424 udelay(40); 10425 10426 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 10427 * If TG3_FLAG_IS_NIC is zero, we should read the 10428 * register to preserve the GPIO settings for LOMs. The GPIOs, 10429 * whether used as inputs or outputs, are set by boot code after 10430 * reset. 10431 */ 10432 if (!tg3_flag(tp, IS_NIC)) { 10433 u32 gpio_mask; 10434 10435 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 10436 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 10437 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 10438 10439 if (tg3_asic_rev(tp) == ASIC_REV_5752) 10440 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 10441 GRC_LCLCTRL_GPIO_OUTPUT3; 10442 10443 if (tg3_asic_rev(tp) == ASIC_REV_5755) 10444 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 10445 10446 tp->grc_local_ctrl &= ~gpio_mask; 10447 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 10448 10449 /* GPIO1 must be driven high for eeprom write protect */ 10450 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 10451 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 10452 GRC_LCLCTRL_GPIO_OUTPUT1); 10453 } 10454 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10455 udelay(100); 10456 10457 if (tg3_flag(tp, USING_MSIX)) { 10458 val = tr32(MSGINT_MODE); 10459 val |= MSGINT_MODE_ENABLE; 10460 if (tp->irq_cnt > 1) 10461 val |= MSGINT_MODE_MULTIVEC_EN; 10462 if (!tg3_flag(tp, 1SHOT_MSI)) 10463 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 10464 tw32(MSGINT_MODE, val); 10465 } 10466 10467 if (!tg3_flag(tp, 5705_PLUS)) { 10468 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 10469 udelay(40); 10470 } 10471 10472 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 10473 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 10474 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 10475 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 10476 WDMAC_MODE_LNGREAD_ENAB); 10477 10478 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10479 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10480 if (tg3_flag(tp, TSO_CAPABLE) && 10481 (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 || 10482 tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) { 10483 /* nothing */ 10484 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10485 !tg3_flag(tp, IS_5788)) { 10486 val |= WDMAC_MODE_RX_ACCEL; 10487 } 10488 } 10489 10490 /* Enable host coalescing bug fix */ 10491 if (tg3_flag(tp, 5755_PLUS)) 10492 val |= WDMAC_MODE_STATUS_TAG_FIX; 10493 10494 if (tg3_asic_rev(tp) == ASIC_REV_5785) 10495 val |= WDMAC_MODE_BURST_ALL_DATA; 10496 10497 tw32_f(WDMAC_MODE, val); 10498 udelay(40); 10499 10500 if (tg3_flag(tp, PCIX_MODE)) { 10501 u16 pcix_cmd; 10502 10503 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10504 &pcix_cmd); 10505 if (tg3_asic_rev(tp) == ASIC_REV_5703) { 10506 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 10507 pcix_cmd |= PCI_X_CMD_READ_2K; 10508 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) { 10509 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 10510 pcix_cmd |= PCI_X_CMD_READ_2K; 10511 } 10512 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10513 pcix_cmd); 10514 } 10515 10516 tw32_f(RDMAC_MODE, rdmac_mode); 10517 udelay(40); 10518 10519 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10520 tg3_asic_rev(tp) == ASIC_REV_5720) { 10521 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { 10522 if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) 10523 break; 10524 } 10525 if (i < TG3_NUM_RDMA_CHANNELS) { 10526 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10527 val |= tg3_lso_rd_dma_workaround_bit(tp); 10528 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10529 tg3_flag_set(tp, 5719_5720_RDMA_BUG); 10530 } 10531 } 10532 10533 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 10534 if (!tg3_flag(tp, 5705_PLUS)) 10535 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 10536 10537 if (tg3_asic_rev(tp) == ASIC_REV_5761) 10538 tw32(SNDDATAC_MODE, 10539 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 10540 else 10541 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 10542 10543 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 10544 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 10545 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 10546 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 10547 val |= RCVDBDI_MODE_LRG_RING_SZ; 10548 tw32(RCVDBDI_MODE, val); 10549 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 10550 if (tg3_flag(tp, HW_TSO_1) || 10551 tg3_flag(tp, HW_TSO_2) || 10552 tg3_flag(tp, HW_TSO_3)) 10553 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 10554 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 10555 if (tg3_flag(tp, ENABLE_TSS)) 10556 val |= SNDBDI_MODE_MULTI_TXQ_EN; 10557 tw32(SNDBDI_MODE, val); 10558 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 10559 10560 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 10561 err = tg3_load_5701_a0_firmware_fix(tp); 10562 if (err) 10563 return err; 10564 } 10565 10566 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10567 /* Ignore any errors for the firmware download. If download 10568 * fails, the device will operate with EEE disabled 10569 */ 10570 tg3_load_57766_firmware(tp); 10571 } 10572 10573 if (tg3_flag(tp, TSO_CAPABLE)) { 10574 err = tg3_load_tso_firmware(tp); 10575 if (err) 10576 return err; 10577 } 10578 10579 tp->tx_mode = TX_MODE_ENABLE; 10580 10581 if (tg3_flag(tp, 5755_PLUS) || 10582 tg3_asic_rev(tp) == ASIC_REV_5906) 10583 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 10584 10585 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10586 tg3_asic_rev(tp) == ASIC_REV_5762) { 10587 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 10588 tp->tx_mode &= ~val; 10589 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 10590 } 10591 10592 tw32_f(MAC_TX_MODE, tp->tx_mode); 10593 udelay(100); 10594 10595 if (tg3_flag(tp, ENABLE_RSS)) { 10596 u32 rss_key[10]; 10597 10598 tg3_rss_write_indir_tbl(tp); 10599 10600 netdev_rss_key_fill(rss_key, 10 * sizeof(u32)); 10601 10602 for (i = 0; i < 10 ; i++) 10603 tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]); 10604 } 10605 10606 tp->rx_mode = RX_MODE_ENABLE; 10607 if (tg3_flag(tp, 5755_PLUS)) 10608 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 10609 10610 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10611 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX; 10612 10613 if (tg3_flag(tp, ENABLE_RSS)) 10614 tp->rx_mode |= RX_MODE_RSS_ENABLE | 10615 RX_MODE_RSS_ITBL_HASH_BITS_7 | 10616 RX_MODE_RSS_IPV6_HASH_EN | 10617 RX_MODE_RSS_TCP_IPV6_HASH_EN | 10618 RX_MODE_RSS_IPV4_HASH_EN | 10619 RX_MODE_RSS_TCP_IPV4_HASH_EN; 10620 10621 tw32_f(MAC_RX_MODE, tp->rx_mode); 10622 udelay(10); 10623 10624 tw32(MAC_LED_CTRL, tp->led_ctrl); 10625 10626 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 10627 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10628 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10629 udelay(10); 10630 } 10631 tw32_f(MAC_RX_MODE, tp->rx_mode); 10632 udelay(10); 10633 10634 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10635 if ((tg3_asic_rev(tp) == ASIC_REV_5704) && 10636 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 10637 /* Set drive transmission level to 1.2V */ 10638 /* only if the signal pre-emphasis bit is not set */ 10639 val = tr32(MAC_SERDES_CFG); 10640 val &= 0xfffff000; 10641 val |= 0x880; 10642 tw32(MAC_SERDES_CFG, val); 10643 } 10644 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) 10645 tw32(MAC_SERDES_CFG, 0x616000); 10646 } 10647 10648 /* Prevent chip from dropping frames when flow control 10649 * is enabled. 10650 */ 10651 if (tg3_flag(tp, 57765_CLASS)) 10652 val = 1; 10653 else 10654 val = 2; 10655 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 10656 10657 if (tg3_asic_rev(tp) == ASIC_REV_5704 && 10658 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 10659 /* Use hardware link auto-negotiation */ 10660 tg3_flag_set(tp, HW_AUTONEG); 10661 } 10662 10663 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 10664 tg3_asic_rev(tp) == ASIC_REV_5714) { 10665 u32 tmp; 10666 10667 tmp = tr32(SERDES_RX_CTRL); 10668 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 10669 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 10670 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 10671 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10672 } 10673 10674 if (!tg3_flag(tp, USE_PHYLIB)) { 10675 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10676 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 10677 10678 err = tg3_setup_phy(tp, false); 10679 if (err) 10680 return err; 10681 10682 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10683 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 10684 u32 tmp; 10685 10686 /* Clear CRC stats. */ 10687 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 10688 tg3_writephy(tp, MII_TG3_TEST1, 10689 tmp | MII_TG3_TEST1_CRC_EN); 10690 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 10691 } 10692 } 10693 } 10694 10695 __tg3_set_rx_mode(tp->dev); 10696 10697 /* Initialize receive rules. */ 10698 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 10699 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 10700 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 10701 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 10702 10703 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 10704 limit = 8; 10705 else 10706 limit = 16; 10707 if (tg3_flag(tp, ENABLE_ASF)) 10708 limit -= 4; 10709 switch (limit) { 10710 case 16: 10711 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 10712 fallthrough; 10713 case 15: 10714 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 10715 fallthrough; 10716 case 14: 10717 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 10718 fallthrough; 10719 case 13: 10720 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 10721 fallthrough; 10722 case 12: 10723 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 10724 fallthrough; 10725 case 11: 10726 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 10727 fallthrough; 10728 case 10: 10729 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 10730 fallthrough; 10731 case 9: 10732 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 10733 fallthrough; 10734 case 8: 10735 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 10736 fallthrough; 10737 case 7: 10738 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 10739 fallthrough; 10740 case 6: 10741 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 10742 fallthrough; 10743 case 5: 10744 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 10745 fallthrough; 10746 case 4: 10747 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 10748 case 3: 10749 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 10750 case 2: 10751 case 1: 10752 10753 default: 10754 break; 10755 } 10756 10757 if (tg3_flag(tp, ENABLE_APE)) 10758 /* Write our heartbeat update interval to APE. */ 10759 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 10760 APE_HOST_HEARTBEAT_INT_5SEC); 10761 10762 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 10763 10764 return 0; 10765} 10766 10767/* Called at device open time to get the chip ready for 10768 * packet processing. Invoked with tp->lock held. 10769 */ 10770static int tg3_init_hw(struct tg3 *tp, bool reset_phy) 10771{ 10772 /* Chip may have been just powered on. If so, the boot code may still 10773 * be running initialization. Wait for it to finish to avoid races in 10774 * accessing the hardware. 10775 */ 10776 tg3_enable_register_access(tp); 10777 tg3_poll_fw(tp); 10778 10779 tg3_switch_clocks(tp); 10780 10781 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 10782 10783 return tg3_reset_hw(tp, reset_phy); 10784} 10785 10786#ifdef CONFIG_TIGON3_HWMON 10787static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 10788{ 10789 u32 off, len = TG3_OCIR_LEN; 10790 int i; 10791 10792 for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) { 10793 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 10794 10795 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 10796 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 10797 memset(ocir, 0, len); 10798 } 10799} 10800 10801/* sysfs attributes for hwmon */ 10802static ssize_t tg3_show_temp(struct device *dev, 10803 struct device_attribute *devattr, char *buf) 10804{ 10805 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 10806 struct tg3 *tp = dev_get_drvdata(dev); 10807 u32 temperature; 10808 10809 spin_lock_bh(&tp->lock); 10810 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 10811 sizeof(temperature)); 10812 spin_unlock_bh(&tp->lock); 10813 return sprintf(buf, "%u\n", temperature * 1000); 10814} 10815 10816 10817static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL, 10818 TG3_TEMP_SENSOR_OFFSET); 10819static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL, 10820 TG3_TEMP_CAUTION_OFFSET); 10821static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL, 10822 TG3_TEMP_MAX_OFFSET); 10823 10824static struct attribute *tg3_attrs[] = { 10825 &sensor_dev_attr_temp1_input.dev_attr.attr, 10826 &sensor_dev_attr_temp1_crit.dev_attr.attr, 10827 &sensor_dev_attr_temp1_max.dev_attr.attr, 10828 NULL 10829}; 10830ATTRIBUTE_GROUPS(tg3); 10831 10832static void tg3_hwmon_close(struct tg3 *tp) 10833{ 10834 if (tp->hwmon_dev) { 10835 hwmon_device_unregister(tp->hwmon_dev); 10836 tp->hwmon_dev = NULL; 10837 } 10838} 10839 10840static void tg3_hwmon_open(struct tg3 *tp) 10841{ 10842 int i; 10843 u32 size = 0; 10844 struct pci_dev *pdev = tp->pdev; 10845 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 10846 10847 tg3_sd_scan_scratchpad(tp, ocirs); 10848 10849 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 10850 if (!ocirs[i].src_data_length) 10851 continue; 10852 10853 size += ocirs[i].src_hdr_length; 10854 size += ocirs[i].src_data_length; 10855 } 10856 10857 if (!size) 10858 return; 10859 10860 tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3", 10861 tp, tg3_groups); 10862 if (IS_ERR(tp->hwmon_dev)) { 10863 tp->hwmon_dev = NULL; 10864 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 10865 } 10866} 10867#else 10868static inline void tg3_hwmon_close(struct tg3 *tp) { } 10869static inline void tg3_hwmon_open(struct tg3 *tp) { } 10870#endif /* CONFIG_TIGON3_HWMON */ 10871 10872 10873#define TG3_STAT_ADD32(PSTAT, REG) \ 10874do { u32 __val = tr32(REG); \ 10875 (PSTAT)->low += __val; \ 10876 if ((PSTAT)->low < __val) \ 10877 (PSTAT)->high += 1; \ 10878} while (0) 10879 10880static void tg3_periodic_fetch_stats(struct tg3 *tp) 10881{ 10882 struct tg3_hw_stats *sp = tp->hw_stats; 10883 10884 if (!tp->link_up) 10885 return; 10886 10887 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 10888 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 10889 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 10890 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 10891 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 10892 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 10893 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 10894 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 10895 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 10896 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 10897 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 10898 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 10899 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 10900 if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && 10901 (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + 10902 sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { 10903 u32 val; 10904 10905 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10906 val &= ~tg3_lso_rd_dma_workaround_bit(tp); 10907 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10908 tg3_flag_clear(tp, 5719_5720_RDMA_BUG); 10909 } 10910 10911 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 10912 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 10913 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 10914 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 10915 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 10916 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 10917 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 10918 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 10919 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 10920 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 10921 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 10922 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 10923 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 10924 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 10925 10926 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 10927 if (tg3_asic_rev(tp) != ASIC_REV_5717 && 10928 tg3_asic_rev(tp) != ASIC_REV_5762 && 10929 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 && 10930 tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) { 10931 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 10932 } else { 10933 u32 val = tr32(HOSTCC_FLOW_ATTN); 10934 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 10935 if (val) { 10936 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 10937 sp->rx_discards.low += val; 10938 if (sp->rx_discards.low < val) 10939 sp->rx_discards.high += 1; 10940 } 10941 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 10942 } 10943 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 10944} 10945 10946static void tg3_chk_missed_msi(struct tg3 *tp) 10947{ 10948 u32 i; 10949 10950 for (i = 0; i < tp->irq_cnt; i++) { 10951 struct tg3_napi *tnapi = &tp->napi[i]; 10952 10953 if (tg3_has_work(tnapi)) { 10954 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 10955 tnapi->last_tx_cons == tnapi->tx_cons) { 10956 if (tnapi->chk_msi_cnt < 1) { 10957 tnapi->chk_msi_cnt++; 10958 return; 10959 } 10960 tg3_msi(0, tnapi); 10961 } 10962 } 10963 tnapi->chk_msi_cnt = 0; 10964 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 10965 tnapi->last_tx_cons = tnapi->tx_cons; 10966 } 10967} 10968 10969static void tg3_timer(struct timer_list *t) 10970{ 10971 struct tg3 *tp = from_timer(tp, t, timer); 10972 10973 spin_lock(&tp->lock); 10974 10975 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) { 10976 spin_unlock(&tp->lock); 10977 goto restart_timer; 10978 } 10979 10980 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10981 tg3_flag(tp, 57765_CLASS)) 10982 tg3_chk_missed_msi(tp); 10983 10984 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 10985 /* BCM4785: Flush posted writes from GbE to host memory. */ 10986 tr32(HOSTCC_MODE); 10987 } 10988 10989 if (!tg3_flag(tp, TAGGED_STATUS)) { 10990 /* All of this garbage is because when using non-tagged 10991 * IRQ status the mailbox/status_block protocol the chip 10992 * uses with the cpu is race prone. 10993 */ 10994 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 10995 tw32(GRC_LOCAL_CTRL, 10996 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 10997 } else { 10998 tw32(HOSTCC_MODE, tp->coalesce_mode | 10999 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 11000 } 11001 11002 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 11003 spin_unlock(&tp->lock); 11004 tg3_reset_task_schedule(tp); 11005 goto restart_timer; 11006 } 11007 } 11008 11009 /* This part only runs once per second. */ 11010 if (!--tp->timer_counter) { 11011 if (tg3_flag(tp, 5705_PLUS)) 11012 tg3_periodic_fetch_stats(tp); 11013 11014 if (tp->setlpicnt && !--tp->setlpicnt) 11015 tg3_phy_eee_enable(tp); 11016 11017 if (tg3_flag(tp, USE_LINKCHG_REG)) { 11018 u32 mac_stat; 11019 int phy_event; 11020 11021 mac_stat = tr32(MAC_STATUS); 11022 11023 phy_event = 0; 11024 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 11025 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 11026 phy_event = 1; 11027 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 11028 phy_event = 1; 11029 11030 if (phy_event) 11031 tg3_setup_phy(tp, false); 11032 } else if (tg3_flag(tp, POLL_SERDES)) { 11033 u32 mac_stat = tr32(MAC_STATUS); 11034 int need_setup = 0; 11035 11036 if (tp->link_up && 11037 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 11038 need_setup = 1; 11039 } 11040 if (!tp->link_up && 11041 (mac_stat & (MAC_STATUS_PCS_SYNCED | 11042 MAC_STATUS_SIGNAL_DET))) { 11043 need_setup = 1; 11044 } 11045 if (need_setup) { 11046 if (!tp->serdes_counter) { 11047 tw32_f(MAC_MODE, 11048 (tp->mac_mode & 11049 ~MAC_MODE_PORT_MODE_MASK)); 11050 udelay(40); 11051 tw32_f(MAC_MODE, tp->mac_mode); 11052 udelay(40); 11053 } 11054 tg3_setup_phy(tp, false); 11055 } 11056 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 11057 tg3_flag(tp, 5780_CLASS)) { 11058 tg3_serdes_parallel_detect(tp); 11059 } else if (tg3_flag(tp, POLL_CPMU_LINK)) { 11060 u32 cpmu = tr32(TG3_CPMU_STATUS); 11061 bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) == 11062 TG3_CPMU_STATUS_LINK_MASK); 11063 11064 if (link_up != tp->link_up) 11065 tg3_setup_phy(tp, false); 11066 } 11067 11068 tp->timer_counter = tp->timer_multiplier; 11069 } 11070 11071 /* Heartbeat is only sent once every 2 seconds. 11072 * 11073 * The heartbeat is to tell the ASF firmware that the host 11074 * driver is still alive. In the event that the OS crashes, 11075 * ASF needs to reset the hardware to free up the FIFO space 11076 * that may be filled with rx packets destined for the host. 11077 * If the FIFO is full, ASF will no longer function properly. 11078 * 11079 * Unintended resets have been reported on real time kernels 11080 * where the timer doesn't run on time. Netpoll will also have 11081 * same problem. 11082 * 11083 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 11084 * to check the ring condition when the heartbeat is expiring 11085 * before doing the reset. This will prevent most unintended 11086 * resets. 11087 */ 11088 if (!--tp->asf_counter) { 11089 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 11090 tg3_wait_for_event_ack(tp); 11091 11092 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 11093 FWCMD_NICDRV_ALIVE3); 11094 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 11095 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 11096 TG3_FW_UPDATE_TIMEOUT_SEC); 11097 11098 tg3_generate_fw_event(tp); 11099 } 11100 tp->asf_counter = tp->asf_multiplier; 11101 } 11102 11103 /* Update the APE heartbeat every 5 seconds.*/ 11104 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL); 11105 11106 spin_unlock(&tp->lock); 11107 11108restart_timer: 11109 tp->timer.expires = jiffies + tp->timer_offset; 11110 add_timer(&tp->timer); 11111} 11112 11113static void tg3_timer_init(struct tg3 *tp) 11114{ 11115 if (tg3_flag(tp, TAGGED_STATUS) && 11116 tg3_asic_rev(tp) != ASIC_REV_5717 && 11117 !tg3_flag(tp, 57765_CLASS)) 11118 tp->timer_offset = HZ; 11119 else 11120 tp->timer_offset = HZ / 10; 11121 11122 BUG_ON(tp->timer_offset > HZ); 11123 11124 tp->timer_multiplier = (HZ / tp->timer_offset); 11125 tp->asf_multiplier = (HZ / tp->timer_offset) * 11126 TG3_FW_UPDATE_FREQ_SEC; 11127 11128 timer_setup(&tp->timer, tg3_timer, 0); 11129} 11130 11131static void tg3_timer_start(struct tg3 *tp) 11132{ 11133 tp->asf_counter = tp->asf_multiplier; 11134 tp->timer_counter = tp->timer_multiplier; 11135 11136 tp->timer.expires = jiffies + tp->timer_offset; 11137 add_timer(&tp->timer); 11138} 11139 11140static void tg3_timer_stop(struct tg3 *tp) 11141{ 11142 del_timer_sync(&tp->timer); 11143} 11144 11145/* Restart hardware after configuration changes, self-test, etc. 11146 * Invoked with tp->lock held. 11147 */ 11148static int tg3_restart_hw(struct tg3 *tp, bool reset_phy) 11149 __releases(tp->lock) 11150 __acquires(tp->lock) 11151{ 11152 int err; 11153 11154 err = tg3_init_hw(tp, reset_phy); 11155 if (err) { 11156 netdev_err(tp->dev, 11157 "Failed to re-initialize device, aborting\n"); 11158 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11159 tg3_full_unlock(tp); 11160 tg3_timer_stop(tp); 11161 tp->irq_sync = 0; 11162 tg3_napi_enable(tp); 11163 dev_close(tp->dev); 11164 tg3_full_lock(tp, 0); 11165 } 11166 return err; 11167} 11168 11169static void tg3_reset_task(struct work_struct *work) 11170{ 11171 struct tg3 *tp = container_of(work, struct tg3, reset_task); 11172 int err; 11173 11174 rtnl_lock(); 11175 tg3_full_lock(tp, 0); 11176 11177 if (!netif_running(tp->dev)) { 11178 tg3_flag_clear(tp, RESET_TASK_PENDING); 11179 tg3_full_unlock(tp); 11180 rtnl_unlock(); 11181 return; 11182 } 11183 11184 tg3_full_unlock(tp); 11185 11186 tg3_phy_stop(tp); 11187 11188 tg3_netif_stop(tp); 11189 11190 tg3_full_lock(tp, 1); 11191 11192 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 11193 tp->write32_tx_mbox = tg3_write32_tx_mbox; 11194 tp->write32_rx_mbox = tg3_write_flush_reg32; 11195 tg3_flag_set(tp, MBOX_WRITE_REORDER); 11196 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 11197 } 11198 11199 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 11200 err = tg3_init_hw(tp, true); 11201 if (err) { 11202 tg3_full_unlock(tp); 11203 tp->irq_sync = 0; 11204 tg3_napi_enable(tp); 11205 /* Clear this flag so that tg3_reset_task_cancel() will not 11206 * call cancel_work_sync() and wait forever. 11207 */ 11208 tg3_flag_clear(tp, RESET_TASK_PENDING); 11209 dev_close(tp->dev); 11210 goto out; 11211 } 11212 11213 tg3_netif_start(tp); 11214 tg3_full_unlock(tp); 11215 tg3_phy_start(tp); 11216 tg3_flag_clear(tp, RESET_TASK_PENDING); 11217out: 11218 rtnl_unlock(); 11219} 11220 11221static int tg3_request_irq(struct tg3 *tp, int irq_num) 11222{ 11223 irq_handler_t fn; 11224 unsigned long flags; 11225 char *name; 11226 struct tg3_napi *tnapi = &tp->napi[irq_num]; 11227 11228 if (tp->irq_cnt == 1) 11229 name = tp->dev->name; 11230 else { 11231 name = &tnapi->irq_lbl[0]; 11232 if (tnapi->tx_buffers && tnapi->rx_rcb) 11233 snprintf(name, IFNAMSIZ, 11234 "%s-txrx-%d", tp->dev->name, irq_num); 11235 else if (tnapi->tx_buffers) 11236 snprintf(name, IFNAMSIZ, 11237 "%s-tx-%d", tp->dev->name, irq_num); 11238 else if (tnapi->rx_rcb) 11239 snprintf(name, IFNAMSIZ, 11240 "%s-rx-%d", tp->dev->name, irq_num); 11241 else 11242 snprintf(name, IFNAMSIZ, 11243 "%s-%d", tp->dev->name, irq_num); 11244 name[IFNAMSIZ-1] = 0; 11245 } 11246 11247 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11248 fn = tg3_msi; 11249 if (tg3_flag(tp, 1SHOT_MSI)) 11250 fn = tg3_msi_1shot; 11251 flags = 0; 11252 } else { 11253 fn = tg3_interrupt; 11254 if (tg3_flag(tp, TAGGED_STATUS)) 11255 fn = tg3_interrupt_tagged; 11256 flags = IRQF_SHARED; 11257 } 11258 11259 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 11260} 11261 11262static int tg3_test_interrupt(struct tg3 *tp) 11263{ 11264 struct tg3_napi *tnapi = &tp->napi[0]; 11265 struct net_device *dev = tp->dev; 11266 int err, i, intr_ok = 0; 11267 u32 val; 11268 11269 if (!netif_running(dev)) 11270 return -ENODEV; 11271 11272 tg3_disable_ints(tp); 11273 11274 free_irq(tnapi->irq_vec, tnapi); 11275 11276 /* 11277 * Turn off MSI one shot mode. Otherwise this test has no 11278 * observable way to know whether the interrupt was delivered. 11279 */ 11280 if (tg3_flag(tp, 57765_PLUS)) { 11281 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 11282 tw32(MSGINT_MODE, val); 11283 } 11284 11285 err = request_irq(tnapi->irq_vec, tg3_test_isr, 11286 IRQF_SHARED, dev->name, tnapi); 11287 if (err) 11288 return err; 11289 11290 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 11291 tg3_enable_ints(tp); 11292 11293 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11294 tnapi->coal_now); 11295 11296 for (i = 0; i < 5; i++) { 11297 u32 int_mbox, misc_host_ctrl; 11298 11299 int_mbox = tr32_mailbox(tnapi->int_mbox); 11300 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 11301 11302 if ((int_mbox != 0) || 11303 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 11304 intr_ok = 1; 11305 break; 11306 } 11307 11308 if (tg3_flag(tp, 57765_PLUS) && 11309 tnapi->hw_status->status_tag != tnapi->last_tag) 11310 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 11311 11312 msleep(10); 11313 } 11314 11315 tg3_disable_ints(tp); 11316 11317 free_irq(tnapi->irq_vec, tnapi); 11318 11319 err = tg3_request_irq(tp, 0); 11320 11321 if (err) 11322 return err; 11323 11324 if (intr_ok) { 11325 /* Reenable MSI one shot mode. */ 11326 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 11327 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 11328 tw32(MSGINT_MODE, val); 11329 } 11330 return 0; 11331 } 11332 11333 return -EIO; 11334} 11335 11336/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 11337 * successfully restored 11338 */ 11339static int tg3_test_msi(struct tg3 *tp) 11340{ 11341 int err; 11342 u16 pci_cmd; 11343 11344 if (!tg3_flag(tp, USING_MSI)) 11345 return 0; 11346 11347 /* Turn off SERR reporting in case MSI terminates with Master 11348 * Abort. 11349 */ 11350 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 11351 pci_write_config_word(tp->pdev, PCI_COMMAND, 11352 pci_cmd & ~PCI_COMMAND_SERR); 11353 11354 err = tg3_test_interrupt(tp); 11355 11356 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 11357 11358 if (!err) 11359 return 0; 11360 11361 /* other failures */ 11362 if (err != -EIO) 11363 return err; 11364 11365 /* MSI test failed, go back to INTx mode */ 11366 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 11367 "to INTx mode. Please report this failure to the PCI " 11368 "maintainer and include system chipset information\n"); 11369 11370 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11371 11372 pci_disable_msi(tp->pdev); 11373 11374 tg3_flag_clear(tp, USING_MSI); 11375 tp->napi[0].irq_vec = tp->pdev->irq; 11376 11377 err = tg3_request_irq(tp, 0); 11378 if (err) 11379 return err; 11380 11381 /* Need to reset the chip because the MSI cycle may have terminated 11382 * with Master Abort. 11383 */ 11384 tg3_full_lock(tp, 1); 11385 11386 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11387 err = tg3_init_hw(tp, true); 11388 11389 tg3_full_unlock(tp); 11390 11391 if (err) 11392 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11393 11394 return err; 11395} 11396 11397static int tg3_request_firmware(struct tg3 *tp) 11398{ 11399 const struct tg3_firmware_hdr *fw_hdr; 11400 11401 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 11402 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 11403 tp->fw_needed); 11404 return -ENOENT; 11405 } 11406 11407 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 11408 11409 /* Firmware blob starts with version numbers, followed by 11410 * start address and _full_ length including BSS sections 11411 * (which must be longer than the actual data, of course 11412 */ 11413 11414 tp->fw_len = be32_to_cpu(fw_hdr->len); /* includes bss */ 11415 if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) { 11416 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 11417 tp->fw_len, tp->fw_needed); 11418 release_firmware(tp->fw); 11419 tp->fw = NULL; 11420 return -EINVAL; 11421 } 11422 11423 /* We no longer need firmware; we have it. */ 11424 tp->fw_needed = NULL; 11425 return 0; 11426} 11427 11428static u32 tg3_irq_count(struct tg3 *tp) 11429{ 11430 u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt); 11431 11432 if (irq_cnt > 1) { 11433 /* We want as many rx rings enabled as there are cpus. 11434 * In multiqueue MSI-X mode, the first MSI-X vector 11435 * only deals with link interrupts, etc, so we add 11436 * one to the number of vectors we are requesting. 11437 */ 11438 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max); 11439 } 11440 11441 return irq_cnt; 11442} 11443 11444static bool tg3_enable_msix(struct tg3 *tp) 11445{ 11446 int i, rc; 11447 struct msix_entry msix_ent[TG3_IRQ_MAX_VECS]; 11448 11449 tp->txq_cnt = tp->txq_req; 11450 tp->rxq_cnt = tp->rxq_req; 11451 if (!tp->rxq_cnt) 11452 tp->rxq_cnt = netif_get_num_default_rss_queues(); 11453 if (tp->rxq_cnt > tp->rxq_max) 11454 tp->rxq_cnt = tp->rxq_max; 11455 11456 /* Disable multiple TX rings by default. Simple round-robin hardware 11457 * scheduling of the TX rings can cause starvation of rings with 11458 * small packets when other rings have TSO or jumbo packets. 11459 */ 11460 if (!tp->txq_req) 11461 tp->txq_cnt = 1; 11462 11463 tp->irq_cnt = tg3_irq_count(tp); 11464 11465 for (i = 0; i < tp->irq_max; i++) { 11466 msix_ent[i].entry = i; 11467 msix_ent[i].vector = 0; 11468 } 11469 11470 rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt); 11471 if (rc < 0) { 11472 return false; 11473 } else if (rc < tp->irq_cnt) { 11474 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 11475 tp->irq_cnt, rc); 11476 tp->irq_cnt = rc; 11477 tp->rxq_cnt = max(rc - 1, 1); 11478 if (tp->txq_cnt) 11479 tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max); 11480 } 11481 11482 for (i = 0; i < tp->irq_max; i++) 11483 tp->napi[i].irq_vec = msix_ent[i].vector; 11484 11485 if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) { 11486 pci_disable_msix(tp->pdev); 11487 return false; 11488 } 11489 11490 if (tp->irq_cnt == 1) 11491 return true; 11492 11493 tg3_flag_set(tp, ENABLE_RSS); 11494 11495 if (tp->txq_cnt > 1) 11496 tg3_flag_set(tp, ENABLE_TSS); 11497 11498 netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt); 11499 11500 return true; 11501} 11502 11503static void tg3_ints_init(struct tg3 *tp) 11504{ 11505 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 11506 !tg3_flag(tp, TAGGED_STATUS)) { 11507 /* All MSI supporting chips should support tagged 11508 * status. Assert that this is the case. 11509 */ 11510 netdev_warn(tp->dev, 11511 "MSI without TAGGED_STATUS? Not using MSI\n"); 11512 goto defcfg; 11513 } 11514 11515 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 11516 tg3_flag_set(tp, USING_MSIX); 11517 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 11518 tg3_flag_set(tp, USING_MSI); 11519 11520 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11521 u32 msi_mode = tr32(MSGINT_MODE); 11522 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 11523 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 11524 if (!tg3_flag(tp, 1SHOT_MSI)) 11525 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 11526 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 11527 } 11528defcfg: 11529 if (!tg3_flag(tp, USING_MSIX)) { 11530 tp->irq_cnt = 1; 11531 tp->napi[0].irq_vec = tp->pdev->irq; 11532 } 11533 11534 if (tp->irq_cnt == 1) { 11535 tp->txq_cnt = 1; 11536 tp->rxq_cnt = 1; 11537 netif_set_real_num_tx_queues(tp->dev, 1); 11538 netif_set_real_num_rx_queues(tp->dev, 1); 11539 } 11540} 11541 11542static void tg3_ints_fini(struct tg3 *tp) 11543{ 11544 if (tg3_flag(tp, USING_MSIX)) 11545 pci_disable_msix(tp->pdev); 11546 else if (tg3_flag(tp, USING_MSI)) 11547 pci_disable_msi(tp->pdev); 11548 tg3_flag_clear(tp, USING_MSI); 11549 tg3_flag_clear(tp, USING_MSIX); 11550 tg3_flag_clear(tp, ENABLE_RSS); 11551 tg3_flag_clear(tp, ENABLE_TSS); 11552} 11553 11554static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, 11555 bool init) 11556{ 11557 struct net_device *dev = tp->dev; 11558 int i, err; 11559 11560 /* 11561 * Setup interrupts first so we know how 11562 * many NAPI resources to allocate 11563 */ 11564 tg3_ints_init(tp); 11565 11566 tg3_rss_check_indir_tbl(tp); 11567 11568 /* The placement of this call is tied 11569 * to the setup and use of Host TX descriptors. 11570 */ 11571 err = tg3_alloc_consistent(tp); 11572 if (err) 11573 goto out_ints_fini; 11574 11575 tg3_napi_init(tp); 11576 11577 tg3_napi_enable(tp); 11578 11579 for (i = 0; i < tp->irq_cnt; i++) { 11580 err = tg3_request_irq(tp, i); 11581 if (err) { 11582 for (i--; i >= 0; i--) { 11583 struct tg3_napi *tnapi = &tp->napi[i]; 11584 11585 free_irq(tnapi->irq_vec, tnapi); 11586 } 11587 goto out_napi_fini; 11588 } 11589 } 11590 11591 tg3_full_lock(tp, 0); 11592 11593 if (init) 11594 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 11595 11596 err = tg3_init_hw(tp, reset_phy); 11597 if (err) { 11598 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11599 tg3_free_rings(tp); 11600 } 11601 11602 tg3_full_unlock(tp); 11603 11604 if (err) 11605 goto out_free_irq; 11606 11607 if (test_irq && tg3_flag(tp, USING_MSI)) { 11608 err = tg3_test_msi(tp); 11609 11610 if (err) { 11611 tg3_full_lock(tp, 0); 11612 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11613 tg3_free_rings(tp); 11614 tg3_full_unlock(tp); 11615 11616 goto out_napi_fini; 11617 } 11618 11619 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 11620 u32 val = tr32(PCIE_TRANSACTION_CFG); 11621 11622 tw32(PCIE_TRANSACTION_CFG, 11623 val | PCIE_TRANS_CFG_1SHOT_MSI); 11624 } 11625 } 11626 11627 tg3_phy_start(tp); 11628 11629 tg3_hwmon_open(tp); 11630 11631 tg3_full_lock(tp, 0); 11632 11633 tg3_timer_start(tp); 11634 tg3_flag_set(tp, INIT_COMPLETE); 11635 tg3_enable_ints(tp); 11636 11637 tg3_ptp_resume(tp); 11638 11639 tg3_full_unlock(tp); 11640 11641 netif_tx_start_all_queues(dev); 11642 11643 /* 11644 * Reset loopback feature if it was turned on while the device was down 11645 * make sure that it's installed properly now. 11646 */ 11647 if (dev->features & NETIF_F_LOOPBACK) 11648 tg3_set_loopback(dev, dev->features); 11649 11650 return 0; 11651 11652out_free_irq: 11653 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11654 struct tg3_napi *tnapi = &tp->napi[i]; 11655 free_irq(tnapi->irq_vec, tnapi); 11656 } 11657 11658out_napi_fini: 11659 tg3_napi_disable(tp); 11660 tg3_napi_fini(tp); 11661 tg3_free_consistent(tp); 11662 11663out_ints_fini: 11664 tg3_ints_fini(tp); 11665 11666 return err; 11667} 11668 11669static void tg3_stop(struct tg3 *tp) 11670{ 11671 int i; 11672 11673 tg3_reset_task_cancel(tp); 11674 tg3_netif_stop(tp); 11675 11676 tg3_timer_stop(tp); 11677 11678 tg3_hwmon_close(tp); 11679 11680 tg3_phy_stop(tp); 11681 11682 tg3_full_lock(tp, 1); 11683 11684 tg3_disable_ints(tp); 11685 11686 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11687 tg3_free_rings(tp); 11688 tg3_flag_clear(tp, INIT_COMPLETE); 11689 11690 tg3_full_unlock(tp); 11691 11692 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11693 struct tg3_napi *tnapi = &tp->napi[i]; 11694 free_irq(tnapi->irq_vec, tnapi); 11695 } 11696 11697 tg3_ints_fini(tp); 11698 11699 tg3_napi_fini(tp); 11700 11701 tg3_free_consistent(tp); 11702} 11703 11704static int tg3_open(struct net_device *dev) 11705{ 11706 struct tg3 *tp = netdev_priv(dev); 11707 int err; 11708 11709 if (tp->pcierr_recovery) { 11710 netdev_err(dev, "Failed to open device. PCI error recovery " 11711 "in progress\n"); 11712 return -EAGAIN; 11713 } 11714 11715 if (tp->fw_needed) { 11716 err = tg3_request_firmware(tp); 11717 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 11718 if (err) { 11719 netdev_warn(tp->dev, "EEE capability disabled\n"); 11720 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11721 } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 11722 netdev_warn(tp->dev, "EEE capability restored\n"); 11723 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 11724 } 11725 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 11726 if (err) 11727 return err; 11728 } else if (err) { 11729 netdev_warn(tp->dev, "TSO capability disabled\n"); 11730 tg3_flag_clear(tp, TSO_CAPABLE); 11731 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 11732 netdev_notice(tp->dev, "TSO capability restored\n"); 11733 tg3_flag_set(tp, TSO_CAPABLE); 11734 } 11735 } 11736 11737 tg3_carrier_off(tp); 11738 11739 err = tg3_power_up(tp); 11740 if (err) 11741 return err; 11742 11743 tg3_full_lock(tp, 0); 11744 11745 tg3_disable_ints(tp); 11746 tg3_flag_clear(tp, INIT_COMPLETE); 11747 11748 tg3_full_unlock(tp); 11749 11750 err = tg3_start(tp, 11751 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN), 11752 true, true); 11753 if (err) { 11754 tg3_frob_aux_power(tp, false); 11755 pci_set_power_state(tp->pdev, PCI_D3hot); 11756 } 11757 11758 return err; 11759} 11760 11761static int tg3_close(struct net_device *dev) 11762{ 11763 struct tg3 *tp = netdev_priv(dev); 11764 11765 if (tp->pcierr_recovery) { 11766 netdev_err(dev, "Failed to close device. PCI error recovery " 11767 "in progress\n"); 11768 return -EAGAIN; 11769 } 11770 11771 tg3_stop(tp); 11772 11773 if (pci_device_is_present(tp->pdev)) { 11774 tg3_power_down_prepare(tp); 11775 11776 tg3_carrier_off(tp); 11777 } 11778 return 0; 11779} 11780 11781static inline u64 get_stat64(tg3_stat64_t *val) 11782{ 11783 return ((u64)val->high << 32) | ((u64)val->low); 11784} 11785 11786static u64 tg3_calc_crc_errors(struct tg3 *tp) 11787{ 11788 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11789 11790 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11791 (tg3_asic_rev(tp) == ASIC_REV_5700 || 11792 tg3_asic_rev(tp) == ASIC_REV_5701)) { 11793 u32 val; 11794 11795 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 11796 tg3_writephy(tp, MII_TG3_TEST1, 11797 val | MII_TG3_TEST1_CRC_EN); 11798 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 11799 } else 11800 val = 0; 11801 11802 tp->phy_crc_errors += val; 11803 11804 return tp->phy_crc_errors; 11805 } 11806 11807 return get_stat64(&hw_stats->rx_fcs_errors); 11808} 11809 11810#define ESTAT_ADD(member) \ 11811 estats->member = old_estats->member + \ 11812 get_stat64(&hw_stats->member) 11813 11814static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 11815{ 11816 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 11817 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11818 11819 ESTAT_ADD(rx_octets); 11820 ESTAT_ADD(rx_fragments); 11821 ESTAT_ADD(rx_ucast_packets); 11822 ESTAT_ADD(rx_mcast_packets); 11823 ESTAT_ADD(rx_bcast_packets); 11824 ESTAT_ADD(rx_fcs_errors); 11825 ESTAT_ADD(rx_align_errors); 11826 ESTAT_ADD(rx_xon_pause_rcvd); 11827 ESTAT_ADD(rx_xoff_pause_rcvd); 11828 ESTAT_ADD(rx_mac_ctrl_rcvd); 11829 ESTAT_ADD(rx_xoff_entered); 11830 ESTAT_ADD(rx_frame_too_long_errors); 11831 ESTAT_ADD(rx_jabbers); 11832 ESTAT_ADD(rx_undersize_packets); 11833 ESTAT_ADD(rx_in_length_errors); 11834 ESTAT_ADD(rx_out_length_errors); 11835 ESTAT_ADD(rx_64_or_less_octet_packets); 11836 ESTAT_ADD(rx_65_to_127_octet_packets); 11837 ESTAT_ADD(rx_128_to_255_octet_packets); 11838 ESTAT_ADD(rx_256_to_511_octet_packets); 11839 ESTAT_ADD(rx_512_to_1023_octet_packets); 11840 ESTAT_ADD(rx_1024_to_1522_octet_packets); 11841 ESTAT_ADD(rx_1523_to_2047_octet_packets); 11842 ESTAT_ADD(rx_2048_to_4095_octet_packets); 11843 ESTAT_ADD(rx_4096_to_8191_octet_packets); 11844 ESTAT_ADD(rx_8192_to_9022_octet_packets); 11845 11846 ESTAT_ADD(tx_octets); 11847 ESTAT_ADD(tx_collisions); 11848 ESTAT_ADD(tx_xon_sent); 11849 ESTAT_ADD(tx_xoff_sent); 11850 ESTAT_ADD(tx_flow_control); 11851 ESTAT_ADD(tx_mac_errors); 11852 ESTAT_ADD(tx_single_collisions); 11853 ESTAT_ADD(tx_mult_collisions); 11854 ESTAT_ADD(tx_deferred); 11855 ESTAT_ADD(tx_excessive_collisions); 11856 ESTAT_ADD(tx_late_collisions); 11857 ESTAT_ADD(tx_collide_2times); 11858 ESTAT_ADD(tx_collide_3times); 11859 ESTAT_ADD(tx_collide_4times); 11860 ESTAT_ADD(tx_collide_5times); 11861 ESTAT_ADD(tx_collide_6times); 11862 ESTAT_ADD(tx_collide_7times); 11863 ESTAT_ADD(tx_collide_8times); 11864 ESTAT_ADD(tx_collide_9times); 11865 ESTAT_ADD(tx_collide_10times); 11866 ESTAT_ADD(tx_collide_11times); 11867 ESTAT_ADD(tx_collide_12times); 11868 ESTAT_ADD(tx_collide_13times); 11869 ESTAT_ADD(tx_collide_14times); 11870 ESTAT_ADD(tx_collide_15times); 11871 ESTAT_ADD(tx_ucast_packets); 11872 ESTAT_ADD(tx_mcast_packets); 11873 ESTAT_ADD(tx_bcast_packets); 11874 ESTAT_ADD(tx_carrier_sense_errors); 11875 ESTAT_ADD(tx_discards); 11876 ESTAT_ADD(tx_errors); 11877 11878 ESTAT_ADD(dma_writeq_full); 11879 ESTAT_ADD(dma_write_prioq_full); 11880 ESTAT_ADD(rxbds_empty); 11881 ESTAT_ADD(rx_discards); 11882 ESTAT_ADD(rx_errors); 11883 ESTAT_ADD(rx_threshold_hit); 11884 11885 ESTAT_ADD(dma_readq_full); 11886 ESTAT_ADD(dma_read_prioq_full); 11887 ESTAT_ADD(tx_comp_queue_full); 11888 11889 ESTAT_ADD(ring_set_send_prod_index); 11890 ESTAT_ADD(ring_status_update); 11891 ESTAT_ADD(nic_irqs); 11892 ESTAT_ADD(nic_avoided_irqs); 11893 ESTAT_ADD(nic_tx_threshold_hit); 11894 11895 ESTAT_ADD(mbuf_lwm_thresh_hit); 11896} 11897 11898static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 11899{ 11900 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 11901 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11902 11903 stats->rx_packets = old_stats->rx_packets + 11904 get_stat64(&hw_stats->rx_ucast_packets) + 11905 get_stat64(&hw_stats->rx_mcast_packets) + 11906 get_stat64(&hw_stats->rx_bcast_packets); 11907 11908 stats->tx_packets = old_stats->tx_packets + 11909 get_stat64(&hw_stats->tx_ucast_packets) + 11910 get_stat64(&hw_stats->tx_mcast_packets) + 11911 get_stat64(&hw_stats->tx_bcast_packets); 11912 11913 stats->rx_bytes = old_stats->rx_bytes + 11914 get_stat64(&hw_stats->rx_octets); 11915 stats->tx_bytes = old_stats->tx_bytes + 11916 get_stat64(&hw_stats->tx_octets); 11917 11918 stats->rx_errors = old_stats->rx_errors + 11919 get_stat64(&hw_stats->rx_errors); 11920 stats->tx_errors = old_stats->tx_errors + 11921 get_stat64(&hw_stats->tx_errors) + 11922 get_stat64(&hw_stats->tx_mac_errors) + 11923 get_stat64(&hw_stats->tx_carrier_sense_errors) + 11924 get_stat64(&hw_stats->tx_discards); 11925 11926 stats->multicast = old_stats->multicast + 11927 get_stat64(&hw_stats->rx_mcast_packets); 11928 stats->collisions = old_stats->collisions + 11929 get_stat64(&hw_stats->tx_collisions); 11930 11931 stats->rx_length_errors = old_stats->rx_length_errors + 11932 get_stat64(&hw_stats->rx_frame_too_long_errors) + 11933 get_stat64(&hw_stats->rx_undersize_packets); 11934 11935 stats->rx_frame_errors = old_stats->rx_frame_errors + 11936 get_stat64(&hw_stats->rx_align_errors); 11937 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 11938 get_stat64(&hw_stats->tx_discards); 11939 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 11940 get_stat64(&hw_stats->tx_carrier_sense_errors); 11941 11942 stats->rx_crc_errors = old_stats->rx_crc_errors + 11943 tg3_calc_crc_errors(tp); 11944 11945 stats->rx_missed_errors = old_stats->rx_missed_errors + 11946 get_stat64(&hw_stats->rx_discards); 11947 11948 stats->rx_dropped = tp->rx_dropped; 11949 stats->tx_dropped = tp->tx_dropped; 11950} 11951 11952static int tg3_get_regs_len(struct net_device *dev) 11953{ 11954 return TG3_REG_BLK_SIZE; 11955} 11956 11957static void tg3_get_regs(struct net_device *dev, 11958 struct ethtool_regs *regs, void *_p) 11959{ 11960 struct tg3 *tp = netdev_priv(dev); 11961 11962 regs->version = 0; 11963 11964 memset(_p, 0, TG3_REG_BLK_SIZE); 11965 11966 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11967 return; 11968 11969 tg3_full_lock(tp, 0); 11970 11971 tg3_dump_legacy_regs(tp, (u32 *)_p); 11972 11973 tg3_full_unlock(tp); 11974} 11975 11976static int tg3_get_eeprom_len(struct net_device *dev) 11977{ 11978 struct tg3 *tp = netdev_priv(dev); 11979 11980 return tp->nvram_size; 11981} 11982 11983static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 11984{ 11985 struct tg3 *tp = netdev_priv(dev); 11986 int ret, cpmu_restore = 0; 11987 u8 *pd; 11988 u32 i, offset, len, b_offset, b_count, cpmu_val = 0; 11989 __be32 val; 11990 11991 if (tg3_flag(tp, NO_NVRAM)) 11992 return -EINVAL; 11993 11994 offset = eeprom->offset; 11995 len = eeprom->len; 11996 eeprom->len = 0; 11997 11998 eeprom->magic = TG3_EEPROM_MAGIC; 11999 12000 /* Override clock, link aware and link idle modes */ 12001 if (tg3_flag(tp, CPMU_PRESENT)) { 12002 cpmu_val = tr32(TG3_CPMU_CTRL); 12003 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE | 12004 CPMU_CTRL_LINK_IDLE_MODE)) { 12005 tw32(TG3_CPMU_CTRL, cpmu_val & 12006 ~(CPMU_CTRL_LINK_AWARE_MODE | 12007 CPMU_CTRL_LINK_IDLE_MODE)); 12008 cpmu_restore = 1; 12009 } 12010 } 12011 tg3_override_clk(tp); 12012 12013 if (offset & 3) { 12014 /* adjustments to start on required 4 byte boundary */ 12015 b_offset = offset & 3; 12016 b_count = 4 - b_offset; 12017 if (b_count > len) { 12018 /* i.e. offset=1 len=2 */ 12019 b_count = len; 12020 } 12021 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 12022 if (ret) 12023 goto eeprom_done; 12024 memcpy(data, ((char *)&val) + b_offset, b_count); 12025 len -= b_count; 12026 offset += b_count; 12027 eeprom->len += b_count; 12028 } 12029 12030 /* read bytes up to the last 4 byte boundary */ 12031 pd = &data[eeprom->len]; 12032 for (i = 0; i < (len - (len & 3)); i += 4) { 12033 ret = tg3_nvram_read_be32(tp, offset + i, &val); 12034 if (ret) { 12035 if (i) 12036 i -= 4; 12037 eeprom->len += i; 12038 goto eeprom_done; 12039 } 12040 memcpy(pd + i, &val, 4); 12041 if (need_resched()) { 12042 if (signal_pending(current)) { 12043 eeprom->len += i; 12044 ret = -EINTR; 12045 goto eeprom_done; 12046 } 12047 cond_resched(); 12048 } 12049 } 12050 eeprom->len += i; 12051 12052 if (len & 3) { 12053 /* read last bytes not ending on 4 byte boundary */ 12054 pd = &data[eeprom->len]; 12055 b_count = len & 3; 12056 b_offset = offset + len - b_count; 12057 ret = tg3_nvram_read_be32(tp, b_offset, &val); 12058 if (ret) 12059 goto eeprom_done; 12060 memcpy(pd, &val, b_count); 12061 eeprom->len += b_count; 12062 } 12063 ret = 0; 12064 12065eeprom_done: 12066 /* Restore clock, link aware and link idle modes */ 12067 tg3_restore_clk(tp); 12068 if (cpmu_restore) 12069 tw32(TG3_CPMU_CTRL, cpmu_val); 12070 12071 return ret; 12072} 12073 12074static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12075{ 12076 struct tg3 *tp = netdev_priv(dev); 12077 int ret; 12078 u32 offset, len, b_offset, odd_len; 12079 u8 *buf; 12080 __be32 start = 0, end; 12081 12082 if (tg3_flag(tp, NO_NVRAM) || 12083 eeprom->magic != TG3_EEPROM_MAGIC) 12084 return -EINVAL; 12085 12086 offset = eeprom->offset; 12087 len = eeprom->len; 12088 12089 if ((b_offset = (offset & 3))) { 12090 /* adjustments to start on required 4 byte boundary */ 12091 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 12092 if (ret) 12093 return ret; 12094 len += b_offset; 12095 offset &= ~3; 12096 if (len < 4) 12097 len = 4; 12098 } 12099 12100 odd_len = 0; 12101 if (len & 3) { 12102 /* adjustments to end on required 4 byte boundary */ 12103 odd_len = 1; 12104 len = (len + 3) & ~3; 12105 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 12106 if (ret) 12107 return ret; 12108 } 12109 12110 buf = data; 12111 if (b_offset || odd_len) { 12112 buf = kmalloc(len, GFP_KERNEL); 12113 if (!buf) 12114 return -ENOMEM; 12115 if (b_offset) 12116 memcpy(buf, &start, 4); 12117 if (odd_len) 12118 memcpy(buf+len-4, &end, 4); 12119 memcpy(buf + b_offset, data, eeprom->len); 12120 } 12121 12122 ret = tg3_nvram_write_block(tp, offset, len, buf); 12123 12124 if (buf != data) 12125 kfree(buf); 12126 12127 return ret; 12128} 12129 12130static int tg3_get_link_ksettings(struct net_device *dev, 12131 struct ethtool_link_ksettings *cmd) 12132{ 12133 struct tg3 *tp = netdev_priv(dev); 12134 u32 supported, advertising; 12135 12136 if (tg3_flag(tp, USE_PHYLIB)) { 12137 struct phy_device *phydev; 12138 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12139 return -EAGAIN; 12140 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12141 phy_ethtool_ksettings_get(phydev, cmd); 12142 12143 return 0; 12144 } 12145 12146 supported = (SUPPORTED_Autoneg); 12147 12148 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12149 supported |= (SUPPORTED_1000baseT_Half | 12150 SUPPORTED_1000baseT_Full); 12151 12152 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12153 supported |= (SUPPORTED_100baseT_Half | 12154 SUPPORTED_100baseT_Full | 12155 SUPPORTED_10baseT_Half | 12156 SUPPORTED_10baseT_Full | 12157 SUPPORTED_TP); 12158 cmd->base.port = PORT_TP; 12159 } else { 12160 supported |= SUPPORTED_FIBRE; 12161 cmd->base.port = PORT_FIBRE; 12162 } 12163 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 12164 supported); 12165 12166 advertising = tp->link_config.advertising; 12167 if (tg3_flag(tp, PAUSE_AUTONEG)) { 12168 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 12169 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12170 advertising |= ADVERTISED_Pause; 12171 } else { 12172 advertising |= ADVERTISED_Pause | 12173 ADVERTISED_Asym_Pause; 12174 } 12175 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12176 advertising |= ADVERTISED_Asym_Pause; 12177 } 12178 } 12179 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 12180 advertising); 12181 12182 if (netif_running(dev) && tp->link_up) { 12183 cmd->base.speed = tp->link_config.active_speed; 12184 cmd->base.duplex = tp->link_config.active_duplex; 12185 ethtool_convert_legacy_u32_to_link_mode( 12186 cmd->link_modes.lp_advertising, 12187 tp->link_config.rmt_adv); 12188 12189 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12190 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 12191 cmd->base.eth_tp_mdix = ETH_TP_MDI_X; 12192 else 12193 cmd->base.eth_tp_mdix = ETH_TP_MDI; 12194 } 12195 } else { 12196 cmd->base.speed = SPEED_UNKNOWN; 12197 cmd->base.duplex = DUPLEX_UNKNOWN; 12198 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; 12199 } 12200 cmd->base.phy_address = tp->phy_addr; 12201 cmd->base.autoneg = tp->link_config.autoneg; 12202 return 0; 12203} 12204 12205static int tg3_set_link_ksettings(struct net_device *dev, 12206 const struct ethtool_link_ksettings *cmd) 12207{ 12208 struct tg3 *tp = netdev_priv(dev); 12209 u32 speed = cmd->base.speed; 12210 u32 advertising; 12211 12212 if (tg3_flag(tp, USE_PHYLIB)) { 12213 struct phy_device *phydev; 12214 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12215 return -EAGAIN; 12216 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12217 return phy_ethtool_ksettings_set(phydev, cmd); 12218 } 12219 12220 if (cmd->base.autoneg != AUTONEG_ENABLE && 12221 cmd->base.autoneg != AUTONEG_DISABLE) 12222 return -EINVAL; 12223 12224 if (cmd->base.autoneg == AUTONEG_DISABLE && 12225 cmd->base.duplex != DUPLEX_FULL && 12226 cmd->base.duplex != DUPLEX_HALF) 12227 return -EINVAL; 12228 12229 ethtool_convert_link_mode_to_legacy_u32(&advertising, 12230 cmd->link_modes.advertising); 12231 12232 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12233 u32 mask = ADVERTISED_Autoneg | 12234 ADVERTISED_Pause | 12235 ADVERTISED_Asym_Pause; 12236 12237 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12238 mask |= ADVERTISED_1000baseT_Half | 12239 ADVERTISED_1000baseT_Full; 12240 12241 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 12242 mask |= ADVERTISED_100baseT_Half | 12243 ADVERTISED_100baseT_Full | 12244 ADVERTISED_10baseT_Half | 12245 ADVERTISED_10baseT_Full | 12246 ADVERTISED_TP; 12247 else 12248 mask |= ADVERTISED_FIBRE; 12249 12250 if (advertising & ~mask) 12251 return -EINVAL; 12252 12253 mask &= (ADVERTISED_1000baseT_Half | 12254 ADVERTISED_1000baseT_Full | 12255 ADVERTISED_100baseT_Half | 12256 ADVERTISED_100baseT_Full | 12257 ADVERTISED_10baseT_Half | 12258 ADVERTISED_10baseT_Full); 12259 12260 advertising &= mask; 12261 } else { 12262 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 12263 if (speed != SPEED_1000) 12264 return -EINVAL; 12265 12266 if (cmd->base.duplex != DUPLEX_FULL) 12267 return -EINVAL; 12268 } else { 12269 if (speed != SPEED_100 && 12270 speed != SPEED_10) 12271 return -EINVAL; 12272 } 12273 } 12274 12275 tg3_full_lock(tp, 0); 12276 12277 tp->link_config.autoneg = cmd->base.autoneg; 12278 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12279 tp->link_config.advertising = (advertising | 12280 ADVERTISED_Autoneg); 12281 tp->link_config.speed = SPEED_UNKNOWN; 12282 tp->link_config.duplex = DUPLEX_UNKNOWN; 12283 } else { 12284 tp->link_config.advertising = 0; 12285 tp->link_config.speed = speed; 12286 tp->link_config.duplex = cmd->base.duplex; 12287 } 12288 12289 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12290 12291 tg3_warn_mgmt_link_flap(tp); 12292 12293 if (netif_running(dev)) 12294 tg3_setup_phy(tp, true); 12295 12296 tg3_full_unlock(tp); 12297 12298 return 0; 12299} 12300 12301static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 12302{ 12303 struct tg3 *tp = netdev_priv(dev); 12304 12305 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 12306 strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 12307 strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 12308} 12309 12310static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12311{ 12312 struct tg3 *tp = netdev_priv(dev); 12313 12314 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 12315 wol->supported = WAKE_MAGIC; 12316 else 12317 wol->supported = 0; 12318 wol->wolopts = 0; 12319 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 12320 wol->wolopts = WAKE_MAGIC; 12321 memset(&wol->sopass, 0, sizeof(wol->sopass)); 12322} 12323 12324static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12325{ 12326 struct tg3 *tp = netdev_priv(dev); 12327 struct device *dp = &tp->pdev->dev; 12328 12329 if (wol->wolopts & ~WAKE_MAGIC) 12330 return -EINVAL; 12331 if ((wol->wolopts & WAKE_MAGIC) && 12332 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 12333 return -EINVAL; 12334 12335 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 12336 12337 if (device_may_wakeup(dp)) 12338 tg3_flag_set(tp, WOL_ENABLE); 12339 else 12340 tg3_flag_clear(tp, WOL_ENABLE); 12341 12342 return 0; 12343} 12344 12345static u32 tg3_get_msglevel(struct net_device *dev) 12346{ 12347 struct tg3 *tp = netdev_priv(dev); 12348 return tp->msg_enable; 12349} 12350 12351static void tg3_set_msglevel(struct net_device *dev, u32 value) 12352{ 12353 struct tg3 *tp = netdev_priv(dev); 12354 tp->msg_enable = value; 12355} 12356 12357static int tg3_nway_reset(struct net_device *dev) 12358{ 12359 struct tg3 *tp = netdev_priv(dev); 12360 int r; 12361 12362 if (!netif_running(dev)) 12363 return -EAGAIN; 12364 12365 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12366 return -EINVAL; 12367 12368 tg3_warn_mgmt_link_flap(tp); 12369 12370 if (tg3_flag(tp, USE_PHYLIB)) { 12371 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12372 return -EAGAIN; 12373 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 12374 } else { 12375 u32 bmcr; 12376 12377 spin_lock_bh(&tp->lock); 12378 r = -EINVAL; 12379 tg3_readphy(tp, MII_BMCR, &bmcr); 12380 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 12381 ((bmcr & BMCR_ANENABLE) || 12382 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 12383 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 12384 BMCR_ANENABLE); 12385 r = 0; 12386 } 12387 spin_unlock_bh(&tp->lock); 12388 } 12389 12390 return r; 12391} 12392 12393static void tg3_get_ringparam(struct net_device *dev, 12394 struct ethtool_ringparam *ering, 12395 struct kernel_ethtool_ringparam *kernel_ering, 12396 struct netlink_ext_ack *extack) 12397{ 12398 struct tg3 *tp = netdev_priv(dev); 12399 12400 ering->rx_max_pending = tp->rx_std_ring_mask; 12401 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12402 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 12403 else 12404 ering->rx_jumbo_max_pending = 0; 12405 12406 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 12407 12408 ering->rx_pending = tp->rx_pending; 12409 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12410 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 12411 else 12412 ering->rx_jumbo_pending = 0; 12413 12414 ering->tx_pending = tp->napi[0].tx_pending; 12415} 12416 12417static int tg3_set_ringparam(struct net_device *dev, 12418 struct ethtool_ringparam *ering, 12419 struct kernel_ethtool_ringparam *kernel_ering, 12420 struct netlink_ext_ack *extack) 12421{ 12422 struct tg3 *tp = netdev_priv(dev); 12423 int i, irq_sync = 0, err = 0; 12424 bool reset_phy = false; 12425 12426 if ((ering->rx_pending > tp->rx_std_ring_mask) || 12427 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 12428 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 12429 (ering->tx_pending <= MAX_SKB_FRAGS) || 12430 (tg3_flag(tp, TSO_BUG) && 12431 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 12432 return -EINVAL; 12433 12434 if (netif_running(dev)) { 12435 tg3_phy_stop(tp); 12436 tg3_netif_stop(tp); 12437 irq_sync = 1; 12438 } 12439 12440 tg3_full_lock(tp, irq_sync); 12441 12442 tp->rx_pending = ering->rx_pending; 12443 12444 if (tg3_flag(tp, MAX_RXPEND_64) && 12445 tp->rx_pending > 63) 12446 tp->rx_pending = 63; 12447 12448 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12449 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 12450 12451 for (i = 0; i < tp->irq_max; i++) 12452 tp->napi[i].tx_pending = ering->tx_pending; 12453 12454 if (netif_running(dev)) { 12455 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12456 /* Reset PHY to avoid PHY lock up */ 12457 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12458 tg3_asic_rev(tp) == ASIC_REV_5719 || 12459 tg3_asic_rev(tp) == ASIC_REV_5720) 12460 reset_phy = true; 12461 12462 err = tg3_restart_hw(tp, reset_phy); 12463 if (!err) 12464 tg3_netif_start(tp); 12465 } 12466 12467 tg3_full_unlock(tp); 12468 12469 if (irq_sync && !err) 12470 tg3_phy_start(tp); 12471 12472 return err; 12473} 12474 12475static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12476{ 12477 struct tg3 *tp = netdev_priv(dev); 12478 12479 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 12480 12481 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 12482 epause->rx_pause = 1; 12483 else 12484 epause->rx_pause = 0; 12485 12486 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 12487 epause->tx_pause = 1; 12488 else 12489 epause->tx_pause = 0; 12490} 12491 12492static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12493{ 12494 struct tg3 *tp = netdev_priv(dev); 12495 int err = 0; 12496 bool reset_phy = false; 12497 12498 if (tp->link_config.autoneg == AUTONEG_ENABLE) 12499 tg3_warn_mgmt_link_flap(tp); 12500 12501 if (tg3_flag(tp, USE_PHYLIB)) { 12502 struct phy_device *phydev; 12503 12504 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12505 12506 if (!phy_validate_pause(phydev, epause)) 12507 return -EINVAL; 12508 12509 tp->link_config.flowctrl = 0; 12510 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause); 12511 if (epause->rx_pause) { 12512 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12513 12514 if (epause->tx_pause) { 12515 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12516 } 12517 } else if (epause->tx_pause) { 12518 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12519 } 12520 12521 if (epause->autoneg) 12522 tg3_flag_set(tp, PAUSE_AUTONEG); 12523 else 12524 tg3_flag_clear(tp, PAUSE_AUTONEG); 12525 12526 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 12527 if (phydev->autoneg) { 12528 /* phy_set_asym_pause() will 12529 * renegotiate the link to inform our 12530 * link partner of our flow control 12531 * settings, even if the flow control 12532 * is forced. Let tg3_adjust_link() 12533 * do the final flow control setup. 12534 */ 12535 return 0; 12536 } 12537 12538 if (!epause->autoneg) 12539 tg3_setup_flow_control(tp, 0, 0); 12540 } 12541 } else { 12542 int irq_sync = 0; 12543 12544 if (netif_running(dev)) { 12545 tg3_netif_stop(tp); 12546 irq_sync = 1; 12547 } 12548 12549 tg3_full_lock(tp, irq_sync); 12550 12551 if (epause->autoneg) 12552 tg3_flag_set(tp, PAUSE_AUTONEG); 12553 else 12554 tg3_flag_clear(tp, PAUSE_AUTONEG); 12555 if (epause->rx_pause) 12556 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12557 else 12558 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 12559 if (epause->tx_pause) 12560 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12561 else 12562 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 12563 12564 if (netif_running(dev)) { 12565 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12566 /* Reset PHY to avoid PHY lock up */ 12567 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12568 tg3_asic_rev(tp) == ASIC_REV_5719 || 12569 tg3_asic_rev(tp) == ASIC_REV_5720) 12570 reset_phy = true; 12571 12572 err = tg3_restart_hw(tp, reset_phy); 12573 if (!err) 12574 tg3_netif_start(tp); 12575 } 12576 12577 tg3_full_unlock(tp); 12578 } 12579 12580 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12581 12582 return err; 12583} 12584 12585static int tg3_get_sset_count(struct net_device *dev, int sset) 12586{ 12587 switch (sset) { 12588 case ETH_SS_TEST: 12589 return TG3_NUM_TEST; 12590 case ETH_SS_STATS: 12591 return TG3_NUM_STATS; 12592 default: 12593 return -EOPNOTSUPP; 12594 } 12595} 12596 12597static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 12598 u32 *rules __always_unused) 12599{ 12600 struct tg3 *tp = netdev_priv(dev); 12601 12602 if (!tg3_flag(tp, SUPPORT_MSIX)) 12603 return -EOPNOTSUPP; 12604 12605 switch (info->cmd) { 12606 case ETHTOOL_GRXRINGS: 12607 if (netif_running(tp->dev)) 12608 info->data = tp->rxq_cnt; 12609 else { 12610 info->data = num_online_cpus(); 12611 if (info->data > TG3_RSS_MAX_NUM_QS) 12612 info->data = TG3_RSS_MAX_NUM_QS; 12613 } 12614 12615 return 0; 12616 12617 default: 12618 return -EOPNOTSUPP; 12619 } 12620} 12621 12622static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 12623{ 12624 u32 size = 0; 12625 struct tg3 *tp = netdev_priv(dev); 12626 12627 if (tg3_flag(tp, SUPPORT_MSIX)) 12628 size = TG3_RSS_INDIR_TBL_SIZE; 12629 12630 return size; 12631} 12632 12633static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc) 12634{ 12635 struct tg3 *tp = netdev_priv(dev); 12636 int i; 12637 12638 if (hfunc) 12639 *hfunc = ETH_RSS_HASH_TOP; 12640 if (!indir) 12641 return 0; 12642 12643 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12644 indir[i] = tp->rss_ind_tbl[i]; 12645 12646 return 0; 12647} 12648 12649static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, 12650 const u8 hfunc) 12651{ 12652 struct tg3 *tp = netdev_priv(dev); 12653 size_t i; 12654 12655 /* We require at least one supported parameter to be changed and no 12656 * change in any of the unsupported parameters 12657 */ 12658 if (key || 12659 (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)) 12660 return -EOPNOTSUPP; 12661 12662 if (!indir) 12663 return 0; 12664 12665 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12666 tp->rss_ind_tbl[i] = indir[i]; 12667 12668 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 12669 return 0; 12670 12671 /* It is legal to write the indirection 12672 * table while the device is running. 12673 */ 12674 tg3_full_lock(tp, 0); 12675 tg3_rss_write_indir_tbl(tp); 12676 tg3_full_unlock(tp); 12677 12678 return 0; 12679} 12680 12681static void tg3_get_channels(struct net_device *dev, 12682 struct ethtool_channels *channel) 12683{ 12684 struct tg3 *tp = netdev_priv(dev); 12685 u32 deflt_qs = netif_get_num_default_rss_queues(); 12686 12687 channel->max_rx = tp->rxq_max; 12688 channel->max_tx = tp->txq_max; 12689 12690 if (netif_running(dev)) { 12691 channel->rx_count = tp->rxq_cnt; 12692 channel->tx_count = tp->txq_cnt; 12693 } else { 12694 if (tp->rxq_req) 12695 channel->rx_count = tp->rxq_req; 12696 else 12697 channel->rx_count = min(deflt_qs, tp->rxq_max); 12698 12699 if (tp->txq_req) 12700 channel->tx_count = tp->txq_req; 12701 else 12702 channel->tx_count = min(deflt_qs, tp->txq_max); 12703 } 12704} 12705 12706static int tg3_set_channels(struct net_device *dev, 12707 struct ethtool_channels *channel) 12708{ 12709 struct tg3 *tp = netdev_priv(dev); 12710 12711 if (!tg3_flag(tp, SUPPORT_MSIX)) 12712 return -EOPNOTSUPP; 12713 12714 if (channel->rx_count > tp->rxq_max || 12715 channel->tx_count > tp->txq_max) 12716 return -EINVAL; 12717 12718 tp->rxq_req = channel->rx_count; 12719 tp->txq_req = channel->tx_count; 12720 12721 if (!netif_running(dev)) 12722 return 0; 12723 12724 tg3_stop(tp); 12725 12726 tg3_carrier_off(tp); 12727 12728 tg3_start(tp, true, false, false); 12729 12730 return 0; 12731} 12732 12733static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 12734{ 12735 switch (stringset) { 12736 case ETH_SS_STATS: 12737 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 12738 break; 12739 case ETH_SS_TEST: 12740 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 12741 break; 12742 default: 12743 WARN_ON(1); /* we need a WARN() */ 12744 break; 12745 } 12746} 12747 12748static int tg3_set_phys_id(struct net_device *dev, 12749 enum ethtool_phys_id_state state) 12750{ 12751 struct tg3 *tp = netdev_priv(dev); 12752 12753 switch (state) { 12754 case ETHTOOL_ID_ACTIVE: 12755 return 1; /* cycle on/off once per second */ 12756 12757 case ETHTOOL_ID_ON: 12758 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12759 LED_CTRL_1000MBPS_ON | 12760 LED_CTRL_100MBPS_ON | 12761 LED_CTRL_10MBPS_ON | 12762 LED_CTRL_TRAFFIC_OVERRIDE | 12763 LED_CTRL_TRAFFIC_BLINK | 12764 LED_CTRL_TRAFFIC_LED); 12765 break; 12766 12767 case ETHTOOL_ID_OFF: 12768 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12769 LED_CTRL_TRAFFIC_OVERRIDE); 12770 break; 12771 12772 case ETHTOOL_ID_INACTIVE: 12773 tw32(MAC_LED_CTRL, tp->led_ctrl); 12774 break; 12775 } 12776 12777 return 0; 12778} 12779 12780static void tg3_get_ethtool_stats(struct net_device *dev, 12781 struct ethtool_stats *estats, u64 *tmp_stats) 12782{ 12783 struct tg3 *tp = netdev_priv(dev); 12784 12785 if (tp->hw_stats) 12786 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 12787 else 12788 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 12789} 12790 12791static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen) 12792{ 12793 int i; 12794 __be32 *buf; 12795 u32 offset = 0, len = 0; 12796 u32 magic, val; 12797 12798 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 12799 return NULL; 12800 12801 if (magic == TG3_EEPROM_MAGIC) { 12802 for (offset = TG3_NVM_DIR_START; 12803 offset < TG3_NVM_DIR_END; 12804 offset += TG3_NVM_DIRENT_SIZE) { 12805 if (tg3_nvram_read(tp, offset, &val)) 12806 return NULL; 12807 12808 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 12809 TG3_NVM_DIRTYPE_EXTVPD) 12810 break; 12811 } 12812 12813 if (offset != TG3_NVM_DIR_END) { 12814 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 12815 if (tg3_nvram_read(tp, offset + 4, &offset)) 12816 return NULL; 12817 12818 offset = tg3_nvram_logical_addr(tp, offset); 12819 } 12820 12821 if (!offset || !len) { 12822 offset = TG3_NVM_VPD_OFF; 12823 len = TG3_NVM_VPD_LEN; 12824 } 12825 12826 buf = kmalloc(len, GFP_KERNEL); 12827 if (!buf) 12828 return NULL; 12829 12830 for (i = 0; i < len; i += 4) { 12831 /* The data is in little-endian format in NVRAM. 12832 * Use the big-endian read routines to preserve 12833 * the byte order as it exists in NVRAM. 12834 */ 12835 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 12836 goto error; 12837 } 12838 *vpdlen = len; 12839 } else { 12840 buf = pci_vpd_alloc(tp->pdev, vpdlen); 12841 if (IS_ERR(buf)) 12842 return NULL; 12843 } 12844 12845 return buf; 12846 12847error: 12848 kfree(buf); 12849 return NULL; 12850} 12851 12852#define NVRAM_TEST_SIZE 0x100 12853#define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 12854#define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 12855#define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 12856#define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 12857#define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 12858#define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 12859#define NVRAM_SELFBOOT_HW_SIZE 0x20 12860#define NVRAM_SELFBOOT_DATA_SIZE 0x1c 12861 12862static int tg3_test_nvram(struct tg3 *tp) 12863{ 12864 u32 csum, magic; 12865 __be32 *buf; 12866 int i, j, k, err = 0, size; 12867 unsigned int len; 12868 12869 if (tg3_flag(tp, NO_NVRAM)) 12870 return 0; 12871 12872 if (tg3_nvram_read(tp, 0, &magic) != 0) 12873 return -EIO; 12874 12875 if (magic == TG3_EEPROM_MAGIC) 12876 size = NVRAM_TEST_SIZE; 12877 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 12878 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 12879 TG3_EEPROM_SB_FORMAT_1) { 12880 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 12881 case TG3_EEPROM_SB_REVISION_0: 12882 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 12883 break; 12884 case TG3_EEPROM_SB_REVISION_2: 12885 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 12886 break; 12887 case TG3_EEPROM_SB_REVISION_3: 12888 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 12889 break; 12890 case TG3_EEPROM_SB_REVISION_4: 12891 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 12892 break; 12893 case TG3_EEPROM_SB_REVISION_5: 12894 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 12895 break; 12896 case TG3_EEPROM_SB_REVISION_6: 12897 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 12898 break; 12899 default: 12900 return -EIO; 12901 } 12902 } else 12903 return 0; 12904 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 12905 size = NVRAM_SELFBOOT_HW_SIZE; 12906 else 12907 return -EIO; 12908 12909 buf = kmalloc(size, GFP_KERNEL); 12910 if (buf == NULL) 12911 return -ENOMEM; 12912 12913 err = -EIO; 12914 for (i = 0, j = 0; i < size; i += 4, j++) { 12915 err = tg3_nvram_read_be32(tp, i, &buf[j]); 12916 if (err) 12917 break; 12918 } 12919 if (i < size) 12920 goto out; 12921 12922 /* Selfboot format */ 12923 magic = be32_to_cpu(buf[0]); 12924 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 12925 TG3_EEPROM_MAGIC_FW) { 12926 u8 *buf8 = (u8 *) buf, csum8 = 0; 12927 12928 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 12929 TG3_EEPROM_SB_REVISION_2) { 12930 /* For rev 2, the csum doesn't include the MBA. */ 12931 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 12932 csum8 += buf8[i]; 12933 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 12934 csum8 += buf8[i]; 12935 } else { 12936 for (i = 0; i < size; i++) 12937 csum8 += buf8[i]; 12938 } 12939 12940 if (csum8 == 0) { 12941 err = 0; 12942 goto out; 12943 } 12944 12945 err = -EIO; 12946 goto out; 12947 } 12948 12949 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 12950 TG3_EEPROM_MAGIC_HW) { 12951 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 12952 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 12953 u8 *buf8 = (u8 *) buf; 12954 12955 /* Separate the parity bits and the data bytes. */ 12956 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 12957 if ((i == 0) || (i == 8)) { 12958 int l; 12959 u8 msk; 12960 12961 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 12962 parity[k++] = buf8[i] & msk; 12963 i++; 12964 } else if (i == 16) { 12965 int l; 12966 u8 msk; 12967 12968 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 12969 parity[k++] = buf8[i] & msk; 12970 i++; 12971 12972 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 12973 parity[k++] = buf8[i] & msk; 12974 i++; 12975 } 12976 data[j++] = buf8[i]; 12977 } 12978 12979 err = -EIO; 12980 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 12981 u8 hw8 = hweight8(data[i]); 12982 12983 if ((hw8 & 0x1) && parity[i]) 12984 goto out; 12985 else if (!(hw8 & 0x1) && !parity[i]) 12986 goto out; 12987 } 12988 err = 0; 12989 goto out; 12990 } 12991 12992 err = -EIO; 12993 12994 /* Bootstrap checksum at offset 0x10 */ 12995 csum = calc_crc((unsigned char *) buf, 0x10); 12996 if (csum != le32_to_cpu(buf[0x10/4])) 12997 goto out; 12998 12999 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 13000 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 13001 if (csum != le32_to_cpu(buf[0xfc/4])) 13002 goto out; 13003 13004 kfree(buf); 13005 13006 buf = tg3_vpd_readblock(tp, &len); 13007 if (!buf) 13008 return -ENOMEM; 13009 13010 err = pci_vpd_check_csum(buf, len); 13011 /* go on if no checksum found */ 13012 if (err == 1) 13013 err = 0; 13014out: 13015 kfree(buf); 13016 return err; 13017} 13018 13019#define TG3_SERDES_TIMEOUT_SEC 2 13020#define TG3_COPPER_TIMEOUT_SEC 6 13021 13022static int tg3_test_link(struct tg3 *tp) 13023{ 13024 int i, max; 13025 13026 if (!netif_running(tp->dev)) 13027 return -ENODEV; 13028 13029 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 13030 max = TG3_SERDES_TIMEOUT_SEC; 13031 else 13032 max = TG3_COPPER_TIMEOUT_SEC; 13033 13034 for (i = 0; i < max; i++) { 13035 if (tp->link_up) 13036 return 0; 13037 13038 if (msleep_interruptible(1000)) 13039 break; 13040 } 13041 13042 return -EIO; 13043} 13044 13045/* Only test the commonly used registers */ 13046static int tg3_test_registers(struct tg3 *tp) 13047{ 13048 int i, is_5705, is_5750; 13049 u32 offset, read_mask, write_mask, val, save_val, read_val; 13050 static struct { 13051 u16 offset; 13052 u16 flags; 13053#define TG3_FL_5705 0x1 13054#define TG3_FL_NOT_5705 0x2 13055#define TG3_FL_NOT_5788 0x4 13056#define TG3_FL_NOT_5750 0x8 13057 u32 read_mask; 13058 u32 write_mask; 13059 } reg_tbl[] = { 13060 /* MAC Control Registers */ 13061 { MAC_MODE, TG3_FL_NOT_5705, 13062 0x00000000, 0x00ef6f8c }, 13063 { MAC_MODE, TG3_FL_5705, 13064 0x00000000, 0x01ef6b8c }, 13065 { MAC_STATUS, TG3_FL_NOT_5705, 13066 0x03800107, 0x00000000 }, 13067 { MAC_STATUS, TG3_FL_5705, 13068 0x03800100, 0x00000000 }, 13069 { MAC_ADDR_0_HIGH, 0x0000, 13070 0x00000000, 0x0000ffff }, 13071 { MAC_ADDR_0_LOW, 0x0000, 13072 0x00000000, 0xffffffff }, 13073 { MAC_RX_MTU_SIZE, 0x0000, 13074 0x00000000, 0x0000ffff }, 13075 { MAC_TX_MODE, 0x0000, 13076 0x00000000, 0x00000070 }, 13077 { MAC_TX_LENGTHS, 0x0000, 13078 0x00000000, 0x00003fff }, 13079 { MAC_RX_MODE, TG3_FL_NOT_5705, 13080 0x00000000, 0x000007fc }, 13081 { MAC_RX_MODE, TG3_FL_5705, 13082 0x00000000, 0x000007dc }, 13083 { MAC_HASH_REG_0, 0x0000, 13084 0x00000000, 0xffffffff }, 13085 { MAC_HASH_REG_1, 0x0000, 13086 0x00000000, 0xffffffff }, 13087 { MAC_HASH_REG_2, 0x0000, 13088 0x00000000, 0xffffffff }, 13089 { MAC_HASH_REG_3, 0x0000, 13090 0x00000000, 0xffffffff }, 13091 13092 /* Receive Data and Receive BD Initiator Control Registers. */ 13093 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 13094 0x00000000, 0xffffffff }, 13095 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 13096 0x00000000, 0xffffffff }, 13097 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 13098 0x00000000, 0x00000003 }, 13099 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 13100 0x00000000, 0xffffffff }, 13101 { RCVDBDI_STD_BD+0, 0x0000, 13102 0x00000000, 0xffffffff }, 13103 { RCVDBDI_STD_BD+4, 0x0000, 13104 0x00000000, 0xffffffff }, 13105 { RCVDBDI_STD_BD+8, 0x0000, 13106 0x00000000, 0xffff0002 }, 13107 { RCVDBDI_STD_BD+0xc, 0x0000, 13108 0x00000000, 0xffffffff }, 13109 13110 /* Receive BD Initiator Control Registers. */ 13111 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 13112 0x00000000, 0xffffffff }, 13113 { RCVBDI_STD_THRESH, TG3_FL_5705, 13114 0x00000000, 0x000003ff }, 13115 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 13116 0x00000000, 0xffffffff }, 13117 13118 /* Host Coalescing Control Registers. */ 13119 { HOSTCC_MODE, TG3_FL_NOT_5705, 13120 0x00000000, 0x00000004 }, 13121 { HOSTCC_MODE, TG3_FL_5705, 13122 0x00000000, 0x000000f6 }, 13123 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 13124 0x00000000, 0xffffffff }, 13125 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 13126 0x00000000, 0x000003ff }, 13127 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 13128 0x00000000, 0xffffffff }, 13129 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 13130 0x00000000, 0x000003ff }, 13131 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 13132 0x00000000, 0xffffffff }, 13133 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13134 0x00000000, 0x000000ff }, 13135 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 13136 0x00000000, 0xffffffff }, 13137 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13138 0x00000000, 0x000000ff }, 13139 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 13140 0x00000000, 0xffffffff }, 13141 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 13142 0x00000000, 0xffffffff }, 13143 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13144 0x00000000, 0xffffffff }, 13145 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13146 0x00000000, 0x000000ff }, 13147 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13148 0x00000000, 0xffffffff }, 13149 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13150 0x00000000, 0x000000ff }, 13151 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 13152 0x00000000, 0xffffffff }, 13153 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 13154 0x00000000, 0xffffffff }, 13155 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 13156 0x00000000, 0xffffffff }, 13157 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 13158 0x00000000, 0xffffffff }, 13159 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 13160 0x00000000, 0xffffffff }, 13161 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 13162 0xffffffff, 0x00000000 }, 13163 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 13164 0xffffffff, 0x00000000 }, 13165 13166 /* Buffer Manager Control Registers. */ 13167 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 13168 0x00000000, 0x007fff80 }, 13169 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 13170 0x00000000, 0x007fffff }, 13171 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 13172 0x00000000, 0x0000003f }, 13173 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 13174 0x00000000, 0x000001ff }, 13175 { BUFMGR_MB_HIGH_WATER, 0x0000, 13176 0x00000000, 0x000001ff }, 13177 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 13178 0xffffffff, 0x00000000 }, 13179 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 13180 0xffffffff, 0x00000000 }, 13181 13182 /* Mailbox Registers */ 13183 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 13184 0x00000000, 0x000001ff }, 13185 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 13186 0x00000000, 0x000001ff }, 13187 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 13188 0x00000000, 0x000007ff }, 13189 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 13190 0x00000000, 0x000001ff }, 13191 13192 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 13193 }; 13194 13195 is_5705 = is_5750 = 0; 13196 if (tg3_flag(tp, 5705_PLUS)) { 13197 is_5705 = 1; 13198 if (tg3_flag(tp, 5750_PLUS)) 13199 is_5750 = 1; 13200 } 13201 13202 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 13203 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 13204 continue; 13205 13206 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 13207 continue; 13208 13209 if (tg3_flag(tp, IS_5788) && 13210 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 13211 continue; 13212 13213 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 13214 continue; 13215 13216 offset = (u32) reg_tbl[i].offset; 13217 read_mask = reg_tbl[i].read_mask; 13218 write_mask = reg_tbl[i].write_mask; 13219 13220 /* Save the original register content */ 13221 save_val = tr32(offset); 13222 13223 /* Determine the read-only value. */ 13224 read_val = save_val & read_mask; 13225 13226 /* Write zero to the register, then make sure the read-only bits 13227 * are not changed and the read/write bits are all zeros. 13228 */ 13229 tw32(offset, 0); 13230 13231 val = tr32(offset); 13232 13233 /* Test the read-only and read/write bits. */ 13234 if (((val & read_mask) != read_val) || (val & write_mask)) 13235 goto out; 13236 13237 /* Write ones to all the bits defined by RdMask and WrMask, then 13238 * make sure the read-only bits are not changed and the 13239 * read/write bits are all ones. 13240 */ 13241 tw32(offset, read_mask | write_mask); 13242 13243 val = tr32(offset); 13244 13245 /* Test the read-only bits. */ 13246 if ((val & read_mask) != read_val) 13247 goto out; 13248 13249 /* Test the read/write bits. */ 13250 if ((val & write_mask) != write_mask) 13251 goto out; 13252 13253 tw32(offset, save_val); 13254 } 13255 13256 return 0; 13257 13258out: 13259 if (netif_msg_hw(tp)) 13260 netdev_err(tp->dev, 13261 "Register test failed at offset %x\n", offset); 13262 tw32(offset, save_val); 13263 return -EIO; 13264} 13265 13266static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 13267{ 13268 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 13269 int i; 13270 u32 j; 13271 13272 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 13273 for (j = 0; j < len; j += 4) { 13274 u32 val; 13275 13276 tg3_write_mem(tp, offset + j, test_pattern[i]); 13277 tg3_read_mem(tp, offset + j, &val); 13278 if (val != test_pattern[i]) 13279 return -EIO; 13280 } 13281 } 13282 return 0; 13283} 13284 13285static int tg3_test_memory(struct tg3 *tp) 13286{ 13287 static struct mem_entry { 13288 u32 offset; 13289 u32 len; 13290 } mem_tbl_570x[] = { 13291 { 0x00000000, 0x00b50}, 13292 { 0x00002000, 0x1c000}, 13293 { 0xffffffff, 0x00000} 13294 }, mem_tbl_5705[] = { 13295 { 0x00000100, 0x0000c}, 13296 { 0x00000200, 0x00008}, 13297 { 0x00004000, 0x00800}, 13298 { 0x00006000, 0x01000}, 13299 { 0x00008000, 0x02000}, 13300 { 0x00010000, 0x0e000}, 13301 { 0xffffffff, 0x00000} 13302 }, mem_tbl_5755[] = { 13303 { 0x00000200, 0x00008}, 13304 { 0x00004000, 0x00800}, 13305 { 0x00006000, 0x00800}, 13306 { 0x00008000, 0x02000}, 13307 { 0x00010000, 0x0c000}, 13308 { 0xffffffff, 0x00000} 13309 }, mem_tbl_5906[] = { 13310 { 0x00000200, 0x00008}, 13311 { 0x00004000, 0x00400}, 13312 { 0x00006000, 0x00400}, 13313 { 0x00008000, 0x01000}, 13314 { 0x00010000, 0x01000}, 13315 { 0xffffffff, 0x00000} 13316 }, mem_tbl_5717[] = { 13317 { 0x00000200, 0x00008}, 13318 { 0x00010000, 0x0a000}, 13319 { 0x00020000, 0x13c00}, 13320 { 0xffffffff, 0x00000} 13321 }, mem_tbl_57765[] = { 13322 { 0x00000200, 0x00008}, 13323 { 0x00004000, 0x00800}, 13324 { 0x00006000, 0x09800}, 13325 { 0x00010000, 0x0a000}, 13326 { 0xffffffff, 0x00000} 13327 }; 13328 struct mem_entry *mem_tbl; 13329 int err = 0; 13330 int i; 13331 13332 if (tg3_flag(tp, 5717_PLUS)) 13333 mem_tbl = mem_tbl_5717; 13334 else if (tg3_flag(tp, 57765_CLASS) || 13335 tg3_asic_rev(tp) == ASIC_REV_5762) 13336 mem_tbl = mem_tbl_57765; 13337 else if (tg3_flag(tp, 5755_PLUS)) 13338 mem_tbl = mem_tbl_5755; 13339 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 13340 mem_tbl = mem_tbl_5906; 13341 else if (tg3_flag(tp, 5705_PLUS)) 13342 mem_tbl = mem_tbl_5705; 13343 else 13344 mem_tbl = mem_tbl_570x; 13345 13346 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 13347 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 13348 if (err) 13349 break; 13350 } 13351 13352 return err; 13353} 13354 13355#define TG3_TSO_MSS 500 13356 13357#define TG3_TSO_IP_HDR_LEN 20 13358#define TG3_TSO_TCP_HDR_LEN 20 13359#define TG3_TSO_TCP_OPT_LEN 12 13360 13361static const u8 tg3_tso_header[] = { 133620x08, 0x00, 133630x45, 0x00, 0x00, 0x00, 133640x00, 0x00, 0x40, 0x00, 133650x40, 0x06, 0x00, 0x00, 133660x0a, 0x00, 0x00, 0x01, 133670x0a, 0x00, 0x00, 0x02, 133680x0d, 0x00, 0xe0, 0x00, 133690x00, 0x00, 0x01, 0x00, 133700x00, 0x00, 0x02, 0x00, 133710x80, 0x10, 0x10, 0x00, 133720x14, 0x09, 0x00, 0x00, 133730x01, 0x01, 0x08, 0x0a, 133740x11, 0x11, 0x11, 0x11, 133750x11, 0x11, 0x11, 0x11, 13376}; 13377 13378static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 13379{ 13380 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 13381 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 13382 u32 budget; 13383 struct sk_buff *skb; 13384 u8 *tx_data, *rx_data; 13385 dma_addr_t map; 13386 int num_pkts, tx_len, rx_len, i, err; 13387 struct tg3_rx_buffer_desc *desc; 13388 struct tg3_napi *tnapi, *rnapi; 13389 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 13390 13391 tnapi = &tp->napi[0]; 13392 rnapi = &tp->napi[0]; 13393 if (tp->irq_cnt > 1) { 13394 if (tg3_flag(tp, ENABLE_RSS)) 13395 rnapi = &tp->napi[1]; 13396 if (tg3_flag(tp, ENABLE_TSS)) 13397 tnapi = &tp->napi[1]; 13398 } 13399 coal_now = tnapi->coal_now | rnapi->coal_now; 13400 13401 err = -EIO; 13402 13403 tx_len = pktsz; 13404 skb = netdev_alloc_skb(tp->dev, tx_len); 13405 if (!skb) 13406 return -ENOMEM; 13407 13408 tx_data = skb_put(skb, tx_len); 13409 memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN); 13410 memset(tx_data + ETH_ALEN, 0x0, 8); 13411 13412 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 13413 13414 if (tso_loopback) { 13415 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 13416 13417 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 13418 TG3_TSO_TCP_OPT_LEN; 13419 13420 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 13421 sizeof(tg3_tso_header)); 13422 mss = TG3_TSO_MSS; 13423 13424 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 13425 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 13426 13427 /* Set the total length field in the IP header */ 13428 iph->tot_len = htons((u16)(mss + hdr_len)); 13429 13430 base_flags = (TXD_FLAG_CPU_PRE_DMA | 13431 TXD_FLAG_CPU_POST_DMA); 13432 13433 if (tg3_flag(tp, HW_TSO_1) || 13434 tg3_flag(tp, HW_TSO_2) || 13435 tg3_flag(tp, HW_TSO_3)) { 13436 struct tcphdr *th; 13437 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 13438 th = (struct tcphdr *)&tx_data[val]; 13439 th->check = 0; 13440 } else 13441 base_flags |= TXD_FLAG_TCPUDP_CSUM; 13442 13443 if (tg3_flag(tp, HW_TSO_3)) { 13444 mss |= (hdr_len & 0xc) << 12; 13445 if (hdr_len & 0x10) 13446 base_flags |= 0x00000010; 13447 base_flags |= (hdr_len & 0x3e0) << 5; 13448 } else if (tg3_flag(tp, HW_TSO_2)) 13449 mss |= hdr_len << 9; 13450 else if (tg3_flag(tp, HW_TSO_1) || 13451 tg3_asic_rev(tp) == ASIC_REV_5705) { 13452 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 13453 } else { 13454 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 13455 } 13456 13457 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 13458 } else { 13459 num_pkts = 1; 13460 data_off = ETH_HLEN; 13461 13462 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 13463 tx_len > VLAN_ETH_FRAME_LEN) 13464 base_flags |= TXD_FLAG_JMB_PKT; 13465 } 13466 13467 for (i = data_off; i < tx_len; i++) 13468 tx_data[i] = (u8) (i & 0xff); 13469 13470 map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE); 13471 if (dma_mapping_error(&tp->pdev->dev, map)) { 13472 dev_kfree_skb(skb); 13473 return -EIO; 13474 } 13475 13476 val = tnapi->tx_prod; 13477 tnapi->tx_buffers[val].skb = skb; 13478 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 13479 13480 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13481 rnapi->coal_now); 13482 13483 udelay(10); 13484 13485 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 13486 13487 budget = tg3_tx_avail(tnapi); 13488 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 13489 base_flags | TXD_FLAG_END, mss, 0)) { 13490 tnapi->tx_buffers[val].skb = NULL; 13491 dev_kfree_skb(skb); 13492 return -EIO; 13493 } 13494 13495 tnapi->tx_prod++; 13496 13497 /* Sync BD data before updating mailbox */ 13498 wmb(); 13499 13500 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 13501 tr32_mailbox(tnapi->prodmbox); 13502 13503 udelay(10); 13504 13505 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 13506 for (i = 0; i < 35; i++) { 13507 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13508 coal_now); 13509 13510 udelay(10); 13511 13512 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 13513 rx_idx = rnapi->hw_status->idx[0].rx_producer; 13514 if ((tx_idx == tnapi->tx_prod) && 13515 (rx_idx == (rx_start_idx + num_pkts))) 13516 break; 13517 } 13518 13519 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 13520 dev_kfree_skb(skb); 13521 13522 if (tx_idx != tnapi->tx_prod) 13523 goto out; 13524 13525 if (rx_idx != rx_start_idx + num_pkts) 13526 goto out; 13527 13528 val = data_off; 13529 while (rx_idx != rx_start_idx) { 13530 desc = &rnapi->rx_rcb[rx_start_idx++]; 13531 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 13532 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 13533 13534 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 13535 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 13536 goto out; 13537 13538 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 13539 - ETH_FCS_LEN; 13540 13541 if (!tso_loopback) { 13542 if (rx_len != tx_len) 13543 goto out; 13544 13545 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 13546 if (opaque_key != RXD_OPAQUE_RING_STD) 13547 goto out; 13548 } else { 13549 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 13550 goto out; 13551 } 13552 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 13553 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 13554 >> RXD_TCPCSUM_SHIFT != 0xffff) { 13555 goto out; 13556 } 13557 13558 if (opaque_key == RXD_OPAQUE_RING_STD) { 13559 rx_data = tpr->rx_std_buffers[desc_idx].data; 13560 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 13561 mapping); 13562 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 13563 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 13564 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 13565 mapping); 13566 } else 13567 goto out; 13568 13569 dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len, 13570 DMA_FROM_DEVICE); 13571 13572 rx_data += TG3_RX_OFFSET(tp); 13573 for (i = data_off; i < rx_len; i++, val++) { 13574 if (*(rx_data + i) != (u8) (val & 0xff)) 13575 goto out; 13576 } 13577 } 13578 13579 err = 0; 13580 13581 /* tg3_free_rings will unmap and free the rx_data */ 13582out: 13583 return err; 13584} 13585 13586#define TG3_STD_LOOPBACK_FAILED 1 13587#define TG3_JMB_LOOPBACK_FAILED 2 13588#define TG3_TSO_LOOPBACK_FAILED 4 13589#define TG3_LOOPBACK_FAILED \ 13590 (TG3_STD_LOOPBACK_FAILED | \ 13591 TG3_JMB_LOOPBACK_FAILED | \ 13592 TG3_TSO_LOOPBACK_FAILED) 13593 13594static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 13595{ 13596 int err = -EIO; 13597 u32 eee_cap; 13598 u32 jmb_pkt_sz = 9000; 13599 13600 if (tp->dma_limit) 13601 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 13602 13603 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 13604 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 13605 13606 if (!netif_running(tp->dev)) { 13607 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13608 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13609 if (do_extlpbk) 13610 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13611 goto done; 13612 } 13613 13614 err = tg3_reset_hw(tp, true); 13615 if (err) { 13616 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13617 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13618 if (do_extlpbk) 13619 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13620 goto done; 13621 } 13622 13623 if (tg3_flag(tp, ENABLE_RSS)) { 13624 int i; 13625 13626 /* Reroute all rx packets to the 1st queue */ 13627 for (i = MAC_RSS_INDIR_TBL_0; 13628 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 13629 tw32(i, 0x0); 13630 } 13631 13632 /* HW errata - mac loopback fails in some cases on 5780. 13633 * Normal traffic and PHY loopback are not affected by 13634 * errata. Also, the MAC loopback test is deprecated for 13635 * all newer ASIC revisions. 13636 */ 13637 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 13638 !tg3_flag(tp, CPMU_PRESENT)) { 13639 tg3_mac_loopback(tp, true); 13640 13641 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13642 data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13643 13644 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13645 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13646 data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13647 13648 tg3_mac_loopback(tp, false); 13649 } 13650 13651 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 13652 !tg3_flag(tp, USE_PHYLIB)) { 13653 int i; 13654 13655 tg3_phy_lpbk_set(tp, 0, false); 13656 13657 /* Wait for link */ 13658 for (i = 0; i < 100; i++) { 13659 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 13660 break; 13661 mdelay(1); 13662 } 13663 13664 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13665 data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13666 if (tg3_flag(tp, TSO_CAPABLE) && 13667 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13668 data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED; 13669 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13670 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13671 data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13672 13673 if (do_extlpbk) { 13674 tg3_phy_lpbk_set(tp, 0, true); 13675 13676 /* All link indications report up, but the hardware 13677 * isn't really ready for about 20 msec. Double it 13678 * to be sure. 13679 */ 13680 mdelay(40); 13681 13682 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13683 data[TG3_EXT_LOOPB_TEST] |= 13684 TG3_STD_LOOPBACK_FAILED; 13685 if (tg3_flag(tp, TSO_CAPABLE) && 13686 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13687 data[TG3_EXT_LOOPB_TEST] |= 13688 TG3_TSO_LOOPBACK_FAILED; 13689 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13690 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13691 data[TG3_EXT_LOOPB_TEST] |= 13692 TG3_JMB_LOOPBACK_FAILED; 13693 } 13694 13695 /* Re-enable gphy autopowerdown. */ 13696 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 13697 tg3_phy_toggle_apd(tp, true); 13698 } 13699 13700 err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] | 13701 data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0; 13702 13703done: 13704 tp->phy_flags |= eee_cap; 13705 13706 return err; 13707} 13708 13709static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 13710 u64 *data) 13711{ 13712 struct tg3 *tp = netdev_priv(dev); 13713 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 13714 13715 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 13716 if (tg3_power_up(tp)) { 13717 etest->flags |= ETH_TEST_FL_FAILED; 13718 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 13719 return; 13720 } 13721 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 13722 } 13723 13724 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 13725 13726 if (tg3_test_nvram(tp) != 0) { 13727 etest->flags |= ETH_TEST_FL_FAILED; 13728 data[TG3_NVRAM_TEST] = 1; 13729 } 13730 if (!doextlpbk && tg3_test_link(tp)) { 13731 etest->flags |= ETH_TEST_FL_FAILED; 13732 data[TG3_LINK_TEST] = 1; 13733 } 13734 if (etest->flags & ETH_TEST_FL_OFFLINE) { 13735 int err, err2 = 0, irq_sync = 0; 13736 13737 if (netif_running(dev)) { 13738 tg3_phy_stop(tp); 13739 tg3_netif_stop(tp); 13740 irq_sync = 1; 13741 } 13742 13743 tg3_full_lock(tp, irq_sync); 13744 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 13745 err = tg3_nvram_lock(tp); 13746 tg3_halt_cpu(tp, RX_CPU_BASE); 13747 if (!tg3_flag(tp, 5705_PLUS)) 13748 tg3_halt_cpu(tp, TX_CPU_BASE); 13749 if (!err) 13750 tg3_nvram_unlock(tp); 13751 13752 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 13753 tg3_phy_reset(tp); 13754 13755 if (tg3_test_registers(tp) != 0) { 13756 etest->flags |= ETH_TEST_FL_FAILED; 13757 data[TG3_REGISTER_TEST] = 1; 13758 } 13759 13760 if (tg3_test_memory(tp) != 0) { 13761 etest->flags |= ETH_TEST_FL_FAILED; 13762 data[TG3_MEMORY_TEST] = 1; 13763 } 13764 13765 if (doextlpbk) 13766 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 13767 13768 if (tg3_test_loopback(tp, data, doextlpbk)) 13769 etest->flags |= ETH_TEST_FL_FAILED; 13770 13771 tg3_full_unlock(tp); 13772 13773 if (tg3_test_interrupt(tp) != 0) { 13774 etest->flags |= ETH_TEST_FL_FAILED; 13775 data[TG3_INTERRUPT_TEST] = 1; 13776 } 13777 13778 tg3_full_lock(tp, 0); 13779 13780 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 13781 if (netif_running(dev)) { 13782 tg3_flag_set(tp, INIT_COMPLETE); 13783 err2 = tg3_restart_hw(tp, true); 13784 if (!err2) 13785 tg3_netif_start(tp); 13786 } 13787 13788 tg3_full_unlock(tp); 13789 13790 if (irq_sync && !err2) 13791 tg3_phy_start(tp); 13792 } 13793 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 13794 tg3_power_down_prepare(tp); 13795 13796} 13797 13798static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr) 13799{ 13800 struct tg3 *tp = netdev_priv(dev); 13801 struct hwtstamp_config stmpconf; 13802 13803 if (!tg3_flag(tp, PTP_CAPABLE)) 13804 return -EOPNOTSUPP; 13805 13806 if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) 13807 return -EFAULT; 13808 13809 if (stmpconf.tx_type != HWTSTAMP_TX_ON && 13810 stmpconf.tx_type != HWTSTAMP_TX_OFF) 13811 return -ERANGE; 13812 13813 switch (stmpconf.rx_filter) { 13814 case HWTSTAMP_FILTER_NONE: 13815 tp->rxptpctl = 0; 13816 break; 13817 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 13818 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13819 TG3_RX_PTP_CTL_ALL_V1_EVENTS; 13820 break; 13821 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 13822 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13823 TG3_RX_PTP_CTL_SYNC_EVNT; 13824 break; 13825 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 13826 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13827 TG3_RX_PTP_CTL_DELAY_REQ; 13828 break; 13829 case HWTSTAMP_FILTER_PTP_V2_EVENT: 13830 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13831 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13832 break; 13833 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 13834 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13835 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13836 break; 13837 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 13838 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13839 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13840 break; 13841 case HWTSTAMP_FILTER_PTP_V2_SYNC: 13842 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13843 TG3_RX_PTP_CTL_SYNC_EVNT; 13844 break; 13845 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 13846 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13847 TG3_RX_PTP_CTL_SYNC_EVNT; 13848 break; 13849 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 13850 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13851 TG3_RX_PTP_CTL_SYNC_EVNT; 13852 break; 13853 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 13854 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13855 TG3_RX_PTP_CTL_DELAY_REQ; 13856 break; 13857 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 13858 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13859 TG3_RX_PTP_CTL_DELAY_REQ; 13860 break; 13861 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 13862 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13863 TG3_RX_PTP_CTL_DELAY_REQ; 13864 break; 13865 default: 13866 return -ERANGE; 13867 } 13868 13869 if (netif_running(dev) && tp->rxptpctl) 13870 tw32(TG3_RX_PTP_CTL, 13871 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 13872 13873 if (stmpconf.tx_type == HWTSTAMP_TX_ON) 13874 tg3_flag_set(tp, TX_TSTAMP_EN); 13875 else 13876 tg3_flag_clear(tp, TX_TSTAMP_EN); 13877 13878 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13879 -EFAULT : 0; 13880} 13881 13882static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr) 13883{ 13884 struct tg3 *tp = netdev_priv(dev); 13885 struct hwtstamp_config stmpconf; 13886 13887 if (!tg3_flag(tp, PTP_CAPABLE)) 13888 return -EOPNOTSUPP; 13889 13890 stmpconf.flags = 0; 13891 stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ? 13892 HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF); 13893 13894 switch (tp->rxptpctl) { 13895 case 0: 13896 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE; 13897 break; 13898 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS: 13899 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 13900 break; 13901 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13902 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC; 13903 break; 13904 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13905 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ; 13906 break; 13907 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13908 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 13909 break; 13910 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13911 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT; 13912 break; 13913 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13914 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 13915 break; 13916 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13917 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC; 13918 break; 13919 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13920 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC; 13921 break; 13922 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13923 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC; 13924 break; 13925 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13926 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ; 13927 break; 13928 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13929 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ; 13930 break; 13931 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13932 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ; 13933 break; 13934 default: 13935 WARN_ON_ONCE(1); 13936 return -ERANGE; 13937 } 13938 13939 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13940 -EFAULT : 0; 13941} 13942 13943static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 13944{ 13945 struct mii_ioctl_data *data = if_mii(ifr); 13946 struct tg3 *tp = netdev_priv(dev); 13947 int err; 13948 13949 if (tg3_flag(tp, USE_PHYLIB)) { 13950 struct phy_device *phydev; 13951 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 13952 return -EAGAIN; 13953 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 13954 return phy_mii_ioctl(phydev, ifr, cmd); 13955 } 13956 13957 switch (cmd) { 13958 case SIOCGMIIPHY: 13959 data->phy_id = tp->phy_addr; 13960 13961 fallthrough; 13962 case SIOCGMIIREG: { 13963 u32 mii_regval; 13964 13965 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 13966 break; /* We have no PHY */ 13967 13968 if (!netif_running(dev)) 13969 return -EAGAIN; 13970 13971 spin_lock_bh(&tp->lock); 13972 err = __tg3_readphy(tp, data->phy_id & 0x1f, 13973 data->reg_num & 0x1f, &mii_regval); 13974 spin_unlock_bh(&tp->lock); 13975 13976 data->val_out = mii_regval; 13977 13978 return err; 13979 } 13980 13981 case SIOCSMIIREG: 13982 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 13983 break; /* We have no PHY */ 13984 13985 if (!netif_running(dev)) 13986 return -EAGAIN; 13987 13988 spin_lock_bh(&tp->lock); 13989 err = __tg3_writephy(tp, data->phy_id & 0x1f, 13990 data->reg_num & 0x1f, data->val_in); 13991 spin_unlock_bh(&tp->lock); 13992 13993 return err; 13994 13995 case SIOCSHWTSTAMP: 13996 return tg3_hwtstamp_set(dev, ifr); 13997 13998 case SIOCGHWTSTAMP: 13999 return tg3_hwtstamp_get(dev, ifr); 14000 14001 default: 14002 /* do nothing */ 14003 break; 14004 } 14005 return -EOPNOTSUPP; 14006} 14007 14008static int tg3_get_coalesce(struct net_device *dev, 14009 struct ethtool_coalesce *ec, 14010 struct kernel_ethtool_coalesce *kernel_coal, 14011 struct netlink_ext_ack *extack) 14012{ 14013 struct tg3 *tp = netdev_priv(dev); 14014 14015 memcpy(ec, &tp->coal, sizeof(*ec)); 14016 return 0; 14017} 14018 14019static int tg3_set_coalesce(struct net_device *dev, 14020 struct ethtool_coalesce *ec, 14021 struct kernel_ethtool_coalesce *kernel_coal, 14022 struct netlink_ext_ack *extack) 14023{ 14024 struct tg3 *tp = netdev_priv(dev); 14025 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 14026 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 14027 14028 if (!tg3_flag(tp, 5705_PLUS)) { 14029 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 14030 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 14031 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 14032 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 14033 } 14034 14035 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 14036 (!ec->rx_coalesce_usecs) || 14037 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 14038 (!ec->tx_coalesce_usecs) || 14039 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 14040 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 14041 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 14042 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 14043 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 14044 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 14045 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 14046 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 14047 return -EINVAL; 14048 14049 /* Only copy relevant parameters, ignore all others. */ 14050 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 14051 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 14052 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 14053 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 14054 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 14055 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 14056 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 14057 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 14058 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 14059 14060 if (netif_running(dev)) { 14061 tg3_full_lock(tp, 0); 14062 __tg3_set_coalesce(tp, &tp->coal); 14063 tg3_full_unlock(tp); 14064 } 14065 return 0; 14066} 14067 14068static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata) 14069{ 14070 struct tg3 *tp = netdev_priv(dev); 14071 14072 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14073 netdev_warn(tp->dev, "Board does not support EEE!\n"); 14074 return -EOPNOTSUPP; 14075 } 14076 14077 if (edata->advertised != tp->eee.advertised) { 14078 netdev_warn(tp->dev, 14079 "Direct manipulation of EEE advertisement is not supported\n"); 14080 return -EINVAL; 14081 } 14082 14083 if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) { 14084 netdev_warn(tp->dev, 14085 "Maximal Tx Lpi timer supported is %#x(u)\n", 14086 TG3_CPMU_DBTMR1_LNKIDLE_MAX); 14087 return -EINVAL; 14088 } 14089 14090 tp->eee = *edata; 14091 14092 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 14093 tg3_warn_mgmt_link_flap(tp); 14094 14095 if (netif_running(tp->dev)) { 14096 tg3_full_lock(tp, 0); 14097 tg3_setup_eee(tp); 14098 tg3_phy_reset(tp); 14099 tg3_full_unlock(tp); 14100 } 14101 14102 return 0; 14103} 14104 14105static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata) 14106{ 14107 struct tg3 *tp = netdev_priv(dev); 14108 14109 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14110 netdev_warn(tp->dev, 14111 "Board does not support EEE!\n"); 14112 return -EOPNOTSUPP; 14113 } 14114 14115 *edata = tp->eee; 14116 return 0; 14117} 14118 14119static const struct ethtool_ops tg3_ethtool_ops = { 14120 .supported_coalesce_params = ETHTOOL_COALESCE_USECS | 14121 ETHTOOL_COALESCE_MAX_FRAMES | 14122 ETHTOOL_COALESCE_USECS_IRQ | 14123 ETHTOOL_COALESCE_MAX_FRAMES_IRQ | 14124 ETHTOOL_COALESCE_STATS_BLOCK_USECS, 14125 .get_drvinfo = tg3_get_drvinfo, 14126 .get_regs_len = tg3_get_regs_len, 14127 .get_regs = tg3_get_regs, 14128 .get_wol = tg3_get_wol, 14129 .set_wol = tg3_set_wol, 14130 .get_msglevel = tg3_get_msglevel, 14131 .set_msglevel = tg3_set_msglevel, 14132 .nway_reset = tg3_nway_reset, 14133 .get_link = ethtool_op_get_link, 14134 .get_eeprom_len = tg3_get_eeprom_len, 14135 .get_eeprom = tg3_get_eeprom, 14136 .set_eeprom = tg3_set_eeprom, 14137 .get_ringparam = tg3_get_ringparam, 14138 .set_ringparam = tg3_set_ringparam, 14139 .get_pauseparam = tg3_get_pauseparam, 14140 .set_pauseparam = tg3_set_pauseparam, 14141 .self_test = tg3_self_test, 14142 .get_strings = tg3_get_strings, 14143 .set_phys_id = tg3_set_phys_id, 14144 .get_ethtool_stats = tg3_get_ethtool_stats, 14145 .get_coalesce = tg3_get_coalesce, 14146 .set_coalesce = tg3_set_coalesce, 14147 .get_sset_count = tg3_get_sset_count, 14148 .get_rxnfc = tg3_get_rxnfc, 14149 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 14150 .get_rxfh = tg3_get_rxfh, 14151 .set_rxfh = tg3_set_rxfh, 14152 .get_channels = tg3_get_channels, 14153 .set_channels = tg3_set_channels, 14154 .get_ts_info = tg3_get_ts_info, 14155 .get_eee = tg3_get_eee, 14156 .set_eee = tg3_set_eee, 14157 .get_link_ksettings = tg3_get_link_ksettings, 14158 .set_link_ksettings = tg3_set_link_ksettings, 14159}; 14160 14161static void tg3_get_stats64(struct net_device *dev, 14162 struct rtnl_link_stats64 *stats) 14163{ 14164 struct tg3 *tp = netdev_priv(dev); 14165 14166 spin_lock_bh(&tp->lock); 14167 if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) { 14168 *stats = tp->net_stats_prev; 14169 spin_unlock_bh(&tp->lock); 14170 return; 14171 } 14172 14173 tg3_get_nstats(tp, stats); 14174 spin_unlock_bh(&tp->lock); 14175} 14176 14177static void tg3_set_rx_mode(struct net_device *dev) 14178{ 14179 struct tg3 *tp = netdev_priv(dev); 14180 14181 if (!netif_running(dev)) 14182 return; 14183 14184 tg3_full_lock(tp, 0); 14185 __tg3_set_rx_mode(dev); 14186 tg3_full_unlock(tp); 14187} 14188 14189static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 14190 int new_mtu) 14191{ 14192 dev->mtu = new_mtu; 14193 14194 if (new_mtu > ETH_DATA_LEN) { 14195 if (tg3_flag(tp, 5780_CLASS)) { 14196 netdev_update_features(dev); 14197 tg3_flag_clear(tp, TSO_CAPABLE); 14198 } else { 14199 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14200 } 14201 } else { 14202 if (tg3_flag(tp, 5780_CLASS)) { 14203 tg3_flag_set(tp, TSO_CAPABLE); 14204 netdev_update_features(dev); 14205 } 14206 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 14207 } 14208} 14209 14210static int tg3_change_mtu(struct net_device *dev, int new_mtu) 14211{ 14212 struct tg3 *tp = netdev_priv(dev); 14213 int err; 14214 bool reset_phy = false; 14215 14216 if (!netif_running(dev)) { 14217 /* We'll just catch it later when the 14218 * device is up'd. 14219 */ 14220 tg3_set_mtu(dev, tp, new_mtu); 14221 return 0; 14222 } 14223 14224 tg3_phy_stop(tp); 14225 14226 tg3_netif_stop(tp); 14227 14228 tg3_set_mtu(dev, tp, new_mtu); 14229 14230 tg3_full_lock(tp, 1); 14231 14232 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 14233 14234 /* Reset PHY, otherwise the read DMA engine will be in a mode that 14235 * breaks all requests to 256 bytes. 14236 */ 14237 if (tg3_asic_rev(tp) == ASIC_REV_57766 || 14238 tg3_asic_rev(tp) == ASIC_REV_5717 || 14239 tg3_asic_rev(tp) == ASIC_REV_5719 || 14240 tg3_asic_rev(tp) == ASIC_REV_5720) 14241 reset_phy = true; 14242 14243 err = tg3_restart_hw(tp, reset_phy); 14244 14245 if (!err) 14246 tg3_netif_start(tp); 14247 14248 tg3_full_unlock(tp); 14249 14250 if (!err) 14251 tg3_phy_start(tp); 14252 14253 return err; 14254} 14255 14256static const struct net_device_ops tg3_netdev_ops = { 14257 .ndo_open = tg3_open, 14258 .ndo_stop = tg3_close, 14259 .ndo_start_xmit = tg3_start_xmit, 14260 .ndo_get_stats64 = tg3_get_stats64, 14261 .ndo_validate_addr = eth_validate_addr, 14262 .ndo_set_rx_mode = tg3_set_rx_mode, 14263 .ndo_set_mac_address = tg3_set_mac_addr, 14264 .ndo_eth_ioctl = tg3_ioctl, 14265 .ndo_tx_timeout = tg3_tx_timeout, 14266 .ndo_change_mtu = tg3_change_mtu, 14267 .ndo_fix_features = tg3_fix_features, 14268 .ndo_set_features = tg3_set_features, 14269#ifdef CONFIG_NET_POLL_CONTROLLER 14270 .ndo_poll_controller = tg3_poll_controller, 14271#endif 14272}; 14273 14274static void tg3_get_eeprom_size(struct tg3 *tp) 14275{ 14276 u32 cursize, val, magic; 14277 14278 tp->nvram_size = EEPROM_CHIP_SIZE; 14279 14280 if (tg3_nvram_read(tp, 0, &magic) != 0) 14281 return; 14282 14283 if ((magic != TG3_EEPROM_MAGIC) && 14284 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 14285 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 14286 return; 14287 14288 /* 14289 * Size the chip by reading offsets at increasing powers of two. 14290 * When we encounter our validation signature, we know the addressing 14291 * has wrapped around, and thus have our chip size. 14292 */ 14293 cursize = 0x10; 14294 14295 while (cursize < tp->nvram_size) { 14296 if (tg3_nvram_read(tp, cursize, &val) != 0) 14297 return; 14298 14299 if (val == magic) 14300 break; 14301 14302 cursize <<= 1; 14303 } 14304 14305 tp->nvram_size = cursize; 14306} 14307 14308static void tg3_get_nvram_size(struct tg3 *tp) 14309{ 14310 u32 val; 14311 14312 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 14313 return; 14314 14315 /* Selfboot format */ 14316 if (val != TG3_EEPROM_MAGIC) { 14317 tg3_get_eeprom_size(tp); 14318 return; 14319 } 14320 14321 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 14322 if (val != 0) { 14323 /* This is confusing. We want to operate on the 14324 * 16-bit value at offset 0xf2. The tg3_nvram_read() 14325 * call will read from NVRAM and byteswap the data 14326 * according to the byteswapping settings for all 14327 * other register accesses. This ensures the data we 14328 * want will always reside in the lower 16-bits. 14329 * However, the data in NVRAM is in LE format, which 14330 * means the data from the NVRAM read will always be 14331 * opposite the endianness of the CPU. The 16-bit 14332 * byteswap then brings the data to CPU endianness. 14333 */ 14334 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 14335 return; 14336 } 14337 } 14338 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14339} 14340 14341static void tg3_get_nvram_info(struct tg3 *tp) 14342{ 14343 u32 nvcfg1; 14344 14345 nvcfg1 = tr32(NVRAM_CFG1); 14346 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 14347 tg3_flag_set(tp, FLASH); 14348 } else { 14349 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14350 tw32(NVRAM_CFG1, nvcfg1); 14351 } 14352 14353 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 14354 tg3_flag(tp, 5780_CLASS)) { 14355 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 14356 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 14357 tp->nvram_jedecnum = JEDEC_ATMEL; 14358 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14359 tg3_flag_set(tp, NVRAM_BUFFERED); 14360 break; 14361 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 14362 tp->nvram_jedecnum = JEDEC_ATMEL; 14363 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 14364 break; 14365 case FLASH_VENDOR_ATMEL_EEPROM: 14366 tp->nvram_jedecnum = JEDEC_ATMEL; 14367 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14368 tg3_flag_set(tp, NVRAM_BUFFERED); 14369 break; 14370 case FLASH_VENDOR_ST: 14371 tp->nvram_jedecnum = JEDEC_ST; 14372 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 14373 tg3_flag_set(tp, NVRAM_BUFFERED); 14374 break; 14375 case FLASH_VENDOR_SAIFUN: 14376 tp->nvram_jedecnum = JEDEC_SAIFUN; 14377 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 14378 break; 14379 case FLASH_VENDOR_SST_SMALL: 14380 case FLASH_VENDOR_SST_LARGE: 14381 tp->nvram_jedecnum = JEDEC_SST; 14382 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 14383 break; 14384 } 14385 } else { 14386 tp->nvram_jedecnum = JEDEC_ATMEL; 14387 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14388 tg3_flag_set(tp, NVRAM_BUFFERED); 14389 } 14390} 14391 14392static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 14393{ 14394 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 14395 case FLASH_5752PAGE_SIZE_256: 14396 tp->nvram_pagesize = 256; 14397 break; 14398 case FLASH_5752PAGE_SIZE_512: 14399 tp->nvram_pagesize = 512; 14400 break; 14401 case FLASH_5752PAGE_SIZE_1K: 14402 tp->nvram_pagesize = 1024; 14403 break; 14404 case FLASH_5752PAGE_SIZE_2K: 14405 tp->nvram_pagesize = 2048; 14406 break; 14407 case FLASH_5752PAGE_SIZE_4K: 14408 tp->nvram_pagesize = 4096; 14409 break; 14410 case FLASH_5752PAGE_SIZE_264: 14411 tp->nvram_pagesize = 264; 14412 break; 14413 case FLASH_5752PAGE_SIZE_528: 14414 tp->nvram_pagesize = 528; 14415 break; 14416 } 14417} 14418 14419static void tg3_get_5752_nvram_info(struct tg3 *tp) 14420{ 14421 u32 nvcfg1; 14422 14423 nvcfg1 = tr32(NVRAM_CFG1); 14424 14425 /* NVRAM protection for TPM */ 14426 if (nvcfg1 & (1 << 27)) 14427 tg3_flag_set(tp, PROTECTED_NVRAM); 14428 14429 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14430 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 14431 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 14432 tp->nvram_jedecnum = JEDEC_ATMEL; 14433 tg3_flag_set(tp, NVRAM_BUFFERED); 14434 break; 14435 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14436 tp->nvram_jedecnum = JEDEC_ATMEL; 14437 tg3_flag_set(tp, NVRAM_BUFFERED); 14438 tg3_flag_set(tp, FLASH); 14439 break; 14440 case FLASH_5752VENDOR_ST_M45PE10: 14441 case FLASH_5752VENDOR_ST_M45PE20: 14442 case FLASH_5752VENDOR_ST_M45PE40: 14443 tp->nvram_jedecnum = JEDEC_ST; 14444 tg3_flag_set(tp, NVRAM_BUFFERED); 14445 tg3_flag_set(tp, FLASH); 14446 break; 14447 } 14448 14449 if (tg3_flag(tp, FLASH)) { 14450 tg3_nvram_get_pagesize(tp, nvcfg1); 14451 } else { 14452 /* For eeprom, set pagesize to maximum eeprom size */ 14453 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14454 14455 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14456 tw32(NVRAM_CFG1, nvcfg1); 14457 } 14458} 14459 14460static void tg3_get_5755_nvram_info(struct tg3 *tp) 14461{ 14462 u32 nvcfg1, protect = 0; 14463 14464 nvcfg1 = tr32(NVRAM_CFG1); 14465 14466 /* NVRAM protection for TPM */ 14467 if (nvcfg1 & (1 << 27)) { 14468 tg3_flag_set(tp, PROTECTED_NVRAM); 14469 protect = 1; 14470 } 14471 14472 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14473 switch (nvcfg1) { 14474 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14475 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14476 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14477 case FLASH_5755VENDOR_ATMEL_FLASH_5: 14478 tp->nvram_jedecnum = JEDEC_ATMEL; 14479 tg3_flag_set(tp, NVRAM_BUFFERED); 14480 tg3_flag_set(tp, FLASH); 14481 tp->nvram_pagesize = 264; 14482 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 14483 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 14484 tp->nvram_size = (protect ? 0x3e200 : 14485 TG3_NVRAM_SIZE_512KB); 14486 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 14487 tp->nvram_size = (protect ? 0x1f200 : 14488 TG3_NVRAM_SIZE_256KB); 14489 else 14490 tp->nvram_size = (protect ? 0x1f200 : 14491 TG3_NVRAM_SIZE_128KB); 14492 break; 14493 case FLASH_5752VENDOR_ST_M45PE10: 14494 case FLASH_5752VENDOR_ST_M45PE20: 14495 case FLASH_5752VENDOR_ST_M45PE40: 14496 tp->nvram_jedecnum = JEDEC_ST; 14497 tg3_flag_set(tp, NVRAM_BUFFERED); 14498 tg3_flag_set(tp, FLASH); 14499 tp->nvram_pagesize = 256; 14500 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 14501 tp->nvram_size = (protect ? 14502 TG3_NVRAM_SIZE_64KB : 14503 TG3_NVRAM_SIZE_128KB); 14504 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 14505 tp->nvram_size = (protect ? 14506 TG3_NVRAM_SIZE_64KB : 14507 TG3_NVRAM_SIZE_256KB); 14508 else 14509 tp->nvram_size = (protect ? 14510 TG3_NVRAM_SIZE_128KB : 14511 TG3_NVRAM_SIZE_512KB); 14512 break; 14513 } 14514} 14515 14516static void tg3_get_5787_nvram_info(struct tg3 *tp) 14517{ 14518 u32 nvcfg1; 14519 14520 nvcfg1 = tr32(NVRAM_CFG1); 14521 14522 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14523 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 14524 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14525 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 14526 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14527 tp->nvram_jedecnum = JEDEC_ATMEL; 14528 tg3_flag_set(tp, NVRAM_BUFFERED); 14529 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14530 14531 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14532 tw32(NVRAM_CFG1, nvcfg1); 14533 break; 14534 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14535 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14536 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14537 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14538 tp->nvram_jedecnum = JEDEC_ATMEL; 14539 tg3_flag_set(tp, NVRAM_BUFFERED); 14540 tg3_flag_set(tp, FLASH); 14541 tp->nvram_pagesize = 264; 14542 break; 14543 case FLASH_5752VENDOR_ST_M45PE10: 14544 case FLASH_5752VENDOR_ST_M45PE20: 14545 case FLASH_5752VENDOR_ST_M45PE40: 14546 tp->nvram_jedecnum = JEDEC_ST; 14547 tg3_flag_set(tp, NVRAM_BUFFERED); 14548 tg3_flag_set(tp, FLASH); 14549 tp->nvram_pagesize = 256; 14550 break; 14551 } 14552} 14553 14554static void tg3_get_5761_nvram_info(struct tg3 *tp) 14555{ 14556 u32 nvcfg1, protect = 0; 14557 14558 nvcfg1 = tr32(NVRAM_CFG1); 14559 14560 /* NVRAM protection for TPM */ 14561 if (nvcfg1 & (1 << 27)) { 14562 tg3_flag_set(tp, PROTECTED_NVRAM); 14563 protect = 1; 14564 } 14565 14566 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14567 switch (nvcfg1) { 14568 case FLASH_5761VENDOR_ATMEL_ADB021D: 14569 case FLASH_5761VENDOR_ATMEL_ADB041D: 14570 case FLASH_5761VENDOR_ATMEL_ADB081D: 14571 case FLASH_5761VENDOR_ATMEL_ADB161D: 14572 case FLASH_5761VENDOR_ATMEL_MDB021D: 14573 case FLASH_5761VENDOR_ATMEL_MDB041D: 14574 case FLASH_5761VENDOR_ATMEL_MDB081D: 14575 case FLASH_5761VENDOR_ATMEL_MDB161D: 14576 tp->nvram_jedecnum = JEDEC_ATMEL; 14577 tg3_flag_set(tp, NVRAM_BUFFERED); 14578 tg3_flag_set(tp, FLASH); 14579 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14580 tp->nvram_pagesize = 256; 14581 break; 14582 case FLASH_5761VENDOR_ST_A_M45PE20: 14583 case FLASH_5761VENDOR_ST_A_M45PE40: 14584 case FLASH_5761VENDOR_ST_A_M45PE80: 14585 case FLASH_5761VENDOR_ST_A_M45PE16: 14586 case FLASH_5761VENDOR_ST_M_M45PE20: 14587 case FLASH_5761VENDOR_ST_M_M45PE40: 14588 case FLASH_5761VENDOR_ST_M_M45PE80: 14589 case FLASH_5761VENDOR_ST_M_M45PE16: 14590 tp->nvram_jedecnum = JEDEC_ST; 14591 tg3_flag_set(tp, NVRAM_BUFFERED); 14592 tg3_flag_set(tp, FLASH); 14593 tp->nvram_pagesize = 256; 14594 break; 14595 } 14596 14597 if (protect) { 14598 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 14599 } else { 14600 switch (nvcfg1) { 14601 case FLASH_5761VENDOR_ATMEL_ADB161D: 14602 case FLASH_5761VENDOR_ATMEL_MDB161D: 14603 case FLASH_5761VENDOR_ST_A_M45PE16: 14604 case FLASH_5761VENDOR_ST_M_M45PE16: 14605 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 14606 break; 14607 case FLASH_5761VENDOR_ATMEL_ADB081D: 14608 case FLASH_5761VENDOR_ATMEL_MDB081D: 14609 case FLASH_5761VENDOR_ST_A_M45PE80: 14610 case FLASH_5761VENDOR_ST_M_M45PE80: 14611 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14612 break; 14613 case FLASH_5761VENDOR_ATMEL_ADB041D: 14614 case FLASH_5761VENDOR_ATMEL_MDB041D: 14615 case FLASH_5761VENDOR_ST_A_M45PE40: 14616 case FLASH_5761VENDOR_ST_M_M45PE40: 14617 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14618 break; 14619 case FLASH_5761VENDOR_ATMEL_ADB021D: 14620 case FLASH_5761VENDOR_ATMEL_MDB021D: 14621 case FLASH_5761VENDOR_ST_A_M45PE20: 14622 case FLASH_5761VENDOR_ST_M_M45PE20: 14623 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14624 break; 14625 } 14626 } 14627} 14628 14629static void tg3_get_5906_nvram_info(struct tg3 *tp) 14630{ 14631 tp->nvram_jedecnum = JEDEC_ATMEL; 14632 tg3_flag_set(tp, NVRAM_BUFFERED); 14633 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14634} 14635 14636static void tg3_get_57780_nvram_info(struct tg3 *tp) 14637{ 14638 u32 nvcfg1; 14639 14640 nvcfg1 = tr32(NVRAM_CFG1); 14641 14642 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14643 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14644 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14645 tp->nvram_jedecnum = JEDEC_ATMEL; 14646 tg3_flag_set(tp, NVRAM_BUFFERED); 14647 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14648 14649 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14650 tw32(NVRAM_CFG1, nvcfg1); 14651 return; 14652 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14653 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14654 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14655 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14656 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14657 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14658 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14659 tp->nvram_jedecnum = JEDEC_ATMEL; 14660 tg3_flag_set(tp, NVRAM_BUFFERED); 14661 tg3_flag_set(tp, FLASH); 14662 14663 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14664 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14665 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14666 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14667 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14668 break; 14669 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14670 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14671 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14672 break; 14673 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14674 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14675 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14676 break; 14677 } 14678 break; 14679 case FLASH_5752VENDOR_ST_M45PE10: 14680 case FLASH_5752VENDOR_ST_M45PE20: 14681 case FLASH_5752VENDOR_ST_M45PE40: 14682 tp->nvram_jedecnum = JEDEC_ST; 14683 tg3_flag_set(tp, NVRAM_BUFFERED); 14684 tg3_flag_set(tp, FLASH); 14685 14686 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14687 case FLASH_5752VENDOR_ST_M45PE10: 14688 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14689 break; 14690 case FLASH_5752VENDOR_ST_M45PE20: 14691 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14692 break; 14693 case FLASH_5752VENDOR_ST_M45PE40: 14694 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14695 break; 14696 } 14697 break; 14698 default: 14699 tg3_flag_set(tp, NO_NVRAM); 14700 return; 14701 } 14702 14703 tg3_nvram_get_pagesize(tp, nvcfg1); 14704 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14705 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14706} 14707 14708 14709static void tg3_get_5717_nvram_info(struct tg3 *tp) 14710{ 14711 u32 nvcfg1; 14712 14713 nvcfg1 = tr32(NVRAM_CFG1); 14714 14715 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14716 case FLASH_5717VENDOR_ATMEL_EEPROM: 14717 case FLASH_5717VENDOR_MICRO_EEPROM: 14718 tp->nvram_jedecnum = JEDEC_ATMEL; 14719 tg3_flag_set(tp, NVRAM_BUFFERED); 14720 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14721 14722 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14723 tw32(NVRAM_CFG1, nvcfg1); 14724 return; 14725 case FLASH_5717VENDOR_ATMEL_MDB011D: 14726 case FLASH_5717VENDOR_ATMEL_ADB011B: 14727 case FLASH_5717VENDOR_ATMEL_ADB011D: 14728 case FLASH_5717VENDOR_ATMEL_MDB021D: 14729 case FLASH_5717VENDOR_ATMEL_ADB021B: 14730 case FLASH_5717VENDOR_ATMEL_ADB021D: 14731 case FLASH_5717VENDOR_ATMEL_45USPT: 14732 tp->nvram_jedecnum = JEDEC_ATMEL; 14733 tg3_flag_set(tp, NVRAM_BUFFERED); 14734 tg3_flag_set(tp, FLASH); 14735 14736 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14737 case FLASH_5717VENDOR_ATMEL_MDB021D: 14738 /* Detect size with tg3_nvram_get_size() */ 14739 break; 14740 case FLASH_5717VENDOR_ATMEL_ADB021B: 14741 case FLASH_5717VENDOR_ATMEL_ADB021D: 14742 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14743 break; 14744 default: 14745 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14746 break; 14747 } 14748 break; 14749 case FLASH_5717VENDOR_ST_M_M25PE10: 14750 case FLASH_5717VENDOR_ST_A_M25PE10: 14751 case FLASH_5717VENDOR_ST_M_M45PE10: 14752 case FLASH_5717VENDOR_ST_A_M45PE10: 14753 case FLASH_5717VENDOR_ST_M_M25PE20: 14754 case FLASH_5717VENDOR_ST_A_M25PE20: 14755 case FLASH_5717VENDOR_ST_M_M45PE20: 14756 case FLASH_5717VENDOR_ST_A_M45PE20: 14757 case FLASH_5717VENDOR_ST_25USPT: 14758 case FLASH_5717VENDOR_ST_45USPT: 14759 tp->nvram_jedecnum = JEDEC_ST; 14760 tg3_flag_set(tp, NVRAM_BUFFERED); 14761 tg3_flag_set(tp, FLASH); 14762 14763 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14764 case FLASH_5717VENDOR_ST_M_M25PE20: 14765 case FLASH_5717VENDOR_ST_M_M45PE20: 14766 /* Detect size with tg3_nvram_get_size() */ 14767 break; 14768 case FLASH_5717VENDOR_ST_A_M25PE20: 14769 case FLASH_5717VENDOR_ST_A_M45PE20: 14770 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14771 break; 14772 default: 14773 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14774 break; 14775 } 14776 break; 14777 default: 14778 tg3_flag_set(tp, NO_NVRAM); 14779 return; 14780 } 14781 14782 tg3_nvram_get_pagesize(tp, nvcfg1); 14783 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14784 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14785} 14786 14787static void tg3_get_5720_nvram_info(struct tg3 *tp) 14788{ 14789 u32 nvcfg1, nvmpinstrp, nv_status; 14790 14791 nvcfg1 = tr32(NVRAM_CFG1); 14792 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 14793 14794 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14795 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) { 14796 tg3_flag_set(tp, NO_NVRAM); 14797 return; 14798 } 14799 14800 switch (nvmpinstrp) { 14801 case FLASH_5762_MX25L_100: 14802 case FLASH_5762_MX25L_200: 14803 case FLASH_5762_MX25L_400: 14804 case FLASH_5762_MX25L_800: 14805 case FLASH_5762_MX25L_160_320: 14806 tp->nvram_pagesize = 4096; 14807 tp->nvram_jedecnum = JEDEC_MACRONIX; 14808 tg3_flag_set(tp, NVRAM_BUFFERED); 14809 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14810 tg3_flag_set(tp, FLASH); 14811 nv_status = tr32(NVRAM_AUTOSENSE_STATUS); 14812 tp->nvram_size = 14813 (1 << (nv_status >> AUTOSENSE_DEVID & 14814 AUTOSENSE_DEVID_MASK) 14815 << AUTOSENSE_SIZE_IN_MB); 14816 return; 14817 14818 case FLASH_5762_EEPROM_HD: 14819 nvmpinstrp = FLASH_5720_EEPROM_HD; 14820 break; 14821 case FLASH_5762_EEPROM_LD: 14822 nvmpinstrp = FLASH_5720_EEPROM_LD; 14823 break; 14824 case FLASH_5720VENDOR_M_ST_M45PE20: 14825 /* This pinstrap supports multiple sizes, so force it 14826 * to read the actual size from location 0xf0. 14827 */ 14828 nvmpinstrp = FLASH_5720VENDOR_ST_45USPT; 14829 break; 14830 } 14831 } 14832 14833 switch (nvmpinstrp) { 14834 case FLASH_5720_EEPROM_HD: 14835 case FLASH_5720_EEPROM_LD: 14836 tp->nvram_jedecnum = JEDEC_ATMEL; 14837 tg3_flag_set(tp, NVRAM_BUFFERED); 14838 14839 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14840 tw32(NVRAM_CFG1, nvcfg1); 14841 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 14842 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14843 else 14844 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 14845 return; 14846 case FLASH_5720VENDOR_M_ATMEL_DB011D: 14847 case FLASH_5720VENDOR_A_ATMEL_DB011B: 14848 case FLASH_5720VENDOR_A_ATMEL_DB011D: 14849 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14850 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14851 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14852 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14853 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14854 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14855 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14856 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14857 case FLASH_5720VENDOR_ATMEL_45USPT: 14858 tp->nvram_jedecnum = JEDEC_ATMEL; 14859 tg3_flag_set(tp, NVRAM_BUFFERED); 14860 tg3_flag_set(tp, FLASH); 14861 14862 switch (nvmpinstrp) { 14863 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14864 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14865 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14866 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14867 break; 14868 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14869 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14870 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14871 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14872 break; 14873 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14874 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14875 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14876 break; 14877 default: 14878 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14879 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14880 break; 14881 } 14882 break; 14883 case FLASH_5720VENDOR_M_ST_M25PE10: 14884 case FLASH_5720VENDOR_M_ST_M45PE10: 14885 case FLASH_5720VENDOR_A_ST_M25PE10: 14886 case FLASH_5720VENDOR_A_ST_M45PE10: 14887 case FLASH_5720VENDOR_M_ST_M25PE20: 14888 case FLASH_5720VENDOR_M_ST_M45PE20: 14889 case FLASH_5720VENDOR_A_ST_M25PE20: 14890 case FLASH_5720VENDOR_A_ST_M45PE20: 14891 case FLASH_5720VENDOR_M_ST_M25PE40: 14892 case FLASH_5720VENDOR_M_ST_M45PE40: 14893 case FLASH_5720VENDOR_A_ST_M25PE40: 14894 case FLASH_5720VENDOR_A_ST_M45PE40: 14895 case FLASH_5720VENDOR_M_ST_M25PE80: 14896 case FLASH_5720VENDOR_M_ST_M45PE80: 14897 case FLASH_5720VENDOR_A_ST_M25PE80: 14898 case FLASH_5720VENDOR_A_ST_M45PE80: 14899 case FLASH_5720VENDOR_ST_25USPT: 14900 case FLASH_5720VENDOR_ST_45USPT: 14901 tp->nvram_jedecnum = JEDEC_ST; 14902 tg3_flag_set(tp, NVRAM_BUFFERED); 14903 tg3_flag_set(tp, FLASH); 14904 14905 switch (nvmpinstrp) { 14906 case FLASH_5720VENDOR_M_ST_M25PE20: 14907 case FLASH_5720VENDOR_M_ST_M45PE20: 14908 case FLASH_5720VENDOR_A_ST_M25PE20: 14909 case FLASH_5720VENDOR_A_ST_M45PE20: 14910 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14911 break; 14912 case FLASH_5720VENDOR_M_ST_M25PE40: 14913 case FLASH_5720VENDOR_M_ST_M45PE40: 14914 case FLASH_5720VENDOR_A_ST_M25PE40: 14915 case FLASH_5720VENDOR_A_ST_M45PE40: 14916 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14917 break; 14918 case FLASH_5720VENDOR_M_ST_M25PE80: 14919 case FLASH_5720VENDOR_M_ST_M45PE80: 14920 case FLASH_5720VENDOR_A_ST_M25PE80: 14921 case FLASH_5720VENDOR_A_ST_M45PE80: 14922 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14923 break; 14924 default: 14925 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14926 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14927 break; 14928 } 14929 break; 14930 default: 14931 tg3_flag_set(tp, NO_NVRAM); 14932 return; 14933 } 14934 14935 tg3_nvram_get_pagesize(tp, nvcfg1); 14936 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14937 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14938 14939 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14940 u32 val; 14941 14942 if (tg3_nvram_read(tp, 0, &val)) 14943 return; 14944 14945 if (val != TG3_EEPROM_MAGIC && 14946 (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) 14947 tg3_flag_set(tp, NO_NVRAM); 14948 } 14949} 14950 14951/* Chips other than 5700/5701 use the NVRAM for fetching info. */ 14952static void tg3_nvram_init(struct tg3 *tp) 14953{ 14954 if (tg3_flag(tp, IS_SSB_CORE)) { 14955 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */ 14956 tg3_flag_clear(tp, NVRAM); 14957 tg3_flag_clear(tp, NVRAM_BUFFERED); 14958 tg3_flag_set(tp, NO_NVRAM); 14959 return; 14960 } 14961 14962 tw32_f(GRC_EEPROM_ADDR, 14963 (EEPROM_ADDR_FSM_RESET | 14964 (EEPROM_DEFAULT_CLOCK_PERIOD << 14965 EEPROM_ADDR_CLKPERD_SHIFT))); 14966 14967 msleep(1); 14968 14969 /* Enable seeprom accesses. */ 14970 tw32_f(GRC_LOCAL_CTRL, 14971 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 14972 udelay(100); 14973 14974 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 14975 tg3_asic_rev(tp) != ASIC_REV_5701) { 14976 tg3_flag_set(tp, NVRAM); 14977 14978 if (tg3_nvram_lock(tp)) { 14979 netdev_warn(tp->dev, 14980 "Cannot get nvram lock, %s failed\n", 14981 __func__); 14982 return; 14983 } 14984 tg3_enable_nvram_access(tp); 14985 14986 tp->nvram_size = 0; 14987 14988 if (tg3_asic_rev(tp) == ASIC_REV_5752) 14989 tg3_get_5752_nvram_info(tp); 14990 else if (tg3_asic_rev(tp) == ASIC_REV_5755) 14991 tg3_get_5755_nvram_info(tp); 14992 else if (tg3_asic_rev(tp) == ASIC_REV_5787 || 14993 tg3_asic_rev(tp) == ASIC_REV_5784 || 14994 tg3_asic_rev(tp) == ASIC_REV_5785) 14995 tg3_get_5787_nvram_info(tp); 14996 else if (tg3_asic_rev(tp) == ASIC_REV_5761) 14997 tg3_get_5761_nvram_info(tp); 14998 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 14999 tg3_get_5906_nvram_info(tp); 15000 else if (tg3_asic_rev(tp) == ASIC_REV_57780 || 15001 tg3_flag(tp, 57765_CLASS)) 15002 tg3_get_57780_nvram_info(tp); 15003 else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15004 tg3_asic_rev(tp) == ASIC_REV_5719) 15005 tg3_get_5717_nvram_info(tp); 15006 else if (tg3_asic_rev(tp) == ASIC_REV_5720 || 15007 tg3_asic_rev(tp) == ASIC_REV_5762) 15008 tg3_get_5720_nvram_info(tp); 15009 else 15010 tg3_get_nvram_info(tp); 15011 15012 if (tp->nvram_size == 0) 15013 tg3_get_nvram_size(tp); 15014 15015 tg3_disable_nvram_access(tp); 15016 tg3_nvram_unlock(tp); 15017 15018 } else { 15019 tg3_flag_clear(tp, NVRAM); 15020 tg3_flag_clear(tp, NVRAM_BUFFERED); 15021 15022 tg3_get_eeprom_size(tp); 15023 } 15024} 15025 15026struct subsys_tbl_ent { 15027 u16 subsys_vendor, subsys_devid; 15028 u32 phy_id; 15029}; 15030 15031static struct subsys_tbl_ent subsys_id_to_phy_id[] = { 15032 /* Broadcom boards. */ 15033 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15034 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 15035 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15036 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 15037 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15038 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 15039 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15040 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 15041 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15042 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 15043 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15044 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 15045 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15046 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 15047 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15048 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 15049 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15050 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 15051 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15052 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 15053 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15054 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 15055 15056 /* 3com boards. */ 15057 { TG3PCI_SUBVENDOR_ID_3COM, 15058 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 15059 { TG3PCI_SUBVENDOR_ID_3COM, 15060 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 15061 { TG3PCI_SUBVENDOR_ID_3COM, 15062 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 15063 { TG3PCI_SUBVENDOR_ID_3COM, 15064 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 15065 { TG3PCI_SUBVENDOR_ID_3COM, 15066 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 15067 15068 /* DELL boards. */ 15069 { TG3PCI_SUBVENDOR_ID_DELL, 15070 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 15071 { TG3PCI_SUBVENDOR_ID_DELL, 15072 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 15073 { TG3PCI_SUBVENDOR_ID_DELL, 15074 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 15075 { TG3PCI_SUBVENDOR_ID_DELL, 15076 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 15077 15078 /* Compaq boards. */ 15079 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15080 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 15081 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15082 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 15083 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15084 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 15085 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15086 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 15087 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15088 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 15089 15090 /* IBM boards. */ 15091 { TG3PCI_SUBVENDOR_ID_IBM, 15092 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 15093}; 15094 15095static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) 15096{ 15097 int i; 15098 15099 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 15100 if ((subsys_id_to_phy_id[i].subsys_vendor == 15101 tp->pdev->subsystem_vendor) && 15102 (subsys_id_to_phy_id[i].subsys_devid == 15103 tp->pdev->subsystem_device)) 15104 return &subsys_id_to_phy_id[i]; 15105 } 15106 return NULL; 15107} 15108 15109static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) 15110{ 15111 u32 val; 15112 15113 tp->phy_id = TG3_PHY_ID_INVALID; 15114 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15115 15116 /* Assume an onboard device and WOL capable by default. */ 15117 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15118 tg3_flag_set(tp, WOL_CAP); 15119 15120 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15121 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 15122 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15123 tg3_flag_set(tp, IS_NIC); 15124 } 15125 val = tr32(VCPU_CFGSHDW); 15126 if (val & VCPU_CFGSHDW_ASPM_DBNC) 15127 tg3_flag_set(tp, ASPM_WORKAROUND); 15128 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 15129 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 15130 tg3_flag_set(tp, WOL_ENABLE); 15131 device_set_wakeup_enable(&tp->pdev->dev, true); 15132 } 15133 goto done; 15134 } 15135 15136 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 15137 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 15138 u32 nic_cfg, led_cfg; 15139 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0; 15140 u32 nic_phy_id, ver, eeprom_phy_id; 15141 int eeprom_phy_serdes = 0; 15142 15143 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 15144 tp->nic_sram_data_cfg = nic_cfg; 15145 15146 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 15147 ver >>= NIC_SRAM_DATA_VER_SHIFT; 15148 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15149 tg3_asic_rev(tp) != ASIC_REV_5701 && 15150 tg3_asic_rev(tp) != ASIC_REV_5703 && 15151 (ver > 0) && (ver < 0x100)) 15152 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 15153 15154 if (tg3_asic_rev(tp) == ASIC_REV_5785) 15155 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 15156 15157 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15158 tg3_asic_rev(tp) == ASIC_REV_5719 || 15159 tg3_asic_rev(tp) == ASIC_REV_5720) 15160 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5); 15161 15162 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 15163 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 15164 eeprom_phy_serdes = 1; 15165 15166 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 15167 if (nic_phy_id != 0) { 15168 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 15169 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 15170 15171 eeprom_phy_id = (id1 >> 16) << 10; 15172 eeprom_phy_id |= (id2 & 0xfc00) << 16; 15173 eeprom_phy_id |= (id2 & 0x03ff) << 0; 15174 } else 15175 eeprom_phy_id = 0; 15176 15177 tp->phy_id = eeprom_phy_id; 15178 if (eeprom_phy_serdes) { 15179 if (!tg3_flag(tp, 5705_PLUS)) 15180 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15181 else 15182 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 15183 } 15184 15185 if (tg3_flag(tp, 5750_PLUS)) 15186 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 15187 SHASTA_EXT_LED_MODE_MASK); 15188 else 15189 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 15190 15191 switch (led_cfg) { 15192 default: 15193 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 15194 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15195 break; 15196 15197 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 15198 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15199 break; 15200 15201 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 15202 tp->led_ctrl = LED_CTRL_MODE_MAC; 15203 15204 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 15205 * read on some older 5700/5701 bootcode. 15206 */ 15207 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 15208 tg3_asic_rev(tp) == ASIC_REV_5701) 15209 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15210 15211 break; 15212 15213 case SHASTA_EXT_LED_SHARED: 15214 tp->led_ctrl = LED_CTRL_MODE_SHARED; 15215 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 15216 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1) 15217 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15218 LED_CTRL_MODE_PHY_2); 15219 15220 if (tg3_flag(tp, 5717_PLUS) || 15221 tg3_asic_rev(tp) == ASIC_REV_5762) 15222 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE | 15223 LED_CTRL_BLINK_RATE_MASK; 15224 15225 break; 15226 15227 case SHASTA_EXT_LED_MAC: 15228 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 15229 break; 15230 15231 case SHASTA_EXT_LED_COMBO: 15232 tp->led_ctrl = LED_CTRL_MODE_COMBO; 15233 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) 15234 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15235 LED_CTRL_MODE_PHY_2); 15236 break; 15237 15238 } 15239 15240 if ((tg3_asic_rev(tp) == ASIC_REV_5700 || 15241 tg3_asic_rev(tp) == ASIC_REV_5701) && 15242 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 15243 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15244 15245 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) 15246 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15247 15248 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 15249 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15250 if ((tp->pdev->subsystem_vendor == 15251 PCI_VENDOR_ID_ARIMA) && 15252 (tp->pdev->subsystem_device == 0x205a || 15253 tp->pdev->subsystem_device == 0x2063)) 15254 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15255 } else { 15256 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15257 tg3_flag_set(tp, IS_NIC); 15258 } 15259 15260 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 15261 tg3_flag_set(tp, ENABLE_ASF); 15262 if (tg3_flag(tp, 5750_PLUS)) 15263 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 15264 } 15265 15266 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 15267 tg3_flag(tp, 5750_PLUS)) 15268 tg3_flag_set(tp, ENABLE_APE); 15269 15270 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 15271 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 15272 tg3_flag_clear(tp, WOL_CAP); 15273 15274 if (tg3_flag(tp, WOL_CAP) && 15275 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 15276 tg3_flag_set(tp, WOL_ENABLE); 15277 device_set_wakeup_enable(&tp->pdev->dev, true); 15278 } 15279 15280 if (cfg2 & (1 << 17)) 15281 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 15282 15283 /* serdes signal pre-emphasis in register 0x590 set by */ 15284 /* bootcode if bit 18 is set */ 15285 if (cfg2 & (1 << 18)) 15286 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 15287 15288 if ((tg3_flag(tp, 57765_PLUS) || 15289 (tg3_asic_rev(tp) == ASIC_REV_5784 && 15290 tg3_chip_rev(tp) != CHIPREV_5784_AX)) && 15291 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 15292 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 15293 15294 if (tg3_flag(tp, PCI_EXPRESS)) { 15295 u32 cfg3; 15296 15297 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 15298 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 15299 !tg3_flag(tp, 57765_PLUS) && 15300 (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)) 15301 tg3_flag_set(tp, ASPM_WORKAROUND); 15302 if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID) 15303 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 15304 if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK) 15305 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 15306 } 15307 15308 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 15309 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 15310 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 15311 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 15312 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 15313 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 15314 15315 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV) 15316 tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV; 15317 } 15318done: 15319 if (tg3_flag(tp, WOL_CAP)) 15320 device_set_wakeup_enable(&tp->pdev->dev, 15321 tg3_flag(tp, WOL_ENABLE)); 15322 else 15323 device_set_wakeup_capable(&tp->pdev->dev, false); 15324} 15325 15326static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val) 15327{ 15328 int i, err; 15329 u32 val2, off = offset * 8; 15330 15331 err = tg3_nvram_lock(tp); 15332 if (err) 15333 return err; 15334 15335 tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE); 15336 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN | 15337 APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START); 15338 tg3_ape_read32(tp, TG3_APE_OTP_CTRL); 15339 udelay(10); 15340 15341 for (i = 0; i < 100; i++) { 15342 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS); 15343 if (val2 & APE_OTP_STATUS_CMD_DONE) { 15344 *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA); 15345 break; 15346 } 15347 udelay(10); 15348 } 15349 15350 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0); 15351 15352 tg3_nvram_unlock(tp); 15353 if (val2 & APE_OTP_STATUS_CMD_DONE) 15354 return 0; 15355 15356 return -EBUSY; 15357} 15358 15359static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 15360{ 15361 int i; 15362 u32 val; 15363 15364 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 15365 tw32(OTP_CTRL, cmd); 15366 15367 /* Wait for up to 1 ms for command to execute. */ 15368 for (i = 0; i < 100; i++) { 15369 val = tr32(OTP_STATUS); 15370 if (val & OTP_STATUS_CMD_DONE) 15371 break; 15372 udelay(10); 15373 } 15374 15375 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 15376} 15377 15378/* Read the gphy configuration from the OTP region of the chip. The gphy 15379 * configuration is a 32-bit value that straddles the alignment boundary. 15380 * We do two 32-bit reads and then shift and merge the results. 15381 */ 15382static u32 tg3_read_otp_phycfg(struct tg3 *tp) 15383{ 15384 u32 bhalf_otp, thalf_otp; 15385 15386 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 15387 15388 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 15389 return 0; 15390 15391 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 15392 15393 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15394 return 0; 15395 15396 thalf_otp = tr32(OTP_READ_DATA); 15397 15398 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 15399 15400 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15401 return 0; 15402 15403 bhalf_otp = tr32(OTP_READ_DATA); 15404 15405 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 15406} 15407 15408static void tg3_phy_init_link_config(struct tg3 *tp) 15409{ 15410 u32 adv = ADVERTISED_Autoneg; 15411 15412 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 15413 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV)) 15414 adv |= ADVERTISED_1000baseT_Half; 15415 adv |= ADVERTISED_1000baseT_Full; 15416 } 15417 15418 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 15419 adv |= ADVERTISED_100baseT_Half | 15420 ADVERTISED_100baseT_Full | 15421 ADVERTISED_10baseT_Half | 15422 ADVERTISED_10baseT_Full | 15423 ADVERTISED_TP; 15424 else 15425 adv |= ADVERTISED_FIBRE; 15426 15427 tp->link_config.advertising = adv; 15428 tp->link_config.speed = SPEED_UNKNOWN; 15429 tp->link_config.duplex = DUPLEX_UNKNOWN; 15430 tp->link_config.autoneg = AUTONEG_ENABLE; 15431 tp->link_config.active_speed = SPEED_UNKNOWN; 15432 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 15433 15434 tp->old_link = -1; 15435} 15436 15437static int tg3_phy_probe(struct tg3 *tp) 15438{ 15439 u32 hw_phy_id_1, hw_phy_id_2; 15440 u32 hw_phy_id, hw_phy_id_masked; 15441 int err; 15442 15443 /* flow control autonegotiation is default behavior */ 15444 tg3_flag_set(tp, PAUSE_AUTONEG); 15445 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 15446 15447 if (tg3_flag(tp, ENABLE_APE)) { 15448 switch (tp->pci_fn) { 15449 case 0: 15450 tp->phy_ape_lock = TG3_APE_LOCK_PHY0; 15451 break; 15452 case 1: 15453 tp->phy_ape_lock = TG3_APE_LOCK_PHY1; 15454 break; 15455 case 2: 15456 tp->phy_ape_lock = TG3_APE_LOCK_PHY2; 15457 break; 15458 case 3: 15459 tp->phy_ape_lock = TG3_APE_LOCK_PHY3; 15460 break; 15461 } 15462 } 15463 15464 if (!tg3_flag(tp, ENABLE_ASF) && 15465 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15466 !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 15467 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 15468 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 15469 15470 if (tg3_flag(tp, USE_PHYLIB)) 15471 return tg3_phy_init(tp); 15472 15473 /* Reading the PHY ID register can conflict with ASF 15474 * firmware access to the PHY hardware. 15475 */ 15476 err = 0; 15477 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 15478 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 15479 } else { 15480 /* Now read the physical PHY_ID from the chip and verify 15481 * that it is sane. If it doesn't look good, we fall back 15482 * to either the hard-coded table based PHY_ID and failing 15483 * that the value found in the eeprom area. 15484 */ 15485 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 15486 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 15487 15488 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 15489 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 15490 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 15491 15492 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 15493 } 15494 15495 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 15496 tp->phy_id = hw_phy_id; 15497 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 15498 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15499 else 15500 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 15501 } else { 15502 if (tp->phy_id != TG3_PHY_ID_INVALID) { 15503 /* Do nothing, phy ID already set up in 15504 * tg3_get_eeprom_hw_cfg(). 15505 */ 15506 } else { 15507 struct subsys_tbl_ent *p; 15508 15509 /* No eeprom signature? Try the hardcoded 15510 * subsys device table. 15511 */ 15512 p = tg3_lookup_by_subsys(tp); 15513 if (p) { 15514 tp->phy_id = p->phy_id; 15515 } else if (!tg3_flag(tp, IS_SSB_CORE)) { 15516 /* For now we saw the IDs 0xbc050cd0, 15517 * 0xbc050f80 and 0xbc050c30 on devices 15518 * connected to an BCM4785 and there are 15519 * probably more. Just assume that the phy is 15520 * supported when it is connected to a SSB core 15521 * for now. 15522 */ 15523 return -ENODEV; 15524 } 15525 15526 if (!tp->phy_id || 15527 tp->phy_id == TG3_PHY_ID_BCM8002) 15528 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15529 } 15530 } 15531 15532 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15533 (tg3_asic_rev(tp) == ASIC_REV_5719 || 15534 tg3_asic_rev(tp) == ASIC_REV_5720 || 15535 tg3_asic_rev(tp) == ASIC_REV_57766 || 15536 tg3_asic_rev(tp) == ASIC_REV_5762 || 15537 (tg3_asic_rev(tp) == ASIC_REV_5717 && 15538 tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) || 15539 (tg3_asic_rev(tp) == ASIC_REV_57765 && 15540 tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) { 15541 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 15542 15543 tp->eee.supported = SUPPORTED_100baseT_Full | 15544 SUPPORTED_1000baseT_Full; 15545 tp->eee.advertised = ADVERTISED_100baseT_Full | 15546 ADVERTISED_1000baseT_Full; 15547 tp->eee.eee_enabled = 1; 15548 tp->eee.tx_lpi_enabled = 1; 15549 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US; 15550 } 15551 15552 tg3_phy_init_link_config(tp); 15553 15554 if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 15555 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15556 !tg3_flag(tp, ENABLE_APE) && 15557 !tg3_flag(tp, ENABLE_ASF)) { 15558 u32 bmsr, dummy; 15559 15560 tg3_readphy(tp, MII_BMSR, &bmsr); 15561 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 15562 (bmsr & BMSR_LSTATUS)) 15563 goto skip_phy_reset; 15564 15565 err = tg3_phy_reset(tp); 15566 if (err) 15567 return err; 15568 15569 tg3_phy_set_wirespeed(tp); 15570 15571 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 15572 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 15573 tp->link_config.flowctrl); 15574 15575 tg3_writephy(tp, MII_BMCR, 15576 BMCR_ANENABLE | BMCR_ANRESTART); 15577 } 15578 } 15579 15580skip_phy_reset: 15581 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 15582 err = tg3_init_5401phy_dsp(tp); 15583 if (err) 15584 return err; 15585 15586 err = tg3_init_5401phy_dsp(tp); 15587 } 15588 15589 return err; 15590} 15591 15592static void tg3_read_vpd(struct tg3 *tp) 15593{ 15594 u8 *vpd_data; 15595 unsigned int len, vpdlen; 15596 int i; 15597 15598 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 15599 if (!vpd_data) 15600 goto out_no_vpd; 15601 15602 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15603 PCI_VPD_RO_KEYWORD_MFR_ID, &len); 15604 if (i < 0) 15605 goto partno; 15606 15607 if (len != 4 || memcmp(vpd_data + i, "1028", 4)) 15608 goto partno; 15609 15610 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15611 PCI_VPD_RO_KEYWORD_VENDOR0, &len); 15612 if (i < 0) 15613 goto partno; 15614 15615 memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); 15616 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i); 15617 15618partno: 15619 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15620 PCI_VPD_RO_KEYWORD_PARTNO, &len); 15621 if (i < 0) 15622 goto out_not_found; 15623 15624 if (len > TG3_BPN_SIZE) 15625 goto out_not_found; 15626 15627 memcpy(tp->board_part_number, &vpd_data[i], len); 15628 15629out_not_found: 15630 kfree(vpd_data); 15631 if (tp->board_part_number[0]) 15632 return; 15633 15634out_no_vpd: 15635 if (tg3_asic_rev(tp) == ASIC_REV_5717) { 15636 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15637 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C) 15638 strcpy(tp->board_part_number, "BCM5717"); 15639 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 15640 strcpy(tp->board_part_number, "BCM5718"); 15641 else 15642 goto nomatch; 15643 } else if (tg3_asic_rev(tp) == ASIC_REV_57780) { 15644 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 15645 strcpy(tp->board_part_number, "BCM57780"); 15646 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 15647 strcpy(tp->board_part_number, "BCM57760"); 15648 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 15649 strcpy(tp->board_part_number, "BCM57790"); 15650 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 15651 strcpy(tp->board_part_number, "BCM57788"); 15652 else 15653 goto nomatch; 15654 } else if (tg3_asic_rev(tp) == ASIC_REV_57765) { 15655 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 15656 strcpy(tp->board_part_number, "BCM57761"); 15657 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 15658 strcpy(tp->board_part_number, "BCM57765"); 15659 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 15660 strcpy(tp->board_part_number, "BCM57781"); 15661 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 15662 strcpy(tp->board_part_number, "BCM57785"); 15663 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 15664 strcpy(tp->board_part_number, "BCM57791"); 15665 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 15666 strcpy(tp->board_part_number, "BCM57795"); 15667 else 15668 goto nomatch; 15669 } else if (tg3_asic_rev(tp) == ASIC_REV_57766) { 15670 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 15671 strcpy(tp->board_part_number, "BCM57762"); 15672 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 15673 strcpy(tp->board_part_number, "BCM57766"); 15674 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 15675 strcpy(tp->board_part_number, "BCM57782"); 15676 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 15677 strcpy(tp->board_part_number, "BCM57786"); 15678 else 15679 goto nomatch; 15680 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15681 strcpy(tp->board_part_number, "BCM95906"); 15682 } else { 15683nomatch: 15684 strcpy(tp->board_part_number, "none"); 15685 } 15686} 15687 15688static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 15689{ 15690 u32 val; 15691 15692 if (tg3_nvram_read(tp, offset, &val) || 15693 (val & 0xfc000000) != 0x0c000000 || 15694 tg3_nvram_read(tp, offset + 4, &val) || 15695 val != 0) 15696 return 0; 15697 15698 return 1; 15699} 15700 15701static void tg3_read_bc_ver(struct tg3 *tp) 15702{ 15703 u32 val, offset, start, ver_offset; 15704 int i, dst_off; 15705 bool newver = false; 15706 15707 if (tg3_nvram_read(tp, 0xc, &offset) || 15708 tg3_nvram_read(tp, 0x4, &start)) 15709 return; 15710 15711 offset = tg3_nvram_logical_addr(tp, offset); 15712 15713 if (tg3_nvram_read(tp, offset, &val)) 15714 return; 15715 15716 if ((val & 0xfc000000) == 0x0c000000) { 15717 if (tg3_nvram_read(tp, offset + 4, &val)) 15718 return; 15719 15720 if (val == 0) 15721 newver = true; 15722 } 15723 15724 dst_off = strlen(tp->fw_ver); 15725 15726 if (newver) { 15727 if (TG3_VER_SIZE - dst_off < 16 || 15728 tg3_nvram_read(tp, offset + 8, &ver_offset)) 15729 return; 15730 15731 offset = offset + ver_offset - start; 15732 for (i = 0; i < 16; i += 4) { 15733 __be32 v; 15734 if (tg3_nvram_read_be32(tp, offset + i, &v)) 15735 return; 15736 15737 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 15738 } 15739 } else { 15740 u32 major, minor; 15741 15742 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 15743 return; 15744 15745 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 15746 TG3_NVM_BCVER_MAJSFT; 15747 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 15748 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 15749 "v%d.%02d", major, minor); 15750 } 15751} 15752 15753static void tg3_read_hwsb_ver(struct tg3 *tp) 15754{ 15755 u32 val, major, minor; 15756 15757 /* Use native endian representation */ 15758 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 15759 return; 15760 15761 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 15762 TG3_NVM_HWSB_CFG1_MAJSFT; 15763 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 15764 TG3_NVM_HWSB_CFG1_MINSFT; 15765 15766 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 15767} 15768 15769static void tg3_read_sb_ver(struct tg3 *tp, u32 val) 15770{ 15771 u32 offset, major, minor, build; 15772 15773 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 15774 15775 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 15776 return; 15777 15778 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 15779 case TG3_EEPROM_SB_REVISION_0: 15780 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 15781 break; 15782 case TG3_EEPROM_SB_REVISION_2: 15783 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 15784 break; 15785 case TG3_EEPROM_SB_REVISION_3: 15786 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 15787 break; 15788 case TG3_EEPROM_SB_REVISION_4: 15789 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 15790 break; 15791 case TG3_EEPROM_SB_REVISION_5: 15792 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 15793 break; 15794 case TG3_EEPROM_SB_REVISION_6: 15795 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 15796 break; 15797 default: 15798 return; 15799 } 15800 15801 if (tg3_nvram_read(tp, offset, &val)) 15802 return; 15803 15804 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 15805 TG3_EEPROM_SB_EDH_BLD_SHFT; 15806 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 15807 TG3_EEPROM_SB_EDH_MAJ_SHFT; 15808 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 15809 15810 if (minor > 99 || build > 26) 15811 return; 15812 15813 offset = strlen(tp->fw_ver); 15814 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 15815 " v%d.%02d", major, minor); 15816 15817 if (build > 0) { 15818 offset = strlen(tp->fw_ver); 15819 if (offset < TG3_VER_SIZE - 1) 15820 tp->fw_ver[offset] = 'a' + build - 1; 15821 } 15822} 15823 15824static void tg3_read_mgmtfw_ver(struct tg3 *tp) 15825{ 15826 u32 val, offset, start; 15827 int i, vlen; 15828 15829 for (offset = TG3_NVM_DIR_START; 15830 offset < TG3_NVM_DIR_END; 15831 offset += TG3_NVM_DIRENT_SIZE) { 15832 if (tg3_nvram_read(tp, offset, &val)) 15833 return; 15834 15835 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 15836 break; 15837 } 15838 15839 if (offset == TG3_NVM_DIR_END) 15840 return; 15841 15842 if (!tg3_flag(tp, 5705_PLUS)) 15843 start = 0x08000000; 15844 else if (tg3_nvram_read(tp, offset - 4, &start)) 15845 return; 15846 15847 if (tg3_nvram_read(tp, offset + 4, &offset) || 15848 !tg3_fw_img_is_valid(tp, offset) || 15849 tg3_nvram_read(tp, offset + 8, &val)) 15850 return; 15851 15852 offset += val - start; 15853 15854 vlen = strlen(tp->fw_ver); 15855 15856 tp->fw_ver[vlen++] = ','; 15857 tp->fw_ver[vlen++] = ' '; 15858 15859 for (i = 0; i < 4; i++) { 15860 __be32 v; 15861 if (tg3_nvram_read_be32(tp, offset, &v)) 15862 return; 15863 15864 offset += sizeof(v); 15865 15866 if (vlen > TG3_VER_SIZE - sizeof(v)) { 15867 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 15868 break; 15869 } 15870 15871 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 15872 vlen += sizeof(v); 15873 } 15874} 15875 15876static void tg3_probe_ncsi(struct tg3 *tp) 15877{ 15878 u32 apedata; 15879 15880 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 15881 if (apedata != APE_SEG_SIG_MAGIC) 15882 return; 15883 15884 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 15885 if (!(apedata & APE_FW_STATUS_READY)) 15886 return; 15887 15888 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 15889 tg3_flag_set(tp, APE_HAS_NCSI); 15890} 15891 15892static void tg3_read_dash_ver(struct tg3 *tp) 15893{ 15894 int vlen; 15895 u32 apedata; 15896 char *fwtype; 15897 15898 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 15899 15900 if (tg3_flag(tp, APE_HAS_NCSI)) 15901 fwtype = "NCSI"; 15902 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725) 15903 fwtype = "SMASH"; 15904 else 15905 fwtype = "DASH"; 15906 15907 vlen = strlen(tp->fw_ver); 15908 15909 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 15910 fwtype, 15911 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 15912 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 15913 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 15914 (apedata & APE_FW_VERSION_BLDMSK)); 15915} 15916 15917static void tg3_read_otp_ver(struct tg3 *tp) 15918{ 15919 u32 val, val2; 15920 15921 if (tg3_asic_rev(tp) != ASIC_REV_5762) 15922 return; 15923 15924 if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) && 15925 !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) && 15926 TG3_OTP_MAGIC0_VALID(val)) { 15927 u64 val64 = (u64) val << 32 | val2; 15928 u32 ver = 0; 15929 int i, vlen; 15930 15931 for (i = 0; i < 7; i++) { 15932 if ((val64 & 0xff) == 0) 15933 break; 15934 ver = val64 & 0xff; 15935 val64 >>= 8; 15936 } 15937 vlen = strlen(tp->fw_ver); 15938 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver); 15939 } 15940} 15941 15942static void tg3_read_fw_ver(struct tg3 *tp) 15943{ 15944 u32 val; 15945 bool vpd_vers = false; 15946 15947 if (tp->fw_ver[0] != 0) 15948 vpd_vers = true; 15949 15950 if (tg3_flag(tp, NO_NVRAM)) { 15951 strcat(tp->fw_ver, "sb"); 15952 tg3_read_otp_ver(tp); 15953 return; 15954 } 15955 15956 if (tg3_nvram_read(tp, 0, &val)) 15957 return; 15958 15959 if (val == TG3_EEPROM_MAGIC) 15960 tg3_read_bc_ver(tp); 15961 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 15962 tg3_read_sb_ver(tp, val); 15963 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 15964 tg3_read_hwsb_ver(tp); 15965 15966 if (tg3_flag(tp, ENABLE_ASF)) { 15967 if (tg3_flag(tp, ENABLE_APE)) { 15968 tg3_probe_ncsi(tp); 15969 if (!vpd_vers) 15970 tg3_read_dash_ver(tp); 15971 } else if (!vpd_vers) { 15972 tg3_read_mgmtfw_ver(tp); 15973 } 15974 } 15975 15976 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 15977} 15978 15979static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 15980{ 15981 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 15982 return TG3_RX_RET_MAX_SIZE_5717; 15983 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 15984 return TG3_RX_RET_MAX_SIZE_5700; 15985 else 15986 return TG3_RX_RET_MAX_SIZE_5705; 15987} 15988 15989static const struct pci_device_id tg3_write_reorder_chipsets[] = { 15990 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 15991 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 15992 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 15993 { }, 15994}; 15995 15996static struct pci_dev *tg3_find_peer(struct tg3 *tp) 15997{ 15998 struct pci_dev *peer; 15999 unsigned int func, devnr = tp->pdev->devfn & ~7; 16000 16001 for (func = 0; func < 8; func++) { 16002 peer = pci_get_slot(tp->pdev->bus, devnr | func); 16003 if (peer && peer != tp->pdev) 16004 break; 16005 pci_dev_put(peer); 16006 } 16007 /* 5704 can be configured in single-port mode, set peer to 16008 * tp->pdev in that case. 16009 */ 16010 if (!peer) { 16011 peer = tp->pdev; 16012 return peer; 16013 } 16014 16015 /* 16016 * We don't need to keep the refcount elevated; there's no way 16017 * to remove one half of this device without removing the other 16018 */ 16019 pci_dev_put(peer); 16020 16021 return peer; 16022} 16023 16024static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 16025{ 16026 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 16027 if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) { 16028 u32 reg; 16029 16030 /* All devices that use the alternate 16031 * ASIC REV location have a CPMU. 16032 */ 16033 tg3_flag_set(tp, CPMU_PRESENT); 16034 16035 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 16036 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 16037 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 16038 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 16039 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 16040 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 16041 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 16042 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 16043 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 16044 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 16045 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) 16046 reg = TG3PCI_GEN2_PRODID_ASICREV; 16047 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 16048 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 16049 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 16050 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 16051 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 16052 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 16053 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 16054 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 16055 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 16056 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 16057 reg = TG3PCI_GEN15_PRODID_ASICREV; 16058 else 16059 reg = TG3PCI_PRODID_ASICREV; 16060 16061 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 16062 } 16063 16064 /* Wrong chip ID in 5752 A0. This code can be removed later 16065 * as A0 is not in production. 16066 */ 16067 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW) 16068 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 16069 16070 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0) 16071 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0; 16072 16073 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16074 tg3_asic_rev(tp) == ASIC_REV_5719 || 16075 tg3_asic_rev(tp) == ASIC_REV_5720) 16076 tg3_flag_set(tp, 5717_PLUS); 16077 16078 if (tg3_asic_rev(tp) == ASIC_REV_57765 || 16079 tg3_asic_rev(tp) == ASIC_REV_57766) 16080 tg3_flag_set(tp, 57765_CLASS); 16081 16082 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || 16083 tg3_asic_rev(tp) == ASIC_REV_5762) 16084 tg3_flag_set(tp, 57765_PLUS); 16085 16086 /* Intentionally exclude ASIC_REV_5906 */ 16087 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16088 tg3_asic_rev(tp) == ASIC_REV_5787 || 16089 tg3_asic_rev(tp) == ASIC_REV_5784 || 16090 tg3_asic_rev(tp) == ASIC_REV_5761 || 16091 tg3_asic_rev(tp) == ASIC_REV_5785 || 16092 tg3_asic_rev(tp) == ASIC_REV_57780 || 16093 tg3_flag(tp, 57765_PLUS)) 16094 tg3_flag_set(tp, 5755_PLUS); 16095 16096 if (tg3_asic_rev(tp) == ASIC_REV_5780 || 16097 tg3_asic_rev(tp) == ASIC_REV_5714) 16098 tg3_flag_set(tp, 5780_CLASS); 16099 16100 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16101 tg3_asic_rev(tp) == ASIC_REV_5752 || 16102 tg3_asic_rev(tp) == ASIC_REV_5906 || 16103 tg3_flag(tp, 5755_PLUS) || 16104 tg3_flag(tp, 5780_CLASS)) 16105 tg3_flag_set(tp, 5750_PLUS); 16106 16107 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 16108 tg3_flag(tp, 5750_PLUS)) 16109 tg3_flag_set(tp, 5705_PLUS); 16110} 16111 16112static bool tg3_10_100_only_device(struct tg3 *tp, 16113 const struct pci_device_id *ent) 16114{ 16115 u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK; 16116 16117 if ((tg3_asic_rev(tp) == ASIC_REV_5703 && 16118 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 16119 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 16120 return true; 16121 16122 if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) { 16123 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 16124 if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100) 16125 return true; 16126 } else { 16127 return true; 16128 } 16129 } 16130 16131 return false; 16132} 16133 16134static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) 16135{ 16136 u32 misc_ctrl_reg; 16137 u32 pci_state_reg, grc_misc_cfg; 16138 u32 val; 16139 u16 pci_cmd; 16140 int err; 16141 16142 /* Force memory write invalidate off. If we leave it on, 16143 * then on 5700_BX chips we have to enable a workaround. 16144 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 16145 * to match the cacheline size. The Broadcom driver have this 16146 * workaround but turns MWI off all the times so never uses 16147 * it. This seems to suggest that the workaround is insufficient. 16148 */ 16149 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16150 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 16151 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16152 16153 /* Important! -- Make sure register accesses are byteswapped 16154 * correctly. Also, for those chips that require it, make 16155 * sure that indirect register accesses are enabled before 16156 * the first operation. 16157 */ 16158 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16159 &misc_ctrl_reg); 16160 tp->misc_host_ctrl |= (misc_ctrl_reg & 16161 MISC_HOST_CTRL_CHIPREV); 16162 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16163 tp->misc_host_ctrl); 16164 16165 tg3_detect_asic_rev(tp, misc_ctrl_reg); 16166 16167 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 16168 * we need to disable memory and use config. cycles 16169 * only to access all registers. The 5702/03 chips 16170 * can mistakenly decode the special cycles from the 16171 * ICH chipsets as memory write cycles, causing corruption 16172 * of register and memory space. Only certain ICH bridges 16173 * will drive special cycles with non-zero data during the 16174 * address phase which can fall within the 5703's address 16175 * range. This is not an ICH bug as the PCI spec allows 16176 * non-zero address during special cycles. However, only 16177 * these ICH bridges are known to drive non-zero addresses 16178 * during special cycles. 16179 * 16180 * Since special cycles do not cross PCI bridges, we only 16181 * enable this workaround if the 5703 is on the secondary 16182 * bus of these ICH bridges. 16183 */ 16184 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) || 16185 (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) { 16186 static struct tg3_dev_id { 16187 u32 vendor; 16188 u32 device; 16189 u32 rev; 16190 } ich_chipsets[] = { 16191 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 16192 PCI_ANY_ID }, 16193 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 16194 PCI_ANY_ID }, 16195 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 16196 0xa }, 16197 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 16198 PCI_ANY_ID }, 16199 { }, 16200 }; 16201 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 16202 struct pci_dev *bridge = NULL; 16203 16204 while (pci_id->vendor != 0) { 16205 bridge = pci_get_device(pci_id->vendor, pci_id->device, 16206 bridge); 16207 if (!bridge) { 16208 pci_id++; 16209 continue; 16210 } 16211 if (pci_id->rev != PCI_ANY_ID) { 16212 if (bridge->revision > pci_id->rev) 16213 continue; 16214 } 16215 if (bridge->subordinate && 16216 (bridge->subordinate->number == 16217 tp->pdev->bus->number)) { 16218 tg3_flag_set(tp, ICH_WORKAROUND); 16219 pci_dev_put(bridge); 16220 break; 16221 } 16222 } 16223 } 16224 16225 if (tg3_asic_rev(tp) == ASIC_REV_5701) { 16226 static struct tg3_dev_id { 16227 u32 vendor; 16228 u32 device; 16229 } bridge_chipsets[] = { 16230 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 16231 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 16232 { }, 16233 }; 16234 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 16235 struct pci_dev *bridge = NULL; 16236 16237 while (pci_id->vendor != 0) { 16238 bridge = pci_get_device(pci_id->vendor, 16239 pci_id->device, 16240 bridge); 16241 if (!bridge) { 16242 pci_id++; 16243 continue; 16244 } 16245 if (bridge->subordinate && 16246 (bridge->subordinate->number <= 16247 tp->pdev->bus->number) && 16248 (bridge->subordinate->busn_res.end >= 16249 tp->pdev->bus->number)) { 16250 tg3_flag_set(tp, 5701_DMA_BUG); 16251 pci_dev_put(bridge); 16252 break; 16253 } 16254 } 16255 } 16256 16257 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 16258 * DMA addresses > 40-bit. This bridge may have other additional 16259 * 57xx devices behind it in some 4-port NIC designs for example. 16260 * Any tg3 device found behind the bridge will also need the 40-bit 16261 * DMA workaround. 16262 */ 16263 if (tg3_flag(tp, 5780_CLASS)) { 16264 tg3_flag_set(tp, 40BIT_DMA_BUG); 16265 tp->msi_cap = tp->pdev->msi_cap; 16266 } else { 16267 struct pci_dev *bridge = NULL; 16268 16269 do { 16270 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 16271 PCI_DEVICE_ID_SERVERWORKS_EPB, 16272 bridge); 16273 if (bridge && bridge->subordinate && 16274 (bridge->subordinate->number <= 16275 tp->pdev->bus->number) && 16276 (bridge->subordinate->busn_res.end >= 16277 tp->pdev->bus->number)) { 16278 tg3_flag_set(tp, 40BIT_DMA_BUG); 16279 pci_dev_put(bridge); 16280 break; 16281 } 16282 } while (bridge); 16283 } 16284 16285 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16286 tg3_asic_rev(tp) == ASIC_REV_5714) 16287 tp->pdev_peer = tg3_find_peer(tp); 16288 16289 /* Determine TSO capabilities */ 16290 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0) 16291 ; /* Do nothing. HW bug. */ 16292 else if (tg3_flag(tp, 57765_PLUS)) 16293 tg3_flag_set(tp, HW_TSO_3); 16294 else if (tg3_flag(tp, 5755_PLUS) || 16295 tg3_asic_rev(tp) == ASIC_REV_5906) 16296 tg3_flag_set(tp, HW_TSO_2); 16297 else if (tg3_flag(tp, 5750_PLUS)) { 16298 tg3_flag_set(tp, HW_TSO_1); 16299 tg3_flag_set(tp, TSO_BUG); 16300 if (tg3_asic_rev(tp) == ASIC_REV_5750 && 16301 tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2) 16302 tg3_flag_clear(tp, TSO_BUG); 16303 } else if (tg3_asic_rev(tp) != ASIC_REV_5700 && 16304 tg3_asic_rev(tp) != ASIC_REV_5701 && 16305 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 16306 tg3_flag_set(tp, FW_TSO); 16307 tg3_flag_set(tp, TSO_BUG); 16308 if (tg3_asic_rev(tp) == ASIC_REV_5705) 16309 tp->fw_needed = FIRMWARE_TG3TSO5; 16310 else 16311 tp->fw_needed = FIRMWARE_TG3TSO; 16312 } 16313 16314 /* Selectively allow TSO based on operating conditions */ 16315 if (tg3_flag(tp, HW_TSO_1) || 16316 tg3_flag(tp, HW_TSO_2) || 16317 tg3_flag(tp, HW_TSO_3) || 16318 tg3_flag(tp, FW_TSO)) { 16319 /* For firmware TSO, assume ASF is disabled. 16320 * We'll disable TSO later if we discover ASF 16321 * is enabled in tg3_get_eeprom_hw_cfg(). 16322 */ 16323 tg3_flag_set(tp, TSO_CAPABLE); 16324 } else { 16325 tg3_flag_clear(tp, TSO_CAPABLE); 16326 tg3_flag_clear(tp, TSO_BUG); 16327 tp->fw_needed = NULL; 16328 } 16329 16330 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) 16331 tp->fw_needed = FIRMWARE_TG3; 16332 16333 if (tg3_asic_rev(tp) == ASIC_REV_57766) 16334 tp->fw_needed = FIRMWARE_TG357766; 16335 16336 tp->irq_max = 1; 16337 16338 if (tg3_flag(tp, 5750_PLUS)) { 16339 tg3_flag_set(tp, SUPPORT_MSI); 16340 if (tg3_chip_rev(tp) == CHIPREV_5750_AX || 16341 tg3_chip_rev(tp) == CHIPREV_5750_BX || 16342 (tg3_asic_rev(tp) == ASIC_REV_5714 && 16343 tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 && 16344 tp->pdev_peer == tp->pdev)) 16345 tg3_flag_clear(tp, SUPPORT_MSI); 16346 16347 if (tg3_flag(tp, 5755_PLUS) || 16348 tg3_asic_rev(tp) == ASIC_REV_5906) { 16349 tg3_flag_set(tp, 1SHOT_MSI); 16350 } 16351 16352 if (tg3_flag(tp, 57765_PLUS)) { 16353 tg3_flag_set(tp, SUPPORT_MSIX); 16354 tp->irq_max = TG3_IRQ_MAX_VECS; 16355 } 16356 } 16357 16358 tp->txq_max = 1; 16359 tp->rxq_max = 1; 16360 if (tp->irq_max > 1) { 16361 tp->rxq_max = TG3_RSS_MAX_NUM_QS; 16362 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS); 16363 16364 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 16365 tg3_asic_rev(tp) == ASIC_REV_5720) 16366 tp->txq_max = tp->irq_max - 1; 16367 } 16368 16369 if (tg3_flag(tp, 5755_PLUS) || 16370 tg3_asic_rev(tp) == ASIC_REV_5906) 16371 tg3_flag_set(tp, SHORT_DMA_BUG); 16372 16373 if (tg3_asic_rev(tp) == ASIC_REV_5719) 16374 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 16375 16376 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16377 tg3_asic_rev(tp) == ASIC_REV_5719 || 16378 tg3_asic_rev(tp) == ASIC_REV_5720 || 16379 tg3_asic_rev(tp) == ASIC_REV_5762) 16380 tg3_flag_set(tp, LRG_PROD_RING_CAP); 16381 16382 if (tg3_flag(tp, 57765_PLUS) && 16383 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0) 16384 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 16385 16386 if (!tg3_flag(tp, 5705_PLUS) || 16387 tg3_flag(tp, 5780_CLASS) || 16388 tg3_flag(tp, USE_JUMBO_BDFLAG)) 16389 tg3_flag_set(tp, JUMBO_CAPABLE); 16390 16391 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16392 &pci_state_reg); 16393 16394 if (pci_is_pcie(tp->pdev)) { 16395 u16 lnkctl; 16396 16397 tg3_flag_set(tp, PCI_EXPRESS); 16398 16399 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl); 16400 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 16401 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16402 tg3_flag_clear(tp, HW_TSO_2); 16403 tg3_flag_clear(tp, TSO_CAPABLE); 16404 } 16405 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 16406 tg3_asic_rev(tp) == ASIC_REV_5761 || 16407 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 || 16408 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1) 16409 tg3_flag_set(tp, CLKREQ_BUG); 16410 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) { 16411 tg3_flag_set(tp, L1PLLPD_EN); 16412 } 16413 } else if (tg3_asic_rev(tp) == ASIC_REV_5785) { 16414 /* BCM5785 devices are effectively PCIe devices, and should 16415 * follow PCIe codepaths, but do not have a PCIe capabilities 16416 * section. 16417 */ 16418 tg3_flag_set(tp, PCI_EXPRESS); 16419 } else if (!tg3_flag(tp, 5705_PLUS) || 16420 tg3_flag(tp, 5780_CLASS)) { 16421 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 16422 if (!tp->pcix_cap) { 16423 dev_err(&tp->pdev->dev, 16424 "Cannot find PCI-X capability, aborting\n"); 16425 return -EIO; 16426 } 16427 16428 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 16429 tg3_flag_set(tp, PCIX_MODE); 16430 } 16431 16432 /* If we have an AMD 762 or VIA K8T800 chipset, write 16433 * reordering to the mailbox registers done by the host 16434 * controller can cause major troubles. We read back from 16435 * every mailbox register write to force the writes to be 16436 * posted to the chip in order. 16437 */ 16438 if (pci_dev_present(tg3_write_reorder_chipsets) && 16439 !tg3_flag(tp, PCI_EXPRESS)) 16440 tg3_flag_set(tp, MBOX_WRITE_REORDER); 16441 16442 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 16443 &tp->pci_cacheline_sz); 16444 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16445 &tp->pci_lat_timer); 16446 if (tg3_asic_rev(tp) == ASIC_REV_5703 && 16447 tp->pci_lat_timer < 64) { 16448 tp->pci_lat_timer = 64; 16449 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16450 tp->pci_lat_timer); 16451 } 16452 16453 /* Important! -- It is critical that the PCI-X hw workaround 16454 * situation is decided before the first MMIO register access. 16455 */ 16456 if (tg3_chip_rev(tp) == CHIPREV_5700_BX) { 16457 /* 5700 BX chips need to have their TX producer index 16458 * mailboxes written twice to workaround a bug. 16459 */ 16460 tg3_flag_set(tp, TXD_MBOX_HWBUG); 16461 16462 /* If we are in PCI-X mode, enable register write workaround. 16463 * 16464 * The workaround is to use indirect register accesses 16465 * for all chip writes not to mailbox registers. 16466 */ 16467 if (tg3_flag(tp, PCIX_MODE)) { 16468 u32 pm_reg; 16469 16470 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16471 16472 /* The chip can have it's power management PCI config 16473 * space registers clobbered due to this bug. 16474 * So explicitly force the chip into D0 here. 16475 */ 16476 pci_read_config_dword(tp->pdev, 16477 tp->pdev->pm_cap + PCI_PM_CTRL, 16478 &pm_reg); 16479 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 16480 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 16481 pci_write_config_dword(tp->pdev, 16482 tp->pdev->pm_cap + PCI_PM_CTRL, 16483 pm_reg); 16484 16485 /* Also, force SERR#/PERR# in PCI command. */ 16486 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16487 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 16488 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16489 } 16490 } 16491 16492 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 16493 tg3_flag_set(tp, PCI_HIGH_SPEED); 16494 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 16495 tg3_flag_set(tp, PCI_32BIT); 16496 16497 /* Chip-specific fixup from Broadcom driver */ 16498 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) && 16499 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 16500 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 16501 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 16502 } 16503 16504 /* Default fast path register access methods */ 16505 tp->read32 = tg3_read32; 16506 tp->write32 = tg3_write32; 16507 tp->read32_mbox = tg3_read32; 16508 tp->write32_mbox = tg3_write32; 16509 tp->write32_tx_mbox = tg3_write32; 16510 tp->write32_rx_mbox = tg3_write32; 16511 16512 /* Various workaround register access methods */ 16513 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 16514 tp->write32 = tg3_write_indirect_reg32; 16515 else if (tg3_asic_rev(tp) == ASIC_REV_5701 || 16516 (tg3_flag(tp, PCI_EXPRESS) && 16517 tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) { 16518 /* 16519 * Back to back register writes can cause problems on these 16520 * chips, the workaround is to read back all reg writes 16521 * except those to mailbox regs. 16522 * 16523 * See tg3_write_indirect_reg32(). 16524 */ 16525 tp->write32 = tg3_write_flush_reg32; 16526 } 16527 16528 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 16529 tp->write32_tx_mbox = tg3_write32_tx_mbox; 16530 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 16531 tp->write32_rx_mbox = tg3_write_flush_reg32; 16532 } 16533 16534 if (tg3_flag(tp, ICH_WORKAROUND)) { 16535 tp->read32 = tg3_read_indirect_reg32; 16536 tp->write32 = tg3_write_indirect_reg32; 16537 tp->read32_mbox = tg3_read_indirect_mbox; 16538 tp->write32_mbox = tg3_write_indirect_mbox; 16539 tp->write32_tx_mbox = tg3_write_indirect_mbox; 16540 tp->write32_rx_mbox = tg3_write_indirect_mbox; 16541 16542 iounmap(tp->regs); 16543 tp->regs = NULL; 16544 16545 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16546 pci_cmd &= ~PCI_COMMAND_MEMORY; 16547 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16548 } 16549 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16550 tp->read32_mbox = tg3_read32_mbox_5906; 16551 tp->write32_mbox = tg3_write32_mbox_5906; 16552 tp->write32_tx_mbox = tg3_write32_mbox_5906; 16553 tp->write32_rx_mbox = tg3_write32_mbox_5906; 16554 } 16555 16556 if (tp->write32 == tg3_write_indirect_reg32 || 16557 (tg3_flag(tp, PCIX_MODE) && 16558 (tg3_asic_rev(tp) == ASIC_REV_5700 || 16559 tg3_asic_rev(tp) == ASIC_REV_5701))) 16560 tg3_flag_set(tp, SRAM_USE_CONFIG); 16561 16562 /* The memory arbiter has to be enabled in order for SRAM accesses 16563 * to succeed. Normally on powerup the tg3 chip firmware will make 16564 * sure it is enabled, but other entities such as system netboot 16565 * code might disable it. 16566 */ 16567 val = tr32(MEMARB_MODE); 16568 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 16569 16570 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 16571 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16572 tg3_flag(tp, 5780_CLASS)) { 16573 if (tg3_flag(tp, PCIX_MODE)) { 16574 pci_read_config_dword(tp->pdev, 16575 tp->pcix_cap + PCI_X_STATUS, 16576 &val); 16577 tp->pci_fn = val & 0x7; 16578 } 16579 } else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16580 tg3_asic_rev(tp) == ASIC_REV_5719 || 16581 tg3_asic_rev(tp) == ASIC_REV_5720) { 16582 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 16583 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG) 16584 val = tr32(TG3_CPMU_STATUS); 16585 16586 if (tg3_asic_rev(tp) == ASIC_REV_5717) 16587 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0; 16588 else 16589 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 16590 TG3_CPMU_STATUS_FSHFT_5719; 16591 } 16592 16593 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 16594 tp->write32_tx_mbox = tg3_write_flush_reg32; 16595 tp->write32_rx_mbox = tg3_write_flush_reg32; 16596 } 16597 16598 /* Get eeprom hw config before calling tg3_set_power_state(). 16599 * In particular, the TG3_FLAG_IS_NIC flag must be 16600 * determined before calling tg3_set_power_state() so that 16601 * we know whether or not to switch out of Vaux power. 16602 * When the flag is set, it means that GPIO1 is used for eeprom 16603 * write protect and also implies that it is a LOM where GPIOs 16604 * are not used to switch power. 16605 */ 16606 tg3_get_eeprom_hw_cfg(tp); 16607 16608 if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) { 16609 tg3_flag_clear(tp, TSO_CAPABLE); 16610 tg3_flag_clear(tp, TSO_BUG); 16611 tp->fw_needed = NULL; 16612 } 16613 16614 if (tg3_flag(tp, ENABLE_APE)) { 16615 /* Allow reads and writes to the 16616 * APE register and memory space. 16617 */ 16618 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 16619 PCISTATE_ALLOW_APE_SHMEM_WR | 16620 PCISTATE_ALLOW_APE_PSPACE_WR; 16621 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 16622 pci_state_reg); 16623 16624 tg3_ape_lock_init(tp); 16625 tp->ape_hb_interval = 16626 msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC); 16627 } 16628 16629 /* Set up tp->grc_local_ctrl before calling 16630 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 16631 * will bring 5700's external PHY out of reset. 16632 * It is also used as eeprom write protect on LOMs. 16633 */ 16634 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 16635 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16636 tg3_flag(tp, EEPROM_WRITE_PROT)) 16637 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 16638 GRC_LCLCTRL_GPIO_OUTPUT1); 16639 /* Unused GPIO3 must be driven as output on 5752 because there 16640 * are no pull-up resistors on unused GPIO pins. 16641 */ 16642 else if (tg3_asic_rev(tp) == ASIC_REV_5752) 16643 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 16644 16645 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16646 tg3_asic_rev(tp) == ASIC_REV_57780 || 16647 tg3_flag(tp, 57765_CLASS)) 16648 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16649 16650 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 16651 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 16652 /* Turn off the debug UART. */ 16653 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16654 if (tg3_flag(tp, IS_NIC)) 16655 /* Keep VMain power. */ 16656 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 16657 GRC_LCLCTRL_GPIO_OUTPUT0; 16658 } 16659 16660 if (tg3_asic_rev(tp) == ASIC_REV_5762) 16661 tp->grc_local_ctrl |= 16662 tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL; 16663 16664 /* Switch out of Vaux if it is a NIC */ 16665 tg3_pwrsrc_switch_to_vmain(tp); 16666 16667 /* Derive initial jumbo mode from MTU assigned in 16668 * ether_setup() via the alloc_etherdev() call 16669 */ 16670 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 16671 tg3_flag_set(tp, JUMBO_RING_ENABLE); 16672 16673 /* Determine WakeOnLan speed to use. */ 16674 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16675 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16676 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16677 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) { 16678 tg3_flag_clear(tp, WOL_SPEED_100MB); 16679 } else { 16680 tg3_flag_set(tp, WOL_SPEED_100MB); 16681 } 16682 16683 if (tg3_asic_rev(tp) == ASIC_REV_5906) 16684 tp->phy_flags |= TG3_PHYFLG_IS_FET; 16685 16686 /* A few boards don't want Ethernet@WireSpeed phy feature */ 16687 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16688 (tg3_asic_rev(tp) == ASIC_REV_5705 && 16689 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) && 16690 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) || 16691 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 16692 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 16693 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 16694 16695 if (tg3_chip_rev(tp) == CHIPREV_5703_AX || 16696 tg3_chip_rev(tp) == CHIPREV_5704_AX) 16697 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 16698 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) 16699 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 16700 16701 if (tg3_flag(tp, 5705_PLUS) && 16702 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 16703 tg3_asic_rev(tp) != ASIC_REV_5785 && 16704 tg3_asic_rev(tp) != ASIC_REV_57780 && 16705 !tg3_flag(tp, 57765_PLUS)) { 16706 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16707 tg3_asic_rev(tp) == ASIC_REV_5787 || 16708 tg3_asic_rev(tp) == ASIC_REV_5784 || 16709 tg3_asic_rev(tp) == ASIC_REV_5761) { 16710 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 16711 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 16712 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 16713 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 16714 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 16715 } else 16716 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 16717 } 16718 16719 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 16720 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 16721 tp->phy_otp = tg3_read_otp_phycfg(tp); 16722 if (tp->phy_otp == 0) 16723 tp->phy_otp = TG3_OTP_DEFAULT; 16724 } 16725 16726 if (tg3_flag(tp, CPMU_PRESENT)) 16727 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 16728 else 16729 tp->mi_mode = MAC_MI_MODE_BASE; 16730 16731 tp->coalesce_mode = 0; 16732 if (tg3_chip_rev(tp) != CHIPREV_5700_AX && 16733 tg3_chip_rev(tp) != CHIPREV_5700_BX) 16734 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 16735 16736 /* Set these bits to enable statistics workaround. */ 16737 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16738 tg3_asic_rev(tp) == ASIC_REV_5762 || 16739 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 16740 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) { 16741 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 16742 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 16743 } 16744 16745 if (tg3_asic_rev(tp) == ASIC_REV_5785 || 16746 tg3_asic_rev(tp) == ASIC_REV_57780) 16747 tg3_flag_set(tp, USE_PHYLIB); 16748 16749 err = tg3_mdio_init(tp); 16750 if (err) 16751 return err; 16752 16753 /* Initialize data/descriptor byte/word swapping. */ 16754 val = tr32(GRC_MODE); 16755 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 16756 tg3_asic_rev(tp) == ASIC_REV_5762) 16757 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 16758 GRC_MODE_WORD_SWAP_B2HRX_DATA | 16759 GRC_MODE_B2HRX_ENABLE | 16760 GRC_MODE_HTX2B_ENABLE | 16761 GRC_MODE_HOST_STACKUP); 16762 else 16763 val &= GRC_MODE_HOST_STACKUP; 16764 16765 tw32(GRC_MODE, val | tp->grc_mode); 16766 16767 tg3_switch_clocks(tp); 16768 16769 /* Clear this out for sanity. */ 16770 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 16771 16772 /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */ 16773 tw32(TG3PCI_REG_BASE_ADDR, 0); 16774 16775 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16776 &pci_state_reg); 16777 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 16778 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 16779 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16780 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16781 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 || 16782 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) { 16783 void __iomem *sram_base; 16784 16785 /* Write some dummy words into the SRAM status block 16786 * area, see if it reads back correctly. If the return 16787 * value is bad, force enable the PCIX workaround. 16788 */ 16789 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 16790 16791 writel(0x00000000, sram_base); 16792 writel(0x00000000, sram_base + 4); 16793 writel(0xffffffff, sram_base + 4); 16794 if (readl(sram_base) != 0x00000000) 16795 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16796 } 16797 } 16798 16799 udelay(50); 16800 tg3_nvram_init(tp); 16801 16802 /* If the device has an NVRAM, no need to load patch firmware */ 16803 if (tg3_asic_rev(tp) == ASIC_REV_57766 && 16804 !tg3_flag(tp, NO_NVRAM)) 16805 tp->fw_needed = NULL; 16806 16807 grc_misc_cfg = tr32(GRC_MISC_CFG); 16808 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 16809 16810 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 16811 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 16812 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 16813 tg3_flag_set(tp, IS_5788); 16814 16815 if (!tg3_flag(tp, IS_5788) && 16816 tg3_asic_rev(tp) != ASIC_REV_5700) 16817 tg3_flag_set(tp, TAGGED_STATUS); 16818 if (tg3_flag(tp, TAGGED_STATUS)) { 16819 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 16820 HOSTCC_MODE_CLRTICK_TXBD); 16821 16822 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 16823 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16824 tp->misc_host_ctrl); 16825 } 16826 16827 /* Preserve the APE MAC_MODE bits */ 16828 if (tg3_flag(tp, ENABLE_APE)) 16829 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 16830 else 16831 tp->mac_mode = 0; 16832 16833 if (tg3_10_100_only_device(tp, ent)) 16834 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 16835 16836 err = tg3_phy_probe(tp); 16837 if (err) { 16838 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 16839 /* ... but do not return immediately ... */ 16840 tg3_mdio_fini(tp); 16841 } 16842 16843 tg3_read_vpd(tp); 16844 tg3_read_fw_ver(tp); 16845 16846 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 16847 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16848 } else { 16849 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16850 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16851 else 16852 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16853 } 16854 16855 /* 5700 {AX,BX} chips have a broken status block link 16856 * change bit implementation, so we must use the 16857 * status register in those cases. 16858 */ 16859 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16860 tg3_flag_set(tp, USE_LINKCHG_REG); 16861 else 16862 tg3_flag_clear(tp, USE_LINKCHG_REG); 16863 16864 /* The led_ctrl is set during tg3_phy_probe, here we might 16865 * have to force the link status polling mechanism based 16866 * upon subsystem IDs. 16867 */ 16868 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 16869 tg3_asic_rev(tp) == ASIC_REV_5701 && 16870 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 16871 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16872 tg3_flag_set(tp, USE_LINKCHG_REG); 16873 } 16874 16875 /* For all SERDES we poll the MAC status register. */ 16876 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 16877 tg3_flag_set(tp, POLL_SERDES); 16878 else 16879 tg3_flag_clear(tp, POLL_SERDES); 16880 16881 if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF)) 16882 tg3_flag_set(tp, POLL_CPMU_LINK); 16883 16884 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 16885 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 16886 if (tg3_asic_rev(tp) == ASIC_REV_5701 && 16887 tg3_flag(tp, PCIX_MODE)) { 16888 tp->rx_offset = NET_SKB_PAD; 16889#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 16890 tp->rx_copy_thresh = ~(u16)0; 16891#endif 16892 } 16893 16894 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 16895 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 16896 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 16897 16898 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 16899 16900 /* Increment the rx prod index on the rx std ring by at most 16901 * 8 for these chips to workaround hw errata. 16902 */ 16903 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16904 tg3_asic_rev(tp) == ASIC_REV_5752 || 16905 tg3_asic_rev(tp) == ASIC_REV_5755) 16906 tp->rx_std_max_post = 8; 16907 16908 if (tg3_flag(tp, ASPM_WORKAROUND)) 16909 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 16910 PCIE_PWR_MGMT_L1_THRESH_MSK; 16911 16912 return err; 16913} 16914 16915static int tg3_get_device_address(struct tg3 *tp, u8 *addr) 16916{ 16917 u32 hi, lo, mac_offset; 16918 int addr_ok = 0; 16919 int err; 16920 16921 if (!eth_platform_get_mac_address(&tp->pdev->dev, addr)) 16922 return 0; 16923 16924 if (tg3_flag(tp, IS_SSB_CORE)) { 16925 err = ssb_gige_get_macaddr(tp->pdev, addr); 16926 if (!err && is_valid_ether_addr(addr)) 16927 return 0; 16928 } 16929 16930 mac_offset = 0x7c; 16931 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16932 tg3_flag(tp, 5780_CLASS)) { 16933 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 16934 mac_offset = 0xcc; 16935 if (tg3_nvram_lock(tp)) 16936 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 16937 else 16938 tg3_nvram_unlock(tp); 16939 } else if (tg3_flag(tp, 5717_PLUS)) { 16940 if (tp->pci_fn & 1) 16941 mac_offset = 0xcc; 16942 if (tp->pci_fn > 1) 16943 mac_offset += 0x18c; 16944 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) 16945 mac_offset = 0x10; 16946 16947 /* First try to get it from MAC address mailbox. */ 16948 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 16949 if ((hi >> 16) == 0x484b) { 16950 addr[0] = (hi >> 8) & 0xff; 16951 addr[1] = (hi >> 0) & 0xff; 16952 16953 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 16954 addr[2] = (lo >> 24) & 0xff; 16955 addr[3] = (lo >> 16) & 0xff; 16956 addr[4] = (lo >> 8) & 0xff; 16957 addr[5] = (lo >> 0) & 0xff; 16958 16959 /* Some old bootcode may report a 0 MAC address in SRAM */ 16960 addr_ok = is_valid_ether_addr(addr); 16961 } 16962 if (!addr_ok) { 16963 /* Next, try NVRAM. */ 16964 if (!tg3_flag(tp, NO_NVRAM) && 16965 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 16966 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 16967 memcpy(&addr[0], ((char *)&hi) + 2, 2); 16968 memcpy(&addr[2], (char *)&lo, sizeof(lo)); 16969 } 16970 /* Finally just fetch it out of the MAC control regs. */ 16971 else { 16972 hi = tr32(MAC_ADDR_0_HIGH); 16973 lo = tr32(MAC_ADDR_0_LOW); 16974 16975 addr[5] = lo & 0xff; 16976 addr[4] = (lo >> 8) & 0xff; 16977 addr[3] = (lo >> 16) & 0xff; 16978 addr[2] = (lo >> 24) & 0xff; 16979 addr[1] = hi & 0xff; 16980 addr[0] = (hi >> 8) & 0xff; 16981 } 16982 } 16983 16984 if (!is_valid_ether_addr(addr)) 16985 return -EINVAL; 16986 return 0; 16987} 16988 16989#define BOUNDARY_SINGLE_CACHELINE 1 16990#define BOUNDARY_MULTI_CACHELINE 2 16991 16992static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 16993{ 16994 int cacheline_size; 16995 u8 byte; 16996 int goal; 16997 16998 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 16999 if (byte == 0) 17000 cacheline_size = 1024; 17001 else 17002 cacheline_size = (int) byte * 4; 17003 17004 /* On 5703 and later chips, the boundary bits have no 17005 * effect. 17006 */ 17007 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17008 tg3_asic_rev(tp) != ASIC_REV_5701 && 17009 !tg3_flag(tp, PCI_EXPRESS)) 17010 goto out; 17011 17012#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 17013 goal = BOUNDARY_MULTI_CACHELINE; 17014#else 17015#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 17016 goal = BOUNDARY_SINGLE_CACHELINE; 17017#else 17018 goal = 0; 17019#endif 17020#endif 17021 17022 if (tg3_flag(tp, 57765_PLUS)) { 17023 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 17024 goto out; 17025 } 17026 17027 if (!goal) 17028 goto out; 17029 17030 /* PCI controllers on most RISC systems tend to disconnect 17031 * when a device tries to burst across a cache-line boundary. 17032 * Therefore, letting tg3 do so just wastes PCI bandwidth. 17033 * 17034 * Unfortunately, for PCI-E there are only limited 17035 * write-side controls for this, and thus for reads 17036 * we will still get the disconnects. We'll also waste 17037 * these PCI cycles for both read and write for chips 17038 * other than 5700 and 5701 which do not implement the 17039 * boundary bits. 17040 */ 17041 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 17042 switch (cacheline_size) { 17043 case 16: 17044 case 32: 17045 case 64: 17046 case 128: 17047 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17048 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 17049 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 17050 } else { 17051 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17052 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17053 } 17054 break; 17055 17056 case 256: 17057 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 17058 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 17059 break; 17060 17061 default: 17062 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17063 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17064 break; 17065 } 17066 } else if (tg3_flag(tp, PCI_EXPRESS)) { 17067 switch (cacheline_size) { 17068 case 16: 17069 case 32: 17070 case 64: 17071 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17072 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17073 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 17074 break; 17075 } 17076 fallthrough; 17077 case 128: 17078 default: 17079 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17080 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 17081 break; 17082 } 17083 } else { 17084 switch (cacheline_size) { 17085 case 16: 17086 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17087 val |= (DMA_RWCTRL_READ_BNDRY_16 | 17088 DMA_RWCTRL_WRITE_BNDRY_16); 17089 break; 17090 } 17091 fallthrough; 17092 case 32: 17093 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17094 val |= (DMA_RWCTRL_READ_BNDRY_32 | 17095 DMA_RWCTRL_WRITE_BNDRY_32); 17096 break; 17097 } 17098 fallthrough; 17099 case 64: 17100 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17101 val |= (DMA_RWCTRL_READ_BNDRY_64 | 17102 DMA_RWCTRL_WRITE_BNDRY_64); 17103 break; 17104 } 17105 fallthrough; 17106 case 128: 17107 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17108 val |= (DMA_RWCTRL_READ_BNDRY_128 | 17109 DMA_RWCTRL_WRITE_BNDRY_128); 17110 break; 17111 } 17112 fallthrough; 17113 case 256: 17114 val |= (DMA_RWCTRL_READ_BNDRY_256 | 17115 DMA_RWCTRL_WRITE_BNDRY_256); 17116 break; 17117 case 512: 17118 val |= (DMA_RWCTRL_READ_BNDRY_512 | 17119 DMA_RWCTRL_WRITE_BNDRY_512); 17120 break; 17121 case 1024: 17122 default: 17123 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 17124 DMA_RWCTRL_WRITE_BNDRY_1024); 17125 break; 17126 } 17127 } 17128 17129out: 17130 return val; 17131} 17132 17133static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, 17134 int size, bool to_device) 17135{ 17136 struct tg3_internal_buffer_desc test_desc; 17137 u32 sram_dma_descs; 17138 int i, ret; 17139 17140 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 17141 17142 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 17143 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 17144 tw32(RDMAC_STATUS, 0); 17145 tw32(WDMAC_STATUS, 0); 17146 17147 tw32(BUFMGR_MODE, 0); 17148 tw32(FTQ_RESET, 0); 17149 17150 test_desc.addr_hi = ((u64) buf_dma) >> 32; 17151 test_desc.addr_lo = buf_dma & 0xffffffff; 17152 test_desc.nic_mbuf = 0x00002100; 17153 test_desc.len = size; 17154 17155 /* 17156 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 17157 * the *second* time the tg3 driver was getting loaded after an 17158 * initial scan. 17159 * 17160 * Broadcom tells me: 17161 * ...the DMA engine is connected to the GRC block and a DMA 17162 * reset may affect the GRC block in some unpredictable way... 17163 * The behavior of resets to individual blocks has not been tested. 17164 * 17165 * Broadcom noted the GRC reset will also reset all sub-components. 17166 */ 17167 if (to_device) { 17168 test_desc.cqid_sqid = (13 << 8) | 2; 17169 17170 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 17171 udelay(40); 17172 } else { 17173 test_desc.cqid_sqid = (16 << 8) | 7; 17174 17175 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 17176 udelay(40); 17177 } 17178 test_desc.flags = 0x00000005; 17179 17180 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 17181 u32 val; 17182 17183 val = *(((u32 *)&test_desc) + i); 17184 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 17185 sram_dma_descs + (i * sizeof(u32))); 17186 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 17187 } 17188 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 17189 17190 if (to_device) 17191 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 17192 else 17193 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 17194 17195 ret = -ENODEV; 17196 for (i = 0; i < 40; i++) { 17197 u32 val; 17198 17199 if (to_device) 17200 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 17201 else 17202 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 17203 if ((val & 0xffff) == sram_dma_descs) { 17204 ret = 0; 17205 break; 17206 } 17207 17208 udelay(100); 17209 } 17210 17211 return ret; 17212} 17213 17214#define TEST_BUFFER_SIZE 0x2000 17215 17216static const struct pci_device_id tg3_dma_wait_state_chipsets[] = { 17217 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 17218 { }, 17219}; 17220 17221static int tg3_test_dma(struct tg3 *tp) 17222{ 17223 dma_addr_t buf_dma; 17224 u32 *buf, saved_dma_rwctrl; 17225 int ret = 0; 17226 17227 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 17228 &buf_dma, GFP_KERNEL); 17229 if (!buf) { 17230 ret = -ENOMEM; 17231 goto out_nofree; 17232 } 17233 17234 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 17235 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 17236 17237 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 17238 17239 if (tg3_flag(tp, 57765_PLUS)) 17240 goto out; 17241 17242 if (tg3_flag(tp, PCI_EXPRESS)) { 17243 /* DMA read watermark not used on PCIE */ 17244 tp->dma_rwctrl |= 0x00180000; 17245 } else if (!tg3_flag(tp, PCIX_MODE)) { 17246 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 17247 tg3_asic_rev(tp) == ASIC_REV_5750) 17248 tp->dma_rwctrl |= 0x003f0000; 17249 else 17250 tp->dma_rwctrl |= 0x003f000f; 17251 } else { 17252 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17253 tg3_asic_rev(tp) == ASIC_REV_5704) { 17254 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 17255 u32 read_water = 0x7; 17256 17257 /* If the 5704 is behind the EPB bridge, we can 17258 * do the less restrictive ONE_DMA workaround for 17259 * better performance. 17260 */ 17261 if (tg3_flag(tp, 40BIT_DMA_BUG) && 17262 tg3_asic_rev(tp) == ASIC_REV_5704) 17263 tp->dma_rwctrl |= 0x8000; 17264 else if (ccval == 0x6 || ccval == 0x7) 17265 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17266 17267 if (tg3_asic_rev(tp) == ASIC_REV_5703) 17268 read_water = 4; 17269 /* Set bit 23 to enable PCIX hw bug fix */ 17270 tp->dma_rwctrl |= 17271 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 17272 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 17273 (1 << 23); 17274 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) { 17275 /* 5780 always in PCIX mode */ 17276 tp->dma_rwctrl |= 0x00144000; 17277 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) { 17278 /* 5714 always in PCIX mode */ 17279 tp->dma_rwctrl |= 0x00148000; 17280 } else { 17281 tp->dma_rwctrl |= 0x001b000f; 17282 } 17283 } 17284 if (tg3_flag(tp, ONE_DMA_AT_ONCE)) 17285 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17286 17287 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17288 tg3_asic_rev(tp) == ASIC_REV_5704) 17289 tp->dma_rwctrl &= 0xfffffff0; 17290 17291 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 17292 tg3_asic_rev(tp) == ASIC_REV_5701) { 17293 /* Remove this if it causes problems for some boards. */ 17294 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 17295 17296 /* On 5700/5701 chips, we need to set this bit. 17297 * Otherwise the chip will issue cacheline transactions 17298 * to streamable DMA memory with not all the byte 17299 * enables turned on. This is an error on several 17300 * RISC PCI controllers, in particular sparc64. 17301 * 17302 * On 5703/5704 chips, this bit has been reassigned 17303 * a different meaning. In particular, it is used 17304 * on those chips to enable a PCI-X workaround. 17305 */ 17306 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 17307 } 17308 17309 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17310 17311 17312 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17313 tg3_asic_rev(tp) != ASIC_REV_5701) 17314 goto out; 17315 17316 /* It is best to perform DMA test with maximum write burst size 17317 * to expose the 5700/5701 write DMA bug. 17318 */ 17319 saved_dma_rwctrl = tp->dma_rwctrl; 17320 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17321 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17322 17323 while (1) { 17324 u32 *p = buf, i; 17325 17326 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 17327 p[i] = i; 17328 17329 /* Send the buffer to the chip. */ 17330 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true); 17331 if (ret) { 17332 dev_err(&tp->pdev->dev, 17333 "%s: Buffer write failed. err = %d\n", 17334 __func__, ret); 17335 break; 17336 } 17337 17338 /* Now read it back. */ 17339 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false); 17340 if (ret) { 17341 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 17342 "err = %d\n", __func__, ret); 17343 break; 17344 } 17345 17346 /* Verify it. */ 17347 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 17348 if (p[i] == i) 17349 continue; 17350 17351 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17352 DMA_RWCTRL_WRITE_BNDRY_16) { 17353 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17354 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17355 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17356 break; 17357 } else { 17358 dev_err(&tp->pdev->dev, 17359 "%s: Buffer corrupted on read back! " 17360 "(%d != %d)\n", __func__, p[i], i); 17361 ret = -ENODEV; 17362 goto out; 17363 } 17364 } 17365 17366 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 17367 /* Success. */ 17368 ret = 0; 17369 break; 17370 } 17371 } 17372 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17373 DMA_RWCTRL_WRITE_BNDRY_16) { 17374 /* DMA test passed without adjusting DMA boundary, 17375 * now look for chipsets that are known to expose the 17376 * DMA bug without failing the test. 17377 */ 17378 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 17379 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17380 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17381 } else { 17382 /* Safe to use the calculated DMA boundary. */ 17383 tp->dma_rwctrl = saved_dma_rwctrl; 17384 } 17385 17386 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17387 } 17388 17389out: 17390 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 17391out_nofree: 17392 return ret; 17393} 17394 17395static void tg3_init_bufmgr_config(struct tg3 *tp) 17396{ 17397 if (tg3_flag(tp, 57765_PLUS)) { 17398 tp->bufmgr_config.mbuf_read_dma_low_water = 17399 DEFAULT_MB_RDMA_LOW_WATER_5705; 17400 tp->bufmgr_config.mbuf_mac_rx_low_water = 17401 DEFAULT_MB_MACRX_LOW_WATER_57765; 17402 tp->bufmgr_config.mbuf_high_water = 17403 DEFAULT_MB_HIGH_WATER_57765; 17404 17405 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17406 DEFAULT_MB_RDMA_LOW_WATER_5705; 17407 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17408 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 17409 tp->bufmgr_config.mbuf_high_water_jumbo = 17410 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 17411 } else if (tg3_flag(tp, 5705_PLUS)) { 17412 tp->bufmgr_config.mbuf_read_dma_low_water = 17413 DEFAULT_MB_RDMA_LOW_WATER_5705; 17414 tp->bufmgr_config.mbuf_mac_rx_low_water = 17415 DEFAULT_MB_MACRX_LOW_WATER_5705; 17416 tp->bufmgr_config.mbuf_high_water = 17417 DEFAULT_MB_HIGH_WATER_5705; 17418 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 17419 tp->bufmgr_config.mbuf_mac_rx_low_water = 17420 DEFAULT_MB_MACRX_LOW_WATER_5906; 17421 tp->bufmgr_config.mbuf_high_water = 17422 DEFAULT_MB_HIGH_WATER_5906; 17423 } 17424 17425 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17426 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 17427 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17428 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 17429 tp->bufmgr_config.mbuf_high_water_jumbo = 17430 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 17431 } else { 17432 tp->bufmgr_config.mbuf_read_dma_low_water = 17433 DEFAULT_MB_RDMA_LOW_WATER; 17434 tp->bufmgr_config.mbuf_mac_rx_low_water = 17435 DEFAULT_MB_MACRX_LOW_WATER; 17436 tp->bufmgr_config.mbuf_high_water = 17437 DEFAULT_MB_HIGH_WATER; 17438 17439 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17440 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 17441 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17442 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 17443 tp->bufmgr_config.mbuf_high_water_jumbo = 17444 DEFAULT_MB_HIGH_WATER_JUMBO; 17445 } 17446 17447 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 17448 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 17449} 17450 17451static char *tg3_phy_string(struct tg3 *tp) 17452{ 17453 switch (tp->phy_id & TG3_PHY_ID_MASK) { 17454 case TG3_PHY_ID_BCM5400: return "5400"; 17455 case TG3_PHY_ID_BCM5401: return "5401"; 17456 case TG3_PHY_ID_BCM5411: return "5411"; 17457 case TG3_PHY_ID_BCM5701: return "5701"; 17458 case TG3_PHY_ID_BCM5703: return "5703"; 17459 case TG3_PHY_ID_BCM5704: return "5704"; 17460 case TG3_PHY_ID_BCM5705: return "5705"; 17461 case TG3_PHY_ID_BCM5750: return "5750"; 17462 case TG3_PHY_ID_BCM5752: return "5752"; 17463 case TG3_PHY_ID_BCM5714: return "5714"; 17464 case TG3_PHY_ID_BCM5780: return "5780"; 17465 case TG3_PHY_ID_BCM5755: return "5755"; 17466 case TG3_PHY_ID_BCM5787: return "5787"; 17467 case TG3_PHY_ID_BCM5784: return "5784"; 17468 case TG3_PHY_ID_BCM5756: return "5722/5756"; 17469 case TG3_PHY_ID_BCM5906: return "5906"; 17470 case TG3_PHY_ID_BCM5761: return "5761"; 17471 case TG3_PHY_ID_BCM5718C: return "5718C"; 17472 case TG3_PHY_ID_BCM5718S: return "5718S"; 17473 case TG3_PHY_ID_BCM57765: return "57765"; 17474 case TG3_PHY_ID_BCM5719C: return "5719C"; 17475 case TG3_PHY_ID_BCM5720C: return "5720C"; 17476 case TG3_PHY_ID_BCM5762: return "5762C"; 17477 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 17478 case 0: return "serdes"; 17479 default: return "unknown"; 17480 } 17481} 17482 17483static char *tg3_bus_string(struct tg3 *tp, char *str) 17484{ 17485 if (tg3_flag(tp, PCI_EXPRESS)) { 17486 strcpy(str, "PCI Express"); 17487 return str; 17488 } else if (tg3_flag(tp, PCIX_MODE)) { 17489 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 17490 17491 strcpy(str, "PCIX:"); 17492 17493 if ((clock_ctrl == 7) || 17494 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 17495 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 17496 strcat(str, "133MHz"); 17497 else if (clock_ctrl == 0) 17498 strcat(str, "33MHz"); 17499 else if (clock_ctrl == 2) 17500 strcat(str, "50MHz"); 17501 else if (clock_ctrl == 4) 17502 strcat(str, "66MHz"); 17503 else if (clock_ctrl == 6) 17504 strcat(str, "100MHz"); 17505 } else { 17506 strcpy(str, "PCI:"); 17507 if (tg3_flag(tp, PCI_HIGH_SPEED)) 17508 strcat(str, "66MHz"); 17509 else 17510 strcat(str, "33MHz"); 17511 } 17512 if (tg3_flag(tp, PCI_32BIT)) 17513 strcat(str, ":32-bit"); 17514 else 17515 strcat(str, ":64-bit"); 17516 return str; 17517} 17518 17519static void tg3_init_coal(struct tg3 *tp) 17520{ 17521 struct ethtool_coalesce *ec = &tp->coal; 17522 17523 memset(ec, 0, sizeof(*ec)); 17524 ec->cmd = ETHTOOL_GCOALESCE; 17525 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 17526 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 17527 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 17528 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 17529 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 17530 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 17531 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 17532 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 17533 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 17534 17535 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 17536 HOSTCC_MODE_CLRTICK_TXBD)) { 17537 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 17538 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 17539 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 17540 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 17541 } 17542 17543 if (tg3_flag(tp, 5705_PLUS)) { 17544 ec->rx_coalesce_usecs_irq = 0; 17545 ec->tx_coalesce_usecs_irq = 0; 17546 ec->stats_block_coalesce_usecs = 0; 17547 } 17548} 17549 17550static int tg3_init_one(struct pci_dev *pdev, 17551 const struct pci_device_id *ent) 17552{ 17553 struct net_device *dev; 17554 struct tg3 *tp; 17555 int i, err; 17556 u32 sndmbx, rcvmbx, intmbx; 17557 char str[40]; 17558 u64 dma_mask, persist_dma_mask; 17559 netdev_features_t features = 0; 17560 u8 addr[ETH_ALEN] __aligned(2); 17561 17562 err = pci_enable_device(pdev); 17563 if (err) { 17564 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 17565 return err; 17566 } 17567 17568 err = pci_request_regions(pdev, DRV_MODULE_NAME); 17569 if (err) { 17570 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 17571 goto err_out_disable_pdev; 17572 } 17573 17574 pci_set_master(pdev); 17575 17576 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 17577 if (!dev) { 17578 err = -ENOMEM; 17579 goto err_out_free_res; 17580 } 17581 17582 SET_NETDEV_DEV(dev, &pdev->dev); 17583 17584 tp = netdev_priv(dev); 17585 tp->pdev = pdev; 17586 tp->dev = dev; 17587 tp->rx_mode = TG3_DEF_RX_MODE; 17588 tp->tx_mode = TG3_DEF_TX_MODE; 17589 tp->irq_sync = 1; 17590 tp->pcierr_recovery = false; 17591 17592 if (tg3_debug > 0) 17593 tp->msg_enable = tg3_debug; 17594 else 17595 tp->msg_enable = TG3_DEF_MSG_ENABLE; 17596 17597 if (pdev_is_ssb_gige_core(pdev)) { 17598 tg3_flag_set(tp, IS_SSB_CORE); 17599 if (ssb_gige_must_flush_posted_writes(pdev)) 17600 tg3_flag_set(tp, FLUSH_POSTED_WRITES); 17601 if (ssb_gige_one_dma_at_once(pdev)) 17602 tg3_flag_set(tp, ONE_DMA_AT_ONCE); 17603 if (ssb_gige_have_roboswitch(pdev)) { 17604 tg3_flag_set(tp, USE_PHYLIB); 17605 tg3_flag_set(tp, ROBOSWITCH); 17606 } 17607 if (ssb_gige_is_rgmii(pdev)) 17608 tg3_flag_set(tp, RGMII_MODE); 17609 } 17610 17611 /* The word/byte swap controls here control register access byte 17612 * swapping. DMA data byte swapping is controlled in the GRC_MODE 17613 * setting below. 17614 */ 17615 tp->misc_host_ctrl = 17616 MISC_HOST_CTRL_MASK_PCI_INT | 17617 MISC_HOST_CTRL_WORD_SWAP | 17618 MISC_HOST_CTRL_INDIR_ACCESS | 17619 MISC_HOST_CTRL_PCISTATE_RW; 17620 17621 /* The NONFRM (non-frame) byte/word swap controls take effect 17622 * on descriptor entries, anything which isn't packet data. 17623 * 17624 * The StrongARM chips on the board (one for tx, one for rx) 17625 * are running in big-endian mode. 17626 */ 17627 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 17628 GRC_MODE_WSWAP_NONFRM_DATA); 17629#ifdef __BIG_ENDIAN 17630 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 17631#endif 17632 spin_lock_init(&tp->lock); 17633 spin_lock_init(&tp->indirect_lock); 17634 INIT_WORK(&tp->reset_task, tg3_reset_task); 17635 17636 tp->regs = pci_ioremap_bar(pdev, BAR_0); 17637 if (!tp->regs) { 17638 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 17639 err = -ENOMEM; 17640 goto err_out_free_dev; 17641 } 17642 17643 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 17644 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 17645 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 17646 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 17647 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 17648 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 17649 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 17650 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 17651 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 17652 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 17653 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 17654 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 17655 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 17656 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 17657 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) { 17658 tg3_flag_set(tp, ENABLE_APE); 17659 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 17660 if (!tp->aperegs) { 17661 dev_err(&pdev->dev, 17662 "Cannot map APE registers, aborting\n"); 17663 err = -ENOMEM; 17664 goto err_out_iounmap; 17665 } 17666 } 17667 17668 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 17669 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 17670 17671 dev->ethtool_ops = &tg3_ethtool_ops; 17672 dev->watchdog_timeo = TG3_TX_TIMEOUT; 17673 dev->netdev_ops = &tg3_netdev_ops; 17674 dev->irq = pdev->irq; 17675 17676 err = tg3_get_invariants(tp, ent); 17677 if (err) { 17678 dev_err(&pdev->dev, 17679 "Problem fetching invariants of chip, aborting\n"); 17680 goto err_out_apeunmap; 17681 } 17682 17683 /* The EPB bridge inside 5714, 5715, and 5780 and any 17684 * device behind the EPB cannot support DMA addresses > 40-bit. 17685 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 17686 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 17687 * do DMA address check in tg3_start_xmit(). 17688 */ 17689 if (tg3_flag(tp, IS_5788)) 17690 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 17691 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 17692 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 17693#ifdef CONFIG_HIGHMEM 17694 dma_mask = DMA_BIT_MASK(64); 17695#endif 17696 } else 17697 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 17698 17699 /* Configure DMA attributes. */ 17700 if (dma_mask > DMA_BIT_MASK(32)) { 17701 err = dma_set_mask(&pdev->dev, dma_mask); 17702 if (!err) { 17703 features |= NETIF_F_HIGHDMA; 17704 err = dma_set_coherent_mask(&pdev->dev, 17705 persist_dma_mask); 17706 if (err < 0) { 17707 dev_err(&pdev->dev, "Unable to obtain 64 bit " 17708 "DMA for consistent allocations\n"); 17709 goto err_out_apeunmap; 17710 } 17711 } 17712 } 17713 if (err || dma_mask == DMA_BIT_MASK(32)) { 17714 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); 17715 if (err) { 17716 dev_err(&pdev->dev, 17717 "No usable DMA configuration, aborting\n"); 17718 goto err_out_apeunmap; 17719 } 17720 } 17721 17722 tg3_init_bufmgr_config(tp); 17723 17724 /* 5700 B0 chips do not support checksumming correctly due 17725 * to hardware bugs. 17726 */ 17727 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) { 17728 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 17729 17730 if (tg3_flag(tp, 5755_PLUS)) 17731 features |= NETIF_F_IPV6_CSUM; 17732 } 17733 17734 /* TSO is on by default on chips that support hardware TSO. 17735 * Firmware TSO on older chips gives lower performance, so it 17736 * is off by default, but can be enabled using ethtool. 17737 */ 17738 if ((tg3_flag(tp, HW_TSO_1) || 17739 tg3_flag(tp, HW_TSO_2) || 17740 tg3_flag(tp, HW_TSO_3)) && 17741 (features & NETIF_F_IP_CSUM)) 17742 features |= NETIF_F_TSO; 17743 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 17744 if (features & NETIF_F_IPV6_CSUM) 17745 features |= NETIF_F_TSO6; 17746 if (tg3_flag(tp, HW_TSO_3) || 17747 tg3_asic_rev(tp) == ASIC_REV_5761 || 17748 (tg3_asic_rev(tp) == ASIC_REV_5784 && 17749 tg3_chip_rev(tp) != CHIPREV_5784_AX) || 17750 tg3_asic_rev(tp) == ASIC_REV_5785 || 17751 tg3_asic_rev(tp) == ASIC_REV_57780) 17752 features |= NETIF_F_TSO_ECN; 17753 } 17754 17755 dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX | 17756 NETIF_F_HW_VLAN_CTAG_RX; 17757 dev->vlan_features |= features; 17758 17759 /* 17760 * Add loopback capability only for a subset of devices that support 17761 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 17762 * loopback for the remaining devices. 17763 */ 17764 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 17765 !tg3_flag(tp, CPMU_PRESENT)) 17766 /* Add the loopback capability */ 17767 features |= NETIF_F_LOOPBACK; 17768 17769 dev->hw_features |= features; 17770 dev->priv_flags |= IFF_UNICAST_FLT; 17771 17772 /* MTU range: 60 - 9000 or 1500, depending on hardware */ 17773 dev->min_mtu = TG3_MIN_MTU; 17774 dev->max_mtu = TG3_MAX_MTU(tp); 17775 17776 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 && 17777 !tg3_flag(tp, TSO_CAPABLE) && 17778 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 17779 tg3_flag_set(tp, MAX_RXPEND_64); 17780 tp->rx_pending = 63; 17781 } 17782 17783 err = tg3_get_device_address(tp, addr); 17784 if (err) { 17785 dev_err(&pdev->dev, 17786 "Could not obtain valid ethernet address, aborting\n"); 17787 goto err_out_apeunmap; 17788 } 17789 eth_hw_addr_set(dev, addr); 17790 17791 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 17792 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 17793 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 17794 for (i = 0; i < tp->irq_max; i++) { 17795 struct tg3_napi *tnapi = &tp->napi[i]; 17796 17797 tnapi->tp = tp; 17798 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 17799 17800 tnapi->int_mbox = intmbx; 17801 if (i <= 4) 17802 intmbx += 0x8; 17803 else 17804 intmbx += 0x4; 17805 17806 tnapi->consmbox = rcvmbx; 17807 tnapi->prodmbox = sndmbx; 17808 17809 if (i) 17810 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 17811 else 17812 tnapi->coal_now = HOSTCC_MODE_NOW; 17813 17814 if (!tg3_flag(tp, SUPPORT_MSIX)) 17815 break; 17816 17817 /* 17818 * If we support MSIX, we'll be using RSS. If we're using 17819 * RSS, the first vector only handles link interrupts and the 17820 * remaining vectors handle rx and tx interrupts. Reuse the 17821 * mailbox values for the next iteration. The values we setup 17822 * above are still useful for the single vectored mode. 17823 */ 17824 if (!i) 17825 continue; 17826 17827 rcvmbx += 0x8; 17828 17829 if (sndmbx & 0x4) 17830 sndmbx -= 0x4; 17831 else 17832 sndmbx += 0xc; 17833 } 17834 17835 /* 17836 * Reset chip in case UNDI or EFI driver did not shutdown 17837 * DMA self test will enable WDMAC and we'll see (spurious) 17838 * pending DMA on the PCI bus at that point. 17839 */ 17840 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 17841 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 17842 tg3_full_lock(tp, 0); 17843 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 17844 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 17845 tg3_full_unlock(tp); 17846 } 17847 17848 err = tg3_test_dma(tp); 17849 if (err) { 17850 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 17851 goto err_out_apeunmap; 17852 } 17853 17854 tg3_init_coal(tp); 17855 17856 pci_set_drvdata(pdev, dev); 17857 17858 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 17859 tg3_asic_rev(tp) == ASIC_REV_5720 || 17860 tg3_asic_rev(tp) == ASIC_REV_5762) 17861 tg3_flag_set(tp, PTP_CAPABLE); 17862 17863 tg3_timer_init(tp); 17864 17865 tg3_carrier_off(tp); 17866 17867 err = register_netdev(dev); 17868 if (err) { 17869 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 17870 goto err_out_apeunmap; 17871 } 17872 17873 if (tg3_flag(tp, PTP_CAPABLE)) { 17874 tg3_ptp_init(tp); 17875 tp->ptp_clock = ptp_clock_register(&tp->ptp_info, 17876 &tp->pdev->dev); 17877 if (IS_ERR(tp->ptp_clock)) 17878 tp->ptp_clock = NULL; 17879 } 17880 17881 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 17882 tp->board_part_number, 17883 tg3_chip_rev_id(tp), 17884 tg3_bus_string(tp, str), 17885 dev->dev_addr); 17886 17887 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) { 17888 char *ethtype; 17889 17890 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 17891 ethtype = "10/100Base-TX"; 17892 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 17893 ethtype = "1000Base-SX"; 17894 else 17895 ethtype = "10/100/1000Base-T"; 17896 17897 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 17898 "(WireSpeed[%d], EEE[%d])\n", 17899 tg3_phy_string(tp), ethtype, 17900 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 17901 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 17902 } 17903 17904 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 17905 (dev->features & NETIF_F_RXCSUM) != 0, 17906 tg3_flag(tp, USE_LINKCHG_REG) != 0, 17907 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 17908 tg3_flag(tp, ENABLE_ASF) != 0, 17909 tg3_flag(tp, TSO_CAPABLE) != 0); 17910 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 17911 tp->dma_rwctrl, 17912 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 17913 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 17914 17915 pci_save_state(pdev); 17916 17917 return 0; 17918 17919err_out_apeunmap: 17920 if (tp->aperegs) { 17921 iounmap(tp->aperegs); 17922 tp->aperegs = NULL; 17923 } 17924 17925err_out_iounmap: 17926 if (tp->regs) { 17927 iounmap(tp->regs); 17928 tp->regs = NULL; 17929 } 17930 17931err_out_free_dev: 17932 free_netdev(dev); 17933 17934err_out_free_res: 17935 pci_release_regions(pdev); 17936 17937err_out_disable_pdev: 17938 if (pci_is_enabled(pdev)) 17939 pci_disable_device(pdev); 17940 return err; 17941} 17942 17943static void tg3_remove_one(struct pci_dev *pdev) 17944{ 17945 struct net_device *dev = pci_get_drvdata(pdev); 17946 17947 if (dev) { 17948 struct tg3 *tp = netdev_priv(dev); 17949 17950 tg3_ptp_fini(tp); 17951 17952 release_firmware(tp->fw); 17953 17954 tg3_reset_task_cancel(tp); 17955 17956 if (tg3_flag(tp, USE_PHYLIB)) { 17957 tg3_phy_fini(tp); 17958 tg3_mdio_fini(tp); 17959 } 17960 17961 unregister_netdev(dev); 17962 if (tp->aperegs) { 17963 iounmap(tp->aperegs); 17964 tp->aperegs = NULL; 17965 } 17966 if (tp->regs) { 17967 iounmap(tp->regs); 17968 tp->regs = NULL; 17969 } 17970 free_netdev(dev); 17971 pci_release_regions(pdev); 17972 pci_disable_device(pdev); 17973 } 17974} 17975 17976#ifdef CONFIG_PM_SLEEP 17977static int tg3_suspend(struct device *device) 17978{ 17979 struct net_device *dev = dev_get_drvdata(device); 17980 struct tg3 *tp = netdev_priv(dev); 17981 int err = 0; 17982 17983 rtnl_lock(); 17984 17985 if (!netif_running(dev)) 17986 goto unlock; 17987 17988 tg3_reset_task_cancel(tp); 17989 tg3_phy_stop(tp); 17990 tg3_netif_stop(tp); 17991 17992 tg3_timer_stop(tp); 17993 17994 tg3_full_lock(tp, 1); 17995 tg3_disable_ints(tp); 17996 tg3_full_unlock(tp); 17997 17998 netif_device_detach(dev); 17999 18000 tg3_full_lock(tp, 0); 18001 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 18002 tg3_flag_clear(tp, INIT_COMPLETE); 18003 tg3_full_unlock(tp); 18004 18005 err = tg3_power_down_prepare(tp); 18006 if (err) { 18007 int err2; 18008 18009 tg3_full_lock(tp, 0); 18010 18011 tg3_flag_set(tp, INIT_COMPLETE); 18012 err2 = tg3_restart_hw(tp, true); 18013 if (err2) 18014 goto out; 18015 18016 tg3_timer_start(tp); 18017 18018 netif_device_attach(dev); 18019 tg3_netif_start(tp); 18020 18021out: 18022 tg3_full_unlock(tp); 18023 18024 if (!err2) 18025 tg3_phy_start(tp); 18026 } 18027 18028unlock: 18029 rtnl_unlock(); 18030 return err; 18031} 18032 18033static int tg3_resume(struct device *device) 18034{ 18035 struct net_device *dev = dev_get_drvdata(device); 18036 struct tg3 *tp = netdev_priv(dev); 18037 int err = 0; 18038 18039 rtnl_lock(); 18040 18041 if (!netif_running(dev)) 18042 goto unlock; 18043 18044 netif_device_attach(dev); 18045 18046 tg3_full_lock(tp, 0); 18047 18048 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18049 18050 tg3_flag_set(tp, INIT_COMPLETE); 18051 err = tg3_restart_hw(tp, 18052 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)); 18053 if (err) 18054 goto out; 18055 18056 tg3_timer_start(tp); 18057 18058 tg3_netif_start(tp); 18059 18060out: 18061 tg3_full_unlock(tp); 18062 18063 if (!err) 18064 tg3_phy_start(tp); 18065 18066unlock: 18067 rtnl_unlock(); 18068 return err; 18069} 18070#endif /* CONFIG_PM_SLEEP */ 18071 18072static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 18073 18074static void tg3_shutdown(struct pci_dev *pdev) 18075{ 18076 struct net_device *dev = pci_get_drvdata(pdev); 18077 struct tg3 *tp = netdev_priv(dev); 18078 18079 rtnl_lock(); 18080 netif_device_detach(dev); 18081 18082 if (netif_running(dev)) 18083 dev_close(dev); 18084 18085 if (system_state == SYSTEM_POWER_OFF) 18086 tg3_power_down(tp); 18087 18088 rtnl_unlock(); 18089} 18090 18091/** 18092 * tg3_io_error_detected - called when PCI error is detected 18093 * @pdev: Pointer to PCI device 18094 * @state: The current pci connection state 18095 * 18096 * This function is called after a PCI bus error affecting 18097 * this device has been detected. 18098 */ 18099static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 18100 pci_channel_state_t state) 18101{ 18102 struct net_device *netdev = pci_get_drvdata(pdev); 18103 struct tg3 *tp = netdev_priv(netdev); 18104 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 18105 18106 netdev_info(netdev, "PCI I/O error detected\n"); 18107 18108 rtnl_lock(); 18109 18110 /* Could be second call or maybe we don't have netdev yet */ 18111 if (!netdev || tp->pcierr_recovery || !netif_running(netdev)) 18112 goto done; 18113 18114 /* We needn't recover from permanent error */ 18115 if (state == pci_channel_io_frozen) 18116 tp->pcierr_recovery = true; 18117 18118 tg3_phy_stop(tp); 18119 18120 tg3_netif_stop(tp); 18121 18122 tg3_timer_stop(tp); 18123 18124 /* Want to make sure that the reset task doesn't run */ 18125 tg3_reset_task_cancel(tp); 18126 18127 netif_device_detach(netdev); 18128 18129 /* Clean up software state, even if MMIO is blocked */ 18130 tg3_full_lock(tp, 0); 18131 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 18132 tg3_full_unlock(tp); 18133 18134done: 18135 if (state == pci_channel_io_perm_failure) { 18136 if (netdev) { 18137 tg3_napi_enable(tp); 18138 dev_close(netdev); 18139 } 18140 err = PCI_ERS_RESULT_DISCONNECT; 18141 } else { 18142 pci_disable_device(pdev); 18143 } 18144 18145 rtnl_unlock(); 18146 18147 return err; 18148} 18149 18150/** 18151 * tg3_io_slot_reset - called after the pci bus has been reset. 18152 * @pdev: Pointer to PCI device 18153 * 18154 * Restart the card from scratch, as if from a cold-boot. 18155 * At this point, the card has exprienced a hard reset, 18156 * followed by fixups by BIOS, and has its config space 18157 * set up identically to what it was at cold boot. 18158 */ 18159static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 18160{ 18161 struct net_device *netdev = pci_get_drvdata(pdev); 18162 struct tg3 *tp = netdev_priv(netdev); 18163 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 18164 int err; 18165 18166 rtnl_lock(); 18167 18168 if (pci_enable_device(pdev)) { 18169 dev_err(&pdev->dev, 18170 "Cannot re-enable PCI device after reset.\n"); 18171 goto done; 18172 } 18173 18174 pci_set_master(pdev); 18175 pci_restore_state(pdev); 18176 pci_save_state(pdev); 18177 18178 if (!netdev || !netif_running(netdev)) { 18179 rc = PCI_ERS_RESULT_RECOVERED; 18180 goto done; 18181 } 18182 18183 err = tg3_power_up(tp); 18184 if (err) 18185 goto done; 18186 18187 rc = PCI_ERS_RESULT_RECOVERED; 18188 18189done: 18190 if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) { 18191 tg3_napi_enable(tp); 18192 dev_close(netdev); 18193 } 18194 rtnl_unlock(); 18195 18196 return rc; 18197} 18198 18199/** 18200 * tg3_io_resume - called when traffic can start flowing again. 18201 * @pdev: Pointer to PCI device 18202 * 18203 * This callback is called when the error recovery driver tells 18204 * us that its OK to resume normal operation. 18205 */ 18206static void tg3_io_resume(struct pci_dev *pdev) 18207{ 18208 struct net_device *netdev = pci_get_drvdata(pdev); 18209 struct tg3 *tp = netdev_priv(netdev); 18210 int err; 18211 18212 rtnl_lock(); 18213 18214 if (!netdev || !netif_running(netdev)) 18215 goto done; 18216 18217 tg3_full_lock(tp, 0); 18218 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18219 tg3_flag_set(tp, INIT_COMPLETE); 18220 err = tg3_restart_hw(tp, true); 18221 if (err) { 18222 tg3_full_unlock(tp); 18223 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 18224 goto done; 18225 } 18226 18227 netif_device_attach(netdev); 18228 18229 tg3_timer_start(tp); 18230 18231 tg3_netif_start(tp); 18232 18233 tg3_full_unlock(tp); 18234 18235 tg3_phy_start(tp); 18236 18237done: 18238 tp->pcierr_recovery = false; 18239 rtnl_unlock(); 18240} 18241 18242static const struct pci_error_handlers tg3_err_handler = { 18243 .error_detected = tg3_io_error_detected, 18244 .slot_reset = tg3_io_slot_reset, 18245 .resume = tg3_io_resume 18246}; 18247 18248static struct pci_driver tg3_driver = { 18249 .name = DRV_MODULE_NAME, 18250 .id_table = tg3_pci_tbl, 18251 .probe = tg3_init_one, 18252 .remove = tg3_remove_one, 18253 .err_handler = &tg3_err_handler, 18254 .driver.pm = &tg3_pm_ops, 18255 .shutdown = tg3_shutdown, 18256}; 18257 18258module_pci_driver(tg3_driver);