Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v6.2-rc8 18254 lines 478 kB view raw
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) || (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, &reg)) 1663 val = reg << 16; 1664 if (!tg3_readphy(tp, MII_BMSR, &reg)) 1665 val |= (reg & 0xffff); 1666 *data++ = val; 1667 1668 val = 0; 1669 if (!tg3_readphy(tp, MII_ADVERTISE, &reg)) 1670 val = reg << 16; 1671 if (!tg3_readphy(tp, MII_LPA, &reg)) 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, &reg)) 1678 val = reg << 16; 1679 if (!tg3_readphy(tp, MII_STAT1000, &reg)) 1680 val |= (reg & 0xffff); 1681 } 1682 *data++ = val; 1683 1684 if (!tg3_readphy(tp, MII_PHYADDR, &reg)) 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, &reg32)) 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, &reg32); 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 &current_speed, 4906 &current_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_adjfine(struct ptp_clock_info *ptp, long scaled_ppm) 6183{ 6184 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6185 u64 correction; 6186 bool neg_adj; 6187 6188 /* Frequency adjustment is performed using hardware with a 24 bit 6189 * accumulator and a programmable correction value. On each clk, the 6190 * correction value gets added to the accumulator and when it 6191 * overflows, the time counter is incremented/decremented. 6192 */ 6193 neg_adj = diff_by_scaled_ppm(1 << 24, scaled_ppm, &correction); 6194 6195 tg3_full_lock(tp, 0); 6196 6197 if (correction) 6198 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 6199 TG3_EAV_REF_CLK_CORRECT_EN | 6200 (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | 6201 ((u32)correction & TG3_EAV_REF_CLK_CORRECT_MASK)); 6202 else 6203 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); 6204 6205 tg3_full_unlock(tp); 6206 6207 return 0; 6208} 6209 6210static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) 6211{ 6212 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6213 6214 tg3_full_lock(tp, 0); 6215 tp->ptp_adjust += delta; 6216 tg3_full_unlock(tp); 6217 6218 return 0; 6219} 6220 6221static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts, 6222 struct ptp_system_timestamp *sts) 6223{ 6224 u64 ns; 6225 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6226 6227 tg3_full_lock(tp, 0); 6228 ns = tg3_refclk_read(tp, sts); 6229 ns += tp->ptp_adjust; 6230 tg3_full_unlock(tp); 6231 6232 *ts = ns_to_timespec64(ns); 6233 6234 return 0; 6235} 6236 6237static int tg3_ptp_settime(struct ptp_clock_info *ptp, 6238 const struct timespec64 *ts) 6239{ 6240 u64 ns; 6241 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6242 6243 ns = timespec64_to_ns(ts); 6244 6245 tg3_full_lock(tp, 0); 6246 tg3_refclk_write(tp, ns); 6247 tp->ptp_adjust = 0; 6248 tg3_full_unlock(tp); 6249 6250 return 0; 6251} 6252 6253static int tg3_ptp_enable(struct ptp_clock_info *ptp, 6254 struct ptp_clock_request *rq, int on) 6255{ 6256 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6257 u32 clock_ctl; 6258 int rval = 0; 6259 6260 switch (rq->type) { 6261 case PTP_CLK_REQ_PEROUT: 6262 /* Reject requests with unsupported flags */ 6263 if (rq->perout.flags) 6264 return -EOPNOTSUPP; 6265 6266 if (rq->perout.index != 0) 6267 return -EINVAL; 6268 6269 tg3_full_lock(tp, 0); 6270 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6271 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK; 6272 6273 if (on) { 6274 u64 nsec; 6275 6276 nsec = rq->perout.start.sec * 1000000000ULL + 6277 rq->perout.start.nsec; 6278 6279 if (rq->perout.period.sec || rq->perout.period.nsec) { 6280 netdev_warn(tp->dev, 6281 "Device supports only a one-shot timesync output, period must be 0\n"); 6282 rval = -EINVAL; 6283 goto err_out; 6284 } 6285 6286 if (nsec & (1ULL << 63)) { 6287 netdev_warn(tp->dev, 6288 "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n"); 6289 rval = -EINVAL; 6290 goto err_out; 6291 } 6292 6293 tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff)); 6294 tw32(TG3_EAV_WATCHDOG0_MSB, 6295 TG3_EAV_WATCHDOG0_EN | 6296 ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK)); 6297 6298 tw32(TG3_EAV_REF_CLCK_CTL, 6299 clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0); 6300 } else { 6301 tw32(TG3_EAV_WATCHDOG0_MSB, 0); 6302 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl); 6303 } 6304 6305err_out: 6306 tg3_full_unlock(tp); 6307 return rval; 6308 6309 default: 6310 break; 6311 } 6312 6313 return -EOPNOTSUPP; 6314} 6315 6316static const struct ptp_clock_info tg3_ptp_caps = { 6317 .owner = THIS_MODULE, 6318 .name = "tg3 clock", 6319 .max_adj = 250000000, 6320 .n_alarm = 0, 6321 .n_ext_ts = 0, 6322 .n_per_out = 1, 6323 .n_pins = 0, 6324 .pps = 0, 6325 .adjfine = tg3_ptp_adjfine, 6326 .adjtime = tg3_ptp_adjtime, 6327 .gettimex64 = tg3_ptp_gettimex, 6328 .settime64 = tg3_ptp_settime, 6329 .enable = tg3_ptp_enable, 6330}; 6331 6332static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, 6333 struct skb_shared_hwtstamps *timestamp) 6334{ 6335 memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); 6336 timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + 6337 tp->ptp_adjust); 6338} 6339 6340/* tp->lock must be held */ 6341static void tg3_ptp_init(struct tg3 *tp) 6342{ 6343 if (!tg3_flag(tp, PTP_CAPABLE)) 6344 return; 6345 6346 /* Initialize the hardware clock to the system time. */ 6347 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); 6348 tp->ptp_adjust = 0; 6349 tp->ptp_info = tg3_ptp_caps; 6350} 6351 6352/* tp->lock must be held */ 6353static void tg3_ptp_resume(struct tg3 *tp) 6354{ 6355 if (!tg3_flag(tp, PTP_CAPABLE)) 6356 return; 6357 6358 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); 6359 tp->ptp_adjust = 0; 6360} 6361 6362static void tg3_ptp_fini(struct tg3 *tp) 6363{ 6364 if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) 6365 return; 6366 6367 ptp_clock_unregister(tp->ptp_clock); 6368 tp->ptp_clock = NULL; 6369 tp->ptp_adjust = 0; 6370} 6371 6372static inline int tg3_irq_sync(struct tg3 *tp) 6373{ 6374 return tp->irq_sync; 6375} 6376 6377static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 6378{ 6379 int i; 6380 6381 dst = (u32 *)((u8 *)dst + off); 6382 for (i = 0; i < len; i += sizeof(u32)) 6383 *dst++ = tr32(off + i); 6384} 6385 6386static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 6387{ 6388 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 6389 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 6390 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 6391 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 6392 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 6393 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 6394 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 6395 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 6396 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 6397 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 6398 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 6399 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 6400 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 6401 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 6402 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 6403 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 6404 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 6405 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 6406 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 6407 6408 if (tg3_flag(tp, SUPPORT_MSIX)) 6409 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 6410 6411 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 6412 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 6413 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 6414 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 6415 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 6416 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 6417 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 6418 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 6419 6420 if (!tg3_flag(tp, 5705_PLUS)) { 6421 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 6422 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 6423 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 6424 } 6425 6426 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 6427 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 6428 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 6429 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 6430 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 6431 6432 if (tg3_flag(tp, NVRAM)) 6433 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 6434} 6435 6436static void tg3_dump_state(struct tg3 *tp) 6437{ 6438 int i; 6439 u32 *regs; 6440 6441 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 6442 if (!regs) 6443 return; 6444 6445 if (tg3_flag(tp, PCI_EXPRESS)) { 6446 /* Read up to but not including private PCI registers */ 6447 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 6448 regs[i / sizeof(u32)] = tr32(i); 6449 } else 6450 tg3_dump_legacy_regs(tp, regs); 6451 6452 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 6453 if (!regs[i + 0] && !regs[i + 1] && 6454 !regs[i + 2] && !regs[i + 3]) 6455 continue; 6456 6457 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 6458 i * 4, 6459 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 6460 } 6461 6462 kfree(regs); 6463 6464 for (i = 0; i < tp->irq_cnt; i++) { 6465 struct tg3_napi *tnapi = &tp->napi[i]; 6466 6467 /* SW status block */ 6468 netdev_err(tp->dev, 6469 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 6470 i, 6471 tnapi->hw_status->status, 6472 tnapi->hw_status->status_tag, 6473 tnapi->hw_status->rx_jumbo_consumer, 6474 tnapi->hw_status->rx_consumer, 6475 tnapi->hw_status->rx_mini_consumer, 6476 tnapi->hw_status->idx[0].rx_producer, 6477 tnapi->hw_status->idx[0].tx_consumer); 6478 6479 netdev_err(tp->dev, 6480 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 6481 i, 6482 tnapi->last_tag, tnapi->last_irq_tag, 6483 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 6484 tnapi->rx_rcb_ptr, 6485 tnapi->prodring.rx_std_prod_idx, 6486 tnapi->prodring.rx_std_cons_idx, 6487 tnapi->prodring.rx_jmb_prod_idx, 6488 tnapi->prodring.rx_jmb_cons_idx); 6489 } 6490} 6491 6492/* This is called whenever we suspect that the system chipset is re- 6493 * ordering the sequence of MMIO to the tx send mailbox. The symptom 6494 * is bogus tx completions. We try to recover by setting the 6495 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 6496 * in the workqueue. 6497 */ 6498static void tg3_tx_recover(struct tg3 *tp) 6499{ 6500 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 6501 tp->write32_tx_mbox == tg3_write_indirect_mbox); 6502 6503 netdev_warn(tp->dev, 6504 "The system may be re-ordering memory-mapped I/O " 6505 "cycles to the network device, attempting to recover. " 6506 "Please report the problem to the driver maintainer " 6507 "and include system chipset information.\n"); 6508 6509 tg3_flag_set(tp, TX_RECOVERY_PENDING); 6510} 6511 6512static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 6513{ 6514 /* Tell compiler to fetch tx indices from memory. */ 6515 barrier(); 6516 return tnapi->tx_pending - 6517 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 6518} 6519 6520/* Tigon3 never reports partial packet sends. So we do not 6521 * need special logic to handle SKBs that have not had all 6522 * of their frags sent yet, like SunGEM does. 6523 */ 6524static void tg3_tx(struct tg3_napi *tnapi) 6525{ 6526 struct tg3 *tp = tnapi->tp; 6527 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 6528 u32 sw_idx = tnapi->tx_cons; 6529 struct netdev_queue *txq; 6530 int index = tnapi - tp->napi; 6531 unsigned int pkts_compl = 0, bytes_compl = 0; 6532 6533 if (tg3_flag(tp, ENABLE_TSS)) 6534 index--; 6535 6536 txq = netdev_get_tx_queue(tp->dev, index); 6537 6538 while (sw_idx != hw_idx) { 6539 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 6540 struct sk_buff *skb = ri->skb; 6541 int i, tx_bug = 0; 6542 6543 if (unlikely(skb == NULL)) { 6544 tg3_tx_recover(tp); 6545 return; 6546 } 6547 6548 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { 6549 struct skb_shared_hwtstamps timestamp; 6550 u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); 6551 hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; 6552 6553 tg3_hwclock_to_timestamp(tp, hwclock, &timestamp); 6554 6555 skb_tstamp_tx(skb, &timestamp); 6556 } 6557 6558 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), 6559 skb_headlen(skb), DMA_TO_DEVICE); 6560 6561 ri->skb = NULL; 6562 6563 while (ri->fragmented) { 6564 ri->fragmented = false; 6565 sw_idx = NEXT_TX(sw_idx); 6566 ri = &tnapi->tx_buffers[sw_idx]; 6567 } 6568 6569 sw_idx = NEXT_TX(sw_idx); 6570 6571 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 6572 ri = &tnapi->tx_buffers[sw_idx]; 6573 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 6574 tx_bug = 1; 6575 6576 dma_unmap_page(&tp->pdev->dev, 6577 dma_unmap_addr(ri, mapping), 6578 skb_frag_size(&skb_shinfo(skb)->frags[i]), 6579 DMA_TO_DEVICE); 6580 6581 while (ri->fragmented) { 6582 ri->fragmented = false; 6583 sw_idx = NEXT_TX(sw_idx); 6584 ri = &tnapi->tx_buffers[sw_idx]; 6585 } 6586 6587 sw_idx = NEXT_TX(sw_idx); 6588 } 6589 6590 pkts_compl++; 6591 bytes_compl += skb->len; 6592 6593 dev_consume_skb_any(skb); 6594 6595 if (unlikely(tx_bug)) { 6596 tg3_tx_recover(tp); 6597 return; 6598 } 6599 } 6600 6601 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 6602 6603 tnapi->tx_cons = sw_idx; 6604 6605 /* Need to make the tx_cons update visible to tg3_start_xmit() 6606 * before checking for netif_queue_stopped(). Without the 6607 * memory barrier, there is a small possibility that tg3_start_xmit() 6608 * will miss it and cause the queue to be stopped forever. 6609 */ 6610 smp_mb(); 6611 6612 if (unlikely(netif_tx_queue_stopped(txq) && 6613 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 6614 __netif_tx_lock(txq, smp_processor_id()); 6615 if (netif_tx_queue_stopped(txq) && 6616 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 6617 netif_tx_wake_queue(txq); 6618 __netif_tx_unlock(txq); 6619 } 6620} 6621 6622static void tg3_frag_free(bool is_frag, void *data) 6623{ 6624 if (is_frag) 6625 skb_free_frag(data); 6626 else 6627 kfree(data); 6628} 6629 6630static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 6631{ 6632 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 6633 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6634 6635 if (!ri->data) 6636 return; 6637 6638 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz, 6639 DMA_FROM_DEVICE); 6640 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 6641 ri->data = NULL; 6642} 6643 6644 6645/* Returns size of skb allocated or < 0 on error. 6646 * 6647 * We only need to fill in the address because the other members 6648 * of the RX descriptor are invariant, see tg3_init_rings. 6649 * 6650 * Note the purposeful assymetry of cpu vs. chip accesses. For 6651 * posting buffers we only dirty the first cache line of the RX 6652 * descriptor (containing the address). Whereas for the RX status 6653 * buffers the cpu only reads the last cacheline of the RX descriptor 6654 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 6655 */ 6656static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 6657 u32 opaque_key, u32 dest_idx_unmasked, 6658 unsigned int *frag_size) 6659{ 6660 struct tg3_rx_buffer_desc *desc; 6661 struct ring_info *map; 6662 u8 *data; 6663 dma_addr_t mapping; 6664 int skb_size, data_size, dest_idx; 6665 6666 switch (opaque_key) { 6667 case RXD_OPAQUE_RING_STD: 6668 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6669 desc = &tpr->rx_std[dest_idx]; 6670 map = &tpr->rx_std_buffers[dest_idx]; 6671 data_size = tp->rx_pkt_map_sz; 6672 break; 6673 6674 case RXD_OPAQUE_RING_JUMBO: 6675 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6676 desc = &tpr->rx_jmb[dest_idx].std; 6677 map = &tpr->rx_jmb_buffers[dest_idx]; 6678 data_size = TG3_RX_JMB_MAP_SZ; 6679 break; 6680 6681 default: 6682 return -EINVAL; 6683 } 6684 6685 /* Do not overwrite any of the map or rp information 6686 * until we are sure we can commit to a new buffer. 6687 * 6688 * Callers depend upon this behavior and assume that 6689 * we leave everything unchanged if we fail. 6690 */ 6691 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 6692 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6693 if (skb_size <= PAGE_SIZE) { 6694 data = napi_alloc_frag(skb_size); 6695 *frag_size = skb_size; 6696 } else { 6697 data = kmalloc(skb_size, GFP_ATOMIC); 6698 *frag_size = 0; 6699 } 6700 if (!data) 6701 return -ENOMEM; 6702 6703 mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp), 6704 data_size, DMA_FROM_DEVICE); 6705 if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) { 6706 tg3_frag_free(skb_size <= PAGE_SIZE, data); 6707 return -EIO; 6708 } 6709 6710 map->data = data; 6711 dma_unmap_addr_set(map, mapping, mapping); 6712 6713 desc->addr_hi = ((u64)mapping >> 32); 6714 desc->addr_lo = ((u64)mapping & 0xffffffff); 6715 6716 return data_size; 6717} 6718 6719/* We only need to move over in the address because the other 6720 * members of the RX descriptor are invariant. See notes above 6721 * tg3_alloc_rx_data for full details. 6722 */ 6723static void tg3_recycle_rx(struct tg3_napi *tnapi, 6724 struct tg3_rx_prodring_set *dpr, 6725 u32 opaque_key, int src_idx, 6726 u32 dest_idx_unmasked) 6727{ 6728 struct tg3 *tp = tnapi->tp; 6729 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 6730 struct ring_info *src_map, *dest_map; 6731 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 6732 int dest_idx; 6733 6734 switch (opaque_key) { 6735 case RXD_OPAQUE_RING_STD: 6736 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6737 dest_desc = &dpr->rx_std[dest_idx]; 6738 dest_map = &dpr->rx_std_buffers[dest_idx]; 6739 src_desc = &spr->rx_std[src_idx]; 6740 src_map = &spr->rx_std_buffers[src_idx]; 6741 break; 6742 6743 case RXD_OPAQUE_RING_JUMBO: 6744 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6745 dest_desc = &dpr->rx_jmb[dest_idx].std; 6746 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 6747 src_desc = &spr->rx_jmb[src_idx].std; 6748 src_map = &spr->rx_jmb_buffers[src_idx]; 6749 break; 6750 6751 default: 6752 return; 6753 } 6754 6755 dest_map->data = src_map->data; 6756 dma_unmap_addr_set(dest_map, mapping, 6757 dma_unmap_addr(src_map, mapping)); 6758 dest_desc->addr_hi = src_desc->addr_hi; 6759 dest_desc->addr_lo = src_desc->addr_lo; 6760 6761 /* Ensure that the update to the skb happens after the physical 6762 * addresses have been transferred to the new BD location. 6763 */ 6764 smp_wmb(); 6765 6766 src_map->data = NULL; 6767} 6768 6769/* The RX ring scheme is composed of multiple rings which post fresh 6770 * buffers to the chip, and one special ring the chip uses to report 6771 * status back to the host. 6772 * 6773 * The special ring reports the status of received packets to the 6774 * host. The chip does not write into the original descriptor the 6775 * RX buffer was obtained from. The chip simply takes the original 6776 * descriptor as provided by the host, updates the status and length 6777 * field, then writes this into the next status ring entry. 6778 * 6779 * Each ring the host uses to post buffers to the chip is described 6780 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 6781 * it is first placed into the on-chip ram. When the packet's length 6782 * is known, it walks down the TG3_BDINFO entries to select the ring. 6783 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 6784 * which is within the range of the new packet's length is chosen. 6785 * 6786 * The "separate ring for rx status" scheme may sound queer, but it makes 6787 * sense from a cache coherency perspective. If only the host writes 6788 * to the buffer post rings, and only the chip writes to the rx status 6789 * rings, then cache lines never move beyond shared-modified state. 6790 * If both the host and chip were to write into the same ring, cache line 6791 * eviction could occur since both entities want it in an exclusive state. 6792 */ 6793static int tg3_rx(struct tg3_napi *tnapi, int budget) 6794{ 6795 struct tg3 *tp = tnapi->tp; 6796 u32 work_mask, rx_std_posted = 0; 6797 u32 std_prod_idx, jmb_prod_idx; 6798 u32 sw_idx = tnapi->rx_rcb_ptr; 6799 u16 hw_idx; 6800 int received; 6801 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 6802 6803 hw_idx = *(tnapi->rx_rcb_prod_idx); 6804 /* 6805 * We need to order the read of hw_idx and the read of 6806 * the opaque cookie. 6807 */ 6808 rmb(); 6809 work_mask = 0; 6810 received = 0; 6811 std_prod_idx = tpr->rx_std_prod_idx; 6812 jmb_prod_idx = tpr->rx_jmb_prod_idx; 6813 while (sw_idx != hw_idx && budget > 0) { 6814 struct ring_info *ri; 6815 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 6816 unsigned int len; 6817 struct sk_buff *skb; 6818 dma_addr_t dma_addr; 6819 u32 opaque_key, desc_idx, *post_ptr; 6820 u8 *data; 6821 u64 tstamp = 0; 6822 6823 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 6824 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 6825 if (opaque_key == RXD_OPAQUE_RING_STD) { 6826 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 6827 dma_addr = dma_unmap_addr(ri, mapping); 6828 data = ri->data; 6829 post_ptr = &std_prod_idx; 6830 rx_std_posted++; 6831 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 6832 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 6833 dma_addr = dma_unmap_addr(ri, mapping); 6834 data = ri->data; 6835 post_ptr = &jmb_prod_idx; 6836 } else 6837 goto next_pkt_nopost; 6838 6839 work_mask |= opaque_key; 6840 6841 if (desc->err_vlan & RXD_ERR_MASK) { 6842 drop_it: 6843 tg3_recycle_rx(tnapi, tpr, opaque_key, 6844 desc_idx, *post_ptr); 6845 drop_it_no_recycle: 6846 /* Other statistics kept track of by card. */ 6847 tp->rx_dropped++; 6848 goto next_pkt; 6849 } 6850 6851 prefetch(data + TG3_RX_OFFSET(tp)); 6852 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 6853 ETH_FCS_LEN; 6854 6855 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6856 RXD_FLAG_PTPSTAT_PTPV1 || 6857 (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6858 RXD_FLAG_PTPSTAT_PTPV2) { 6859 tstamp = tr32(TG3_RX_TSTAMP_LSB); 6860 tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; 6861 } 6862 6863 if (len > TG3_RX_COPY_THRESH(tp)) { 6864 int skb_size; 6865 unsigned int frag_size; 6866 6867 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 6868 *post_ptr, &frag_size); 6869 if (skb_size < 0) 6870 goto drop_it; 6871 6872 dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size, 6873 DMA_FROM_DEVICE); 6874 6875 /* Ensure that the update to the data happens 6876 * after the usage of the old DMA mapping. 6877 */ 6878 smp_wmb(); 6879 6880 ri->data = NULL; 6881 6882 skb = build_skb(data, frag_size); 6883 if (!skb) { 6884 tg3_frag_free(frag_size != 0, data); 6885 goto drop_it_no_recycle; 6886 } 6887 skb_reserve(skb, TG3_RX_OFFSET(tp)); 6888 } else { 6889 tg3_recycle_rx(tnapi, tpr, opaque_key, 6890 desc_idx, *post_ptr); 6891 6892 skb = netdev_alloc_skb(tp->dev, 6893 len + TG3_RAW_IP_ALIGN); 6894 if (skb == NULL) 6895 goto drop_it_no_recycle; 6896 6897 skb_reserve(skb, TG3_RAW_IP_ALIGN); 6898 dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len, 6899 DMA_FROM_DEVICE); 6900 memcpy(skb->data, 6901 data + TG3_RX_OFFSET(tp), 6902 len); 6903 dma_sync_single_for_device(&tp->pdev->dev, dma_addr, 6904 len, DMA_FROM_DEVICE); 6905 } 6906 6907 skb_put(skb, len); 6908 if (tstamp) 6909 tg3_hwclock_to_timestamp(tp, tstamp, 6910 skb_hwtstamps(skb)); 6911 6912 if ((tp->dev->features & NETIF_F_RXCSUM) && 6913 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 6914 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 6915 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 6916 skb->ip_summed = CHECKSUM_UNNECESSARY; 6917 else 6918 skb_checksum_none_assert(skb); 6919 6920 skb->protocol = eth_type_trans(skb, tp->dev); 6921 6922 if (len > (tp->dev->mtu + ETH_HLEN) && 6923 skb->protocol != htons(ETH_P_8021Q) && 6924 skb->protocol != htons(ETH_P_8021AD)) { 6925 dev_kfree_skb_any(skb); 6926 goto drop_it_no_recycle; 6927 } 6928 6929 if (desc->type_flags & RXD_FLAG_VLAN && 6930 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6931 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 6932 desc->err_vlan & RXD_VLAN_MASK); 6933 6934 napi_gro_receive(&tnapi->napi, skb); 6935 6936 received++; 6937 budget--; 6938 6939next_pkt: 6940 (*post_ptr)++; 6941 6942 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6943 tpr->rx_std_prod_idx = std_prod_idx & 6944 tp->rx_std_ring_mask; 6945 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6946 tpr->rx_std_prod_idx); 6947 work_mask &= ~RXD_OPAQUE_RING_STD; 6948 rx_std_posted = 0; 6949 } 6950next_pkt_nopost: 6951 sw_idx++; 6952 sw_idx &= tp->rx_ret_ring_mask; 6953 6954 /* Refresh hw_idx to see if there is new work */ 6955 if (sw_idx == hw_idx) { 6956 hw_idx = *(tnapi->rx_rcb_prod_idx); 6957 rmb(); 6958 } 6959 } 6960 6961 /* ACK the status ring. */ 6962 tnapi->rx_rcb_ptr = sw_idx; 6963 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6964 6965 /* Refill RX ring(s). */ 6966 if (!tg3_flag(tp, ENABLE_RSS)) { 6967 /* Sync BD data before updating mailbox */ 6968 wmb(); 6969 6970 if (work_mask & RXD_OPAQUE_RING_STD) { 6971 tpr->rx_std_prod_idx = std_prod_idx & 6972 tp->rx_std_ring_mask; 6973 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6974 tpr->rx_std_prod_idx); 6975 } 6976 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 6977 tpr->rx_jmb_prod_idx = jmb_prod_idx & 6978 tp->rx_jmb_ring_mask; 6979 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6980 tpr->rx_jmb_prod_idx); 6981 } 6982 } else if (work_mask) { 6983 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 6984 * updated before the producer indices can be updated. 6985 */ 6986 smp_wmb(); 6987 6988 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 6989 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 6990 6991 if (tnapi != &tp->napi[1]) { 6992 tp->rx_refill = true; 6993 napi_schedule(&tp->napi[1].napi); 6994 } 6995 } 6996 6997 return received; 6998} 6999 7000static void tg3_poll_link(struct tg3 *tp) 7001{ 7002 /* handle link change and other phy events */ 7003 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 7004 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 7005 7006 if (sblk->status & SD_STATUS_LINK_CHG) { 7007 sblk->status = SD_STATUS_UPDATED | 7008 (sblk->status & ~SD_STATUS_LINK_CHG); 7009 spin_lock(&tp->lock); 7010 if (tg3_flag(tp, USE_PHYLIB)) { 7011 tw32_f(MAC_STATUS, 7012 (MAC_STATUS_SYNC_CHANGED | 7013 MAC_STATUS_CFG_CHANGED | 7014 MAC_STATUS_MI_COMPLETION | 7015 MAC_STATUS_LNKSTATE_CHANGED)); 7016 udelay(40); 7017 } else 7018 tg3_setup_phy(tp, false); 7019 spin_unlock(&tp->lock); 7020 } 7021 } 7022} 7023 7024static int tg3_rx_prodring_xfer(struct tg3 *tp, 7025 struct tg3_rx_prodring_set *dpr, 7026 struct tg3_rx_prodring_set *spr) 7027{ 7028 u32 si, di, cpycnt, src_prod_idx; 7029 int i, err = 0; 7030 7031 while (1) { 7032 src_prod_idx = spr->rx_std_prod_idx; 7033 7034 /* Make sure updates to the rx_std_buffers[] entries and the 7035 * standard producer index are seen in the correct order. 7036 */ 7037 smp_rmb(); 7038 7039 if (spr->rx_std_cons_idx == src_prod_idx) 7040 break; 7041 7042 if (spr->rx_std_cons_idx < src_prod_idx) 7043 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 7044 else 7045 cpycnt = tp->rx_std_ring_mask + 1 - 7046 spr->rx_std_cons_idx; 7047 7048 cpycnt = min(cpycnt, 7049 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 7050 7051 si = spr->rx_std_cons_idx; 7052 di = dpr->rx_std_prod_idx; 7053 7054 for (i = di; i < di + cpycnt; i++) { 7055 if (dpr->rx_std_buffers[i].data) { 7056 cpycnt = i - di; 7057 err = -ENOSPC; 7058 break; 7059 } 7060 } 7061 7062 if (!cpycnt) 7063 break; 7064 7065 /* Ensure that updates to the rx_std_buffers ring and the 7066 * shadowed hardware producer ring from tg3_recycle_skb() are 7067 * ordered correctly WRT the skb check above. 7068 */ 7069 smp_rmb(); 7070 7071 memcpy(&dpr->rx_std_buffers[di], 7072 &spr->rx_std_buffers[si], 7073 cpycnt * sizeof(struct ring_info)); 7074 7075 for (i = 0; i < cpycnt; i++, di++, si++) { 7076 struct tg3_rx_buffer_desc *sbd, *dbd; 7077 sbd = &spr->rx_std[si]; 7078 dbd = &dpr->rx_std[di]; 7079 dbd->addr_hi = sbd->addr_hi; 7080 dbd->addr_lo = sbd->addr_lo; 7081 } 7082 7083 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 7084 tp->rx_std_ring_mask; 7085 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 7086 tp->rx_std_ring_mask; 7087 } 7088 7089 while (1) { 7090 src_prod_idx = spr->rx_jmb_prod_idx; 7091 7092 /* Make sure updates to the rx_jmb_buffers[] entries and 7093 * the jumbo producer index are seen in the correct order. 7094 */ 7095 smp_rmb(); 7096 7097 if (spr->rx_jmb_cons_idx == src_prod_idx) 7098 break; 7099 7100 if (spr->rx_jmb_cons_idx < src_prod_idx) 7101 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 7102 else 7103 cpycnt = tp->rx_jmb_ring_mask + 1 - 7104 spr->rx_jmb_cons_idx; 7105 7106 cpycnt = min(cpycnt, 7107 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 7108 7109 si = spr->rx_jmb_cons_idx; 7110 di = dpr->rx_jmb_prod_idx; 7111 7112 for (i = di; i < di + cpycnt; i++) { 7113 if (dpr->rx_jmb_buffers[i].data) { 7114 cpycnt = i - di; 7115 err = -ENOSPC; 7116 break; 7117 } 7118 } 7119 7120 if (!cpycnt) 7121 break; 7122 7123 /* Ensure that updates to the rx_jmb_buffers ring and the 7124 * shadowed hardware producer ring from tg3_recycle_skb() are 7125 * ordered correctly WRT the skb check above. 7126 */ 7127 smp_rmb(); 7128 7129 memcpy(&dpr->rx_jmb_buffers[di], 7130 &spr->rx_jmb_buffers[si], 7131 cpycnt * sizeof(struct ring_info)); 7132 7133 for (i = 0; i < cpycnt; i++, di++, si++) { 7134 struct tg3_rx_buffer_desc *sbd, *dbd; 7135 sbd = &spr->rx_jmb[si].std; 7136 dbd = &dpr->rx_jmb[di].std; 7137 dbd->addr_hi = sbd->addr_hi; 7138 dbd->addr_lo = sbd->addr_lo; 7139 } 7140 7141 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 7142 tp->rx_jmb_ring_mask; 7143 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 7144 tp->rx_jmb_ring_mask; 7145 } 7146 7147 return err; 7148} 7149 7150static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 7151{ 7152 struct tg3 *tp = tnapi->tp; 7153 7154 /* run TX completion thread */ 7155 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 7156 tg3_tx(tnapi); 7157 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7158 return work_done; 7159 } 7160 7161 if (!tnapi->rx_rcb_prod_idx) 7162 return work_done; 7163 7164 /* run RX thread, within the bounds set by NAPI. 7165 * All RX "locking" is done by ensuring outside 7166 * code synchronizes with tg3->napi.poll() 7167 */ 7168 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 7169 work_done += tg3_rx(tnapi, budget - work_done); 7170 7171 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 7172 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 7173 int i, err = 0; 7174 u32 std_prod_idx = dpr->rx_std_prod_idx; 7175 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 7176 7177 tp->rx_refill = false; 7178 for (i = 1; i <= tp->rxq_cnt; i++) 7179 err |= tg3_rx_prodring_xfer(tp, dpr, 7180 &tp->napi[i].prodring); 7181 7182 wmb(); 7183 7184 if (std_prod_idx != dpr->rx_std_prod_idx) 7185 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 7186 dpr->rx_std_prod_idx); 7187 7188 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 7189 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 7190 dpr->rx_jmb_prod_idx); 7191 7192 if (err) 7193 tw32_f(HOSTCC_MODE, tp->coal_now); 7194 } 7195 7196 return work_done; 7197} 7198 7199static inline void tg3_reset_task_schedule(struct tg3 *tp) 7200{ 7201 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7202 schedule_work(&tp->reset_task); 7203} 7204 7205static inline void tg3_reset_task_cancel(struct tg3 *tp) 7206{ 7207 if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7208 cancel_work_sync(&tp->reset_task); 7209 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 7210} 7211 7212static int tg3_poll_msix(struct napi_struct *napi, int budget) 7213{ 7214 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7215 struct tg3 *tp = tnapi->tp; 7216 int work_done = 0; 7217 struct tg3_hw_status *sblk = tnapi->hw_status; 7218 7219 while (1) { 7220 work_done = tg3_poll_work(tnapi, work_done, budget); 7221 7222 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7223 goto tx_recovery; 7224 7225 if (unlikely(work_done >= budget)) 7226 break; 7227 7228 /* tp->last_tag is used in tg3_int_reenable() below 7229 * to tell the hw how much work has been processed, 7230 * so we must read it before checking for more work. 7231 */ 7232 tnapi->last_tag = sblk->status_tag; 7233 tnapi->last_irq_tag = tnapi->last_tag; 7234 rmb(); 7235 7236 /* check for RX/TX work to do */ 7237 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 7238 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 7239 7240 /* This test here is not race free, but will reduce 7241 * the number of interrupts by looping again. 7242 */ 7243 if (tnapi == &tp->napi[1] && tp->rx_refill) 7244 continue; 7245 7246 napi_complete_done(napi, work_done); 7247 /* Reenable interrupts. */ 7248 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 7249 7250 /* This test here is synchronized by napi_schedule() 7251 * and napi_complete() to close the race condition. 7252 */ 7253 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 7254 tw32(HOSTCC_MODE, tp->coalesce_mode | 7255 HOSTCC_MODE_ENABLE | 7256 tnapi->coal_now); 7257 } 7258 break; 7259 } 7260 } 7261 7262 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7263 return work_done; 7264 7265tx_recovery: 7266 /* work_done is guaranteed to be less than budget. */ 7267 napi_complete(napi); 7268 tg3_reset_task_schedule(tp); 7269 return work_done; 7270} 7271 7272static void tg3_process_error(struct tg3 *tp) 7273{ 7274 u32 val; 7275 bool real_error = false; 7276 7277 if (tg3_flag(tp, ERROR_PROCESSED)) 7278 return; 7279 7280 /* Check Flow Attention register */ 7281 val = tr32(HOSTCC_FLOW_ATTN); 7282 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 7283 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 7284 real_error = true; 7285 } 7286 7287 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 7288 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 7289 real_error = true; 7290 } 7291 7292 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 7293 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 7294 real_error = true; 7295 } 7296 7297 if (!real_error) 7298 return; 7299 7300 tg3_dump_state(tp); 7301 7302 tg3_flag_set(tp, ERROR_PROCESSED); 7303 tg3_reset_task_schedule(tp); 7304} 7305 7306static int tg3_poll(struct napi_struct *napi, int budget) 7307{ 7308 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7309 struct tg3 *tp = tnapi->tp; 7310 int work_done = 0; 7311 struct tg3_hw_status *sblk = tnapi->hw_status; 7312 7313 while (1) { 7314 if (sblk->status & SD_STATUS_ERROR) 7315 tg3_process_error(tp); 7316 7317 tg3_poll_link(tp); 7318 7319 work_done = tg3_poll_work(tnapi, work_done, budget); 7320 7321 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7322 goto tx_recovery; 7323 7324 if (unlikely(work_done >= budget)) 7325 break; 7326 7327 if (tg3_flag(tp, TAGGED_STATUS)) { 7328 /* tp->last_tag is used in tg3_int_reenable() below 7329 * to tell the hw how much work has been processed, 7330 * so we must read it before checking for more work. 7331 */ 7332 tnapi->last_tag = sblk->status_tag; 7333 tnapi->last_irq_tag = tnapi->last_tag; 7334 rmb(); 7335 } else 7336 sblk->status &= ~SD_STATUS_UPDATED; 7337 7338 if (likely(!tg3_has_work(tnapi))) { 7339 napi_complete_done(napi, work_done); 7340 tg3_int_reenable(tnapi); 7341 break; 7342 } 7343 } 7344 7345 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7346 return work_done; 7347 7348tx_recovery: 7349 /* work_done is guaranteed to be less than budget. */ 7350 napi_complete(napi); 7351 tg3_reset_task_schedule(tp); 7352 return work_done; 7353} 7354 7355static void tg3_napi_disable(struct tg3 *tp) 7356{ 7357 int i; 7358 7359 for (i = tp->irq_cnt - 1; i >= 0; i--) 7360 napi_disable(&tp->napi[i].napi); 7361} 7362 7363static void tg3_napi_enable(struct tg3 *tp) 7364{ 7365 int i; 7366 7367 for (i = 0; i < tp->irq_cnt; i++) 7368 napi_enable(&tp->napi[i].napi); 7369} 7370 7371static void tg3_napi_init(struct tg3 *tp) 7372{ 7373 int i; 7374 7375 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll); 7376 for (i = 1; i < tp->irq_cnt; i++) 7377 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix); 7378} 7379 7380static void tg3_napi_fini(struct tg3 *tp) 7381{ 7382 int i; 7383 7384 for (i = 0; i < tp->irq_cnt; i++) 7385 netif_napi_del(&tp->napi[i].napi); 7386} 7387 7388static inline void tg3_netif_stop(struct tg3 *tp) 7389{ 7390 netif_trans_update(tp->dev); /* prevent tx timeout */ 7391 tg3_napi_disable(tp); 7392 netif_carrier_off(tp->dev); 7393 netif_tx_disable(tp->dev); 7394} 7395 7396/* tp->lock must be held */ 7397static inline void tg3_netif_start(struct tg3 *tp) 7398{ 7399 tg3_ptp_resume(tp); 7400 7401 /* NOTE: unconditional netif_tx_wake_all_queues is only 7402 * appropriate so long as all callers are assured to 7403 * have free tx slots (such as after tg3_init_hw) 7404 */ 7405 netif_tx_wake_all_queues(tp->dev); 7406 7407 if (tp->link_up) 7408 netif_carrier_on(tp->dev); 7409 7410 tg3_napi_enable(tp); 7411 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 7412 tg3_enable_ints(tp); 7413} 7414 7415static void tg3_irq_quiesce(struct tg3 *tp) 7416 __releases(tp->lock) 7417 __acquires(tp->lock) 7418{ 7419 int i; 7420 7421 BUG_ON(tp->irq_sync); 7422 7423 tp->irq_sync = 1; 7424 smp_mb(); 7425 7426 spin_unlock_bh(&tp->lock); 7427 7428 for (i = 0; i < tp->irq_cnt; i++) 7429 synchronize_irq(tp->napi[i].irq_vec); 7430 7431 spin_lock_bh(&tp->lock); 7432} 7433 7434/* Fully shutdown all tg3 driver activity elsewhere in the system. 7435 * If irq_sync is non-zero, then the IRQ handler must be synchronized 7436 * with as well. Most of the time, this is not necessary except when 7437 * shutting down the device. 7438 */ 7439static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 7440{ 7441 spin_lock_bh(&tp->lock); 7442 if (irq_sync) 7443 tg3_irq_quiesce(tp); 7444} 7445 7446static inline void tg3_full_unlock(struct tg3 *tp) 7447{ 7448 spin_unlock_bh(&tp->lock); 7449} 7450 7451/* One-shot MSI handler - Chip automatically disables interrupt 7452 * after sending MSI so driver doesn't have to do it. 7453 */ 7454static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 7455{ 7456 struct tg3_napi *tnapi = dev_id; 7457 struct tg3 *tp = tnapi->tp; 7458 7459 prefetch(tnapi->hw_status); 7460 if (tnapi->rx_rcb) 7461 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7462 7463 if (likely(!tg3_irq_sync(tp))) 7464 napi_schedule(&tnapi->napi); 7465 7466 return IRQ_HANDLED; 7467} 7468 7469/* MSI ISR - No need to check for interrupt sharing and no need to 7470 * flush status block and interrupt mailbox. PCI ordering rules 7471 * guarantee that MSI will arrive after the status block. 7472 */ 7473static irqreturn_t tg3_msi(int irq, void *dev_id) 7474{ 7475 struct tg3_napi *tnapi = dev_id; 7476 struct tg3 *tp = tnapi->tp; 7477 7478 prefetch(tnapi->hw_status); 7479 if (tnapi->rx_rcb) 7480 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7481 /* 7482 * Writing any value to intr-mbox-0 clears PCI INTA# and 7483 * chip-internal interrupt pending events. 7484 * Writing non-zero to intr-mbox-0 additional tells the 7485 * NIC to stop sending us irqs, engaging "in-intr-handler" 7486 * event coalescing. 7487 */ 7488 tw32_mailbox(tnapi->int_mbox, 0x00000001); 7489 if (likely(!tg3_irq_sync(tp))) 7490 napi_schedule(&tnapi->napi); 7491 7492 return IRQ_RETVAL(1); 7493} 7494 7495static irqreturn_t tg3_interrupt(int irq, void *dev_id) 7496{ 7497 struct tg3_napi *tnapi = dev_id; 7498 struct tg3 *tp = tnapi->tp; 7499 struct tg3_hw_status *sblk = tnapi->hw_status; 7500 unsigned int handled = 1; 7501 7502 /* In INTx mode, it is possible for the interrupt to arrive at 7503 * the CPU before the status block posted prior to the interrupt. 7504 * Reading the PCI State register will confirm whether the 7505 * interrupt is ours and will flush the status block. 7506 */ 7507 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 7508 if (tg3_flag(tp, CHIP_RESETTING) || 7509 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7510 handled = 0; 7511 goto out; 7512 } 7513 } 7514 7515 /* 7516 * Writing any value to intr-mbox-0 clears PCI INTA# and 7517 * chip-internal interrupt pending events. 7518 * Writing non-zero to intr-mbox-0 additional tells the 7519 * NIC to stop sending us irqs, engaging "in-intr-handler" 7520 * event coalescing. 7521 * 7522 * Flush the mailbox to de-assert the IRQ immediately to prevent 7523 * spurious interrupts. The flush impacts performance but 7524 * excessive spurious interrupts can be worse in some cases. 7525 */ 7526 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7527 if (tg3_irq_sync(tp)) 7528 goto out; 7529 sblk->status &= ~SD_STATUS_UPDATED; 7530 if (likely(tg3_has_work(tnapi))) { 7531 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7532 napi_schedule(&tnapi->napi); 7533 } else { 7534 /* No work, shared interrupt perhaps? re-enable 7535 * interrupts, and flush that PCI write 7536 */ 7537 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 7538 0x00000000); 7539 } 7540out: 7541 return IRQ_RETVAL(handled); 7542} 7543 7544static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 7545{ 7546 struct tg3_napi *tnapi = dev_id; 7547 struct tg3 *tp = tnapi->tp; 7548 struct tg3_hw_status *sblk = tnapi->hw_status; 7549 unsigned int handled = 1; 7550 7551 /* In INTx mode, it is possible for the interrupt to arrive at 7552 * the CPU before the status block posted prior to the interrupt. 7553 * Reading the PCI State register will confirm whether the 7554 * interrupt is ours and will flush the status block. 7555 */ 7556 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 7557 if (tg3_flag(tp, CHIP_RESETTING) || 7558 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7559 handled = 0; 7560 goto out; 7561 } 7562 } 7563 7564 /* 7565 * writing any value to intr-mbox-0 clears PCI INTA# and 7566 * chip-internal interrupt pending events. 7567 * writing non-zero to intr-mbox-0 additional tells the 7568 * NIC to stop sending us irqs, engaging "in-intr-handler" 7569 * event coalescing. 7570 * 7571 * Flush the mailbox to de-assert the IRQ immediately to prevent 7572 * spurious interrupts. The flush impacts performance but 7573 * excessive spurious interrupts can be worse in some cases. 7574 */ 7575 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7576 7577 /* 7578 * In a shared interrupt configuration, sometimes other devices' 7579 * interrupts will scream. We record the current status tag here 7580 * so that the above check can report that the screaming interrupts 7581 * are unhandled. Eventually they will be silenced. 7582 */ 7583 tnapi->last_irq_tag = sblk->status_tag; 7584 7585 if (tg3_irq_sync(tp)) 7586 goto out; 7587 7588 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7589 7590 napi_schedule(&tnapi->napi); 7591 7592out: 7593 return IRQ_RETVAL(handled); 7594} 7595 7596/* ISR for interrupt test */ 7597static irqreturn_t tg3_test_isr(int irq, void *dev_id) 7598{ 7599 struct tg3_napi *tnapi = dev_id; 7600 struct tg3 *tp = tnapi->tp; 7601 struct tg3_hw_status *sblk = tnapi->hw_status; 7602 7603 if ((sblk->status & SD_STATUS_UPDATED) || 7604 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7605 tg3_disable_ints(tp); 7606 return IRQ_RETVAL(1); 7607 } 7608 return IRQ_RETVAL(0); 7609} 7610 7611#ifdef CONFIG_NET_POLL_CONTROLLER 7612static void tg3_poll_controller(struct net_device *dev) 7613{ 7614 int i; 7615 struct tg3 *tp = netdev_priv(dev); 7616 7617 if (tg3_irq_sync(tp)) 7618 return; 7619 7620 for (i = 0; i < tp->irq_cnt; i++) 7621 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 7622} 7623#endif 7624 7625static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue) 7626{ 7627 struct tg3 *tp = netdev_priv(dev); 7628 7629 if (netif_msg_tx_err(tp)) { 7630 netdev_err(dev, "transmit timed out, resetting\n"); 7631 tg3_dump_state(tp); 7632 } 7633 7634 tg3_reset_task_schedule(tp); 7635} 7636 7637/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 7638static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 7639{ 7640 u32 base = (u32) mapping & 0xffffffff; 7641 7642 return base + len + 8 < base; 7643} 7644 7645/* Test for TSO DMA buffers that cross into regions which are within MSS bytes 7646 * of any 4GB boundaries: 4G, 8G, etc 7647 */ 7648static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7649 u32 len, u32 mss) 7650{ 7651 if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) { 7652 u32 base = (u32) mapping & 0xffffffff; 7653 7654 return ((base + len + (mss & 0x3fff)) < base); 7655 } 7656 return 0; 7657} 7658 7659/* Test for DMA addresses > 40-bit */ 7660static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7661 int len) 7662{ 7663#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 7664 if (tg3_flag(tp, 40BIT_DMA_BUG)) 7665 return ((u64) mapping + len) > DMA_BIT_MASK(40); 7666 return 0; 7667#else 7668 return 0; 7669#endif 7670} 7671 7672static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 7673 dma_addr_t mapping, u32 len, u32 flags, 7674 u32 mss, u32 vlan) 7675{ 7676 txbd->addr_hi = ((u64) mapping >> 32); 7677 txbd->addr_lo = ((u64) mapping & 0xffffffff); 7678 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 7679 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 7680} 7681 7682static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 7683 dma_addr_t map, u32 len, u32 flags, 7684 u32 mss, u32 vlan) 7685{ 7686 struct tg3 *tp = tnapi->tp; 7687 bool hwbug = false; 7688 7689 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 7690 hwbug = true; 7691 7692 if (tg3_4g_overflow_test(map, len)) 7693 hwbug = true; 7694 7695 if (tg3_4g_tso_overflow_test(tp, map, len, mss)) 7696 hwbug = true; 7697 7698 if (tg3_40bit_overflow_test(tp, map, len)) 7699 hwbug = true; 7700 7701 if (tp->dma_limit) { 7702 u32 prvidx = *entry; 7703 u32 tmp_flag = flags & ~TXD_FLAG_END; 7704 while (len > tp->dma_limit && *budget) { 7705 u32 frag_len = tp->dma_limit; 7706 len -= tp->dma_limit; 7707 7708 /* Avoid the 8byte DMA problem */ 7709 if (len <= 8) { 7710 len += tp->dma_limit / 2; 7711 frag_len = tp->dma_limit / 2; 7712 } 7713 7714 tnapi->tx_buffers[*entry].fragmented = true; 7715 7716 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7717 frag_len, tmp_flag, mss, vlan); 7718 *budget -= 1; 7719 prvidx = *entry; 7720 *entry = NEXT_TX(*entry); 7721 7722 map += frag_len; 7723 } 7724 7725 if (len) { 7726 if (*budget) { 7727 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7728 len, flags, mss, vlan); 7729 *budget -= 1; 7730 *entry = NEXT_TX(*entry); 7731 } else { 7732 hwbug = true; 7733 tnapi->tx_buffers[prvidx].fragmented = false; 7734 } 7735 } 7736 } else { 7737 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7738 len, flags, mss, vlan); 7739 *entry = NEXT_TX(*entry); 7740 } 7741 7742 return hwbug; 7743} 7744 7745static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 7746{ 7747 int i; 7748 struct sk_buff *skb; 7749 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 7750 7751 skb = txb->skb; 7752 txb->skb = NULL; 7753 7754 dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping), 7755 skb_headlen(skb), DMA_TO_DEVICE); 7756 7757 while (txb->fragmented) { 7758 txb->fragmented = false; 7759 entry = NEXT_TX(entry); 7760 txb = &tnapi->tx_buffers[entry]; 7761 } 7762 7763 for (i = 0; i <= last; i++) { 7764 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7765 7766 entry = NEXT_TX(entry); 7767 txb = &tnapi->tx_buffers[entry]; 7768 7769 dma_unmap_page(&tnapi->tp->pdev->dev, 7770 dma_unmap_addr(txb, mapping), 7771 skb_frag_size(frag), DMA_TO_DEVICE); 7772 7773 while (txb->fragmented) { 7774 txb->fragmented = false; 7775 entry = NEXT_TX(entry); 7776 txb = &tnapi->tx_buffers[entry]; 7777 } 7778 } 7779} 7780 7781/* Workaround 4GB and 40-bit hardware DMA bugs. */ 7782static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 7783 struct sk_buff **pskb, 7784 u32 *entry, u32 *budget, 7785 u32 base_flags, u32 mss, u32 vlan) 7786{ 7787 struct tg3 *tp = tnapi->tp; 7788 struct sk_buff *new_skb, *skb = *pskb; 7789 dma_addr_t new_addr = 0; 7790 int ret = 0; 7791 7792 if (tg3_asic_rev(tp) != ASIC_REV_5701) 7793 new_skb = skb_copy(skb, GFP_ATOMIC); 7794 else { 7795 int more_headroom = 4 - ((unsigned long)skb->data & 3); 7796 7797 new_skb = skb_copy_expand(skb, 7798 skb_headroom(skb) + more_headroom, 7799 skb_tailroom(skb), GFP_ATOMIC); 7800 } 7801 7802 if (!new_skb) { 7803 ret = -1; 7804 } else { 7805 /* New SKB is guaranteed to be linear. */ 7806 new_addr = dma_map_single(&tp->pdev->dev, new_skb->data, 7807 new_skb->len, DMA_TO_DEVICE); 7808 /* Make sure the mapping succeeded */ 7809 if (dma_mapping_error(&tp->pdev->dev, new_addr)) { 7810 dev_kfree_skb_any(new_skb); 7811 ret = -1; 7812 } else { 7813 u32 save_entry = *entry; 7814 7815 base_flags |= TXD_FLAG_END; 7816 7817 tnapi->tx_buffers[*entry].skb = new_skb; 7818 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 7819 mapping, new_addr); 7820 7821 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 7822 new_skb->len, base_flags, 7823 mss, vlan)) { 7824 tg3_tx_skb_unmap(tnapi, save_entry, -1); 7825 dev_kfree_skb_any(new_skb); 7826 ret = -1; 7827 } 7828 } 7829 } 7830 7831 dev_consume_skb_any(skb); 7832 *pskb = new_skb; 7833 return ret; 7834} 7835 7836static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb) 7837{ 7838 /* Check if we will never have enough descriptors, 7839 * as gso_segs can be more than current ring size 7840 */ 7841 return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3; 7842} 7843 7844static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 7845 7846/* Use GSO to workaround all TSO packets that meet HW bug conditions 7847 * indicated in tg3_tx_frag_set() 7848 */ 7849static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi, 7850 struct netdev_queue *txq, struct sk_buff *skb) 7851{ 7852 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 7853 struct sk_buff *segs, *seg, *next; 7854 7855 /* Estimate the number of fragments in the worst case */ 7856 if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) { 7857 netif_tx_stop_queue(txq); 7858 7859 /* netif_tx_stop_queue() must be done before checking 7860 * checking tx index in tg3_tx_avail() below, because in 7861 * tg3_tx(), we update tx index before checking for 7862 * netif_tx_queue_stopped(). 7863 */ 7864 smp_mb(); 7865 if (tg3_tx_avail(tnapi) <= frag_cnt_est) 7866 return NETDEV_TX_BUSY; 7867 7868 netif_tx_wake_queue(txq); 7869 } 7870 7871 segs = skb_gso_segment(skb, tp->dev->features & 7872 ~(NETIF_F_TSO | NETIF_F_TSO6)); 7873 if (IS_ERR(segs) || !segs) 7874 goto tg3_tso_bug_end; 7875 7876 skb_list_walk_safe(segs, seg, next) { 7877 skb_mark_not_on_list(seg); 7878 tg3_start_xmit(seg, tp->dev); 7879 } 7880 7881tg3_tso_bug_end: 7882 dev_consume_skb_any(skb); 7883 7884 return NETDEV_TX_OK; 7885} 7886 7887/* hard_start_xmit for all devices */ 7888static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 7889{ 7890 struct tg3 *tp = netdev_priv(dev); 7891 u32 len, entry, base_flags, mss, vlan = 0; 7892 u32 budget; 7893 int i = -1, would_hit_hwbug; 7894 dma_addr_t mapping; 7895 struct tg3_napi *tnapi; 7896 struct netdev_queue *txq; 7897 unsigned int last; 7898 struct iphdr *iph = NULL; 7899 struct tcphdr *tcph = NULL; 7900 __sum16 tcp_csum = 0, ip_csum = 0; 7901 __be16 ip_tot_len = 0; 7902 7903 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 7904 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 7905 if (tg3_flag(tp, ENABLE_TSS)) 7906 tnapi++; 7907 7908 budget = tg3_tx_avail(tnapi); 7909 7910 /* We are running in BH disabled context with netif_tx_lock 7911 * and TX reclaim runs via tp->napi.poll inside of a software 7912 * interrupt. Furthermore, IRQ processing runs lockless so we have 7913 * no IRQ context deadlocks to worry about either. Rejoice! 7914 */ 7915 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 7916 if (!netif_tx_queue_stopped(txq)) { 7917 netif_tx_stop_queue(txq); 7918 7919 /* This is a hard error, log it. */ 7920 netdev_err(dev, 7921 "BUG! Tx Ring full when queue awake!\n"); 7922 } 7923 return NETDEV_TX_BUSY; 7924 } 7925 7926 entry = tnapi->tx_prod; 7927 base_flags = 0; 7928 7929 mss = skb_shinfo(skb)->gso_size; 7930 if (mss) { 7931 u32 tcp_opt_len, hdr_len; 7932 7933 if (skb_cow_head(skb, 0)) 7934 goto drop; 7935 7936 iph = ip_hdr(skb); 7937 tcp_opt_len = tcp_optlen(skb); 7938 7939 hdr_len = skb_tcp_all_headers(skb) - ETH_HLEN; 7940 7941 /* HW/FW can not correctly segment packets that have been 7942 * vlan encapsulated. 7943 */ 7944 if (skb->protocol == htons(ETH_P_8021Q) || 7945 skb->protocol == htons(ETH_P_8021AD)) { 7946 if (tg3_tso_bug_gso_check(tnapi, skb)) 7947 return tg3_tso_bug(tp, tnapi, txq, skb); 7948 goto drop; 7949 } 7950 7951 if (!skb_is_gso_v6(skb)) { 7952 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7953 tg3_flag(tp, TSO_BUG)) { 7954 if (tg3_tso_bug_gso_check(tnapi, skb)) 7955 return tg3_tso_bug(tp, tnapi, txq, skb); 7956 goto drop; 7957 } 7958 ip_csum = iph->check; 7959 ip_tot_len = iph->tot_len; 7960 iph->check = 0; 7961 iph->tot_len = htons(mss + hdr_len); 7962 } 7963 7964 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 7965 TXD_FLAG_CPU_POST_DMA); 7966 7967 tcph = tcp_hdr(skb); 7968 tcp_csum = tcph->check; 7969 7970 if (tg3_flag(tp, HW_TSO_1) || 7971 tg3_flag(tp, HW_TSO_2) || 7972 tg3_flag(tp, HW_TSO_3)) { 7973 tcph->check = 0; 7974 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 7975 } else { 7976 tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 7977 0, IPPROTO_TCP, 0); 7978 } 7979 7980 if (tg3_flag(tp, HW_TSO_3)) { 7981 mss |= (hdr_len & 0xc) << 12; 7982 if (hdr_len & 0x10) 7983 base_flags |= 0x00000010; 7984 base_flags |= (hdr_len & 0x3e0) << 5; 7985 } else if (tg3_flag(tp, HW_TSO_2)) 7986 mss |= hdr_len << 9; 7987 else if (tg3_flag(tp, HW_TSO_1) || 7988 tg3_asic_rev(tp) == ASIC_REV_5705) { 7989 if (tcp_opt_len || iph->ihl > 5) { 7990 int tsflags; 7991 7992 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 7993 mss |= (tsflags << 11); 7994 } 7995 } else { 7996 if (tcp_opt_len || iph->ihl > 5) { 7997 int tsflags; 7998 7999 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8000 base_flags |= tsflags << 12; 8001 } 8002 } 8003 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { 8004 /* HW/FW can not correctly checksum packets that have been 8005 * vlan encapsulated. 8006 */ 8007 if (skb->protocol == htons(ETH_P_8021Q) || 8008 skb->protocol == htons(ETH_P_8021AD)) { 8009 if (skb_checksum_help(skb)) 8010 goto drop; 8011 } else { 8012 base_flags |= TXD_FLAG_TCPUDP_CSUM; 8013 } 8014 } 8015 8016 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 8017 !mss && skb->len > VLAN_ETH_FRAME_LEN) 8018 base_flags |= TXD_FLAG_JMB_PKT; 8019 8020 if (skb_vlan_tag_present(skb)) { 8021 base_flags |= TXD_FLAG_VLAN; 8022 vlan = skb_vlan_tag_get(skb); 8023 } 8024 8025 if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && 8026 tg3_flag(tp, TX_TSTAMP_EN)) { 8027 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 8028 base_flags |= TXD_FLAG_HWTSTAMP; 8029 } 8030 8031 len = skb_headlen(skb); 8032 8033 mapping = dma_map_single(&tp->pdev->dev, skb->data, len, 8034 DMA_TO_DEVICE); 8035 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8036 goto drop; 8037 8038 8039 tnapi->tx_buffers[entry].skb = skb; 8040 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 8041 8042 would_hit_hwbug = 0; 8043 8044 if (tg3_flag(tp, 5701_DMA_BUG)) 8045 would_hit_hwbug = 1; 8046 8047 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 8048 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 8049 mss, vlan)) { 8050 would_hit_hwbug = 1; 8051 } else if (skb_shinfo(skb)->nr_frags > 0) { 8052 u32 tmp_mss = mss; 8053 8054 if (!tg3_flag(tp, HW_TSO_1) && 8055 !tg3_flag(tp, HW_TSO_2) && 8056 !tg3_flag(tp, HW_TSO_3)) 8057 tmp_mss = 0; 8058 8059 /* Now loop through additional data 8060 * fragments, and queue them. 8061 */ 8062 last = skb_shinfo(skb)->nr_frags - 1; 8063 for (i = 0; i <= last; i++) { 8064 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 8065 8066 len = skb_frag_size(frag); 8067 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 8068 len, DMA_TO_DEVICE); 8069 8070 tnapi->tx_buffers[entry].skb = NULL; 8071 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 8072 mapping); 8073 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8074 goto dma_error; 8075 8076 if (!budget || 8077 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 8078 len, base_flags | 8079 ((i == last) ? TXD_FLAG_END : 0), 8080 tmp_mss, vlan)) { 8081 would_hit_hwbug = 1; 8082 break; 8083 } 8084 } 8085 } 8086 8087 if (would_hit_hwbug) { 8088 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 8089 8090 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) { 8091 /* If it's a TSO packet, do GSO instead of 8092 * allocating and copying to a large linear SKB 8093 */ 8094 if (ip_tot_len) { 8095 iph->check = ip_csum; 8096 iph->tot_len = ip_tot_len; 8097 } 8098 tcph->check = tcp_csum; 8099 return tg3_tso_bug(tp, tnapi, txq, skb); 8100 } 8101 8102 /* If the workaround fails due to memory/mapping 8103 * failure, silently drop this packet. 8104 */ 8105 entry = tnapi->tx_prod; 8106 budget = tg3_tx_avail(tnapi); 8107 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 8108 base_flags, mss, vlan)) 8109 goto drop_nofree; 8110 } 8111 8112 skb_tx_timestamp(skb); 8113 netdev_tx_sent_queue(txq, skb->len); 8114 8115 /* Sync BD data before updating mailbox */ 8116 wmb(); 8117 8118 tnapi->tx_prod = entry; 8119 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 8120 netif_tx_stop_queue(txq); 8121 8122 /* netif_tx_stop_queue() must be done before checking 8123 * checking tx index in tg3_tx_avail() below, because in 8124 * tg3_tx(), we update tx index before checking for 8125 * netif_tx_queue_stopped(). 8126 */ 8127 smp_mb(); 8128 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 8129 netif_tx_wake_queue(txq); 8130 } 8131 8132 if (!netdev_xmit_more() || netif_xmit_stopped(txq)) { 8133 /* Packets are ready, update Tx producer idx on card. */ 8134 tw32_tx_mbox(tnapi->prodmbox, entry); 8135 } 8136 8137 return NETDEV_TX_OK; 8138 8139dma_error: 8140 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 8141 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 8142drop: 8143 dev_kfree_skb_any(skb); 8144drop_nofree: 8145 tp->tx_dropped++; 8146 return NETDEV_TX_OK; 8147} 8148 8149static void tg3_mac_loopback(struct tg3 *tp, bool enable) 8150{ 8151 if (enable) { 8152 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 8153 MAC_MODE_PORT_MODE_MASK); 8154 8155 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 8156 8157 if (!tg3_flag(tp, 5705_PLUS)) 8158 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 8159 8160 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 8161 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 8162 else 8163 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 8164 } else { 8165 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 8166 8167 if (tg3_flag(tp, 5705_PLUS) || 8168 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 8169 tg3_asic_rev(tp) == ASIC_REV_5700) 8170 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 8171 } 8172 8173 tw32(MAC_MODE, tp->mac_mode); 8174 udelay(40); 8175} 8176 8177static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 8178{ 8179 u32 val, bmcr, mac_mode, ptest = 0; 8180 8181 tg3_phy_toggle_apd(tp, false); 8182 tg3_phy_toggle_automdix(tp, false); 8183 8184 if (extlpbk && tg3_phy_set_extloopbk(tp)) 8185 return -EIO; 8186 8187 bmcr = BMCR_FULLDPLX; 8188 switch (speed) { 8189 case SPEED_10: 8190 break; 8191 case SPEED_100: 8192 bmcr |= BMCR_SPEED100; 8193 break; 8194 case SPEED_1000: 8195 default: 8196 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 8197 speed = SPEED_100; 8198 bmcr |= BMCR_SPEED100; 8199 } else { 8200 speed = SPEED_1000; 8201 bmcr |= BMCR_SPEED1000; 8202 } 8203 } 8204 8205 if (extlpbk) { 8206 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 8207 tg3_readphy(tp, MII_CTRL1000, &val); 8208 val |= CTL1000_AS_MASTER | 8209 CTL1000_ENABLE_MASTER; 8210 tg3_writephy(tp, MII_CTRL1000, val); 8211 } else { 8212 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 8213 MII_TG3_FET_PTEST_TRIM_2; 8214 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 8215 } 8216 } else 8217 bmcr |= BMCR_LOOPBACK; 8218 8219 tg3_writephy(tp, MII_BMCR, bmcr); 8220 8221 /* The write needs to be flushed for the FETs */ 8222 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 8223 tg3_readphy(tp, MII_BMCR, &bmcr); 8224 8225 udelay(40); 8226 8227 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 8228 tg3_asic_rev(tp) == ASIC_REV_5785) { 8229 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 8230 MII_TG3_FET_PTEST_FRC_TX_LINK | 8231 MII_TG3_FET_PTEST_FRC_TX_LOCK); 8232 8233 /* The write needs to be flushed for the AC131 */ 8234 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 8235 } 8236 8237 /* Reset to prevent losing 1st rx packet intermittently */ 8238 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 8239 tg3_flag(tp, 5780_CLASS)) { 8240 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8241 udelay(10); 8242 tw32_f(MAC_RX_MODE, tp->rx_mode); 8243 } 8244 8245 mac_mode = tp->mac_mode & 8246 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 8247 if (speed == SPEED_1000) 8248 mac_mode |= MAC_MODE_PORT_MODE_GMII; 8249 else 8250 mac_mode |= MAC_MODE_PORT_MODE_MII; 8251 8252 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 8253 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 8254 8255 if (masked_phy_id == TG3_PHY_ID_BCM5401) 8256 mac_mode &= ~MAC_MODE_LINK_POLARITY; 8257 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 8258 mac_mode |= MAC_MODE_LINK_POLARITY; 8259 8260 tg3_writephy(tp, MII_TG3_EXT_CTRL, 8261 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 8262 } 8263 8264 tw32(MAC_MODE, mac_mode); 8265 udelay(40); 8266 8267 return 0; 8268} 8269 8270static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 8271{ 8272 struct tg3 *tp = netdev_priv(dev); 8273 8274 if (features & NETIF_F_LOOPBACK) { 8275 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 8276 return; 8277 8278 spin_lock_bh(&tp->lock); 8279 tg3_mac_loopback(tp, true); 8280 netif_carrier_on(tp->dev); 8281 spin_unlock_bh(&tp->lock); 8282 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 8283 } else { 8284 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 8285 return; 8286 8287 spin_lock_bh(&tp->lock); 8288 tg3_mac_loopback(tp, false); 8289 /* Force link status check */ 8290 tg3_setup_phy(tp, true); 8291 spin_unlock_bh(&tp->lock); 8292 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 8293 } 8294} 8295 8296static netdev_features_t tg3_fix_features(struct net_device *dev, 8297 netdev_features_t features) 8298{ 8299 struct tg3 *tp = netdev_priv(dev); 8300 8301 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 8302 features &= ~NETIF_F_ALL_TSO; 8303 8304 return features; 8305} 8306 8307static int tg3_set_features(struct net_device *dev, netdev_features_t features) 8308{ 8309 netdev_features_t changed = dev->features ^ features; 8310 8311 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 8312 tg3_set_loopback(dev, features); 8313 8314 return 0; 8315} 8316 8317static void tg3_rx_prodring_free(struct tg3 *tp, 8318 struct tg3_rx_prodring_set *tpr) 8319{ 8320 int i; 8321 8322 if (tpr != &tp->napi[0].prodring) { 8323 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 8324 i = (i + 1) & tp->rx_std_ring_mask) 8325 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8326 tp->rx_pkt_map_sz); 8327 8328 if (tg3_flag(tp, JUMBO_CAPABLE)) { 8329 for (i = tpr->rx_jmb_cons_idx; 8330 i != tpr->rx_jmb_prod_idx; 8331 i = (i + 1) & tp->rx_jmb_ring_mask) { 8332 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8333 TG3_RX_JMB_MAP_SZ); 8334 } 8335 } 8336 8337 return; 8338 } 8339 8340 for (i = 0; i <= tp->rx_std_ring_mask; i++) 8341 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8342 tp->rx_pkt_map_sz); 8343 8344 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8345 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 8346 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8347 TG3_RX_JMB_MAP_SZ); 8348 } 8349} 8350 8351/* Initialize rx rings for packet processing. 8352 * 8353 * The chip has been shut down and the driver detached from 8354 * the networking, so no interrupts or new tx packets will 8355 * end up in the driver. tp->{tx,}lock are held and thus 8356 * we may not sleep. 8357 */ 8358static int tg3_rx_prodring_alloc(struct tg3 *tp, 8359 struct tg3_rx_prodring_set *tpr) 8360{ 8361 u32 i, rx_pkt_dma_sz; 8362 8363 tpr->rx_std_cons_idx = 0; 8364 tpr->rx_std_prod_idx = 0; 8365 tpr->rx_jmb_cons_idx = 0; 8366 tpr->rx_jmb_prod_idx = 0; 8367 8368 if (tpr != &tp->napi[0].prodring) { 8369 memset(&tpr->rx_std_buffers[0], 0, 8370 TG3_RX_STD_BUFF_RING_SIZE(tp)); 8371 if (tpr->rx_jmb_buffers) 8372 memset(&tpr->rx_jmb_buffers[0], 0, 8373 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 8374 goto done; 8375 } 8376 8377 /* Zero out all descriptors. */ 8378 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 8379 8380 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 8381 if (tg3_flag(tp, 5780_CLASS) && 8382 tp->dev->mtu > ETH_DATA_LEN) 8383 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 8384 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 8385 8386 /* Initialize invariants of the rings, we only set this 8387 * stuff once. This works because the card does not 8388 * write into the rx buffer posting rings. 8389 */ 8390 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 8391 struct tg3_rx_buffer_desc *rxd; 8392 8393 rxd = &tpr->rx_std[i]; 8394 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 8395 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 8396 rxd->opaque = (RXD_OPAQUE_RING_STD | 8397 (i << RXD_OPAQUE_INDEX_SHIFT)); 8398 } 8399 8400 /* Now allocate fresh SKBs for each rx ring. */ 8401 for (i = 0; i < tp->rx_pending; i++) { 8402 unsigned int frag_size; 8403 8404 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 8405 &frag_size) < 0) { 8406 netdev_warn(tp->dev, 8407 "Using a smaller RX standard ring. Only " 8408 "%d out of %d buffers were allocated " 8409 "successfully\n", i, tp->rx_pending); 8410 if (i == 0) 8411 goto initfail; 8412 tp->rx_pending = i; 8413 break; 8414 } 8415 } 8416 8417 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8418 goto done; 8419 8420 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 8421 8422 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 8423 goto done; 8424 8425 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 8426 struct tg3_rx_buffer_desc *rxd; 8427 8428 rxd = &tpr->rx_jmb[i].std; 8429 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 8430 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 8431 RXD_FLAG_JUMBO; 8432 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 8433 (i << RXD_OPAQUE_INDEX_SHIFT)); 8434 } 8435 8436 for (i = 0; i < tp->rx_jumbo_pending; i++) { 8437 unsigned int frag_size; 8438 8439 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 8440 &frag_size) < 0) { 8441 netdev_warn(tp->dev, 8442 "Using a smaller RX jumbo ring. Only %d " 8443 "out of %d buffers were allocated " 8444 "successfully\n", i, tp->rx_jumbo_pending); 8445 if (i == 0) 8446 goto initfail; 8447 tp->rx_jumbo_pending = i; 8448 break; 8449 } 8450 } 8451 8452done: 8453 return 0; 8454 8455initfail: 8456 tg3_rx_prodring_free(tp, tpr); 8457 return -ENOMEM; 8458} 8459 8460static void tg3_rx_prodring_fini(struct tg3 *tp, 8461 struct tg3_rx_prodring_set *tpr) 8462{ 8463 kfree(tpr->rx_std_buffers); 8464 tpr->rx_std_buffers = NULL; 8465 kfree(tpr->rx_jmb_buffers); 8466 tpr->rx_jmb_buffers = NULL; 8467 if (tpr->rx_std) { 8468 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 8469 tpr->rx_std, tpr->rx_std_mapping); 8470 tpr->rx_std = NULL; 8471 } 8472 if (tpr->rx_jmb) { 8473 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 8474 tpr->rx_jmb, tpr->rx_jmb_mapping); 8475 tpr->rx_jmb = NULL; 8476 } 8477} 8478 8479static int tg3_rx_prodring_init(struct tg3 *tp, 8480 struct tg3_rx_prodring_set *tpr) 8481{ 8482 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 8483 GFP_KERNEL); 8484 if (!tpr->rx_std_buffers) 8485 return -ENOMEM; 8486 8487 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 8488 TG3_RX_STD_RING_BYTES(tp), 8489 &tpr->rx_std_mapping, 8490 GFP_KERNEL); 8491 if (!tpr->rx_std) 8492 goto err_out; 8493 8494 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8495 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 8496 GFP_KERNEL); 8497 if (!tpr->rx_jmb_buffers) 8498 goto err_out; 8499 8500 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 8501 TG3_RX_JMB_RING_BYTES(tp), 8502 &tpr->rx_jmb_mapping, 8503 GFP_KERNEL); 8504 if (!tpr->rx_jmb) 8505 goto err_out; 8506 } 8507 8508 return 0; 8509 8510err_out: 8511 tg3_rx_prodring_fini(tp, tpr); 8512 return -ENOMEM; 8513} 8514 8515/* Free up pending packets in all rx/tx rings. 8516 * 8517 * The chip has been shut down and the driver detached from 8518 * the networking, so no interrupts or new tx packets will 8519 * end up in the driver. tp->{tx,}lock is not held and we are not 8520 * in an interrupt context and thus may sleep. 8521 */ 8522static void tg3_free_rings(struct tg3 *tp) 8523{ 8524 int i, j; 8525 8526 for (j = 0; j < tp->irq_cnt; j++) { 8527 struct tg3_napi *tnapi = &tp->napi[j]; 8528 8529 tg3_rx_prodring_free(tp, &tnapi->prodring); 8530 8531 if (!tnapi->tx_buffers) 8532 continue; 8533 8534 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 8535 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 8536 8537 if (!skb) 8538 continue; 8539 8540 tg3_tx_skb_unmap(tnapi, i, 8541 skb_shinfo(skb)->nr_frags - 1); 8542 8543 dev_consume_skb_any(skb); 8544 } 8545 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 8546 } 8547} 8548 8549/* Initialize tx/rx rings for packet processing. 8550 * 8551 * The chip has been shut down and the driver detached from 8552 * the networking, so no interrupts or new tx packets will 8553 * end up in the driver. tp->{tx,}lock are held and thus 8554 * we may not sleep. 8555 */ 8556static int tg3_init_rings(struct tg3 *tp) 8557{ 8558 int i; 8559 8560 /* Free up all the SKBs. */ 8561 tg3_free_rings(tp); 8562 8563 for (i = 0; i < tp->irq_cnt; i++) { 8564 struct tg3_napi *tnapi = &tp->napi[i]; 8565 8566 tnapi->last_tag = 0; 8567 tnapi->last_irq_tag = 0; 8568 tnapi->hw_status->status = 0; 8569 tnapi->hw_status->status_tag = 0; 8570 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8571 8572 tnapi->tx_prod = 0; 8573 tnapi->tx_cons = 0; 8574 if (tnapi->tx_ring) 8575 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 8576 8577 tnapi->rx_rcb_ptr = 0; 8578 if (tnapi->rx_rcb) 8579 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 8580 8581 if (tnapi->prodring.rx_std && 8582 tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 8583 tg3_free_rings(tp); 8584 return -ENOMEM; 8585 } 8586 } 8587 8588 return 0; 8589} 8590 8591static void tg3_mem_tx_release(struct tg3 *tp) 8592{ 8593 int i; 8594 8595 for (i = 0; i < tp->irq_max; i++) { 8596 struct tg3_napi *tnapi = &tp->napi[i]; 8597 8598 if (tnapi->tx_ring) { 8599 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 8600 tnapi->tx_ring, tnapi->tx_desc_mapping); 8601 tnapi->tx_ring = NULL; 8602 } 8603 8604 kfree(tnapi->tx_buffers); 8605 tnapi->tx_buffers = NULL; 8606 } 8607} 8608 8609static int tg3_mem_tx_acquire(struct tg3 *tp) 8610{ 8611 int i; 8612 struct tg3_napi *tnapi = &tp->napi[0]; 8613 8614 /* If multivector TSS is enabled, vector 0 does not handle 8615 * tx interrupts. Don't allocate any resources for it. 8616 */ 8617 if (tg3_flag(tp, ENABLE_TSS)) 8618 tnapi++; 8619 8620 for (i = 0; i < tp->txq_cnt; i++, tnapi++) { 8621 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE, 8622 sizeof(struct tg3_tx_ring_info), 8623 GFP_KERNEL); 8624 if (!tnapi->tx_buffers) 8625 goto err_out; 8626 8627 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 8628 TG3_TX_RING_BYTES, 8629 &tnapi->tx_desc_mapping, 8630 GFP_KERNEL); 8631 if (!tnapi->tx_ring) 8632 goto err_out; 8633 } 8634 8635 return 0; 8636 8637err_out: 8638 tg3_mem_tx_release(tp); 8639 return -ENOMEM; 8640} 8641 8642static void tg3_mem_rx_release(struct tg3 *tp) 8643{ 8644 int i; 8645 8646 for (i = 0; i < tp->irq_max; i++) { 8647 struct tg3_napi *tnapi = &tp->napi[i]; 8648 8649 tg3_rx_prodring_fini(tp, &tnapi->prodring); 8650 8651 if (!tnapi->rx_rcb) 8652 continue; 8653 8654 dma_free_coherent(&tp->pdev->dev, 8655 TG3_RX_RCB_RING_BYTES(tp), 8656 tnapi->rx_rcb, 8657 tnapi->rx_rcb_mapping); 8658 tnapi->rx_rcb = NULL; 8659 } 8660} 8661 8662static int tg3_mem_rx_acquire(struct tg3 *tp) 8663{ 8664 unsigned int i, limit; 8665 8666 limit = tp->rxq_cnt; 8667 8668 /* If RSS is enabled, we need a (dummy) producer ring 8669 * set on vector zero. This is the true hw prodring. 8670 */ 8671 if (tg3_flag(tp, ENABLE_RSS)) 8672 limit++; 8673 8674 for (i = 0; i < limit; i++) { 8675 struct tg3_napi *tnapi = &tp->napi[i]; 8676 8677 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 8678 goto err_out; 8679 8680 /* If multivector RSS is enabled, vector 0 8681 * does not handle rx or tx interrupts. 8682 * Don't allocate any resources for it. 8683 */ 8684 if (!i && tg3_flag(tp, ENABLE_RSS)) 8685 continue; 8686 8687 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 8688 TG3_RX_RCB_RING_BYTES(tp), 8689 &tnapi->rx_rcb_mapping, 8690 GFP_KERNEL); 8691 if (!tnapi->rx_rcb) 8692 goto err_out; 8693 } 8694 8695 return 0; 8696 8697err_out: 8698 tg3_mem_rx_release(tp); 8699 return -ENOMEM; 8700} 8701 8702/* 8703 * Must not be invoked with interrupt sources disabled and 8704 * the hardware shutdown down. 8705 */ 8706static void tg3_free_consistent(struct tg3 *tp) 8707{ 8708 int i; 8709 8710 for (i = 0; i < tp->irq_cnt; i++) { 8711 struct tg3_napi *tnapi = &tp->napi[i]; 8712 8713 if (tnapi->hw_status) { 8714 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 8715 tnapi->hw_status, 8716 tnapi->status_mapping); 8717 tnapi->hw_status = NULL; 8718 } 8719 } 8720 8721 tg3_mem_rx_release(tp); 8722 tg3_mem_tx_release(tp); 8723 8724 /* tp->hw_stats can be referenced safely: 8725 * 1. under rtnl_lock 8726 * 2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set. 8727 */ 8728 if (tp->hw_stats) { 8729 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8730 tp->hw_stats, tp->stats_mapping); 8731 tp->hw_stats = NULL; 8732 } 8733} 8734 8735/* 8736 * Must not be invoked with interrupt sources disabled and 8737 * the hardware shutdown down. Can sleep. 8738 */ 8739static int tg3_alloc_consistent(struct tg3 *tp) 8740{ 8741 int i; 8742 8743 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 8744 sizeof(struct tg3_hw_stats), 8745 &tp->stats_mapping, GFP_KERNEL); 8746 if (!tp->hw_stats) 8747 goto err_out; 8748 8749 for (i = 0; i < tp->irq_cnt; i++) { 8750 struct tg3_napi *tnapi = &tp->napi[i]; 8751 struct tg3_hw_status *sblk; 8752 8753 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 8754 TG3_HW_STATUS_SIZE, 8755 &tnapi->status_mapping, 8756 GFP_KERNEL); 8757 if (!tnapi->hw_status) 8758 goto err_out; 8759 8760 sblk = tnapi->hw_status; 8761 8762 if (tg3_flag(tp, ENABLE_RSS)) { 8763 u16 *prodptr = NULL; 8764 8765 /* 8766 * When RSS is enabled, the status block format changes 8767 * slightly. The "rx_jumbo_consumer", "reserved", 8768 * and "rx_mini_consumer" members get mapped to the 8769 * other three rx return ring producer indexes. 8770 */ 8771 switch (i) { 8772 case 1: 8773 prodptr = &sblk->idx[0].rx_producer; 8774 break; 8775 case 2: 8776 prodptr = &sblk->rx_jumbo_consumer; 8777 break; 8778 case 3: 8779 prodptr = &sblk->reserved; 8780 break; 8781 case 4: 8782 prodptr = &sblk->rx_mini_consumer; 8783 break; 8784 } 8785 tnapi->rx_rcb_prod_idx = prodptr; 8786 } else { 8787 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 8788 } 8789 } 8790 8791 if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp)) 8792 goto err_out; 8793 8794 return 0; 8795 8796err_out: 8797 tg3_free_consistent(tp); 8798 return -ENOMEM; 8799} 8800 8801#define MAX_WAIT_CNT 1000 8802 8803/* To stop a block, clear the enable bit and poll till it 8804 * clears. tp->lock is held. 8805 */ 8806static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent) 8807{ 8808 unsigned int i; 8809 u32 val; 8810 8811 if (tg3_flag(tp, 5705_PLUS)) { 8812 switch (ofs) { 8813 case RCVLSC_MODE: 8814 case DMAC_MODE: 8815 case MBFREE_MODE: 8816 case BUFMGR_MODE: 8817 case MEMARB_MODE: 8818 /* We can't enable/disable these bits of the 8819 * 5705/5750, just say success. 8820 */ 8821 return 0; 8822 8823 default: 8824 break; 8825 } 8826 } 8827 8828 val = tr32(ofs); 8829 val &= ~enable_bit; 8830 tw32_f(ofs, val); 8831 8832 for (i = 0; i < MAX_WAIT_CNT; i++) { 8833 if (pci_channel_offline(tp->pdev)) { 8834 dev_err(&tp->pdev->dev, 8835 "tg3_stop_block device offline, " 8836 "ofs=%lx enable_bit=%x\n", 8837 ofs, enable_bit); 8838 return -ENODEV; 8839 } 8840 8841 udelay(100); 8842 val = tr32(ofs); 8843 if ((val & enable_bit) == 0) 8844 break; 8845 } 8846 8847 if (i == MAX_WAIT_CNT && !silent) { 8848 dev_err(&tp->pdev->dev, 8849 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 8850 ofs, enable_bit); 8851 return -ENODEV; 8852 } 8853 8854 return 0; 8855} 8856 8857/* tp->lock is held. */ 8858static int tg3_abort_hw(struct tg3 *tp, bool silent) 8859{ 8860 int i, err; 8861 8862 tg3_disable_ints(tp); 8863 8864 if (pci_channel_offline(tp->pdev)) { 8865 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE); 8866 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8867 err = -ENODEV; 8868 goto err_no_dev; 8869 } 8870 8871 tp->rx_mode &= ~RX_MODE_ENABLE; 8872 tw32_f(MAC_RX_MODE, tp->rx_mode); 8873 udelay(10); 8874 8875 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 8876 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 8877 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 8878 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 8879 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 8880 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 8881 8882 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 8883 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 8884 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 8885 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 8886 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 8887 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 8888 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 8889 8890 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8891 tw32_f(MAC_MODE, tp->mac_mode); 8892 udelay(40); 8893 8894 tp->tx_mode &= ~TX_MODE_ENABLE; 8895 tw32_f(MAC_TX_MODE, tp->tx_mode); 8896 8897 for (i = 0; i < MAX_WAIT_CNT; i++) { 8898 udelay(100); 8899 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 8900 break; 8901 } 8902 if (i >= MAX_WAIT_CNT) { 8903 dev_err(&tp->pdev->dev, 8904 "%s timed out, TX_MODE_ENABLE will not clear " 8905 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 8906 err |= -ENODEV; 8907 } 8908 8909 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 8910 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 8911 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 8912 8913 tw32(FTQ_RESET, 0xffffffff); 8914 tw32(FTQ_RESET, 0x00000000); 8915 8916 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 8917 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 8918 8919err_no_dev: 8920 for (i = 0; i < tp->irq_cnt; i++) { 8921 struct tg3_napi *tnapi = &tp->napi[i]; 8922 if (tnapi->hw_status) 8923 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8924 } 8925 8926 return err; 8927} 8928 8929/* Save PCI command register before chip reset */ 8930static void tg3_save_pci_state(struct tg3 *tp) 8931{ 8932 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 8933} 8934 8935/* Restore PCI state after chip reset */ 8936static void tg3_restore_pci_state(struct tg3 *tp) 8937{ 8938 u32 val; 8939 8940 /* Re-enable indirect register accesses. */ 8941 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 8942 tp->misc_host_ctrl); 8943 8944 /* Set MAX PCI retry to zero. */ 8945 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 8946 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 8947 tg3_flag(tp, PCIX_MODE)) 8948 val |= PCISTATE_RETRY_SAME_DMA; 8949 /* Allow reads and writes to the APE register and memory space. */ 8950 if (tg3_flag(tp, ENABLE_APE)) 8951 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8952 PCISTATE_ALLOW_APE_SHMEM_WR | 8953 PCISTATE_ALLOW_APE_PSPACE_WR; 8954 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 8955 8956 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 8957 8958 if (!tg3_flag(tp, PCI_EXPRESS)) { 8959 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 8960 tp->pci_cacheline_sz); 8961 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 8962 tp->pci_lat_timer); 8963 } 8964 8965 /* Make sure PCI-X relaxed ordering bit is clear. */ 8966 if (tg3_flag(tp, PCIX_MODE)) { 8967 u16 pcix_cmd; 8968 8969 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8970 &pcix_cmd); 8971 pcix_cmd &= ~PCI_X_CMD_ERO; 8972 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8973 pcix_cmd); 8974 } 8975 8976 if (tg3_flag(tp, 5780_CLASS)) { 8977 8978 /* Chip reset on 5780 will reset MSI enable bit, 8979 * so need to restore it. 8980 */ 8981 if (tg3_flag(tp, USING_MSI)) { 8982 u16 ctrl; 8983 8984 pci_read_config_word(tp->pdev, 8985 tp->msi_cap + PCI_MSI_FLAGS, 8986 &ctrl); 8987 pci_write_config_word(tp->pdev, 8988 tp->msi_cap + PCI_MSI_FLAGS, 8989 ctrl | PCI_MSI_FLAGS_ENABLE); 8990 val = tr32(MSGINT_MODE); 8991 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 8992 } 8993 } 8994} 8995 8996static void tg3_override_clk(struct tg3 *tp) 8997{ 8998 u32 val; 8999 9000 switch (tg3_asic_rev(tp)) { 9001 case ASIC_REV_5717: 9002 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9003 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9004 TG3_CPMU_MAC_ORIDE_ENABLE); 9005 break; 9006 9007 case ASIC_REV_5719: 9008 case ASIC_REV_5720: 9009 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9010 break; 9011 9012 default: 9013 return; 9014 } 9015} 9016 9017static void tg3_restore_clk(struct tg3 *tp) 9018{ 9019 u32 val; 9020 9021 switch (tg3_asic_rev(tp)) { 9022 case ASIC_REV_5717: 9023 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9024 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, 9025 val & ~TG3_CPMU_MAC_ORIDE_ENABLE); 9026 break; 9027 9028 case ASIC_REV_5719: 9029 case ASIC_REV_5720: 9030 val = tr32(TG3_CPMU_CLCK_ORIDE); 9031 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9032 break; 9033 9034 default: 9035 return; 9036 } 9037} 9038 9039/* tp->lock is held. */ 9040static int tg3_chip_reset(struct tg3 *tp) 9041 __releases(tp->lock) 9042 __acquires(tp->lock) 9043{ 9044 u32 val; 9045 void (*write_op)(struct tg3 *, u32, u32); 9046 int i, err; 9047 9048 if (!pci_device_is_present(tp->pdev)) 9049 return -ENODEV; 9050 9051 tg3_nvram_lock(tp); 9052 9053 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 9054 9055 /* No matching tg3_nvram_unlock() after this because 9056 * chip reset below will undo the nvram lock. 9057 */ 9058 tp->nvram_lock_cnt = 0; 9059 9060 /* GRC_MISC_CFG core clock reset will clear the memory 9061 * enable bit in PCI register 4 and the MSI enable bit 9062 * on some chips, so we save relevant registers here. 9063 */ 9064 tg3_save_pci_state(tp); 9065 9066 if (tg3_asic_rev(tp) == ASIC_REV_5752 || 9067 tg3_flag(tp, 5755_PLUS)) 9068 tw32(GRC_FASTBOOT_PC, 0); 9069 9070 /* 9071 * We must avoid the readl() that normally takes place. 9072 * It locks machines, causes machine checks, and other 9073 * fun things. So, temporarily disable the 5701 9074 * hardware workaround, while we do the reset. 9075 */ 9076 write_op = tp->write32; 9077 if (write_op == tg3_write_flush_reg32) 9078 tp->write32 = tg3_write32; 9079 9080 /* Prevent the irq handler from reading or writing PCI registers 9081 * during chip reset when the memory enable bit in the PCI command 9082 * register may be cleared. The chip does not generate interrupt 9083 * at this time, but the irq handler may still be called due to irq 9084 * sharing or irqpoll. 9085 */ 9086 tg3_flag_set(tp, CHIP_RESETTING); 9087 for (i = 0; i < tp->irq_cnt; i++) { 9088 struct tg3_napi *tnapi = &tp->napi[i]; 9089 if (tnapi->hw_status) { 9090 tnapi->hw_status->status = 0; 9091 tnapi->hw_status->status_tag = 0; 9092 } 9093 tnapi->last_tag = 0; 9094 tnapi->last_irq_tag = 0; 9095 } 9096 smp_mb(); 9097 9098 tg3_full_unlock(tp); 9099 9100 for (i = 0; i < tp->irq_cnt; i++) 9101 synchronize_irq(tp->napi[i].irq_vec); 9102 9103 tg3_full_lock(tp, 0); 9104 9105 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9106 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9107 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9108 } 9109 9110 /* do the reset */ 9111 val = GRC_MISC_CFG_CORECLK_RESET; 9112 9113 if (tg3_flag(tp, PCI_EXPRESS)) { 9114 /* Force PCIe 1.0a mode */ 9115 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 9116 !tg3_flag(tp, 57765_PLUS) && 9117 tr32(TG3_PCIE_PHY_TSTCTL) == 9118 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 9119 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 9120 9121 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) { 9122 tw32(GRC_MISC_CFG, (1 << 29)); 9123 val |= (1 << 29); 9124 } 9125 } 9126 9127 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 9128 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 9129 tw32(GRC_VCPU_EXT_CTRL, 9130 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 9131 } 9132 9133 /* Set the clock to the highest frequency to avoid timeouts. With link 9134 * aware mode, the clock speed could be slow and bootcode does not 9135 * complete within the expected time. Override the clock to allow the 9136 * bootcode to finish sooner and then restore it. 9137 */ 9138 tg3_override_clk(tp); 9139 9140 /* Manage gphy power for all CPMU absent PCIe devices. */ 9141 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 9142 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 9143 9144 tw32(GRC_MISC_CFG, val); 9145 9146 /* restore 5701 hardware bug workaround write method */ 9147 tp->write32 = write_op; 9148 9149 /* Unfortunately, we have to delay before the PCI read back. 9150 * Some 575X chips even will not respond to a PCI cfg access 9151 * when the reset command is given to the chip. 9152 * 9153 * How do these hardware designers expect things to work 9154 * properly if the PCI write is posted for a long period 9155 * of time? It is always necessary to have some method by 9156 * which a register read back can occur to push the write 9157 * out which does the reset. 9158 * 9159 * For most tg3 variants the trick below was working. 9160 * Ho hum... 9161 */ 9162 udelay(120); 9163 9164 /* Flush PCI posted writes. The normal MMIO registers 9165 * are inaccessible at this time so this is the only 9166 * way to make this reliably (actually, this is no longer 9167 * the case, see above). I tried to use indirect 9168 * register read/write but this upset some 5701 variants. 9169 */ 9170 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 9171 9172 udelay(120); 9173 9174 if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) { 9175 u16 val16; 9176 9177 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) { 9178 int j; 9179 u32 cfg_val; 9180 9181 /* Wait for link training to complete. */ 9182 for (j = 0; j < 5000; j++) 9183 udelay(100); 9184 9185 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 9186 pci_write_config_dword(tp->pdev, 0xc4, 9187 cfg_val | (1 << 15)); 9188 } 9189 9190 /* Clear the "no snoop" and "relaxed ordering" bits. */ 9191 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN; 9192 /* 9193 * Older PCIe devices only support the 128 byte 9194 * MPS setting. Enforce the restriction. 9195 */ 9196 if (!tg3_flag(tp, CPMU_PRESENT)) 9197 val16 |= PCI_EXP_DEVCTL_PAYLOAD; 9198 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16); 9199 9200 /* Clear error status */ 9201 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA, 9202 PCI_EXP_DEVSTA_CED | 9203 PCI_EXP_DEVSTA_NFED | 9204 PCI_EXP_DEVSTA_FED | 9205 PCI_EXP_DEVSTA_URD); 9206 } 9207 9208 tg3_restore_pci_state(tp); 9209 9210 tg3_flag_clear(tp, CHIP_RESETTING); 9211 tg3_flag_clear(tp, ERROR_PROCESSED); 9212 9213 val = 0; 9214 if (tg3_flag(tp, 5780_CLASS)) 9215 val = tr32(MEMARB_MODE); 9216 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 9217 9218 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) { 9219 tg3_stop_fw(tp); 9220 tw32(0x5000, 0x400); 9221 } 9222 9223 if (tg3_flag(tp, IS_SSB_CORE)) { 9224 /* 9225 * BCM4785: In order to avoid repercussions from using 9226 * potentially defective internal ROM, stop the Rx RISC CPU, 9227 * which is not required. 9228 */ 9229 tg3_stop_fw(tp); 9230 tg3_halt_cpu(tp, RX_CPU_BASE); 9231 } 9232 9233 err = tg3_poll_fw(tp); 9234 if (err) 9235 return err; 9236 9237 tw32(GRC_MODE, tp->grc_mode); 9238 9239 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) { 9240 val = tr32(0xc4); 9241 9242 tw32(0xc4, val | (1 << 15)); 9243 } 9244 9245 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 9246 tg3_asic_rev(tp) == ASIC_REV_5705) { 9247 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 9248 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) 9249 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 9250 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9251 } 9252 9253 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9254 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 9255 val = tp->mac_mode; 9256 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9257 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 9258 val = tp->mac_mode; 9259 } else 9260 val = 0; 9261 9262 tw32_f(MAC_MODE, val); 9263 udelay(40); 9264 9265 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 9266 9267 tg3_mdio_start(tp); 9268 9269 if (tg3_flag(tp, PCI_EXPRESS) && 9270 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 9271 tg3_asic_rev(tp) != ASIC_REV_5785 && 9272 !tg3_flag(tp, 57765_PLUS)) { 9273 val = tr32(0x7c00); 9274 9275 tw32(0x7c00, val | (1 << 25)); 9276 } 9277 9278 tg3_restore_clk(tp); 9279 9280 /* Increase the core clock speed to fix tx timeout issue for 5762 9281 * with 100Mbps link speed. 9282 */ 9283 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 9284 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9285 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9286 TG3_CPMU_MAC_ORIDE_ENABLE); 9287 } 9288 9289 /* Reprobe ASF enable state. */ 9290 tg3_flag_clear(tp, ENABLE_ASF); 9291 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 9292 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 9293 9294 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 9295 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 9296 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 9297 u32 nic_cfg; 9298 9299 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 9300 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 9301 tg3_flag_set(tp, ENABLE_ASF); 9302 tp->last_event_jiffies = jiffies; 9303 if (tg3_flag(tp, 5750_PLUS)) 9304 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 9305 9306 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg); 9307 if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK) 9308 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 9309 if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID) 9310 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 9311 } 9312 } 9313 9314 return 0; 9315} 9316 9317static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 9318static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 9319static void __tg3_set_rx_mode(struct net_device *); 9320 9321/* tp->lock is held. */ 9322static int tg3_halt(struct tg3 *tp, int kind, bool silent) 9323{ 9324 int err; 9325 9326 tg3_stop_fw(tp); 9327 9328 tg3_write_sig_pre_reset(tp, kind); 9329 9330 tg3_abort_hw(tp, silent); 9331 err = tg3_chip_reset(tp); 9332 9333 __tg3_set_mac_addr(tp, false); 9334 9335 tg3_write_sig_legacy(tp, kind); 9336 tg3_write_sig_post_reset(tp, kind); 9337 9338 if (tp->hw_stats) { 9339 /* Save the stats across chip resets... */ 9340 tg3_get_nstats(tp, &tp->net_stats_prev); 9341 tg3_get_estats(tp, &tp->estats_prev); 9342 9343 /* And make sure the next sample is new data */ 9344 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 9345 } 9346 9347 return err; 9348} 9349 9350static int tg3_set_mac_addr(struct net_device *dev, void *p) 9351{ 9352 struct tg3 *tp = netdev_priv(dev); 9353 struct sockaddr *addr = p; 9354 int err = 0; 9355 bool skip_mac_1 = false; 9356 9357 if (!is_valid_ether_addr(addr->sa_data)) 9358 return -EADDRNOTAVAIL; 9359 9360 eth_hw_addr_set(dev, addr->sa_data); 9361 9362 if (!netif_running(dev)) 9363 return 0; 9364 9365 if (tg3_flag(tp, ENABLE_ASF)) { 9366 u32 addr0_high, addr0_low, addr1_high, addr1_low; 9367 9368 addr0_high = tr32(MAC_ADDR_0_HIGH); 9369 addr0_low = tr32(MAC_ADDR_0_LOW); 9370 addr1_high = tr32(MAC_ADDR_1_HIGH); 9371 addr1_low = tr32(MAC_ADDR_1_LOW); 9372 9373 /* Skip MAC addr 1 if ASF is using it. */ 9374 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 9375 !(addr1_high == 0 && addr1_low == 0)) 9376 skip_mac_1 = true; 9377 } 9378 spin_lock_bh(&tp->lock); 9379 __tg3_set_mac_addr(tp, skip_mac_1); 9380 __tg3_set_rx_mode(dev); 9381 spin_unlock_bh(&tp->lock); 9382 9383 return err; 9384} 9385 9386/* tp->lock is held. */ 9387static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 9388 dma_addr_t mapping, u32 maxlen_flags, 9389 u32 nic_addr) 9390{ 9391 tg3_write_mem(tp, 9392 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 9393 ((u64) mapping >> 32)); 9394 tg3_write_mem(tp, 9395 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 9396 ((u64) mapping & 0xffffffff)); 9397 tg3_write_mem(tp, 9398 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 9399 maxlen_flags); 9400 9401 if (!tg3_flag(tp, 5705_PLUS)) 9402 tg3_write_mem(tp, 9403 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 9404 nic_addr); 9405} 9406 9407 9408static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9409{ 9410 int i = 0; 9411 9412 if (!tg3_flag(tp, ENABLE_TSS)) { 9413 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 9414 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 9415 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 9416 } else { 9417 tw32(HOSTCC_TXCOL_TICKS, 0); 9418 tw32(HOSTCC_TXMAX_FRAMES, 0); 9419 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 9420 9421 for (; i < tp->txq_cnt; i++) { 9422 u32 reg; 9423 9424 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 9425 tw32(reg, ec->tx_coalesce_usecs); 9426 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 9427 tw32(reg, ec->tx_max_coalesced_frames); 9428 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 9429 tw32(reg, ec->tx_max_coalesced_frames_irq); 9430 } 9431 } 9432 9433 for (; i < tp->irq_max - 1; i++) { 9434 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 9435 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 9436 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9437 } 9438} 9439 9440static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9441{ 9442 int i = 0; 9443 u32 limit = tp->rxq_cnt; 9444 9445 if (!tg3_flag(tp, ENABLE_RSS)) { 9446 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 9447 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 9448 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 9449 limit--; 9450 } else { 9451 tw32(HOSTCC_RXCOL_TICKS, 0); 9452 tw32(HOSTCC_RXMAX_FRAMES, 0); 9453 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 9454 } 9455 9456 for (; i < limit; i++) { 9457 u32 reg; 9458 9459 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 9460 tw32(reg, ec->rx_coalesce_usecs); 9461 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 9462 tw32(reg, ec->rx_max_coalesced_frames); 9463 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 9464 tw32(reg, ec->rx_max_coalesced_frames_irq); 9465 } 9466 9467 for (; i < tp->irq_max - 1; i++) { 9468 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 9469 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 9470 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9471 } 9472} 9473 9474static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 9475{ 9476 tg3_coal_tx_init(tp, ec); 9477 tg3_coal_rx_init(tp, ec); 9478 9479 if (!tg3_flag(tp, 5705_PLUS)) { 9480 u32 val = ec->stats_block_coalesce_usecs; 9481 9482 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 9483 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 9484 9485 if (!tp->link_up) 9486 val = 0; 9487 9488 tw32(HOSTCC_STAT_COAL_TICKS, val); 9489 } 9490} 9491 9492/* tp->lock is held. */ 9493static void tg3_tx_rcbs_disable(struct tg3 *tp) 9494{ 9495 u32 txrcb, limit; 9496 9497 /* Disable all transmit rings but the first. */ 9498 if (!tg3_flag(tp, 5705_PLUS)) 9499 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 9500 else if (tg3_flag(tp, 5717_PLUS)) 9501 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 9502 else if (tg3_flag(tp, 57765_CLASS) || 9503 tg3_asic_rev(tp) == ASIC_REV_5762) 9504 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 9505 else 9506 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9507 9508 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9509 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 9510 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 9511 BDINFO_FLAGS_DISABLED); 9512} 9513 9514/* tp->lock is held. */ 9515static void tg3_tx_rcbs_init(struct tg3 *tp) 9516{ 9517 int i = 0; 9518 u32 txrcb = NIC_SRAM_SEND_RCB; 9519 9520 if (tg3_flag(tp, ENABLE_TSS)) 9521 i++; 9522 9523 for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) { 9524 struct tg3_napi *tnapi = &tp->napi[i]; 9525 9526 if (!tnapi->tx_ring) 9527 continue; 9528 9529 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 9530 (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT), 9531 NIC_SRAM_TX_BUFFER_DESC); 9532 } 9533} 9534 9535/* tp->lock is held. */ 9536static void tg3_rx_ret_rcbs_disable(struct tg3 *tp) 9537{ 9538 u32 rxrcb, limit; 9539 9540 /* Disable all receive return rings but the first. */ 9541 if (tg3_flag(tp, 5717_PLUS)) 9542 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 9543 else if (!tg3_flag(tp, 5705_PLUS)) 9544 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 9545 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9546 tg3_asic_rev(tp) == ASIC_REV_5762 || 9547 tg3_flag(tp, 57765_CLASS)) 9548 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 9549 else 9550 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9551 9552 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9553 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 9554 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 9555 BDINFO_FLAGS_DISABLED); 9556} 9557 9558/* tp->lock is held. */ 9559static void tg3_rx_ret_rcbs_init(struct tg3 *tp) 9560{ 9561 int i = 0; 9562 u32 rxrcb = NIC_SRAM_RCV_RET_RCB; 9563 9564 if (tg3_flag(tp, ENABLE_RSS)) 9565 i++; 9566 9567 for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) { 9568 struct tg3_napi *tnapi = &tp->napi[i]; 9569 9570 if (!tnapi->rx_rcb) 9571 continue; 9572 9573 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 9574 (tp->rx_ret_ring_mask + 1) << 9575 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 9576 } 9577} 9578 9579/* tp->lock is held. */ 9580static void tg3_rings_reset(struct tg3 *tp) 9581{ 9582 int i; 9583 u32 stblk; 9584 struct tg3_napi *tnapi = &tp->napi[0]; 9585 9586 tg3_tx_rcbs_disable(tp); 9587 9588 tg3_rx_ret_rcbs_disable(tp); 9589 9590 /* Disable interrupts */ 9591 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 9592 tp->napi[0].chk_msi_cnt = 0; 9593 tp->napi[0].last_rx_cons = 0; 9594 tp->napi[0].last_tx_cons = 0; 9595 9596 /* Zero mailbox registers. */ 9597 if (tg3_flag(tp, SUPPORT_MSIX)) { 9598 for (i = 1; i < tp->irq_max; i++) { 9599 tp->napi[i].tx_prod = 0; 9600 tp->napi[i].tx_cons = 0; 9601 if (tg3_flag(tp, ENABLE_TSS)) 9602 tw32_mailbox(tp->napi[i].prodmbox, 0); 9603 tw32_rx_mbox(tp->napi[i].consmbox, 0); 9604 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 9605 tp->napi[i].chk_msi_cnt = 0; 9606 tp->napi[i].last_rx_cons = 0; 9607 tp->napi[i].last_tx_cons = 0; 9608 } 9609 if (!tg3_flag(tp, ENABLE_TSS)) 9610 tw32_mailbox(tp->napi[0].prodmbox, 0); 9611 } else { 9612 tp->napi[0].tx_prod = 0; 9613 tp->napi[0].tx_cons = 0; 9614 tw32_mailbox(tp->napi[0].prodmbox, 0); 9615 tw32_rx_mbox(tp->napi[0].consmbox, 0); 9616 } 9617 9618 /* Make sure the NIC-based send BD rings are disabled. */ 9619 if (!tg3_flag(tp, 5705_PLUS)) { 9620 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 9621 for (i = 0; i < 16; i++) 9622 tw32_tx_mbox(mbox + i * 8, 0); 9623 } 9624 9625 /* Clear status block in ram. */ 9626 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9627 9628 /* Set status block DMA address */ 9629 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9630 ((u64) tnapi->status_mapping >> 32)); 9631 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9632 ((u64) tnapi->status_mapping & 0xffffffff)); 9633 9634 stblk = HOSTCC_STATBLCK_RING1; 9635 9636 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 9637 u64 mapping = (u64)tnapi->status_mapping; 9638 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 9639 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 9640 stblk += 8; 9641 9642 /* Clear status block in ram. */ 9643 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9644 } 9645 9646 tg3_tx_rcbs_init(tp); 9647 tg3_rx_ret_rcbs_init(tp); 9648} 9649 9650static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 9651{ 9652 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 9653 9654 if (!tg3_flag(tp, 5750_PLUS) || 9655 tg3_flag(tp, 5780_CLASS) || 9656 tg3_asic_rev(tp) == ASIC_REV_5750 || 9657 tg3_asic_rev(tp) == ASIC_REV_5752 || 9658 tg3_flag(tp, 57765_PLUS)) 9659 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 9660 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9661 tg3_asic_rev(tp) == ASIC_REV_5787) 9662 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 9663 else 9664 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 9665 9666 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 9667 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 9668 9669 val = min(nic_rep_thresh, host_rep_thresh); 9670 tw32(RCVBDI_STD_THRESH, val); 9671 9672 if (tg3_flag(tp, 57765_PLUS)) 9673 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 9674 9675 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 9676 return; 9677 9678 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 9679 9680 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 9681 9682 val = min(bdcache_maxcnt / 2, host_rep_thresh); 9683 tw32(RCVBDI_JUMBO_THRESH, val); 9684 9685 if (tg3_flag(tp, 57765_PLUS)) 9686 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 9687} 9688 9689static inline u32 calc_crc(unsigned char *buf, int len) 9690{ 9691 u32 reg; 9692 u32 tmp; 9693 int j, k; 9694 9695 reg = 0xffffffff; 9696 9697 for (j = 0; j < len; j++) { 9698 reg ^= buf[j]; 9699 9700 for (k = 0; k < 8; k++) { 9701 tmp = reg & 0x01; 9702 9703 reg >>= 1; 9704 9705 if (tmp) 9706 reg ^= CRC32_POLY_LE; 9707 } 9708 } 9709 9710 return ~reg; 9711} 9712 9713static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 9714{ 9715 /* accept or reject all multicast frames */ 9716 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 9717 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 9718 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 9719 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 9720} 9721 9722static void __tg3_set_rx_mode(struct net_device *dev) 9723{ 9724 struct tg3 *tp = netdev_priv(dev); 9725 u32 rx_mode; 9726 9727 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 9728 RX_MODE_KEEP_VLAN_TAG); 9729 9730#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 9731 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 9732 * flag clear. 9733 */ 9734 if (!tg3_flag(tp, ENABLE_ASF)) 9735 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 9736#endif 9737 9738 if (dev->flags & IFF_PROMISC) { 9739 /* Promiscuous mode. */ 9740 rx_mode |= RX_MODE_PROMISC; 9741 } else if (dev->flags & IFF_ALLMULTI) { 9742 /* Accept all multicast. */ 9743 tg3_set_multi(tp, 1); 9744 } else if (netdev_mc_empty(dev)) { 9745 /* Reject all multicast. */ 9746 tg3_set_multi(tp, 0); 9747 } else { 9748 /* Accept one or more multicast(s). */ 9749 struct netdev_hw_addr *ha; 9750 u32 mc_filter[4] = { 0, }; 9751 u32 regidx; 9752 u32 bit; 9753 u32 crc; 9754 9755 netdev_for_each_mc_addr(ha, dev) { 9756 crc = calc_crc(ha->addr, ETH_ALEN); 9757 bit = ~crc & 0x7f; 9758 regidx = (bit & 0x60) >> 5; 9759 bit &= 0x1f; 9760 mc_filter[regidx] |= (1 << bit); 9761 } 9762 9763 tw32(MAC_HASH_REG_0, mc_filter[0]); 9764 tw32(MAC_HASH_REG_1, mc_filter[1]); 9765 tw32(MAC_HASH_REG_2, mc_filter[2]); 9766 tw32(MAC_HASH_REG_3, mc_filter[3]); 9767 } 9768 9769 if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) { 9770 rx_mode |= RX_MODE_PROMISC; 9771 } else if (!(dev->flags & IFF_PROMISC)) { 9772 /* Add all entries into to the mac addr filter list */ 9773 int i = 0; 9774 struct netdev_hw_addr *ha; 9775 9776 netdev_for_each_uc_addr(ha, dev) { 9777 __tg3_set_one_mac_addr(tp, ha->addr, 9778 i + TG3_UCAST_ADDR_IDX(tp)); 9779 i++; 9780 } 9781 } 9782 9783 if (rx_mode != tp->rx_mode) { 9784 tp->rx_mode = rx_mode; 9785 tw32_f(MAC_RX_MODE, rx_mode); 9786 udelay(10); 9787 } 9788} 9789 9790static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt) 9791{ 9792 int i; 9793 9794 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 9795 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt); 9796} 9797 9798static void tg3_rss_check_indir_tbl(struct tg3 *tp) 9799{ 9800 int i; 9801 9802 if (!tg3_flag(tp, SUPPORT_MSIX)) 9803 return; 9804 9805 if (tp->rxq_cnt == 1) { 9806 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 9807 return; 9808 } 9809 9810 /* Validate table against current IRQ count */ 9811 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 9812 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt) 9813 break; 9814 } 9815 9816 if (i != TG3_RSS_INDIR_TBL_SIZE) 9817 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt); 9818} 9819 9820static void tg3_rss_write_indir_tbl(struct tg3 *tp) 9821{ 9822 int i = 0; 9823 u32 reg = MAC_RSS_INDIR_TBL_0; 9824 9825 while (i < TG3_RSS_INDIR_TBL_SIZE) { 9826 u32 val = tp->rss_ind_tbl[i]; 9827 i++; 9828 for (; i % 8; i++) { 9829 val <<= 4; 9830 val |= tp->rss_ind_tbl[i]; 9831 } 9832 tw32(reg, val); 9833 reg += 4; 9834 } 9835} 9836 9837static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) 9838{ 9839 if (tg3_asic_rev(tp) == ASIC_REV_5719) 9840 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; 9841 else 9842 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; 9843} 9844 9845/* tp->lock is held. */ 9846static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) 9847{ 9848 u32 val, rdmac_mode; 9849 int i, err, limit; 9850 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 9851 9852 tg3_disable_ints(tp); 9853 9854 tg3_stop_fw(tp); 9855 9856 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 9857 9858 if (tg3_flag(tp, INIT_COMPLETE)) 9859 tg3_abort_hw(tp, 1); 9860 9861 if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 9862 !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) { 9863 tg3_phy_pull_config(tp); 9864 tg3_eee_pull_config(tp, NULL); 9865 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 9866 } 9867 9868 /* Enable MAC control of LPI */ 9869 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 9870 tg3_setup_eee(tp); 9871 9872 if (reset_phy) 9873 tg3_phy_reset(tp); 9874 9875 err = tg3_chip_reset(tp); 9876 if (err) 9877 return err; 9878 9879 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 9880 9881 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 9882 val = tr32(TG3_CPMU_CTRL); 9883 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 9884 tw32(TG3_CPMU_CTRL, val); 9885 9886 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9887 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9888 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9889 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9890 9891 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 9892 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 9893 val |= CPMU_LNK_AWARE_MACCLK_6_25; 9894 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 9895 9896 val = tr32(TG3_CPMU_HST_ACC); 9897 val &= ~CPMU_HST_ACC_MACCLK_MASK; 9898 val |= CPMU_HST_ACC_MACCLK_6_25; 9899 tw32(TG3_CPMU_HST_ACC, val); 9900 } 9901 9902 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9903 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 9904 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 9905 PCIE_PWR_MGMT_L1_THRESH_4MS; 9906 tw32(PCIE_PWR_MGMT_THRESH, val); 9907 9908 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 9909 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 9910 9911 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 9912 9913 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9914 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9915 } 9916 9917 if (tg3_flag(tp, L1PLLPD_EN)) { 9918 u32 grc_mode = tr32(GRC_MODE); 9919 9920 /* Access the lower 1K of PL PCIE block registers. */ 9921 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9922 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9923 9924 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 9925 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 9926 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 9927 9928 tw32(GRC_MODE, grc_mode); 9929 } 9930 9931 if (tg3_flag(tp, 57765_CLASS)) { 9932 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 9933 u32 grc_mode = tr32(GRC_MODE); 9934 9935 /* Access the lower 1K of PL PCIE block registers. */ 9936 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9937 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9938 9939 val = tr32(TG3_PCIE_TLDLPL_PORT + 9940 TG3_PCIE_PL_LO_PHYCTL5); 9941 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 9942 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 9943 9944 tw32(GRC_MODE, grc_mode); 9945 } 9946 9947 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) { 9948 u32 grc_mode; 9949 9950 /* Fix transmit hangs */ 9951 val = tr32(TG3_CPMU_PADRNG_CTL); 9952 val |= TG3_CPMU_PADRNG_CTL_RDIV2; 9953 tw32(TG3_CPMU_PADRNG_CTL, val); 9954 9955 grc_mode = tr32(GRC_MODE); 9956 9957 /* Access the lower 1K of DL PCIE block registers. */ 9958 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9959 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 9960 9961 val = tr32(TG3_PCIE_TLDLPL_PORT + 9962 TG3_PCIE_DL_LO_FTSMAX); 9963 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 9964 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 9965 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 9966 9967 tw32(GRC_MODE, grc_mode); 9968 } 9969 9970 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9971 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9972 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9973 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9974 } 9975 9976 /* This works around an issue with Athlon chipsets on 9977 * B3 tigon3 silicon. This bit has no effect on any 9978 * other revision. But do not set this on PCI Express 9979 * chips and don't even touch the clocks if the CPMU is present. 9980 */ 9981 if (!tg3_flag(tp, CPMU_PRESENT)) { 9982 if (!tg3_flag(tp, PCI_EXPRESS)) 9983 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 9984 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9985 } 9986 9987 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 9988 tg3_flag(tp, PCIX_MODE)) { 9989 val = tr32(TG3PCI_PCISTATE); 9990 val |= PCISTATE_RETRY_SAME_DMA; 9991 tw32(TG3PCI_PCISTATE, val); 9992 } 9993 9994 if (tg3_flag(tp, ENABLE_APE)) { 9995 /* Allow reads and writes to the 9996 * APE register and memory space. 9997 */ 9998 val = tr32(TG3PCI_PCISTATE); 9999 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 10000 PCISTATE_ALLOW_APE_SHMEM_WR | 10001 PCISTATE_ALLOW_APE_PSPACE_WR; 10002 tw32(TG3PCI_PCISTATE, val); 10003 } 10004 10005 if (tg3_chip_rev(tp) == CHIPREV_5704_BX) { 10006 /* Enable some hw fixes. */ 10007 val = tr32(TG3PCI_MSI_DATA); 10008 val |= (1 << 26) | (1 << 28) | (1 << 29); 10009 tw32(TG3PCI_MSI_DATA, val); 10010 } 10011 10012 /* Descriptor ring init may make accesses to the 10013 * NIC SRAM area to setup the TX descriptors, so we 10014 * can only do this after the hardware has been 10015 * successfully reset. 10016 */ 10017 err = tg3_init_rings(tp); 10018 if (err) 10019 return err; 10020 10021 if (tg3_flag(tp, 57765_PLUS)) { 10022 val = tr32(TG3PCI_DMA_RW_CTRL) & 10023 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 10024 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 10025 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 10026 if (!tg3_flag(tp, 57765_CLASS) && 10027 tg3_asic_rev(tp) != ASIC_REV_5717 && 10028 tg3_asic_rev(tp) != ASIC_REV_5762) 10029 val |= DMA_RWCTRL_TAGGED_STAT_WA; 10030 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 10031 } else if (tg3_asic_rev(tp) != ASIC_REV_5784 && 10032 tg3_asic_rev(tp) != ASIC_REV_5761) { 10033 /* This value is determined during the probe time DMA 10034 * engine test, tg3_test_dma. 10035 */ 10036 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 10037 } 10038 10039 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 10040 GRC_MODE_4X_NIC_SEND_RINGS | 10041 GRC_MODE_NO_TX_PHDR_CSUM | 10042 GRC_MODE_NO_RX_PHDR_CSUM); 10043 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 10044 10045 /* Pseudo-header checksum is done by hardware logic and not 10046 * the offload processers, so make the chip do the pseudo- 10047 * header checksums on receive. For transmit it is more 10048 * convenient to do the pseudo-header checksum in software 10049 * as Linux does that on transmit for us in all cases. 10050 */ 10051 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 10052 10053 val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; 10054 if (tp->rxptpctl) 10055 tw32(TG3_RX_PTP_CTL, 10056 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 10057 10058 if (tg3_flag(tp, PTP_CAPABLE)) 10059 val |= GRC_MODE_TIME_SYNC_ENABLE; 10060 10061 tw32(GRC_MODE, tp->grc_mode | val); 10062 10063 /* On one of the AMD platform, MRRS is restricted to 4000 because of 10064 * south bridge limitation. As a workaround, Driver is setting MRRS 10065 * to 2048 instead of default 4096. 10066 */ 10067 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 10068 tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) { 10069 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK; 10070 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048); 10071 } 10072 10073 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 10074 val = tr32(GRC_MISC_CFG); 10075 val &= ~0xff; 10076 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 10077 tw32(GRC_MISC_CFG, val); 10078 10079 /* Initialize MBUF/DESC pool. */ 10080 if (tg3_flag(tp, 5750_PLUS)) { 10081 /* Do nothing. */ 10082 } else if (tg3_asic_rev(tp) != ASIC_REV_5705) { 10083 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 10084 if (tg3_asic_rev(tp) == ASIC_REV_5704) 10085 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 10086 else 10087 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 10088 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 10089 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 10090 } else if (tg3_flag(tp, TSO_CAPABLE)) { 10091 int fw_len; 10092 10093 fw_len = tp->fw_len; 10094 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 10095 tw32(BUFMGR_MB_POOL_ADDR, 10096 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 10097 tw32(BUFMGR_MB_POOL_SIZE, 10098 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 10099 } 10100 10101 if (tp->dev->mtu <= ETH_DATA_LEN) { 10102 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10103 tp->bufmgr_config.mbuf_read_dma_low_water); 10104 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10105 tp->bufmgr_config.mbuf_mac_rx_low_water); 10106 tw32(BUFMGR_MB_HIGH_WATER, 10107 tp->bufmgr_config.mbuf_high_water); 10108 } else { 10109 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10110 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 10111 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10112 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 10113 tw32(BUFMGR_MB_HIGH_WATER, 10114 tp->bufmgr_config.mbuf_high_water_jumbo); 10115 } 10116 tw32(BUFMGR_DMA_LOW_WATER, 10117 tp->bufmgr_config.dma_low_water); 10118 tw32(BUFMGR_DMA_HIGH_WATER, 10119 tp->bufmgr_config.dma_high_water); 10120 10121 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 10122 if (tg3_asic_rev(tp) == ASIC_REV_5719) 10123 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 10124 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10125 tg3_asic_rev(tp) == ASIC_REV_5762 || 10126 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10127 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) 10128 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 10129 tw32(BUFMGR_MODE, val); 10130 for (i = 0; i < 2000; i++) { 10131 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 10132 break; 10133 udelay(10); 10134 } 10135 if (i >= 2000) { 10136 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 10137 return -ENODEV; 10138 } 10139 10140 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1) 10141 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 10142 10143 tg3_setup_rxbd_thresholds(tp); 10144 10145 /* Initialize TG3_BDINFO's at: 10146 * RCVDBDI_STD_BD: standard eth size rx ring 10147 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 10148 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 10149 * 10150 * like so: 10151 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 10152 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 10153 * ring attribute flags 10154 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 10155 * 10156 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 10157 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 10158 * 10159 * The size of each ring is fixed in the firmware, but the location is 10160 * configurable. 10161 */ 10162 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10163 ((u64) tpr->rx_std_mapping >> 32)); 10164 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10165 ((u64) tpr->rx_std_mapping & 0xffffffff)); 10166 if (!tg3_flag(tp, 5717_PLUS)) 10167 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 10168 NIC_SRAM_RX_BUFFER_DESC); 10169 10170 /* Disable the mini ring */ 10171 if (!tg3_flag(tp, 5705_PLUS)) 10172 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 10173 BDINFO_FLAGS_DISABLED); 10174 10175 /* Program the jumbo buffer descriptor ring control 10176 * blocks on those devices that have them. 10177 */ 10178 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10179 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 10180 10181 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 10182 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10183 ((u64) tpr->rx_jmb_mapping >> 32)); 10184 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10185 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 10186 val = TG3_RX_JMB_RING_SIZE(tp) << 10187 BDINFO_FLAGS_MAXLEN_SHIFT; 10188 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10189 val | BDINFO_FLAGS_USE_EXT_RECV); 10190 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 10191 tg3_flag(tp, 57765_CLASS) || 10192 tg3_asic_rev(tp) == ASIC_REV_5762) 10193 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 10194 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 10195 } else { 10196 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10197 BDINFO_FLAGS_DISABLED); 10198 } 10199 10200 if (tg3_flag(tp, 57765_PLUS)) { 10201 val = TG3_RX_STD_RING_SIZE(tp); 10202 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 10203 val |= (TG3_RX_STD_DMA_SZ << 2); 10204 } else 10205 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 10206 } else 10207 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 10208 10209 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 10210 10211 tpr->rx_std_prod_idx = tp->rx_pending; 10212 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 10213 10214 tpr->rx_jmb_prod_idx = 10215 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 10216 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 10217 10218 tg3_rings_reset(tp); 10219 10220 /* Initialize MAC address and backoff seed. */ 10221 __tg3_set_mac_addr(tp, false); 10222 10223 /* MTU + ethernet header + FCS + optional VLAN tag */ 10224 tw32(MAC_RX_MTU_SIZE, 10225 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 10226 10227 /* The slot time is changed by tg3_setup_phy if we 10228 * run at gigabit with half duplex. 10229 */ 10230 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 10231 (6 << TX_LENGTHS_IPG_SHIFT) | 10232 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 10233 10234 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10235 tg3_asic_rev(tp) == ASIC_REV_5762) 10236 val |= tr32(MAC_TX_LENGTHS) & 10237 (TX_LENGTHS_JMB_FRM_LEN_MSK | 10238 TX_LENGTHS_CNT_DWN_VAL_MSK); 10239 10240 tw32(MAC_TX_LENGTHS, val); 10241 10242 /* Receive rules. */ 10243 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 10244 tw32(RCVLPC_CONFIG, 0x0181); 10245 10246 /* Calculate RDMAC_MODE setting early, we need it to determine 10247 * the RCVLPC_STATE_ENABLE mask. 10248 */ 10249 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 10250 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 10251 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 10252 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 10253 RDMAC_MODE_LNGREAD_ENAB); 10254 10255 if (tg3_asic_rev(tp) == ASIC_REV_5717) 10256 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 10257 10258 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 10259 tg3_asic_rev(tp) == ASIC_REV_5785 || 10260 tg3_asic_rev(tp) == ASIC_REV_57780) 10261 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 10262 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 10263 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 10264 10265 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10266 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10267 if (tg3_flag(tp, TSO_CAPABLE)) { 10268 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 10269 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10270 !tg3_flag(tp, IS_5788)) { 10271 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10272 } 10273 } 10274 10275 if (tg3_flag(tp, PCI_EXPRESS)) 10276 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10277 10278 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10279 tp->dma_limit = 0; 10280 if (tp->dev->mtu <= ETH_DATA_LEN) { 10281 rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR; 10282 tp->dma_limit = TG3_TX_BD_DMA_MAX_2K; 10283 } 10284 } 10285 10286 if (tg3_flag(tp, HW_TSO_1) || 10287 tg3_flag(tp, HW_TSO_2) || 10288 tg3_flag(tp, HW_TSO_3)) 10289 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 10290 10291 if (tg3_flag(tp, 57765_PLUS) || 10292 tg3_asic_rev(tp) == ASIC_REV_5785 || 10293 tg3_asic_rev(tp) == ASIC_REV_57780) 10294 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 10295 10296 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10297 tg3_asic_rev(tp) == ASIC_REV_5762) 10298 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 10299 10300 if (tg3_asic_rev(tp) == ASIC_REV_5761 || 10301 tg3_asic_rev(tp) == ASIC_REV_5784 || 10302 tg3_asic_rev(tp) == ASIC_REV_5785 || 10303 tg3_asic_rev(tp) == ASIC_REV_57780 || 10304 tg3_flag(tp, 57765_PLUS)) { 10305 u32 tgtreg; 10306 10307 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10308 tgtreg = TG3_RDMA_RSRVCTRL_REG2; 10309 else 10310 tgtreg = TG3_RDMA_RSRVCTRL_REG; 10311 10312 val = tr32(tgtreg); 10313 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10314 tg3_asic_rev(tp) == ASIC_REV_5762) { 10315 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 10316 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 10317 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 10318 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 10319 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 10320 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 10321 } 10322 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 10323 } 10324 10325 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10326 tg3_asic_rev(tp) == ASIC_REV_5720 || 10327 tg3_asic_rev(tp) == ASIC_REV_5762) { 10328 u32 tgtreg; 10329 10330 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10331 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; 10332 else 10333 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; 10334 10335 val = tr32(tgtreg); 10336 tw32(tgtreg, val | 10337 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 10338 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 10339 } 10340 10341 /* Receive/send statistics. */ 10342 if (tg3_flag(tp, 5750_PLUS)) { 10343 val = tr32(RCVLPC_STATS_ENABLE); 10344 val &= ~RCVLPC_STATSENAB_DACK_FIX; 10345 tw32(RCVLPC_STATS_ENABLE, val); 10346 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 10347 tg3_flag(tp, TSO_CAPABLE)) { 10348 val = tr32(RCVLPC_STATS_ENABLE); 10349 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 10350 tw32(RCVLPC_STATS_ENABLE, val); 10351 } else { 10352 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 10353 } 10354 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 10355 tw32(SNDDATAI_STATSENAB, 0xffffff); 10356 tw32(SNDDATAI_STATSCTRL, 10357 (SNDDATAI_SCTRL_ENABLE | 10358 SNDDATAI_SCTRL_FASTUPD)); 10359 10360 /* Setup host coalescing engine. */ 10361 tw32(HOSTCC_MODE, 0); 10362 for (i = 0; i < 2000; i++) { 10363 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 10364 break; 10365 udelay(10); 10366 } 10367 10368 __tg3_set_coalesce(tp, &tp->coal); 10369 10370 if (!tg3_flag(tp, 5705_PLUS)) { 10371 /* Status/statistics block address. See tg3_timer, 10372 * the tg3_periodic_fetch_stats call there, and 10373 * tg3_get_stats to see how this works for 5705/5750 chips. 10374 */ 10375 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 10376 ((u64) tp->stats_mapping >> 32)); 10377 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 10378 ((u64) tp->stats_mapping & 0xffffffff)); 10379 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 10380 10381 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 10382 10383 /* Clear statistics and status block memory areas */ 10384 for (i = NIC_SRAM_STATS_BLK; 10385 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 10386 i += sizeof(u32)) { 10387 tg3_write_mem(tp, i, 0); 10388 udelay(40); 10389 } 10390 } 10391 10392 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 10393 10394 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 10395 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 10396 if (!tg3_flag(tp, 5705_PLUS)) 10397 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 10398 10399 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 10400 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 10401 /* reset to prevent losing 1st rx packet intermittently */ 10402 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10403 udelay(10); 10404 } 10405 10406 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 10407 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 10408 MAC_MODE_FHDE_ENABLE; 10409 if (tg3_flag(tp, ENABLE_APE)) 10410 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 10411 if (!tg3_flag(tp, 5705_PLUS) && 10412 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10413 tg3_asic_rev(tp) != ASIC_REV_5700) 10414 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 10415 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 10416 udelay(40); 10417 10418 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 10419 * If TG3_FLAG_IS_NIC is zero, we should read the 10420 * register to preserve the GPIO settings for LOMs. The GPIOs, 10421 * whether used as inputs or outputs, are set by boot code after 10422 * reset. 10423 */ 10424 if (!tg3_flag(tp, IS_NIC)) { 10425 u32 gpio_mask; 10426 10427 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 10428 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 10429 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 10430 10431 if (tg3_asic_rev(tp) == ASIC_REV_5752) 10432 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 10433 GRC_LCLCTRL_GPIO_OUTPUT3; 10434 10435 if (tg3_asic_rev(tp) == ASIC_REV_5755) 10436 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 10437 10438 tp->grc_local_ctrl &= ~gpio_mask; 10439 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 10440 10441 /* GPIO1 must be driven high for eeprom write protect */ 10442 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 10443 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 10444 GRC_LCLCTRL_GPIO_OUTPUT1); 10445 } 10446 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10447 udelay(100); 10448 10449 if (tg3_flag(tp, USING_MSIX)) { 10450 val = tr32(MSGINT_MODE); 10451 val |= MSGINT_MODE_ENABLE; 10452 if (tp->irq_cnt > 1) 10453 val |= MSGINT_MODE_MULTIVEC_EN; 10454 if (!tg3_flag(tp, 1SHOT_MSI)) 10455 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 10456 tw32(MSGINT_MODE, val); 10457 } 10458 10459 if (!tg3_flag(tp, 5705_PLUS)) { 10460 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 10461 udelay(40); 10462 } 10463 10464 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 10465 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 10466 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 10467 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 10468 WDMAC_MODE_LNGREAD_ENAB); 10469 10470 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10471 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10472 if (tg3_flag(tp, TSO_CAPABLE) && 10473 (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 || 10474 tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) { 10475 /* nothing */ 10476 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10477 !tg3_flag(tp, IS_5788)) { 10478 val |= WDMAC_MODE_RX_ACCEL; 10479 } 10480 } 10481 10482 /* Enable host coalescing bug fix */ 10483 if (tg3_flag(tp, 5755_PLUS)) 10484 val |= WDMAC_MODE_STATUS_TAG_FIX; 10485 10486 if (tg3_asic_rev(tp) == ASIC_REV_5785) 10487 val |= WDMAC_MODE_BURST_ALL_DATA; 10488 10489 tw32_f(WDMAC_MODE, val); 10490 udelay(40); 10491 10492 if (tg3_flag(tp, PCIX_MODE)) { 10493 u16 pcix_cmd; 10494 10495 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10496 &pcix_cmd); 10497 if (tg3_asic_rev(tp) == ASIC_REV_5703) { 10498 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 10499 pcix_cmd |= PCI_X_CMD_READ_2K; 10500 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) { 10501 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 10502 pcix_cmd |= PCI_X_CMD_READ_2K; 10503 } 10504 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10505 pcix_cmd); 10506 } 10507 10508 tw32_f(RDMAC_MODE, rdmac_mode); 10509 udelay(40); 10510 10511 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10512 tg3_asic_rev(tp) == ASIC_REV_5720) { 10513 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { 10514 if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) 10515 break; 10516 } 10517 if (i < TG3_NUM_RDMA_CHANNELS) { 10518 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10519 val |= tg3_lso_rd_dma_workaround_bit(tp); 10520 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10521 tg3_flag_set(tp, 5719_5720_RDMA_BUG); 10522 } 10523 } 10524 10525 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 10526 if (!tg3_flag(tp, 5705_PLUS)) 10527 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 10528 10529 if (tg3_asic_rev(tp) == ASIC_REV_5761) 10530 tw32(SNDDATAC_MODE, 10531 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 10532 else 10533 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 10534 10535 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 10536 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 10537 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 10538 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 10539 val |= RCVDBDI_MODE_LRG_RING_SZ; 10540 tw32(RCVDBDI_MODE, val); 10541 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 10542 if (tg3_flag(tp, HW_TSO_1) || 10543 tg3_flag(tp, HW_TSO_2) || 10544 tg3_flag(tp, HW_TSO_3)) 10545 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 10546 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 10547 if (tg3_flag(tp, ENABLE_TSS)) 10548 val |= SNDBDI_MODE_MULTI_TXQ_EN; 10549 tw32(SNDBDI_MODE, val); 10550 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 10551 10552 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 10553 err = tg3_load_5701_a0_firmware_fix(tp); 10554 if (err) 10555 return err; 10556 } 10557 10558 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10559 /* Ignore any errors for the firmware download. If download 10560 * fails, the device will operate with EEE disabled 10561 */ 10562 tg3_load_57766_firmware(tp); 10563 } 10564 10565 if (tg3_flag(tp, TSO_CAPABLE)) { 10566 err = tg3_load_tso_firmware(tp); 10567 if (err) 10568 return err; 10569 } 10570 10571 tp->tx_mode = TX_MODE_ENABLE; 10572 10573 if (tg3_flag(tp, 5755_PLUS) || 10574 tg3_asic_rev(tp) == ASIC_REV_5906) 10575 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 10576 10577 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10578 tg3_asic_rev(tp) == ASIC_REV_5762) { 10579 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 10580 tp->tx_mode &= ~val; 10581 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 10582 } 10583 10584 tw32_f(MAC_TX_MODE, tp->tx_mode); 10585 udelay(100); 10586 10587 if (tg3_flag(tp, ENABLE_RSS)) { 10588 u32 rss_key[10]; 10589 10590 tg3_rss_write_indir_tbl(tp); 10591 10592 netdev_rss_key_fill(rss_key, 10 * sizeof(u32)); 10593 10594 for (i = 0; i < 10 ; i++) 10595 tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]); 10596 } 10597 10598 tp->rx_mode = RX_MODE_ENABLE; 10599 if (tg3_flag(tp, 5755_PLUS)) 10600 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 10601 10602 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10603 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX; 10604 10605 if (tg3_flag(tp, ENABLE_RSS)) 10606 tp->rx_mode |= RX_MODE_RSS_ENABLE | 10607 RX_MODE_RSS_ITBL_HASH_BITS_7 | 10608 RX_MODE_RSS_IPV6_HASH_EN | 10609 RX_MODE_RSS_TCP_IPV6_HASH_EN | 10610 RX_MODE_RSS_IPV4_HASH_EN | 10611 RX_MODE_RSS_TCP_IPV4_HASH_EN; 10612 10613 tw32_f(MAC_RX_MODE, tp->rx_mode); 10614 udelay(10); 10615 10616 tw32(MAC_LED_CTRL, tp->led_ctrl); 10617 10618 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 10619 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10620 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10621 udelay(10); 10622 } 10623 tw32_f(MAC_RX_MODE, tp->rx_mode); 10624 udelay(10); 10625 10626 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10627 if ((tg3_asic_rev(tp) == ASIC_REV_5704) && 10628 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 10629 /* Set drive transmission level to 1.2V */ 10630 /* only if the signal pre-emphasis bit is not set */ 10631 val = tr32(MAC_SERDES_CFG); 10632 val &= 0xfffff000; 10633 val |= 0x880; 10634 tw32(MAC_SERDES_CFG, val); 10635 } 10636 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) 10637 tw32(MAC_SERDES_CFG, 0x616000); 10638 } 10639 10640 /* Prevent chip from dropping frames when flow control 10641 * is enabled. 10642 */ 10643 if (tg3_flag(tp, 57765_CLASS)) 10644 val = 1; 10645 else 10646 val = 2; 10647 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 10648 10649 if (tg3_asic_rev(tp) == ASIC_REV_5704 && 10650 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 10651 /* Use hardware link auto-negotiation */ 10652 tg3_flag_set(tp, HW_AUTONEG); 10653 } 10654 10655 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 10656 tg3_asic_rev(tp) == ASIC_REV_5714) { 10657 u32 tmp; 10658 10659 tmp = tr32(SERDES_RX_CTRL); 10660 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 10661 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 10662 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 10663 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10664 } 10665 10666 if (!tg3_flag(tp, USE_PHYLIB)) { 10667 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10668 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 10669 10670 err = tg3_setup_phy(tp, false); 10671 if (err) 10672 return err; 10673 10674 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10675 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 10676 u32 tmp; 10677 10678 /* Clear CRC stats. */ 10679 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 10680 tg3_writephy(tp, MII_TG3_TEST1, 10681 tmp | MII_TG3_TEST1_CRC_EN); 10682 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 10683 } 10684 } 10685 } 10686 10687 __tg3_set_rx_mode(tp->dev); 10688 10689 /* Initialize receive rules. */ 10690 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 10691 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 10692 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 10693 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 10694 10695 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 10696 limit = 8; 10697 else 10698 limit = 16; 10699 if (tg3_flag(tp, ENABLE_ASF)) 10700 limit -= 4; 10701 switch (limit) { 10702 case 16: 10703 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 10704 fallthrough; 10705 case 15: 10706 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 10707 fallthrough; 10708 case 14: 10709 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 10710 fallthrough; 10711 case 13: 10712 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 10713 fallthrough; 10714 case 12: 10715 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 10716 fallthrough; 10717 case 11: 10718 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 10719 fallthrough; 10720 case 10: 10721 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 10722 fallthrough; 10723 case 9: 10724 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 10725 fallthrough; 10726 case 8: 10727 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 10728 fallthrough; 10729 case 7: 10730 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 10731 fallthrough; 10732 case 6: 10733 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 10734 fallthrough; 10735 case 5: 10736 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 10737 fallthrough; 10738 case 4: 10739 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 10740 case 3: 10741 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 10742 case 2: 10743 case 1: 10744 10745 default: 10746 break; 10747 } 10748 10749 if (tg3_flag(tp, ENABLE_APE)) 10750 /* Write our heartbeat update interval to APE. */ 10751 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 10752 APE_HOST_HEARTBEAT_INT_5SEC); 10753 10754 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 10755 10756 return 0; 10757} 10758 10759/* Called at device open time to get the chip ready for 10760 * packet processing. Invoked with tp->lock held. 10761 */ 10762static int tg3_init_hw(struct tg3 *tp, bool reset_phy) 10763{ 10764 /* Chip may have been just powered on. If so, the boot code may still 10765 * be running initialization. Wait for it to finish to avoid races in 10766 * accessing the hardware. 10767 */ 10768 tg3_enable_register_access(tp); 10769 tg3_poll_fw(tp); 10770 10771 tg3_switch_clocks(tp); 10772 10773 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 10774 10775 return tg3_reset_hw(tp, reset_phy); 10776} 10777 10778#ifdef CONFIG_TIGON3_HWMON 10779static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 10780{ 10781 u32 off, len = TG3_OCIR_LEN; 10782 int i; 10783 10784 for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) { 10785 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 10786 10787 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 10788 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 10789 memset(ocir, 0, len); 10790 } 10791} 10792 10793/* sysfs attributes for hwmon */ 10794static ssize_t tg3_show_temp(struct device *dev, 10795 struct device_attribute *devattr, char *buf) 10796{ 10797 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 10798 struct tg3 *tp = dev_get_drvdata(dev); 10799 u32 temperature; 10800 10801 spin_lock_bh(&tp->lock); 10802 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 10803 sizeof(temperature)); 10804 spin_unlock_bh(&tp->lock); 10805 return sprintf(buf, "%u\n", temperature * 1000); 10806} 10807 10808 10809static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL, 10810 TG3_TEMP_SENSOR_OFFSET); 10811static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL, 10812 TG3_TEMP_CAUTION_OFFSET); 10813static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL, 10814 TG3_TEMP_MAX_OFFSET); 10815 10816static struct attribute *tg3_attrs[] = { 10817 &sensor_dev_attr_temp1_input.dev_attr.attr, 10818 &sensor_dev_attr_temp1_crit.dev_attr.attr, 10819 &sensor_dev_attr_temp1_max.dev_attr.attr, 10820 NULL 10821}; 10822ATTRIBUTE_GROUPS(tg3); 10823 10824static void tg3_hwmon_close(struct tg3 *tp) 10825{ 10826 if (tp->hwmon_dev) { 10827 hwmon_device_unregister(tp->hwmon_dev); 10828 tp->hwmon_dev = NULL; 10829 } 10830} 10831 10832static void tg3_hwmon_open(struct tg3 *tp) 10833{ 10834 int i; 10835 u32 size = 0; 10836 struct pci_dev *pdev = tp->pdev; 10837 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 10838 10839 tg3_sd_scan_scratchpad(tp, ocirs); 10840 10841 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 10842 if (!ocirs[i].src_data_length) 10843 continue; 10844 10845 size += ocirs[i].src_hdr_length; 10846 size += ocirs[i].src_data_length; 10847 } 10848 10849 if (!size) 10850 return; 10851 10852 tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3", 10853 tp, tg3_groups); 10854 if (IS_ERR(tp->hwmon_dev)) { 10855 tp->hwmon_dev = NULL; 10856 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 10857 } 10858} 10859#else 10860static inline void tg3_hwmon_close(struct tg3 *tp) { } 10861static inline void tg3_hwmon_open(struct tg3 *tp) { } 10862#endif /* CONFIG_TIGON3_HWMON */ 10863 10864 10865#define TG3_STAT_ADD32(PSTAT, REG) \ 10866do { u32 __val = tr32(REG); \ 10867 (PSTAT)->low += __val; \ 10868 if ((PSTAT)->low < __val) \ 10869 (PSTAT)->high += 1; \ 10870} while (0) 10871 10872static void tg3_periodic_fetch_stats(struct tg3 *tp) 10873{ 10874 struct tg3_hw_stats *sp = tp->hw_stats; 10875 10876 if (!tp->link_up) 10877 return; 10878 10879 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 10880 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 10881 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 10882 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 10883 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 10884 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 10885 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 10886 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 10887 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 10888 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 10889 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 10890 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 10891 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 10892 if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && 10893 (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + 10894 sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { 10895 u32 val; 10896 10897 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10898 val &= ~tg3_lso_rd_dma_workaround_bit(tp); 10899 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10900 tg3_flag_clear(tp, 5719_5720_RDMA_BUG); 10901 } 10902 10903 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 10904 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 10905 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 10906 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 10907 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 10908 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 10909 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 10910 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 10911 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 10912 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 10913 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 10914 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 10915 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 10916 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 10917 10918 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 10919 if (tg3_asic_rev(tp) != ASIC_REV_5717 && 10920 tg3_asic_rev(tp) != ASIC_REV_5762 && 10921 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 && 10922 tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) { 10923 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 10924 } else { 10925 u32 val = tr32(HOSTCC_FLOW_ATTN); 10926 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 10927 if (val) { 10928 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 10929 sp->rx_discards.low += val; 10930 if (sp->rx_discards.low < val) 10931 sp->rx_discards.high += 1; 10932 } 10933 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 10934 } 10935 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 10936} 10937 10938static void tg3_chk_missed_msi(struct tg3 *tp) 10939{ 10940 u32 i; 10941 10942 for (i = 0; i < tp->irq_cnt; i++) { 10943 struct tg3_napi *tnapi = &tp->napi[i]; 10944 10945 if (tg3_has_work(tnapi)) { 10946 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 10947 tnapi->last_tx_cons == tnapi->tx_cons) { 10948 if (tnapi->chk_msi_cnt < 1) { 10949 tnapi->chk_msi_cnt++; 10950 return; 10951 } 10952 tg3_msi(0, tnapi); 10953 } 10954 } 10955 tnapi->chk_msi_cnt = 0; 10956 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 10957 tnapi->last_tx_cons = tnapi->tx_cons; 10958 } 10959} 10960 10961static void tg3_timer(struct timer_list *t) 10962{ 10963 struct tg3 *tp = from_timer(tp, t, timer); 10964 10965 spin_lock(&tp->lock); 10966 10967 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) { 10968 spin_unlock(&tp->lock); 10969 goto restart_timer; 10970 } 10971 10972 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10973 tg3_flag(tp, 57765_CLASS)) 10974 tg3_chk_missed_msi(tp); 10975 10976 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 10977 /* BCM4785: Flush posted writes from GbE to host memory. */ 10978 tr32(HOSTCC_MODE); 10979 } 10980 10981 if (!tg3_flag(tp, TAGGED_STATUS)) { 10982 /* All of this garbage is because when using non-tagged 10983 * IRQ status the mailbox/status_block protocol the chip 10984 * uses with the cpu is race prone. 10985 */ 10986 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 10987 tw32(GRC_LOCAL_CTRL, 10988 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 10989 } else { 10990 tw32(HOSTCC_MODE, tp->coalesce_mode | 10991 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 10992 } 10993 10994 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 10995 spin_unlock(&tp->lock); 10996 tg3_reset_task_schedule(tp); 10997 goto restart_timer; 10998 } 10999 } 11000 11001 /* This part only runs once per second. */ 11002 if (!--tp->timer_counter) { 11003 if (tg3_flag(tp, 5705_PLUS)) 11004 tg3_periodic_fetch_stats(tp); 11005 11006 if (tp->setlpicnt && !--tp->setlpicnt) 11007 tg3_phy_eee_enable(tp); 11008 11009 if (tg3_flag(tp, USE_LINKCHG_REG)) { 11010 u32 mac_stat; 11011 int phy_event; 11012 11013 mac_stat = tr32(MAC_STATUS); 11014 11015 phy_event = 0; 11016 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 11017 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 11018 phy_event = 1; 11019 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 11020 phy_event = 1; 11021 11022 if (phy_event) 11023 tg3_setup_phy(tp, false); 11024 } else if (tg3_flag(tp, POLL_SERDES)) { 11025 u32 mac_stat = tr32(MAC_STATUS); 11026 int need_setup = 0; 11027 11028 if (tp->link_up && 11029 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 11030 need_setup = 1; 11031 } 11032 if (!tp->link_up && 11033 (mac_stat & (MAC_STATUS_PCS_SYNCED | 11034 MAC_STATUS_SIGNAL_DET))) { 11035 need_setup = 1; 11036 } 11037 if (need_setup) { 11038 if (!tp->serdes_counter) { 11039 tw32_f(MAC_MODE, 11040 (tp->mac_mode & 11041 ~MAC_MODE_PORT_MODE_MASK)); 11042 udelay(40); 11043 tw32_f(MAC_MODE, tp->mac_mode); 11044 udelay(40); 11045 } 11046 tg3_setup_phy(tp, false); 11047 } 11048 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 11049 tg3_flag(tp, 5780_CLASS)) { 11050 tg3_serdes_parallel_detect(tp); 11051 } else if (tg3_flag(tp, POLL_CPMU_LINK)) { 11052 u32 cpmu = tr32(TG3_CPMU_STATUS); 11053 bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) == 11054 TG3_CPMU_STATUS_LINK_MASK); 11055 11056 if (link_up != tp->link_up) 11057 tg3_setup_phy(tp, false); 11058 } 11059 11060 tp->timer_counter = tp->timer_multiplier; 11061 } 11062 11063 /* Heartbeat is only sent once every 2 seconds. 11064 * 11065 * The heartbeat is to tell the ASF firmware that the host 11066 * driver is still alive. In the event that the OS crashes, 11067 * ASF needs to reset the hardware to free up the FIFO space 11068 * that may be filled with rx packets destined for the host. 11069 * If the FIFO is full, ASF will no longer function properly. 11070 * 11071 * Unintended resets have been reported on real time kernels 11072 * where the timer doesn't run on time. Netpoll will also have 11073 * same problem. 11074 * 11075 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 11076 * to check the ring condition when the heartbeat is expiring 11077 * before doing the reset. This will prevent most unintended 11078 * resets. 11079 */ 11080 if (!--tp->asf_counter) { 11081 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 11082 tg3_wait_for_event_ack(tp); 11083 11084 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 11085 FWCMD_NICDRV_ALIVE3); 11086 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 11087 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 11088 TG3_FW_UPDATE_TIMEOUT_SEC); 11089 11090 tg3_generate_fw_event(tp); 11091 } 11092 tp->asf_counter = tp->asf_multiplier; 11093 } 11094 11095 /* Update the APE heartbeat every 5 seconds.*/ 11096 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL); 11097 11098 spin_unlock(&tp->lock); 11099 11100restart_timer: 11101 tp->timer.expires = jiffies + tp->timer_offset; 11102 add_timer(&tp->timer); 11103} 11104 11105static void tg3_timer_init(struct tg3 *tp) 11106{ 11107 if (tg3_flag(tp, TAGGED_STATUS) && 11108 tg3_asic_rev(tp) != ASIC_REV_5717 && 11109 !tg3_flag(tp, 57765_CLASS)) 11110 tp->timer_offset = HZ; 11111 else 11112 tp->timer_offset = HZ / 10; 11113 11114 BUG_ON(tp->timer_offset > HZ); 11115 11116 tp->timer_multiplier = (HZ / tp->timer_offset); 11117 tp->asf_multiplier = (HZ / tp->timer_offset) * 11118 TG3_FW_UPDATE_FREQ_SEC; 11119 11120 timer_setup(&tp->timer, tg3_timer, 0); 11121} 11122 11123static void tg3_timer_start(struct tg3 *tp) 11124{ 11125 tp->asf_counter = tp->asf_multiplier; 11126 tp->timer_counter = tp->timer_multiplier; 11127 11128 tp->timer.expires = jiffies + tp->timer_offset; 11129 add_timer(&tp->timer); 11130} 11131 11132static void tg3_timer_stop(struct tg3 *tp) 11133{ 11134 del_timer_sync(&tp->timer); 11135} 11136 11137/* Restart hardware after configuration changes, self-test, etc. 11138 * Invoked with tp->lock held. 11139 */ 11140static int tg3_restart_hw(struct tg3 *tp, bool reset_phy) 11141 __releases(tp->lock) 11142 __acquires(tp->lock) 11143{ 11144 int err; 11145 11146 err = tg3_init_hw(tp, reset_phy); 11147 if (err) { 11148 netdev_err(tp->dev, 11149 "Failed to re-initialize device, aborting\n"); 11150 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11151 tg3_full_unlock(tp); 11152 tg3_timer_stop(tp); 11153 tp->irq_sync = 0; 11154 tg3_napi_enable(tp); 11155 dev_close(tp->dev); 11156 tg3_full_lock(tp, 0); 11157 } 11158 return err; 11159} 11160 11161static void tg3_reset_task(struct work_struct *work) 11162{ 11163 struct tg3 *tp = container_of(work, struct tg3, reset_task); 11164 int err; 11165 11166 rtnl_lock(); 11167 tg3_full_lock(tp, 0); 11168 11169 if (tp->pcierr_recovery || !netif_running(tp->dev)) { 11170 tg3_flag_clear(tp, RESET_TASK_PENDING); 11171 tg3_full_unlock(tp); 11172 rtnl_unlock(); 11173 return; 11174 } 11175 11176 tg3_full_unlock(tp); 11177 11178 tg3_phy_stop(tp); 11179 11180 tg3_netif_stop(tp); 11181 11182 tg3_full_lock(tp, 1); 11183 11184 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 11185 tp->write32_tx_mbox = tg3_write32_tx_mbox; 11186 tp->write32_rx_mbox = tg3_write_flush_reg32; 11187 tg3_flag_set(tp, MBOX_WRITE_REORDER); 11188 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 11189 } 11190 11191 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 11192 err = tg3_init_hw(tp, true); 11193 if (err) { 11194 tg3_full_unlock(tp); 11195 tp->irq_sync = 0; 11196 tg3_napi_enable(tp); 11197 /* Clear this flag so that tg3_reset_task_cancel() will not 11198 * call cancel_work_sync() and wait forever. 11199 */ 11200 tg3_flag_clear(tp, RESET_TASK_PENDING); 11201 dev_close(tp->dev); 11202 goto out; 11203 } 11204 11205 tg3_netif_start(tp); 11206 tg3_full_unlock(tp); 11207 tg3_phy_start(tp); 11208 tg3_flag_clear(tp, RESET_TASK_PENDING); 11209out: 11210 rtnl_unlock(); 11211} 11212 11213static int tg3_request_irq(struct tg3 *tp, int irq_num) 11214{ 11215 irq_handler_t fn; 11216 unsigned long flags; 11217 char *name; 11218 struct tg3_napi *tnapi = &tp->napi[irq_num]; 11219 11220 if (tp->irq_cnt == 1) 11221 name = tp->dev->name; 11222 else { 11223 name = &tnapi->irq_lbl[0]; 11224 if (tnapi->tx_buffers && tnapi->rx_rcb) 11225 snprintf(name, IFNAMSIZ, 11226 "%s-txrx-%d", tp->dev->name, irq_num); 11227 else if (tnapi->tx_buffers) 11228 snprintf(name, IFNAMSIZ, 11229 "%s-tx-%d", tp->dev->name, irq_num); 11230 else if (tnapi->rx_rcb) 11231 snprintf(name, IFNAMSIZ, 11232 "%s-rx-%d", tp->dev->name, irq_num); 11233 else 11234 snprintf(name, IFNAMSIZ, 11235 "%s-%d", tp->dev->name, irq_num); 11236 name[IFNAMSIZ-1] = 0; 11237 } 11238 11239 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11240 fn = tg3_msi; 11241 if (tg3_flag(tp, 1SHOT_MSI)) 11242 fn = tg3_msi_1shot; 11243 flags = 0; 11244 } else { 11245 fn = tg3_interrupt; 11246 if (tg3_flag(tp, TAGGED_STATUS)) 11247 fn = tg3_interrupt_tagged; 11248 flags = IRQF_SHARED; 11249 } 11250 11251 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 11252} 11253 11254static int tg3_test_interrupt(struct tg3 *tp) 11255{ 11256 struct tg3_napi *tnapi = &tp->napi[0]; 11257 struct net_device *dev = tp->dev; 11258 int err, i, intr_ok = 0; 11259 u32 val; 11260 11261 if (!netif_running(dev)) 11262 return -ENODEV; 11263 11264 tg3_disable_ints(tp); 11265 11266 free_irq(tnapi->irq_vec, tnapi); 11267 11268 /* 11269 * Turn off MSI one shot mode. Otherwise this test has no 11270 * observable way to know whether the interrupt was delivered. 11271 */ 11272 if (tg3_flag(tp, 57765_PLUS)) { 11273 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 11274 tw32(MSGINT_MODE, val); 11275 } 11276 11277 err = request_irq(tnapi->irq_vec, tg3_test_isr, 11278 IRQF_SHARED, dev->name, tnapi); 11279 if (err) 11280 return err; 11281 11282 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 11283 tg3_enable_ints(tp); 11284 11285 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11286 tnapi->coal_now); 11287 11288 for (i = 0; i < 5; i++) { 11289 u32 int_mbox, misc_host_ctrl; 11290 11291 int_mbox = tr32_mailbox(tnapi->int_mbox); 11292 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 11293 11294 if ((int_mbox != 0) || 11295 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 11296 intr_ok = 1; 11297 break; 11298 } 11299 11300 if (tg3_flag(tp, 57765_PLUS) && 11301 tnapi->hw_status->status_tag != tnapi->last_tag) 11302 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 11303 11304 msleep(10); 11305 } 11306 11307 tg3_disable_ints(tp); 11308 11309 free_irq(tnapi->irq_vec, tnapi); 11310 11311 err = tg3_request_irq(tp, 0); 11312 11313 if (err) 11314 return err; 11315 11316 if (intr_ok) { 11317 /* Reenable MSI one shot mode. */ 11318 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 11319 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 11320 tw32(MSGINT_MODE, val); 11321 } 11322 return 0; 11323 } 11324 11325 return -EIO; 11326} 11327 11328/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 11329 * successfully restored 11330 */ 11331static int tg3_test_msi(struct tg3 *tp) 11332{ 11333 int err; 11334 u16 pci_cmd; 11335 11336 if (!tg3_flag(tp, USING_MSI)) 11337 return 0; 11338 11339 /* Turn off SERR reporting in case MSI terminates with Master 11340 * Abort. 11341 */ 11342 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 11343 pci_write_config_word(tp->pdev, PCI_COMMAND, 11344 pci_cmd & ~PCI_COMMAND_SERR); 11345 11346 err = tg3_test_interrupt(tp); 11347 11348 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 11349 11350 if (!err) 11351 return 0; 11352 11353 /* other failures */ 11354 if (err != -EIO) 11355 return err; 11356 11357 /* MSI test failed, go back to INTx mode */ 11358 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 11359 "to INTx mode. Please report this failure to the PCI " 11360 "maintainer and include system chipset information\n"); 11361 11362 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11363 11364 pci_disable_msi(tp->pdev); 11365 11366 tg3_flag_clear(tp, USING_MSI); 11367 tp->napi[0].irq_vec = tp->pdev->irq; 11368 11369 err = tg3_request_irq(tp, 0); 11370 if (err) 11371 return err; 11372 11373 /* Need to reset the chip because the MSI cycle may have terminated 11374 * with Master Abort. 11375 */ 11376 tg3_full_lock(tp, 1); 11377 11378 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11379 err = tg3_init_hw(tp, true); 11380 11381 tg3_full_unlock(tp); 11382 11383 if (err) 11384 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11385 11386 return err; 11387} 11388 11389static int tg3_request_firmware(struct tg3 *tp) 11390{ 11391 const struct tg3_firmware_hdr *fw_hdr; 11392 11393 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 11394 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 11395 tp->fw_needed); 11396 return -ENOENT; 11397 } 11398 11399 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 11400 11401 /* Firmware blob starts with version numbers, followed by 11402 * start address and _full_ length including BSS sections 11403 * (which must be longer than the actual data, of course 11404 */ 11405 11406 tp->fw_len = be32_to_cpu(fw_hdr->len); /* includes bss */ 11407 if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) { 11408 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 11409 tp->fw_len, tp->fw_needed); 11410 release_firmware(tp->fw); 11411 tp->fw = NULL; 11412 return -EINVAL; 11413 } 11414 11415 /* We no longer need firmware; we have it. */ 11416 tp->fw_needed = NULL; 11417 return 0; 11418} 11419 11420static u32 tg3_irq_count(struct tg3 *tp) 11421{ 11422 u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt); 11423 11424 if (irq_cnt > 1) { 11425 /* We want as many rx rings enabled as there are cpus. 11426 * In multiqueue MSI-X mode, the first MSI-X vector 11427 * only deals with link interrupts, etc, so we add 11428 * one to the number of vectors we are requesting. 11429 */ 11430 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max); 11431 } 11432 11433 return irq_cnt; 11434} 11435 11436static bool tg3_enable_msix(struct tg3 *tp) 11437{ 11438 int i, rc; 11439 struct msix_entry msix_ent[TG3_IRQ_MAX_VECS]; 11440 11441 tp->txq_cnt = tp->txq_req; 11442 tp->rxq_cnt = tp->rxq_req; 11443 if (!tp->rxq_cnt) 11444 tp->rxq_cnt = netif_get_num_default_rss_queues(); 11445 if (tp->rxq_cnt > tp->rxq_max) 11446 tp->rxq_cnt = tp->rxq_max; 11447 11448 /* Disable multiple TX rings by default. Simple round-robin hardware 11449 * scheduling of the TX rings can cause starvation of rings with 11450 * small packets when other rings have TSO or jumbo packets. 11451 */ 11452 if (!tp->txq_req) 11453 tp->txq_cnt = 1; 11454 11455 tp->irq_cnt = tg3_irq_count(tp); 11456 11457 for (i = 0; i < tp->irq_max; i++) { 11458 msix_ent[i].entry = i; 11459 msix_ent[i].vector = 0; 11460 } 11461 11462 rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt); 11463 if (rc < 0) { 11464 return false; 11465 } else if (rc < tp->irq_cnt) { 11466 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 11467 tp->irq_cnt, rc); 11468 tp->irq_cnt = rc; 11469 tp->rxq_cnt = max(rc - 1, 1); 11470 if (tp->txq_cnt) 11471 tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max); 11472 } 11473 11474 for (i = 0; i < tp->irq_max; i++) 11475 tp->napi[i].irq_vec = msix_ent[i].vector; 11476 11477 if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) { 11478 pci_disable_msix(tp->pdev); 11479 return false; 11480 } 11481 11482 if (tp->irq_cnt == 1) 11483 return true; 11484 11485 tg3_flag_set(tp, ENABLE_RSS); 11486 11487 if (tp->txq_cnt > 1) 11488 tg3_flag_set(tp, ENABLE_TSS); 11489 11490 netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt); 11491 11492 return true; 11493} 11494 11495static void tg3_ints_init(struct tg3 *tp) 11496{ 11497 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 11498 !tg3_flag(tp, TAGGED_STATUS)) { 11499 /* All MSI supporting chips should support tagged 11500 * status. Assert that this is the case. 11501 */ 11502 netdev_warn(tp->dev, 11503 "MSI without TAGGED_STATUS? Not using MSI\n"); 11504 goto defcfg; 11505 } 11506 11507 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 11508 tg3_flag_set(tp, USING_MSIX); 11509 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 11510 tg3_flag_set(tp, USING_MSI); 11511 11512 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11513 u32 msi_mode = tr32(MSGINT_MODE); 11514 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 11515 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 11516 if (!tg3_flag(tp, 1SHOT_MSI)) 11517 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 11518 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 11519 } 11520defcfg: 11521 if (!tg3_flag(tp, USING_MSIX)) { 11522 tp->irq_cnt = 1; 11523 tp->napi[0].irq_vec = tp->pdev->irq; 11524 } 11525 11526 if (tp->irq_cnt == 1) { 11527 tp->txq_cnt = 1; 11528 tp->rxq_cnt = 1; 11529 netif_set_real_num_tx_queues(tp->dev, 1); 11530 netif_set_real_num_rx_queues(tp->dev, 1); 11531 } 11532} 11533 11534static void tg3_ints_fini(struct tg3 *tp) 11535{ 11536 if (tg3_flag(tp, USING_MSIX)) 11537 pci_disable_msix(tp->pdev); 11538 else if (tg3_flag(tp, USING_MSI)) 11539 pci_disable_msi(tp->pdev); 11540 tg3_flag_clear(tp, USING_MSI); 11541 tg3_flag_clear(tp, USING_MSIX); 11542 tg3_flag_clear(tp, ENABLE_RSS); 11543 tg3_flag_clear(tp, ENABLE_TSS); 11544} 11545 11546static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, 11547 bool init) 11548{ 11549 struct net_device *dev = tp->dev; 11550 int i, err; 11551 11552 /* 11553 * Setup interrupts first so we know how 11554 * many NAPI resources to allocate 11555 */ 11556 tg3_ints_init(tp); 11557 11558 tg3_rss_check_indir_tbl(tp); 11559 11560 /* The placement of this call is tied 11561 * to the setup and use of Host TX descriptors. 11562 */ 11563 err = tg3_alloc_consistent(tp); 11564 if (err) 11565 goto out_ints_fini; 11566 11567 tg3_napi_init(tp); 11568 11569 tg3_napi_enable(tp); 11570 11571 for (i = 0; i < tp->irq_cnt; i++) { 11572 err = tg3_request_irq(tp, i); 11573 if (err) { 11574 for (i--; i >= 0; i--) { 11575 struct tg3_napi *tnapi = &tp->napi[i]; 11576 11577 free_irq(tnapi->irq_vec, tnapi); 11578 } 11579 goto out_napi_fini; 11580 } 11581 } 11582 11583 tg3_full_lock(tp, 0); 11584 11585 if (init) 11586 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 11587 11588 err = tg3_init_hw(tp, reset_phy); 11589 if (err) { 11590 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11591 tg3_free_rings(tp); 11592 } 11593 11594 tg3_full_unlock(tp); 11595 11596 if (err) 11597 goto out_free_irq; 11598 11599 if (test_irq && tg3_flag(tp, USING_MSI)) { 11600 err = tg3_test_msi(tp); 11601 11602 if (err) { 11603 tg3_full_lock(tp, 0); 11604 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11605 tg3_free_rings(tp); 11606 tg3_full_unlock(tp); 11607 11608 goto out_napi_fini; 11609 } 11610 11611 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 11612 u32 val = tr32(PCIE_TRANSACTION_CFG); 11613 11614 tw32(PCIE_TRANSACTION_CFG, 11615 val | PCIE_TRANS_CFG_1SHOT_MSI); 11616 } 11617 } 11618 11619 tg3_phy_start(tp); 11620 11621 tg3_hwmon_open(tp); 11622 11623 tg3_full_lock(tp, 0); 11624 11625 tg3_timer_start(tp); 11626 tg3_flag_set(tp, INIT_COMPLETE); 11627 tg3_enable_ints(tp); 11628 11629 tg3_ptp_resume(tp); 11630 11631 tg3_full_unlock(tp); 11632 11633 netif_tx_start_all_queues(dev); 11634 11635 /* 11636 * Reset loopback feature if it was turned on while the device was down 11637 * make sure that it's installed properly now. 11638 */ 11639 if (dev->features & NETIF_F_LOOPBACK) 11640 tg3_set_loopback(dev, dev->features); 11641 11642 return 0; 11643 11644out_free_irq: 11645 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11646 struct tg3_napi *tnapi = &tp->napi[i]; 11647 free_irq(tnapi->irq_vec, tnapi); 11648 } 11649 11650out_napi_fini: 11651 tg3_napi_disable(tp); 11652 tg3_napi_fini(tp); 11653 tg3_free_consistent(tp); 11654 11655out_ints_fini: 11656 tg3_ints_fini(tp); 11657 11658 return err; 11659} 11660 11661static void tg3_stop(struct tg3 *tp) 11662{ 11663 int i; 11664 11665 tg3_reset_task_cancel(tp); 11666 tg3_netif_stop(tp); 11667 11668 tg3_timer_stop(tp); 11669 11670 tg3_hwmon_close(tp); 11671 11672 tg3_phy_stop(tp); 11673 11674 tg3_full_lock(tp, 1); 11675 11676 tg3_disable_ints(tp); 11677 11678 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11679 tg3_free_rings(tp); 11680 tg3_flag_clear(tp, INIT_COMPLETE); 11681 11682 tg3_full_unlock(tp); 11683 11684 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11685 struct tg3_napi *tnapi = &tp->napi[i]; 11686 free_irq(tnapi->irq_vec, tnapi); 11687 } 11688 11689 tg3_ints_fini(tp); 11690 11691 tg3_napi_fini(tp); 11692 11693 tg3_free_consistent(tp); 11694} 11695 11696static int tg3_open(struct net_device *dev) 11697{ 11698 struct tg3 *tp = netdev_priv(dev); 11699 int err; 11700 11701 if (tp->pcierr_recovery) { 11702 netdev_err(dev, "Failed to open device. PCI error recovery " 11703 "in progress\n"); 11704 return -EAGAIN; 11705 } 11706 11707 if (tp->fw_needed) { 11708 err = tg3_request_firmware(tp); 11709 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 11710 if (err) { 11711 netdev_warn(tp->dev, "EEE capability disabled\n"); 11712 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11713 } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 11714 netdev_warn(tp->dev, "EEE capability restored\n"); 11715 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 11716 } 11717 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 11718 if (err) 11719 return err; 11720 } else if (err) { 11721 netdev_warn(tp->dev, "TSO capability disabled\n"); 11722 tg3_flag_clear(tp, TSO_CAPABLE); 11723 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 11724 netdev_notice(tp->dev, "TSO capability restored\n"); 11725 tg3_flag_set(tp, TSO_CAPABLE); 11726 } 11727 } 11728 11729 tg3_carrier_off(tp); 11730 11731 err = tg3_power_up(tp); 11732 if (err) 11733 return err; 11734 11735 tg3_full_lock(tp, 0); 11736 11737 tg3_disable_ints(tp); 11738 tg3_flag_clear(tp, INIT_COMPLETE); 11739 11740 tg3_full_unlock(tp); 11741 11742 err = tg3_start(tp, 11743 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN), 11744 true, true); 11745 if (err) { 11746 tg3_frob_aux_power(tp, false); 11747 pci_set_power_state(tp->pdev, PCI_D3hot); 11748 } 11749 11750 return err; 11751} 11752 11753static int tg3_close(struct net_device *dev) 11754{ 11755 struct tg3 *tp = netdev_priv(dev); 11756 11757 if (tp->pcierr_recovery) { 11758 netdev_err(dev, "Failed to close device. PCI error recovery " 11759 "in progress\n"); 11760 return -EAGAIN; 11761 } 11762 11763 tg3_stop(tp); 11764 11765 if (pci_device_is_present(tp->pdev)) { 11766 tg3_power_down_prepare(tp); 11767 11768 tg3_carrier_off(tp); 11769 } 11770 return 0; 11771} 11772 11773static inline u64 get_stat64(tg3_stat64_t *val) 11774{ 11775 return ((u64)val->high << 32) | ((u64)val->low); 11776} 11777 11778static u64 tg3_calc_crc_errors(struct tg3 *tp) 11779{ 11780 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11781 11782 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11783 (tg3_asic_rev(tp) == ASIC_REV_5700 || 11784 tg3_asic_rev(tp) == ASIC_REV_5701)) { 11785 u32 val; 11786 11787 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 11788 tg3_writephy(tp, MII_TG3_TEST1, 11789 val | MII_TG3_TEST1_CRC_EN); 11790 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 11791 } else 11792 val = 0; 11793 11794 tp->phy_crc_errors += val; 11795 11796 return tp->phy_crc_errors; 11797 } 11798 11799 return get_stat64(&hw_stats->rx_fcs_errors); 11800} 11801 11802#define ESTAT_ADD(member) \ 11803 estats->member = old_estats->member + \ 11804 get_stat64(&hw_stats->member) 11805 11806static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 11807{ 11808 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 11809 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11810 11811 ESTAT_ADD(rx_octets); 11812 ESTAT_ADD(rx_fragments); 11813 ESTAT_ADD(rx_ucast_packets); 11814 ESTAT_ADD(rx_mcast_packets); 11815 ESTAT_ADD(rx_bcast_packets); 11816 ESTAT_ADD(rx_fcs_errors); 11817 ESTAT_ADD(rx_align_errors); 11818 ESTAT_ADD(rx_xon_pause_rcvd); 11819 ESTAT_ADD(rx_xoff_pause_rcvd); 11820 ESTAT_ADD(rx_mac_ctrl_rcvd); 11821 ESTAT_ADD(rx_xoff_entered); 11822 ESTAT_ADD(rx_frame_too_long_errors); 11823 ESTAT_ADD(rx_jabbers); 11824 ESTAT_ADD(rx_undersize_packets); 11825 ESTAT_ADD(rx_in_length_errors); 11826 ESTAT_ADD(rx_out_length_errors); 11827 ESTAT_ADD(rx_64_or_less_octet_packets); 11828 ESTAT_ADD(rx_65_to_127_octet_packets); 11829 ESTAT_ADD(rx_128_to_255_octet_packets); 11830 ESTAT_ADD(rx_256_to_511_octet_packets); 11831 ESTAT_ADD(rx_512_to_1023_octet_packets); 11832 ESTAT_ADD(rx_1024_to_1522_octet_packets); 11833 ESTAT_ADD(rx_1523_to_2047_octet_packets); 11834 ESTAT_ADD(rx_2048_to_4095_octet_packets); 11835 ESTAT_ADD(rx_4096_to_8191_octet_packets); 11836 ESTAT_ADD(rx_8192_to_9022_octet_packets); 11837 11838 ESTAT_ADD(tx_octets); 11839 ESTAT_ADD(tx_collisions); 11840 ESTAT_ADD(tx_xon_sent); 11841 ESTAT_ADD(tx_xoff_sent); 11842 ESTAT_ADD(tx_flow_control); 11843 ESTAT_ADD(tx_mac_errors); 11844 ESTAT_ADD(tx_single_collisions); 11845 ESTAT_ADD(tx_mult_collisions); 11846 ESTAT_ADD(tx_deferred); 11847 ESTAT_ADD(tx_excessive_collisions); 11848 ESTAT_ADD(tx_late_collisions); 11849 ESTAT_ADD(tx_collide_2times); 11850 ESTAT_ADD(tx_collide_3times); 11851 ESTAT_ADD(tx_collide_4times); 11852 ESTAT_ADD(tx_collide_5times); 11853 ESTAT_ADD(tx_collide_6times); 11854 ESTAT_ADD(tx_collide_7times); 11855 ESTAT_ADD(tx_collide_8times); 11856 ESTAT_ADD(tx_collide_9times); 11857 ESTAT_ADD(tx_collide_10times); 11858 ESTAT_ADD(tx_collide_11times); 11859 ESTAT_ADD(tx_collide_12times); 11860 ESTAT_ADD(tx_collide_13times); 11861 ESTAT_ADD(tx_collide_14times); 11862 ESTAT_ADD(tx_collide_15times); 11863 ESTAT_ADD(tx_ucast_packets); 11864 ESTAT_ADD(tx_mcast_packets); 11865 ESTAT_ADD(tx_bcast_packets); 11866 ESTAT_ADD(tx_carrier_sense_errors); 11867 ESTAT_ADD(tx_discards); 11868 ESTAT_ADD(tx_errors); 11869 11870 ESTAT_ADD(dma_writeq_full); 11871 ESTAT_ADD(dma_write_prioq_full); 11872 ESTAT_ADD(rxbds_empty); 11873 ESTAT_ADD(rx_discards); 11874 ESTAT_ADD(rx_errors); 11875 ESTAT_ADD(rx_threshold_hit); 11876 11877 ESTAT_ADD(dma_readq_full); 11878 ESTAT_ADD(dma_read_prioq_full); 11879 ESTAT_ADD(tx_comp_queue_full); 11880 11881 ESTAT_ADD(ring_set_send_prod_index); 11882 ESTAT_ADD(ring_status_update); 11883 ESTAT_ADD(nic_irqs); 11884 ESTAT_ADD(nic_avoided_irqs); 11885 ESTAT_ADD(nic_tx_threshold_hit); 11886 11887 ESTAT_ADD(mbuf_lwm_thresh_hit); 11888} 11889 11890static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 11891{ 11892 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 11893 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11894 11895 stats->rx_packets = old_stats->rx_packets + 11896 get_stat64(&hw_stats->rx_ucast_packets) + 11897 get_stat64(&hw_stats->rx_mcast_packets) + 11898 get_stat64(&hw_stats->rx_bcast_packets); 11899 11900 stats->tx_packets = old_stats->tx_packets + 11901 get_stat64(&hw_stats->tx_ucast_packets) + 11902 get_stat64(&hw_stats->tx_mcast_packets) + 11903 get_stat64(&hw_stats->tx_bcast_packets); 11904 11905 stats->rx_bytes = old_stats->rx_bytes + 11906 get_stat64(&hw_stats->rx_octets); 11907 stats->tx_bytes = old_stats->tx_bytes + 11908 get_stat64(&hw_stats->tx_octets); 11909 11910 stats->rx_errors = old_stats->rx_errors + 11911 get_stat64(&hw_stats->rx_errors); 11912 stats->tx_errors = old_stats->tx_errors + 11913 get_stat64(&hw_stats->tx_errors) + 11914 get_stat64(&hw_stats->tx_mac_errors) + 11915 get_stat64(&hw_stats->tx_carrier_sense_errors) + 11916 get_stat64(&hw_stats->tx_discards); 11917 11918 stats->multicast = old_stats->multicast + 11919 get_stat64(&hw_stats->rx_mcast_packets); 11920 stats->collisions = old_stats->collisions + 11921 get_stat64(&hw_stats->tx_collisions); 11922 11923 stats->rx_length_errors = old_stats->rx_length_errors + 11924 get_stat64(&hw_stats->rx_frame_too_long_errors) + 11925 get_stat64(&hw_stats->rx_undersize_packets); 11926 11927 stats->rx_frame_errors = old_stats->rx_frame_errors + 11928 get_stat64(&hw_stats->rx_align_errors); 11929 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 11930 get_stat64(&hw_stats->tx_discards); 11931 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 11932 get_stat64(&hw_stats->tx_carrier_sense_errors); 11933 11934 stats->rx_crc_errors = old_stats->rx_crc_errors + 11935 tg3_calc_crc_errors(tp); 11936 11937 stats->rx_missed_errors = old_stats->rx_missed_errors + 11938 get_stat64(&hw_stats->rx_discards); 11939 11940 stats->rx_dropped = tp->rx_dropped; 11941 stats->tx_dropped = tp->tx_dropped; 11942} 11943 11944static int tg3_get_regs_len(struct net_device *dev) 11945{ 11946 return TG3_REG_BLK_SIZE; 11947} 11948 11949static void tg3_get_regs(struct net_device *dev, 11950 struct ethtool_regs *regs, void *_p) 11951{ 11952 struct tg3 *tp = netdev_priv(dev); 11953 11954 regs->version = 0; 11955 11956 memset(_p, 0, TG3_REG_BLK_SIZE); 11957 11958 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11959 return; 11960 11961 tg3_full_lock(tp, 0); 11962 11963 tg3_dump_legacy_regs(tp, (u32 *)_p); 11964 11965 tg3_full_unlock(tp); 11966} 11967 11968static int tg3_get_eeprom_len(struct net_device *dev) 11969{ 11970 struct tg3 *tp = netdev_priv(dev); 11971 11972 return tp->nvram_size; 11973} 11974 11975static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 11976{ 11977 struct tg3 *tp = netdev_priv(dev); 11978 int ret, cpmu_restore = 0; 11979 u8 *pd; 11980 u32 i, offset, len, b_offset, b_count, cpmu_val = 0; 11981 __be32 val; 11982 11983 if (tg3_flag(tp, NO_NVRAM)) 11984 return -EINVAL; 11985 11986 offset = eeprom->offset; 11987 len = eeprom->len; 11988 eeprom->len = 0; 11989 11990 eeprom->magic = TG3_EEPROM_MAGIC; 11991 11992 /* Override clock, link aware and link idle modes */ 11993 if (tg3_flag(tp, CPMU_PRESENT)) { 11994 cpmu_val = tr32(TG3_CPMU_CTRL); 11995 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE | 11996 CPMU_CTRL_LINK_IDLE_MODE)) { 11997 tw32(TG3_CPMU_CTRL, cpmu_val & 11998 ~(CPMU_CTRL_LINK_AWARE_MODE | 11999 CPMU_CTRL_LINK_IDLE_MODE)); 12000 cpmu_restore = 1; 12001 } 12002 } 12003 tg3_override_clk(tp); 12004 12005 if (offset & 3) { 12006 /* adjustments to start on required 4 byte boundary */ 12007 b_offset = offset & 3; 12008 b_count = 4 - b_offset; 12009 if (b_count > len) { 12010 /* i.e. offset=1 len=2 */ 12011 b_count = len; 12012 } 12013 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 12014 if (ret) 12015 goto eeprom_done; 12016 memcpy(data, ((char *)&val) + b_offset, b_count); 12017 len -= b_count; 12018 offset += b_count; 12019 eeprom->len += b_count; 12020 } 12021 12022 /* read bytes up to the last 4 byte boundary */ 12023 pd = &data[eeprom->len]; 12024 for (i = 0; i < (len - (len & 3)); i += 4) { 12025 ret = tg3_nvram_read_be32(tp, offset + i, &val); 12026 if (ret) { 12027 if (i) 12028 i -= 4; 12029 eeprom->len += i; 12030 goto eeprom_done; 12031 } 12032 memcpy(pd + i, &val, 4); 12033 if (need_resched()) { 12034 if (signal_pending(current)) { 12035 eeprom->len += i; 12036 ret = -EINTR; 12037 goto eeprom_done; 12038 } 12039 cond_resched(); 12040 } 12041 } 12042 eeprom->len += i; 12043 12044 if (len & 3) { 12045 /* read last bytes not ending on 4 byte boundary */ 12046 pd = &data[eeprom->len]; 12047 b_count = len & 3; 12048 b_offset = offset + len - b_count; 12049 ret = tg3_nvram_read_be32(tp, b_offset, &val); 12050 if (ret) 12051 goto eeprom_done; 12052 memcpy(pd, &val, b_count); 12053 eeprom->len += b_count; 12054 } 12055 ret = 0; 12056 12057eeprom_done: 12058 /* Restore clock, link aware and link idle modes */ 12059 tg3_restore_clk(tp); 12060 if (cpmu_restore) 12061 tw32(TG3_CPMU_CTRL, cpmu_val); 12062 12063 return ret; 12064} 12065 12066static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12067{ 12068 struct tg3 *tp = netdev_priv(dev); 12069 int ret; 12070 u32 offset, len, b_offset, odd_len; 12071 u8 *buf; 12072 __be32 start = 0, end; 12073 12074 if (tg3_flag(tp, NO_NVRAM) || 12075 eeprom->magic != TG3_EEPROM_MAGIC) 12076 return -EINVAL; 12077 12078 offset = eeprom->offset; 12079 len = eeprom->len; 12080 12081 if ((b_offset = (offset & 3))) { 12082 /* adjustments to start on required 4 byte boundary */ 12083 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 12084 if (ret) 12085 return ret; 12086 len += b_offset; 12087 offset &= ~3; 12088 if (len < 4) 12089 len = 4; 12090 } 12091 12092 odd_len = 0; 12093 if (len & 3) { 12094 /* adjustments to end on required 4 byte boundary */ 12095 odd_len = 1; 12096 len = (len + 3) & ~3; 12097 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 12098 if (ret) 12099 return ret; 12100 } 12101 12102 buf = data; 12103 if (b_offset || odd_len) { 12104 buf = kmalloc(len, GFP_KERNEL); 12105 if (!buf) 12106 return -ENOMEM; 12107 if (b_offset) 12108 memcpy(buf, &start, 4); 12109 if (odd_len) 12110 memcpy(buf+len-4, &end, 4); 12111 memcpy(buf + b_offset, data, eeprom->len); 12112 } 12113 12114 ret = tg3_nvram_write_block(tp, offset, len, buf); 12115 12116 if (buf != data) 12117 kfree(buf); 12118 12119 return ret; 12120} 12121 12122static int tg3_get_link_ksettings(struct net_device *dev, 12123 struct ethtool_link_ksettings *cmd) 12124{ 12125 struct tg3 *tp = netdev_priv(dev); 12126 u32 supported, advertising; 12127 12128 if (tg3_flag(tp, USE_PHYLIB)) { 12129 struct phy_device *phydev; 12130 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12131 return -EAGAIN; 12132 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12133 phy_ethtool_ksettings_get(phydev, cmd); 12134 12135 return 0; 12136 } 12137 12138 supported = (SUPPORTED_Autoneg); 12139 12140 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12141 supported |= (SUPPORTED_1000baseT_Half | 12142 SUPPORTED_1000baseT_Full); 12143 12144 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12145 supported |= (SUPPORTED_100baseT_Half | 12146 SUPPORTED_100baseT_Full | 12147 SUPPORTED_10baseT_Half | 12148 SUPPORTED_10baseT_Full | 12149 SUPPORTED_TP); 12150 cmd->base.port = PORT_TP; 12151 } else { 12152 supported |= SUPPORTED_FIBRE; 12153 cmd->base.port = PORT_FIBRE; 12154 } 12155 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 12156 supported); 12157 12158 advertising = tp->link_config.advertising; 12159 if (tg3_flag(tp, PAUSE_AUTONEG)) { 12160 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 12161 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12162 advertising |= ADVERTISED_Pause; 12163 } else { 12164 advertising |= ADVERTISED_Pause | 12165 ADVERTISED_Asym_Pause; 12166 } 12167 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12168 advertising |= ADVERTISED_Asym_Pause; 12169 } 12170 } 12171 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 12172 advertising); 12173 12174 if (netif_running(dev) && tp->link_up) { 12175 cmd->base.speed = tp->link_config.active_speed; 12176 cmd->base.duplex = tp->link_config.active_duplex; 12177 ethtool_convert_legacy_u32_to_link_mode( 12178 cmd->link_modes.lp_advertising, 12179 tp->link_config.rmt_adv); 12180 12181 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12182 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 12183 cmd->base.eth_tp_mdix = ETH_TP_MDI_X; 12184 else 12185 cmd->base.eth_tp_mdix = ETH_TP_MDI; 12186 } 12187 } else { 12188 cmd->base.speed = SPEED_UNKNOWN; 12189 cmd->base.duplex = DUPLEX_UNKNOWN; 12190 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; 12191 } 12192 cmd->base.phy_address = tp->phy_addr; 12193 cmd->base.autoneg = tp->link_config.autoneg; 12194 return 0; 12195} 12196 12197static int tg3_set_link_ksettings(struct net_device *dev, 12198 const struct ethtool_link_ksettings *cmd) 12199{ 12200 struct tg3 *tp = netdev_priv(dev); 12201 u32 speed = cmd->base.speed; 12202 u32 advertising; 12203 12204 if (tg3_flag(tp, USE_PHYLIB)) { 12205 struct phy_device *phydev; 12206 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12207 return -EAGAIN; 12208 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12209 return phy_ethtool_ksettings_set(phydev, cmd); 12210 } 12211 12212 if (cmd->base.autoneg != AUTONEG_ENABLE && 12213 cmd->base.autoneg != AUTONEG_DISABLE) 12214 return -EINVAL; 12215 12216 if (cmd->base.autoneg == AUTONEG_DISABLE && 12217 cmd->base.duplex != DUPLEX_FULL && 12218 cmd->base.duplex != DUPLEX_HALF) 12219 return -EINVAL; 12220 12221 ethtool_convert_link_mode_to_legacy_u32(&advertising, 12222 cmd->link_modes.advertising); 12223 12224 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12225 u32 mask = ADVERTISED_Autoneg | 12226 ADVERTISED_Pause | 12227 ADVERTISED_Asym_Pause; 12228 12229 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12230 mask |= ADVERTISED_1000baseT_Half | 12231 ADVERTISED_1000baseT_Full; 12232 12233 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 12234 mask |= ADVERTISED_100baseT_Half | 12235 ADVERTISED_100baseT_Full | 12236 ADVERTISED_10baseT_Half | 12237 ADVERTISED_10baseT_Full | 12238 ADVERTISED_TP; 12239 else 12240 mask |= ADVERTISED_FIBRE; 12241 12242 if (advertising & ~mask) 12243 return -EINVAL; 12244 12245 mask &= (ADVERTISED_1000baseT_Half | 12246 ADVERTISED_1000baseT_Full | 12247 ADVERTISED_100baseT_Half | 12248 ADVERTISED_100baseT_Full | 12249 ADVERTISED_10baseT_Half | 12250 ADVERTISED_10baseT_Full); 12251 12252 advertising &= mask; 12253 } else { 12254 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 12255 if (speed != SPEED_1000) 12256 return -EINVAL; 12257 12258 if (cmd->base.duplex != DUPLEX_FULL) 12259 return -EINVAL; 12260 } else { 12261 if (speed != SPEED_100 && 12262 speed != SPEED_10) 12263 return -EINVAL; 12264 } 12265 } 12266 12267 tg3_full_lock(tp, 0); 12268 12269 tp->link_config.autoneg = cmd->base.autoneg; 12270 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12271 tp->link_config.advertising = (advertising | 12272 ADVERTISED_Autoneg); 12273 tp->link_config.speed = SPEED_UNKNOWN; 12274 tp->link_config.duplex = DUPLEX_UNKNOWN; 12275 } else { 12276 tp->link_config.advertising = 0; 12277 tp->link_config.speed = speed; 12278 tp->link_config.duplex = cmd->base.duplex; 12279 } 12280 12281 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12282 12283 tg3_warn_mgmt_link_flap(tp); 12284 12285 if (netif_running(dev)) 12286 tg3_setup_phy(tp, true); 12287 12288 tg3_full_unlock(tp); 12289 12290 return 0; 12291} 12292 12293static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 12294{ 12295 struct tg3 *tp = netdev_priv(dev); 12296 12297 strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 12298 strscpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 12299 strscpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 12300} 12301 12302static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12303{ 12304 struct tg3 *tp = netdev_priv(dev); 12305 12306 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 12307 wol->supported = WAKE_MAGIC; 12308 else 12309 wol->supported = 0; 12310 wol->wolopts = 0; 12311 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 12312 wol->wolopts = WAKE_MAGIC; 12313 memset(&wol->sopass, 0, sizeof(wol->sopass)); 12314} 12315 12316static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12317{ 12318 struct tg3 *tp = netdev_priv(dev); 12319 struct device *dp = &tp->pdev->dev; 12320 12321 if (wol->wolopts & ~WAKE_MAGIC) 12322 return -EINVAL; 12323 if ((wol->wolopts & WAKE_MAGIC) && 12324 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 12325 return -EINVAL; 12326 12327 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 12328 12329 if (device_may_wakeup(dp)) 12330 tg3_flag_set(tp, WOL_ENABLE); 12331 else 12332 tg3_flag_clear(tp, WOL_ENABLE); 12333 12334 return 0; 12335} 12336 12337static u32 tg3_get_msglevel(struct net_device *dev) 12338{ 12339 struct tg3 *tp = netdev_priv(dev); 12340 return tp->msg_enable; 12341} 12342 12343static void tg3_set_msglevel(struct net_device *dev, u32 value) 12344{ 12345 struct tg3 *tp = netdev_priv(dev); 12346 tp->msg_enable = value; 12347} 12348 12349static int tg3_nway_reset(struct net_device *dev) 12350{ 12351 struct tg3 *tp = netdev_priv(dev); 12352 int r; 12353 12354 if (!netif_running(dev)) 12355 return -EAGAIN; 12356 12357 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12358 return -EINVAL; 12359 12360 tg3_warn_mgmt_link_flap(tp); 12361 12362 if (tg3_flag(tp, USE_PHYLIB)) { 12363 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12364 return -EAGAIN; 12365 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 12366 } else { 12367 u32 bmcr; 12368 12369 spin_lock_bh(&tp->lock); 12370 r = -EINVAL; 12371 tg3_readphy(tp, MII_BMCR, &bmcr); 12372 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 12373 ((bmcr & BMCR_ANENABLE) || 12374 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 12375 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 12376 BMCR_ANENABLE); 12377 r = 0; 12378 } 12379 spin_unlock_bh(&tp->lock); 12380 } 12381 12382 return r; 12383} 12384 12385static void tg3_get_ringparam(struct net_device *dev, 12386 struct ethtool_ringparam *ering, 12387 struct kernel_ethtool_ringparam *kernel_ering, 12388 struct netlink_ext_ack *extack) 12389{ 12390 struct tg3 *tp = netdev_priv(dev); 12391 12392 ering->rx_max_pending = tp->rx_std_ring_mask; 12393 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12394 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 12395 else 12396 ering->rx_jumbo_max_pending = 0; 12397 12398 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 12399 12400 ering->rx_pending = tp->rx_pending; 12401 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12402 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 12403 else 12404 ering->rx_jumbo_pending = 0; 12405 12406 ering->tx_pending = tp->napi[0].tx_pending; 12407} 12408 12409static int tg3_set_ringparam(struct net_device *dev, 12410 struct ethtool_ringparam *ering, 12411 struct kernel_ethtool_ringparam *kernel_ering, 12412 struct netlink_ext_ack *extack) 12413{ 12414 struct tg3 *tp = netdev_priv(dev); 12415 int i, irq_sync = 0, err = 0; 12416 bool reset_phy = false; 12417 12418 if ((ering->rx_pending > tp->rx_std_ring_mask) || 12419 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 12420 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 12421 (ering->tx_pending <= MAX_SKB_FRAGS) || 12422 (tg3_flag(tp, TSO_BUG) && 12423 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 12424 return -EINVAL; 12425 12426 if (netif_running(dev)) { 12427 tg3_phy_stop(tp); 12428 tg3_netif_stop(tp); 12429 irq_sync = 1; 12430 } 12431 12432 tg3_full_lock(tp, irq_sync); 12433 12434 tp->rx_pending = ering->rx_pending; 12435 12436 if (tg3_flag(tp, MAX_RXPEND_64) && 12437 tp->rx_pending > 63) 12438 tp->rx_pending = 63; 12439 12440 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12441 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 12442 12443 for (i = 0; i < tp->irq_max; i++) 12444 tp->napi[i].tx_pending = ering->tx_pending; 12445 12446 if (netif_running(dev)) { 12447 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12448 /* Reset PHY to avoid PHY lock up */ 12449 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12450 tg3_asic_rev(tp) == ASIC_REV_5719 || 12451 tg3_asic_rev(tp) == ASIC_REV_5720) 12452 reset_phy = true; 12453 12454 err = tg3_restart_hw(tp, reset_phy); 12455 if (!err) 12456 tg3_netif_start(tp); 12457 } 12458 12459 tg3_full_unlock(tp); 12460 12461 if (irq_sync && !err) 12462 tg3_phy_start(tp); 12463 12464 return err; 12465} 12466 12467static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12468{ 12469 struct tg3 *tp = netdev_priv(dev); 12470 12471 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 12472 12473 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 12474 epause->rx_pause = 1; 12475 else 12476 epause->rx_pause = 0; 12477 12478 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 12479 epause->tx_pause = 1; 12480 else 12481 epause->tx_pause = 0; 12482} 12483 12484static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12485{ 12486 struct tg3 *tp = netdev_priv(dev); 12487 int err = 0; 12488 bool reset_phy = false; 12489 12490 if (tp->link_config.autoneg == AUTONEG_ENABLE) 12491 tg3_warn_mgmt_link_flap(tp); 12492 12493 if (tg3_flag(tp, USE_PHYLIB)) { 12494 struct phy_device *phydev; 12495 12496 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12497 12498 if (!phy_validate_pause(phydev, epause)) 12499 return -EINVAL; 12500 12501 tp->link_config.flowctrl = 0; 12502 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause); 12503 if (epause->rx_pause) { 12504 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12505 12506 if (epause->tx_pause) { 12507 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12508 } 12509 } else if (epause->tx_pause) { 12510 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12511 } 12512 12513 if (epause->autoneg) 12514 tg3_flag_set(tp, PAUSE_AUTONEG); 12515 else 12516 tg3_flag_clear(tp, PAUSE_AUTONEG); 12517 12518 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 12519 if (phydev->autoneg) { 12520 /* phy_set_asym_pause() will 12521 * renegotiate the link to inform our 12522 * link partner of our flow control 12523 * settings, even if the flow control 12524 * is forced. Let tg3_adjust_link() 12525 * do the final flow control setup. 12526 */ 12527 return 0; 12528 } 12529 12530 if (!epause->autoneg) 12531 tg3_setup_flow_control(tp, 0, 0); 12532 } 12533 } else { 12534 int irq_sync = 0; 12535 12536 if (netif_running(dev)) { 12537 tg3_netif_stop(tp); 12538 irq_sync = 1; 12539 } 12540 12541 tg3_full_lock(tp, irq_sync); 12542 12543 if (epause->autoneg) 12544 tg3_flag_set(tp, PAUSE_AUTONEG); 12545 else 12546 tg3_flag_clear(tp, PAUSE_AUTONEG); 12547 if (epause->rx_pause) 12548 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12549 else 12550 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 12551 if (epause->tx_pause) 12552 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12553 else 12554 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 12555 12556 if (netif_running(dev)) { 12557 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12558 /* Reset PHY to avoid PHY lock up */ 12559 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 12560 tg3_asic_rev(tp) == ASIC_REV_5719 || 12561 tg3_asic_rev(tp) == ASIC_REV_5720) 12562 reset_phy = true; 12563 12564 err = tg3_restart_hw(tp, reset_phy); 12565 if (!err) 12566 tg3_netif_start(tp); 12567 } 12568 12569 tg3_full_unlock(tp); 12570 } 12571 12572 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12573 12574 return err; 12575} 12576 12577static int tg3_get_sset_count(struct net_device *dev, int sset) 12578{ 12579 switch (sset) { 12580 case ETH_SS_TEST: 12581 return TG3_NUM_TEST; 12582 case ETH_SS_STATS: 12583 return TG3_NUM_STATS; 12584 default: 12585 return -EOPNOTSUPP; 12586 } 12587} 12588 12589static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 12590 u32 *rules __always_unused) 12591{ 12592 struct tg3 *tp = netdev_priv(dev); 12593 12594 if (!tg3_flag(tp, SUPPORT_MSIX)) 12595 return -EOPNOTSUPP; 12596 12597 switch (info->cmd) { 12598 case ETHTOOL_GRXRINGS: 12599 if (netif_running(tp->dev)) 12600 info->data = tp->rxq_cnt; 12601 else { 12602 info->data = num_online_cpus(); 12603 if (info->data > TG3_RSS_MAX_NUM_QS) 12604 info->data = TG3_RSS_MAX_NUM_QS; 12605 } 12606 12607 return 0; 12608 12609 default: 12610 return -EOPNOTSUPP; 12611 } 12612} 12613 12614static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 12615{ 12616 u32 size = 0; 12617 struct tg3 *tp = netdev_priv(dev); 12618 12619 if (tg3_flag(tp, SUPPORT_MSIX)) 12620 size = TG3_RSS_INDIR_TBL_SIZE; 12621 12622 return size; 12623} 12624 12625static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc) 12626{ 12627 struct tg3 *tp = netdev_priv(dev); 12628 int i; 12629 12630 if (hfunc) 12631 *hfunc = ETH_RSS_HASH_TOP; 12632 if (!indir) 12633 return 0; 12634 12635 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12636 indir[i] = tp->rss_ind_tbl[i]; 12637 12638 return 0; 12639} 12640 12641static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, 12642 const u8 hfunc) 12643{ 12644 struct tg3 *tp = netdev_priv(dev); 12645 size_t i; 12646 12647 /* We require at least one supported parameter to be changed and no 12648 * change in any of the unsupported parameters 12649 */ 12650 if (key || 12651 (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)) 12652 return -EOPNOTSUPP; 12653 12654 if (!indir) 12655 return 0; 12656 12657 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12658 tp->rss_ind_tbl[i] = indir[i]; 12659 12660 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 12661 return 0; 12662 12663 /* It is legal to write the indirection 12664 * table while the device is running. 12665 */ 12666 tg3_full_lock(tp, 0); 12667 tg3_rss_write_indir_tbl(tp); 12668 tg3_full_unlock(tp); 12669 12670 return 0; 12671} 12672 12673static void tg3_get_channels(struct net_device *dev, 12674 struct ethtool_channels *channel) 12675{ 12676 struct tg3 *tp = netdev_priv(dev); 12677 u32 deflt_qs = netif_get_num_default_rss_queues(); 12678 12679 channel->max_rx = tp->rxq_max; 12680 channel->max_tx = tp->txq_max; 12681 12682 if (netif_running(dev)) { 12683 channel->rx_count = tp->rxq_cnt; 12684 channel->tx_count = tp->txq_cnt; 12685 } else { 12686 if (tp->rxq_req) 12687 channel->rx_count = tp->rxq_req; 12688 else 12689 channel->rx_count = min(deflt_qs, tp->rxq_max); 12690 12691 if (tp->txq_req) 12692 channel->tx_count = tp->txq_req; 12693 else 12694 channel->tx_count = min(deflt_qs, tp->txq_max); 12695 } 12696} 12697 12698static int tg3_set_channels(struct net_device *dev, 12699 struct ethtool_channels *channel) 12700{ 12701 struct tg3 *tp = netdev_priv(dev); 12702 12703 if (!tg3_flag(tp, SUPPORT_MSIX)) 12704 return -EOPNOTSUPP; 12705 12706 if (channel->rx_count > tp->rxq_max || 12707 channel->tx_count > tp->txq_max) 12708 return -EINVAL; 12709 12710 tp->rxq_req = channel->rx_count; 12711 tp->txq_req = channel->tx_count; 12712 12713 if (!netif_running(dev)) 12714 return 0; 12715 12716 tg3_stop(tp); 12717 12718 tg3_carrier_off(tp); 12719 12720 tg3_start(tp, true, false, false); 12721 12722 return 0; 12723} 12724 12725static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 12726{ 12727 switch (stringset) { 12728 case ETH_SS_STATS: 12729 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys)); 12730 break; 12731 case ETH_SS_TEST: 12732 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys)); 12733 break; 12734 default: 12735 WARN_ON(1); /* we need a WARN() */ 12736 break; 12737 } 12738} 12739 12740static int tg3_set_phys_id(struct net_device *dev, 12741 enum ethtool_phys_id_state state) 12742{ 12743 struct tg3 *tp = netdev_priv(dev); 12744 12745 switch (state) { 12746 case ETHTOOL_ID_ACTIVE: 12747 return 1; /* cycle on/off once per second */ 12748 12749 case ETHTOOL_ID_ON: 12750 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12751 LED_CTRL_1000MBPS_ON | 12752 LED_CTRL_100MBPS_ON | 12753 LED_CTRL_10MBPS_ON | 12754 LED_CTRL_TRAFFIC_OVERRIDE | 12755 LED_CTRL_TRAFFIC_BLINK | 12756 LED_CTRL_TRAFFIC_LED); 12757 break; 12758 12759 case ETHTOOL_ID_OFF: 12760 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12761 LED_CTRL_TRAFFIC_OVERRIDE); 12762 break; 12763 12764 case ETHTOOL_ID_INACTIVE: 12765 tw32(MAC_LED_CTRL, tp->led_ctrl); 12766 break; 12767 } 12768 12769 return 0; 12770} 12771 12772static void tg3_get_ethtool_stats(struct net_device *dev, 12773 struct ethtool_stats *estats, u64 *tmp_stats) 12774{ 12775 struct tg3 *tp = netdev_priv(dev); 12776 12777 if (tp->hw_stats) 12778 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 12779 else 12780 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 12781} 12782 12783static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen) 12784{ 12785 int i; 12786 __be32 *buf; 12787 u32 offset = 0, len = 0; 12788 u32 magic, val; 12789 12790 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 12791 return NULL; 12792 12793 if (magic == TG3_EEPROM_MAGIC) { 12794 for (offset = TG3_NVM_DIR_START; 12795 offset < TG3_NVM_DIR_END; 12796 offset += TG3_NVM_DIRENT_SIZE) { 12797 if (tg3_nvram_read(tp, offset, &val)) 12798 return NULL; 12799 12800 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 12801 TG3_NVM_DIRTYPE_EXTVPD) 12802 break; 12803 } 12804 12805 if (offset != TG3_NVM_DIR_END) { 12806 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 12807 if (tg3_nvram_read(tp, offset + 4, &offset)) 12808 return NULL; 12809 12810 offset = tg3_nvram_logical_addr(tp, offset); 12811 } 12812 12813 if (!offset || !len) { 12814 offset = TG3_NVM_VPD_OFF; 12815 len = TG3_NVM_VPD_LEN; 12816 } 12817 12818 buf = kmalloc(len, GFP_KERNEL); 12819 if (!buf) 12820 return NULL; 12821 12822 for (i = 0; i < len; i += 4) { 12823 /* The data is in little-endian format in NVRAM. 12824 * Use the big-endian read routines to preserve 12825 * the byte order as it exists in NVRAM. 12826 */ 12827 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 12828 goto error; 12829 } 12830 *vpdlen = len; 12831 } else { 12832 buf = pci_vpd_alloc(tp->pdev, vpdlen); 12833 if (IS_ERR(buf)) 12834 return NULL; 12835 } 12836 12837 return buf; 12838 12839error: 12840 kfree(buf); 12841 return NULL; 12842} 12843 12844#define NVRAM_TEST_SIZE 0x100 12845#define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 12846#define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 12847#define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 12848#define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 12849#define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 12850#define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 12851#define NVRAM_SELFBOOT_HW_SIZE 0x20 12852#define NVRAM_SELFBOOT_DATA_SIZE 0x1c 12853 12854static int tg3_test_nvram(struct tg3 *tp) 12855{ 12856 u32 csum, magic; 12857 __be32 *buf; 12858 int i, j, k, err = 0, size; 12859 unsigned int len; 12860 12861 if (tg3_flag(tp, NO_NVRAM)) 12862 return 0; 12863 12864 if (tg3_nvram_read(tp, 0, &magic) != 0) 12865 return -EIO; 12866 12867 if (magic == TG3_EEPROM_MAGIC) 12868 size = NVRAM_TEST_SIZE; 12869 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 12870 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 12871 TG3_EEPROM_SB_FORMAT_1) { 12872 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 12873 case TG3_EEPROM_SB_REVISION_0: 12874 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 12875 break; 12876 case TG3_EEPROM_SB_REVISION_2: 12877 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 12878 break; 12879 case TG3_EEPROM_SB_REVISION_3: 12880 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 12881 break; 12882 case TG3_EEPROM_SB_REVISION_4: 12883 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 12884 break; 12885 case TG3_EEPROM_SB_REVISION_5: 12886 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 12887 break; 12888 case TG3_EEPROM_SB_REVISION_6: 12889 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 12890 break; 12891 default: 12892 return -EIO; 12893 } 12894 } else 12895 return 0; 12896 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 12897 size = NVRAM_SELFBOOT_HW_SIZE; 12898 else 12899 return -EIO; 12900 12901 buf = kmalloc(size, GFP_KERNEL); 12902 if (buf == NULL) 12903 return -ENOMEM; 12904 12905 err = -EIO; 12906 for (i = 0, j = 0; i < size; i += 4, j++) { 12907 err = tg3_nvram_read_be32(tp, i, &buf[j]); 12908 if (err) 12909 break; 12910 } 12911 if (i < size) 12912 goto out; 12913 12914 /* Selfboot format */ 12915 magic = be32_to_cpu(buf[0]); 12916 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 12917 TG3_EEPROM_MAGIC_FW) { 12918 u8 *buf8 = (u8 *) buf, csum8 = 0; 12919 12920 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 12921 TG3_EEPROM_SB_REVISION_2) { 12922 /* For rev 2, the csum doesn't include the MBA. */ 12923 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 12924 csum8 += buf8[i]; 12925 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 12926 csum8 += buf8[i]; 12927 } else { 12928 for (i = 0; i < size; i++) 12929 csum8 += buf8[i]; 12930 } 12931 12932 if (csum8 == 0) { 12933 err = 0; 12934 goto out; 12935 } 12936 12937 err = -EIO; 12938 goto out; 12939 } 12940 12941 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 12942 TG3_EEPROM_MAGIC_HW) { 12943 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 12944 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 12945 u8 *buf8 = (u8 *) buf; 12946 12947 /* Separate the parity bits and the data bytes. */ 12948 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 12949 if ((i == 0) || (i == 8)) { 12950 int l; 12951 u8 msk; 12952 12953 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 12954 parity[k++] = buf8[i] & msk; 12955 i++; 12956 } else if (i == 16) { 12957 int l; 12958 u8 msk; 12959 12960 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 12961 parity[k++] = buf8[i] & msk; 12962 i++; 12963 12964 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 12965 parity[k++] = buf8[i] & msk; 12966 i++; 12967 } 12968 data[j++] = buf8[i]; 12969 } 12970 12971 err = -EIO; 12972 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 12973 u8 hw8 = hweight8(data[i]); 12974 12975 if ((hw8 & 0x1) && parity[i]) 12976 goto out; 12977 else if (!(hw8 & 0x1) && !parity[i]) 12978 goto out; 12979 } 12980 err = 0; 12981 goto out; 12982 } 12983 12984 err = -EIO; 12985 12986 /* Bootstrap checksum at offset 0x10 */ 12987 csum = calc_crc((unsigned char *) buf, 0x10); 12988 if (csum != le32_to_cpu(buf[0x10/4])) 12989 goto out; 12990 12991 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 12992 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 12993 if (csum != le32_to_cpu(buf[0xfc/4])) 12994 goto out; 12995 12996 kfree(buf); 12997 12998 buf = tg3_vpd_readblock(tp, &len); 12999 if (!buf) 13000 return -ENOMEM; 13001 13002 err = pci_vpd_check_csum(buf, len); 13003 /* go on if no checksum found */ 13004 if (err == 1) 13005 err = 0; 13006out: 13007 kfree(buf); 13008 return err; 13009} 13010 13011#define TG3_SERDES_TIMEOUT_SEC 2 13012#define TG3_COPPER_TIMEOUT_SEC 6 13013 13014static int tg3_test_link(struct tg3 *tp) 13015{ 13016 int i, max; 13017 13018 if (!netif_running(tp->dev)) 13019 return -ENODEV; 13020 13021 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 13022 max = TG3_SERDES_TIMEOUT_SEC; 13023 else 13024 max = TG3_COPPER_TIMEOUT_SEC; 13025 13026 for (i = 0; i < max; i++) { 13027 if (tp->link_up) 13028 return 0; 13029 13030 if (msleep_interruptible(1000)) 13031 break; 13032 } 13033 13034 return -EIO; 13035} 13036 13037/* Only test the commonly used registers */ 13038static int tg3_test_registers(struct tg3 *tp) 13039{ 13040 int i, is_5705, is_5750; 13041 u32 offset, read_mask, write_mask, val, save_val, read_val; 13042 static struct { 13043 u16 offset; 13044 u16 flags; 13045#define TG3_FL_5705 0x1 13046#define TG3_FL_NOT_5705 0x2 13047#define TG3_FL_NOT_5788 0x4 13048#define TG3_FL_NOT_5750 0x8 13049 u32 read_mask; 13050 u32 write_mask; 13051 } reg_tbl[] = { 13052 /* MAC Control Registers */ 13053 { MAC_MODE, TG3_FL_NOT_5705, 13054 0x00000000, 0x00ef6f8c }, 13055 { MAC_MODE, TG3_FL_5705, 13056 0x00000000, 0x01ef6b8c }, 13057 { MAC_STATUS, TG3_FL_NOT_5705, 13058 0x03800107, 0x00000000 }, 13059 { MAC_STATUS, TG3_FL_5705, 13060 0x03800100, 0x00000000 }, 13061 { MAC_ADDR_0_HIGH, 0x0000, 13062 0x00000000, 0x0000ffff }, 13063 { MAC_ADDR_0_LOW, 0x0000, 13064 0x00000000, 0xffffffff }, 13065 { MAC_RX_MTU_SIZE, 0x0000, 13066 0x00000000, 0x0000ffff }, 13067 { MAC_TX_MODE, 0x0000, 13068 0x00000000, 0x00000070 }, 13069 { MAC_TX_LENGTHS, 0x0000, 13070 0x00000000, 0x00003fff }, 13071 { MAC_RX_MODE, TG3_FL_NOT_5705, 13072 0x00000000, 0x000007fc }, 13073 { MAC_RX_MODE, TG3_FL_5705, 13074 0x00000000, 0x000007dc }, 13075 { MAC_HASH_REG_0, 0x0000, 13076 0x00000000, 0xffffffff }, 13077 { MAC_HASH_REG_1, 0x0000, 13078 0x00000000, 0xffffffff }, 13079 { MAC_HASH_REG_2, 0x0000, 13080 0x00000000, 0xffffffff }, 13081 { MAC_HASH_REG_3, 0x0000, 13082 0x00000000, 0xffffffff }, 13083 13084 /* Receive Data and Receive BD Initiator Control Registers. */ 13085 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 13086 0x00000000, 0xffffffff }, 13087 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 13088 0x00000000, 0xffffffff }, 13089 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 13090 0x00000000, 0x00000003 }, 13091 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 13092 0x00000000, 0xffffffff }, 13093 { RCVDBDI_STD_BD+0, 0x0000, 13094 0x00000000, 0xffffffff }, 13095 { RCVDBDI_STD_BD+4, 0x0000, 13096 0x00000000, 0xffffffff }, 13097 { RCVDBDI_STD_BD+8, 0x0000, 13098 0x00000000, 0xffff0002 }, 13099 { RCVDBDI_STD_BD+0xc, 0x0000, 13100 0x00000000, 0xffffffff }, 13101 13102 /* Receive BD Initiator Control Registers. */ 13103 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 13104 0x00000000, 0xffffffff }, 13105 { RCVBDI_STD_THRESH, TG3_FL_5705, 13106 0x00000000, 0x000003ff }, 13107 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 13108 0x00000000, 0xffffffff }, 13109 13110 /* Host Coalescing Control Registers. */ 13111 { HOSTCC_MODE, TG3_FL_NOT_5705, 13112 0x00000000, 0x00000004 }, 13113 { HOSTCC_MODE, TG3_FL_5705, 13114 0x00000000, 0x000000f6 }, 13115 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 13116 0x00000000, 0xffffffff }, 13117 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 13118 0x00000000, 0x000003ff }, 13119 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 13120 0x00000000, 0xffffffff }, 13121 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 13122 0x00000000, 0x000003ff }, 13123 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 13124 0x00000000, 0xffffffff }, 13125 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13126 0x00000000, 0x000000ff }, 13127 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 13128 0x00000000, 0xffffffff }, 13129 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13130 0x00000000, 0x000000ff }, 13131 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 13132 0x00000000, 0xffffffff }, 13133 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 13134 0x00000000, 0xffffffff }, 13135 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13136 0x00000000, 0xffffffff }, 13137 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13138 0x00000000, 0x000000ff }, 13139 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13140 0x00000000, 0xffffffff }, 13141 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13142 0x00000000, 0x000000ff }, 13143 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 13144 0x00000000, 0xffffffff }, 13145 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 13146 0x00000000, 0xffffffff }, 13147 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 13148 0x00000000, 0xffffffff }, 13149 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 13150 0x00000000, 0xffffffff }, 13151 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 13152 0x00000000, 0xffffffff }, 13153 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 13154 0xffffffff, 0x00000000 }, 13155 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 13156 0xffffffff, 0x00000000 }, 13157 13158 /* Buffer Manager Control Registers. */ 13159 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 13160 0x00000000, 0x007fff80 }, 13161 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 13162 0x00000000, 0x007fffff }, 13163 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 13164 0x00000000, 0x0000003f }, 13165 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 13166 0x00000000, 0x000001ff }, 13167 { BUFMGR_MB_HIGH_WATER, 0x0000, 13168 0x00000000, 0x000001ff }, 13169 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 13170 0xffffffff, 0x00000000 }, 13171 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 13172 0xffffffff, 0x00000000 }, 13173 13174 /* Mailbox Registers */ 13175 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 13176 0x00000000, 0x000001ff }, 13177 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 13178 0x00000000, 0x000001ff }, 13179 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 13180 0x00000000, 0x000007ff }, 13181 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 13182 0x00000000, 0x000001ff }, 13183 13184 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 13185 }; 13186 13187 is_5705 = is_5750 = 0; 13188 if (tg3_flag(tp, 5705_PLUS)) { 13189 is_5705 = 1; 13190 if (tg3_flag(tp, 5750_PLUS)) 13191 is_5750 = 1; 13192 } 13193 13194 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 13195 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 13196 continue; 13197 13198 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 13199 continue; 13200 13201 if (tg3_flag(tp, IS_5788) && 13202 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 13203 continue; 13204 13205 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 13206 continue; 13207 13208 offset = (u32) reg_tbl[i].offset; 13209 read_mask = reg_tbl[i].read_mask; 13210 write_mask = reg_tbl[i].write_mask; 13211 13212 /* Save the original register content */ 13213 save_val = tr32(offset); 13214 13215 /* Determine the read-only value. */ 13216 read_val = save_val & read_mask; 13217 13218 /* Write zero to the register, then make sure the read-only bits 13219 * are not changed and the read/write bits are all zeros. 13220 */ 13221 tw32(offset, 0); 13222 13223 val = tr32(offset); 13224 13225 /* Test the read-only and read/write bits. */ 13226 if (((val & read_mask) != read_val) || (val & write_mask)) 13227 goto out; 13228 13229 /* Write ones to all the bits defined by RdMask and WrMask, then 13230 * make sure the read-only bits are not changed and the 13231 * read/write bits are all ones. 13232 */ 13233 tw32(offset, read_mask | write_mask); 13234 13235 val = tr32(offset); 13236 13237 /* Test the read-only bits. */ 13238 if ((val & read_mask) != read_val) 13239 goto out; 13240 13241 /* Test the read/write bits. */ 13242 if ((val & write_mask) != write_mask) 13243 goto out; 13244 13245 tw32(offset, save_val); 13246 } 13247 13248 return 0; 13249 13250out: 13251 if (netif_msg_hw(tp)) 13252 netdev_err(tp->dev, 13253 "Register test failed at offset %x\n", offset); 13254 tw32(offset, save_val); 13255 return -EIO; 13256} 13257 13258static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 13259{ 13260 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 13261 int i; 13262 u32 j; 13263 13264 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 13265 for (j = 0; j < len; j += 4) { 13266 u32 val; 13267 13268 tg3_write_mem(tp, offset + j, test_pattern[i]); 13269 tg3_read_mem(tp, offset + j, &val); 13270 if (val != test_pattern[i]) 13271 return -EIO; 13272 } 13273 } 13274 return 0; 13275} 13276 13277static int tg3_test_memory(struct tg3 *tp) 13278{ 13279 static struct mem_entry { 13280 u32 offset; 13281 u32 len; 13282 } mem_tbl_570x[] = { 13283 { 0x00000000, 0x00b50}, 13284 { 0x00002000, 0x1c000}, 13285 { 0xffffffff, 0x00000} 13286 }, mem_tbl_5705[] = { 13287 { 0x00000100, 0x0000c}, 13288 { 0x00000200, 0x00008}, 13289 { 0x00004000, 0x00800}, 13290 { 0x00006000, 0x01000}, 13291 { 0x00008000, 0x02000}, 13292 { 0x00010000, 0x0e000}, 13293 { 0xffffffff, 0x00000} 13294 }, mem_tbl_5755[] = { 13295 { 0x00000200, 0x00008}, 13296 { 0x00004000, 0x00800}, 13297 { 0x00006000, 0x00800}, 13298 { 0x00008000, 0x02000}, 13299 { 0x00010000, 0x0c000}, 13300 { 0xffffffff, 0x00000} 13301 }, mem_tbl_5906[] = { 13302 { 0x00000200, 0x00008}, 13303 { 0x00004000, 0x00400}, 13304 { 0x00006000, 0x00400}, 13305 { 0x00008000, 0x01000}, 13306 { 0x00010000, 0x01000}, 13307 { 0xffffffff, 0x00000} 13308 }, mem_tbl_5717[] = { 13309 { 0x00000200, 0x00008}, 13310 { 0x00010000, 0x0a000}, 13311 { 0x00020000, 0x13c00}, 13312 { 0xffffffff, 0x00000} 13313 }, mem_tbl_57765[] = { 13314 { 0x00000200, 0x00008}, 13315 { 0x00004000, 0x00800}, 13316 { 0x00006000, 0x09800}, 13317 { 0x00010000, 0x0a000}, 13318 { 0xffffffff, 0x00000} 13319 }; 13320 struct mem_entry *mem_tbl; 13321 int err = 0; 13322 int i; 13323 13324 if (tg3_flag(tp, 5717_PLUS)) 13325 mem_tbl = mem_tbl_5717; 13326 else if (tg3_flag(tp, 57765_CLASS) || 13327 tg3_asic_rev(tp) == ASIC_REV_5762) 13328 mem_tbl = mem_tbl_57765; 13329 else if (tg3_flag(tp, 5755_PLUS)) 13330 mem_tbl = mem_tbl_5755; 13331 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 13332 mem_tbl = mem_tbl_5906; 13333 else if (tg3_flag(tp, 5705_PLUS)) 13334 mem_tbl = mem_tbl_5705; 13335 else 13336 mem_tbl = mem_tbl_570x; 13337 13338 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 13339 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 13340 if (err) 13341 break; 13342 } 13343 13344 return err; 13345} 13346 13347#define TG3_TSO_MSS 500 13348 13349#define TG3_TSO_IP_HDR_LEN 20 13350#define TG3_TSO_TCP_HDR_LEN 20 13351#define TG3_TSO_TCP_OPT_LEN 12 13352 13353static const u8 tg3_tso_header[] = { 133540x08, 0x00, 133550x45, 0x00, 0x00, 0x00, 133560x00, 0x00, 0x40, 0x00, 133570x40, 0x06, 0x00, 0x00, 133580x0a, 0x00, 0x00, 0x01, 133590x0a, 0x00, 0x00, 0x02, 133600x0d, 0x00, 0xe0, 0x00, 133610x00, 0x00, 0x01, 0x00, 133620x00, 0x00, 0x02, 0x00, 133630x80, 0x10, 0x10, 0x00, 133640x14, 0x09, 0x00, 0x00, 133650x01, 0x01, 0x08, 0x0a, 133660x11, 0x11, 0x11, 0x11, 133670x11, 0x11, 0x11, 0x11, 13368}; 13369 13370static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 13371{ 13372 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 13373 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 13374 u32 budget; 13375 struct sk_buff *skb; 13376 u8 *tx_data, *rx_data; 13377 dma_addr_t map; 13378 int num_pkts, tx_len, rx_len, i, err; 13379 struct tg3_rx_buffer_desc *desc; 13380 struct tg3_napi *tnapi, *rnapi; 13381 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 13382 13383 tnapi = &tp->napi[0]; 13384 rnapi = &tp->napi[0]; 13385 if (tp->irq_cnt > 1) { 13386 if (tg3_flag(tp, ENABLE_RSS)) 13387 rnapi = &tp->napi[1]; 13388 if (tg3_flag(tp, ENABLE_TSS)) 13389 tnapi = &tp->napi[1]; 13390 } 13391 coal_now = tnapi->coal_now | rnapi->coal_now; 13392 13393 err = -EIO; 13394 13395 tx_len = pktsz; 13396 skb = netdev_alloc_skb(tp->dev, tx_len); 13397 if (!skb) 13398 return -ENOMEM; 13399 13400 tx_data = skb_put(skb, tx_len); 13401 memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN); 13402 memset(tx_data + ETH_ALEN, 0x0, 8); 13403 13404 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 13405 13406 if (tso_loopback) { 13407 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 13408 13409 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 13410 TG3_TSO_TCP_OPT_LEN; 13411 13412 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 13413 sizeof(tg3_tso_header)); 13414 mss = TG3_TSO_MSS; 13415 13416 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 13417 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 13418 13419 /* Set the total length field in the IP header */ 13420 iph->tot_len = htons((u16)(mss + hdr_len)); 13421 13422 base_flags = (TXD_FLAG_CPU_PRE_DMA | 13423 TXD_FLAG_CPU_POST_DMA); 13424 13425 if (tg3_flag(tp, HW_TSO_1) || 13426 tg3_flag(tp, HW_TSO_2) || 13427 tg3_flag(tp, HW_TSO_3)) { 13428 struct tcphdr *th; 13429 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 13430 th = (struct tcphdr *)&tx_data[val]; 13431 th->check = 0; 13432 } else 13433 base_flags |= TXD_FLAG_TCPUDP_CSUM; 13434 13435 if (tg3_flag(tp, HW_TSO_3)) { 13436 mss |= (hdr_len & 0xc) << 12; 13437 if (hdr_len & 0x10) 13438 base_flags |= 0x00000010; 13439 base_flags |= (hdr_len & 0x3e0) << 5; 13440 } else if (tg3_flag(tp, HW_TSO_2)) 13441 mss |= hdr_len << 9; 13442 else if (tg3_flag(tp, HW_TSO_1) || 13443 tg3_asic_rev(tp) == ASIC_REV_5705) { 13444 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 13445 } else { 13446 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 13447 } 13448 13449 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 13450 } else { 13451 num_pkts = 1; 13452 data_off = ETH_HLEN; 13453 13454 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 13455 tx_len > VLAN_ETH_FRAME_LEN) 13456 base_flags |= TXD_FLAG_JMB_PKT; 13457 } 13458 13459 for (i = data_off; i < tx_len; i++) 13460 tx_data[i] = (u8) (i & 0xff); 13461 13462 map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE); 13463 if (dma_mapping_error(&tp->pdev->dev, map)) { 13464 dev_kfree_skb(skb); 13465 return -EIO; 13466 } 13467 13468 val = tnapi->tx_prod; 13469 tnapi->tx_buffers[val].skb = skb; 13470 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 13471 13472 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13473 rnapi->coal_now); 13474 13475 udelay(10); 13476 13477 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 13478 13479 budget = tg3_tx_avail(tnapi); 13480 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 13481 base_flags | TXD_FLAG_END, mss, 0)) { 13482 tnapi->tx_buffers[val].skb = NULL; 13483 dev_kfree_skb(skb); 13484 return -EIO; 13485 } 13486 13487 tnapi->tx_prod++; 13488 13489 /* Sync BD data before updating mailbox */ 13490 wmb(); 13491 13492 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 13493 tr32_mailbox(tnapi->prodmbox); 13494 13495 udelay(10); 13496 13497 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 13498 for (i = 0; i < 35; i++) { 13499 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13500 coal_now); 13501 13502 udelay(10); 13503 13504 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 13505 rx_idx = rnapi->hw_status->idx[0].rx_producer; 13506 if ((tx_idx == tnapi->tx_prod) && 13507 (rx_idx == (rx_start_idx + num_pkts))) 13508 break; 13509 } 13510 13511 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 13512 dev_kfree_skb(skb); 13513 13514 if (tx_idx != tnapi->tx_prod) 13515 goto out; 13516 13517 if (rx_idx != rx_start_idx + num_pkts) 13518 goto out; 13519 13520 val = data_off; 13521 while (rx_idx != rx_start_idx) { 13522 desc = &rnapi->rx_rcb[rx_start_idx++]; 13523 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 13524 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 13525 13526 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 13527 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 13528 goto out; 13529 13530 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 13531 - ETH_FCS_LEN; 13532 13533 if (!tso_loopback) { 13534 if (rx_len != tx_len) 13535 goto out; 13536 13537 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 13538 if (opaque_key != RXD_OPAQUE_RING_STD) 13539 goto out; 13540 } else { 13541 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 13542 goto out; 13543 } 13544 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 13545 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 13546 >> RXD_TCPCSUM_SHIFT != 0xffff) { 13547 goto out; 13548 } 13549 13550 if (opaque_key == RXD_OPAQUE_RING_STD) { 13551 rx_data = tpr->rx_std_buffers[desc_idx].data; 13552 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 13553 mapping); 13554 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 13555 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 13556 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 13557 mapping); 13558 } else 13559 goto out; 13560 13561 dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len, 13562 DMA_FROM_DEVICE); 13563 13564 rx_data += TG3_RX_OFFSET(tp); 13565 for (i = data_off; i < rx_len; i++, val++) { 13566 if (*(rx_data + i) != (u8) (val & 0xff)) 13567 goto out; 13568 } 13569 } 13570 13571 err = 0; 13572 13573 /* tg3_free_rings will unmap and free the rx_data */ 13574out: 13575 return err; 13576} 13577 13578#define TG3_STD_LOOPBACK_FAILED 1 13579#define TG3_JMB_LOOPBACK_FAILED 2 13580#define TG3_TSO_LOOPBACK_FAILED 4 13581#define TG3_LOOPBACK_FAILED \ 13582 (TG3_STD_LOOPBACK_FAILED | \ 13583 TG3_JMB_LOOPBACK_FAILED | \ 13584 TG3_TSO_LOOPBACK_FAILED) 13585 13586static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 13587{ 13588 int err = -EIO; 13589 u32 eee_cap; 13590 u32 jmb_pkt_sz = 9000; 13591 13592 if (tp->dma_limit) 13593 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 13594 13595 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 13596 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 13597 13598 if (!netif_running(tp->dev)) { 13599 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13600 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13601 if (do_extlpbk) 13602 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13603 goto done; 13604 } 13605 13606 err = tg3_reset_hw(tp, true); 13607 if (err) { 13608 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13609 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13610 if (do_extlpbk) 13611 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13612 goto done; 13613 } 13614 13615 if (tg3_flag(tp, ENABLE_RSS)) { 13616 int i; 13617 13618 /* Reroute all rx packets to the 1st queue */ 13619 for (i = MAC_RSS_INDIR_TBL_0; 13620 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 13621 tw32(i, 0x0); 13622 } 13623 13624 /* HW errata - mac loopback fails in some cases on 5780. 13625 * Normal traffic and PHY loopback are not affected by 13626 * errata. Also, the MAC loopback test is deprecated for 13627 * all newer ASIC revisions. 13628 */ 13629 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 13630 !tg3_flag(tp, CPMU_PRESENT)) { 13631 tg3_mac_loopback(tp, true); 13632 13633 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13634 data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13635 13636 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13637 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13638 data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13639 13640 tg3_mac_loopback(tp, false); 13641 } 13642 13643 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 13644 !tg3_flag(tp, USE_PHYLIB)) { 13645 int i; 13646 13647 tg3_phy_lpbk_set(tp, 0, false); 13648 13649 /* Wait for link */ 13650 for (i = 0; i < 100; i++) { 13651 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 13652 break; 13653 mdelay(1); 13654 } 13655 13656 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13657 data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13658 if (tg3_flag(tp, TSO_CAPABLE) && 13659 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13660 data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED; 13661 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13662 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13663 data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13664 13665 if (do_extlpbk) { 13666 tg3_phy_lpbk_set(tp, 0, true); 13667 13668 /* All link indications report up, but the hardware 13669 * isn't really ready for about 20 msec. Double it 13670 * to be sure. 13671 */ 13672 mdelay(40); 13673 13674 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13675 data[TG3_EXT_LOOPB_TEST] |= 13676 TG3_STD_LOOPBACK_FAILED; 13677 if (tg3_flag(tp, TSO_CAPABLE) && 13678 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13679 data[TG3_EXT_LOOPB_TEST] |= 13680 TG3_TSO_LOOPBACK_FAILED; 13681 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13682 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13683 data[TG3_EXT_LOOPB_TEST] |= 13684 TG3_JMB_LOOPBACK_FAILED; 13685 } 13686 13687 /* Re-enable gphy autopowerdown. */ 13688 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 13689 tg3_phy_toggle_apd(tp, true); 13690 } 13691 13692 err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] | 13693 data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0; 13694 13695done: 13696 tp->phy_flags |= eee_cap; 13697 13698 return err; 13699} 13700 13701static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 13702 u64 *data) 13703{ 13704 struct tg3 *tp = netdev_priv(dev); 13705 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 13706 13707 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 13708 if (tg3_power_up(tp)) { 13709 etest->flags |= ETH_TEST_FL_FAILED; 13710 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 13711 return; 13712 } 13713 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 13714 } 13715 13716 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 13717 13718 if (tg3_test_nvram(tp) != 0) { 13719 etest->flags |= ETH_TEST_FL_FAILED; 13720 data[TG3_NVRAM_TEST] = 1; 13721 } 13722 if (!doextlpbk && tg3_test_link(tp)) { 13723 etest->flags |= ETH_TEST_FL_FAILED; 13724 data[TG3_LINK_TEST] = 1; 13725 } 13726 if (etest->flags & ETH_TEST_FL_OFFLINE) { 13727 int err, err2 = 0, irq_sync = 0; 13728 13729 if (netif_running(dev)) { 13730 tg3_phy_stop(tp); 13731 tg3_netif_stop(tp); 13732 irq_sync = 1; 13733 } 13734 13735 tg3_full_lock(tp, irq_sync); 13736 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 13737 err = tg3_nvram_lock(tp); 13738 tg3_halt_cpu(tp, RX_CPU_BASE); 13739 if (!tg3_flag(tp, 5705_PLUS)) 13740 tg3_halt_cpu(tp, TX_CPU_BASE); 13741 if (!err) 13742 tg3_nvram_unlock(tp); 13743 13744 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 13745 tg3_phy_reset(tp); 13746 13747 if (tg3_test_registers(tp) != 0) { 13748 etest->flags |= ETH_TEST_FL_FAILED; 13749 data[TG3_REGISTER_TEST] = 1; 13750 } 13751 13752 if (tg3_test_memory(tp) != 0) { 13753 etest->flags |= ETH_TEST_FL_FAILED; 13754 data[TG3_MEMORY_TEST] = 1; 13755 } 13756 13757 if (doextlpbk) 13758 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 13759 13760 if (tg3_test_loopback(tp, data, doextlpbk)) 13761 etest->flags |= ETH_TEST_FL_FAILED; 13762 13763 tg3_full_unlock(tp); 13764 13765 if (tg3_test_interrupt(tp) != 0) { 13766 etest->flags |= ETH_TEST_FL_FAILED; 13767 data[TG3_INTERRUPT_TEST] = 1; 13768 } 13769 13770 tg3_full_lock(tp, 0); 13771 13772 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 13773 if (netif_running(dev)) { 13774 tg3_flag_set(tp, INIT_COMPLETE); 13775 err2 = tg3_restart_hw(tp, true); 13776 if (!err2) 13777 tg3_netif_start(tp); 13778 } 13779 13780 tg3_full_unlock(tp); 13781 13782 if (irq_sync && !err2) 13783 tg3_phy_start(tp); 13784 } 13785 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 13786 tg3_power_down_prepare(tp); 13787 13788} 13789 13790static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr) 13791{ 13792 struct tg3 *tp = netdev_priv(dev); 13793 struct hwtstamp_config stmpconf; 13794 13795 if (!tg3_flag(tp, PTP_CAPABLE)) 13796 return -EOPNOTSUPP; 13797 13798 if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) 13799 return -EFAULT; 13800 13801 if (stmpconf.tx_type != HWTSTAMP_TX_ON && 13802 stmpconf.tx_type != HWTSTAMP_TX_OFF) 13803 return -ERANGE; 13804 13805 switch (stmpconf.rx_filter) { 13806 case HWTSTAMP_FILTER_NONE: 13807 tp->rxptpctl = 0; 13808 break; 13809 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 13810 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13811 TG3_RX_PTP_CTL_ALL_V1_EVENTS; 13812 break; 13813 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 13814 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13815 TG3_RX_PTP_CTL_SYNC_EVNT; 13816 break; 13817 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 13818 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13819 TG3_RX_PTP_CTL_DELAY_REQ; 13820 break; 13821 case HWTSTAMP_FILTER_PTP_V2_EVENT: 13822 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13823 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13824 break; 13825 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 13826 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13827 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13828 break; 13829 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 13830 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13831 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13832 break; 13833 case HWTSTAMP_FILTER_PTP_V2_SYNC: 13834 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13835 TG3_RX_PTP_CTL_SYNC_EVNT; 13836 break; 13837 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 13838 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13839 TG3_RX_PTP_CTL_SYNC_EVNT; 13840 break; 13841 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 13842 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13843 TG3_RX_PTP_CTL_SYNC_EVNT; 13844 break; 13845 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 13846 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13847 TG3_RX_PTP_CTL_DELAY_REQ; 13848 break; 13849 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 13850 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13851 TG3_RX_PTP_CTL_DELAY_REQ; 13852 break; 13853 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 13854 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13855 TG3_RX_PTP_CTL_DELAY_REQ; 13856 break; 13857 default: 13858 return -ERANGE; 13859 } 13860 13861 if (netif_running(dev) && tp->rxptpctl) 13862 tw32(TG3_RX_PTP_CTL, 13863 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 13864 13865 if (stmpconf.tx_type == HWTSTAMP_TX_ON) 13866 tg3_flag_set(tp, TX_TSTAMP_EN); 13867 else 13868 tg3_flag_clear(tp, TX_TSTAMP_EN); 13869 13870 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13871 -EFAULT : 0; 13872} 13873 13874static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr) 13875{ 13876 struct tg3 *tp = netdev_priv(dev); 13877 struct hwtstamp_config stmpconf; 13878 13879 if (!tg3_flag(tp, PTP_CAPABLE)) 13880 return -EOPNOTSUPP; 13881 13882 stmpconf.flags = 0; 13883 stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ? 13884 HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF); 13885 13886 switch (tp->rxptpctl) { 13887 case 0: 13888 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE; 13889 break; 13890 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS: 13891 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 13892 break; 13893 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13894 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC; 13895 break; 13896 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13897 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ; 13898 break; 13899 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13900 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 13901 break; 13902 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13903 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT; 13904 break; 13905 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13906 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 13907 break; 13908 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13909 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC; 13910 break; 13911 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13912 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC; 13913 break; 13914 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13915 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC; 13916 break; 13917 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13918 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ; 13919 break; 13920 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13921 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ; 13922 break; 13923 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13924 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ; 13925 break; 13926 default: 13927 WARN_ON_ONCE(1); 13928 return -ERANGE; 13929 } 13930 13931 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13932 -EFAULT : 0; 13933} 13934 13935static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 13936{ 13937 struct mii_ioctl_data *data = if_mii(ifr); 13938 struct tg3 *tp = netdev_priv(dev); 13939 int err; 13940 13941 if (tg3_flag(tp, USE_PHYLIB)) { 13942 struct phy_device *phydev; 13943 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 13944 return -EAGAIN; 13945 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 13946 return phy_mii_ioctl(phydev, ifr, cmd); 13947 } 13948 13949 switch (cmd) { 13950 case SIOCGMIIPHY: 13951 data->phy_id = tp->phy_addr; 13952 13953 fallthrough; 13954 case SIOCGMIIREG: { 13955 u32 mii_regval; 13956 13957 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 13958 break; /* We have no PHY */ 13959 13960 if (!netif_running(dev)) 13961 return -EAGAIN; 13962 13963 spin_lock_bh(&tp->lock); 13964 err = __tg3_readphy(tp, data->phy_id & 0x1f, 13965 data->reg_num & 0x1f, &mii_regval); 13966 spin_unlock_bh(&tp->lock); 13967 13968 data->val_out = mii_regval; 13969 13970 return err; 13971 } 13972 13973 case SIOCSMIIREG: 13974 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 13975 break; /* We have no PHY */ 13976 13977 if (!netif_running(dev)) 13978 return -EAGAIN; 13979 13980 spin_lock_bh(&tp->lock); 13981 err = __tg3_writephy(tp, data->phy_id & 0x1f, 13982 data->reg_num & 0x1f, data->val_in); 13983 spin_unlock_bh(&tp->lock); 13984 13985 return err; 13986 13987 case SIOCSHWTSTAMP: 13988 return tg3_hwtstamp_set(dev, ifr); 13989 13990 case SIOCGHWTSTAMP: 13991 return tg3_hwtstamp_get(dev, ifr); 13992 13993 default: 13994 /* do nothing */ 13995 break; 13996 } 13997 return -EOPNOTSUPP; 13998} 13999 14000static int tg3_get_coalesce(struct net_device *dev, 14001 struct ethtool_coalesce *ec, 14002 struct kernel_ethtool_coalesce *kernel_coal, 14003 struct netlink_ext_ack *extack) 14004{ 14005 struct tg3 *tp = netdev_priv(dev); 14006 14007 memcpy(ec, &tp->coal, sizeof(*ec)); 14008 return 0; 14009} 14010 14011static int tg3_set_coalesce(struct net_device *dev, 14012 struct ethtool_coalesce *ec, 14013 struct kernel_ethtool_coalesce *kernel_coal, 14014 struct netlink_ext_ack *extack) 14015{ 14016 struct tg3 *tp = netdev_priv(dev); 14017 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 14018 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 14019 14020 if (!tg3_flag(tp, 5705_PLUS)) { 14021 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 14022 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 14023 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 14024 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 14025 } 14026 14027 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 14028 (!ec->rx_coalesce_usecs) || 14029 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 14030 (!ec->tx_coalesce_usecs) || 14031 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 14032 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 14033 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 14034 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 14035 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 14036 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 14037 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 14038 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 14039 return -EINVAL; 14040 14041 /* Only copy relevant parameters, ignore all others. */ 14042 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 14043 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 14044 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 14045 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 14046 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 14047 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 14048 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 14049 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 14050 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 14051 14052 if (netif_running(dev)) { 14053 tg3_full_lock(tp, 0); 14054 __tg3_set_coalesce(tp, &tp->coal); 14055 tg3_full_unlock(tp); 14056 } 14057 return 0; 14058} 14059 14060static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata) 14061{ 14062 struct tg3 *tp = netdev_priv(dev); 14063 14064 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14065 netdev_warn(tp->dev, "Board does not support EEE!\n"); 14066 return -EOPNOTSUPP; 14067 } 14068 14069 if (edata->advertised != tp->eee.advertised) { 14070 netdev_warn(tp->dev, 14071 "Direct manipulation of EEE advertisement is not supported\n"); 14072 return -EINVAL; 14073 } 14074 14075 if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) { 14076 netdev_warn(tp->dev, 14077 "Maximal Tx Lpi timer supported is %#x(u)\n", 14078 TG3_CPMU_DBTMR1_LNKIDLE_MAX); 14079 return -EINVAL; 14080 } 14081 14082 tp->eee = *edata; 14083 14084 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 14085 tg3_warn_mgmt_link_flap(tp); 14086 14087 if (netif_running(tp->dev)) { 14088 tg3_full_lock(tp, 0); 14089 tg3_setup_eee(tp); 14090 tg3_phy_reset(tp); 14091 tg3_full_unlock(tp); 14092 } 14093 14094 return 0; 14095} 14096 14097static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata) 14098{ 14099 struct tg3 *tp = netdev_priv(dev); 14100 14101 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14102 netdev_warn(tp->dev, 14103 "Board does not support EEE!\n"); 14104 return -EOPNOTSUPP; 14105 } 14106 14107 *edata = tp->eee; 14108 return 0; 14109} 14110 14111static const struct ethtool_ops tg3_ethtool_ops = { 14112 .supported_coalesce_params = ETHTOOL_COALESCE_USECS | 14113 ETHTOOL_COALESCE_MAX_FRAMES | 14114 ETHTOOL_COALESCE_USECS_IRQ | 14115 ETHTOOL_COALESCE_MAX_FRAMES_IRQ | 14116 ETHTOOL_COALESCE_STATS_BLOCK_USECS, 14117 .get_drvinfo = tg3_get_drvinfo, 14118 .get_regs_len = tg3_get_regs_len, 14119 .get_regs = tg3_get_regs, 14120 .get_wol = tg3_get_wol, 14121 .set_wol = tg3_set_wol, 14122 .get_msglevel = tg3_get_msglevel, 14123 .set_msglevel = tg3_set_msglevel, 14124 .nway_reset = tg3_nway_reset, 14125 .get_link = ethtool_op_get_link, 14126 .get_eeprom_len = tg3_get_eeprom_len, 14127 .get_eeprom = tg3_get_eeprom, 14128 .set_eeprom = tg3_set_eeprom, 14129 .get_ringparam = tg3_get_ringparam, 14130 .set_ringparam = tg3_set_ringparam, 14131 .get_pauseparam = tg3_get_pauseparam, 14132 .set_pauseparam = tg3_set_pauseparam, 14133 .self_test = tg3_self_test, 14134 .get_strings = tg3_get_strings, 14135 .set_phys_id = tg3_set_phys_id, 14136 .get_ethtool_stats = tg3_get_ethtool_stats, 14137 .get_coalesce = tg3_get_coalesce, 14138 .set_coalesce = tg3_set_coalesce, 14139 .get_sset_count = tg3_get_sset_count, 14140 .get_rxnfc = tg3_get_rxnfc, 14141 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 14142 .get_rxfh = tg3_get_rxfh, 14143 .set_rxfh = tg3_set_rxfh, 14144 .get_channels = tg3_get_channels, 14145 .set_channels = tg3_set_channels, 14146 .get_ts_info = tg3_get_ts_info, 14147 .get_eee = tg3_get_eee, 14148 .set_eee = tg3_set_eee, 14149 .get_link_ksettings = tg3_get_link_ksettings, 14150 .set_link_ksettings = tg3_set_link_ksettings, 14151}; 14152 14153static void tg3_get_stats64(struct net_device *dev, 14154 struct rtnl_link_stats64 *stats) 14155{ 14156 struct tg3 *tp = netdev_priv(dev); 14157 14158 spin_lock_bh(&tp->lock); 14159 if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) { 14160 *stats = tp->net_stats_prev; 14161 spin_unlock_bh(&tp->lock); 14162 return; 14163 } 14164 14165 tg3_get_nstats(tp, stats); 14166 spin_unlock_bh(&tp->lock); 14167} 14168 14169static void tg3_set_rx_mode(struct net_device *dev) 14170{ 14171 struct tg3 *tp = netdev_priv(dev); 14172 14173 if (!netif_running(dev)) 14174 return; 14175 14176 tg3_full_lock(tp, 0); 14177 __tg3_set_rx_mode(dev); 14178 tg3_full_unlock(tp); 14179} 14180 14181static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 14182 int new_mtu) 14183{ 14184 dev->mtu = new_mtu; 14185 14186 if (new_mtu > ETH_DATA_LEN) { 14187 if (tg3_flag(tp, 5780_CLASS)) { 14188 netdev_update_features(dev); 14189 tg3_flag_clear(tp, TSO_CAPABLE); 14190 } else { 14191 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14192 } 14193 } else { 14194 if (tg3_flag(tp, 5780_CLASS)) { 14195 tg3_flag_set(tp, TSO_CAPABLE); 14196 netdev_update_features(dev); 14197 } 14198 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 14199 } 14200} 14201 14202static int tg3_change_mtu(struct net_device *dev, int new_mtu) 14203{ 14204 struct tg3 *tp = netdev_priv(dev); 14205 int err; 14206 bool reset_phy = false; 14207 14208 if (!netif_running(dev)) { 14209 /* We'll just catch it later when the 14210 * device is up'd. 14211 */ 14212 tg3_set_mtu(dev, tp, new_mtu); 14213 return 0; 14214 } 14215 14216 tg3_phy_stop(tp); 14217 14218 tg3_netif_stop(tp); 14219 14220 tg3_set_mtu(dev, tp, new_mtu); 14221 14222 tg3_full_lock(tp, 1); 14223 14224 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 14225 14226 /* Reset PHY, otherwise the read DMA engine will be in a mode that 14227 * breaks all requests to 256 bytes. 14228 */ 14229 if (tg3_asic_rev(tp) == ASIC_REV_57766 || 14230 tg3_asic_rev(tp) == ASIC_REV_5717 || 14231 tg3_asic_rev(tp) == ASIC_REV_5719 || 14232 tg3_asic_rev(tp) == ASIC_REV_5720) 14233 reset_phy = true; 14234 14235 err = tg3_restart_hw(tp, reset_phy); 14236 14237 if (!err) 14238 tg3_netif_start(tp); 14239 14240 tg3_full_unlock(tp); 14241 14242 if (!err) 14243 tg3_phy_start(tp); 14244 14245 return err; 14246} 14247 14248static const struct net_device_ops tg3_netdev_ops = { 14249 .ndo_open = tg3_open, 14250 .ndo_stop = tg3_close, 14251 .ndo_start_xmit = tg3_start_xmit, 14252 .ndo_get_stats64 = tg3_get_stats64, 14253 .ndo_validate_addr = eth_validate_addr, 14254 .ndo_set_rx_mode = tg3_set_rx_mode, 14255 .ndo_set_mac_address = tg3_set_mac_addr, 14256 .ndo_eth_ioctl = tg3_ioctl, 14257 .ndo_tx_timeout = tg3_tx_timeout, 14258 .ndo_change_mtu = tg3_change_mtu, 14259 .ndo_fix_features = tg3_fix_features, 14260 .ndo_set_features = tg3_set_features, 14261#ifdef CONFIG_NET_POLL_CONTROLLER 14262 .ndo_poll_controller = tg3_poll_controller, 14263#endif 14264}; 14265 14266static void tg3_get_eeprom_size(struct tg3 *tp) 14267{ 14268 u32 cursize, val, magic; 14269 14270 tp->nvram_size = EEPROM_CHIP_SIZE; 14271 14272 if (tg3_nvram_read(tp, 0, &magic) != 0) 14273 return; 14274 14275 if ((magic != TG3_EEPROM_MAGIC) && 14276 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 14277 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 14278 return; 14279 14280 /* 14281 * Size the chip by reading offsets at increasing powers of two. 14282 * When we encounter our validation signature, we know the addressing 14283 * has wrapped around, and thus have our chip size. 14284 */ 14285 cursize = 0x10; 14286 14287 while (cursize < tp->nvram_size) { 14288 if (tg3_nvram_read(tp, cursize, &val) != 0) 14289 return; 14290 14291 if (val == magic) 14292 break; 14293 14294 cursize <<= 1; 14295 } 14296 14297 tp->nvram_size = cursize; 14298} 14299 14300static void tg3_get_nvram_size(struct tg3 *tp) 14301{ 14302 u32 val; 14303 14304 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 14305 return; 14306 14307 /* Selfboot format */ 14308 if (val != TG3_EEPROM_MAGIC) { 14309 tg3_get_eeprom_size(tp); 14310 return; 14311 } 14312 14313 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 14314 if (val != 0) { 14315 /* This is confusing. We want to operate on the 14316 * 16-bit value at offset 0xf2. The tg3_nvram_read() 14317 * call will read from NVRAM and byteswap the data 14318 * according to the byteswapping settings for all 14319 * other register accesses. This ensures the data we 14320 * want will always reside in the lower 16-bits. 14321 * However, the data in NVRAM is in LE format, which 14322 * means the data from the NVRAM read will always be 14323 * opposite the endianness of the CPU. The 16-bit 14324 * byteswap then brings the data to CPU endianness. 14325 */ 14326 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 14327 return; 14328 } 14329 } 14330 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14331} 14332 14333static void tg3_get_nvram_info(struct tg3 *tp) 14334{ 14335 u32 nvcfg1; 14336 14337 nvcfg1 = tr32(NVRAM_CFG1); 14338 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 14339 tg3_flag_set(tp, FLASH); 14340 } else { 14341 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14342 tw32(NVRAM_CFG1, nvcfg1); 14343 } 14344 14345 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 14346 tg3_flag(tp, 5780_CLASS)) { 14347 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 14348 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 14349 tp->nvram_jedecnum = JEDEC_ATMEL; 14350 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14351 tg3_flag_set(tp, NVRAM_BUFFERED); 14352 break; 14353 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 14354 tp->nvram_jedecnum = JEDEC_ATMEL; 14355 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 14356 break; 14357 case FLASH_VENDOR_ATMEL_EEPROM: 14358 tp->nvram_jedecnum = JEDEC_ATMEL; 14359 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14360 tg3_flag_set(tp, NVRAM_BUFFERED); 14361 break; 14362 case FLASH_VENDOR_ST: 14363 tp->nvram_jedecnum = JEDEC_ST; 14364 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 14365 tg3_flag_set(tp, NVRAM_BUFFERED); 14366 break; 14367 case FLASH_VENDOR_SAIFUN: 14368 tp->nvram_jedecnum = JEDEC_SAIFUN; 14369 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 14370 break; 14371 case FLASH_VENDOR_SST_SMALL: 14372 case FLASH_VENDOR_SST_LARGE: 14373 tp->nvram_jedecnum = JEDEC_SST; 14374 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 14375 break; 14376 } 14377 } else { 14378 tp->nvram_jedecnum = JEDEC_ATMEL; 14379 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14380 tg3_flag_set(tp, NVRAM_BUFFERED); 14381 } 14382} 14383 14384static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 14385{ 14386 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 14387 case FLASH_5752PAGE_SIZE_256: 14388 tp->nvram_pagesize = 256; 14389 break; 14390 case FLASH_5752PAGE_SIZE_512: 14391 tp->nvram_pagesize = 512; 14392 break; 14393 case FLASH_5752PAGE_SIZE_1K: 14394 tp->nvram_pagesize = 1024; 14395 break; 14396 case FLASH_5752PAGE_SIZE_2K: 14397 tp->nvram_pagesize = 2048; 14398 break; 14399 case FLASH_5752PAGE_SIZE_4K: 14400 tp->nvram_pagesize = 4096; 14401 break; 14402 case FLASH_5752PAGE_SIZE_264: 14403 tp->nvram_pagesize = 264; 14404 break; 14405 case FLASH_5752PAGE_SIZE_528: 14406 tp->nvram_pagesize = 528; 14407 break; 14408 } 14409} 14410 14411static void tg3_get_5752_nvram_info(struct tg3 *tp) 14412{ 14413 u32 nvcfg1; 14414 14415 nvcfg1 = tr32(NVRAM_CFG1); 14416 14417 /* NVRAM protection for TPM */ 14418 if (nvcfg1 & (1 << 27)) 14419 tg3_flag_set(tp, PROTECTED_NVRAM); 14420 14421 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14422 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 14423 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 14424 tp->nvram_jedecnum = JEDEC_ATMEL; 14425 tg3_flag_set(tp, NVRAM_BUFFERED); 14426 break; 14427 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14428 tp->nvram_jedecnum = JEDEC_ATMEL; 14429 tg3_flag_set(tp, NVRAM_BUFFERED); 14430 tg3_flag_set(tp, FLASH); 14431 break; 14432 case FLASH_5752VENDOR_ST_M45PE10: 14433 case FLASH_5752VENDOR_ST_M45PE20: 14434 case FLASH_5752VENDOR_ST_M45PE40: 14435 tp->nvram_jedecnum = JEDEC_ST; 14436 tg3_flag_set(tp, NVRAM_BUFFERED); 14437 tg3_flag_set(tp, FLASH); 14438 break; 14439 } 14440 14441 if (tg3_flag(tp, FLASH)) { 14442 tg3_nvram_get_pagesize(tp, nvcfg1); 14443 } else { 14444 /* For eeprom, set pagesize to maximum eeprom size */ 14445 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14446 14447 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14448 tw32(NVRAM_CFG1, nvcfg1); 14449 } 14450} 14451 14452static void tg3_get_5755_nvram_info(struct tg3 *tp) 14453{ 14454 u32 nvcfg1, protect = 0; 14455 14456 nvcfg1 = tr32(NVRAM_CFG1); 14457 14458 /* NVRAM protection for TPM */ 14459 if (nvcfg1 & (1 << 27)) { 14460 tg3_flag_set(tp, PROTECTED_NVRAM); 14461 protect = 1; 14462 } 14463 14464 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14465 switch (nvcfg1) { 14466 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14467 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14468 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14469 case FLASH_5755VENDOR_ATMEL_FLASH_5: 14470 tp->nvram_jedecnum = JEDEC_ATMEL; 14471 tg3_flag_set(tp, NVRAM_BUFFERED); 14472 tg3_flag_set(tp, FLASH); 14473 tp->nvram_pagesize = 264; 14474 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 14475 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 14476 tp->nvram_size = (protect ? 0x3e200 : 14477 TG3_NVRAM_SIZE_512KB); 14478 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 14479 tp->nvram_size = (protect ? 0x1f200 : 14480 TG3_NVRAM_SIZE_256KB); 14481 else 14482 tp->nvram_size = (protect ? 0x1f200 : 14483 TG3_NVRAM_SIZE_128KB); 14484 break; 14485 case FLASH_5752VENDOR_ST_M45PE10: 14486 case FLASH_5752VENDOR_ST_M45PE20: 14487 case FLASH_5752VENDOR_ST_M45PE40: 14488 tp->nvram_jedecnum = JEDEC_ST; 14489 tg3_flag_set(tp, NVRAM_BUFFERED); 14490 tg3_flag_set(tp, FLASH); 14491 tp->nvram_pagesize = 256; 14492 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 14493 tp->nvram_size = (protect ? 14494 TG3_NVRAM_SIZE_64KB : 14495 TG3_NVRAM_SIZE_128KB); 14496 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 14497 tp->nvram_size = (protect ? 14498 TG3_NVRAM_SIZE_64KB : 14499 TG3_NVRAM_SIZE_256KB); 14500 else 14501 tp->nvram_size = (protect ? 14502 TG3_NVRAM_SIZE_128KB : 14503 TG3_NVRAM_SIZE_512KB); 14504 break; 14505 } 14506} 14507 14508static void tg3_get_5787_nvram_info(struct tg3 *tp) 14509{ 14510 u32 nvcfg1; 14511 14512 nvcfg1 = tr32(NVRAM_CFG1); 14513 14514 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14515 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 14516 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14517 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 14518 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14519 tp->nvram_jedecnum = JEDEC_ATMEL; 14520 tg3_flag_set(tp, NVRAM_BUFFERED); 14521 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14522 14523 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14524 tw32(NVRAM_CFG1, nvcfg1); 14525 break; 14526 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14527 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14528 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14529 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14530 tp->nvram_jedecnum = JEDEC_ATMEL; 14531 tg3_flag_set(tp, NVRAM_BUFFERED); 14532 tg3_flag_set(tp, FLASH); 14533 tp->nvram_pagesize = 264; 14534 break; 14535 case FLASH_5752VENDOR_ST_M45PE10: 14536 case FLASH_5752VENDOR_ST_M45PE20: 14537 case FLASH_5752VENDOR_ST_M45PE40: 14538 tp->nvram_jedecnum = JEDEC_ST; 14539 tg3_flag_set(tp, NVRAM_BUFFERED); 14540 tg3_flag_set(tp, FLASH); 14541 tp->nvram_pagesize = 256; 14542 break; 14543 } 14544} 14545 14546static void tg3_get_5761_nvram_info(struct tg3 *tp) 14547{ 14548 u32 nvcfg1, protect = 0; 14549 14550 nvcfg1 = tr32(NVRAM_CFG1); 14551 14552 /* NVRAM protection for TPM */ 14553 if (nvcfg1 & (1 << 27)) { 14554 tg3_flag_set(tp, PROTECTED_NVRAM); 14555 protect = 1; 14556 } 14557 14558 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14559 switch (nvcfg1) { 14560 case FLASH_5761VENDOR_ATMEL_ADB021D: 14561 case FLASH_5761VENDOR_ATMEL_ADB041D: 14562 case FLASH_5761VENDOR_ATMEL_ADB081D: 14563 case FLASH_5761VENDOR_ATMEL_ADB161D: 14564 case FLASH_5761VENDOR_ATMEL_MDB021D: 14565 case FLASH_5761VENDOR_ATMEL_MDB041D: 14566 case FLASH_5761VENDOR_ATMEL_MDB081D: 14567 case FLASH_5761VENDOR_ATMEL_MDB161D: 14568 tp->nvram_jedecnum = JEDEC_ATMEL; 14569 tg3_flag_set(tp, NVRAM_BUFFERED); 14570 tg3_flag_set(tp, FLASH); 14571 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14572 tp->nvram_pagesize = 256; 14573 break; 14574 case FLASH_5761VENDOR_ST_A_M45PE20: 14575 case FLASH_5761VENDOR_ST_A_M45PE40: 14576 case FLASH_5761VENDOR_ST_A_M45PE80: 14577 case FLASH_5761VENDOR_ST_A_M45PE16: 14578 case FLASH_5761VENDOR_ST_M_M45PE20: 14579 case FLASH_5761VENDOR_ST_M_M45PE40: 14580 case FLASH_5761VENDOR_ST_M_M45PE80: 14581 case FLASH_5761VENDOR_ST_M_M45PE16: 14582 tp->nvram_jedecnum = JEDEC_ST; 14583 tg3_flag_set(tp, NVRAM_BUFFERED); 14584 tg3_flag_set(tp, FLASH); 14585 tp->nvram_pagesize = 256; 14586 break; 14587 } 14588 14589 if (protect) { 14590 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 14591 } else { 14592 switch (nvcfg1) { 14593 case FLASH_5761VENDOR_ATMEL_ADB161D: 14594 case FLASH_5761VENDOR_ATMEL_MDB161D: 14595 case FLASH_5761VENDOR_ST_A_M45PE16: 14596 case FLASH_5761VENDOR_ST_M_M45PE16: 14597 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 14598 break; 14599 case FLASH_5761VENDOR_ATMEL_ADB081D: 14600 case FLASH_5761VENDOR_ATMEL_MDB081D: 14601 case FLASH_5761VENDOR_ST_A_M45PE80: 14602 case FLASH_5761VENDOR_ST_M_M45PE80: 14603 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14604 break; 14605 case FLASH_5761VENDOR_ATMEL_ADB041D: 14606 case FLASH_5761VENDOR_ATMEL_MDB041D: 14607 case FLASH_5761VENDOR_ST_A_M45PE40: 14608 case FLASH_5761VENDOR_ST_M_M45PE40: 14609 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14610 break; 14611 case FLASH_5761VENDOR_ATMEL_ADB021D: 14612 case FLASH_5761VENDOR_ATMEL_MDB021D: 14613 case FLASH_5761VENDOR_ST_A_M45PE20: 14614 case FLASH_5761VENDOR_ST_M_M45PE20: 14615 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14616 break; 14617 } 14618 } 14619} 14620 14621static void tg3_get_5906_nvram_info(struct tg3 *tp) 14622{ 14623 tp->nvram_jedecnum = JEDEC_ATMEL; 14624 tg3_flag_set(tp, NVRAM_BUFFERED); 14625 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14626} 14627 14628static void tg3_get_57780_nvram_info(struct tg3 *tp) 14629{ 14630 u32 nvcfg1; 14631 14632 nvcfg1 = tr32(NVRAM_CFG1); 14633 14634 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14635 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14636 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14637 tp->nvram_jedecnum = JEDEC_ATMEL; 14638 tg3_flag_set(tp, NVRAM_BUFFERED); 14639 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14640 14641 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14642 tw32(NVRAM_CFG1, nvcfg1); 14643 return; 14644 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14645 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14646 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14647 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14648 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14649 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14650 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14651 tp->nvram_jedecnum = JEDEC_ATMEL; 14652 tg3_flag_set(tp, NVRAM_BUFFERED); 14653 tg3_flag_set(tp, FLASH); 14654 14655 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14656 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14657 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14658 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14659 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14660 break; 14661 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14662 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14663 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14664 break; 14665 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14666 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14667 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14668 break; 14669 } 14670 break; 14671 case FLASH_5752VENDOR_ST_M45PE10: 14672 case FLASH_5752VENDOR_ST_M45PE20: 14673 case FLASH_5752VENDOR_ST_M45PE40: 14674 tp->nvram_jedecnum = JEDEC_ST; 14675 tg3_flag_set(tp, NVRAM_BUFFERED); 14676 tg3_flag_set(tp, FLASH); 14677 14678 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14679 case FLASH_5752VENDOR_ST_M45PE10: 14680 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14681 break; 14682 case FLASH_5752VENDOR_ST_M45PE20: 14683 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14684 break; 14685 case FLASH_5752VENDOR_ST_M45PE40: 14686 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14687 break; 14688 } 14689 break; 14690 default: 14691 tg3_flag_set(tp, NO_NVRAM); 14692 return; 14693 } 14694 14695 tg3_nvram_get_pagesize(tp, nvcfg1); 14696 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14697 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14698} 14699 14700 14701static void tg3_get_5717_nvram_info(struct tg3 *tp) 14702{ 14703 u32 nvcfg1; 14704 14705 nvcfg1 = tr32(NVRAM_CFG1); 14706 14707 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14708 case FLASH_5717VENDOR_ATMEL_EEPROM: 14709 case FLASH_5717VENDOR_MICRO_EEPROM: 14710 tp->nvram_jedecnum = JEDEC_ATMEL; 14711 tg3_flag_set(tp, NVRAM_BUFFERED); 14712 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14713 14714 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14715 tw32(NVRAM_CFG1, nvcfg1); 14716 return; 14717 case FLASH_5717VENDOR_ATMEL_MDB011D: 14718 case FLASH_5717VENDOR_ATMEL_ADB011B: 14719 case FLASH_5717VENDOR_ATMEL_ADB011D: 14720 case FLASH_5717VENDOR_ATMEL_MDB021D: 14721 case FLASH_5717VENDOR_ATMEL_ADB021B: 14722 case FLASH_5717VENDOR_ATMEL_ADB021D: 14723 case FLASH_5717VENDOR_ATMEL_45USPT: 14724 tp->nvram_jedecnum = JEDEC_ATMEL; 14725 tg3_flag_set(tp, NVRAM_BUFFERED); 14726 tg3_flag_set(tp, FLASH); 14727 14728 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14729 case FLASH_5717VENDOR_ATMEL_MDB021D: 14730 /* Detect size with tg3_nvram_get_size() */ 14731 break; 14732 case FLASH_5717VENDOR_ATMEL_ADB021B: 14733 case FLASH_5717VENDOR_ATMEL_ADB021D: 14734 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14735 break; 14736 default: 14737 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14738 break; 14739 } 14740 break; 14741 case FLASH_5717VENDOR_ST_M_M25PE10: 14742 case FLASH_5717VENDOR_ST_A_M25PE10: 14743 case FLASH_5717VENDOR_ST_M_M45PE10: 14744 case FLASH_5717VENDOR_ST_A_M45PE10: 14745 case FLASH_5717VENDOR_ST_M_M25PE20: 14746 case FLASH_5717VENDOR_ST_A_M25PE20: 14747 case FLASH_5717VENDOR_ST_M_M45PE20: 14748 case FLASH_5717VENDOR_ST_A_M45PE20: 14749 case FLASH_5717VENDOR_ST_25USPT: 14750 case FLASH_5717VENDOR_ST_45USPT: 14751 tp->nvram_jedecnum = JEDEC_ST; 14752 tg3_flag_set(tp, NVRAM_BUFFERED); 14753 tg3_flag_set(tp, FLASH); 14754 14755 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14756 case FLASH_5717VENDOR_ST_M_M25PE20: 14757 case FLASH_5717VENDOR_ST_M_M45PE20: 14758 /* Detect size with tg3_nvram_get_size() */ 14759 break; 14760 case FLASH_5717VENDOR_ST_A_M25PE20: 14761 case FLASH_5717VENDOR_ST_A_M45PE20: 14762 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14763 break; 14764 default: 14765 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14766 break; 14767 } 14768 break; 14769 default: 14770 tg3_flag_set(tp, NO_NVRAM); 14771 return; 14772 } 14773 14774 tg3_nvram_get_pagesize(tp, nvcfg1); 14775 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14776 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14777} 14778 14779static void tg3_get_5720_nvram_info(struct tg3 *tp) 14780{ 14781 u32 nvcfg1, nvmpinstrp, nv_status; 14782 14783 nvcfg1 = tr32(NVRAM_CFG1); 14784 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 14785 14786 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14787 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) { 14788 tg3_flag_set(tp, NO_NVRAM); 14789 return; 14790 } 14791 14792 switch (nvmpinstrp) { 14793 case FLASH_5762_MX25L_100: 14794 case FLASH_5762_MX25L_200: 14795 case FLASH_5762_MX25L_400: 14796 case FLASH_5762_MX25L_800: 14797 case FLASH_5762_MX25L_160_320: 14798 tp->nvram_pagesize = 4096; 14799 tp->nvram_jedecnum = JEDEC_MACRONIX; 14800 tg3_flag_set(tp, NVRAM_BUFFERED); 14801 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14802 tg3_flag_set(tp, FLASH); 14803 nv_status = tr32(NVRAM_AUTOSENSE_STATUS); 14804 tp->nvram_size = 14805 (1 << (nv_status >> AUTOSENSE_DEVID & 14806 AUTOSENSE_DEVID_MASK) 14807 << AUTOSENSE_SIZE_IN_MB); 14808 return; 14809 14810 case FLASH_5762_EEPROM_HD: 14811 nvmpinstrp = FLASH_5720_EEPROM_HD; 14812 break; 14813 case FLASH_5762_EEPROM_LD: 14814 nvmpinstrp = FLASH_5720_EEPROM_LD; 14815 break; 14816 case FLASH_5720VENDOR_M_ST_M45PE20: 14817 /* This pinstrap supports multiple sizes, so force it 14818 * to read the actual size from location 0xf0. 14819 */ 14820 nvmpinstrp = FLASH_5720VENDOR_ST_45USPT; 14821 break; 14822 } 14823 } 14824 14825 switch (nvmpinstrp) { 14826 case FLASH_5720_EEPROM_HD: 14827 case FLASH_5720_EEPROM_LD: 14828 tp->nvram_jedecnum = JEDEC_ATMEL; 14829 tg3_flag_set(tp, NVRAM_BUFFERED); 14830 14831 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14832 tw32(NVRAM_CFG1, nvcfg1); 14833 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 14834 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14835 else 14836 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 14837 return; 14838 case FLASH_5720VENDOR_M_ATMEL_DB011D: 14839 case FLASH_5720VENDOR_A_ATMEL_DB011B: 14840 case FLASH_5720VENDOR_A_ATMEL_DB011D: 14841 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14842 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14843 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14844 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14845 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14846 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14847 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14848 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14849 case FLASH_5720VENDOR_ATMEL_45USPT: 14850 tp->nvram_jedecnum = JEDEC_ATMEL; 14851 tg3_flag_set(tp, NVRAM_BUFFERED); 14852 tg3_flag_set(tp, FLASH); 14853 14854 switch (nvmpinstrp) { 14855 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14856 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14857 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14858 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14859 break; 14860 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14861 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14862 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14863 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14864 break; 14865 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14866 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14867 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14868 break; 14869 default: 14870 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14871 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14872 break; 14873 } 14874 break; 14875 case FLASH_5720VENDOR_M_ST_M25PE10: 14876 case FLASH_5720VENDOR_M_ST_M45PE10: 14877 case FLASH_5720VENDOR_A_ST_M25PE10: 14878 case FLASH_5720VENDOR_A_ST_M45PE10: 14879 case FLASH_5720VENDOR_M_ST_M25PE20: 14880 case FLASH_5720VENDOR_M_ST_M45PE20: 14881 case FLASH_5720VENDOR_A_ST_M25PE20: 14882 case FLASH_5720VENDOR_A_ST_M45PE20: 14883 case FLASH_5720VENDOR_M_ST_M25PE40: 14884 case FLASH_5720VENDOR_M_ST_M45PE40: 14885 case FLASH_5720VENDOR_A_ST_M25PE40: 14886 case FLASH_5720VENDOR_A_ST_M45PE40: 14887 case FLASH_5720VENDOR_M_ST_M25PE80: 14888 case FLASH_5720VENDOR_M_ST_M45PE80: 14889 case FLASH_5720VENDOR_A_ST_M25PE80: 14890 case FLASH_5720VENDOR_A_ST_M45PE80: 14891 case FLASH_5720VENDOR_ST_25USPT: 14892 case FLASH_5720VENDOR_ST_45USPT: 14893 tp->nvram_jedecnum = JEDEC_ST; 14894 tg3_flag_set(tp, NVRAM_BUFFERED); 14895 tg3_flag_set(tp, FLASH); 14896 14897 switch (nvmpinstrp) { 14898 case FLASH_5720VENDOR_M_ST_M25PE20: 14899 case FLASH_5720VENDOR_M_ST_M45PE20: 14900 case FLASH_5720VENDOR_A_ST_M25PE20: 14901 case FLASH_5720VENDOR_A_ST_M45PE20: 14902 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14903 break; 14904 case FLASH_5720VENDOR_M_ST_M25PE40: 14905 case FLASH_5720VENDOR_M_ST_M45PE40: 14906 case FLASH_5720VENDOR_A_ST_M25PE40: 14907 case FLASH_5720VENDOR_A_ST_M45PE40: 14908 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14909 break; 14910 case FLASH_5720VENDOR_M_ST_M25PE80: 14911 case FLASH_5720VENDOR_M_ST_M45PE80: 14912 case FLASH_5720VENDOR_A_ST_M25PE80: 14913 case FLASH_5720VENDOR_A_ST_M45PE80: 14914 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14915 break; 14916 default: 14917 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14918 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14919 break; 14920 } 14921 break; 14922 default: 14923 tg3_flag_set(tp, NO_NVRAM); 14924 return; 14925 } 14926 14927 tg3_nvram_get_pagesize(tp, nvcfg1); 14928 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14929 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14930 14931 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14932 u32 val; 14933 14934 if (tg3_nvram_read(tp, 0, &val)) 14935 return; 14936 14937 if (val != TG3_EEPROM_MAGIC && 14938 (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) 14939 tg3_flag_set(tp, NO_NVRAM); 14940 } 14941} 14942 14943/* Chips other than 5700/5701 use the NVRAM for fetching info. */ 14944static void tg3_nvram_init(struct tg3 *tp) 14945{ 14946 if (tg3_flag(tp, IS_SSB_CORE)) { 14947 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */ 14948 tg3_flag_clear(tp, NVRAM); 14949 tg3_flag_clear(tp, NVRAM_BUFFERED); 14950 tg3_flag_set(tp, NO_NVRAM); 14951 return; 14952 } 14953 14954 tw32_f(GRC_EEPROM_ADDR, 14955 (EEPROM_ADDR_FSM_RESET | 14956 (EEPROM_DEFAULT_CLOCK_PERIOD << 14957 EEPROM_ADDR_CLKPERD_SHIFT))); 14958 14959 msleep(1); 14960 14961 /* Enable seeprom accesses. */ 14962 tw32_f(GRC_LOCAL_CTRL, 14963 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 14964 udelay(100); 14965 14966 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 14967 tg3_asic_rev(tp) != ASIC_REV_5701) { 14968 tg3_flag_set(tp, NVRAM); 14969 14970 if (tg3_nvram_lock(tp)) { 14971 netdev_warn(tp->dev, 14972 "Cannot get nvram lock, %s failed\n", 14973 __func__); 14974 return; 14975 } 14976 tg3_enable_nvram_access(tp); 14977 14978 tp->nvram_size = 0; 14979 14980 if (tg3_asic_rev(tp) == ASIC_REV_5752) 14981 tg3_get_5752_nvram_info(tp); 14982 else if (tg3_asic_rev(tp) == ASIC_REV_5755) 14983 tg3_get_5755_nvram_info(tp); 14984 else if (tg3_asic_rev(tp) == ASIC_REV_5787 || 14985 tg3_asic_rev(tp) == ASIC_REV_5784 || 14986 tg3_asic_rev(tp) == ASIC_REV_5785) 14987 tg3_get_5787_nvram_info(tp); 14988 else if (tg3_asic_rev(tp) == ASIC_REV_5761) 14989 tg3_get_5761_nvram_info(tp); 14990 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 14991 tg3_get_5906_nvram_info(tp); 14992 else if (tg3_asic_rev(tp) == ASIC_REV_57780 || 14993 tg3_flag(tp, 57765_CLASS)) 14994 tg3_get_57780_nvram_info(tp); 14995 else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 14996 tg3_asic_rev(tp) == ASIC_REV_5719) 14997 tg3_get_5717_nvram_info(tp); 14998 else if (tg3_asic_rev(tp) == ASIC_REV_5720 || 14999 tg3_asic_rev(tp) == ASIC_REV_5762) 15000 tg3_get_5720_nvram_info(tp); 15001 else 15002 tg3_get_nvram_info(tp); 15003 15004 if (tp->nvram_size == 0) 15005 tg3_get_nvram_size(tp); 15006 15007 tg3_disable_nvram_access(tp); 15008 tg3_nvram_unlock(tp); 15009 15010 } else { 15011 tg3_flag_clear(tp, NVRAM); 15012 tg3_flag_clear(tp, NVRAM_BUFFERED); 15013 15014 tg3_get_eeprom_size(tp); 15015 } 15016} 15017 15018struct subsys_tbl_ent { 15019 u16 subsys_vendor, subsys_devid; 15020 u32 phy_id; 15021}; 15022 15023static struct subsys_tbl_ent subsys_id_to_phy_id[] = { 15024 /* Broadcom boards. */ 15025 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15026 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 15027 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15028 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 15029 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15030 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 15031 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15032 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 15033 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15034 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 15035 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15036 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 15037 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15038 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 15039 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15040 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 15041 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15042 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 15043 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15044 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 15045 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15046 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 15047 15048 /* 3com boards. */ 15049 { TG3PCI_SUBVENDOR_ID_3COM, 15050 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 15051 { TG3PCI_SUBVENDOR_ID_3COM, 15052 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 15053 { TG3PCI_SUBVENDOR_ID_3COM, 15054 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 15055 { TG3PCI_SUBVENDOR_ID_3COM, 15056 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 15057 { TG3PCI_SUBVENDOR_ID_3COM, 15058 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 15059 15060 /* DELL boards. */ 15061 { TG3PCI_SUBVENDOR_ID_DELL, 15062 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 15063 { TG3PCI_SUBVENDOR_ID_DELL, 15064 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 15065 { TG3PCI_SUBVENDOR_ID_DELL, 15066 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 15067 { TG3PCI_SUBVENDOR_ID_DELL, 15068 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 15069 15070 /* Compaq boards. */ 15071 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15072 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 15073 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15074 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 15075 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15076 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 15077 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15078 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 15079 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15080 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 15081 15082 /* IBM boards. */ 15083 { TG3PCI_SUBVENDOR_ID_IBM, 15084 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 15085}; 15086 15087static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) 15088{ 15089 int i; 15090 15091 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 15092 if ((subsys_id_to_phy_id[i].subsys_vendor == 15093 tp->pdev->subsystem_vendor) && 15094 (subsys_id_to_phy_id[i].subsys_devid == 15095 tp->pdev->subsystem_device)) 15096 return &subsys_id_to_phy_id[i]; 15097 } 15098 return NULL; 15099} 15100 15101static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) 15102{ 15103 u32 val; 15104 15105 tp->phy_id = TG3_PHY_ID_INVALID; 15106 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15107 15108 /* Assume an onboard device and WOL capable by default. */ 15109 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15110 tg3_flag_set(tp, WOL_CAP); 15111 15112 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15113 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 15114 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15115 tg3_flag_set(tp, IS_NIC); 15116 } 15117 val = tr32(VCPU_CFGSHDW); 15118 if (val & VCPU_CFGSHDW_ASPM_DBNC) 15119 tg3_flag_set(tp, ASPM_WORKAROUND); 15120 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 15121 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 15122 tg3_flag_set(tp, WOL_ENABLE); 15123 device_set_wakeup_enable(&tp->pdev->dev, true); 15124 } 15125 goto done; 15126 } 15127 15128 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 15129 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 15130 u32 nic_cfg, led_cfg; 15131 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0; 15132 u32 nic_phy_id, ver, eeprom_phy_id; 15133 int eeprom_phy_serdes = 0; 15134 15135 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 15136 tp->nic_sram_data_cfg = nic_cfg; 15137 15138 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 15139 ver >>= NIC_SRAM_DATA_VER_SHIFT; 15140 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15141 tg3_asic_rev(tp) != ASIC_REV_5701 && 15142 tg3_asic_rev(tp) != ASIC_REV_5703 && 15143 (ver > 0) && (ver < 0x100)) 15144 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 15145 15146 if (tg3_asic_rev(tp) == ASIC_REV_5785) 15147 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 15148 15149 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15150 tg3_asic_rev(tp) == ASIC_REV_5719 || 15151 tg3_asic_rev(tp) == ASIC_REV_5720) 15152 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5); 15153 15154 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 15155 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 15156 eeprom_phy_serdes = 1; 15157 15158 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 15159 if (nic_phy_id != 0) { 15160 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 15161 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 15162 15163 eeprom_phy_id = (id1 >> 16) << 10; 15164 eeprom_phy_id |= (id2 & 0xfc00) << 16; 15165 eeprom_phy_id |= (id2 & 0x03ff) << 0; 15166 } else 15167 eeprom_phy_id = 0; 15168 15169 tp->phy_id = eeprom_phy_id; 15170 if (eeprom_phy_serdes) { 15171 if (!tg3_flag(tp, 5705_PLUS)) 15172 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15173 else 15174 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 15175 } 15176 15177 if (tg3_flag(tp, 5750_PLUS)) 15178 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 15179 SHASTA_EXT_LED_MODE_MASK); 15180 else 15181 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 15182 15183 switch (led_cfg) { 15184 default: 15185 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 15186 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15187 break; 15188 15189 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 15190 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15191 break; 15192 15193 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 15194 tp->led_ctrl = LED_CTRL_MODE_MAC; 15195 15196 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 15197 * read on some older 5700/5701 bootcode. 15198 */ 15199 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 15200 tg3_asic_rev(tp) == ASIC_REV_5701) 15201 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15202 15203 break; 15204 15205 case SHASTA_EXT_LED_SHARED: 15206 tp->led_ctrl = LED_CTRL_MODE_SHARED; 15207 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 15208 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1) 15209 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15210 LED_CTRL_MODE_PHY_2); 15211 15212 if (tg3_flag(tp, 5717_PLUS) || 15213 tg3_asic_rev(tp) == ASIC_REV_5762) 15214 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE | 15215 LED_CTRL_BLINK_RATE_MASK; 15216 15217 break; 15218 15219 case SHASTA_EXT_LED_MAC: 15220 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 15221 break; 15222 15223 case SHASTA_EXT_LED_COMBO: 15224 tp->led_ctrl = LED_CTRL_MODE_COMBO; 15225 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) 15226 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15227 LED_CTRL_MODE_PHY_2); 15228 break; 15229 15230 } 15231 15232 if ((tg3_asic_rev(tp) == ASIC_REV_5700 || 15233 tg3_asic_rev(tp) == ASIC_REV_5701) && 15234 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 15235 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15236 15237 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) 15238 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15239 15240 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 15241 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15242 if ((tp->pdev->subsystem_vendor == 15243 PCI_VENDOR_ID_ARIMA) && 15244 (tp->pdev->subsystem_device == 0x205a || 15245 tp->pdev->subsystem_device == 0x2063)) 15246 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15247 } else { 15248 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15249 tg3_flag_set(tp, IS_NIC); 15250 } 15251 15252 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 15253 tg3_flag_set(tp, ENABLE_ASF); 15254 if (tg3_flag(tp, 5750_PLUS)) 15255 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 15256 } 15257 15258 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 15259 tg3_flag(tp, 5750_PLUS)) 15260 tg3_flag_set(tp, ENABLE_APE); 15261 15262 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 15263 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 15264 tg3_flag_clear(tp, WOL_CAP); 15265 15266 if (tg3_flag(tp, WOL_CAP) && 15267 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 15268 tg3_flag_set(tp, WOL_ENABLE); 15269 device_set_wakeup_enable(&tp->pdev->dev, true); 15270 } 15271 15272 if (cfg2 & (1 << 17)) 15273 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 15274 15275 /* serdes signal pre-emphasis in register 0x590 set by */ 15276 /* bootcode if bit 18 is set */ 15277 if (cfg2 & (1 << 18)) 15278 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 15279 15280 if ((tg3_flag(tp, 57765_PLUS) || 15281 (tg3_asic_rev(tp) == ASIC_REV_5784 && 15282 tg3_chip_rev(tp) != CHIPREV_5784_AX)) && 15283 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 15284 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 15285 15286 if (tg3_flag(tp, PCI_EXPRESS)) { 15287 u32 cfg3; 15288 15289 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 15290 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 15291 !tg3_flag(tp, 57765_PLUS) && 15292 (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)) 15293 tg3_flag_set(tp, ASPM_WORKAROUND); 15294 if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID) 15295 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 15296 if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK) 15297 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 15298 } 15299 15300 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 15301 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 15302 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 15303 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 15304 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 15305 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 15306 15307 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV) 15308 tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV; 15309 } 15310done: 15311 if (tg3_flag(tp, WOL_CAP)) 15312 device_set_wakeup_enable(&tp->pdev->dev, 15313 tg3_flag(tp, WOL_ENABLE)); 15314 else 15315 device_set_wakeup_capable(&tp->pdev->dev, false); 15316} 15317 15318static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val) 15319{ 15320 int i, err; 15321 u32 val2, off = offset * 8; 15322 15323 err = tg3_nvram_lock(tp); 15324 if (err) 15325 return err; 15326 15327 tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE); 15328 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN | 15329 APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START); 15330 tg3_ape_read32(tp, TG3_APE_OTP_CTRL); 15331 udelay(10); 15332 15333 for (i = 0; i < 100; i++) { 15334 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS); 15335 if (val2 & APE_OTP_STATUS_CMD_DONE) { 15336 *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA); 15337 break; 15338 } 15339 udelay(10); 15340 } 15341 15342 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0); 15343 15344 tg3_nvram_unlock(tp); 15345 if (val2 & APE_OTP_STATUS_CMD_DONE) 15346 return 0; 15347 15348 return -EBUSY; 15349} 15350 15351static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 15352{ 15353 int i; 15354 u32 val; 15355 15356 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 15357 tw32(OTP_CTRL, cmd); 15358 15359 /* Wait for up to 1 ms for command to execute. */ 15360 for (i = 0; i < 100; i++) { 15361 val = tr32(OTP_STATUS); 15362 if (val & OTP_STATUS_CMD_DONE) 15363 break; 15364 udelay(10); 15365 } 15366 15367 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 15368} 15369 15370/* Read the gphy configuration from the OTP region of the chip. The gphy 15371 * configuration is a 32-bit value that straddles the alignment boundary. 15372 * We do two 32-bit reads and then shift and merge the results. 15373 */ 15374static u32 tg3_read_otp_phycfg(struct tg3 *tp) 15375{ 15376 u32 bhalf_otp, thalf_otp; 15377 15378 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 15379 15380 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 15381 return 0; 15382 15383 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 15384 15385 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15386 return 0; 15387 15388 thalf_otp = tr32(OTP_READ_DATA); 15389 15390 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 15391 15392 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15393 return 0; 15394 15395 bhalf_otp = tr32(OTP_READ_DATA); 15396 15397 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 15398} 15399 15400static void tg3_phy_init_link_config(struct tg3 *tp) 15401{ 15402 u32 adv = ADVERTISED_Autoneg; 15403 15404 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 15405 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV)) 15406 adv |= ADVERTISED_1000baseT_Half; 15407 adv |= ADVERTISED_1000baseT_Full; 15408 } 15409 15410 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 15411 adv |= ADVERTISED_100baseT_Half | 15412 ADVERTISED_100baseT_Full | 15413 ADVERTISED_10baseT_Half | 15414 ADVERTISED_10baseT_Full | 15415 ADVERTISED_TP; 15416 else 15417 adv |= ADVERTISED_FIBRE; 15418 15419 tp->link_config.advertising = adv; 15420 tp->link_config.speed = SPEED_UNKNOWN; 15421 tp->link_config.duplex = DUPLEX_UNKNOWN; 15422 tp->link_config.autoneg = AUTONEG_ENABLE; 15423 tp->link_config.active_speed = SPEED_UNKNOWN; 15424 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 15425 15426 tp->old_link = -1; 15427} 15428 15429static int tg3_phy_probe(struct tg3 *tp) 15430{ 15431 u32 hw_phy_id_1, hw_phy_id_2; 15432 u32 hw_phy_id, hw_phy_id_masked; 15433 int err; 15434 15435 /* flow control autonegotiation is default behavior */ 15436 tg3_flag_set(tp, PAUSE_AUTONEG); 15437 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 15438 15439 if (tg3_flag(tp, ENABLE_APE)) { 15440 switch (tp->pci_fn) { 15441 case 0: 15442 tp->phy_ape_lock = TG3_APE_LOCK_PHY0; 15443 break; 15444 case 1: 15445 tp->phy_ape_lock = TG3_APE_LOCK_PHY1; 15446 break; 15447 case 2: 15448 tp->phy_ape_lock = TG3_APE_LOCK_PHY2; 15449 break; 15450 case 3: 15451 tp->phy_ape_lock = TG3_APE_LOCK_PHY3; 15452 break; 15453 } 15454 } 15455 15456 if (!tg3_flag(tp, ENABLE_ASF) && 15457 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15458 !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 15459 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 15460 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 15461 15462 if (tg3_flag(tp, USE_PHYLIB)) 15463 return tg3_phy_init(tp); 15464 15465 /* Reading the PHY ID register can conflict with ASF 15466 * firmware access to the PHY hardware. 15467 */ 15468 err = 0; 15469 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 15470 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 15471 } else { 15472 /* Now read the physical PHY_ID from the chip and verify 15473 * that it is sane. If it doesn't look good, we fall back 15474 * to either the hard-coded table based PHY_ID and failing 15475 * that the value found in the eeprom area. 15476 */ 15477 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 15478 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 15479 15480 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 15481 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 15482 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 15483 15484 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 15485 } 15486 15487 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 15488 tp->phy_id = hw_phy_id; 15489 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 15490 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15491 else 15492 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 15493 } else { 15494 if (tp->phy_id != TG3_PHY_ID_INVALID) { 15495 /* Do nothing, phy ID already set up in 15496 * tg3_get_eeprom_hw_cfg(). 15497 */ 15498 } else { 15499 struct subsys_tbl_ent *p; 15500 15501 /* No eeprom signature? Try the hardcoded 15502 * subsys device table. 15503 */ 15504 p = tg3_lookup_by_subsys(tp); 15505 if (p) { 15506 tp->phy_id = p->phy_id; 15507 } else if (!tg3_flag(tp, IS_SSB_CORE)) { 15508 /* For now we saw the IDs 0xbc050cd0, 15509 * 0xbc050f80 and 0xbc050c30 on devices 15510 * connected to an BCM4785 and there are 15511 * probably more. Just assume that the phy is 15512 * supported when it is connected to a SSB core 15513 * for now. 15514 */ 15515 return -ENODEV; 15516 } 15517 15518 if (!tp->phy_id || 15519 tp->phy_id == TG3_PHY_ID_BCM8002) 15520 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15521 } 15522 } 15523 15524 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15525 (tg3_asic_rev(tp) == ASIC_REV_5719 || 15526 tg3_asic_rev(tp) == ASIC_REV_5720 || 15527 tg3_asic_rev(tp) == ASIC_REV_57766 || 15528 tg3_asic_rev(tp) == ASIC_REV_5762 || 15529 (tg3_asic_rev(tp) == ASIC_REV_5717 && 15530 tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) || 15531 (tg3_asic_rev(tp) == ASIC_REV_57765 && 15532 tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) { 15533 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 15534 15535 tp->eee.supported = SUPPORTED_100baseT_Full | 15536 SUPPORTED_1000baseT_Full; 15537 tp->eee.advertised = ADVERTISED_100baseT_Full | 15538 ADVERTISED_1000baseT_Full; 15539 tp->eee.eee_enabled = 1; 15540 tp->eee.tx_lpi_enabled = 1; 15541 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US; 15542 } 15543 15544 tg3_phy_init_link_config(tp); 15545 15546 if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 15547 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15548 !tg3_flag(tp, ENABLE_APE) && 15549 !tg3_flag(tp, ENABLE_ASF)) { 15550 u32 bmsr, dummy; 15551 15552 tg3_readphy(tp, MII_BMSR, &bmsr); 15553 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 15554 (bmsr & BMSR_LSTATUS)) 15555 goto skip_phy_reset; 15556 15557 err = tg3_phy_reset(tp); 15558 if (err) 15559 return err; 15560 15561 tg3_phy_set_wirespeed(tp); 15562 15563 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 15564 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 15565 tp->link_config.flowctrl); 15566 15567 tg3_writephy(tp, MII_BMCR, 15568 BMCR_ANENABLE | BMCR_ANRESTART); 15569 } 15570 } 15571 15572skip_phy_reset: 15573 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 15574 err = tg3_init_5401phy_dsp(tp); 15575 if (err) 15576 return err; 15577 15578 err = tg3_init_5401phy_dsp(tp); 15579 } 15580 15581 return err; 15582} 15583 15584static void tg3_read_vpd(struct tg3 *tp) 15585{ 15586 u8 *vpd_data; 15587 unsigned int len, vpdlen; 15588 int i; 15589 15590 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 15591 if (!vpd_data) 15592 goto out_no_vpd; 15593 15594 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15595 PCI_VPD_RO_KEYWORD_MFR_ID, &len); 15596 if (i < 0) 15597 goto partno; 15598 15599 if (len != 4 || memcmp(vpd_data + i, "1028", 4)) 15600 goto partno; 15601 15602 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15603 PCI_VPD_RO_KEYWORD_VENDOR0, &len); 15604 if (i < 0) 15605 goto partno; 15606 15607 memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); 15608 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i); 15609 15610partno: 15611 i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen, 15612 PCI_VPD_RO_KEYWORD_PARTNO, &len); 15613 if (i < 0) 15614 goto out_not_found; 15615 15616 if (len > TG3_BPN_SIZE) 15617 goto out_not_found; 15618 15619 memcpy(tp->board_part_number, &vpd_data[i], len); 15620 15621out_not_found: 15622 kfree(vpd_data); 15623 if (tp->board_part_number[0]) 15624 return; 15625 15626out_no_vpd: 15627 if (tg3_asic_rev(tp) == ASIC_REV_5717) { 15628 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15629 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C) 15630 strcpy(tp->board_part_number, "BCM5717"); 15631 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 15632 strcpy(tp->board_part_number, "BCM5718"); 15633 else 15634 goto nomatch; 15635 } else if (tg3_asic_rev(tp) == ASIC_REV_57780) { 15636 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 15637 strcpy(tp->board_part_number, "BCM57780"); 15638 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 15639 strcpy(tp->board_part_number, "BCM57760"); 15640 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 15641 strcpy(tp->board_part_number, "BCM57790"); 15642 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 15643 strcpy(tp->board_part_number, "BCM57788"); 15644 else 15645 goto nomatch; 15646 } else if (tg3_asic_rev(tp) == ASIC_REV_57765) { 15647 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 15648 strcpy(tp->board_part_number, "BCM57761"); 15649 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 15650 strcpy(tp->board_part_number, "BCM57765"); 15651 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 15652 strcpy(tp->board_part_number, "BCM57781"); 15653 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 15654 strcpy(tp->board_part_number, "BCM57785"); 15655 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 15656 strcpy(tp->board_part_number, "BCM57791"); 15657 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 15658 strcpy(tp->board_part_number, "BCM57795"); 15659 else 15660 goto nomatch; 15661 } else if (tg3_asic_rev(tp) == ASIC_REV_57766) { 15662 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 15663 strcpy(tp->board_part_number, "BCM57762"); 15664 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 15665 strcpy(tp->board_part_number, "BCM57766"); 15666 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 15667 strcpy(tp->board_part_number, "BCM57782"); 15668 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 15669 strcpy(tp->board_part_number, "BCM57786"); 15670 else 15671 goto nomatch; 15672 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15673 strcpy(tp->board_part_number, "BCM95906"); 15674 } else { 15675nomatch: 15676 strcpy(tp->board_part_number, "none"); 15677 } 15678} 15679 15680static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 15681{ 15682 u32 val; 15683 15684 if (tg3_nvram_read(tp, offset, &val) || 15685 (val & 0xfc000000) != 0x0c000000 || 15686 tg3_nvram_read(tp, offset + 4, &val) || 15687 val != 0) 15688 return 0; 15689 15690 return 1; 15691} 15692 15693static void tg3_read_bc_ver(struct tg3 *tp) 15694{ 15695 u32 val, offset, start, ver_offset; 15696 int i, dst_off; 15697 bool newver = false; 15698 15699 if (tg3_nvram_read(tp, 0xc, &offset) || 15700 tg3_nvram_read(tp, 0x4, &start)) 15701 return; 15702 15703 offset = tg3_nvram_logical_addr(tp, offset); 15704 15705 if (tg3_nvram_read(tp, offset, &val)) 15706 return; 15707 15708 if ((val & 0xfc000000) == 0x0c000000) { 15709 if (tg3_nvram_read(tp, offset + 4, &val)) 15710 return; 15711 15712 if (val == 0) 15713 newver = true; 15714 } 15715 15716 dst_off = strlen(tp->fw_ver); 15717 15718 if (newver) { 15719 if (TG3_VER_SIZE - dst_off < 16 || 15720 tg3_nvram_read(tp, offset + 8, &ver_offset)) 15721 return; 15722 15723 offset = offset + ver_offset - start; 15724 for (i = 0; i < 16; i += 4) { 15725 __be32 v; 15726 if (tg3_nvram_read_be32(tp, offset + i, &v)) 15727 return; 15728 15729 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 15730 } 15731 } else { 15732 u32 major, minor; 15733 15734 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 15735 return; 15736 15737 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 15738 TG3_NVM_BCVER_MAJSFT; 15739 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 15740 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 15741 "v%d.%02d", major, minor); 15742 } 15743} 15744 15745static void tg3_read_hwsb_ver(struct tg3 *tp) 15746{ 15747 u32 val, major, minor; 15748 15749 /* Use native endian representation */ 15750 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 15751 return; 15752 15753 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 15754 TG3_NVM_HWSB_CFG1_MAJSFT; 15755 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 15756 TG3_NVM_HWSB_CFG1_MINSFT; 15757 15758 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 15759} 15760 15761static void tg3_read_sb_ver(struct tg3 *tp, u32 val) 15762{ 15763 u32 offset, major, minor, build; 15764 15765 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 15766 15767 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 15768 return; 15769 15770 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 15771 case TG3_EEPROM_SB_REVISION_0: 15772 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 15773 break; 15774 case TG3_EEPROM_SB_REVISION_2: 15775 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 15776 break; 15777 case TG3_EEPROM_SB_REVISION_3: 15778 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 15779 break; 15780 case TG3_EEPROM_SB_REVISION_4: 15781 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 15782 break; 15783 case TG3_EEPROM_SB_REVISION_5: 15784 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 15785 break; 15786 case TG3_EEPROM_SB_REVISION_6: 15787 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 15788 break; 15789 default: 15790 return; 15791 } 15792 15793 if (tg3_nvram_read(tp, offset, &val)) 15794 return; 15795 15796 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 15797 TG3_EEPROM_SB_EDH_BLD_SHFT; 15798 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 15799 TG3_EEPROM_SB_EDH_MAJ_SHFT; 15800 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 15801 15802 if (minor > 99 || build > 26) 15803 return; 15804 15805 offset = strlen(tp->fw_ver); 15806 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 15807 " v%d.%02d", major, minor); 15808 15809 if (build > 0) { 15810 offset = strlen(tp->fw_ver); 15811 if (offset < TG3_VER_SIZE - 1) 15812 tp->fw_ver[offset] = 'a' + build - 1; 15813 } 15814} 15815 15816static void tg3_read_mgmtfw_ver(struct tg3 *tp) 15817{ 15818 u32 val, offset, start; 15819 int i, vlen; 15820 15821 for (offset = TG3_NVM_DIR_START; 15822 offset < TG3_NVM_DIR_END; 15823 offset += TG3_NVM_DIRENT_SIZE) { 15824 if (tg3_nvram_read(tp, offset, &val)) 15825 return; 15826 15827 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 15828 break; 15829 } 15830 15831 if (offset == TG3_NVM_DIR_END) 15832 return; 15833 15834 if (!tg3_flag(tp, 5705_PLUS)) 15835 start = 0x08000000; 15836 else if (tg3_nvram_read(tp, offset - 4, &start)) 15837 return; 15838 15839 if (tg3_nvram_read(tp, offset + 4, &offset) || 15840 !tg3_fw_img_is_valid(tp, offset) || 15841 tg3_nvram_read(tp, offset + 8, &val)) 15842 return; 15843 15844 offset += val - start; 15845 15846 vlen = strlen(tp->fw_ver); 15847 15848 tp->fw_ver[vlen++] = ','; 15849 tp->fw_ver[vlen++] = ' '; 15850 15851 for (i = 0; i < 4; i++) { 15852 __be32 v; 15853 if (tg3_nvram_read_be32(tp, offset, &v)) 15854 return; 15855 15856 offset += sizeof(v); 15857 15858 if (vlen > TG3_VER_SIZE - sizeof(v)) { 15859 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 15860 break; 15861 } 15862 15863 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 15864 vlen += sizeof(v); 15865 } 15866} 15867 15868static void tg3_probe_ncsi(struct tg3 *tp) 15869{ 15870 u32 apedata; 15871 15872 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 15873 if (apedata != APE_SEG_SIG_MAGIC) 15874 return; 15875 15876 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 15877 if (!(apedata & APE_FW_STATUS_READY)) 15878 return; 15879 15880 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 15881 tg3_flag_set(tp, APE_HAS_NCSI); 15882} 15883 15884static void tg3_read_dash_ver(struct tg3 *tp) 15885{ 15886 int vlen; 15887 u32 apedata; 15888 char *fwtype; 15889 15890 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 15891 15892 if (tg3_flag(tp, APE_HAS_NCSI)) 15893 fwtype = "NCSI"; 15894 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725) 15895 fwtype = "SMASH"; 15896 else 15897 fwtype = "DASH"; 15898 15899 vlen = strlen(tp->fw_ver); 15900 15901 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 15902 fwtype, 15903 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 15904 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 15905 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 15906 (apedata & APE_FW_VERSION_BLDMSK)); 15907} 15908 15909static void tg3_read_otp_ver(struct tg3 *tp) 15910{ 15911 u32 val, val2; 15912 15913 if (tg3_asic_rev(tp) != ASIC_REV_5762) 15914 return; 15915 15916 if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) && 15917 !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) && 15918 TG3_OTP_MAGIC0_VALID(val)) { 15919 u64 val64 = (u64) val << 32 | val2; 15920 u32 ver = 0; 15921 int i, vlen; 15922 15923 for (i = 0; i < 7; i++) { 15924 if ((val64 & 0xff) == 0) 15925 break; 15926 ver = val64 & 0xff; 15927 val64 >>= 8; 15928 } 15929 vlen = strlen(tp->fw_ver); 15930 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver); 15931 } 15932} 15933 15934static void tg3_read_fw_ver(struct tg3 *tp) 15935{ 15936 u32 val; 15937 bool vpd_vers = false; 15938 15939 if (tp->fw_ver[0] != 0) 15940 vpd_vers = true; 15941 15942 if (tg3_flag(tp, NO_NVRAM)) { 15943 strcat(tp->fw_ver, "sb"); 15944 tg3_read_otp_ver(tp); 15945 return; 15946 } 15947 15948 if (tg3_nvram_read(tp, 0, &val)) 15949 return; 15950 15951 if (val == TG3_EEPROM_MAGIC) 15952 tg3_read_bc_ver(tp); 15953 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 15954 tg3_read_sb_ver(tp, val); 15955 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 15956 tg3_read_hwsb_ver(tp); 15957 15958 if (tg3_flag(tp, ENABLE_ASF)) { 15959 if (tg3_flag(tp, ENABLE_APE)) { 15960 tg3_probe_ncsi(tp); 15961 if (!vpd_vers) 15962 tg3_read_dash_ver(tp); 15963 } else if (!vpd_vers) { 15964 tg3_read_mgmtfw_ver(tp); 15965 } 15966 } 15967 15968 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 15969} 15970 15971static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 15972{ 15973 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 15974 return TG3_RX_RET_MAX_SIZE_5717; 15975 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 15976 return TG3_RX_RET_MAX_SIZE_5700; 15977 else 15978 return TG3_RX_RET_MAX_SIZE_5705; 15979} 15980 15981static const struct pci_device_id tg3_write_reorder_chipsets[] = { 15982 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 15983 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 15984 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 15985 { }, 15986}; 15987 15988static struct pci_dev *tg3_find_peer(struct tg3 *tp) 15989{ 15990 struct pci_dev *peer; 15991 unsigned int func, devnr = tp->pdev->devfn & ~7; 15992 15993 for (func = 0; func < 8; func++) { 15994 peer = pci_get_slot(tp->pdev->bus, devnr | func); 15995 if (peer && peer != tp->pdev) 15996 break; 15997 pci_dev_put(peer); 15998 } 15999 /* 5704 can be configured in single-port mode, set peer to 16000 * tp->pdev in that case. 16001 */ 16002 if (!peer) { 16003 peer = tp->pdev; 16004 return peer; 16005 } 16006 16007 /* 16008 * We don't need to keep the refcount elevated; there's no way 16009 * to remove one half of this device without removing the other 16010 */ 16011 pci_dev_put(peer); 16012 16013 return peer; 16014} 16015 16016static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 16017{ 16018 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 16019 if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) { 16020 u32 reg; 16021 16022 /* All devices that use the alternate 16023 * ASIC REV location have a CPMU. 16024 */ 16025 tg3_flag_set(tp, CPMU_PRESENT); 16026 16027 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 16028 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 16029 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 16030 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 16031 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 16032 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 16033 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 16034 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 16035 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 16036 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 16037 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) 16038 reg = TG3PCI_GEN2_PRODID_ASICREV; 16039 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 16040 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 16041 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 16042 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 16043 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 16044 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 16045 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 16046 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 16047 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 16048 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 16049 reg = TG3PCI_GEN15_PRODID_ASICREV; 16050 else 16051 reg = TG3PCI_PRODID_ASICREV; 16052 16053 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 16054 } 16055 16056 /* Wrong chip ID in 5752 A0. This code can be removed later 16057 * as A0 is not in production. 16058 */ 16059 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW) 16060 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 16061 16062 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0) 16063 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0; 16064 16065 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16066 tg3_asic_rev(tp) == ASIC_REV_5719 || 16067 tg3_asic_rev(tp) == ASIC_REV_5720) 16068 tg3_flag_set(tp, 5717_PLUS); 16069 16070 if (tg3_asic_rev(tp) == ASIC_REV_57765 || 16071 tg3_asic_rev(tp) == ASIC_REV_57766) 16072 tg3_flag_set(tp, 57765_CLASS); 16073 16074 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || 16075 tg3_asic_rev(tp) == ASIC_REV_5762) 16076 tg3_flag_set(tp, 57765_PLUS); 16077 16078 /* Intentionally exclude ASIC_REV_5906 */ 16079 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16080 tg3_asic_rev(tp) == ASIC_REV_5787 || 16081 tg3_asic_rev(tp) == ASIC_REV_5784 || 16082 tg3_asic_rev(tp) == ASIC_REV_5761 || 16083 tg3_asic_rev(tp) == ASIC_REV_5785 || 16084 tg3_asic_rev(tp) == ASIC_REV_57780 || 16085 tg3_flag(tp, 57765_PLUS)) 16086 tg3_flag_set(tp, 5755_PLUS); 16087 16088 if (tg3_asic_rev(tp) == ASIC_REV_5780 || 16089 tg3_asic_rev(tp) == ASIC_REV_5714) 16090 tg3_flag_set(tp, 5780_CLASS); 16091 16092 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16093 tg3_asic_rev(tp) == ASIC_REV_5752 || 16094 tg3_asic_rev(tp) == ASIC_REV_5906 || 16095 tg3_flag(tp, 5755_PLUS) || 16096 tg3_flag(tp, 5780_CLASS)) 16097 tg3_flag_set(tp, 5750_PLUS); 16098 16099 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 16100 tg3_flag(tp, 5750_PLUS)) 16101 tg3_flag_set(tp, 5705_PLUS); 16102} 16103 16104static bool tg3_10_100_only_device(struct tg3 *tp, 16105 const struct pci_device_id *ent) 16106{ 16107 u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK; 16108 16109 if ((tg3_asic_rev(tp) == ASIC_REV_5703 && 16110 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 16111 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 16112 return true; 16113 16114 if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) { 16115 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 16116 if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100) 16117 return true; 16118 } else { 16119 return true; 16120 } 16121 } 16122 16123 return false; 16124} 16125 16126static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) 16127{ 16128 u32 misc_ctrl_reg; 16129 u32 pci_state_reg, grc_misc_cfg; 16130 u32 val; 16131 u16 pci_cmd; 16132 int err; 16133 16134 /* Force memory write invalidate off. If we leave it on, 16135 * then on 5700_BX chips we have to enable a workaround. 16136 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 16137 * to match the cacheline size. The Broadcom driver have this 16138 * workaround but turns MWI off all the times so never uses 16139 * it. This seems to suggest that the workaround is insufficient. 16140 */ 16141 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16142 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 16143 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16144 16145 /* Important! -- Make sure register accesses are byteswapped 16146 * correctly. Also, for those chips that require it, make 16147 * sure that indirect register accesses are enabled before 16148 * the first operation. 16149 */ 16150 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16151 &misc_ctrl_reg); 16152 tp->misc_host_ctrl |= (misc_ctrl_reg & 16153 MISC_HOST_CTRL_CHIPREV); 16154 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16155 tp->misc_host_ctrl); 16156 16157 tg3_detect_asic_rev(tp, misc_ctrl_reg); 16158 16159 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 16160 * we need to disable memory and use config. cycles 16161 * only to access all registers. The 5702/03 chips 16162 * can mistakenly decode the special cycles from the 16163 * ICH chipsets as memory write cycles, causing corruption 16164 * of register and memory space. Only certain ICH bridges 16165 * will drive special cycles with non-zero data during the 16166 * address phase which can fall within the 5703's address 16167 * range. This is not an ICH bug as the PCI spec allows 16168 * non-zero address during special cycles. However, only 16169 * these ICH bridges are known to drive non-zero addresses 16170 * during special cycles. 16171 * 16172 * Since special cycles do not cross PCI bridges, we only 16173 * enable this workaround if the 5703 is on the secondary 16174 * bus of these ICH bridges. 16175 */ 16176 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) || 16177 (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) { 16178 static struct tg3_dev_id { 16179 u32 vendor; 16180 u32 device; 16181 u32 rev; 16182 } ich_chipsets[] = { 16183 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 16184 PCI_ANY_ID }, 16185 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 16186 PCI_ANY_ID }, 16187 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 16188 0xa }, 16189 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 16190 PCI_ANY_ID }, 16191 { }, 16192 }; 16193 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 16194 struct pci_dev *bridge = NULL; 16195 16196 while (pci_id->vendor != 0) { 16197 bridge = pci_get_device(pci_id->vendor, pci_id->device, 16198 bridge); 16199 if (!bridge) { 16200 pci_id++; 16201 continue; 16202 } 16203 if (pci_id->rev != PCI_ANY_ID) { 16204 if (bridge->revision > pci_id->rev) 16205 continue; 16206 } 16207 if (bridge->subordinate && 16208 (bridge->subordinate->number == 16209 tp->pdev->bus->number)) { 16210 tg3_flag_set(tp, ICH_WORKAROUND); 16211 pci_dev_put(bridge); 16212 break; 16213 } 16214 } 16215 } 16216 16217 if (tg3_asic_rev(tp) == ASIC_REV_5701) { 16218 static struct tg3_dev_id { 16219 u32 vendor; 16220 u32 device; 16221 } bridge_chipsets[] = { 16222 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 16223 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 16224 { }, 16225 }; 16226 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 16227 struct pci_dev *bridge = NULL; 16228 16229 while (pci_id->vendor != 0) { 16230 bridge = pci_get_device(pci_id->vendor, 16231 pci_id->device, 16232 bridge); 16233 if (!bridge) { 16234 pci_id++; 16235 continue; 16236 } 16237 if (bridge->subordinate && 16238 (bridge->subordinate->number <= 16239 tp->pdev->bus->number) && 16240 (bridge->subordinate->busn_res.end >= 16241 tp->pdev->bus->number)) { 16242 tg3_flag_set(tp, 5701_DMA_BUG); 16243 pci_dev_put(bridge); 16244 break; 16245 } 16246 } 16247 } 16248 16249 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 16250 * DMA addresses > 40-bit. This bridge may have other additional 16251 * 57xx devices behind it in some 4-port NIC designs for example. 16252 * Any tg3 device found behind the bridge will also need the 40-bit 16253 * DMA workaround. 16254 */ 16255 if (tg3_flag(tp, 5780_CLASS)) { 16256 tg3_flag_set(tp, 40BIT_DMA_BUG); 16257 tp->msi_cap = tp->pdev->msi_cap; 16258 } else { 16259 struct pci_dev *bridge = NULL; 16260 16261 do { 16262 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 16263 PCI_DEVICE_ID_SERVERWORKS_EPB, 16264 bridge); 16265 if (bridge && bridge->subordinate && 16266 (bridge->subordinate->number <= 16267 tp->pdev->bus->number) && 16268 (bridge->subordinate->busn_res.end >= 16269 tp->pdev->bus->number)) { 16270 tg3_flag_set(tp, 40BIT_DMA_BUG); 16271 pci_dev_put(bridge); 16272 break; 16273 } 16274 } while (bridge); 16275 } 16276 16277 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16278 tg3_asic_rev(tp) == ASIC_REV_5714) 16279 tp->pdev_peer = tg3_find_peer(tp); 16280 16281 /* Determine TSO capabilities */ 16282 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0) 16283 ; /* Do nothing. HW bug. */ 16284 else if (tg3_flag(tp, 57765_PLUS)) 16285 tg3_flag_set(tp, HW_TSO_3); 16286 else if (tg3_flag(tp, 5755_PLUS) || 16287 tg3_asic_rev(tp) == ASIC_REV_5906) 16288 tg3_flag_set(tp, HW_TSO_2); 16289 else if (tg3_flag(tp, 5750_PLUS)) { 16290 tg3_flag_set(tp, HW_TSO_1); 16291 tg3_flag_set(tp, TSO_BUG); 16292 if (tg3_asic_rev(tp) == ASIC_REV_5750 && 16293 tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2) 16294 tg3_flag_clear(tp, TSO_BUG); 16295 } else if (tg3_asic_rev(tp) != ASIC_REV_5700 && 16296 tg3_asic_rev(tp) != ASIC_REV_5701 && 16297 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 16298 tg3_flag_set(tp, FW_TSO); 16299 tg3_flag_set(tp, TSO_BUG); 16300 if (tg3_asic_rev(tp) == ASIC_REV_5705) 16301 tp->fw_needed = FIRMWARE_TG3TSO5; 16302 else 16303 tp->fw_needed = FIRMWARE_TG3TSO; 16304 } 16305 16306 /* Selectively allow TSO based on operating conditions */ 16307 if (tg3_flag(tp, HW_TSO_1) || 16308 tg3_flag(tp, HW_TSO_2) || 16309 tg3_flag(tp, HW_TSO_3) || 16310 tg3_flag(tp, FW_TSO)) { 16311 /* For firmware TSO, assume ASF is disabled. 16312 * We'll disable TSO later if we discover ASF 16313 * is enabled in tg3_get_eeprom_hw_cfg(). 16314 */ 16315 tg3_flag_set(tp, TSO_CAPABLE); 16316 } else { 16317 tg3_flag_clear(tp, TSO_CAPABLE); 16318 tg3_flag_clear(tp, TSO_BUG); 16319 tp->fw_needed = NULL; 16320 } 16321 16322 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) 16323 tp->fw_needed = FIRMWARE_TG3; 16324 16325 if (tg3_asic_rev(tp) == ASIC_REV_57766) 16326 tp->fw_needed = FIRMWARE_TG357766; 16327 16328 tp->irq_max = 1; 16329 16330 if (tg3_flag(tp, 5750_PLUS)) { 16331 tg3_flag_set(tp, SUPPORT_MSI); 16332 if (tg3_chip_rev(tp) == CHIPREV_5750_AX || 16333 tg3_chip_rev(tp) == CHIPREV_5750_BX || 16334 (tg3_asic_rev(tp) == ASIC_REV_5714 && 16335 tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 && 16336 tp->pdev_peer == tp->pdev)) 16337 tg3_flag_clear(tp, SUPPORT_MSI); 16338 16339 if (tg3_flag(tp, 5755_PLUS) || 16340 tg3_asic_rev(tp) == ASIC_REV_5906) { 16341 tg3_flag_set(tp, 1SHOT_MSI); 16342 } 16343 16344 if (tg3_flag(tp, 57765_PLUS)) { 16345 tg3_flag_set(tp, SUPPORT_MSIX); 16346 tp->irq_max = TG3_IRQ_MAX_VECS; 16347 } 16348 } 16349 16350 tp->txq_max = 1; 16351 tp->rxq_max = 1; 16352 if (tp->irq_max > 1) { 16353 tp->rxq_max = TG3_RSS_MAX_NUM_QS; 16354 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS); 16355 16356 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 16357 tg3_asic_rev(tp) == ASIC_REV_5720) 16358 tp->txq_max = tp->irq_max - 1; 16359 } 16360 16361 if (tg3_flag(tp, 5755_PLUS) || 16362 tg3_asic_rev(tp) == ASIC_REV_5906) 16363 tg3_flag_set(tp, SHORT_DMA_BUG); 16364 16365 if (tg3_asic_rev(tp) == ASIC_REV_5719) 16366 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 16367 16368 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16369 tg3_asic_rev(tp) == ASIC_REV_5719 || 16370 tg3_asic_rev(tp) == ASIC_REV_5720 || 16371 tg3_asic_rev(tp) == ASIC_REV_5762) 16372 tg3_flag_set(tp, LRG_PROD_RING_CAP); 16373 16374 if (tg3_flag(tp, 57765_PLUS) && 16375 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0) 16376 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 16377 16378 if (!tg3_flag(tp, 5705_PLUS) || 16379 tg3_flag(tp, 5780_CLASS) || 16380 tg3_flag(tp, USE_JUMBO_BDFLAG)) 16381 tg3_flag_set(tp, JUMBO_CAPABLE); 16382 16383 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16384 &pci_state_reg); 16385 16386 if (pci_is_pcie(tp->pdev)) { 16387 u16 lnkctl; 16388 16389 tg3_flag_set(tp, PCI_EXPRESS); 16390 16391 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl); 16392 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 16393 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16394 tg3_flag_clear(tp, HW_TSO_2); 16395 tg3_flag_clear(tp, TSO_CAPABLE); 16396 } 16397 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 16398 tg3_asic_rev(tp) == ASIC_REV_5761 || 16399 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 || 16400 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1) 16401 tg3_flag_set(tp, CLKREQ_BUG); 16402 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) { 16403 tg3_flag_set(tp, L1PLLPD_EN); 16404 } 16405 } else if (tg3_asic_rev(tp) == ASIC_REV_5785) { 16406 /* BCM5785 devices are effectively PCIe devices, and should 16407 * follow PCIe codepaths, but do not have a PCIe capabilities 16408 * section. 16409 */ 16410 tg3_flag_set(tp, PCI_EXPRESS); 16411 } else if (!tg3_flag(tp, 5705_PLUS) || 16412 tg3_flag(tp, 5780_CLASS)) { 16413 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 16414 if (!tp->pcix_cap) { 16415 dev_err(&tp->pdev->dev, 16416 "Cannot find PCI-X capability, aborting\n"); 16417 return -EIO; 16418 } 16419 16420 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 16421 tg3_flag_set(tp, PCIX_MODE); 16422 } 16423 16424 /* If we have an AMD 762 or VIA K8T800 chipset, write 16425 * reordering to the mailbox registers done by the host 16426 * controller can cause major troubles. We read back from 16427 * every mailbox register write to force the writes to be 16428 * posted to the chip in order. 16429 */ 16430 if (pci_dev_present(tg3_write_reorder_chipsets) && 16431 !tg3_flag(tp, PCI_EXPRESS)) 16432 tg3_flag_set(tp, MBOX_WRITE_REORDER); 16433 16434 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 16435 &tp->pci_cacheline_sz); 16436 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16437 &tp->pci_lat_timer); 16438 if (tg3_asic_rev(tp) == ASIC_REV_5703 && 16439 tp->pci_lat_timer < 64) { 16440 tp->pci_lat_timer = 64; 16441 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16442 tp->pci_lat_timer); 16443 } 16444 16445 /* Important! -- It is critical that the PCI-X hw workaround 16446 * situation is decided before the first MMIO register access. 16447 */ 16448 if (tg3_chip_rev(tp) == CHIPREV_5700_BX) { 16449 /* 5700 BX chips need to have their TX producer index 16450 * mailboxes written twice to workaround a bug. 16451 */ 16452 tg3_flag_set(tp, TXD_MBOX_HWBUG); 16453 16454 /* If we are in PCI-X mode, enable register write workaround. 16455 * 16456 * The workaround is to use indirect register accesses 16457 * for all chip writes not to mailbox registers. 16458 */ 16459 if (tg3_flag(tp, PCIX_MODE)) { 16460 u32 pm_reg; 16461 16462 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16463 16464 /* The chip can have it's power management PCI config 16465 * space registers clobbered due to this bug. 16466 * So explicitly force the chip into D0 here. 16467 */ 16468 pci_read_config_dword(tp->pdev, 16469 tp->pdev->pm_cap + PCI_PM_CTRL, 16470 &pm_reg); 16471 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 16472 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 16473 pci_write_config_dword(tp->pdev, 16474 tp->pdev->pm_cap + PCI_PM_CTRL, 16475 pm_reg); 16476 16477 /* Also, force SERR#/PERR# in PCI command. */ 16478 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16479 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 16480 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16481 } 16482 } 16483 16484 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 16485 tg3_flag_set(tp, PCI_HIGH_SPEED); 16486 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 16487 tg3_flag_set(tp, PCI_32BIT); 16488 16489 /* Chip-specific fixup from Broadcom driver */ 16490 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) && 16491 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 16492 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 16493 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 16494 } 16495 16496 /* Default fast path register access methods */ 16497 tp->read32 = tg3_read32; 16498 tp->write32 = tg3_write32; 16499 tp->read32_mbox = tg3_read32; 16500 tp->write32_mbox = tg3_write32; 16501 tp->write32_tx_mbox = tg3_write32; 16502 tp->write32_rx_mbox = tg3_write32; 16503 16504 /* Various workaround register access methods */ 16505 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 16506 tp->write32 = tg3_write_indirect_reg32; 16507 else if (tg3_asic_rev(tp) == ASIC_REV_5701 || 16508 (tg3_flag(tp, PCI_EXPRESS) && 16509 tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) { 16510 /* 16511 * Back to back register writes can cause problems on these 16512 * chips, the workaround is to read back all reg writes 16513 * except those to mailbox regs. 16514 * 16515 * See tg3_write_indirect_reg32(). 16516 */ 16517 tp->write32 = tg3_write_flush_reg32; 16518 } 16519 16520 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 16521 tp->write32_tx_mbox = tg3_write32_tx_mbox; 16522 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 16523 tp->write32_rx_mbox = tg3_write_flush_reg32; 16524 } 16525 16526 if (tg3_flag(tp, ICH_WORKAROUND)) { 16527 tp->read32 = tg3_read_indirect_reg32; 16528 tp->write32 = tg3_write_indirect_reg32; 16529 tp->read32_mbox = tg3_read_indirect_mbox; 16530 tp->write32_mbox = tg3_write_indirect_mbox; 16531 tp->write32_tx_mbox = tg3_write_indirect_mbox; 16532 tp->write32_rx_mbox = tg3_write_indirect_mbox; 16533 16534 iounmap(tp->regs); 16535 tp->regs = NULL; 16536 16537 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16538 pci_cmd &= ~PCI_COMMAND_MEMORY; 16539 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16540 } 16541 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16542 tp->read32_mbox = tg3_read32_mbox_5906; 16543 tp->write32_mbox = tg3_write32_mbox_5906; 16544 tp->write32_tx_mbox = tg3_write32_mbox_5906; 16545 tp->write32_rx_mbox = tg3_write32_mbox_5906; 16546 } 16547 16548 if (tp->write32 == tg3_write_indirect_reg32 || 16549 (tg3_flag(tp, PCIX_MODE) && 16550 (tg3_asic_rev(tp) == ASIC_REV_5700 || 16551 tg3_asic_rev(tp) == ASIC_REV_5701))) 16552 tg3_flag_set(tp, SRAM_USE_CONFIG); 16553 16554 /* The memory arbiter has to be enabled in order for SRAM accesses 16555 * to succeed. Normally on powerup the tg3 chip firmware will make 16556 * sure it is enabled, but other entities such as system netboot 16557 * code might disable it. 16558 */ 16559 val = tr32(MEMARB_MODE); 16560 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 16561 16562 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 16563 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16564 tg3_flag(tp, 5780_CLASS)) { 16565 if (tg3_flag(tp, PCIX_MODE)) { 16566 pci_read_config_dword(tp->pdev, 16567 tp->pcix_cap + PCI_X_STATUS, 16568 &val); 16569 tp->pci_fn = val & 0x7; 16570 } 16571 } else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16572 tg3_asic_rev(tp) == ASIC_REV_5719 || 16573 tg3_asic_rev(tp) == ASIC_REV_5720) { 16574 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 16575 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG) 16576 val = tr32(TG3_CPMU_STATUS); 16577 16578 if (tg3_asic_rev(tp) == ASIC_REV_5717) 16579 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0; 16580 else 16581 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 16582 TG3_CPMU_STATUS_FSHFT_5719; 16583 } 16584 16585 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 16586 tp->write32_tx_mbox = tg3_write_flush_reg32; 16587 tp->write32_rx_mbox = tg3_write_flush_reg32; 16588 } 16589 16590 /* Get eeprom hw config before calling tg3_set_power_state(). 16591 * In particular, the TG3_FLAG_IS_NIC flag must be 16592 * determined before calling tg3_set_power_state() so that 16593 * we know whether or not to switch out of Vaux power. 16594 * When the flag is set, it means that GPIO1 is used for eeprom 16595 * write protect and also implies that it is a LOM where GPIOs 16596 * are not used to switch power. 16597 */ 16598 tg3_get_eeprom_hw_cfg(tp); 16599 16600 if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) { 16601 tg3_flag_clear(tp, TSO_CAPABLE); 16602 tg3_flag_clear(tp, TSO_BUG); 16603 tp->fw_needed = NULL; 16604 } 16605 16606 if (tg3_flag(tp, ENABLE_APE)) { 16607 /* Allow reads and writes to the 16608 * APE register and memory space. 16609 */ 16610 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 16611 PCISTATE_ALLOW_APE_SHMEM_WR | 16612 PCISTATE_ALLOW_APE_PSPACE_WR; 16613 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 16614 pci_state_reg); 16615 16616 tg3_ape_lock_init(tp); 16617 tp->ape_hb_interval = 16618 msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC); 16619 } 16620 16621 /* Set up tp->grc_local_ctrl before calling 16622 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 16623 * will bring 5700's external PHY out of reset. 16624 * It is also used as eeprom write protect on LOMs. 16625 */ 16626 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 16627 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16628 tg3_flag(tp, EEPROM_WRITE_PROT)) 16629 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 16630 GRC_LCLCTRL_GPIO_OUTPUT1); 16631 /* Unused GPIO3 must be driven as output on 5752 because there 16632 * are no pull-up resistors on unused GPIO pins. 16633 */ 16634 else if (tg3_asic_rev(tp) == ASIC_REV_5752) 16635 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 16636 16637 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16638 tg3_asic_rev(tp) == ASIC_REV_57780 || 16639 tg3_flag(tp, 57765_CLASS)) 16640 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16641 16642 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 16643 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 16644 /* Turn off the debug UART. */ 16645 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16646 if (tg3_flag(tp, IS_NIC)) 16647 /* Keep VMain power. */ 16648 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 16649 GRC_LCLCTRL_GPIO_OUTPUT0; 16650 } 16651 16652 if (tg3_asic_rev(tp) == ASIC_REV_5762) 16653 tp->grc_local_ctrl |= 16654 tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL; 16655 16656 /* Switch out of Vaux if it is a NIC */ 16657 tg3_pwrsrc_switch_to_vmain(tp); 16658 16659 /* Derive initial jumbo mode from MTU assigned in 16660 * ether_setup() via the alloc_etherdev() call 16661 */ 16662 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 16663 tg3_flag_set(tp, JUMBO_RING_ENABLE); 16664 16665 /* Determine WakeOnLan speed to use. */ 16666 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16667 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16668 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16669 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) { 16670 tg3_flag_clear(tp, WOL_SPEED_100MB); 16671 } else { 16672 tg3_flag_set(tp, WOL_SPEED_100MB); 16673 } 16674 16675 if (tg3_asic_rev(tp) == ASIC_REV_5906) 16676 tp->phy_flags |= TG3_PHYFLG_IS_FET; 16677 16678 /* A few boards don't want Ethernet@WireSpeed phy feature */ 16679 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16680 (tg3_asic_rev(tp) == ASIC_REV_5705 && 16681 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) && 16682 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) || 16683 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 16684 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 16685 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 16686 16687 if (tg3_chip_rev(tp) == CHIPREV_5703_AX || 16688 tg3_chip_rev(tp) == CHIPREV_5704_AX) 16689 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 16690 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) 16691 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 16692 16693 if (tg3_flag(tp, 5705_PLUS) && 16694 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 16695 tg3_asic_rev(tp) != ASIC_REV_5785 && 16696 tg3_asic_rev(tp) != ASIC_REV_57780 && 16697 !tg3_flag(tp, 57765_PLUS)) { 16698 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16699 tg3_asic_rev(tp) == ASIC_REV_5787 || 16700 tg3_asic_rev(tp) == ASIC_REV_5784 || 16701 tg3_asic_rev(tp) == ASIC_REV_5761) { 16702 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 16703 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 16704 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 16705 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 16706 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 16707 } else 16708 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 16709 } 16710 16711 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 16712 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 16713 tp->phy_otp = tg3_read_otp_phycfg(tp); 16714 if (tp->phy_otp == 0) 16715 tp->phy_otp = TG3_OTP_DEFAULT; 16716 } 16717 16718 if (tg3_flag(tp, CPMU_PRESENT)) 16719 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 16720 else 16721 tp->mi_mode = MAC_MI_MODE_BASE; 16722 16723 tp->coalesce_mode = 0; 16724 if (tg3_chip_rev(tp) != CHIPREV_5700_AX && 16725 tg3_chip_rev(tp) != CHIPREV_5700_BX) 16726 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 16727 16728 /* Set these bits to enable statistics workaround. */ 16729 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16730 tg3_asic_rev(tp) == ASIC_REV_5762 || 16731 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 16732 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) { 16733 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 16734 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 16735 } 16736 16737 if (tg3_asic_rev(tp) == ASIC_REV_5785 || 16738 tg3_asic_rev(tp) == ASIC_REV_57780) 16739 tg3_flag_set(tp, USE_PHYLIB); 16740 16741 err = tg3_mdio_init(tp); 16742 if (err) 16743 return err; 16744 16745 /* Initialize data/descriptor byte/word swapping. */ 16746 val = tr32(GRC_MODE); 16747 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 16748 tg3_asic_rev(tp) == ASIC_REV_5762) 16749 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 16750 GRC_MODE_WORD_SWAP_B2HRX_DATA | 16751 GRC_MODE_B2HRX_ENABLE | 16752 GRC_MODE_HTX2B_ENABLE | 16753 GRC_MODE_HOST_STACKUP); 16754 else 16755 val &= GRC_MODE_HOST_STACKUP; 16756 16757 tw32(GRC_MODE, val | tp->grc_mode); 16758 16759 tg3_switch_clocks(tp); 16760 16761 /* Clear this out for sanity. */ 16762 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 16763 16764 /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */ 16765 tw32(TG3PCI_REG_BASE_ADDR, 0); 16766 16767 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16768 &pci_state_reg); 16769 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 16770 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 16771 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16772 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16773 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 || 16774 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) { 16775 void __iomem *sram_base; 16776 16777 /* Write some dummy words into the SRAM status block 16778 * area, see if it reads back correctly. If the return 16779 * value is bad, force enable the PCIX workaround. 16780 */ 16781 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 16782 16783 writel(0x00000000, sram_base); 16784 writel(0x00000000, sram_base + 4); 16785 writel(0xffffffff, sram_base + 4); 16786 if (readl(sram_base) != 0x00000000) 16787 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16788 } 16789 } 16790 16791 udelay(50); 16792 tg3_nvram_init(tp); 16793 16794 /* If the device has an NVRAM, no need to load patch firmware */ 16795 if (tg3_asic_rev(tp) == ASIC_REV_57766 && 16796 !tg3_flag(tp, NO_NVRAM)) 16797 tp->fw_needed = NULL; 16798 16799 grc_misc_cfg = tr32(GRC_MISC_CFG); 16800 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 16801 16802 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 16803 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 16804 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 16805 tg3_flag_set(tp, IS_5788); 16806 16807 if (!tg3_flag(tp, IS_5788) && 16808 tg3_asic_rev(tp) != ASIC_REV_5700) 16809 tg3_flag_set(tp, TAGGED_STATUS); 16810 if (tg3_flag(tp, TAGGED_STATUS)) { 16811 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 16812 HOSTCC_MODE_CLRTICK_TXBD); 16813 16814 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 16815 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16816 tp->misc_host_ctrl); 16817 } 16818 16819 /* Preserve the APE MAC_MODE bits */ 16820 if (tg3_flag(tp, ENABLE_APE)) 16821 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 16822 else 16823 tp->mac_mode = 0; 16824 16825 if (tg3_10_100_only_device(tp, ent)) 16826 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 16827 16828 err = tg3_phy_probe(tp); 16829 if (err) { 16830 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 16831 /* ... but do not return immediately ... */ 16832 tg3_mdio_fini(tp); 16833 } 16834 16835 tg3_read_vpd(tp); 16836 tg3_read_fw_ver(tp); 16837 16838 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 16839 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16840 } else { 16841 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16842 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16843 else 16844 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16845 } 16846 16847 /* 5700 {AX,BX} chips have a broken status block link 16848 * change bit implementation, so we must use the 16849 * status register in those cases. 16850 */ 16851 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16852 tg3_flag_set(tp, USE_LINKCHG_REG); 16853 else 16854 tg3_flag_clear(tp, USE_LINKCHG_REG); 16855 16856 /* The led_ctrl is set during tg3_phy_probe, here we might 16857 * have to force the link status polling mechanism based 16858 * upon subsystem IDs. 16859 */ 16860 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 16861 tg3_asic_rev(tp) == ASIC_REV_5701 && 16862 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 16863 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16864 tg3_flag_set(tp, USE_LINKCHG_REG); 16865 } 16866 16867 /* For all SERDES we poll the MAC status register. */ 16868 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 16869 tg3_flag_set(tp, POLL_SERDES); 16870 else 16871 tg3_flag_clear(tp, POLL_SERDES); 16872 16873 if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF)) 16874 tg3_flag_set(tp, POLL_CPMU_LINK); 16875 16876 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 16877 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 16878 if (tg3_asic_rev(tp) == ASIC_REV_5701 && 16879 tg3_flag(tp, PCIX_MODE)) { 16880 tp->rx_offset = NET_SKB_PAD; 16881#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 16882 tp->rx_copy_thresh = ~(u16)0; 16883#endif 16884 } 16885 16886 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 16887 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 16888 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 16889 16890 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 16891 16892 /* Increment the rx prod index on the rx std ring by at most 16893 * 8 for these chips to workaround hw errata. 16894 */ 16895 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16896 tg3_asic_rev(tp) == ASIC_REV_5752 || 16897 tg3_asic_rev(tp) == ASIC_REV_5755) 16898 tp->rx_std_max_post = 8; 16899 16900 if (tg3_flag(tp, ASPM_WORKAROUND)) 16901 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 16902 PCIE_PWR_MGMT_L1_THRESH_MSK; 16903 16904 return err; 16905} 16906 16907static int tg3_get_device_address(struct tg3 *tp, u8 *addr) 16908{ 16909 u32 hi, lo, mac_offset; 16910 int addr_ok = 0; 16911 int err; 16912 16913 if (!eth_platform_get_mac_address(&tp->pdev->dev, addr)) 16914 return 0; 16915 16916 if (tg3_flag(tp, IS_SSB_CORE)) { 16917 err = ssb_gige_get_macaddr(tp->pdev, addr); 16918 if (!err && is_valid_ether_addr(addr)) 16919 return 0; 16920 } 16921 16922 mac_offset = 0x7c; 16923 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16924 tg3_flag(tp, 5780_CLASS)) { 16925 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 16926 mac_offset = 0xcc; 16927 if (tg3_nvram_lock(tp)) 16928 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 16929 else 16930 tg3_nvram_unlock(tp); 16931 } else if (tg3_flag(tp, 5717_PLUS)) { 16932 if (tp->pci_fn & 1) 16933 mac_offset = 0xcc; 16934 if (tp->pci_fn > 1) 16935 mac_offset += 0x18c; 16936 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) 16937 mac_offset = 0x10; 16938 16939 /* First try to get it from MAC address mailbox. */ 16940 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 16941 if ((hi >> 16) == 0x484b) { 16942 addr[0] = (hi >> 8) & 0xff; 16943 addr[1] = (hi >> 0) & 0xff; 16944 16945 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 16946 addr[2] = (lo >> 24) & 0xff; 16947 addr[3] = (lo >> 16) & 0xff; 16948 addr[4] = (lo >> 8) & 0xff; 16949 addr[5] = (lo >> 0) & 0xff; 16950 16951 /* Some old bootcode may report a 0 MAC address in SRAM */ 16952 addr_ok = is_valid_ether_addr(addr); 16953 } 16954 if (!addr_ok) { 16955 /* Next, try NVRAM. */ 16956 if (!tg3_flag(tp, NO_NVRAM) && 16957 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 16958 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 16959 memcpy(&addr[0], ((char *)&hi) + 2, 2); 16960 memcpy(&addr[2], (char *)&lo, sizeof(lo)); 16961 } 16962 /* Finally just fetch it out of the MAC control regs. */ 16963 else { 16964 hi = tr32(MAC_ADDR_0_HIGH); 16965 lo = tr32(MAC_ADDR_0_LOW); 16966 16967 addr[5] = lo & 0xff; 16968 addr[4] = (lo >> 8) & 0xff; 16969 addr[3] = (lo >> 16) & 0xff; 16970 addr[2] = (lo >> 24) & 0xff; 16971 addr[1] = hi & 0xff; 16972 addr[0] = (hi >> 8) & 0xff; 16973 } 16974 } 16975 16976 if (!is_valid_ether_addr(addr)) 16977 return -EINVAL; 16978 return 0; 16979} 16980 16981#define BOUNDARY_SINGLE_CACHELINE 1 16982#define BOUNDARY_MULTI_CACHELINE 2 16983 16984static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 16985{ 16986 int cacheline_size; 16987 u8 byte; 16988 int goal; 16989 16990 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 16991 if (byte == 0) 16992 cacheline_size = 1024; 16993 else 16994 cacheline_size = (int) byte * 4; 16995 16996 /* On 5703 and later chips, the boundary bits have no 16997 * effect. 16998 */ 16999 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17000 tg3_asic_rev(tp) != ASIC_REV_5701 && 17001 !tg3_flag(tp, PCI_EXPRESS)) 17002 goto out; 17003 17004#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 17005 goal = BOUNDARY_MULTI_CACHELINE; 17006#else 17007#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 17008 goal = BOUNDARY_SINGLE_CACHELINE; 17009#else 17010 goal = 0; 17011#endif 17012#endif 17013 17014 if (tg3_flag(tp, 57765_PLUS)) { 17015 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 17016 goto out; 17017 } 17018 17019 if (!goal) 17020 goto out; 17021 17022 /* PCI controllers on most RISC systems tend to disconnect 17023 * when a device tries to burst across a cache-line boundary. 17024 * Therefore, letting tg3 do so just wastes PCI bandwidth. 17025 * 17026 * Unfortunately, for PCI-E there are only limited 17027 * write-side controls for this, and thus for reads 17028 * we will still get the disconnects. We'll also waste 17029 * these PCI cycles for both read and write for chips 17030 * other than 5700 and 5701 which do not implement the 17031 * boundary bits. 17032 */ 17033 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 17034 switch (cacheline_size) { 17035 case 16: 17036 case 32: 17037 case 64: 17038 case 128: 17039 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17040 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 17041 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 17042 } else { 17043 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17044 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17045 } 17046 break; 17047 17048 case 256: 17049 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 17050 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 17051 break; 17052 17053 default: 17054 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17055 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17056 break; 17057 } 17058 } else if (tg3_flag(tp, PCI_EXPRESS)) { 17059 switch (cacheline_size) { 17060 case 16: 17061 case 32: 17062 case 64: 17063 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17064 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17065 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 17066 break; 17067 } 17068 fallthrough; 17069 case 128: 17070 default: 17071 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17072 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 17073 break; 17074 } 17075 } else { 17076 switch (cacheline_size) { 17077 case 16: 17078 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17079 val |= (DMA_RWCTRL_READ_BNDRY_16 | 17080 DMA_RWCTRL_WRITE_BNDRY_16); 17081 break; 17082 } 17083 fallthrough; 17084 case 32: 17085 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17086 val |= (DMA_RWCTRL_READ_BNDRY_32 | 17087 DMA_RWCTRL_WRITE_BNDRY_32); 17088 break; 17089 } 17090 fallthrough; 17091 case 64: 17092 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17093 val |= (DMA_RWCTRL_READ_BNDRY_64 | 17094 DMA_RWCTRL_WRITE_BNDRY_64); 17095 break; 17096 } 17097 fallthrough; 17098 case 128: 17099 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17100 val |= (DMA_RWCTRL_READ_BNDRY_128 | 17101 DMA_RWCTRL_WRITE_BNDRY_128); 17102 break; 17103 } 17104 fallthrough; 17105 case 256: 17106 val |= (DMA_RWCTRL_READ_BNDRY_256 | 17107 DMA_RWCTRL_WRITE_BNDRY_256); 17108 break; 17109 case 512: 17110 val |= (DMA_RWCTRL_READ_BNDRY_512 | 17111 DMA_RWCTRL_WRITE_BNDRY_512); 17112 break; 17113 case 1024: 17114 default: 17115 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 17116 DMA_RWCTRL_WRITE_BNDRY_1024); 17117 break; 17118 } 17119 } 17120 17121out: 17122 return val; 17123} 17124 17125static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, 17126 int size, bool to_device) 17127{ 17128 struct tg3_internal_buffer_desc test_desc; 17129 u32 sram_dma_descs; 17130 int i, ret; 17131 17132 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 17133 17134 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 17135 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 17136 tw32(RDMAC_STATUS, 0); 17137 tw32(WDMAC_STATUS, 0); 17138 17139 tw32(BUFMGR_MODE, 0); 17140 tw32(FTQ_RESET, 0); 17141 17142 test_desc.addr_hi = ((u64) buf_dma) >> 32; 17143 test_desc.addr_lo = buf_dma & 0xffffffff; 17144 test_desc.nic_mbuf = 0x00002100; 17145 test_desc.len = size; 17146 17147 /* 17148 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 17149 * the *second* time the tg3 driver was getting loaded after an 17150 * initial scan. 17151 * 17152 * Broadcom tells me: 17153 * ...the DMA engine is connected to the GRC block and a DMA 17154 * reset may affect the GRC block in some unpredictable way... 17155 * The behavior of resets to individual blocks has not been tested. 17156 * 17157 * Broadcom noted the GRC reset will also reset all sub-components. 17158 */ 17159 if (to_device) { 17160 test_desc.cqid_sqid = (13 << 8) | 2; 17161 17162 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 17163 udelay(40); 17164 } else { 17165 test_desc.cqid_sqid = (16 << 8) | 7; 17166 17167 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 17168 udelay(40); 17169 } 17170 test_desc.flags = 0x00000005; 17171 17172 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 17173 u32 val; 17174 17175 val = *(((u32 *)&test_desc) + i); 17176 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 17177 sram_dma_descs + (i * sizeof(u32))); 17178 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 17179 } 17180 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 17181 17182 if (to_device) 17183 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 17184 else 17185 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 17186 17187 ret = -ENODEV; 17188 for (i = 0; i < 40; i++) { 17189 u32 val; 17190 17191 if (to_device) 17192 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 17193 else 17194 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 17195 if ((val & 0xffff) == sram_dma_descs) { 17196 ret = 0; 17197 break; 17198 } 17199 17200 udelay(100); 17201 } 17202 17203 return ret; 17204} 17205 17206#define TEST_BUFFER_SIZE 0x2000 17207 17208static const struct pci_device_id tg3_dma_wait_state_chipsets[] = { 17209 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 17210 { }, 17211}; 17212 17213static int tg3_test_dma(struct tg3 *tp) 17214{ 17215 dma_addr_t buf_dma; 17216 u32 *buf, saved_dma_rwctrl; 17217 int ret = 0; 17218 17219 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 17220 &buf_dma, GFP_KERNEL); 17221 if (!buf) { 17222 ret = -ENOMEM; 17223 goto out_nofree; 17224 } 17225 17226 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 17227 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 17228 17229 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 17230 17231 if (tg3_flag(tp, 57765_PLUS)) 17232 goto out; 17233 17234 if (tg3_flag(tp, PCI_EXPRESS)) { 17235 /* DMA read watermark not used on PCIE */ 17236 tp->dma_rwctrl |= 0x00180000; 17237 } else if (!tg3_flag(tp, PCIX_MODE)) { 17238 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 17239 tg3_asic_rev(tp) == ASIC_REV_5750) 17240 tp->dma_rwctrl |= 0x003f0000; 17241 else 17242 tp->dma_rwctrl |= 0x003f000f; 17243 } else { 17244 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17245 tg3_asic_rev(tp) == ASIC_REV_5704) { 17246 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 17247 u32 read_water = 0x7; 17248 17249 /* If the 5704 is behind the EPB bridge, we can 17250 * do the less restrictive ONE_DMA workaround for 17251 * better performance. 17252 */ 17253 if (tg3_flag(tp, 40BIT_DMA_BUG) && 17254 tg3_asic_rev(tp) == ASIC_REV_5704) 17255 tp->dma_rwctrl |= 0x8000; 17256 else if (ccval == 0x6 || ccval == 0x7) 17257 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17258 17259 if (tg3_asic_rev(tp) == ASIC_REV_5703) 17260 read_water = 4; 17261 /* Set bit 23 to enable PCIX hw bug fix */ 17262 tp->dma_rwctrl |= 17263 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 17264 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 17265 (1 << 23); 17266 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) { 17267 /* 5780 always in PCIX mode */ 17268 tp->dma_rwctrl |= 0x00144000; 17269 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) { 17270 /* 5714 always in PCIX mode */ 17271 tp->dma_rwctrl |= 0x00148000; 17272 } else { 17273 tp->dma_rwctrl |= 0x001b000f; 17274 } 17275 } 17276 if (tg3_flag(tp, ONE_DMA_AT_ONCE)) 17277 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17278 17279 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17280 tg3_asic_rev(tp) == ASIC_REV_5704) 17281 tp->dma_rwctrl &= 0xfffffff0; 17282 17283 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 17284 tg3_asic_rev(tp) == ASIC_REV_5701) { 17285 /* Remove this if it causes problems for some boards. */ 17286 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 17287 17288 /* On 5700/5701 chips, we need to set this bit. 17289 * Otherwise the chip will issue cacheline transactions 17290 * to streamable DMA memory with not all the byte 17291 * enables turned on. This is an error on several 17292 * RISC PCI controllers, in particular sparc64. 17293 * 17294 * On 5703/5704 chips, this bit has been reassigned 17295 * a different meaning. In particular, it is used 17296 * on those chips to enable a PCI-X workaround. 17297 */ 17298 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 17299 } 17300 17301 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17302 17303 17304 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17305 tg3_asic_rev(tp) != ASIC_REV_5701) 17306 goto out; 17307 17308 /* It is best to perform DMA test with maximum write burst size 17309 * to expose the 5700/5701 write DMA bug. 17310 */ 17311 saved_dma_rwctrl = tp->dma_rwctrl; 17312 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17313 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17314 17315 while (1) { 17316 u32 *p = buf, i; 17317 17318 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 17319 p[i] = i; 17320 17321 /* Send the buffer to the chip. */ 17322 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true); 17323 if (ret) { 17324 dev_err(&tp->pdev->dev, 17325 "%s: Buffer write failed. err = %d\n", 17326 __func__, ret); 17327 break; 17328 } 17329 17330 /* Now read it back. */ 17331 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false); 17332 if (ret) { 17333 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 17334 "err = %d\n", __func__, ret); 17335 break; 17336 } 17337 17338 /* Verify it. */ 17339 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 17340 if (p[i] == i) 17341 continue; 17342 17343 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17344 DMA_RWCTRL_WRITE_BNDRY_16) { 17345 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17346 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17347 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17348 break; 17349 } else { 17350 dev_err(&tp->pdev->dev, 17351 "%s: Buffer corrupted on read back! " 17352 "(%d != %d)\n", __func__, p[i], i); 17353 ret = -ENODEV; 17354 goto out; 17355 } 17356 } 17357 17358 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 17359 /* Success. */ 17360 ret = 0; 17361 break; 17362 } 17363 } 17364 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17365 DMA_RWCTRL_WRITE_BNDRY_16) { 17366 /* DMA test passed without adjusting DMA boundary, 17367 * now look for chipsets that are known to expose the 17368 * DMA bug without failing the test. 17369 */ 17370 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 17371 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17372 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17373 } else { 17374 /* Safe to use the calculated DMA boundary. */ 17375 tp->dma_rwctrl = saved_dma_rwctrl; 17376 } 17377 17378 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17379 } 17380 17381out: 17382 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 17383out_nofree: 17384 return ret; 17385} 17386 17387static void tg3_init_bufmgr_config(struct tg3 *tp) 17388{ 17389 if (tg3_flag(tp, 57765_PLUS)) { 17390 tp->bufmgr_config.mbuf_read_dma_low_water = 17391 DEFAULT_MB_RDMA_LOW_WATER_5705; 17392 tp->bufmgr_config.mbuf_mac_rx_low_water = 17393 DEFAULT_MB_MACRX_LOW_WATER_57765; 17394 tp->bufmgr_config.mbuf_high_water = 17395 DEFAULT_MB_HIGH_WATER_57765; 17396 17397 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17398 DEFAULT_MB_RDMA_LOW_WATER_5705; 17399 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17400 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 17401 tp->bufmgr_config.mbuf_high_water_jumbo = 17402 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 17403 } else if (tg3_flag(tp, 5705_PLUS)) { 17404 tp->bufmgr_config.mbuf_read_dma_low_water = 17405 DEFAULT_MB_RDMA_LOW_WATER_5705; 17406 tp->bufmgr_config.mbuf_mac_rx_low_water = 17407 DEFAULT_MB_MACRX_LOW_WATER_5705; 17408 tp->bufmgr_config.mbuf_high_water = 17409 DEFAULT_MB_HIGH_WATER_5705; 17410 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 17411 tp->bufmgr_config.mbuf_mac_rx_low_water = 17412 DEFAULT_MB_MACRX_LOW_WATER_5906; 17413 tp->bufmgr_config.mbuf_high_water = 17414 DEFAULT_MB_HIGH_WATER_5906; 17415 } 17416 17417 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17418 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 17419 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17420 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 17421 tp->bufmgr_config.mbuf_high_water_jumbo = 17422 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 17423 } else { 17424 tp->bufmgr_config.mbuf_read_dma_low_water = 17425 DEFAULT_MB_RDMA_LOW_WATER; 17426 tp->bufmgr_config.mbuf_mac_rx_low_water = 17427 DEFAULT_MB_MACRX_LOW_WATER; 17428 tp->bufmgr_config.mbuf_high_water = 17429 DEFAULT_MB_HIGH_WATER; 17430 17431 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17432 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 17433 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17434 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 17435 tp->bufmgr_config.mbuf_high_water_jumbo = 17436 DEFAULT_MB_HIGH_WATER_JUMBO; 17437 } 17438 17439 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 17440 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 17441} 17442 17443static char *tg3_phy_string(struct tg3 *tp) 17444{ 17445 switch (tp->phy_id & TG3_PHY_ID_MASK) { 17446 case TG3_PHY_ID_BCM5400: return "5400"; 17447 case TG3_PHY_ID_BCM5401: return "5401"; 17448 case TG3_PHY_ID_BCM5411: return "5411"; 17449 case TG3_PHY_ID_BCM5701: return "5701"; 17450 case TG3_PHY_ID_BCM5703: return "5703"; 17451 case TG3_PHY_ID_BCM5704: return "5704"; 17452 case TG3_PHY_ID_BCM5705: return "5705"; 17453 case TG3_PHY_ID_BCM5750: return "5750"; 17454 case TG3_PHY_ID_BCM5752: return "5752"; 17455 case TG3_PHY_ID_BCM5714: return "5714"; 17456 case TG3_PHY_ID_BCM5780: return "5780"; 17457 case TG3_PHY_ID_BCM5755: return "5755"; 17458 case TG3_PHY_ID_BCM5787: return "5787"; 17459 case TG3_PHY_ID_BCM5784: return "5784"; 17460 case TG3_PHY_ID_BCM5756: return "5722/5756"; 17461 case TG3_PHY_ID_BCM5906: return "5906"; 17462 case TG3_PHY_ID_BCM5761: return "5761"; 17463 case TG3_PHY_ID_BCM5718C: return "5718C"; 17464 case TG3_PHY_ID_BCM5718S: return "5718S"; 17465 case TG3_PHY_ID_BCM57765: return "57765"; 17466 case TG3_PHY_ID_BCM5719C: return "5719C"; 17467 case TG3_PHY_ID_BCM5720C: return "5720C"; 17468 case TG3_PHY_ID_BCM5762: return "5762C"; 17469 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 17470 case 0: return "serdes"; 17471 default: return "unknown"; 17472 } 17473} 17474 17475static char *tg3_bus_string(struct tg3 *tp, char *str) 17476{ 17477 if (tg3_flag(tp, PCI_EXPRESS)) { 17478 strcpy(str, "PCI Express"); 17479 return str; 17480 } else if (tg3_flag(tp, PCIX_MODE)) { 17481 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 17482 17483 strcpy(str, "PCIX:"); 17484 17485 if ((clock_ctrl == 7) || 17486 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 17487 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 17488 strcat(str, "133MHz"); 17489 else if (clock_ctrl == 0) 17490 strcat(str, "33MHz"); 17491 else if (clock_ctrl == 2) 17492 strcat(str, "50MHz"); 17493 else if (clock_ctrl == 4) 17494 strcat(str, "66MHz"); 17495 else if (clock_ctrl == 6) 17496 strcat(str, "100MHz"); 17497 } else { 17498 strcpy(str, "PCI:"); 17499 if (tg3_flag(tp, PCI_HIGH_SPEED)) 17500 strcat(str, "66MHz"); 17501 else 17502 strcat(str, "33MHz"); 17503 } 17504 if (tg3_flag(tp, PCI_32BIT)) 17505 strcat(str, ":32-bit"); 17506 else 17507 strcat(str, ":64-bit"); 17508 return str; 17509} 17510 17511static void tg3_init_coal(struct tg3 *tp) 17512{ 17513 struct ethtool_coalesce *ec = &tp->coal; 17514 17515 memset(ec, 0, sizeof(*ec)); 17516 ec->cmd = ETHTOOL_GCOALESCE; 17517 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 17518 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 17519 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 17520 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 17521 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 17522 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 17523 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 17524 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 17525 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 17526 17527 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 17528 HOSTCC_MODE_CLRTICK_TXBD)) { 17529 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 17530 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 17531 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 17532 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 17533 } 17534 17535 if (tg3_flag(tp, 5705_PLUS)) { 17536 ec->rx_coalesce_usecs_irq = 0; 17537 ec->tx_coalesce_usecs_irq = 0; 17538 ec->stats_block_coalesce_usecs = 0; 17539 } 17540} 17541 17542static int tg3_init_one(struct pci_dev *pdev, 17543 const struct pci_device_id *ent) 17544{ 17545 struct net_device *dev; 17546 struct tg3 *tp; 17547 int i, err; 17548 u32 sndmbx, rcvmbx, intmbx; 17549 char str[40]; 17550 u64 dma_mask, persist_dma_mask; 17551 netdev_features_t features = 0; 17552 u8 addr[ETH_ALEN] __aligned(2); 17553 17554 err = pci_enable_device(pdev); 17555 if (err) { 17556 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 17557 return err; 17558 } 17559 17560 err = pci_request_regions(pdev, DRV_MODULE_NAME); 17561 if (err) { 17562 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 17563 goto err_out_disable_pdev; 17564 } 17565 17566 pci_set_master(pdev); 17567 17568 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 17569 if (!dev) { 17570 err = -ENOMEM; 17571 goto err_out_free_res; 17572 } 17573 17574 SET_NETDEV_DEV(dev, &pdev->dev); 17575 17576 tp = netdev_priv(dev); 17577 tp->pdev = pdev; 17578 tp->dev = dev; 17579 tp->rx_mode = TG3_DEF_RX_MODE; 17580 tp->tx_mode = TG3_DEF_TX_MODE; 17581 tp->irq_sync = 1; 17582 tp->pcierr_recovery = false; 17583 17584 if (tg3_debug > 0) 17585 tp->msg_enable = tg3_debug; 17586 else 17587 tp->msg_enable = TG3_DEF_MSG_ENABLE; 17588 17589 if (pdev_is_ssb_gige_core(pdev)) { 17590 tg3_flag_set(tp, IS_SSB_CORE); 17591 if (ssb_gige_must_flush_posted_writes(pdev)) 17592 tg3_flag_set(tp, FLUSH_POSTED_WRITES); 17593 if (ssb_gige_one_dma_at_once(pdev)) 17594 tg3_flag_set(tp, ONE_DMA_AT_ONCE); 17595 if (ssb_gige_have_roboswitch(pdev)) { 17596 tg3_flag_set(tp, USE_PHYLIB); 17597 tg3_flag_set(tp, ROBOSWITCH); 17598 } 17599 if (ssb_gige_is_rgmii(pdev)) 17600 tg3_flag_set(tp, RGMII_MODE); 17601 } 17602 17603 /* The word/byte swap controls here control register access byte 17604 * swapping. DMA data byte swapping is controlled in the GRC_MODE 17605 * setting below. 17606 */ 17607 tp->misc_host_ctrl = 17608 MISC_HOST_CTRL_MASK_PCI_INT | 17609 MISC_HOST_CTRL_WORD_SWAP | 17610 MISC_HOST_CTRL_INDIR_ACCESS | 17611 MISC_HOST_CTRL_PCISTATE_RW; 17612 17613 /* The NONFRM (non-frame) byte/word swap controls take effect 17614 * on descriptor entries, anything which isn't packet data. 17615 * 17616 * The StrongARM chips on the board (one for tx, one for rx) 17617 * are running in big-endian mode. 17618 */ 17619 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 17620 GRC_MODE_WSWAP_NONFRM_DATA); 17621#ifdef __BIG_ENDIAN 17622 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 17623#endif 17624 spin_lock_init(&tp->lock); 17625 spin_lock_init(&tp->indirect_lock); 17626 INIT_WORK(&tp->reset_task, tg3_reset_task); 17627 17628 tp->regs = pci_ioremap_bar(pdev, BAR_0); 17629 if (!tp->regs) { 17630 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 17631 err = -ENOMEM; 17632 goto err_out_free_dev; 17633 } 17634 17635 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 17636 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 17637 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 17638 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 17639 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 17640 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 17641 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 17642 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 17643 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 17644 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 17645 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 17646 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 17647 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 17648 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 17649 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) { 17650 tg3_flag_set(tp, ENABLE_APE); 17651 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 17652 if (!tp->aperegs) { 17653 dev_err(&pdev->dev, 17654 "Cannot map APE registers, aborting\n"); 17655 err = -ENOMEM; 17656 goto err_out_iounmap; 17657 } 17658 } 17659 17660 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 17661 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 17662 17663 dev->ethtool_ops = &tg3_ethtool_ops; 17664 dev->watchdog_timeo = TG3_TX_TIMEOUT; 17665 dev->netdev_ops = &tg3_netdev_ops; 17666 dev->irq = pdev->irq; 17667 17668 err = tg3_get_invariants(tp, ent); 17669 if (err) { 17670 dev_err(&pdev->dev, 17671 "Problem fetching invariants of chip, aborting\n"); 17672 goto err_out_apeunmap; 17673 } 17674 17675 /* The EPB bridge inside 5714, 5715, and 5780 and any 17676 * device behind the EPB cannot support DMA addresses > 40-bit. 17677 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 17678 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 17679 * do DMA address check in tg3_start_xmit(). 17680 */ 17681 if (tg3_flag(tp, IS_5788)) 17682 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 17683 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 17684 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 17685#ifdef CONFIG_HIGHMEM 17686 dma_mask = DMA_BIT_MASK(64); 17687#endif 17688 } else 17689 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 17690 17691 /* Configure DMA attributes. */ 17692 if (dma_mask > DMA_BIT_MASK(32)) { 17693 err = dma_set_mask(&pdev->dev, dma_mask); 17694 if (!err) { 17695 features |= NETIF_F_HIGHDMA; 17696 err = dma_set_coherent_mask(&pdev->dev, 17697 persist_dma_mask); 17698 if (err < 0) { 17699 dev_err(&pdev->dev, "Unable to obtain 64 bit " 17700 "DMA for consistent allocations\n"); 17701 goto err_out_apeunmap; 17702 } 17703 } 17704 } 17705 if (err || dma_mask == DMA_BIT_MASK(32)) { 17706 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); 17707 if (err) { 17708 dev_err(&pdev->dev, 17709 "No usable DMA configuration, aborting\n"); 17710 goto err_out_apeunmap; 17711 } 17712 } 17713 17714 tg3_init_bufmgr_config(tp); 17715 17716 /* 5700 B0 chips do not support checksumming correctly due 17717 * to hardware bugs. 17718 */ 17719 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) { 17720 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 17721 17722 if (tg3_flag(tp, 5755_PLUS)) 17723 features |= NETIF_F_IPV6_CSUM; 17724 } 17725 17726 /* TSO is on by default on chips that support hardware TSO. 17727 * Firmware TSO on older chips gives lower performance, so it 17728 * is off by default, but can be enabled using ethtool. 17729 */ 17730 if ((tg3_flag(tp, HW_TSO_1) || 17731 tg3_flag(tp, HW_TSO_2) || 17732 tg3_flag(tp, HW_TSO_3)) && 17733 (features & NETIF_F_IP_CSUM)) 17734 features |= NETIF_F_TSO; 17735 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 17736 if (features & NETIF_F_IPV6_CSUM) 17737 features |= NETIF_F_TSO6; 17738 if (tg3_flag(tp, HW_TSO_3) || 17739 tg3_asic_rev(tp) == ASIC_REV_5761 || 17740 (tg3_asic_rev(tp) == ASIC_REV_5784 && 17741 tg3_chip_rev(tp) != CHIPREV_5784_AX) || 17742 tg3_asic_rev(tp) == ASIC_REV_5785 || 17743 tg3_asic_rev(tp) == ASIC_REV_57780) 17744 features |= NETIF_F_TSO_ECN; 17745 } 17746 17747 dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX | 17748 NETIF_F_HW_VLAN_CTAG_RX; 17749 dev->vlan_features |= features; 17750 17751 /* 17752 * Add loopback capability only for a subset of devices that support 17753 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 17754 * loopback for the remaining devices. 17755 */ 17756 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 17757 !tg3_flag(tp, CPMU_PRESENT)) 17758 /* Add the loopback capability */ 17759 features |= NETIF_F_LOOPBACK; 17760 17761 dev->hw_features |= features; 17762 dev->priv_flags |= IFF_UNICAST_FLT; 17763 17764 /* MTU range: 60 - 9000 or 1500, depending on hardware */ 17765 dev->min_mtu = TG3_MIN_MTU; 17766 dev->max_mtu = TG3_MAX_MTU(tp); 17767 17768 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 && 17769 !tg3_flag(tp, TSO_CAPABLE) && 17770 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 17771 tg3_flag_set(tp, MAX_RXPEND_64); 17772 tp->rx_pending = 63; 17773 } 17774 17775 err = tg3_get_device_address(tp, addr); 17776 if (err) { 17777 dev_err(&pdev->dev, 17778 "Could not obtain valid ethernet address, aborting\n"); 17779 goto err_out_apeunmap; 17780 } 17781 eth_hw_addr_set(dev, addr); 17782 17783 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 17784 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 17785 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 17786 for (i = 0; i < tp->irq_max; i++) { 17787 struct tg3_napi *tnapi = &tp->napi[i]; 17788 17789 tnapi->tp = tp; 17790 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 17791 17792 tnapi->int_mbox = intmbx; 17793 if (i <= 4) 17794 intmbx += 0x8; 17795 else 17796 intmbx += 0x4; 17797 17798 tnapi->consmbox = rcvmbx; 17799 tnapi->prodmbox = sndmbx; 17800 17801 if (i) 17802 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 17803 else 17804 tnapi->coal_now = HOSTCC_MODE_NOW; 17805 17806 if (!tg3_flag(tp, SUPPORT_MSIX)) 17807 break; 17808 17809 /* 17810 * If we support MSIX, we'll be using RSS. If we're using 17811 * RSS, the first vector only handles link interrupts and the 17812 * remaining vectors handle rx and tx interrupts. Reuse the 17813 * mailbox values for the next iteration. The values we setup 17814 * above are still useful for the single vectored mode. 17815 */ 17816 if (!i) 17817 continue; 17818 17819 rcvmbx += 0x8; 17820 17821 if (sndmbx & 0x4) 17822 sndmbx -= 0x4; 17823 else 17824 sndmbx += 0xc; 17825 } 17826 17827 /* 17828 * Reset chip in case UNDI or EFI driver did not shutdown 17829 * DMA self test will enable WDMAC and we'll see (spurious) 17830 * pending DMA on the PCI bus at that point. 17831 */ 17832 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 17833 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 17834 tg3_full_lock(tp, 0); 17835 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 17836 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 17837 tg3_full_unlock(tp); 17838 } 17839 17840 err = tg3_test_dma(tp); 17841 if (err) { 17842 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 17843 goto err_out_apeunmap; 17844 } 17845 17846 tg3_init_coal(tp); 17847 17848 pci_set_drvdata(pdev, dev); 17849 17850 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 17851 tg3_asic_rev(tp) == ASIC_REV_5720 || 17852 tg3_asic_rev(tp) == ASIC_REV_5762) 17853 tg3_flag_set(tp, PTP_CAPABLE); 17854 17855 tg3_timer_init(tp); 17856 17857 tg3_carrier_off(tp); 17858 17859 err = register_netdev(dev); 17860 if (err) { 17861 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 17862 goto err_out_apeunmap; 17863 } 17864 17865 if (tg3_flag(tp, PTP_CAPABLE)) { 17866 tg3_ptp_init(tp); 17867 tp->ptp_clock = ptp_clock_register(&tp->ptp_info, 17868 &tp->pdev->dev); 17869 if (IS_ERR(tp->ptp_clock)) 17870 tp->ptp_clock = NULL; 17871 } 17872 17873 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 17874 tp->board_part_number, 17875 tg3_chip_rev_id(tp), 17876 tg3_bus_string(tp, str), 17877 dev->dev_addr); 17878 17879 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) { 17880 char *ethtype; 17881 17882 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 17883 ethtype = "10/100Base-TX"; 17884 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 17885 ethtype = "1000Base-SX"; 17886 else 17887 ethtype = "10/100/1000Base-T"; 17888 17889 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 17890 "(WireSpeed[%d], EEE[%d])\n", 17891 tg3_phy_string(tp), ethtype, 17892 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 17893 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 17894 } 17895 17896 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 17897 (dev->features & NETIF_F_RXCSUM) != 0, 17898 tg3_flag(tp, USE_LINKCHG_REG) != 0, 17899 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 17900 tg3_flag(tp, ENABLE_ASF) != 0, 17901 tg3_flag(tp, TSO_CAPABLE) != 0); 17902 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 17903 tp->dma_rwctrl, 17904 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 17905 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 17906 17907 pci_save_state(pdev); 17908 17909 return 0; 17910 17911err_out_apeunmap: 17912 if (tp->aperegs) { 17913 iounmap(tp->aperegs); 17914 tp->aperegs = NULL; 17915 } 17916 17917err_out_iounmap: 17918 if (tp->regs) { 17919 iounmap(tp->regs); 17920 tp->regs = NULL; 17921 } 17922 17923err_out_free_dev: 17924 free_netdev(dev); 17925 17926err_out_free_res: 17927 pci_release_regions(pdev); 17928 17929err_out_disable_pdev: 17930 if (pci_is_enabled(pdev)) 17931 pci_disable_device(pdev); 17932 return err; 17933} 17934 17935static void tg3_remove_one(struct pci_dev *pdev) 17936{ 17937 struct net_device *dev = pci_get_drvdata(pdev); 17938 17939 if (dev) { 17940 struct tg3 *tp = netdev_priv(dev); 17941 17942 tg3_ptp_fini(tp); 17943 17944 release_firmware(tp->fw); 17945 17946 tg3_reset_task_cancel(tp); 17947 17948 if (tg3_flag(tp, USE_PHYLIB)) { 17949 tg3_phy_fini(tp); 17950 tg3_mdio_fini(tp); 17951 } 17952 17953 unregister_netdev(dev); 17954 if (tp->aperegs) { 17955 iounmap(tp->aperegs); 17956 tp->aperegs = NULL; 17957 } 17958 if (tp->regs) { 17959 iounmap(tp->regs); 17960 tp->regs = NULL; 17961 } 17962 free_netdev(dev); 17963 pci_release_regions(pdev); 17964 pci_disable_device(pdev); 17965 } 17966} 17967 17968#ifdef CONFIG_PM_SLEEP 17969static int tg3_suspend(struct device *device) 17970{ 17971 struct net_device *dev = dev_get_drvdata(device); 17972 struct tg3 *tp = netdev_priv(dev); 17973 int err = 0; 17974 17975 rtnl_lock(); 17976 17977 if (!netif_running(dev)) 17978 goto unlock; 17979 17980 tg3_reset_task_cancel(tp); 17981 tg3_phy_stop(tp); 17982 tg3_netif_stop(tp); 17983 17984 tg3_timer_stop(tp); 17985 17986 tg3_full_lock(tp, 1); 17987 tg3_disable_ints(tp); 17988 tg3_full_unlock(tp); 17989 17990 netif_device_detach(dev); 17991 17992 tg3_full_lock(tp, 0); 17993 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 17994 tg3_flag_clear(tp, INIT_COMPLETE); 17995 tg3_full_unlock(tp); 17996 17997 err = tg3_power_down_prepare(tp); 17998 if (err) { 17999 int err2; 18000 18001 tg3_full_lock(tp, 0); 18002 18003 tg3_flag_set(tp, INIT_COMPLETE); 18004 err2 = tg3_restart_hw(tp, true); 18005 if (err2) 18006 goto out; 18007 18008 tg3_timer_start(tp); 18009 18010 netif_device_attach(dev); 18011 tg3_netif_start(tp); 18012 18013out: 18014 tg3_full_unlock(tp); 18015 18016 if (!err2) 18017 tg3_phy_start(tp); 18018 } 18019 18020unlock: 18021 rtnl_unlock(); 18022 return err; 18023} 18024 18025static int tg3_resume(struct device *device) 18026{ 18027 struct net_device *dev = dev_get_drvdata(device); 18028 struct tg3 *tp = netdev_priv(dev); 18029 int err = 0; 18030 18031 rtnl_lock(); 18032 18033 if (!netif_running(dev)) 18034 goto unlock; 18035 18036 netif_device_attach(dev); 18037 18038 tg3_full_lock(tp, 0); 18039 18040 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18041 18042 tg3_flag_set(tp, INIT_COMPLETE); 18043 err = tg3_restart_hw(tp, 18044 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)); 18045 if (err) 18046 goto out; 18047 18048 tg3_timer_start(tp); 18049 18050 tg3_netif_start(tp); 18051 18052out: 18053 tg3_full_unlock(tp); 18054 18055 if (!err) 18056 tg3_phy_start(tp); 18057 18058unlock: 18059 rtnl_unlock(); 18060 return err; 18061} 18062#endif /* CONFIG_PM_SLEEP */ 18063 18064static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 18065 18066static void tg3_shutdown(struct pci_dev *pdev) 18067{ 18068 struct net_device *dev = pci_get_drvdata(pdev); 18069 struct tg3 *tp = netdev_priv(dev); 18070 18071 tg3_reset_task_cancel(tp); 18072 18073 rtnl_lock(); 18074 18075 netif_device_detach(dev); 18076 18077 if (netif_running(dev)) 18078 dev_close(dev); 18079 18080 tg3_power_down(tp); 18081 18082 rtnl_unlock(); 18083 18084 pci_disable_device(pdev); 18085} 18086 18087/** 18088 * tg3_io_error_detected - called when PCI error is detected 18089 * @pdev: Pointer to PCI device 18090 * @state: The current pci connection state 18091 * 18092 * This function is called after a PCI bus error affecting 18093 * this device has been detected. 18094 */ 18095static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 18096 pci_channel_state_t state) 18097{ 18098 struct net_device *netdev = pci_get_drvdata(pdev); 18099 struct tg3 *tp = netdev_priv(netdev); 18100 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 18101 18102 netdev_info(netdev, "PCI I/O error detected\n"); 18103 18104 /* Want to make sure that the reset task doesn't run */ 18105 tg3_reset_task_cancel(tp); 18106 18107 rtnl_lock(); 18108 18109 /* Could be second call or maybe we don't have netdev yet */ 18110 if (!netdev || tp->pcierr_recovery || !netif_running(netdev)) 18111 goto done; 18112 18113 /* We needn't recover from permanent error */ 18114 if (state == pci_channel_io_frozen) 18115 tp->pcierr_recovery = true; 18116 18117 tg3_phy_stop(tp); 18118 18119 tg3_netif_stop(tp); 18120 18121 tg3_timer_stop(tp); 18122 18123 netif_device_detach(netdev); 18124 18125 /* Clean up software state, even if MMIO is blocked */ 18126 tg3_full_lock(tp, 0); 18127 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 18128 tg3_full_unlock(tp); 18129 18130done: 18131 if (state == pci_channel_io_perm_failure) { 18132 if (netdev) { 18133 tg3_napi_enable(tp); 18134 dev_close(netdev); 18135 } 18136 err = PCI_ERS_RESULT_DISCONNECT; 18137 } else { 18138 pci_disable_device(pdev); 18139 } 18140 18141 rtnl_unlock(); 18142 18143 return err; 18144} 18145 18146/** 18147 * tg3_io_slot_reset - called after the pci bus has been reset. 18148 * @pdev: Pointer to PCI device 18149 * 18150 * Restart the card from scratch, as if from a cold-boot. 18151 * At this point, the card has exprienced a hard reset, 18152 * followed by fixups by BIOS, and has its config space 18153 * set up identically to what it was at cold boot. 18154 */ 18155static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 18156{ 18157 struct net_device *netdev = pci_get_drvdata(pdev); 18158 struct tg3 *tp = netdev_priv(netdev); 18159 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 18160 int err; 18161 18162 rtnl_lock(); 18163 18164 if (pci_enable_device(pdev)) { 18165 dev_err(&pdev->dev, 18166 "Cannot re-enable PCI device after reset.\n"); 18167 goto done; 18168 } 18169 18170 pci_set_master(pdev); 18171 pci_restore_state(pdev); 18172 pci_save_state(pdev); 18173 18174 if (!netdev || !netif_running(netdev)) { 18175 rc = PCI_ERS_RESULT_RECOVERED; 18176 goto done; 18177 } 18178 18179 err = tg3_power_up(tp); 18180 if (err) 18181 goto done; 18182 18183 rc = PCI_ERS_RESULT_RECOVERED; 18184 18185done: 18186 if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) { 18187 tg3_napi_enable(tp); 18188 dev_close(netdev); 18189 } 18190 rtnl_unlock(); 18191 18192 return rc; 18193} 18194 18195/** 18196 * tg3_io_resume - called when traffic can start flowing again. 18197 * @pdev: Pointer to PCI device 18198 * 18199 * This callback is called when the error recovery driver tells 18200 * us that its OK to resume normal operation. 18201 */ 18202static void tg3_io_resume(struct pci_dev *pdev) 18203{ 18204 struct net_device *netdev = pci_get_drvdata(pdev); 18205 struct tg3 *tp = netdev_priv(netdev); 18206 int err; 18207 18208 rtnl_lock(); 18209 18210 if (!netdev || !netif_running(netdev)) 18211 goto done; 18212 18213 tg3_full_lock(tp, 0); 18214 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18215 tg3_flag_set(tp, INIT_COMPLETE); 18216 err = tg3_restart_hw(tp, true); 18217 if (err) { 18218 tg3_full_unlock(tp); 18219 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 18220 goto done; 18221 } 18222 18223 netif_device_attach(netdev); 18224 18225 tg3_timer_start(tp); 18226 18227 tg3_netif_start(tp); 18228 18229 tg3_full_unlock(tp); 18230 18231 tg3_phy_start(tp); 18232 18233done: 18234 tp->pcierr_recovery = false; 18235 rtnl_unlock(); 18236} 18237 18238static const struct pci_error_handlers tg3_err_handler = { 18239 .error_detected = tg3_io_error_detected, 18240 .slot_reset = tg3_io_slot_reset, 18241 .resume = tg3_io_resume 18242}; 18243 18244static struct pci_driver tg3_driver = { 18245 .name = DRV_MODULE_NAME, 18246 .id_table = tg3_pci_tbl, 18247 .probe = tg3_init_one, 18248 .remove = tg3_remove_one, 18249 .err_handler = &tg3_err_handler, 18250 .driver.pm = &tg3_pm_ops, 18251 .shutdown = tg3_shutdown, 18252}; 18253 18254module_pci_driver(tg3_driver);