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 58 #include <net/checksum.h> 59 #include <net/ip.h> 60 61 #include <linux/io.h> 62 #include <asm/byteorder.h> 63 #include <linux/uaccess.h> 64 65 #include <uapi/linux/net_tstamp.h> 66 #include <linux/ptp_clock_kernel.h> 67 68 #ifdef CONFIG_SPARC 69 #include <asm/idprom.h> 70 #include <asm/prom.h> 71 #endif 72 73 #define BAR_0 0 74 #define BAR_2 2 75 76 #include "tg3.h" 77 78 /* Functions & macros to verify TG3_FLAGS types */ 79 80 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 81 { 82 return test_bit(flag, bits); 83 } 84 85 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 86 { 87 set_bit(flag, bits); 88 } 89 90 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 91 { 92 clear_bit(flag, bits); 93 } 94 95 #define tg3_flag(tp, flag) \ 96 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 97 #define tg3_flag_set(tp, flag) \ 98 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 99 #define tg3_flag_clear(tp, flag) \ 100 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 101 102 #define DRV_MODULE_NAME "tg3" 103 #define TG3_MAJ_NUM 3 104 #define TG3_MIN_NUM 137 105 #define DRV_MODULE_VERSION \ 106 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) 107 #define DRV_MODULE_RELDATE "May 11, 2014" 108 109 #define RESET_KIND_SHUTDOWN 0 110 #define RESET_KIND_INIT 1 111 #define RESET_KIND_SUSPEND 2 112 113 #define TG3_DEF_RX_MODE 0 114 #define TG3_DEF_TX_MODE 0 115 #define TG3_DEF_MSG_ENABLE \ 116 (NETIF_MSG_DRV | \ 117 NETIF_MSG_PROBE | \ 118 NETIF_MSG_LINK | \ 119 NETIF_MSG_TIMER | \ 120 NETIF_MSG_IFDOWN | \ 121 NETIF_MSG_IFUP | \ 122 NETIF_MSG_RX_ERR | \ 123 NETIF_MSG_TX_ERR) 124 125 #define TG3_GRC_LCLCTL_PWRSW_DELAY 100 126 127 /* length of time before we decide the hardware is borked, 128 * and dev->tx_timeout() should be called to fix the problem 129 */ 130 131 #define TG3_TX_TIMEOUT (5 * HZ) 132 133 /* hardware minimum and maximum for a single frame's data payload */ 134 #define TG3_MIN_MTU ETH_ZLEN 135 #define TG3_MAX_MTU(tp) \ 136 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 137 138 /* These numbers seem to be hard coded in the NIC firmware somehow. 139 * You can't change the ring sizes, but you can change where you place 140 * them in the NIC onboard memory. 141 */ 142 #define TG3_RX_STD_RING_SIZE(tp) \ 143 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 144 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 145 #define TG3_DEF_RX_RING_PENDING 200 146 #define TG3_RX_JMB_RING_SIZE(tp) \ 147 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 148 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 149 #define TG3_DEF_RX_JUMBO_RING_PENDING 100 150 151 /* Do not place this n-ring entries value into the tp struct itself, 152 * we really want to expose these constants to GCC so that modulo et 153 * al. operations are done with shifts and masks instead of with 154 * hw multiply/modulo instructions. Another solution would be to 155 * replace things like '% foo' with '& (foo - 1)'. 156 */ 157 158 #define TG3_TX_RING_SIZE 512 159 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 160 161 #define TG3_RX_STD_RING_BYTES(tp) \ 162 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 163 #define TG3_RX_JMB_RING_BYTES(tp) \ 164 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 165 #define TG3_RX_RCB_RING_BYTES(tp) \ 166 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 167 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 168 TG3_TX_RING_SIZE) 169 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 170 171 #define TG3_DMA_BYTE_ENAB 64 172 173 #define TG3_RX_STD_DMA_SZ 1536 174 #define TG3_RX_JMB_DMA_SZ 9046 175 176 #define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 177 178 #define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 179 #define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 180 181 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 182 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 183 184 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 185 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 186 187 /* Due to a hardware bug, the 5701 can only DMA to memory addresses 188 * that are at least dword aligned when used in PCIX mode. The driver 189 * works around this bug by double copying the packet. This workaround 190 * is built into the normal double copy length check for efficiency. 191 * 192 * However, the double copy is only necessary on those architectures 193 * where unaligned memory accesses are inefficient. For those architectures 194 * where unaligned memory accesses incur little penalty, we can reintegrate 195 * the 5701 in the normal rx path. Doing so saves a device structure 196 * dereference by hardcoding the double copy threshold in place. 197 */ 198 #define TG3_RX_COPY_THRESHOLD 256 199 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 200 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 201 #else 202 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 203 #endif 204 205 #if (NET_IP_ALIGN != 0) 206 #define TG3_RX_OFFSET(tp) ((tp)->rx_offset) 207 #else 208 #define TG3_RX_OFFSET(tp) (NET_SKB_PAD) 209 #endif 210 211 /* minimum number of free TX descriptors required to wake up TX process */ 212 #define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 213 #define TG3_TX_BD_DMA_MAX_2K 2048 214 #define TG3_TX_BD_DMA_MAX_4K 4096 215 216 #define TG3_RAW_IP_ALIGN 2 217 218 #define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3) 219 #define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1) 220 221 #define TG3_FW_UPDATE_TIMEOUT_SEC 5 222 #define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2) 223 224 #define FIRMWARE_TG3 "tigon/tg3.bin" 225 #define FIRMWARE_TG357766 "tigon/tg357766.bin" 226 #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 227 #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 228 229 static char version[] = 230 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; 231 232 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 233 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 234 MODULE_LICENSE("GPL"); 235 MODULE_VERSION(DRV_MODULE_VERSION); 236 MODULE_FIRMWARE(FIRMWARE_TG3); 237 MODULE_FIRMWARE(FIRMWARE_TG3TSO); 238 MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 239 240 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 241 module_param(tg3_debug, int, 0); 242 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 243 244 #define TG3_DRV_DATA_FLAG_10_100_ONLY 0x0001 245 #define TG3_DRV_DATA_FLAG_5705_10_100 0x0002 246 247 static const struct pci_device_id tg3_pci_tbl[] = { 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 258 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 259 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 262 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901), 267 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 268 TG3_DRV_DATA_FLAG_5705_10_100}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2), 270 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 271 TG3_DRV_DATA_FLAG_5705_10_100}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F), 274 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 275 TG3_DRV_DATA_FLAG_5705_10_100}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F), 282 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F), 288 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 289 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 292 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 293 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 294 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 296 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M, 297 PCI_VENDOR_ID_LENOVO, 298 TG3PCI_SUBDEVICE_ID_LENOVO_5787M), 299 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F), 302 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 303 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 308 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 309 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 310 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 311 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 312 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 313 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 314 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 315 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 316 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 317 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 318 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 319 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 320 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 321 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 322 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A), 323 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 324 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 325 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B), 326 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 327 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 328 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 329 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790), 330 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 331 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 332 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 333 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)}, 334 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 335 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 336 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 337 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 338 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 339 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791), 340 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 341 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795), 342 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 343 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 344 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 345 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 346 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)}, 347 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)}, 348 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)}, 349 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)}, 350 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)}, 351 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)}, 352 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)}, 353 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)}, 354 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)}, 355 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 356 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 357 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 358 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 359 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 360 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 361 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 362 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 363 {} 364 }; 365 366 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 367 368 static const struct { 369 const char string[ETH_GSTRING_LEN]; 370 } ethtool_stats_keys[] = { 371 { "rx_octets" }, 372 { "rx_fragments" }, 373 { "rx_ucast_packets" }, 374 { "rx_mcast_packets" }, 375 { "rx_bcast_packets" }, 376 { "rx_fcs_errors" }, 377 { "rx_align_errors" }, 378 { "rx_xon_pause_rcvd" }, 379 { "rx_xoff_pause_rcvd" }, 380 { "rx_mac_ctrl_rcvd" }, 381 { "rx_xoff_entered" }, 382 { "rx_frame_too_long_errors" }, 383 { "rx_jabbers" }, 384 { "rx_undersize_packets" }, 385 { "rx_in_length_errors" }, 386 { "rx_out_length_errors" }, 387 { "rx_64_or_less_octet_packets" }, 388 { "rx_65_to_127_octet_packets" }, 389 { "rx_128_to_255_octet_packets" }, 390 { "rx_256_to_511_octet_packets" }, 391 { "rx_512_to_1023_octet_packets" }, 392 { "rx_1024_to_1522_octet_packets" }, 393 { "rx_1523_to_2047_octet_packets" }, 394 { "rx_2048_to_4095_octet_packets" }, 395 { "rx_4096_to_8191_octet_packets" }, 396 { "rx_8192_to_9022_octet_packets" }, 397 398 { "tx_octets" }, 399 { "tx_collisions" }, 400 401 { "tx_xon_sent" }, 402 { "tx_xoff_sent" }, 403 { "tx_flow_control" }, 404 { "tx_mac_errors" }, 405 { "tx_single_collisions" }, 406 { "tx_mult_collisions" }, 407 { "tx_deferred" }, 408 { "tx_excessive_collisions" }, 409 { "tx_late_collisions" }, 410 { "tx_collide_2times" }, 411 { "tx_collide_3times" }, 412 { "tx_collide_4times" }, 413 { "tx_collide_5times" }, 414 { "tx_collide_6times" }, 415 { "tx_collide_7times" }, 416 { "tx_collide_8times" }, 417 { "tx_collide_9times" }, 418 { "tx_collide_10times" }, 419 { "tx_collide_11times" }, 420 { "tx_collide_12times" }, 421 { "tx_collide_13times" }, 422 { "tx_collide_14times" }, 423 { "tx_collide_15times" }, 424 { "tx_ucast_packets" }, 425 { "tx_mcast_packets" }, 426 { "tx_bcast_packets" }, 427 { "tx_carrier_sense_errors" }, 428 { "tx_discards" }, 429 { "tx_errors" }, 430 431 { "dma_writeq_full" }, 432 { "dma_write_prioq_full" }, 433 { "rxbds_empty" }, 434 { "rx_discards" }, 435 { "rx_errors" }, 436 { "rx_threshold_hit" }, 437 438 { "dma_readq_full" }, 439 { "dma_read_prioq_full" }, 440 { "tx_comp_queue_full" }, 441 442 { "ring_set_send_prod_index" }, 443 { "ring_status_update" }, 444 { "nic_irqs" }, 445 { "nic_avoided_irqs" }, 446 { "nic_tx_threshold_hit" }, 447 448 { "mbuf_lwm_thresh_hit" }, 449 }; 450 451 #define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 452 #define TG3_NVRAM_TEST 0 453 #define TG3_LINK_TEST 1 454 #define TG3_REGISTER_TEST 2 455 #define TG3_MEMORY_TEST 3 456 #define TG3_MAC_LOOPB_TEST 4 457 #define TG3_PHY_LOOPB_TEST 5 458 #define TG3_EXT_LOOPB_TEST 6 459 #define TG3_INTERRUPT_TEST 7 460 461 462 static const struct { 463 const char string[ETH_GSTRING_LEN]; 464 } ethtool_test_keys[] = { 465 [TG3_NVRAM_TEST] = { "nvram test (online) " }, 466 [TG3_LINK_TEST] = { "link test (online) " }, 467 [TG3_REGISTER_TEST] = { "register test (offline)" }, 468 [TG3_MEMORY_TEST] = { "memory test (offline)" }, 469 [TG3_MAC_LOOPB_TEST] = { "mac loopback test (offline)" }, 470 [TG3_PHY_LOOPB_TEST] = { "phy loopback test (offline)" }, 471 [TG3_EXT_LOOPB_TEST] = { "ext loopback test (offline)" }, 472 [TG3_INTERRUPT_TEST] = { "interrupt test (offline)" }, 473 }; 474 475 #define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 476 477 478 static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 479 { 480 writel(val, tp->regs + off); 481 } 482 483 static u32 tg3_read32(struct tg3 *tp, u32 off) 484 { 485 return readl(tp->regs + off); 486 } 487 488 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 489 { 490 writel(val, tp->aperegs + off); 491 } 492 493 static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 494 { 495 return readl(tp->aperegs + off); 496 } 497 498 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 499 { 500 unsigned long flags; 501 502 spin_lock_irqsave(&tp->indirect_lock, flags); 503 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 504 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 505 spin_unlock_irqrestore(&tp->indirect_lock, flags); 506 } 507 508 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 509 { 510 writel(val, tp->regs + off); 511 readl(tp->regs + off); 512 } 513 514 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 515 { 516 unsigned long flags; 517 u32 val; 518 519 spin_lock_irqsave(&tp->indirect_lock, flags); 520 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 521 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 522 spin_unlock_irqrestore(&tp->indirect_lock, flags); 523 return val; 524 } 525 526 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 527 { 528 unsigned long flags; 529 530 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 531 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 532 TG3_64BIT_REG_LOW, val); 533 return; 534 } 535 if (off == TG3_RX_STD_PROD_IDX_REG) { 536 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 537 TG3_64BIT_REG_LOW, val); 538 return; 539 } 540 541 spin_lock_irqsave(&tp->indirect_lock, flags); 542 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 543 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 544 spin_unlock_irqrestore(&tp->indirect_lock, flags); 545 546 /* In indirect mode when disabling interrupts, we also need 547 * to clear the interrupt bit in the GRC local ctrl register. 548 */ 549 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 550 (val == 0x1)) { 551 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 552 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 553 } 554 } 555 556 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 557 { 558 unsigned long flags; 559 u32 val; 560 561 spin_lock_irqsave(&tp->indirect_lock, flags); 562 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 563 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 564 spin_unlock_irqrestore(&tp->indirect_lock, flags); 565 return val; 566 } 567 568 /* usec_wait specifies the wait time in usec when writing to certain registers 569 * where it is unsafe to read back the register without some delay. 570 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 571 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 572 */ 573 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 574 { 575 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 576 /* Non-posted methods */ 577 tp->write32(tp, off, val); 578 else { 579 /* Posted method */ 580 tg3_write32(tp, off, val); 581 if (usec_wait) 582 udelay(usec_wait); 583 tp->read32(tp, off); 584 } 585 /* Wait again after the read for the posted method to guarantee that 586 * the wait time is met. 587 */ 588 if (usec_wait) 589 udelay(usec_wait); 590 } 591 592 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 593 { 594 tp->write32_mbox(tp, off, val); 595 if (tg3_flag(tp, FLUSH_POSTED_WRITES) || 596 (!tg3_flag(tp, MBOX_WRITE_REORDER) && 597 !tg3_flag(tp, ICH_WORKAROUND))) 598 tp->read32_mbox(tp, off); 599 } 600 601 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 602 { 603 void __iomem *mbox = tp->regs + off; 604 writel(val, mbox); 605 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 606 writel(val, mbox); 607 if (tg3_flag(tp, MBOX_WRITE_REORDER) || 608 tg3_flag(tp, FLUSH_POSTED_WRITES)) 609 readl(mbox); 610 } 611 612 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 613 { 614 return readl(tp->regs + off + GRCMBOX_BASE); 615 } 616 617 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 618 { 619 writel(val, tp->regs + off + GRCMBOX_BASE); 620 } 621 622 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 623 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 624 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 625 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 626 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 627 628 #define tw32(reg, val) tp->write32(tp, reg, val) 629 #define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 630 #define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 631 #define tr32(reg) tp->read32(tp, reg) 632 633 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 634 { 635 unsigned long flags; 636 637 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 638 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 639 return; 640 641 spin_lock_irqsave(&tp->indirect_lock, flags); 642 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 643 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 644 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 645 646 /* Always leave this as zero. */ 647 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 648 } else { 649 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 650 tw32_f(TG3PCI_MEM_WIN_DATA, val); 651 652 /* Always leave this as zero. */ 653 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 654 } 655 spin_unlock_irqrestore(&tp->indirect_lock, flags); 656 } 657 658 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 659 { 660 unsigned long flags; 661 662 if (tg3_asic_rev(tp) == ASIC_REV_5906 && 663 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 664 *val = 0; 665 return; 666 } 667 668 spin_lock_irqsave(&tp->indirect_lock, flags); 669 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 670 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 671 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 672 673 /* Always leave this as zero. */ 674 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 675 } else { 676 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 677 *val = tr32(TG3PCI_MEM_WIN_DATA); 678 679 /* Always leave this as zero. */ 680 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 681 } 682 spin_unlock_irqrestore(&tp->indirect_lock, flags); 683 } 684 685 static void tg3_ape_lock_init(struct tg3 *tp) 686 { 687 int i; 688 u32 regbase, bit; 689 690 if (tg3_asic_rev(tp) == ASIC_REV_5761) 691 regbase = TG3_APE_LOCK_GRANT; 692 else 693 regbase = TG3_APE_PER_LOCK_GRANT; 694 695 /* Make sure the driver hasn't any stale locks. */ 696 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 697 switch (i) { 698 case TG3_APE_LOCK_PHY0: 699 case TG3_APE_LOCK_PHY1: 700 case TG3_APE_LOCK_PHY2: 701 case TG3_APE_LOCK_PHY3: 702 bit = APE_LOCK_GRANT_DRIVER; 703 break; 704 default: 705 if (!tp->pci_fn) 706 bit = APE_LOCK_GRANT_DRIVER; 707 else 708 bit = 1 << tp->pci_fn; 709 } 710 tg3_ape_write32(tp, regbase + 4 * i, bit); 711 } 712 713 } 714 715 static int tg3_ape_lock(struct tg3 *tp, int locknum) 716 { 717 int i, off; 718 int ret = 0; 719 u32 status, req, gnt, bit; 720 721 if (!tg3_flag(tp, ENABLE_APE)) 722 return 0; 723 724 switch (locknum) { 725 case TG3_APE_LOCK_GPIO: 726 if (tg3_asic_rev(tp) == ASIC_REV_5761) 727 return 0; 728 case TG3_APE_LOCK_GRC: 729 case TG3_APE_LOCK_MEM: 730 if (!tp->pci_fn) 731 bit = APE_LOCK_REQ_DRIVER; 732 else 733 bit = 1 << tp->pci_fn; 734 break; 735 case TG3_APE_LOCK_PHY0: 736 case TG3_APE_LOCK_PHY1: 737 case TG3_APE_LOCK_PHY2: 738 case TG3_APE_LOCK_PHY3: 739 bit = APE_LOCK_REQ_DRIVER; 740 break; 741 default: 742 return -EINVAL; 743 } 744 745 if (tg3_asic_rev(tp) == ASIC_REV_5761) { 746 req = TG3_APE_LOCK_REQ; 747 gnt = TG3_APE_LOCK_GRANT; 748 } else { 749 req = TG3_APE_PER_LOCK_REQ; 750 gnt = TG3_APE_PER_LOCK_GRANT; 751 } 752 753 off = 4 * locknum; 754 755 tg3_ape_write32(tp, req + off, bit); 756 757 /* Wait for up to 1 millisecond to acquire lock. */ 758 for (i = 0; i < 100; i++) { 759 status = tg3_ape_read32(tp, gnt + off); 760 if (status == bit) 761 break; 762 if (pci_channel_offline(tp->pdev)) 763 break; 764 765 udelay(10); 766 } 767 768 if (status != bit) { 769 /* Revoke the lock request. */ 770 tg3_ape_write32(tp, gnt + off, bit); 771 ret = -EBUSY; 772 } 773 774 return ret; 775 } 776 777 static void tg3_ape_unlock(struct tg3 *tp, int locknum) 778 { 779 u32 gnt, bit; 780 781 if (!tg3_flag(tp, ENABLE_APE)) 782 return; 783 784 switch (locknum) { 785 case TG3_APE_LOCK_GPIO: 786 if (tg3_asic_rev(tp) == ASIC_REV_5761) 787 return; 788 case TG3_APE_LOCK_GRC: 789 case TG3_APE_LOCK_MEM: 790 if (!tp->pci_fn) 791 bit = APE_LOCK_GRANT_DRIVER; 792 else 793 bit = 1 << tp->pci_fn; 794 break; 795 case TG3_APE_LOCK_PHY0: 796 case TG3_APE_LOCK_PHY1: 797 case TG3_APE_LOCK_PHY2: 798 case TG3_APE_LOCK_PHY3: 799 bit = APE_LOCK_GRANT_DRIVER; 800 break; 801 default: 802 return; 803 } 804 805 if (tg3_asic_rev(tp) == ASIC_REV_5761) 806 gnt = TG3_APE_LOCK_GRANT; 807 else 808 gnt = TG3_APE_PER_LOCK_GRANT; 809 810 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 811 } 812 813 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us) 814 { 815 u32 apedata; 816 817 while (timeout_us) { 818 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 819 return -EBUSY; 820 821 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 822 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 823 break; 824 825 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 826 827 udelay(10); 828 timeout_us -= (timeout_us > 10) ? 10 : timeout_us; 829 } 830 831 return timeout_us ? 0 : -EBUSY; 832 } 833 834 #ifdef CONFIG_TIGON3_HWMON 835 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us) 836 { 837 u32 i, apedata; 838 839 for (i = 0; i < timeout_us / 10; i++) { 840 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 841 842 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 843 break; 844 845 udelay(10); 846 } 847 848 return i == timeout_us / 10; 849 } 850 851 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, 852 u32 len) 853 { 854 int err; 855 u32 i, bufoff, msgoff, maxlen, apedata; 856 857 if (!tg3_flag(tp, APE_HAS_NCSI)) 858 return 0; 859 860 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 861 if (apedata != APE_SEG_SIG_MAGIC) 862 return -ENODEV; 863 864 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 865 if (!(apedata & APE_FW_STATUS_READY)) 866 return -EAGAIN; 867 868 bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) + 869 TG3_APE_SHMEM_BASE; 870 msgoff = bufoff + 2 * sizeof(u32); 871 maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN); 872 873 while (len) { 874 u32 length; 875 876 /* Cap xfer sizes to scratchpad limits. */ 877 length = (len > maxlen) ? maxlen : len; 878 len -= length; 879 880 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 881 if (!(apedata & APE_FW_STATUS_READY)) 882 return -EAGAIN; 883 884 /* Wait for up to 1 msec for APE to service previous event. */ 885 err = tg3_ape_event_lock(tp, 1000); 886 if (err) 887 return err; 888 889 apedata = APE_EVENT_STATUS_DRIVER_EVNT | 890 APE_EVENT_STATUS_SCRTCHPD_READ | 891 APE_EVENT_STATUS_EVENT_PENDING; 892 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata); 893 894 tg3_ape_write32(tp, bufoff, base_off); 895 tg3_ape_write32(tp, bufoff + sizeof(u32), length); 896 897 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 898 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 899 900 base_off += length; 901 902 if (tg3_ape_wait_for_event(tp, 30000)) 903 return -EAGAIN; 904 905 for (i = 0; length; i += 4, length -= 4) { 906 u32 val = tg3_ape_read32(tp, msgoff + i); 907 memcpy(data, &val, sizeof(u32)); 908 data++; 909 } 910 } 911 912 return 0; 913 } 914 #endif 915 916 static int tg3_ape_send_event(struct tg3 *tp, u32 event) 917 { 918 int err; 919 u32 apedata; 920 921 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 922 if (apedata != APE_SEG_SIG_MAGIC) 923 return -EAGAIN; 924 925 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 926 if (!(apedata & APE_FW_STATUS_READY)) 927 return -EAGAIN; 928 929 /* Wait for up to 20 millisecond for APE to service previous event. */ 930 err = tg3_ape_event_lock(tp, 20000); 931 if (err) 932 return err; 933 934 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 935 event | APE_EVENT_STATUS_EVENT_PENDING); 936 937 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 938 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 939 940 return 0; 941 } 942 943 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 944 { 945 u32 event; 946 u32 apedata; 947 948 if (!tg3_flag(tp, ENABLE_APE)) 949 return; 950 951 switch (kind) { 952 case RESET_KIND_INIT: 953 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 954 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 955 APE_HOST_SEG_SIG_MAGIC); 956 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 957 APE_HOST_SEG_LEN_MAGIC); 958 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 959 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 960 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 961 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 962 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 963 APE_HOST_BEHAV_NO_PHYLOCK); 964 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 965 TG3_APE_HOST_DRVR_STATE_START); 966 967 event = APE_EVENT_STATUS_STATE_START; 968 break; 969 case RESET_KIND_SHUTDOWN: 970 if (device_may_wakeup(&tp->pdev->dev) && 971 tg3_flag(tp, WOL_ENABLE)) { 972 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 973 TG3_APE_HOST_WOL_SPEED_AUTO); 974 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 975 } else 976 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 977 978 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 979 980 event = APE_EVENT_STATUS_STATE_UNLOAD; 981 break; 982 default: 983 return; 984 } 985 986 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 987 988 tg3_ape_send_event(tp, event); 989 } 990 991 static void tg3_send_ape_heartbeat(struct tg3 *tp, 992 unsigned long interval) 993 { 994 /* Check if hb interval has exceeded */ 995 if (!tg3_flag(tp, ENABLE_APE) || 996 time_before(jiffies, tp->ape_hb_jiffies + interval)) 997 return; 998 999 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++); 1000 tp->ape_hb_jiffies = jiffies; 1001 } 1002 1003 static void tg3_disable_ints(struct tg3 *tp) 1004 { 1005 int i; 1006 1007 tw32(TG3PCI_MISC_HOST_CTRL, 1008 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 1009 for (i = 0; i < tp->irq_max; i++) 1010 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 1011 } 1012 1013 static void tg3_enable_ints(struct tg3 *tp) 1014 { 1015 int i; 1016 1017 tp->irq_sync = 0; 1018 wmb(); 1019 1020 tw32(TG3PCI_MISC_HOST_CTRL, 1021 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 1022 1023 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 1024 for (i = 0; i < tp->irq_cnt; i++) { 1025 struct tg3_napi *tnapi = &tp->napi[i]; 1026 1027 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1028 if (tg3_flag(tp, 1SHOT_MSI)) 1029 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 1030 1031 tp->coal_now |= tnapi->coal_now; 1032 } 1033 1034 /* Force an initial interrupt */ 1035 if (!tg3_flag(tp, TAGGED_STATUS) && 1036 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 1037 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 1038 else 1039 tw32(HOSTCC_MODE, tp->coal_now); 1040 1041 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 1042 } 1043 1044 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 1045 { 1046 struct tg3 *tp = tnapi->tp; 1047 struct tg3_hw_status *sblk = tnapi->hw_status; 1048 unsigned int work_exists = 0; 1049 1050 /* check for phy events */ 1051 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 1052 if (sblk->status & SD_STATUS_LINK_CHG) 1053 work_exists = 1; 1054 } 1055 1056 /* check for TX work to do */ 1057 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 1058 work_exists = 1; 1059 1060 /* check for RX work to do */ 1061 if (tnapi->rx_rcb_prod_idx && 1062 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 1063 work_exists = 1; 1064 1065 return work_exists; 1066 } 1067 1068 /* tg3_int_reenable 1069 * similar to tg3_enable_ints, but it accurately determines whether there 1070 * is new work pending and can return without flushing the PIO write 1071 * which reenables interrupts 1072 */ 1073 static void tg3_int_reenable(struct tg3_napi *tnapi) 1074 { 1075 struct tg3 *tp = tnapi->tp; 1076 1077 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 1078 mmiowb(); 1079 1080 /* When doing tagged status, this work check is unnecessary. 1081 * The last_tag we write above tells the chip which piece of 1082 * work we've completed. 1083 */ 1084 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 1085 tw32(HOSTCC_MODE, tp->coalesce_mode | 1086 HOSTCC_MODE_ENABLE | tnapi->coal_now); 1087 } 1088 1089 static void tg3_switch_clocks(struct tg3 *tp) 1090 { 1091 u32 clock_ctrl; 1092 u32 orig_clock_ctrl; 1093 1094 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 1095 return; 1096 1097 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 1098 1099 orig_clock_ctrl = clock_ctrl; 1100 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 1101 CLOCK_CTRL_CLKRUN_OENABLE | 1102 0x1f); 1103 tp->pci_clock_ctrl = clock_ctrl; 1104 1105 if (tg3_flag(tp, 5705_PLUS)) { 1106 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 1107 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1108 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 1109 } 1110 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 1111 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1112 clock_ctrl | 1113 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 1114 40); 1115 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1116 clock_ctrl | (CLOCK_CTRL_ALTCLK), 1117 40); 1118 } 1119 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 1120 } 1121 1122 #define PHY_BUSY_LOOPS 5000 1123 1124 static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg, 1125 u32 *val) 1126 { 1127 u32 frame_val; 1128 unsigned int loops; 1129 int ret; 1130 1131 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1132 tw32_f(MAC_MI_MODE, 1133 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1134 udelay(80); 1135 } 1136 1137 tg3_ape_lock(tp, tp->phy_ape_lock); 1138 1139 *val = 0x0; 1140 1141 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1142 MI_COM_PHY_ADDR_MASK); 1143 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1144 MI_COM_REG_ADDR_MASK); 1145 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 1146 1147 tw32_f(MAC_MI_COM, frame_val); 1148 1149 loops = PHY_BUSY_LOOPS; 1150 while (loops != 0) { 1151 udelay(10); 1152 frame_val = tr32(MAC_MI_COM); 1153 1154 if ((frame_val & MI_COM_BUSY) == 0) { 1155 udelay(5); 1156 frame_val = tr32(MAC_MI_COM); 1157 break; 1158 } 1159 loops -= 1; 1160 } 1161 1162 ret = -EBUSY; 1163 if (loops != 0) { 1164 *val = frame_val & MI_COM_DATA_MASK; 1165 ret = 0; 1166 } 1167 1168 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1169 tw32_f(MAC_MI_MODE, tp->mi_mode); 1170 udelay(80); 1171 } 1172 1173 tg3_ape_unlock(tp, tp->phy_ape_lock); 1174 1175 return ret; 1176 } 1177 1178 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 1179 { 1180 return __tg3_readphy(tp, tp->phy_addr, reg, val); 1181 } 1182 1183 static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg, 1184 u32 val) 1185 { 1186 u32 frame_val; 1187 unsigned int loops; 1188 int ret; 1189 1190 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1191 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1192 return 0; 1193 1194 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1195 tw32_f(MAC_MI_MODE, 1196 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1197 udelay(80); 1198 } 1199 1200 tg3_ape_lock(tp, tp->phy_ape_lock); 1201 1202 frame_val = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1203 MI_COM_PHY_ADDR_MASK); 1204 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1205 MI_COM_REG_ADDR_MASK); 1206 frame_val |= (val & MI_COM_DATA_MASK); 1207 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1208 1209 tw32_f(MAC_MI_COM, frame_val); 1210 1211 loops = PHY_BUSY_LOOPS; 1212 while (loops != 0) { 1213 udelay(10); 1214 frame_val = tr32(MAC_MI_COM); 1215 if ((frame_val & MI_COM_BUSY) == 0) { 1216 udelay(5); 1217 frame_val = tr32(MAC_MI_COM); 1218 break; 1219 } 1220 loops -= 1; 1221 } 1222 1223 ret = -EBUSY; 1224 if (loops != 0) 1225 ret = 0; 1226 1227 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1228 tw32_f(MAC_MI_MODE, tp->mi_mode); 1229 udelay(80); 1230 } 1231 1232 tg3_ape_unlock(tp, tp->phy_ape_lock); 1233 1234 return ret; 1235 } 1236 1237 static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1238 { 1239 return __tg3_writephy(tp, tp->phy_addr, reg, val); 1240 } 1241 1242 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1243 { 1244 int err; 1245 1246 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1247 if (err) 1248 goto done; 1249 1250 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1251 if (err) 1252 goto done; 1253 1254 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1255 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1256 if (err) 1257 goto done; 1258 1259 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1260 1261 done: 1262 return err; 1263 } 1264 1265 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1266 { 1267 int err; 1268 1269 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1270 if (err) 1271 goto done; 1272 1273 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1274 if (err) 1275 goto done; 1276 1277 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1278 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1279 if (err) 1280 goto done; 1281 1282 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1283 1284 done: 1285 return err; 1286 } 1287 1288 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1289 { 1290 int err; 1291 1292 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1293 if (!err) 1294 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1295 1296 return err; 1297 } 1298 1299 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1300 { 1301 int err; 1302 1303 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1304 if (!err) 1305 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1306 1307 return err; 1308 } 1309 1310 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1311 { 1312 int err; 1313 1314 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1315 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1316 MII_TG3_AUXCTL_SHDWSEL_MISC); 1317 if (!err) 1318 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1319 1320 return err; 1321 } 1322 1323 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1324 { 1325 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1326 set |= MII_TG3_AUXCTL_MISC_WREN; 1327 1328 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1329 } 1330 1331 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable) 1332 { 1333 u32 val; 1334 int err; 1335 1336 err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 1337 1338 if (err) 1339 return err; 1340 1341 if (enable) 1342 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1343 else 1344 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1345 1346 err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 1347 val | MII_TG3_AUXCTL_ACTL_TX_6DB); 1348 1349 return err; 1350 } 1351 1352 static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val) 1353 { 1354 return tg3_writephy(tp, MII_TG3_MISC_SHDW, 1355 reg | val | MII_TG3_MISC_SHDW_WREN); 1356 } 1357 1358 static int tg3_bmcr_reset(struct tg3 *tp) 1359 { 1360 u32 phy_control; 1361 int limit, err; 1362 1363 /* OK, reset it, and poll the BMCR_RESET bit until it 1364 * clears or we time out. 1365 */ 1366 phy_control = BMCR_RESET; 1367 err = tg3_writephy(tp, MII_BMCR, phy_control); 1368 if (err != 0) 1369 return -EBUSY; 1370 1371 limit = 5000; 1372 while (limit--) { 1373 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1374 if (err != 0) 1375 return -EBUSY; 1376 1377 if ((phy_control & BMCR_RESET) == 0) { 1378 udelay(40); 1379 break; 1380 } 1381 udelay(10); 1382 } 1383 if (limit < 0) 1384 return -EBUSY; 1385 1386 return 0; 1387 } 1388 1389 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1390 { 1391 struct tg3 *tp = bp->priv; 1392 u32 val; 1393 1394 spin_lock_bh(&tp->lock); 1395 1396 if (__tg3_readphy(tp, mii_id, reg, &val)) 1397 val = -EIO; 1398 1399 spin_unlock_bh(&tp->lock); 1400 1401 return val; 1402 } 1403 1404 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1405 { 1406 struct tg3 *tp = bp->priv; 1407 u32 ret = 0; 1408 1409 spin_lock_bh(&tp->lock); 1410 1411 if (__tg3_writephy(tp, mii_id, reg, val)) 1412 ret = -EIO; 1413 1414 spin_unlock_bh(&tp->lock); 1415 1416 return ret; 1417 } 1418 1419 static void tg3_mdio_config_5785(struct tg3 *tp) 1420 { 1421 u32 val; 1422 struct phy_device *phydev; 1423 1424 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1425 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1426 case PHY_ID_BCM50610: 1427 case PHY_ID_BCM50610M: 1428 val = MAC_PHYCFG2_50610_LED_MODES; 1429 break; 1430 case PHY_ID_BCMAC131: 1431 val = MAC_PHYCFG2_AC131_LED_MODES; 1432 break; 1433 case PHY_ID_RTL8211C: 1434 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1435 break; 1436 case PHY_ID_RTL8201E: 1437 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1438 break; 1439 default: 1440 return; 1441 } 1442 1443 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1444 tw32(MAC_PHYCFG2, val); 1445 1446 val = tr32(MAC_PHYCFG1); 1447 val &= ~(MAC_PHYCFG1_RGMII_INT | 1448 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1449 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1450 tw32(MAC_PHYCFG1, val); 1451 1452 return; 1453 } 1454 1455 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1456 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1457 MAC_PHYCFG2_FMODE_MASK_MASK | 1458 MAC_PHYCFG2_GMODE_MASK_MASK | 1459 MAC_PHYCFG2_ACT_MASK_MASK | 1460 MAC_PHYCFG2_QUAL_MASK_MASK | 1461 MAC_PHYCFG2_INBAND_ENABLE; 1462 1463 tw32(MAC_PHYCFG2, val); 1464 1465 val = tr32(MAC_PHYCFG1); 1466 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1467 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1468 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1469 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1470 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1471 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1472 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1473 } 1474 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1475 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1476 tw32(MAC_PHYCFG1, val); 1477 1478 val = tr32(MAC_EXT_RGMII_MODE); 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 MAC_RGMII_MODE_TX_ENABLE | 1484 MAC_RGMII_MODE_TX_LOWPWR | 1485 MAC_RGMII_MODE_TX_RESET); 1486 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1487 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1488 val |= MAC_RGMII_MODE_RX_INT_B | 1489 MAC_RGMII_MODE_RX_QUALITY | 1490 MAC_RGMII_MODE_RX_ACTIVITY | 1491 MAC_RGMII_MODE_RX_ENG_DET; 1492 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1493 val |= MAC_RGMII_MODE_TX_ENABLE | 1494 MAC_RGMII_MODE_TX_LOWPWR | 1495 MAC_RGMII_MODE_TX_RESET; 1496 } 1497 tw32(MAC_EXT_RGMII_MODE, val); 1498 } 1499 1500 static void tg3_mdio_start(struct tg3 *tp) 1501 { 1502 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1503 tw32_f(MAC_MI_MODE, tp->mi_mode); 1504 udelay(80); 1505 1506 if (tg3_flag(tp, MDIOBUS_INITED) && 1507 tg3_asic_rev(tp) == ASIC_REV_5785) 1508 tg3_mdio_config_5785(tp); 1509 } 1510 1511 static int tg3_mdio_init(struct tg3 *tp) 1512 { 1513 int i; 1514 u32 reg; 1515 struct phy_device *phydev; 1516 1517 if (tg3_flag(tp, 5717_PLUS)) { 1518 u32 is_serdes; 1519 1520 tp->phy_addr = tp->pci_fn + 1; 1521 1522 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) 1523 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1524 else 1525 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1526 TG3_CPMU_PHY_STRAP_IS_SERDES; 1527 if (is_serdes) 1528 tp->phy_addr += 7; 1529 } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) { 1530 int addr; 1531 1532 addr = ssb_gige_get_phyaddr(tp->pdev); 1533 if (addr < 0) 1534 return addr; 1535 tp->phy_addr = addr; 1536 } else 1537 tp->phy_addr = TG3_PHY_MII_ADDR; 1538 1539 tg3_mdio_start(tp); 1540 1541 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1542 return 0; 1543 1544 tp->mdio_bus = mdiobus_alloc(); 1545 if (tp->mdio_bus == NULL) 1546 return -ENOMEM; 1547 1548 tp->mdio_bus->name = "tg3 mdio bus"; 1549 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1550 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 1551 tp->mdio_bus->priv = tp; 1552 tp->mdio_bus->parent = &tp->pdev->dev; 1553 tp->mdio_bus->read = &tg3_mdio_read; 1554 tp->mdio_bus->write = &tg3_mdio_write; 1555 tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr); 1556 1557 /* The bus registration will look for all the PHYs on the mdio bus. 1558 * Unfortunately, it does not ensure the PHY is powered up before 1559 * accessing the PHY ID registers. A chip reset is the 1560 * quickest way to bring the device back to an operational state.. 1561 */ 1562 if (tg3_readphy(tp, MII_BMCR, ®) || (reg & BMCR_PDOWN)) 1563 tg3_bmcr_reset(tp); 1564 1565 i = mdiobus_register(tp->mdio_bus); 1566 if (i) { 1567 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1568 mdiobus_free(tp->mdio_bus); 1569 return i; 1570 } 1571 1572 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 1573 1574 if (!phydev || !phydev->drv) { 1575 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1576 mdiobus_unregister(tp->mdio_bus); 1577 mdiobus_free(tp->mdio_bus); 1578 return -ENODEV; 1579 } 1580 1581 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1582 case PHY_ID_BCM57780: 1583 phydev->interface = PHY_INTERFACE_MODE_GMII; 1584 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1585 break; 1586 case PHY_ID_BCM50610: 1587 case PHY_ID_BCM50610M: 1588 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1589 PHY_BRCM_RX_REFCLK_UNUSED | 1590 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1591 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1592 if (tg3_flag(tp, RGMII_INBAND_DISABLE)) 1593 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE; 1594 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1595 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; 1596 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1597 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; 1598 /* fallthru */ 1599 case PHY_ID_RTL8211C: 1600 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1601 break; 1602 case PHY_ID_RTL8201E: 1603 case PHY_ID_BCMAC131: 1604 phydev->interface = PHY_INTERFACE_MODE_MII; 1605 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1606 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1607 break; 1608 } 1609 1610 tg3_flag_set(tp, MDIOBUS_INITED); 1611 1612 if (tg3_asic_rev(tp) == ASIC_REV_5785) 1613 tg3_mdio_config_5785(tp); 1614 1615 return 0; 1616 } 1617 1618 static void tg3_mdio_fini(struct tg3 *tp) 1619 { 1620 if (tg3_flag(tp, MDIOBUS_INITED)) { 1621 tg3_flag_clear(tp, MDIOBUS_INITED); 1622 mdiobus_unregister(tp->mdio_bus); 1623 mdiobus_free(tp->mdio_bus); 1624 } 1625 } 1626 1627 /* tp->lock is held. */ 1628 static inline void tg3_generate_fw_event(struct tg3 *tp) 1629 { 1630 u32 val; 1631 1632 val = tr32(GRC_RX_CPU_EVENT); 1633 val |= GRC_RX_CPU_DRIVER_EVENT; 1634 tw32_f(GRC_RX_CPU_EVENT, val); 1635 1636 tp->last_event_jiffies = jiffies; 1637 } 1638 1639 #define TG3_FW_EVENT_TIMEOUT_USEC 2500 1640 1641 /* tp->lock is held. */ 1642 static void tg3_wait_for_event_ack(struct tg3 *tp) 1643 { 1644 int i; 1645 unsigned int delay_cnt; 1646 long time_remain; 1647 1648 /* If enough time has passed, no wait is necessary. */ 1649 time_remain = (long)(tp->last_event_jiffies + 1 + 1650 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1651 (long)jiffies; 1652 if (time_remain < 0) 1653 return; 1654 1655 /* Check if we can shorten the wait time. */ 1656 delay_cnt = jiffies_to_usecs(time_remain); 1657 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1658 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1659 delay_cnt = (delay_cnt >> 3) + 1; 1660 1661 for (i = 0; i < delay_cnt; i++) { 1662 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1663 break; 1664 if (pci_channel_offline(tp->pdev)) 1665 break; 1666 1667 udelay(8); 1668 } 1669 } 1670 1671 /* tp->lock is held. */ 1672 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1673 { 1674 u32 reg, val; 1675 1676 val = 0; 1677 if (!tg3_readphy(tp, MII_BMCR, ®)) 1678 val = reg << 16; 1679 if (!tg3_readphy(tp, MII_BMSR, ®)) 1680 val |= (reg & 0xffff); 1681 *data++ = val; 1682 1683 val = 0; 1684 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1685 val = reg << 16; 1686 if (!tg3_readphy(tp, MII_LPA, ®)) 1687 val |= (reg & 0xffff); 1688 *data++ = val; 1689 1690 val = 0; 1691 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1692 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1693 val = reg << 16; 1694 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1695 val |= (reg & 0xffff); 1696 } 1697 *data++ = val; 1698 1699 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1700 val = reg << 16; 1701 else 1702 val = 0; 1703 *data++ = val; 1704 } 1705 1706 /* tp->lock is held. */ 1707 static void tg3_ump_link_report(struct tg3 *tp) 1708 { 1709 u32 data[4]; 1710 1711 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1712 return; 1713 1714 tg3_phy_gather_ump_data(tp, data); 1715 1716 tg3_wait_for_event_ack(tp); 1717 1718 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1719 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1720 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1721 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1722 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1723 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1724 1725 tg3_generate_fw_event(tp); 1726 } 1727 1728 /* tp->lock is held. */ 1729 static void tg3_stop_fw(struct tg3 *tp) 1730 { 1731 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1732 /* Wait for RX cpu to ACK the previous event. */ 1733 tg3_wait_for_event_ack(tp); 1734 1735 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1736 1737 tg3_generate_fw_event(tp); 1738 1739 /* Wait for RX cpu to ACK this event. */ 1740 tg3_wait_for_event_ack(tp); 1741 } 1742 } 1743 1744 /* tp->lock is held. */ 1745 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1746 { 1747 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1748 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1749 1750 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1751 switch (kind) { 1752 case RESET_KIND_INIT: 1753 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1754 DRV_STATE_START); 1755 break; 1756 1757 case RESET_KIND_SHUTDOWN: 1758 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1759 DRV_STATE_UNLOAD); 1760 break; 1761 1762 case RESET_KIND_SUSPEND: 1763 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1764 DRV_STATE_SUSPEND); 1765 break; 1766 1767 default: 1768 break; 1769 } 1770 } 1771 } 1772 1773 /* tp->lock is held. */ 1774 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1775 { 1776 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1777 switch (kind) { 1778 case RESET_KIND_INIT: 1779 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1780 DRV_STATE_START_DONE); 1781 break; 1782 1783 case RESET_KIND_SHUTDOWN: 1784 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1785 DRV_STATE_UNLOAD_DONE); 1786 break; 1787 1788 default: 1789 break; 1790 } 1791 } 1792 } 1793 1794 /* tp->lock is held. */ 1795 static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1796 { 1797 if (tg3_flag(tp, ENABLE_ASF)) { 1798 switch (kind) { 1799 case RESET_KIND_INIT: 1800 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1801 DRV_STATE_START); 1802 break; 1803 1804 case RESET_KIND_SHUTDOWN: 1805 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1806 DRV_STATE_UNLOAD); 1807 break; 1808 1809 case RESET_KIND_SUSPEND: 1810 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1811 DRV_STATE_SUSPEND); 1812 break; 1813 1814 default: 1815 break; 1816 } 1817 } 1818 } 1819 1820 static int tg3_poll_fw(struct tg3 *tp) 1821 { 1822 int i; 1823 u32 val; 1824 1825 if (tg3_flag(tp, NO_FWARE_REPORTED)) 1826 return 0; 1827 1828 if (tg3_flag(tp, IS_SSB_CORE)) { 1829 /* We don't use firmware. */ 1830 return 0; 1831 } 1832 1833 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 1834 /* Wait up to 20ms for init done. */ 1835 for (i = 0; i < 200; i++) { 1836 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1837 return 0; 1838 if (pci_channel_offline(tp->pdev)) 1839 return -ENODEV; 1840 1841 udelay(100); 1842 } 1843 return -ENODEV; 1844 } 1845 1846 /* Wait for firmware initialization to complete. */ 1847 for (i = 0; i < 100000; i++) { 1848 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1849 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1850 break; 1851 if (pci_channel_offline(tp->pdev)) { 1852 if (!tg3_flag(tp, NO_FWARE_REPORTED)) { 1853 tg3_flag_set(tp, NO_FWARE_REPORTED); 1854 netdev_info(tp->dev, "No firmware running\n"); 1855 } 1856 1857 break; 1858 } 1859 1860 udelay(10); 1861 } 1862 1863 /* Chip might not be fitted with firmware. Some Sun onboard 1864 * parts are configured like that. So don't signal the timeout 1865 * of the above loop as an error, but do report the lack of 1866 * running firmware once. 1867 */ 1868 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1869 tg3_flag_set(tp, NO_FWARE_REPORTED); 1870 1871 netdev_info(tp->dev, "No firmware running\n"); 1872 } 1873 1874 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 1875 /* The 57765 A0 needs a little more 1876 * time to do some important work. 1877 */ 1878 mdelay(10); 1879 } 1880 1881 return 0; 1882 } 1883 1884 static void tg3_link_report(struct tg3 *tp) 1885 { 1886 if (!netif_carrier_ok(tp->dev)) { 1887 netif_info(tp, link, tp->dev, "Link is down\n"); 1888 tg3_ump_link_report(tp); 1889 } else if (netif_msg_link(tp)) { 1890 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1891 (tp->link_config.active_speed == SPEED_1000 ? 1892 1000 : 1893 (tp->link_config.active_speed == SPEED_100 ? 1894 100 : 10)), 1895 (tp->link_config.active_duplex == DUPLEX_FULL ? 1896 "full" : "half")); 1897 1898 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1899 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1900 "on" : "off", 1901 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1902 "on" : "off"); 1903 1904 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1905 netdev_info(tp->dev, "EEE is %s\n", 1906 tp->setlpicnt ? "enabled" : "disabled"); 1907 1908 tg3_ump_link_report(tp); 1909 } 1910 1911 tp->link_up = netif_carrier_ok(tp->dev); 1912 } 1913 1914 static u32 tg3_decode_flowctrl_1000T(u32 adv) 1915 { 1916 u32 flowctrl = 0; 1917 1918 if (adv & ADVERTISE_PAUSE_CAP) { 1919 flowctrl |= FLOW_CTRL_RX; 1920 if (!(adv & ADVERTISE_PAUSE_ASYM)) 1921 flowctrl |= FLOW_CTRL_TX; 1922 } else if (adv & ADVERTISE_PAUSE_ASYM) 1923 flowctrl |= FLOW_CTRL_TX; 1924 1925 return flowctrl; 1926 } 1927 1928 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1929 { 1930 u16 miireg; 1931 1932 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1933 miireg = ADVERTISE_1000XPAUSE; 1934 else if (flow_ctrl & FLOW_CTRL_TX) 1935 miireg = ADVERTISE_1000XPSE_ASYM; 1936 else if (flow_ctrl & FLOW_CTRL_RX) 1937 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1938 else 1939 miireg = 0; 1940 1941 return miireg; 1942 } 1943 1944 static u32 tg3_decode_flowctrl_1000X(u32 adv) 1945 { 1946 u32 flowctrl = 0; 1947 1948 if (adv & ADVERTISE_1000XPAUSE) { 1949 flowctrl |= FLOW_CTRL_RX; 1950 if (!(adv & ADVERTISE_1000XPSE_ASYM)) 1951 flowctrl |= FLOW_CTRL_TX; 1952 } else if (adv & ADVERTISE_1000XPSE_ASYM) 1953 flowctrl |= FLOW_CTRL_TX; 1954 1955 return flowctrl; 1956 } 1957 1958 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1959 { 1960 u8 cap = 0; 1961 1962 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1963 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1964 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1965 if (lcladv & ADVERTISE_1000XPAUSE) 1966 cap = FLOW_CTRL_RX; 1967 if (rmtadv & ADVERTISE_1000XPAUSE) 1968 cap = FLOW_CTRL_TX; 1969 } 1970 1971 return cap; 1972 } 1973 1974 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1975 { 1976 u8 autoneg; 1977 u8 flowctrl = 0; 1978 u32 old_rx_mode = tp->rx_mode; 1979 u32 old_tx_mode = tp->tx_mode; 1980 1981 if (tg3_flag(tp, USE_PHYLIB)) 1982 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg; 1983 else 1984 autoneg = tp->link_config.autoneg; 1985 1986 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1987 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1988 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1989 else 1990 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1991 } else 1992 flowctrl = tp->link_config.flowctrl; 1993 1994 tp->link_config.active_flowctrl = flowctrl; 1995 1996 if (flowctrl & FLOW_CTRL_RX) 1997 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1998 else 1999 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 2000 2001 if (old_rx_mode != tp->rx_mode) 2002 tw32_f(MAC_RX_MODE, tp->rx_mode); 2003 2004 if (flowctrl & FLOW_CTRL_TX) 2005 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 2006 else 2007 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 2008 2009 if (old_tx_mode != tp->tx_mode) 2010 tw32_f(MAC_TX_MODE, tp->tx_mode); 2011 } 2012 2013 static void tg3_adjust_link(struct net_device *dev) 2014 { 2015 u8 oldflowctrl, linkmesg = 0; 2016 u32 mac_mode, lcl_adv, rmt_adv; 2017 struct tg3 *tp = netdev_priv(dev); 2018 struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2019 2020 spin_lock_bh(&tp->lock); 2021 2022 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 2023 MAC_MODE_HALF_DUPLEX); 2024 2025 oldflowctrl = tp->link_config.active_flowctrl; 2026 2027 if (phydev->link) { 2028 lcl_adv = 0; 2029 rmt_adv = 0; 2030 2031 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 2032 mac_mode |= MAC_MODE_PORT_MODE_MII; 2033 else if (phydev->speed == SPEED_1000 || 2034 tg3_asic_rev(tp) != ASIC_REV_5785) 2035 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2036 else 2037 mac_mode |= MAC_MODE_PORT_MODE_MII; 2038 2039 if (phydev->duplex == DUPLEX_HALF) 2040 mac_mode |= MAC_MODE_HALF_DUPLEX; 2041 else { 2042 lcl_adv = mii_advertise_flowctrl( 2043 tp->link_config.flowctrl); 2044 2045 if (phydev->pause) 2046 rmt_adv = LPA_PAUSE_CAP; 2047 if (phydev->asym_pause) 2048 rmt_adv |= LPA_PAUSE_ASYM; 2049 } 2050 2051 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 2052 } else 2053 mac_mode |= MAC_MODE_PORT_MODE_GMII; 2054 2055 if (mac_mode != tp->mac_mode) { 2056 tp->mac_mode = mac_mode; 2057 tw32_f(MAC_MODE, tp->mac_mode); 2058 udelay(40); 2059 } 2060 2061 if (tg3_asic_rev(tp) == ASIC_REV_5785) { 2062 if (phydev->speed == SPEED_10) 2063 tw32(MAC_MI_STAT, 2064 MAC_MI_STAT_10MBPS_MODE | 2065 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2066 else 2067 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 2068 } 2069 2070 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 2071 tw32(MAC_TX_LENGTHS, 2072 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2073 (6 << TX_LENGTHS_IPG_SHIFT) | 2074 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 2075 else 2076 tw32(MAC_TX_LENGTHS, 2077 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 2078 (6 << TX_LENGTHS_IPG_SHIFT) | 2079 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 2080 2081 if (phydev->link != tp->old_link || 2082 phydev->speed != tp->link_config.active_speed || 2083 phydev->duplex != tp->link_config.active_duplex || 2084 oldflowctrl != tp->link_config.active_flowctrl) 2085 linkmesg = 1; 2086 2087 tp->old_link = phydev->link; 2088 tp->link_config.active_speed = phydev->speed; 2089 tp->link_config.active_duplex = phydev->duplex; 2090 2091 spin_unlock_bh(&tp->lock); 2092 2093 if (linkmesg) 2094 tg3_link_report(tp); 2095 } 2096 2097 static int tg3_phy_init(struct tg3 *tp) 2098 { 2099 struct phy_device *phydev; 2100 2101 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 2102 return 0; 2103 2104 /* Bring the PHY back to a known state. */ 2105 tg3_bmcr_reset(tp); 2106 2107 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2108 2109 /* Attach the MAC to the PHY. */ 2110 phydev = phy_connect(tp->dev, phydev_name(phydev), 2111 tg3_adjust_link, phydev->interface); 2112 if (IS_ERR(phydev)) { 2113 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 2114 return PTR_ERR(phydev); 2115 } 2116 2117 /* Mask with MAC supported features. */ 2118 switch (phydev->interface) { 2119 case PHY_INTERFACE_MODE_GMII: 2120 case PHY_INTERFACE_MODE_RGMII: 2121 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 2122 phydev->supported &= (PHY_GBIT_FEATURES | 2123 SUPPORTED_Pause | 2124 SUPPORTED_Asym_Pause); 2125 break; 2126 } 2127 /* fallthru */ 2128 case PHY_INTERFACE_MODE_MII: 2129 phydev->supported &= (PHY_BASIC_FEATURES | 2130 SUPPORTED_Pause | 2131 SUPPORTED_Asym_Pause); 2132 break; 2133 default: 2134 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2135 return -EINVAL; 2136 } 2137 2138 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 2139 2140 phydev->advertising = phydev->supported; 2141 2142 phy_attached_info(phydev); 2143 2144 return 0; 2145 } 2146 2147 static void tg3_phy_start(struct tg3 *tp) 2148 { 2149 struct phy_device *phydev; 2150 2151 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2152 return; 2153 2154 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 2155 2156 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 2157 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 2158 phydev->speed = tp->link_config.speed; 2159 phydev->duplex = tp->link_config.duplex; 2160 phydev->autoneg = tp->link_config.autoneg; 2161 phydev->advertising = tp->link_config.advertising; 2162 } 2163 2164 phy_start(phydev); 2165 2166 phy_start_aneg(phydev); 2167 } 2168 2169 static void tg3_phy_stop(struct tg3 *tp) 2170 { 2171 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2172 return; 2173 2174 phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2175 } 2176 2177 static void tg3_phy_fini(struct tg3 *tp) 2178 { 2179 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 2180 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 2181 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 2182 } 2183 } 2184 2185 static int tg3_phy_set_extloopbk(struct tg3 *tp) 2186 { 2187 int err; 2188 u32 val; 2189 2190 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 2191 return 0; 2192 2193 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2194 /* Cannot do read-modify-write on 5401 */ 2195 err = tg3_phy_auxctl_write(tp, 2196 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2197 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 2198 0x4c20); 2199 goto done; 2200 } 2201 2202 err = tg3_phy_auxctl_read(tp, 2203 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2204 if (err) 2205 return err; 2206 2207 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 2208 err = tg3_phy_auxctl_write(tp, 2209 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 2210 2211 done: 2212 return err; 2213 } 2214 2215 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 2216 { 2217 u32 phytest; 2218 2219 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2220 u32 phy; 2221 2222 tg3_writephy(tp, MII_TG3_FET_TEST, 2223 phytest | MII_TG3_FET_SHADOW_EN); 2224 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 2225 if (enable) 2226 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 2227 else 2228 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 2229 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 2230 } 2231 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2232 } 2233 } 2234 2235 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 2236 { 2237 u32 reg; 2238 2239 if (!tg3_flag(tp, 5705_PLUS) || 2240 (tg3_flag(tp, 5717_PLUS) && 2241 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2242 return; 2243 2244 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2245 tg3_phy_fet_toggle_apd(tp, enable); 2246 return; 2247 } 2248 2249 reg = MII_TG3_MISC_SHDW_SCR5_LPED | 2250 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 2251 MII_TG3_MISC_SHDW_SCR5_SDTL | 2252 MII_TG3_MISC_SHDW_SCR5_C125OE; 2253 if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable) 2254 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2255 2256 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg); 2257 2258 2259 reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2260 if (enable) 2261 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2262 2263 tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg); 2264 } 2265 2266 static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable) 2267 { 2268 u32 phy; 2269 2270 if (!tg3_flag(tp, 5705_PLUS) || 2271 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2272 return; 2273 2274 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2275 u32 ephy; 2276 2277 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2278 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2279 2280 tg3_writephy(tp, MII_TG3_FET_TEST, 2281 ephy | MII_TG3_FET_SHADOW_EN); 2282 if (!tg3_readphy(tp, reg, &phy)) { 2283 if (enable) 2284 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2285 else 2286 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2287 tg3_writephy(tp, reg, phy); 2288 } 2289 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2290 } 2291 } else { 2292 int ret; 2293 2294 ret = tg3_phy_auxctl_read(tp, 2295 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2296 if (!ret) { 2297 if (enable) 2298 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2299 else 2300 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2301 tg3_phy_auxctl_write(tp, 2302 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2303 } 2304 } 2305 } 2306 2307 static void tg3_phy_set_wirespeed(struct tg3 *tp) 2308 { 2309 int ret; 2310 u32 val; 2311 2312 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2313 return; 2314 2315 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2316 if (!ret) 2317 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2318 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2319 } 2320 2321 static void tg3_phy_apply_otp(struct tg3 *tp) 2322 { 2323 u32 otp, phy; 2324 2325 if (!tp->phy_otp) 2326 return; 2327 2328 otp = tp->phy_otp; 2329 2330 if (tg3_phy_toggle_auxctl_smdsp(tp, true)) 2331 return; 2332 2333 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2334 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2335 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2336 2337 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2338 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2339 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2340 2341 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2342 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2343 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2344 2345 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2346 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2347 2348 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2349 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2350 2351 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2352 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2353 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2354 2355 tg3_phy_toggle_auxctl_smdsp(tp, false); 2356 } 2357 2358 static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee) 2359 { 2360 u32 val; 2361 struct ethtool_eee *dest = &tp->eee; 2362 2363 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2364 return; 2365 2366 if (eee) 2367 dest = eee; 2368 2369 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val)) 2370 return; 2371 2372 /* Pull eee_active */ 2373 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2374 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) { 2375 dest->eee_active = 1; 2376 } else 2377 dest->eee_active = 0; 2378 2379 /* Pull lp advertised settings */ 2380 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val)) 2381 return; 2382 dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2383 2384 /* Pull advertised and eee_enabled settings */ 2385 if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val)) 2386 return; 2387 dest->eee_enabled = !!val; 2388 dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val); 2389 2390 /* Pull tx_lpi_enabled */ 2391 val = tr32(TG3_CPMU_EEE_MODE); 2392 dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX); 2393 2394 /* Pull lpi timer value */ 2395 dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff; 2396 } 2397 2398 static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up) 2399 { 2400 u32 val; 2401 2402 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2403 return; 2404 2405 tp->setlpicnt = 0; 2406 2407 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2408 current_link_up && 2409 tp->link_config.active_duplex == DUPLEX_FULL && 2410 (tp->link_config.active_speed == SPEED_100 || 2411 tp->link_config.active_speed == SPEED_1000)) { 2412 u32 eeectl; 2413 2414 if (tp->link_config.active_speed == SPEED_1000) 2415 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2416 else 2417 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2418 2419 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2420 2421 tg3_eee_pull_config(tp, NULL); 2422 if (tp->eee.eee_active) 2423 tp->setlpicnt = 2; 2424 } 2425 2426 if (!tp->setlpicnt) { 2427 if (current_link_up && 2428 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2429 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2430 tg3_phy_toggle_auxctl_smdsp(tp, false); 2431 } 2432 2433 val = tr32(TG3_CPMU_EEE_MODE); 2434 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2435 } 2436 } 2437 2438 static void tg3_phy_eee_enable(struct tg3 *tp) 2439 { 2440 u32 val; 2441 2442 if (tp->link_config.active_speed == SPEED_1000 && 2443 (tg3_asic_rev(tp) == ASIC_REV_5717 || 2444 tg3_asic_rev(tp) == ASIC_REV_5719 || 2445 tg3_flag(tp, 57765_CLASS)) && 2446 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2447 val = MII_TG3_DSP_TAP26_ALNOKO | 2448 MII_TG3_DSP_TAP26_RMRXSTO; 2449 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2450 tg3_phy_toggle_auxctl_smdsp(tp, false); 2451 } 2452 2453 val = tr32(TG3_CPMU_EEE_MODE); 2454 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2455 } 2456 2457 static int tg3_wait_macro_done(struct tg3 *tp) 2458 { 2459 int limit = 100; 2460 2461 while (limit--) { 2462 u32 tmp32; 2463 2464 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2465 if ((tmp32 & 0x1000) == 0) 2466 break; 2467 } 2468 } 2469 if (limit < 0) 2470 return -EBUSY; 2471 2472 return 0; 2473 } 2474 2475 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2476 { 2477 static const u32 test_pat[4][6] = { 2478 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2479 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2480 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2481 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2482 }; 2483 int chan; 2484 2485 for (chan = 0; chan < 4; chan++) { 2486 int i; 2487 2488 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2489 (chan * 0x2000) | 0x0200); 2490 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2491 2492 for (i = 0; i < 6; i++) 2493 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2494 test_pat[chan][i]); 2495 2496 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2497 if (tg3_wait_macro_done(tp)) { 2498 *resetp = 1; 2499 return -EBUSY; 2500 } 2501 2502 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2503 (chan * 0x2000) | 0x0200); 2504 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2505 if (tg3_wait_macro_done(tp)) { 2506 *resetp = 1; 2507 return -EBUSY; 2508 } 2509 2510 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2511 if (tg3_wait_macro_done(tp)) { 2512 *resetp = 1; 2513 return -EBUSY; 2514 } 2515 2516 for (i = 0; i < 6; i += 2) { 2517 u32 low, high; 2518 2519 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2520 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2521 tg3_wait_macro_done(tp)) { 2522 *resetp = 1; 2523 return -EBUSY; 2524 } 2525 low &= 0x7fff; 2526 high &= 0x000f; 2527 if (low != test_pat[chan][i] || 2528 high != test_pat[chan][i+1]) { 2529 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2530 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2531 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2532 2533 return -EBUSY; 2534 } 2535 } 2536 } 2537 2538 return 0; 2539 } 2540 2541 static int tg3_phy_reset_chanpat(struct tg3 *tp) 2542 { 2543 int chan; 2544 2545 for (chan = 0; chan < 4; chan++) { 2546 int i; 2547 2548 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2549 (chan * 0x2000) | 0x0200); 2550 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2551 for (i = 0; i < 6; i++) 2552 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2553 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2554 if (tg3_wait_macro_done(tp)) 2555 return -EBUSY; 2556 } 2557 2558 return 0; 2559 } 2560 2561 static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2562 { 2563 u32 reg32, phy9_orig; 2564 int retries, do_phy_reset, err; 2565 2566 retries = 10; 2567 do_phy_reset = 1; 2568 do { 2569 if (do_phy_reset) { 2570 err = tg3_bmcr_reset(tp); 2571 if (err) 2572 return err; 2573 do_phy_reset = 0; 2574 } 2575 2576 /* Disable transmitter and interrupt. */ 2577 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2578 continue; 2579 2580 reg32 |= 0x3000; 2581 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2582 2583 /* Set full-duplex, 1000 mbps. */ 2584 tg3_writephy(tp, MII_BMCR, 2585 BMCR_FULLDPLX | BMCR_SPEED1000); 2586 2587 /* Set to master mode. */ 2588 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2589 continue; 2590 2591 tg3_writephy(tp, MII_CTRL1000, 2592 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2593 2594 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 2595 if (err) 2596 return err; 2597 2598 /* Block the PHY control access. */ 2599 tg3_phydsp_write(tp, 0x8005, 0x0800); 2600 2601 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2602 if (!err) 2603 break; 2604 } while (--retries); 2605 2606 err = tg3_phy_reset_chanpat(tp); 2607 if (err) 2608 return err; 2609 2610 tg3_phydsp_write(tp, 0x8005, 0x0000); 2611 2612 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2613 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2614 2615 tg3_phy_toggle_auxctl_smdsp(tp, false); 2616 2617 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2618 2619 err = tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32); 2620 if (err) 2621 return err; 2622 2623 reg32 &= ~0x3000; 2624 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2625 2626 return 0; 2627 } 2628 2629 static void tg3_carrier_off(struct tg3 *tp) 2630 { 2631 netif_carrier_off(tp->dev); 2632 tp->link_up = false; 2633 } 2634 2635 static void tg3_warn_mgmt_link_flap(struct tg3 *tp) 2636 { 2637 if (tg3_flag(tp, ENABLE_ASF)) 2638 netdev_warn(tp->dev, 2639 "Management side-band traffic will be interrupted during phy settings change\n"); 2640 } 2641 2642 /* This will reset the tigon3 PHY if there is no valid 2643 * link unless the FORCE argument is non-zero. 2644 */ 2645 static int tg3_phy_reset(struct tg3 *tp) 2646 { 2647 u32 val, cpmuctrl; 2648 int err; 2649 2650 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2651 val = tr32(GRC_MISC_CFG); 2652 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2653 udelay(40); 2654 } 2655 err = tg3_readphy(tp, MII_BMSR, &val); 2656 err |= tg3_readphy(tp, MII_BMSR, &val); 2657 if (err != 0) 2658 return -EBUSY; 2659 2660 if (netif_running(tp->dev) && tp->link_up) { 2661 netif_carrier_off(tp->dev); 2662 tg3_link_report(tp); 2663 } 2664 2665 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 2666 tg3_asic_rev(tp) == ASIC_REV_5704 || 2667 tg3_asic_rev(tp) == ASIC_REV_5705) { 2668 err = tg3_phy_reset_5703_4_5(tp); 2669 if (err) 2670 return err; 2671 goto out; 2672 } 2673 2674 cpmuctrl = 0; 2675 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 2676 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 2677 cpmuctrl = tr32(TG3_CPMU_CTRL); 2678 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2679 tw32(TG3_CPMU_CTRL, 2680 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2681 } 2682 2683 err = tg3_bmcr_reset(tp); 2684 if (err) 2685 return err; 2686 2687 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2688 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2689 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2690 2691 tw32(TG3_CPMU_CTRL, cpmuctrl); 2692 } 2693 2694 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 2695 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 2696 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2697 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2698 CPMU_LSPD_1000MB_MACCLK_12_5) { 2699 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2700 udelay(40); 2701 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2702 } 2703 } 2704 2705 if (tg3_flag(tp, 5717_PLUS) && 2706 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2707 return 0; 2708 2709 tg3_phy_apply_otp(tp); 2710 2711 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2712 tg3_phy_toggle_apd(tp, true); 2713 else 2714 tg3_phy_toggle_apd(tp, false); 2715 2716 out: 2717 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2718 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2719 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2720 tg3_phydsp_write(tp, 0x000a, 0x0323); 2721 tg3_phy_toggle_auxctl_smdsp(tp, false); 2722 } 2723 2724 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2725 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2726 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2727 } 2728 2729 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2730 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2731 tg3_phydsp_write(tp, 0x000a, 0x310b); 2732 tg3_phydsp_write(tp, 0x201f, 0x9506); 2733 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2734 tg3_phy_toggle_auxctl_smdsp(tp, false); 2735 } 2736 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2737 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2738 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2739 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2740 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2741 tg3_writephy(tp, MII_TG3_TEST1, 2742 MII_TG3_TEST1_TRIM_EN | 0x4); 2743 } else 2744 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2745 2746 tg3_phy_toggle_auxctl_smdsp(tp, false); 2747 } 2748 } 2749 2750 /* Set Extended packet length bit (bit 14) on all chips that */ 2751 /* support jumbo frames */ 2752 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2753 /* Cannot do read-modify-write on 5401 */ 2754 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2755 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2756 /* Set bit 14 with read-modify-write to preserve other bits */ 2757 err = tg3_phy_auxctl_read(tp, 2758 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2759 if (!err) 2760 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2761 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2762 } 2763 2764 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2765 * jumbo frames transmission. 2766 */ 2767 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2768 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2769 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2770 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2771 } 2772 2773 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 2774 /* adjust output voltage */ 2775 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2776 } 2777 2778 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0) 2779 tg3_phydsp_write(tp, 0xffb, 0x4000); 2780 2781 tg3_phy_toggle_automdix(tp, true); 2782 tg3_phy_set_wirespeed(tp); 2783 return 0; 2784 } 2785 2786 #define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2787 #define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2788 #define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2789 TG3_GPIO_MSG_NEED_VAUX) 2790 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2791 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2792 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2793 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2794 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2795 2796 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2797 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2798 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2799 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2800 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2801 2802 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2803 { 2804 u32 status, shift; 2805 2806 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2807 tg3_asic_rev(tp) == ASIC_REV_5719) 2808 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2809 else 2810 status = tr32(TG3_CPMU_DRV_STATUS); 2811 2812 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2813 status &= ~(TG3_GPIO_MSG_MASK << shift); 2814 status |= (newstat << shift); 2815 2816 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2817 tg3_asic_rev(tp) == ASIC_REV_5719) 2818 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2819 else 2820 tw32(TG3_CPMU_DRV_STATUS, status); 2821 2822 return status >> TG3_APE_GPIO_MSG_SHIFT; 2823 } 2824 2825 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2826 { 2827 if (!tg3_flag(tp, IS_NIC)) 2828 return 0; 2829 2830 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2831 tg3_asic_rev(tp) == ASIC_REV_5719 || 2832 tg3_asic_rev(tp) == ASIC_REV_5720) { 2833 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2834 return -EIO; 2835 2836 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2837 2838 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2839 TG3_GRC_LCLCTL_PWRSW_DELAY); 2840 2841 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2842 } else { 2843 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2844 TG3_GRC_LCLCTL_PWRSW_DELAY); 2845 } 2846 2847 return 0; 2848 } 2849 2850 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2851 { 2852 u32 grc_local_ctrl; 2853 2854 if (!tg3_flag(tp, IS_NIC) || 2855 tg3_asic_rev(tp) == ASIC_REV_5700 || 2856 tg3_asic_rev(tp) == ASIC_REV_5701) 2857 return; 2858 2859 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2860 2861 tw32_wait_f(GRC_LOCAL_CTRL, 2862 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2863 TG3_GRC_LCLCTL_PWRSW_DELAY); 2864 2865 tw32_wait_f(GRC_LOCAL_CTRL, 2866 grc_local_ctrl, 2867 TG3_GRC_LCLCTL_PWRSW_DELAY); 2868 2869 tw32_wait_f(GRC_LOCAL_CTRL, 2870 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2871 TG3_GRC_LCLCTL_PWRSW_DELAY); 2872 } 2873 2874 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2875 { 2876 if (!tg3_flag(tp, IS_NIC)) 2877 return; 2878 2879 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 2880 tg3_asic_rev(tp) == ASIC_REV_5701) { 2881 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2882 (GRC_LCLCTRL_GPIO_OE0 | 2883 GRC_LCLCTRL_GPIO_OE1 | 2884 GRC_LCLCTRL_GPIO_OE2 | 2885 GRC_LCLCTRL_GPIO_OUTPUT0 | 2886 GRC_LCLCTRL_GPIO_OUTPUT1), 2887 TG3_GRC_LCLCTL_PWRSW_DELAY); 2888 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2889 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2890 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2891 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2892 GRC_LCLCTRL_GPIO_OE1 | 2893 GRC_LCLCTRL_GPIO_OE2 | 2894 GRC_LCLCTRL_GPIO_OUTPUT0 | 2895 GRC_LCLCTRL_GPIO_OUTPUT1 | 2896 tp->grc_local_ctrl; 2897 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2898 TG3_GRC_LCLCTL_PWRSW_DELAY); 2899 2900 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2901 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2902 TG3_GRC_LCLCTL_PWRSW_DELAY); 2903 2904 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2905 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2906 TG3_GRC_LCLCTL_PWRSW_DELAY); 2907 } else { 2908 u32 no_gpio2; 2909 u32 grc_local_ctrl = 0; 2910 2911 /* Workaround to prevent overdrawing Amps. */ 2912 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 2913 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2914 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2915 grc_local_ctrl, 2916 TG3_GRC_LCLCTL_PWRSW_DELAY); 2917 } 2918 2919 /* On 5753 and variants, GPIO2 cannot be used. */ 2920 no_gpio2 = tp->nic_sram_data_cfg & 2921 NIC_SRAM_DATA_CFG_NO_GPIO2; 2922 2923 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2924 GRC_LCLCTRL_GPIO_OE1 | 2925 GRC_LCLCTRL_GPIO_OE2 | 2926 GRC_LCLCTRL_GPIO_OUTPUT1 | 2927 GRC_LCLCTRL_GPIO_OUTPUT2; 2928 if (no_gpio2) { 2929 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2930 GRC_LCLCTRL_GPIO_OUTPUT2); 2931 } 2932 tw32_wait_f(GRC_LOCAL_CTRL, 2933 tp->grc_local_ctrl | grc_local_ctrl, 2934 TG3_GRC_LCLCTL_PWRSW_DELAY); 2935 2936 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2937 2938 tw32_wait_f(GRC_LOCAL_CTRL, 2939 tp->grc_local_ctrl | grc_local_ctrl, 2940 TG3_GRC_LCLCTL_PWRSW_DELAY); 2941 2942 if (!no_gpio2) { 2943 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2944 tw32_wait_f(GRC_LOCAL_CTRL, 2945 tp->grc_local_ctrl | grc_local_ctrl, 2946 TG3_GRC_LCLCTL_PWRSW_DELAY); 2947 } 2948 } 2949 } 2950 2951 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2952 { 2953 u32 msg = 0; 2954 2955 /* Serialize power state transitions */ 2956 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2957 return; 2958 2959 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2960 msg = TG3_GPIO_MSG_NEED_VAUX; 2961 2962 msg = tg3_set_function_status(tp, msg); 2963 2964 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2965 goto done; 2966 2967 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2968 tg3_pwrsrc_switch_to_vaux(tp); 2969 else 2970 tg3_pwrsrc_die_with_vmain(tp); 2971 2972 done: 2973 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2974 } 2975 2976 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2977 { 2978 bool need_vaux = false; 2979 2980 /* The GPIOs do something completely different on 57765. */ 2981 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2982 return; 2983 2984 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 2985 tg3_asic_rev(tp) == ASIC_REV_5719 || 2986 tg3_asic_rev(tp) == ASIC_REV_5720) { 2987 tg3_frob_aux_power_5717(tp, include_wol ? 2988 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2989 return; 2990 } 2991 2992 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2993 struct net_device *dev_peer; 2994 2995 dev_peer = pci_get_drvdata(tp->pdev_peer); 2996 2997 /* remove_one() may have been run on the peer. */ 2998 if (dev_peer) { 2999 struct tg3 *tp_peer = netdev_priv(dev_peer); 3000 3001 if (tg3_flag(tp_peer, INIT_COMPLETE)) 3002 return; 3003 3004 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 3005 tg3_flag(tp_peer, ENABLE_ASF)) 3006 need_vaux = true; 3007 } 3008 } 3009 3010 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 3011 tg3_flag(tp, ENABLE_ASF)) 3012 need_vaux = true; 3013 3014 if (need_vaux) 3015 tg3_pwrsrc_switch_to_vaux(tp); 3016 else 3017 tg3_pwrsrc_die_with_vmain(tp); 3018 } 3019 3020 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 3021 { 3022 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 3023 return 1; 3024 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 3025 if (speed != SPEED_10) 3026 return 1; 3027 } else if (speed == SPEED_10) 3028 return 1; 3029 3030 return 0; 3031 } 3032 3033 static bool tg3_phy_power_bug(struct tg3 *tp) 3034 { 3035 switch (tg3_asic_rev(tp)) { 3036 case ASIC_REV_5700: 3037 case ASIC_REV_5704: 3038 return true; 3039 case ASIC_REV_5780: 3040 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3041 return true; 3042 return false; 3043 case ASIC_REV_5717: 3044 if (!tp->pci_fn) 3045 return true; 3046 return false; 3047 case ASIC_REV_5719: 3048 case ASIC_REV_5720: 3049 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 3050 !tp->pci_fn) 3051 return true; 3052 return false; 3053 } 3054 3055 return false; 3056 } 3057 3058 static bool tg3_phy_led_bug(struct tg3 *tp) 3059 { 3060 switch (tg3_asic_rev(tp)) { 3061 case ASIC_REV_5719: 3062 case ASIC_REV_5720: 3063 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 3064 !tp->pci_fn) 3065 return true; 3066 return false; 3067 } 3068 3069 return false; 3070 } 3071 3072 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 3073 { 3074 u32 val; 3075 3076 if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) 3077 return; 3078 3079 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 3080 if (tg3_asic_rev(tp) == ASIC_REV_5704) { 3081 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 3082 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 3083 3084 sg_dig_ctrl |= 3085 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 3086 tw32(SG_DIG_CTRL, sg_dig_ctrl); 3087 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 3088 } 3089 return; 3090 } 3091 3092 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3093 tg3_bmcr_reset(tp); 3094 val = tr32(GRC_MISC_CFG); 3095 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 3096 udelay(40); 3097 return; 3098 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3099 u32 phytest; 3100 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 3101 u32 phy; 3102 3103 tg3_writephy(tp, MII_ADVERTISE, 0); 3104 tg3_writephy(tp, MII_BMCR, 3105 BMCR_ANENABLE | BMCR_ANRESTART); 3106 3107 tg3_writephy(tp, MII_TG3_FET_TEST, 3108 phytest | MII_TG3_FET_SHADOW_EN); 3109 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 3110 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 3111 tg3_writephy(tp, 3112 MII_TG3_FET_SHDW_AUXMODE4, 3113 phy); 3114 } 3115 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 3116 } 3117 return; 3118 } else if (do_low_power) { 3119 if (!tg3_phy_led_bug(tp)) 3120 tg3_writephy(tp, MII_TG3_EXT_CTRL, 3121 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 3122 3123 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3124 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 3125 MII_TG3_AUXCTL_PCTL_VREG_11V; 3126 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 3127 } 3128 3129 /* The PHY should not be powered down on some chips because 3130 * of bugs. 3131 */ 3132 if (tg3_phy_power_bug(tp)) 3133 return; 3134 3135 if (tg3_chip_rev(tp) == CHIPREV_5784_AX || 3136 tg3_chip_rev(tp) == CHIPREV_5761_AX) { 3137 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 3138 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 3139 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 3140 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 3141 } 3142 3143 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 3144 } 3145 3146 /* tp->lock is held. */ 3147 static int tg3_nvram_lock(struct tg3 *tp) 3148 { 3149 if (tg3_flag(tp, NVRAM)) { 3150 int i; 3151 3152 if (tp->nvram_lock_cnt == 0) { 3153 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 3154 for (i = 0; i < 8000; i++) { 3155 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 3156 break; 3157 udelay(20); 3158 } 3159 if (i == 8000) { 3160 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 3161 return -ENODEV; 3162 } 3163 } 3164 tp->nvram_lock_cnt++; 3165 } 3166 return 0; 3167 } 3168 3169 /* tp->lock is held. */ 3170 static void tg3_nvram_unlock(struct tg3 *tp) 3171 { 3172 if (tg3_flag(tp, NVRAM)) { 3173 if (tp->nvram_lock_cnt > 0) 3174 tp->nvram_lock_cnt--; 3175 if (tp->nvram_lock_cnt == 0) 3176 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 3177 } 3178 } 3179 3180 /* tp->lock is held. */ 3181 static void tg3_enable_nvram_access(struct tg3 *tp) 3182 { 3183 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3184 u32 nvaccess = tr32(NVRAM_ACCESS); 3185 3186 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 3187 } 3188 } 3189 3190 /* tp->lock is held. */ 3191 static void tg3_disable_nvram_access(struct tg3 *tp) 3192 { 3193 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3194 u32 nvaccess = tr32(NVRAM_ACCESS); 3195 3196 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 3197 } 3198 } 3199 3200 static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 3201 u32 offset, u32 *val) 3202 { 3203 u32 tmp; 3204 int i; 3205 3206 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 3207 return -EINVAL; 3208 3209 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 3210 EEPROM_ADDR_DEVID_MASK | 3211 EEPROM_ADDR_READ); 3212 tw32(GRC_EEPROM_ADDR, 3213 tmp | 3214 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3215 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 3216 EEPROM_ADDR_ADDR_MASK) | 3217 EEPROM_ADDR_READ | EEPROM_ADDR_START); 3218 3219 for (i = 0; i < 1000; i++) { 3220 tmp = tr32(GRC_EEPROM_ADDR); 3221 3222 if (tmp & EEPROM_ADDR_COMPLETE) 3223 break; 3224 msleep(1); 3225 } 3226 if (!(tmp & EEPROM_ADDR_COMPLETE)) 3227 return -EBUSY; 3228 3229 tmp = tr32(GRC_EEPROM_DATA); 3230 3231 /* 3232 * The data will always be opposite the native endian 3233 * format. Perform a blind byteswap to compensate. 3234 */ 3235 *val = swab32(tmp); 3236 3237 return 0; 3238 } 3239 3240 #define NVRAM_CMD_TIMEOUT 10000 3241 3242 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 3243 { 3244 int i; 3245 3246 tw32(NVRAM_CMD, nvram_cmd); 3247 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 3248 usleep_range(10, 40); 3249 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 3250 udelay(10); 3251 break; 3252 } 3253 } 3254 3255 if (i == NVRAM_CMD_TIMEOUT) 3256 return -EBUSY; 3257 3258 return 0; 3259 } 3260 3261 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 3262 { 3263 if (tg3_flag(tp, NVRAM) && 3264 tg3_flag(tp, NVRAM_BUFFERED) && 3265 tg3_flag(tp, FLASH) && 3266 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3267 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3268 3269 addr = ((addr / tp->nvram_pagesize) << 3270 ATMEL_AT45DB0X1B_PAGE_POS) + 3271 (addr % tp->nvram_pagesize); 3272 3273 return addr; 3274 } 3275 3276 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 3277 { 3278 if (tg3_flag(tp, NVRAM) && 3279 tg3_flag(tp, NVRAM_BUFFERED) && 3280 tg3_flag(tp, FLASH) && 3281 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3282 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3283 3284 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 3285 tp->nvram_pagesize) + 3286 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 3287 3288 return addr; 3289 } 3290 3291 /* NOTE: Data read in from NVRAM is byteswapped according to 3292 * the byteswapping settings for all other register accesses. 3293 * tg3 devices are BE devices, so on a BE machine, the data 3294 * returned will be exactly as it is seen in NVRAM. On a LE 3295 * machine, the 32-bit value will be byteswapped. 3296 */ 3297 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 3298 { 3299 int ret; 3300 3301 if (!tg3_flag(tp, NVRAM)) 3302 return tg3_nvram_read_using_eeprom(tp, offset, val); 3303 3304 offset = tg3_nvram_phys_addr(tp, offset); 3305 3306 if (offset > NVRAM_ADDR_MSK) 3307 return -EINVAL; 3308 3309 ret = tg3_nvram_lock(tp); 3310 if (ret) 3311 return ret; 3312 3313 tg3_enable_nvram_access(tp); 3314 3315 tw32(NVRAM_ADDR, offset); 3316 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 3317 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 3318 3319 if (ret == 0) 3320 *val = tr32(NVRAM_RDDATA); 3321 3322 tg3_disable_nvram_access(tp); 3323 3324 tg3_nvram_unlock(tp); 3325 3326 return ret; 3327 } 3328 3329 /* Ensures NVRAM data is in bytestream format. */ 3330 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 3331 { 3332 u32 v; 3333 int res = tg3_nvram_read(tp, offset, &v); 3334 if (!res) 3335 *val = cpu_to_be32(v); 3336 return res; 3337 } 3338 3339 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 3340 u32 offset, u32 len, u8 *buf) 3341 { 3342 int i, j, rc = 0; 3343 u32 val; 3344 3345 for (i = 0; i < len; i += 4) { 3346 u32 addr; 3347 __be32 data; 3348 3349 addr = offset + i; 3350 3351 memcpy(&data, buf + i, 4); 3352 3353 /* 3354 * The SEEPROM interface expects the data to always be opposite 3355 * the native endian format. We accomplish this by reversing 3356 * all the operations that would have been performed on the 3357 * data from a call to tg3_nvram_read_be32(). 3358 */ 3359 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3360 3361 val = tr32(GRC_EEPROM_ADDR); 3362 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3363 3364 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3365 EEPROM_ADDR_READ); 3366 tw32(GRC_EEPROM_ADDR, val | 3367 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3368 (addr & EEPROM_ADDR_ADDR_MASK) | 3369 EEPROM_ADDR_START | 3370 EEPROM_ADDR_WRITE); 3371 3372 for (j = 0; j < 1000; j++) { 3373 val = tr32(GRC_EEPROM_ADDR); 3374 3375 if (val & EEPROM_ADDR_COMPLETE) 3376 break; 3377 msleep(1); 3378 } 3379 if (!(val & EEPROM_ADDR_COMPLETE)) { 3380 rc = -EBUSY; 3381 break; 3382 } 3383 } 3384 3385 return rc; 3386 } 3387 3388 /* offset and length are dword aligned */ 3389 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3390 u8 *buf) 3391 { 3392 int ret = 0; 3393 u32 pagesize = tp->nvram_pagesize; 3394 u32 pagemask = pagesize - 1; 3395 u32 nvram_cmd; 3396 u8 *tmp; 3397 3398 tmp = kmalloc(pagesize, GFP_KERNEL); 3399 if (tmp == NULL) 3400 return -ENOMEM; 3401 3402 while (len) { 3403 int j; 3404 u32 phy_addr, page_off, size; 3405 3406 phy_addr = offset & ~pagemask; 3407 3408 for (j = 0; j < pagesize; j += 4) { 3409 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3410 (__be32 *) (tmp + j)); 3411 if (ret) 3412 break; 3413 } 3414 if (ret) 3415 break; 3416 3417 page_off = offset & pagemask; 3418 size = pagesize; 3419 if (len < size) 3420 size = len; 3421 3422 len -= size; 3423 3424 memcpy(tmp + page_off, buf, size); 3425 3426 offset = offset + (pagesize - page_off); 3427 3428 tg3_enable_nvram_access(tp); 3429 3430 /* 3431 * Before we can erase the flash page, we need 3432 * to issue a special "write enable" command. 3433 */ 3434 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3435 3436 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3437 break; 3438 3439 /* Erase the target page */ 3440 tw32(NVRAM_ADDR, phy_addr); 3441 3442 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3443 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3444 3445 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3446 break; 3447 3448 /* Issue another write enable to start the write. */ 3449 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3450 3451 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3452 break; 3453 3454 for (j = 0; j < pagesize; j += 4) { 3455 __be32 data; 3456 3457 data = *((__be32 *) (tmp + j)); 3458 3459 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3460 3461 tw32(NVRAM_ADDR, phy_addr + j); 3462 3463 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3464 NVRAM_CMD_WR; 3465 3466 if (j == 0) 3467 nvram_cmd |= NVRAM_CMD_FIRST; 3468 else if (j == (pagesize - 4)) 3469 nvram_cmd |= NVRAM_CMD_LAST; 3470 3471 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3472 if (ret) 3473 break; 3474 } 3475 if (ret) 3476 break; 3477 } 3478 3479 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3480 tg3_nvram_exec_cmd(tp, nvram_cmd); 3481 3482 kfree(tmp); 3483 3484 return ret; 3485 } 3486 3487 /* offset and length are dword aligned */ 3488 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3489 u8 *buf) 3490 { 3491 int i, ret = 0; 3492 3493 for (i = 0; i < len; i += 4, offset += 4) { 3494 u32 page_off, phy_addr, nvram_cmd; 3495 __be32 data; 3496 3497 memcpy(&data, buf + i, 4); 3498 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3499 3500 page_off = offset % tp->nvram_pagesize; 3501 3502 phy_addr = tg3_nvram_phys_addr(tp, offset); 3503 3504 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3505 3506 if (page_off == 0 || i == 0) 3507 nvram_cmd |= NVRAM_CMD_FIRST; 3508 if (page_off == (tp->nvram_pagesize - 4)) 3509 nvram_cmd |= NVRAM_CMD_LAST; 3510 3511 if (i == (len - 4)) 3512 nvram_cmd |= NVRAM_CMD_LAST; 3513 3514 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3515 !tg3_flag(tp, FLASH) || 3516 !tg3_flag(tp, 57765_PLUS)) 3517 tw32(NVRAM_ADDR, phy_addr); 3518 3519 if (tg3_asic_rev(tp) != ASIC_REV_5752 && 3520 !tg3_flag(tp, 5755_PLUS) && 3521 (tp->nvram_jedecnum == JEDEC_ST) && 3522 (nvram_cmd & NVRAM_CMD_FIRST)) { 3523 u32 cmd; 3524 3525 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3526 ret = tg3_nvram_exec_cmd(tp, cmd); 3527 if (ret) 3528 break; 3529 } 3530 if (!tg3_flag(tp, FLASH)) { 3531 /* We always do complete word writes to eeprom. */ 3532 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3533 } 3534 3535 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3536 if (ret) 3537 break; 3538 } 3539 return ret; 3540 } 3541 3542 /* offset and length are dword aligned */ 3543 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3544 { 3545 int ret; 3546 3547 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3548 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3549 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3550 udelay(40); 3551 } 3552 3553 if (!tg3_flag(tp, NVRAM)) { 3554 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3555 } else { 3556 u32 grc_mode; 3557 3558 ret = tg3_nvram_lock(tp); 3559 if (ret) 3560 return ret; 3561 3562 tg3_enable_nvram_access(tp); 3563 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3564 tw32(NVRAM_WRITE1, 0x406); 3565 3566 grc_mode = tr32(GRC_MODE); 3567 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3568 3569 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3570 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3571 buf); 3572 } else { 3573 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3574 buf); 3575 } 3576 3577 grc_mode = tr32(GRC_MODE); 3578 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3579 3580 tg3_disable_nvram_access(tp); 3581 tg3_nvram_unlock(tp); 3582 } 3583 3584 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3585 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3586 udelay(40); 3587 } 3588 3589 return ret; 3590 } 3591 3592 #define RX_CPU_SCRATCH_BASE 0x30000 3593 #define RX_CPU_SCRATCH_SIZE 0x04000 3594 #define TX_CPU_SCRATCH_BASE 0x34000 3595 #define TX_CPU_SCRATCH_SIZE 0x04000 3596 3597 /* tp->lock is held. */ 3598 static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base) 3599 { 3600 int i; 3601 const int iters = 10000; 3602 3603 for (i = 0; i < iters; i++) { 3604 tw32(cpu_base + CPU_STATE, 0xffffffff); 3605 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3606 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT) 3607 break; 3608 if (pci_channel_offline(tp->pdev)) 3609 return -EBUSY; 3610 } 3611 3612 return (i == iters) ? -EBUSY : 0; 3613 } 3614 3615 /* tp->lock is held. */ 3616 static int tg3_rxcpu_pause(struct tg3 *tp) 3617 { 3618 int rc = tg3_pause_cpu(tp, RX_CPU_BASE); 3619 3620 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3621 tw32_f(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3622 udelay(10); 3623 3624 return rc; 3625 } 3626 3627 /* tp->lock is held. */ 3628 static int tg3_txcpu_pause(struct tg3 *tp) 3629 { 3630 return tg3_pause_cpu(tp, TX_CPU_BASE); 3631 } 3632 3633 /* tp->lock is held. */ 3634 static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base) 3635 { 3636 tw32(cpu_base + CPU_STATE, 0xffffffff); 3637 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3638 } 3639 3640 /* tp->lock is held. */ 3641 static void tg3_rxcpu_resume(struct tg3 *tp) 3642 { 3643 tg3_resume_cpu(tp, RX_CPU_BASE); 3644 } 3645 3646 /* tp->lock is held. */ 3647 static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base) 3648 { 3649 int rc; 3650 3651 BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3652 3653 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 3654 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3655 3656 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3657 return 0; 3658 } 3659 if (cpu_base == RX_CPU_BASE) { 3660 rc = tg3_rxcpu_pause(tp); 3661 } else { 3662 /* 3663 * There is only an Rx CPU for the 5750 derivative in the 3664 * BCM4785. 3665 */ 3666 if (tg3_flag(tp, IS_SSB_CORE)) 3667 return 0; 3668 3669 rc = tg3_txcpu_pause(tp); 3670 } 3671 3672 if (rc) { 3673 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3674 __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX"); 3675 return -ENODEV; 3676 } 3677 3678 /* Clear firmware's nvram arbitration. */ 3679 if (tg3_flag(tp, NVRAM)) 3680 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3681 return 0; 3682 } 3683 3684 static int tg3_fw_data_len(struct tg3 *tp, 3685 const struct tg3_firmware_hdr *fw_hdr) 3686 { 3687 int fw_len; 3688 3689 /* Non fragmented firmware have one firmware header followed by a 3690 * contiguous chunk of data to be written. The length field in that 3691 * header is not the length of data to be written but the complete 3692 * length of the bss. The data length is determined based on 3693 * tp->fw->size minus headers. 3694 * 3695 * Fragmented firmware have a main header followed by multiple 3696 * fragments. Each fragment is identical to non fragmented firmware 3697 * with a firmware header followed by a contiguous chunk of data. In 3698 * the main header, the length field is unused and set to 0xffffffff. 3699 * In each fragment header the length is the entire size of that 3700 * fragment i.e. fragment data + header length. Data length is 3701 * therefore length field in the header minus TG3_FW_HDR_LEN. 3702 */ 3703 if (tp->fw_len == 0xffffffff) 3704 fw_len = be32_to_cpu(fw_hdr->len); 3705 else 3706 fw_len = tp->fw->size; 3707 3708 return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32); 3709 } 3710 3711 /* tp->lock is held. */ 3712 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3713 u32 cpu_scratch_base, int cpu_scratch_size, 3714 const struct tg3_firmware_hdr *fw_hdr) 3715 { 3716 int err, i; 3717 void (*write_op)(struct tg3 *, u32, u32); 3718 int total_len = tp->fw->size; 3719 3720 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3721 netdev_err(tp->dev, 3722 "%s: Trying to load TX cpu firmware which is 5705\n", 3723 __func__); 3724 return -EINVAL; 3725 } 3726 3727 if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766) 3728 write_op = tg3_write_mem; 3729 else 3730 write_op = tg3_write_indirect_reg32; 3731 3732 if (tg3_asic_rev(tp) != ASIC_REV_57766) { 3733 /* It is possible that bootcode is still loading at this point. 3734 * Get the nvram lock first before halting the cpu. 3735 */ 3736 int lock_err = tg3_nvram_lock(tp); 3737 err = tg3_halt_cpu(tp, cpu_base); 3738 if (!lock_err) 3739 tg3_nvram_unlock(tp); 3740 if (err) 3741 goto out; 3742 3743 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3744 write_op(tp, cpu_scratch_base + i, 0); 3745 tw32(cpu_base + CPU_STATE, 0xffffffff); 3746 tw32(cpu_base + CPU_MODE, 3747 tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT); 3748 } else { 3749 /* Subtract additional main header for fragmented firmware and 3750 * advance to the first fragment 3751 */ 3752 total_len -= TG3_FW_HDR_LEN; 3753 fw_hdr++; 3754 } 3755 3756 do { 3757 u32 *fw_data = (u32 *)(fw_hdr + 1); 3758 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++) 3759 write_op(tp, cpu_scratch_base + 3760 (be32_to_cpu(fw_hdr->base_addr) & 0xffff) + 3761 (i * sizeof(u32)), 3762 be32_to_cpu(fw_data[i])); 3763 3764 total_len -= be32_to_cpu(fw_hdr->len); 3765 3766 /* Advance to next fragment */ 3767 fw_hdr = (struct tg3_firmware_hdr *) 3768 ((void *)fw_hdr + be32_to_cpu(fw_hdr->len)); 3769 } while (total_len > 0); 3770 3771 err = 0; 3772 3773 out: 3774 return err; 3775 } 3776 3777 /* tp->lock is held. */ 3778 static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc) 3779 { 3780 int i; 3781 const int iters = 5; 3782 3783 tw32(cpu_base + CPU_STATE, 0xffffffff); 3784 tw32_f(cpu_base + CPU_PC, pc); 3785 3786 for (i = 0; i < iters; i++) { 3787 if (tr32(cpu_base + CPU_PC) == pc) 3788 break; 3789 tw32(cpu_base + CPU_STATE, 0xffffffff); 3790 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3791 tw32_f(cpu_base + CPU_PC, pc); 3792 udelay(1000); 3793 } 3794 3795 return (i == iters) ? -EBUSY : 0; 3796 } 3797 3798 /* tp->lock is held. */ 3799 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3800 { 3801 const struct tg3_firmware_hdr *fw_hdr; 3802 int err; 3803 3804 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3805 3806 /* Firmware blob starts with version numbers, followed by 3807 start address and length. We are setting complete length. 3808 length = end_address_of_bss - start_address_of_text. 3809 Remainder is the blob to be loaded contiguously 3810 from start address. */ 3811 3812 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3813 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3814 fw_hdr); 3815 if (err) 3816 return err; 3817 3818 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3819 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3820 fw_hdr); 3821 if (err) 3822 return err; 3823 3824 /* Now startup only the RX cpu. */ 3825 err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE, 3826 be32_to_cpu(fw_hdr->base_addr)); 3827 if (err) { 3828 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3829 "should be %08x\n", __func__, 3830 tr32(RX_CPU_BASE + CPU_PC), 3831 be32_to_cpu(fw_hdr->base_addr)); 3832 return -ENODEV; 3833 } 3834 3835 tg3_rxcpu_resume(tp); 3836 3837 return 0; 3838 } 3839 3840 static int tg3_validate_rxcpu_state(struct tg3 *tp) 3841 { 3842 const int iters = 1000; 3843 int i; 3844 u32 val; 3845 3846 /* Wait for boot code to complete initialization and enter service 3847 * loop. It is then safe to download service patches 3848 */ 3849 for (i = 0; i < iters; i++) { 3850 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP) 3851 break; 3852 3853 udelay(10); 3854 } 3855 3856 if (i == iters) { 3857 netdev_err(tp->dev, "Boot code not ready for service patches\n"); 3858 return -EBUSY; 3859 } 3860 3861 val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE); 3862 if (val & 0xff) { 3863 netdev_warn(tp->dev, 3864 "Other patches exist. Not downloading EEE patch\n"); 3865 return -EEXIST; 3866 } 3867 3868 return 0; 3869 } 3870 3871 /* tp->lock is held. */ 3872 static void tg3_load_57766_firmware(struct tg3 *tp) 3873 { 3874 struct tg3_firmware_hdr *fw_hdr; 3875 3876 if (!tg3_flag(tp, NO_NVRAM)) 3877 return; 3878 3879 if (tg3_validate_rxcpu_state(tp)) 3880 return; 3881 3882 if (!tp->fw) 3883 return; 3884 3885 /* This firmware blob has a different format than older firmware 3886 * releases as given below. The main difference is we have fragmented 3887 * data to be written to non-contiguous locations. 3888 * 3889 * In the beginning we have a firmware header identical to other 3890 * firmware which consists of version, base addr and length. The length 3891 * here is unused and set to 0xffffffff. 3892 * 3893 * This is followed by a series of firmware fragments which are 3894 * individually identical to previous firmware. i.e. they have the 3895 * firmware header and followed by data for that fragment. The version 3896 * field of the individual fragment header is unused. 3897 */ 3898 3899 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3900 if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR) 3901 return; 3902 3903 if (tg3_rxcpu_pause(tp)) 3904 return; 3905 3906 /* tg3_load_firmware_cpu() will always succeed for the 57766 */ 3907 tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr); 3908 3909 tg3_rxcpu_resume(tp); 3910 } 3911 3912 /* tp->lock is held. */ 3913 static int tg3_load_tso_firmware(struct tg3 *tp) 3914 { 3915 const struct tg3_firmware_hdr *fw_hdr; 3916 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3917 int err; 3918 3919 if (!tg3_flag(tp, FW_TSO)) 3920 return 0; 3921 3922 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 3923 3924 /* Firmware blob starts with version numbers, followed by 3925 start address and length. We are setting complete length. 3926 length = end_address_of_bss - start_address_of_text. 3927 Remainder is the blob to be loaded contiguously 3928 from start address. */ 3929 3930 cpu_scratch_size = tp->fw_len; 3931 3932 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 3933 cpu_base = RX_CPU_BASE; 3934 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3935 } else { 3936 cpu_base = TX_CPU_BASE; 3937 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3938 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3939 } 3940 3941 err = tg3_load_firmware_cpu(tp, cpu_base, 3942 cpu_scratch_base, cpu_scratch_size, 3943 fw_hdr); 3944 if (err) 3945 return err; 3946 3947 /* Now startup the cpu. */ 3948 err = tg3_pause_cpu_and_set_pc(tp, cpu_base, 3949 be32_to_cpu(fw_hdr->base_addr)); 3950 if (err) { 3951 netdev_err(tp->dev, 3952 "%s fails to set CPU PC, is %08x should be %08x\n", 3953 __func__, tr32(cpu_base + CPU_PC), 3954 be32_to_cpu(fw_hdr->base_addr)); 3955 return -ENODEV; 3956 } 3957 3958 tg3_resume_cpu(tp, cpu_base); 3959 return 0; 3960 } 3961 3962 /* tp->lock is held. */ 3963 static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index) 3964 { 3965 u32 addr_high, addr_low; 3966 3967 addr_high = ((mac_addr[0] << 8) | mac_addr[1]); 3968 addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) | 3969 (mac_addr[4] << 8) | mac_addr[5]); 3970 3971 if (index < 4) { 3972 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high); 3973 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low); 3974 } else { 3975 index -= 4; 3976 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high); 3977 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low); 3978 } 3979 } 3980 3981 /* tp->lock is held. */ 3982 static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) 3983 { 3984 u32 addr_high; 3985 int i; 3986 3987 for (i = 0; i < 4; i++) { 3988 if (i == 1 && skip_mac_1) 3989 continue; 3990 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3991 } 3992 3993 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 3994 tg3_asic_rev(tp) == ASIC_REV_5704) { 3995 for (i = 4; i < 16; i++) 3996 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); 3997 } 3998 3999 addr_high = (tp->dev->dev_addr[0] + 4000 tp->dev->dev_addr[1] + 4001 tp->dev->dev_addr[2] + 4002 tp->dev->dev_addr[3] + 4003 tp->dev->dev_addr[4] + 4004 tp->dev->dev_addr[5]) & 4005 TX_BACKOFF_SEED_MASK; 4006 tw32(MAC_TX_BACKOFF_SEED, addr_high); 4007 } 4008 4009 static void tg3_enable_register_access(struct tg3 *tp) 4010 { 4011 /* 4012 * Make sure register accesses (indirect or otherwise) will function 4013 * correctly. 4014 */ 4015 pci_write_config_dword(tp->pdev, 4016 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 4017 } 4018 4019 static int tg3_power_up(struct tg3 *tp) 4020 { 4021 int err; 4022 4023 tg3_enable_register_access(tp); 4024 4025 err = pci_set_power_state(tp->pdev, PCI_D0); 4026 if (!err) { 4027 /* Switch out of Vaux if it is a NIC */ 4028 tg3_pwrsrc_switch_to_vmain(tp); 4029 } else { 4030 netdev_err(tp->dev, "Transition to D0 failed\n"); 4031 } 4032 4033 return err; 4034 } 4035 4036 static int tg3_setup_phy(struct tg3 *, bool); 4037 4038 static int tg3_power_down_prepare(struct tg3 *tp) 4039 { 4040 u32 misc_host_ctrl; 4041 bool device_should_wake, do_low_power; 4042 4043 tg3_enable_register_access(tp); 4044 4045 /* Restore the CLKREQ setting. */ 4046 if (tg3_flag(tp, CLKREQ_BUG)) 4047 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 4048 PCI_EXP_LNKCTL_CLKREQ_EN); 4049 4050 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 4051 tw32(TG3PCI_MISC_HOST_CTRL, 4052 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 4053 4054 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 4055 tg3_flag(tp, WOL_ENABLE); 4056 4057 if (tg3_flag(tp, USE_PHYLIB)) { 4058 do_low_power = false; 4059 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 4060 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4061 struct phy_device *phydev; 4062 u32 phyid, advertising; 4063 4064 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 4065 4066 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4067 4068 tp->link_config.speed = phydev->speed; 4069 tp->link_config.duplex = phydev->duplex; 4070 tp->link_config.autoneg = phydev->autoneg; 4071 tp->link_config.advertising = phydev->advertising; 4072 4073 advertising = ADVERTISED_TP | 4074 ADVERTISED_Pause | 4075 ADVERTISED_Autoneg | 4076 ADVERTISED_10baseT_Half; 4077 4078 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 4079 if (tg3_flag(tp, WOL_SPEED_100MB)) 4080 advertising |= 4081 ADVERTISED_100baseT_Half | 4082 ADVERTISED_100baseT_Full | 4083 ADVERTISED_10baseT_Full; 4084 else 4085 advertising |= ADVERTISED_10baseT_Full; 4086 } 4087 4088 phydev->advertising = advertising; 4089 4090 phy_start_aneg(phydev); 4091 4092 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 4093 if (phyid != PHY_ID_BCMAC131) { 4094 phyid &= PHY_BCM_OUI_MASK; 4095 if (phyid == PHY_BCM_OUI_1 || 4096 phyid == PHY_BCM_OUI_2 || 4097 phyid == PHY_BCM_OUI_3) 4098 do_low_power = true; 4099 } 4100 } 4101 } else { 4102 do_low_power = true; 4103 4104 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 4105 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 4106 4107 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 4108 tg3_setup_phy(tp, false); 4109 } 4110 4111 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 4112 u32 val; 4113 4114 val = tr32(GRC_VCPU_EXT_CTRL); 4115 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 4116 } else if (!tg3_flag(tp, ENABLE_ASF)) { 4117 int i; 4118 u32 val; 4119 4120 for (i = 0; i < 200; i++) { 4121 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 4122 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 4123 break; 4124 msleep(1); 4125 } 4126 } 4127 if (tg3_flag(tp, WOL_CAP)) 4128 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 4129 WOL_DRV_STATE_SHUTDOWN | 4130 WOL_DRV_WOL | 4131 WOL_SET_MAGIC_PKT); 4132 4133 if (device_should_wake) { 4134 u32 mac_mode; 4135 4136 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 4137 if (do_low_power && 4138 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 4139 tg3_phy_auxctl_write(tp, 4140 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 4141 MII_TG3_AUXCTL_PCTL_WOL_EN | 4142 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 4143 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 4144 udelay(40); 4145 } 4146 4147 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4148 mac_mode = MAC_MODE_PORT_MODE_GMII; 4149 else if (tp->phy_flags & 4150 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) { 4151 if (tp->link_config.active_speed == SPEED_1000) 4152 mac_mode = MAC_MODE_PORT_MODE_GMII; 4153 else 4154 mac_mode = MAC_MODE_PORT_MODE_MII; 4155 } else 4156 mac_mode = MAC_MODE_PORT_MODE_MII; 4157 4158 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 4159 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 4160 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 4161 SPEED_100 : SPEED_10; 4162 if (tg3_5700_link_polarity(tp, speed)) 4163 mac_mode |= MAC_MODE_LINK_POLARITY; 4164 else 4165 mac_mode &= ~MAC_MODE_LINK_POLARITY; 4166 } 4167 } else { 4168 mac_mode = MAC_MODE_PORT_MODE_TBI; 4169 } 4170 4171 if (!tg3_flag(tp, 5750_PLUS)) 4172 tw32(MAC_LED_CTRL, tp->led_ctrl); 4173 4174 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 4175 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 4176 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 4177 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 4178 4179 if (tg3_flag(tp, ENABLE_APE)) 4180 mac_mode |= MAC_MODE_APE_TX_EN | 4181 MAC_MODE_APE_RX_EN | 4182 MAC_MODE_TDE_ENABLE; 4183 4184 tw32_f(MAC_MODE, mac_mode); 4185 udelay(100); 4186 4187 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 4188 udelay(10); 4189 } 4190 4191 if (!tg3_flag(tp, WOL_SPEED_100MB) && 4192 (tg3_asic_rev(tp) == ASIC_REV_5700 || 4193 tg3_asic_rev(tp) == ASIC_REV_5701)) { 4194 u32 base_val; 4195 4196 base_val = tp->pci_clock_ctrl; 4197 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 4198 CLOCK_CTRL_TXCLK_DISABLE); 4199 4200 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 4201 CLOCK_CTRL_PWRDOWN_PLL133, 40); 4202 } else if (tg3_flag(tp, 5780_CLASS) || 4203 tg3_flag(tp, CPMU_PRESENT) || 4204 tg3_asic_rev(tp) == ASIC_REV_5906) { 4205 /* do nothing */ 4206 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 4207 u32 newbits1, newbits2; 4208 4209 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4210 tg3_asic_rev(tp) == ASIC_REV_5701) { 4211 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 4212 CLOCK_CTRL_TXCLK_DISABLE | 4213 CLOCK_CTRL_ALTCLK); 4214 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4215 } else if (tg3_flag(tp, 5705_PLUS)) { 4216 newbits1 = CLOCK_CTRL_625_CORE; 4217 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 4218 } else { 4219 newbits1 = CLOCK_CTRL_ALTCLK; 4220 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 4221 } 4222 4223 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 4224 40); 4225 4226 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 4227 40); 4228 4229 if (!tg3_flag(tp, 5705_PLUS)) { 4230 u32 newbits3; 4231 4232 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4233 tg3_asic_rev(tp) == ASIC_REV_5701) { 4234 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 4235 CLOCK_CTRL_TXCLK_DISABLE | 4236 CLOCK_CTRL_44MHZ_CORE); 4237 } else { 4238 newbits3 = CLOCK_CTRL_44MHZ_CORE; 4239 } 4240 4241 tw32_wait_f(TG3PCI_CLOCK_CTRL, 4242 tp->pci_clock_ctrl | newbits3, 40); 4243 } 4244 } 4245 4246 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 4247 tg3_power_down_phy(tp, do_low_power); 4248 4249 tg3_frob_aux_power(tp, true); 4250 4251 /* Workaround for unstable PLL clock */ 4252 if ((!tg3_flag(tp, IS_SSB_CORE)) && 4253 ((tg3_chip_rev(tp) == CHIPREV_5750_AX) || 4254 (tg3_chip_rev(tp) == CHIPREV_5750_BX))) { 4255 u32 val = tr32(0x7d00); 4256 4257 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 4258 tw32(0x7d00, val); 4259 if (!tg3_flag(tp, ENABLE_ASF)) { 4260 int err; 4261 4262 err = tg3_nvram_lock(tp); 4263 tg3_halt_cpu(tp, RX_CPU_BASE); 4264 if (!err) 4265 tg3_nvram_unlock(tp); 4266 } 4267 } 4268 4269 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 4270 4271 tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN); 4272 4273 return 0; 4274 } 4275 4276 static void tg3_power_down(struct tg3 *tp) 4277 { 4278 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 4279 pci_set_power_state(tp->pdev, PCI_D3hot); 4280 } 4281 4282 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) 4283 { 4284 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 4285 case MII_TG3_AUX_STAT_10HALF: 4286 *speed = SPEED_10; 4287 *duplex = DUPLEX_HALF; 4288 break; 4289 4290 case MII_TG3_AUX_STAT_10FULL: 4291 *speed = SPEED_10; 4292 *duplex = DUPLEX_FULL; 4293 break; 4294 4295 case MII_TG3_AUX_STAT_100HALF: 4296 *speed = SPEED_100; 4297 *duplex = DUPLEX_HALF; 4298 break; 4299 4300 case MII_TG3_AUX_STAT_100FULL: 4301 *speed = SPEED_100; 4302 *duplex = DUPLEX_FULL; 4303 break; 4304 4305 case MII_TG3_AUX_STAT_1000HALF: 4306 *speed = SPEED_1000; 4307 *duplex = DUPLEX_HALF; 4308 break; 4309 4310 case MII_TG3_AUX_STAT_1000FULL: 4311 *speed = SPEED_1000; 4312 *duplex = DUPLEX_FULL; 4313 break; 4314 4315 default: 4316 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4317 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 4318 SPEED_10; 4319 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 4320 DUPLEX_HALF; 4321 break; 4322 } 4323 *speed = SPEED_UNKNOWN; 4324 *duplex = DUPLEX_UNKNOWN; 4325 break; 4326 } 4327 } 4328 4329 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 4330 { 4331 int err = 0; 4332 u32 val, new_adv; 4333 4334 new_adv = ADVERTISE_CSMA; 4335 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 4336 new_adv |= mii_advertise_flowctrl(flowctrl); 4337 4338 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 4339 if (err) 4340 goto done; 4341 4342 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4343 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 4344 4345 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4346 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) 4347 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4348 4349 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 4350 if (err) 4351 goto done; 4352 } 4353 4354 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4355 goto done; 4356 4357 tw32(TG3_CPMU_EEE_MODE, 4358 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 4359 4360 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 4361 if (!err) { 4362 u32 err2; 4363 4364 val = 0; 4365 /* Advertise 100-BaseTX EEE ability */ 4366 if (advertise & ADVERTISED_100baseT_Full) 4367 val |= MDIO_AN_EEE_ADV_100TX; 4368 /* Advertise 1000-BaseT EEE ability */ 4369 if (advertise & ADVERTISED_1000baseT_Full) 4370 val |= MDIO_AN_EEE_ADV_1000T; 4371 4372 if (!tp->eee.eee_enabled) { 4373 val = 0; 4374 tp->eee.advertised = 0; 4375 } else { 4376 tp->eee.advertised = advertise & 4377 (ADVERTISED_100baseT_Full | 4378 ADVERTISED_1000baseT_Full); 4379 } 4380 4381 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 4382 if (err) 4383 val = 0; 4384 4385 switch (tg3_asic_rev(tp)) { 4386 case ASIC_REV_5717: 4387 case ASIC_REV_57765: 4388 case ASIC_REV_57766: 4389 case ASIC_REV_5719: 4390 /* If we advertised any eee advertisements above... */ 4391 if (val) 4392 val = MII_TG3_DSP_TAP26_ALNOKO | 4393 MII_TG3_DSP_TAP26_RMRXSTO | 4394 MII_TG3_DSP_TAP26_OPCSINPT; 4395 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 4396 /* Fall through */ 4397 case ASIC_REV_5720: 4398 case ASIC_REV_5762: 4399 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 4400 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 4401 MII_TG3_DSP_CH34TP2_HIBW01); 4402 } 4403 4404 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false); 4405 if (!err) 4406 err = err2; 4407 } 4408 4409 done: 4410 return err; 4411 } 4412 4413 static void tg3_phy_copper_begin(struct tg3 *tp) 4414 { 4415 if (tp->link_config.autoneg == AUTONEG_ENABLE || 4416 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4417 u32 adv, fc; 4418 4419 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4420 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4421 adv = ADVERTISED_10baseT_Half | 4422 ADVERTISED_10baseT_Full; 4423 if (tg3_flag(tp, WOL_SPEED_100MB)) 4424 adv |= ADVERTISED_100baseT_Half | 4425 ADVERTISED_100baseT_Full; 4426 if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) { 4427 if (!(tp->phy_flags & 4428 TG3_PHYFLG_DISABLE_1G_HD_ADV)) 4429 adv |= ADVERTISED_1000baseT_Half; 4430 adv |= ADVERTISED_1000baseT_Full; 4431 } 4432 4433 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 4434 } else { 4435 adv = tp->link_config.advertising; 4436 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 4437 adv &= ~(ADVERTISED_1000baseT_Half | 4438 ADVERTISED_1000baseT_Full); 4439 4440 fc = tp->link_config.flowctrl; 4441 } 4442 4443 tg3_phy_autoneg_cfg(tp, adv, fc); 4444 4445 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 4446 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) { 4447 /* Normally during power down we want to autonegotiate 4448 * the lowest possible speed for WOL. However, to avoid 4449 * link flap, we leave it untouched. 4450 */ 4451 return; 4452 } 4453 4454 tg3_writephy(tp, MII_BMCR, 4455 BMCR_ANENABLE | BMCR_ANRESTART); 4456 } else { 4457 int i; 4458 u32 bmcr, orig_bmcr; 4459 4460 tp->link_config.active_speed = tp->link_config.speed; 4461 tp->link_config.active_duplex = tp->link_config.duplex; 4462 4463 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 4464 /* With autoneg disabled, 5715 only links up when the 4465 * advertisement register has the configured speed 4466 * enabled. 4467 */ 4468 tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL); 4469 } 4470 4471 bmcr = 0; 4472 switch (tp->link_config.speed) { 4473 default: 4474 case SPEED_10: 4475 break; 4476 4477 case SPEED_100: 4478 bmcr |= BMCR_SPEED100; 4479 break; 4480 4481 case SPEED_1000: 4482 bmcr |= BMCR_SPEED1000; 4483 break; 4484 } 4485 4486 if (tp->link_config.duplex == DUPLEX_FULL) 4487 bmcr |= BMCR_FULLDPLX; 4488 4489 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 4490 (bmcr != orig_bmcr)) { 4491 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 4492 for (i = 0; i < 1500; i++) { 4493 u32 tmp; 4494 4495 udelay(10); 4496 if (tg3_readphy(tp, MII_BMSR, &tmp) || 4497 tg3_readphy(tp, MII_BMSR, &tmp)) 4498 continue; 4499 if (!(tmp & BMSR_LSTATUS)) { 4500 udelay(40); 4501 break; 4502 } 4503 } 4504 tg3_writephy(tp, MII_BMCR, bmcr); 4505 udelay(40); 4506 } 4507 } 4508 } 4509 4510 static int tg3_phy_pull_config(struct tg3 *tp) 4511 { 4512 int err; 4513 u32 val; 4514 4515 err = tg3_readphy(tp, MII_BMCR, &val); 4516 if (err) 4517 goto done; 4518 4519 if (!(val & BMCR_ANENABLE)) { 4520 tp->link_config.autoneg = AUTONEG_DISABLE; 4521 tp->link_config.advertising = 0; 4522 tg3_flag_clear(tp, PAUSE_AUTONEG); 4523 4524 err = -EIO; 4525 4526 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) { 4527 case 0: 4528 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4529 goto done; 4530 4531 tp->link_config.speed = SPEED_10; 4532 break; 4533 case BMCR_SPEED100: 4534 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 4535 goto done; 4536 4537 tp->link_config.speed = SPEED_100; 4538 break; 4539 case BMCR_SPEED1000: 4540 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4541 tp->link_config.speed = SPEED_1000; 4542 break; 4543 } 4544 /* Fall through */ 4545 default: 4546 goto done; 4547 } 4548 4549 if (val & BMCR_FULLDPLX) 4550 tp->link_config.duplex = DUPLEX_FULL; 4551 else 4552 tp->link_config.duplex = DUPLEX_HALF; 4553 4554 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX; 4555 4556 err = 0; 4557 goto done; 4558 } 4559 4560 tp->link_config.autoneg = AUTONEG_ENABLE; 4561 tp->link_config.advertising = ADVERTISED_Autoneg; 4562 tg3_flag_set(tp, PAUSE_AUTONEG); 4563 4564 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4565 u32 adv; 4566 4567 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4568 if (err) 4569 goto done; 4570 4571 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL); 4572 tp->link_config.advertising |= adv | ADVERTISED_TP; 4573 4574 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val); 4575 } else { 4576 tp->link_config.advertising |= ADVERTISED_FIBRE; 4577 } 4578 4579 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4580 u32 adv; 4581 4582 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 4583 err = tg3_readphy(tp, MII_CTRL1000, &val); 4584 if (err) 4585 goto done; 4586 4587 adv = mii_ctrl1000_to_ethtool_adv_t(val); 4588 } else { 4589 err = tg3_readphy(tp, MII_ADVERTISE, &val); 4590 if (err) 4591 goto done; 4592 4593 adv = tg3_decode_flowctrl_1000X(val); 4594 tp->link_config.flowctrl = adv; 4595 4596 val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL); 4597 adv = mii_adv_to_ethtool_adv_x(val); 4598 } 4599 4600 tp->link_config.advertising |= adv; 4601 } 4602 4603 done: 4604 return err; 4605 } 4606 4607 static int tg3_init_5401phy_dsp(struct tg3 *tp) 4608 { 4609 int err; 4610 4611 /* Turn off tap power management. */ 4612 /* Set Extended packet length bit */ 4613 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 4614 4615 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 4616 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 4617 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 4618 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 4619 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 4620 4621 udelay(40); 4622 4623 return err; 4624 } 4625 4626 static bool tg3_phy_eee_config_ok(struct tg3 *tp) 4627 { 4628 struct ethtool_eee eee; 4629 4630 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4631 return true; 4632 4633 tg3_eee_pull_config(tp, &eee); 4634 4635 if (tp->eee.eee_enabled) { 4636 if (tp->eee.advertised != eee.advertised || 4637 tp->eee.tx_lpi_timer != eee.tx_lpi_timer || 4638 tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled) 4639 return false; 4640 } else { 4641 /* EEE is disabled but we're advertising */ 4642 if (eee.advertised) 4643 return false; 4644 } 4645 4646 return true; 4647 } 4648 4649 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 4650 { 4651 u32 advmsk, tgtadv, advertising; 4652 4653 advertising = tp->link_config.advertising; 4654 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4655 4656 advmsk = ADVERTISE_ALL; 4657 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4658 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4659 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4660 } 4661 4662 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4663 return false; 4664 4665 if ((*lcladv & advmsk) != tgtadv) 4666 return false; 4667 4668 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4669 u32 tg3_ctrl; 4670 4671 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4672 4673 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4674 return false; 4675 4676 if (tgtadv && 4677 (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4678 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) { 4679 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4680 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4681 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4682 } else { 4683 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4684 } 4685 4686 if (tg3_ctrl != tgtadv) 4687 return false; 4688 } 4689 4690 return true; 4691 } 4692 4693 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4694 { 4695 u32 lpeth = 0; 4696 4697 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4698 u32 val; 4699 4700 if (tg3_readphy(tp, MII_STAT1000, &val)) 4701 return false; 4702 4703 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4704 } 4705 4706 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4707 return false; 4708 4709 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4710 tp->link_config.rmt_adv = lpeth; 4711 4712 return true; 4713 } 4714 4715 static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up) 4716 { 4717 if (curr_link_up != tp->link_up) { 4718 if (curr_link_up) { 4719 netif_carrier_on(tp->dev); 4720 } else { 4721 netif_carrier_off(tp->dev); 4722 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4723 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4724 } 4725 4726 tg3_link_report(tp); 4727 return true; 4728 } 4729 4730 return false; 4731 } 4732 4733 static void tg3_clear_mac_status(struct tg3 *tp) 4734 { 4735 tw32(MAC_EVENT, 0); 4736 4737 tw32_f(MAC_STATUS, 4738 MAC_STATUS_SYNC_CHANGED | 4739 MAC_STATUS_CFG_CHANGED | 4740 MAC_STATUS_MI_COMPLETION | 4741 MAC_STATUS_LNKSTATE_CHANGED); 4742 udelay(40); 4743 } 4744 4745 static void tg3_setup_eee(struct tg3 *tp) 4746 { 4747 u32 val; 4748 4749 val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 4750 TG3_CPMU_EEE_LNKIDL_UART_IDL; 4751 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 4752 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT; 4753 4754 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val); 4755 4756 tw32_f(TG3_CPMU_EEE_CTRL, 4757 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 4758 4759 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 4760 (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) | 4761 TG3_CPMU_EEEMD_LPI_IN_RX | 4762 TG3_CPMU_EEEMD_EEE_ENABLE; 4763 4764 if (tg3_asic_rev(tp) != ASIC_REV_5717) 4765 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 4766 4767 if (tg3_flag(tp, ENABLE_APE)) 4768 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 4769 4770 tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0); 4771 4772 tw32_f(TG3_CPMU_EEE_DBTMR1, 4773 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 4774 (tp->eee.tx_lpi_timer & 0xffff)); 4775 4776 tw32_f(TG3_CPMU_EEE_DBTMR2, 4777 TG3_CPMU_DBTMR2_APE_TX_2047US | 4778 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 4779 } 4780 4781 static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset) 4782 { 4783 bool current_link_up; 4784 u32 bmsr, val; 4785 u32 lcl_adv, rmt_adv; 4786 u16 current_speed; 4787 u8 current_duplex; 4788 int i, err; 4789 4790 tg3_clear_mac_status(tp); 4791 4792 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4793 tw32_f(MAC_MI_MODE, 4794 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4795 udelay(80); 4796 } 4797 4798 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4799 4800 /* Some third-party PHYs need to be reset on link going 4801 * down. 4802 */ 4803 if ((tg3_asic_rev(tp) == ASIC_REV_5703 || 4804 tg3_asic_rev(tp) == ASIC_REV_5704 || 4805 tg3_asic_rev(tp) == ASIC_REV_5705) && 4806 tp->link_up) { 4807 tg3_readphy(tp, MII_BMSR, &bmsr); 4808 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4809 !(bmsr & BMSR_LSTATUS)) 4810 force_reset = true; 4811 } 4812 if (force_reset) 4813 tg3_phy_reset(tp); 4814 4815 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4816 tg3_readphy(tp, MII_BMSR, &bmsr); 4817 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4818 !tg3_flag(tp, INIT_COMPLETE)) 4819 bmsr = 0; 4820 4821 if (!(bmsr & BMSR_LSTATUS)) { 4822 err = tg3_init_5401phy_dsp(tp); 4823 if (err) 4824 return err; 4825 4826 tg3_readphy(tp, MII_BMSR, &bmsr); 4827 for (i = 0; i < 1000; i++) { 4828 udelay(10); 4829 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4830 (bmsr & BMSR_LSTATUS)) { 4831 udelay(40); 4832 break; 4833 } 4834 } 4835 4836 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4837 TG3_PHY_REV_BCM5401_B0 && 4838 !(bmsr & BMSR_LSTATUS) && 4839 tp->link_config.active_speed == SPEED_1000) { 4840 err = tg3_phy_reset(tp); 4841 if (!err) 4842 err = tg3_init_5401phy_dsp(tp); 4843 if (err) 4844 return err; 4845 } 4846 } 4847 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 4848 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) { 4849 /* 5701 {A0,B0} CRC bug workaround */ 4850 tg3_writephy(tp, 0x15, 0x0a75); 4851 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4852 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4853 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4854 } 4855 4856 /* Clear pending interrupts... */ 4857 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4858 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4859 4860 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4861 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4862 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4863 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4864 4865 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 4866 tg3_asic_rev(tp) == ASIC_REV_5701) { 4867 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4868 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4869 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4870 else 4871 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4872 } 4873 4874 current_link_up = false; 4875 current_speed = SPEED_UNKNOWN; 4876 current_duplex = DUPLEX_UNKNOWN; 4877 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4878 tp->link_config.rmt_adv = 0; 4879 4880 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4881 err = tg3_phy_auxctl_read(tp, 4882 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4883 &val); 4884 if (!err && !(val & (1 << 10))) { 4885 tg3_phy_auxctl_write(tp, 4886 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4887 val | (1 << 10)); 4888 goto relink; 4889 } 4890 } 4891 4892 bmsr = 0; 4893 for (i = 0; i < 100; i++) { 4894 tg3_readphy(tp, MII_BMSR, &bmsr); 4895 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4896 (bmsr & BMSR_LSTATUS)) 4897 break; 4898 udelay(40); 4899 } 4900 4901 if (bmsr & BMSR_LSTATUS) { 4902 u32 aux_stat, bmcr; 4903 4904 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4905 for (i = 0; i < 2000; i++) { 4906 udelay(10); 4907 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4908 aux_stat) 4909 break; 4910 } 4911 4912 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4913 ¤t_speed, 4914 ¤t_duplex); 4915 4916 bmcr = 0; 4917 for (i = 0; i < 200; i++) { 4918 tg3_readphy(tp, MII_BMCR, &bmcr); 4919 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4920 continue; 4921 if (bmcr && bmcr != 0x7fff) 4922 break; 4923 udelay(10); 4924 } 4925 4926 lcl_adv = 0; 4927 rmt_adv = 0; 4928 4929 tp->link_config.active_speed = current_speed; 4930 tp->link_config.active_duplex = current_duplex; 4931 4932 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4933 bool eee_config_ok = tg3_phy_eee_config_ok(tp); 4934 4935 if ((bmcr & BMCR_ANENABLE) && 4936 eee_config_ok && 4937 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4938 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4939 current_link_up = true; 4940 4941 /* EEE settings changes take effect only after a phy 4942 * reset. If we have skipped a reset due to Link Flap 4943 * Avoidance being enabled, do it now. 4944 */ 4945 if (!eee_config_ok && 4946 (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 4947 !force_reset) { 4948 tg3_setup_eee(tp); 4949 tg3_phy_reset(tp); 4950 } 4951 } else { 4952 if (!(bmcr & BMCR_ANENABLE) && 4953 tp->link_config.speed == current_speed && 4954 tp->link_config.duplex == current_duplex) { 4955 current_link_up = true; 4956 } 4957 } 4958 4959 if (current_link_up && 4960 tp->link_config.active_duplex == DUPLEX_FULL) { 4961 u32 reg, bit; 4962 4963 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4964 reg = MII_TG3_FET_GEN_STAT; 4965 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4966 } else { 4967 reg = MII_TG3_EXT_STAT; 4968 bit = MII_TG3_EXT_STAT_MDIX; 4969 } 4970 4971 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4972 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4973 4974 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4975 } 4976 } 4977 4978 relink: 4979 if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4980 tg3_phy_copper_begin(tp); 4981 4982 if (tg3_flag(tp, ROBOSWITCH)) { 4983 current_link_up = true; 4984 /* FIXME: when BCM5325 switch is used use 100 MBit/s */ 4985 current_speed = SPEED_1000; 4986 current_duplex = DUPLEX_FULL; 4987 tp->link_config.active_speed = current_speed; 4988 tp->link_config.active_duplex = current_duplex; 4989 } 4990 4991 tg3_readphy(tp, MII_BMSR, &bmsr); 4992 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4993 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4994 current_link_up = true; 4995 } 4996 4997 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4998 if (current_link_up) { 4999 if (tp->link_config.active_speed == SPEED_100 || 5000 tp->link_config.active_speed == SPEED_10) 5001 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5002 else 5003 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5004 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 5005 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5006 else 5007 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5008 5009 /* In order for the 5750 core in BCM4785 chip to work properly 5010 * in RGMII mode, the Led Control Register must be set up. 5011 */ 5012 if (tg3_flag(tp, RGMII_MODE)) { 5013 u32 led_ctrl = tr32(MAC_LED_CTRL); 5014 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON); 5015 5016 if (tp->link_config.active_speed == SPEED_10) 5017 led_ctrl |= LED_CTRL_LNKLED_OVERRIDE; 5018 else if (tp->link_config.active_speed == SPEED_100) 5019 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5020 LED_CTRL_100MBPS_ON); 5021 else if (tp->link_config.active_speed == SPEED_1000) 5022 led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE | 5023 LED_CTRL_1000MBPS_ON); 5024 5025 tw32(MAC_LED_CTRL, led_ctrl); 5026 udelay(40); 5027 } 5028 5029 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5030 if (tp->link_config.active_duplex == DUPLEX_HALF) 5031 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5032 5033 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 5034 if (current_link_up && 5035 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 5036 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 5037 else 5038 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 5039 } 5040 5041 /* ??? Without this setting Netgear GA302T PHY does not 5042 * ??? send/receive packets... 5043 */ 5044 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 5045 tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) { 5046 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 5047 tw32_f(MAC_MI_MODE, tp->mi_mode); 5048 udelay(80); 5049 } 5050 5051 tw32_f(MAC_MODE, tp->mac_mode); 5052 udelay(40); 5053 5054 tg3_phy_eee_adjust(tp, current_link_up); 5055 5056 if (tg3_flag(tp, USE_LINKCHG_REG)) { 5057 /* Polled via timer. */ 5058 tw32_f(MAC_EVENT, 0); 5059 } else { 5060 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5061 } 5062 udelay(40); 5063 5064 if (tg3_asic_rev(tp) == ASIC_REV_5700 && 5065 current_link_up && 5066 tp->link_config.active_speed == SPEED_1000 && 5067 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 5068 udelay(120); 5069 tw32_f(MAC_STATUS, 5070 (MAC_STATUS_SYNC_CHANGED | 5071 MAC_STATUS_CFG_CHANGED)); 5072 udelay(40); 5073 tg3_write_mem(tp, 5074 NIC_SRAM_FIRMWARE_MBOX, 5075 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 5076 } 5077 5078 /* Prevent send BD corruption. */ 5079 if (tg3_flag(tp, CLKREQ_BUG)) { 5080 if (tp->link_config.active_speed == SPEED_100 || 5081 tp->link_config.active_speed == SPEED_10) 5082 pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL, 5083 PCI_EXP_LNKCTL_CLKREQ_EN); 5084 else 5085 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 5086 PCI_EXP_LNKCTL_CLKREQ_EN); 5087 } 5088 5089 tg3_test_and_report_link_chg(tp, current_link_up); 5090 5091 return 0; 5092 } 5093 5094 struct tg3_fiber_aneginfo { 5095 int state; 5096 #define ANEG_STATE_UNKNOWN 0 5097 #define ANEG_STATE_AN_ENABLE 1 5098 #define ANEG_STATE_RESTART_INIT 2 5099 #define ANEG_STATE_RESTART 3 5100 #define ANEG_STATE_DISABLE_LINK_OK 4 5101 #define ANEG_STATE_ABILITY_DETECT_INIT 5 5102 #define ANEG_STATE_ABILITY_DETECT 6 5103 #define ANEG_STATE_ACK_DETECT_INIT 7 5104 #define ANEG_STATE_ACK_DETECT 8 5105 #define ANEG_STATE_COMPLETE_ACK_INIT 9 5106 #define ANEG_STATE_COMPLETE_ACK 10 5107 #define ANEG_STATE_IDLE_DETECT_INIT 11 5108 #define ANEG_STATE_IDLE_DETECT 12 5109 #define ANEG_STATE_LINK_OK 13 5110 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 5111 #define ANEG_STATE_NEXT_PAGE_WAIT 15 5112 5113 u32 flags; 5114 #define MR_AN_ENABLE 0x00000001 5115 #define MR_RESTART_AN 0x00000002 5116 #define MR_AN_COMPLETE 0x00000004 5117 #define MR_PAGE_RX 0x00000008 5118 #define MR_NP_LOADED 0x00000010 5119 #define MR_TOGGLE_TX 0x00000020 5120 #define MR_LP_ADV_FULL_DUPLEX 0x00000040 5121 #define MR_LP_ADV_HALF_DUPLEX 0x00000080 5122 #define MR_LP_ADV_SYM_PAUSE 0x00000100 5123 #define MR_LP_ADV_ASYM_PAUSE 0x00000200 5124 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400 5125 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800 5126 #define MR_LP_ADV_NEXT_PAGE 0x00001000 5127 #define MR_TOGGLE_RX 0x00002000 5128 #define MR_NP_RX 0x00004000 5129 5130 #define MR_LINK_OK 0x80000000 5131 5132 unsigned long link_time, cur_time; 5133 5134 u32 ability_match_cfg; 5135 int ability_match_count; 5136 5137 char ability_match, idle_match, ack_match; 5138 5139 u32 txconfig, rxconfig; 5140 #define ANEG_CFG_NP 0x00000080 5141 #define ANEG_CFG_ACK 0x00000040 5142 #define ANEG_CFG_RF2 0x00000020 5143 #define ANEG_CFG_RF1 0x00000010 5144 #define ANEG_CFG_PS2 0x00000001 5145 #define ANEG_CFG_PS1 0x00008000 5146 #define ANEG_CFG_HD 0x00004000 5147 #define ANEG_CFG_FD 0x00002000 5148 #define ANEG_CFG_INVAL 0x00001f06 5149 5150 }; 5151 #define ANEG_OK 0 5152 #define ANEG_DONE 1 5153 #define ANEG_TIMER_ENAB 2 5154 #define ANEG_FAILED -1 5155 5156 #define ANEG_STATE_SETTLE_TIME 10000 5157 5158 static int tg3_fiber_aneg_smachine(struct tg3 *tp, 5159 struct tg3_fiber_aneginfo *ap) 5160 { 5161 u16 flowctrl; 5162 unsigned long delta; 5163 u32 rx_cfg_reg; 5164 int ret; 5165 5166 if (ap->state == ANEG_STATE_UNKNOWN) { 5167 ap->rxconfig = 0; 5168 ap->link_time = 0; 5169 ap->cur_time = 0; 5170 ap->ability_match_cfg = 0; 5171 ap->ability_match_count = 0; 5172 ap->ability_match = 0; 5173 ap->idle_match = 0; 5174 ap->ack_match = 0; 5175 } 5176 ap->cur_time++; 5177 5178 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 5179 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 5180 5181 if (rx_cfg_reg != ap->ability_match_cfg) { 5182 ap->ability_match_cfg = rx_cfg_reg; 5183 ap->ability_match = 0; 5184 ap->ability_match_count = 0; 5185 } else { 5186 if (++ap->ability_match_count > 1) { 5187 ap->ability_match = 1; 5188 ap->ability_match_cfg = rx_cfg_reg; 5189 } 5190 } 5191 if (rx_cfg_reg & ANEG_CFG_ACK) 5192 ap->ack_match = 1; 5193 else 5194 ap->ack_match = 0; 5195 5196 ap->idle_match = 0; 5197 } else { 5198 ap->idle_match = 1; 5199 ap->ability_match_cfg = 0; 5200 ap->ability_match_count = 0; 5201 ap->ability_match = 0; 5202 ap->ack_match = 0; 5203 5204 rx_cfg_reg = 0; 5205 } 5206 5207 ap->rxconfig = rx_cfg_reg; 5208 ret = ANEG_OK; 5209 5210 switch (ap->state) { 5211 case ANEG_STATE_UNKNOWN: 5212 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 5213 ap->state = ANEG_STATE_AN_ENABLE; 5214 5215 /* fallthru */ 5216 case ANEG_STATE_AN_ENABLE: 5217 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 5218 if (ap->flags & MR_AN_ENABLE) { 5219 ap->link_time = 0; 5220 ap->cur_time = 0; 5221 ap->ability_match_cfg = 0; 5222 ap->ability_match_count = 0; 5223 ap->ability_match = 0; 5224 ap->idle_match = 0; 5225 ap->ack_match = 0; 5226 5227 ap->state = ANEG_STATE_RESTART_INIT; 5228 } else { 5229 ap->state = ANEG_STATE_DISABLE_LINK_OK; 5230 } 5231 break; 5232 5233 case ANEG_STATE_RESTART_INIT: 5234 ap->link_time = ap->cur_time; 5235 ap->flags &= ~(MR_NP_LOADED); 5236 ap->txconfig = 0; 5237 tw32(MAC_TX_AUTO_NEG, 0); 5238 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5239 tw32_f(MAC_MODE, tp->mac_mode); 5240 udelay(40); 5241 5242 ret = ANEG_TIMER_ENAB; 5243 ap->state = ANEG_STATE_RESTART; 5244 5245 /* fallthru */ 5246 case ANEG_STATE_RESTART: 5247 delta = ap->cur_time - ap->link_time; 5248 if (delta > ANEG_STATE_SETTLE_TIME) 5249 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 5250 else 5251 ret = ANEG_TIMER_ENAB; 5252 break; 5253 5254 case ANEG_STATE_DISABLE_LINK_OK: 5255 ret = ANEG_DONE; 5256 break; 5257 5258 case ANEG_STATE_ABILITY_DETECT_INIT: 5259 ap->flags &= ~(MR_TOGGLE_TX); 5260 ap->txconfig = ANEG_CFG_FD; 5261 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5262 if (flowctrl & ADVERTISE_1000XPAUSE) 5263 ap->txconfig |= ANEG_CFG_PS1; 5264 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5265 ap->txconfig |= ANEG_CFG_PS2; 5266 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5267 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5268 tw32_f(MAC_MODE, tp->mac_mode); 5269 udelay(40); 5270 5271 ap->state = ANEG_STATE_ABILITY_DETECT; 5272 break; 5273 5274 case ANEG_STATE_ABILITY_DETECT: 5275 if (ap->ability_match != 0 && ap->rxconfig != 0) 5276 ap->state = ANEG_STATE_ACK_DETECT_INIT; 5277 break; 5278 5279 case ANEG_STATE_ACK_DETECT_INIT: 5280 ap->txconfig |= ANEG_CFG_ACK; 5281 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 5282 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 5283 tw32_f(MAC_MODE, tp->mac_mode); 5284 udelay(40); 5285 5286 ap->state = ANEG_STATE_ACK_DETECT; 5287 5288 /* fallthru */ 5289 case ANEG_STATE_ACK_DETECT: 5290 if (ap->ack_match != 0) { 5291 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 5292 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 5293 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 5294 } else { 5295 ap->state = ANEG_STATE_AN_ENABLE; 5296 } 5297 } else if (ap->ability_match != 0 && 5298 ap->rxconfig == 0) { 5299 ap->state = ANEG_STATE_AN_ENABLE; 5300 } 5301 break; 5302 5303 case ANEG_STATE_COMPLETE_ACK_INIT: 5304 if (ap->rxconfig & ANEG_CFG_INVAL) { 5305 ret = ANEG_FAILED; 5306 break; 5307 } 5308 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 5309 MR_LP_ADV_HALF_DUPLEX | 5310 MR_LP_ADV_SYM_PAUSE | 5311 MR_LP_ADV_ASYM_PAUSE | 5312 MR_LP_ADV_REMOTE_FAULT1 | 5313 MR_LP_ADV_REMOTE_FAULT2 | 5314 MR_LP_ADV_NEXT_PAGE | 5315 MR_TOGGLE_RX | 5316 MR_NP_RX); 5317 if (ap->rxconfig & ANEG_CFG_FD) 5318 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 5319 if (ap->rxconfig & ANEG_CFG_HD) 5320 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 5321 if (ap->rxconfig & ANEG_CFG_PS1) 5322 ap->flags |= MR_LP_ADV_SYM_PAUSE; 5323 if (ap->rxconfig & ANEG_CFG_PS2) 5324 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 5325 if (ap->rxconfig & ANEG_CFG_RF1) 5326 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 5327 if (ap->rxconfig & ANEG_CFG_RF2) 5328 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 5329 if (ap->rxconfig & ANEG_CFG_NP) 5330 ap->flags |= MR_LP_ADV_NEXT_PAGE; 5331 5332 ap->link_time = ap->cur_time; 5333 5334 ap->flags ^= (MR_TOGGLE_TX); 5335 if (ap->rxconfig & 0x0008) 5336 ap->flags |= MR_TOGGLE_RX; 5337 if (ap->rxconfig & ANEG_CFG_NP) 5338 ap->flags |= MR_NP_RX; 5339 ap->flags |= MR_PAGE_RX; 5340 5341 ap->state = ANEG_STATE_COMPLETE_ACK; 5342 ret = ANEG_TIMER_ENAB; 5343 break; 5344 5345 case ANEG_STATE_COMPLETE_ACK: 5346 if (ap->ability_match != 0 && 5347 ap->rxconfig == 0) { 5348 ap->state = ANEG_STATE_AN_ENABLE; 5349 break; 5350 } 5351 delta = ap->cur_time - ap->link_time; 5352 if (delta > ANEG_STATE_SETTLE_TIME) { 5353 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 5354 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5355 } else { 5356 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 5357 !(ap->flags & MR_NP_RX)) { 5358 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 5359 } else { 5360 ret = ANEG_FAILED; 5361 } 5362 } 5363 } 5364 break; 5365 5366 case ANEG_STATE_IDLE_DETECT_INIT: 5367 ap->link_time = ap->cur_time; 5368 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5369 tw32_f(MAC_MODE, tp->mac_mode); 5370 udelay(40); 5371 5372 ap->state = ANEG_STATE_IDLE_DETECT; 5373 ret = ANEG_TIMER_ENAB; 5374 break; 5375 5376 case ANEG_STATE_IDLE_DETECT: 5377 if (ap->ability_match != 0 && 5378 ap->rxconfig == 0) { 5379 ap->state = ANEG_STATE_AN_ENABLE; 5380 break; 5381 } 5382 delta = ap->cur_time - ap->link_time; 5383 if (delta > ANEG_STATE_SETTLE_TIME) { 5384 /* XXX another gem from the Broadcom driver :( */ 5385 ap->state = ANEG_STATE_LINK_OK; 5386 } 5387 break; 5388 5389 case ANEG_STATE_LINK_OK: 5390 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 5391 ret = ANEG_DONE; 5392 break; 5393 5394 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 5395 /* ??? unimplemented */ 5396 break; 5397 5398 case ANEG_STATE_NEXT_PAGE_WAIT: 5399 /* ??? unimplemented */ 5400 break; 5401 5402 default: 5403 ret = ANEG_FAILED; 5404 break; 5405 } 5406 5407 return ret; 5408 } 5409 5410 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 5411 { 5412 int res = 0; 5413 struct tg3_fiber_aneginfo aninfo; 5414 int status = ANEG_FAILED; 5415 unsigned int tick; 5416 u32 tmp; 5417 5418 tw32_f(MAC_TX_AUTO_NEG, 0); 5419 5420 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 5421 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 5422 udelay(40); 5423 5424 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 5425 udelay(40); 5426 5427 memset(&aninfo, 0, sizeof(aninfo)); 5428 aninfo.flags |= MR_AN_ENABLE; 5429 aninfo.state = ANEG_STATE_UNKNOWN; 5430 aninfo.cur_time = 0; 5431 tick = 0; 5432 while (++tick < 195000) { 5433 status = tg3_fiber_aneg_smachine(tp, &aninfo); 5434 if (status == ANEG_DONE || status == ANEG_FAILED) 5435 break; 5436 5437 udelay(1); 5438 } 5439 5440 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 5441 tw32_f(MAC_MODE, tp->mac_mode); 5442 udelay(40); 5443 5444 *txflags = aninfo.txconfig; 5445 *rxflags = aninfo.flags; 5446 5447 if (status == ANEG_DONE && 5448 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 5449 MR_LP_ADV_FULL_DUPLEX))) 5450 res = 1; 5451 5452 return res; 5453 } 5454 5455 static void tg3_init_bcm8002(struct tg3 *tp) 5456 { 5457 u32 mac_status = tr32(MAC_STATUS); 5458 int i; 5459 5460 /* Reset when initting first time or we have a link. */ 5461 if (tg3_flag(tp, INIT_COMPLETE) && 5462 !(mac_status & MAC_STATUS_PCS_SYNCED)) 5463 return; 5464 5465 /* Set PLL lock range. */ 5466 tg3_writephy(tp, 0x16, 0x8007); 5467 5468 /* SW reset */ 5469 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 5470 5471 /* Wait for reset to complete. */ 5472 /* XXX schedule_timeout() ... */ 5473 for (i = 0; i < 500; i++) 5474 udelay(10); 5475 5476 /* Config mode; select PMA/Ch 1 regs. */ 5477 tg3_writephy(tp, 0x10, 0x8411); 5478 5479 /* Enable auto-lock and comdet, select txclk for tx. */ 5480 tg3_writephy(tp, 0x11, 0x0a10); 5481 5482 tg3_writephy(tp, 0x18, 0x00a0); 5483 tg3_writephy(tp, 0x16, 0x41ff); 5484 5485 /* Assert and deassert POR. */ 5486 tg3_writephy(tp, 0x13, 0x0400); 5487 udelay(40); 5488 tg3_writephy(tp, 0x13, 0x0000); 5489 5490 tg3_writephy(tp, 0x11, 0x0a50); 5491 udelay(40); 5492 tg3_writephy(tp, 0x11, 0x0a10); 5493 5494 /* Wait for signal to stabilize */ 5495 /* XXX schedule_timeout() ... */ 5496 for (i = 0; i < 15000; i++) 5497 udelay(10); 5498 5499 /* Deselect the channel register so we can read the PHYID 5500 * later. 5501 */ 5502 tg3_writephy(tp, 0x10, 0x8011); 5503 } 5504 5505 static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 5506 { 5507 u16 flowctrl; 5508 bool current_link_up; 5509 u32 sg_dig_ctrl, sg_dig_status; 5510 u32 serdes_cfg, expected_sg_dig_ctrl; 5511 int workaround, port_a; 5512 5513 serdes_cfg = 0; 5514 expected_sg_dig_ctrl = 0; 5515 workaround = 0; 5516 port_a = 1; 5517 current_link_up = false; 5518 5519 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 && 5520 tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) { 5521 workaround = 1; 5522 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 5523 port_a = 0; 5524 5525 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 5526 /* preserve bits 20-23 for voltage regulator */ 5527 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 5528 } 5529 5530 sg_dig_ctrl = tr32(SG_DIG_CTRL); 5531 5532 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 5533 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 5534 if (workaround) { 5535 u32 val = serdes_cfg; 5536 5537 if (port_a) 5538 val |= 0xc010000; 5539 else 5540 val |= 0x4010000; 5541 tw32_f(MAC_SERDES_CFG, val); 5542 } 5543 5544 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5545 } 5546 if (mac_status & MAC_STATUS_PCS_SYNCED) { 5547 tg3_setup_flow_control(tp, 0, 0); 5548 current_link_up = true; 5549 } 5550 goto out; 5551 } 5552 5553 /* Want auto-negotiation. */ 5554 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 5555 5556 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5557 if (flowctrl & ADVERTISE_1000XPAUSE) 5558 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 5559 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 5560 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 5561 5562 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 5563 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 5564 tp->serdes_counter && 5565 ((mac_status & (MAC_STATUS_PCS_SYNCED | 5566 MAC_STATUS_RCVD_CFG)) == 5567 MAC_STATUS_PCS_SYNCED)) { 5568 tp->serdes_counter--; 5569 current_link_up = true; 5570 goto out; 5571 } 5572 restart_autoneg: 5573 if (workaround) 5574 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 5575 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 5576 udelay(5); 5577 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 5578 5579 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5580 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5581 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 5582 MAC_STATUS_SIGNAL_DET)) { 5583 sg_dig_status = tr32(SG_DIG_STATUS); 5584 mac_status = tr32(MAC_STATUS); 5585 5586 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 5587 (mac_status & MAC_STATUS_PCS_SYNCED)) { 5588 u32 local_adv = 0, remote_adv = 0; 5589 5590 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 5591 local_adv |= ADVERTISE_1000XPAUSE; 5592 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 5593 local_adv |= ADVERTISE_1000XPSE_ASYM; 5594 5595 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 5596 remote_adv |= LPA_1000XPAUSE; 5597 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 5598 remote_adv |= LPA_1000XPAUSE_ASYM; 5599 5600 tp->link_config.rmt_adv = 5601 mii_adv_to_ethtool_adv_x(remote_adv); 5602 5603 tg3_setup_flow_control(tp, local_adv, remote_adv); 5604 current_link_up = true; 5605 tp->serdes_counter = 0; 5606 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5607 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 5608 if (tp->serdes_counter) 5609 tp->serdes_counter--; 5610 else { 5611 if (workaround) { 5612 u32 val = serdes_cfg; 5613 5614 if (port_a) 5615 val |= 0xc010000; 5616 else 5617 val |= 0x4010000; 5618 5619 tw32_f(MAC_SERDES_CFG, val); 5620 } 5621 5622 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5623 udelay(40); 5624 5625 /* Link parallel detection - link is up */ 5626 /* only if we have PCS_SYNC and not */ 5627 /* receiving config code words */ 5628 mac_status = tr32(MAC_STATUS); 5629 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 5630 !(mac_status & MAC_STATUS_RCVD_CFG)) { 5631 tg3_setup_flow_control(tp, 0, 0); 5632 current_link_up = true; 5633 tp->phy_flags |= 5634 TG3_PHYFLG_PARALLEL_DETECT; 5635 tp->serdes_counter = 5636 SERDES_PARALLEL_DET_TIMEOUT; 5637 } else 5638 goto restart_autoneg; 5639 } 5640 } 5641 } else { 5642 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5643 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5644 } 5645 5646 out: 5647 return current_link_up; 5648 } 5649 5650 static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 5651 { 5652 bool current_link_up = false; 5653 5654 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 5655 goto out; 5656 5657 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5658 u32 txflags, rxflags; 5659 int i; 5660 5661 if (fiber_autoneg(tp, &txflags, &rxflags)) { 5662 u32 local_adv = 0, remote_adv = 0; 5663 5664 if (txflags & ANEG_CFG_PS1) 5665 local_adv |= ADVERTISE_1000XPAUSE; 5666 if (txflags & ANEG_CFG_PS2) 5667 local_adv |= ADVERTISE_1000XPSE_ASYM; 5668 5669 if (rxflags & MR_LP_ADV_SYM_PAUSE) 5670 remote_adv |= LPA_1000XPAUSE; 5671 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 5672 remote_adv |= LPA_1000XPAUSE_ASYM; 5673 5674 tp->link_config.rmt_adv = 5675 mii_adv_to_ethtool_adv_x(remote_adv); 5676 5677 tg3_setup_flow_control(tp, local_adv, remote_adv); 5678 5679 current_link_up = true; 5680 } 5681 for (i = 0; i < 30; i++) { 5682 udelay(20); 5683 tw32_f(MAC_STATUS, 5684 (MAC_STATUS_SYNC_CHANGED | 5685 MAC_STATUS_CFG_CHANGED)); 5686 udelay(40); 5687 if ((tr32(MAC_STATUS) & 5688 (MAC_STATUS_SYNC_CHANGED | 5689 MAC_STATUS_CFG_CHANGED)) == 0) 5690 break; 5691 } 5692 5693 mac_status = tr32(MAC_STATUS); 5694 if (!current_link_up && 5695 (mac_status & MAC_STATUS_PCS_SYNCED) && 5696 !(mac_status & MAC_STATUS_RCVD_CFG)) 5697 current_link_up = true; 5698 } else { 5699 tg3_setup_flow_control(tp, 0, 0); 5700 5701 /* Forcing 1000FD link up. */ 5702 current_link_up = true; 5703 5704 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 5705 udelay(40); 5706 5707 tw32_f(MAC_MODE, tp->mac_mode); 5708 udelay(40); 5709 } 5710 5711 out: 5712 return current_link_up; 5713 } 5714 5715 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset) 5716 { 5717 u32 orig_pause_cfg; 5718 u16 orig_active_speed; 5719 u8 orig_active_duplex; 5720 u32 mac_status; 5721 bool current_link_up; 5722 int i; 5723 5724 orig_pause_cfg = tp->link_config.active_flowctrl; 5725 orig_active_speed = tp->link_config.active_speed; 5726 orig_active_duplex = tp->link_config.active_duplex; 5727 5728 if (!tg3_flag(tp, HW_AUTONEG) && 5729 tp->link_up && 5730 tg3_flag(tp, INIT_COMPLETE)) { 5731 mac_status = tr32(MAC_STATUS); 5732 mac_status &= (MAC_STATUS_PCS_SYNCED | 5733 MAC_STATUS_SIGNAL_DET | 5734 MAC_STATUS_CFG_CHANGED | 5735 MAC_STATUS_RCVD_CFG); 5736 if (mac_status == (MAC_STATUS_PCS_SYNCED | 5737 MAC_STATUS_SIGNAL_DET)) { 5738 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5739 MAC_STATUS_CFG_CHANGED)); 5740 return 0; 5741 } 5742 } 5743 5744 tw32_f(MAC_TX_AUTO_NEG, 0); 5745 5746 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5747 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5748 tw32_f(MAC_MODE, tp->mac_mode); 5749 udelay(40); 5750 5751 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5752 tg3_init_bcm8002(tp); 5753 5754 /* Enable link change event even when serdes polling. */ 5755 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5756 udelay(40); 5757 5758 current_link_up = false; 5759 tp->link_config.rmt_adv = 0; 5760 mac_status = tr32(MAC_STATUS); 5761 5762 if (tg3_flag(tp, HW_AUTONEG)) 5763 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5764 else 5765 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5766 5767 tp->napi[0].hw_status->status = 5768 (SD_STATUS_UPDATED | 5769 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5770 5771 for (i = 0; i < 100; i++) { 5772 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5773 MAC_STATUS_CFG_CHANGED)); 5774 udelay(5); 5775 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5776 MAC_STATUS_CFG_CHANGED | 5777 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5778 break; 5779 } 5780 5781 mac_status = tr32(MAC_STATUS); 5782 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5783 current_link_up = false; 5784 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5785 tp->serdes_counter == 0) { 5786 tw32_f(MAC_MODE, (tp->mac_mode | 5787 MAC_MODE_SEND_CONFIGS)); 5788 udelay(1); 5789 tw32_f(MAC_MODE, tp->mac_mode); 5790 } 5791 } 5792 5793 if (current_link_up) { 5794 tp->link_config.active_speed = SPEED_1000; 5795 tp->link_config.active_duplex = DUPLEX_FULL; 5796 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5797 LED_CTRL_LNKLED_OVERRIDE | 5798 LED_CTRL_1000MBPS_ON)); 5799 } else { 5800 tp->link_config.active_speed = SPEED_UNKNOWN; 5801 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5802 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5803 LED_CTRL_LNKLED_OVERRIDE | 5804 LED_CTRL_TRAFFIC_OVERRIDE)); 5805 } 5806 5807 if (!tg3_test_and_report_link_chg(tp, current_link_up)) { 5808 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5809 if (orig_pause_cfg != now_pause_cfg || 5810 orig_active_speed != tp->link_config.active_speed || 5811 orig_active_duplex != tp->link_config.active_duplex) 5812 tg3_link_report(tp); 5813 } 5814 5815 return 0; 5816 } 5817 5818 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset) 5819 { 5820 int err = 0; 5821 u32 bmsr, bmcr; 5822 u16 current_speed = SPEED_UNKNOWN; 5823 u8 current_duplex = DUPLEX_UNKNOWN; 5824 bool current_link_up = false; 5825 u32 local_adv, remote_adv, sgsr; 5826 5827 if ((tg3_asic_rev(tp) == ASIC_REV_5719 || 5828 tg3_asic_rev(tp) == ASIC_REV_5720) && 5829 !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) && 5830 (sgsr & SERDES_TG3_SGMII_MODE)) { 5831 5832 if (force_reset) 5833 tg3_phy_reset(tp); 5834 5835 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 5836 5837 if (!(sgsr & SERDES_TG3_LINK_UP)) { 5838 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5839 } else { 5840 current_link_up = true; 5841 if (sgsr & SERDES_TG3_SPEED_1000) { 5842 current_speed = SPEED_1000; 5843 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5844 } else if (sgsr & SERDES_TG3_SPEED_100) { 5845 current_speed = SPEED_100; 5846 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5847 } else { 5848 current_speed = SPEED_10; 5849 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 5850 } 5851 5852 if (sgsr & SERDES_TG3_FULL_DUPLEX) 5853 current_duplex = DUPLEX_FULL; 5854 else 5855 current_duplex = DUPLEX_HALF; 5856 } 5857 5858 tw32_f(MAC_MODE, tp->mac_mode); 5859 udelay(40); 5860 5861 tg3_clear_mac_status(tp); 5862 5863 goto fiber_setup_done; 5864 } 5865 5866 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5867 tw32_f(MAC_MODE, tp->mac_mode); 5868 udelay(40); 5869 5870 tg3_clear_mac_status(tp); 5871 5872 if (force_reset) 5873 tg3_phy_reset(tp); 5874 5875 tp->link_config.rmt_adv = 0; 5876 5877 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5878 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5879 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5880 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5881 bmsr |= BMSR_LSTATUS; 5882 else 5883 bmsr &= ~BMSR_LSTATUS; 5884 } 5885 5886 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5887 5888 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5889 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5890 /* do nothing, just check for link up at the end */ 5891 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5892 u32 adv, newadv; 5893 5894 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5895 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5896 ADVERTISE_1000XPAUSE | 5897 ADVERTISE_1000XPSE_ASYM | 5898 ADVERTISE_SLCT); 5899 5900 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5901 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5902 5903 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5904 tg3_writephy(tp, MII_ADVERTISE, newadv); 5905 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5906 tg3_writephy(tp, MII_BMCR, bmcr); 5907 5908 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5909 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5910 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5911 5912 return err; 5913 } 5914 } else { 5915 u32 new_bmcr; 5916 5917 bmcr &= ~BMCR_SPEED1000; 5918 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5919 5920 if (tp->link_config.duplex == DUPLEX_FULL) 5921 new_bmcr |= BMCR_FULLDPLX; 5922 5923 if (new_bmcr != bmcr) { 5924 /* BMCR_SPEED1000 is a reserved bit that needs 5925 * to be set on write. 5926 */ 5927 new_bmcr |= BMCR_SPEED1000; 5928 5929 /* Force a linkdown */ 5930 if (tp->link_up) { 5931 u32 adv; 5932 5933 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5934 adv &= ~(ADVERTISE_1000XFULL | 5935 ADVERTISE_1000XHALF | 5936 ADVERTISE_SLCT); 5937 tg3_writephy(tp, MII_ADVERTISE, adv); 5938 tg3_writephy(tp, MII_BMCR, bmcr | 5939 BMCR_ANRESTART | 5940 BMCR_ANENABLE); 5941 udelay(10); 5942 tg3_carrier_off(tp); 5943 } 5944 tg3_writephy(tp, MII_BMCR, new_bmcr); 5945 bmcr = new_bmcr; 5946 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5947 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5948 if (tg3_asic_rev(tp) == ASIC_REV_5714) { 5949 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5950 bmsr |= BMSR_LSTATUS; 5951 else 5952 bmsr &= ~BMSR_LSTATUS; 5953 } 5954 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5955 } 5956 } 5957 5958 if (bmsr & BMSR_LSTATUS) { 5959 current_speed = SPEED_1000; 5960 current_link_up = true; 5961 if (bmcr & BMCR_FULLDPLX) 5962 current_duplex = DUPLEX_FULL; 5963 else 5964 current_duplex = DUPLEX_HALF; 5965 5966 local_adv = 0; 5967 remote_adv = 0; 5968 5969 if (bmcr & BMCR_ANENABLE) { 5970 u32 common; 5971 5972 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5973 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5974 common = local_adv & remote_adv; 5975 if (common & (ADVERTISE_1000XHALF | 5976 ADVERTISE_1000XFULL)) { 5977 if (common & ADVERTISE_1000XFULL) 5978 current_duplex = DUPLEX_FULL; 5979 else 5980 current_duplex = DUPLEX_HALF; 5981 5982 tp->link_config.rmt_adv = 5983 mii_adv_to_ethtool_adv_x(remote_adv); 5984 } else if (!tg3_flag(tp, 5780_CLASS)) { 5985 /* Link is up via parallel detect */ 5986 } else { 5987 current_link_up = false; 5988 } 5989 } 5990 } 5991 5992 fiber_setup_done: 5993 if (current_link_up && current_duplex == DUPLEX_FULL) 5994 tg3_setup_flow_control(tp, local_adv, remote_adv); 5995 5996 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5997 if (tp->link_config.active_duplex == DUPLEX_HALF) 5998 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5999 6000 tw32_f(MAC_MODE, tp->mac_mode); 6001 udelay(40); 6002 6003 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 6004 6005 tp->link_config.active_speed = current_speed; 6006 tp->link_config.active_duplex = current_duplex; 6007 6008 tg3_test_and_report_link_chg(tp, current_link_up); 6009 return err; 6010 } 6011 6012 static void tg3_serdes_parallel_detect(struct tg3 *tp) 6013 { 6014 if (tp->serdes_counter) { 6015 /* Give autoneg time to complete. */ 6016 tp->serdes_counter--; 6017 return; 6018 } 6019 6020 if (!tp->link_up && 6021 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 6022 u32 bmcr; 6023 6024 tg3_readphy(tp, MII_BMCR, &bmcr); 6025 if (bmcr & BMCR_ANENABLE) { 6026 u32 phy1, phy2; 6027 6028 /* Select shadow register 0x1f */ 6029 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 6030 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 6031 6032 /* Select expansion interrupt status register */ 6033 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6034 MII_TG3_DSP_EXP1_INT_STAT); 6035 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6036 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6037 6038 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 6039 /* We have signal detect and not receiving 6040 * config code words, link is up by parallel 6041 * detection. 6042 */ 6043 6044 bmcr &= ~BMCR_ANENABLE; 6045 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 6046 tg3_writephy(tp, MII_BMCR, bmcr); 6047 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 6048 } 6049 } 6050 } else if (tp->link_up && 6051 (tp->link_config.autoneg == AUTONEG_ENABLE) && 6052 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 6053 u32 phy2; 6054 6055 /* Select expansion interrupt status register */ 6056 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 6057 MII_TG3_DSP_EXP1_INT_STAT); 6058 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 6059 if (phy2 & 0x20) { 6060 u32 bmcr; 6061 6062 /* Config code words received, turn on autoneg. */ 6063 tg3_readphy(tp, MII_BMCR, &bmcr); 6064 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 6065 6066 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 6067 6068 } 6069 } 6070 } 6071 6072 static int tg3_setup_phy(struct tg3 *tp, bool force_reset) 6073 { 6074 u32 val; 6075 int err; 6076 6077 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 6078 err = tg3_setup_fiber_phy(tp, force_reset); 6079 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 6080 err = tg3_setup_fiber_mii_phy(tp, force_reset); 6081 else 6082 err = tg3_setup_copper_phy(tp, force_reset); 6083 6084 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 6085 u32 scale; 6086 6087 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 6088 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 6089 scale = 65; 6090 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 6091 scale = 6; 6092 else 6093 scale = 12; 6094 6095 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 6096 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 6097 tw32(GRC_MISC_CFG, val); 6098 } 6099 6100 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 6101 (6 << TX_LENGTHS_IPG_SHIFT); 6102 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 6103 tg3_asic_rev(tp) == ASIC_REV_5762) 6104 val |= tr32(MAC_TX_LENGTHS) & 6105 (TX_LENGTHS_JMB_FRM_LEN_MSK | 6106 TX_LENGTHS_CNT_DWN_VAL_MSK); 6107 6108 if (tp->link_config.active_speed == SPEED_1000 && 6109 tp->link_config.active_duplex == DUPLEX_HALF) 6110 tw32(MAC_TX_LENGTHS, val | 6111 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 6112 else 6113 tw32(MAC_TX_LENGTHS, val | 6114 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 6115 6116 if (!tg3_flag(tp, 5705_PLUS)) { 6117 if (tp->link_up) { 6118 tw32(HOSTCC_STAT_COAL_TICKS, 6119 tp->coal.stats_block_coalesce_usecs); 6120 } else { 6121 tw32(HOSTCC_STAT_COAL_TICKS, 0); 6122 } 6123 } 6124 6125 if (tg3_flag(tp, ASPM_WORKAROUND)) { 6126 val = tr32(PCIE_PWR_MGMT_THRESH); 6127 if (!tp->link_up) 6128 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 6129 tp->pwrmgmt_thresh; 6130 else 6131 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 6132 tw32(PCIE_PWR_MGMT_THRESH, val); 6133 } 6134 6135 return err; 6136 } 6137 6138 /* tp->lock must be held */ 6139 static u64 tg3_refclk_read(struct tg3 *tp) 6140 { 6141 u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB); 6142 return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; 6143 } 6144 6145 /* tp->lock must be held */ 6146 static void tg3_refclk_write(struct tg3 *tp, u64 newval) 6147 { 6148 u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6149 6150 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP); 6151 tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff); 6152 tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32); 6153 tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME); 6154 } 6155 6156 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync); 6157 static inline void tg3_full_unlock(struct tg3 *tp); 6158 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) 6159 { 6160 struct tg3 *tp = netdev_priv(dev); 6161 6162 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | 6163 SOF_TIMESTAMPING_RX_SOFTWARE | 6164 SOF_TIMESTAMPING_SOFTWARE; 6165 6166 if (tg3_flag(tp, PTP_CAPABLE)) { 6167 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE | 6168 SOF_TIMESTAMPING_RX_HARDWARE | 6169 SOF_TIMESTAMPING_RAW_HARDWARE; 6170 } 6171 6172 if (tp->ptp_clock) 6173 info->phc_index = ptp_clock_index(tp->ptp_clock); 6174 else 6175 info->phc_index = -1; 6176 6177 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); 6178 6179 info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | 6180 (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) | 6181 (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | 6182 (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT); 6183 return 0; 6184 } 6185 6186 static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) 6187 { 6188 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6189 bool neg_adj = false; 6190 u32 correction = 0; 6191 6192 if (ppb < 0) { 6193 neg_adj = true; 6194 ppb = -ppb; 6195 } 6196 6197 /* Frequency adjustment is performed using hardware with a 24 bit 6198 * accumulator and a programmable correction value. On each clk, the 6199 * correction value gets added to the accumulator and when it 6200 * overflows, the time counter is incremented/decremented. 6201 * 6202 * So conversion from ppb to correction value is 6203 * ppb * (1 << 24) / 1000000000 6204 */ 6205 correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) & 6206 TG3_EAV_REF_CLK_CORRECT_MASK; 6207 6208 tg3_full_lock(tp, 0); 6209 6210 if (correction) 6211 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 6212 TG3_EAV_REF_CLK_CORRECT_EN | 6213 (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction); 6214 else 6215 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); 6216 6217 tg3_full_unlock(tp); 6218 6219 return 0; 6220 } 6221 6222 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) 6223 { 6224 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6225 6226 tg3_full_lock(tp, 0); 6227 tp->ptp_adjust += delta; 6228 tg3_full_unlock(tp); 6229 6230 return 0; 6231 } 6232 6233 static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) 6234 { 6235 u64 ns; 6236 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6237 6238 tg3_full_lock(tp, 0); 6239 ns = tg3_refclk_read(tp); 6240 ns += tp->ptp_adjust; 6241 tg3_full_unlock(tp); 6242 6243 *ts = ns_to_timespec64(ns); 6244 6245 return 0; 6246 } 6247 6248 static int tg3_ptp_settime(struct ptp_clock_info *ptp, 6249 const struct timespec64 *ts) 6250 { 6251 u64 ns; 6252 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6253 6254 ns = timespec64_to_ns(ts); 6255 6256 tg3_full_lock(tp, 0); 6257 tg3_refclk_write(tp, ns); 6258 tp->ptp_adjust = 0; 6259 tg3_full_unlock(tp); 6260 6261 return 0; 6262 } 6263 6264 static int tg3_ptp_enable(struct ptp_clock_info *ptp, 6265 struct ptp_clock_request *rq, int on) 6266 { 6267 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 6268 u32 clock_ctl; 6269 int rval = 0; 6270 6271 switch (rq->type) { 6272 case PTP_CLK_REQ_PEROUT: 6273 if (rq->perout.index != 0) 6274 return -EINVAL; 6275 6276 tg3_full_lock(tp, 0); 6277 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL); 6278 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK; 6279 6280 if (on) { 6281 u64 nsec; 6282 6283 nsec = rq->perout.start.sec * 1000000000ULL + 6284 rq->perout.start.nsec; 6285 6286 if (rq->perout.period.sec || rq->perout.period.nsec) { 6287 netdev_warn(tp->dev, 6288 "Device supports only a one-shot timesync output, period must be 0\n"); 6289 rval = -EINVAL; 6290 goto err_out; 6291 } 6292 6293 if (nsec & (1ULL << 63)) { 6294 netdev_warn(tp->dev, 6295 "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n"); 6296 rval = -EINVAL; 6297 goto err_out; 6298 } 6299 6300 tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff)); 6301 tw32(TG3_EAV_WATCHDOG0_MSB, 6302 TG3_EAV_WATCHDOG0_EN | 6303 ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK)); 6304 6305 tw32(TG3_EAV_REF_CLCK_CTL, 6306 clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0); 6307 } else { 6308 tw32(TG3_EAV_WATCHDOG0_MSB, 0); 6309 tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl); 6310 } 6311 6312 err_out: 6313 tg3_full_unlock(tp); 6314 return rval; 6315 6316 default: 6317 break; 6318 } 6319 6320 return -EOPNOTSUPP; 6321 } 6322 6323 static const struct ptp_clock_info tg3_ptp_caps = { 6324 .owner = THIS_MODULE, 6325 .name = "tg3 clock", 6326 .max_adj = 250000000, 6327 .n_alarm = 0, 6328 .n_ext_ts = 0, 6329 .n_per_out = 1, 6330 .n_pins = 0, 6331 .pps = 0, 6332 .adjfreq = tg3_ptp_adjfreq, 6333 .adjtime = tg3_ptp_adjtime, 6334 .gettime64 = tg3_ptp_gettime, 6335 .settime64 = tg3_ptp_settime, 6336 .enable = tg3_ptp_enable, 6337 }; 6338 6339 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, 6340 struct skb_shared_hwtstamps *timestamp) 6341 { 6342 memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); 6343 timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + 6344 tp->ptp_adjust); 6345 } 6346 6347 /* tp->lock must be held */ 6348 static void tg3_ptp_init(struct tg3 *tp) 6349 { 6350 if (!tg3_flag(tp, PTP_CAPABLE)) 6351 return; 6352 6353 /* Initialize the hardware clock to the system time. */ 6354 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); 6355 tp->ptp_adjust = 0; 6356 tp->ptp_info = tg3_ptp_caps; 6357 } 6358 6359 /* tp->lock must be held */ 6360 static void tg3_ptp_resume(struct tg3 *tp) 6361 { 6362 if (!tg3_flag(tp, PTP_CAPABLE)) 6363 return; 6364 6365 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); 6366 tp->ptp_adjust = 0; 6367 } 6368 6369 static void tg3_ptp_fini(struct tg3 *tp) 6370 { 6371 if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) 6372 return; 6373 6374 ptp_clock_unregister(tp->ptp_clock); 6375 tp->ptp_clock = NULL; 6376 tp->ptp_adjust = 0; 6377 } 6378 6379 static inline int tg3_irq_sync(struct tg3 *tp) 6380 { 6381 return tp->irq_sync; 6382 } 6383 6384 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 6385 { 6386 int i; 6387 6388 dst = (u32 *)((u8 *)dst + off); 6389 for (i = 0; i < len; i += sizeof(u32)) 6390 *dst++ = tr32(off + i); 6391 } 6392 6393 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 6394 { 6395 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 6396 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 6397 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 6398 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 6399 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 6400 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 6401 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 6402 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 6403 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 6404 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 6405 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 6406 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 6407 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 6408 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 6409 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 6410 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 6411 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 6412 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 6413 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 6414 6415 if (tg3_flag(tp, SUPPORT_MSIX)) 6416 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 6417 6418 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 6419 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 6420 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 6421 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 6422 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 6423 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 6424 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 6425 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 6426 6427 if (!tg3_flag(tp, 5705_PLUS)) { 6428 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 6429 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 6430 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 6431 } 6432 6433 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 6434 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 6435 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 6436 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 6437 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 6438 6439 if (tg3_flag(tp, NVRAM)) 6440 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 6441 } 6442 6443 static void tg3_dump_state(struct tg3 *tp) 6444 { 6445 int i; 6446 u32 *regs; 6447 6448 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 6449 if (!regs) 6450 return; 6451 6452 if (tg3_flag(tp, PCI_EXPRESS)) { 6453 /* Read up to but not including private PCI registers */ 6454 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 6455 regs[i / sizeof(u32)] = tr32(i); 6456 } else 6457 tg3_dump_legacy_regs(tp, regs); 6458 6459 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 6460 if (!regs[i + 0] && !regs[i + 1] && 6461 !regs[i + 2] && !regs[i + 3]) 6462 continue; 6463 6464 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 6465 i * 4, 6466 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 6467 } 6468 6469 kfree(regs); 6470 6471 for (i = 0; i < tp->irq_cnt; i++) { 6472 struct tg3_napi *tnapi = &tp->napi[i]; 6473 6474 /* SW status block */ 6475 netdev_err(tp->dev, 6476 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 6477 i, 6478 tnapi->hw_status->status, 6479 tnapi->hw_status->status_tag, 6480 tnapi->hw_status->rx_jumbo_consumer, 6481 tnapi->hw_status->rx_consumer, 6482 tnapi->hw_status->rx_mini_consumer, 6483 tnapi->hw_status->idx[0].rx_producer, 6484 tnapi->hw_status->idx[0].tx_consumer); 6485 6486 netdev_err(tp->dev, 6487 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 6488 i, 6489 tnapi->last_tag, tnapi->last_irq_tag, 6490 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 6491 tnapi->rx_rcb_ptr, 6492 tnapi->prodring.rx_std_prod_idx, 6493 tnapi->prodring.rx_std_cons_idx, 6494 tnapi->prodring.rx_jmb_prod_idx, 6495 tnapi->prodring.rx_jmb_cons_idx); 6496 } 6497 } 6498 6499 /* This is called whenever we suspect that the system chipset is re- 6500 * ordering the sequence of MMIO to the tx send mailbox. The symptom 6501 * is bogus tx completions. We try to recover by setting the 6502 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 6503 * in the workqueue. 6504 */ 6505 static void tg3_tx_recover(struct tg3 *tp) 6506 { 6507 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 6508 tp->write32_tx_mbox == tg3_write_indirect_mbox); 6509 6510 netdev_warn(tp->dev, 6511 "The system may be re-ordering memory-mapped I/O " 6512 "cycles to the network device, attempting to recover. " 6513 "Please report the problem to the driver maintainer " 6514 "and include system chipset information.\n"); 6515 6516 tg3_flag_set(tp, TX_RECOVERY_PENDING); 6517 } 6518 6519 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 6520 { 6521 /* Tell compiler to fetch tx indices from memory. */ 6522 barrier(); 6523 return tnapi->tx_pending - 6524 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 6525 } 6526 6527 /* Tigon3 never reports partial packet sends. So we do not 6528 * need special logic to handle SKBs that have not had all 6529 * of their frags sent yet, like SunGEM does. 6530 */ 6531 static void tg3_tx(struct tg3_napi *tnapi) 6532 { 6533 struct tg3 *tp = tnapi->tp; 6534 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 6535 u32 sw_idx = tnapi->tx_cons; 6536 struct netdev_queue *txq; 6537 int index = tnapi - tp->napi; 6538 unsigned int pkts_compl = 0, bytes_compl = 0; 6539 6540 if (tg3_flag(tp, ENABLE_TSS)) 6541 index--; 6542 6543 txq = netdev_get_tx_queue(tp->dev, index); 6544 6545 while (sw_idx != hw_idx) { 6546 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 6547 struct sk_buff *skb = ri->skb; 6548 int i, tx_bug = 0; 6549 6550 if (unlikely(skb == NULL)) { 6551 tg3_tx_recover(tp); 6552 return; 6553 } 6554 6555 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { 6556 struct skb_shared_hwtstamps timestamp; 6557 u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); 6558 hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; 6559 6560 tg3_hwclock_to_timestamp(tp, hwclock, ×tamp); 6561 6562 skb_tstamp_tx(skb, ×tamp); 6563 } 6564 6565 pci_unmap_single(tp->pdev, 6566 dma_unmap_addr(ri, mapping), 6567 skb_headlen(skb), 6568 PCI_DMA_TODEVICE); 6569 6570 ri->skb = NULL; 6571 6572 while (ri->fragmented) { 6573 ri->fragmented = false; 6574 sw_idx = NEXT_TX(sw_idx); 6575 ri = &tnapi->tx_buffers[sw_idx]; 6576 } 6577 6578 sw_idx = NEXT_TX(sw_idx); 6579 6580 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 6581 ri = &tnapi->tx_buffers[sw_idx]; 6582 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 6583 tx_bug = 1; 6584 6585 pci_unmap_page(tp->pdev, 6586 dma_unmap_addr(ri, mapping), 6587 skb_frag_size(&skb_shinfo(skb)->frags[i]), 6588 PCI_DMA_TODEVICE); 6589 6590 while (ri->fragmented) { 6591 ri->fragmented = false; 6592 sw_idx = NEXT_TX(sw_idx); 6593 ri = &tnapi->tx_buffers[sw_idx]; 6594 } 6595 6596 sw_idx = NEXT_TX(sw_idx); 6597 } 6598 6599 pkts_compl++; 6600 bytes_compl += skb->len; 6601 6602 dev_consume_skb_any(skb); 6603 6604 if (unlikely(tx_bug)) { 6605 tg3_tx_recover(tp); 6606 return; 6607 } 6608 } 6609 6610 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 6611 6612 tnapi->tx_cons = sw_idx; 6613 6614 /* Need to make the tx_cons update visible to tg3_start_xmit() 6615 * before checking for netif_queue_stopped(). Without the 6616 * memory barrier, there is a small possibility that tg3_start_xmit() 6617 * will miss it and cause the queue to be stopped forever. 6618 */ 6619 smp_mb(); 6620 6621 if (unlikely(netif_tx_queue_stopped(txq) && 6622 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 6623 __netif_tx_lock(txq, smp_processor_id()); 6624 if (netif_tx_queue_stopped(txq) && 6625 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 6626 netif_tx_wake_queue(txq); 6627 __netif_tx_unlock(txq); 6628 } 6629 } 6630 6631 static void tg3_frag_free(bool is_frag, void *data) 6632 { 6633 if (is_frag) 6634 skb_free_frag(data); 6635 else 6636 kfree(data); 6637 } 6638 6639 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 6640 { 6641 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 6642 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6643 6644 if (!ri->data) 6645 return; 6646 6647 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), 6648 map_sz, PCI_DMA_FROMDEVICE); 6649 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 6650 ri->data = NULL; 6651 } 6652 6653 6654 /* Returns size of skb allocated or < 0 on error. 6655 * 6656 * We only need to fill in the address because the other members 6657 * of the RX descriptor are invariant, see tg3_init_rings. 6658 * 6659 * Note the purposeful assymetry of cpu vs. chip accesses. For 6660 * posting buffers we only dirty the first cache line of the RX 6661 * descriptor (containing the address). Whereas for the RX status 6662 * buffers the cpu only reads the last cacheline of the RX descriptor 6663 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 6664 */ 6665 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 6666 u32 opaque_key, u32 dest_idx_unmasked, 6667 unsigned int *frag_size) 6668 { 6669 struct tg3_rx_buffer_desc *desc; 6670 struct ring_info *map; 6671 u8 *data; 6672 dma_addr_t mapping; 6673 int skb_size, data_size, dest_idx; 6674 6675 switch (opaque_key) { 6676 case RXD_OPAQUE_RING_STD: 6677 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6678 desc = &tpr->rx_std[dest_idx]; 6679 map = &tpr->rx_std_buffers[dest_idx]; 6680 data_size = tp->rx_pkt_map_sz; 6681 break; 6682 6683 case RXD_OPAQUE_RING_JUMBO: 6684 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6685 desc = &tpr->rx_jmb[dest_idx].std; 6686 map = &tpr->rx_jmb_buffers[dest_idx]; 6687 data_size = TG3_RX_JMB_MAP_SZ; 6688 break; 6689 6690 default: 6691 return -EINVAL; 6692 } 6693 6694 /* Do not overwrite any of the map or rp information 6695 * until we are sure we can commit to a new buffer. 6696 * 6697 * Callers depend upon this behavior and assume that 6698 * we leave everything unchanged if we fail. 6699 */ 6700 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 6701 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6702 if (skb_size <= PAGE_SIZE) { 6703 data = netdev_alloc_frag(skb_size); 6704 *frag_size = skb_size; 6705 } else { 6706 data = kmalloc(skb_size, GFP_ATOMIC); 6707 *frag_size = 0; 6708 } 6709 if (!data) 6710 return -ENOMEM; 6711 6712 mapping = pci_map_single(tp->pdev, 6713 data + TG3_RX_OFFSET(tp), 6714 data_size, 6715 PCI_DMA_FROMDEVICE); 6716 if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) { 6717 tg3_frag_free(skb_size <= PAGE_SIZE, data); 6718 return -EIO; 6719 } 6720 6721 map->data = data; 6722 dma_unmap_addr_set(map, mapping, mapping); 6723 6724 desc->addr_hi = ((u64)mapping >> 32); 6725 desc->addr_lo = ((u64)mapping & 0xffffffff); 6726 6727 return data_size; 6728 } 6729 6730 /* We only need to move over in the address because the other 6731 * members of the RX descriptor are invariant. See notes above 6732 * tg3_alloc_rx_data for full details. 6733 */ 6734 static void tg3_recycle_rx(struct tg3_napi *tnapi, 6735 struct tg3_rx_prodring_set *dpr, 6736 u32 opaque_key, int src_idx, 6737 u32 dest_idx_unmasked) 6738 { 6739 struct tg3 *tp = tnapi->tp; 6740 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 6741 struct ring_info *src_map, *dest_map; 6742 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 6743 int dest_idx; 6744 6745 switch (opaque_key) { 6746 case RXD_OPAQUE_RING_STD: 6747 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6748 dest_desc = &dpr->rx_std[dest_idx]; 6749 dest_map = &dpr->rx_std_buffers[dest_idx]; 6750 src_desc = &spr->rx_std[src_idx]; 6751 src_map = &spr->rx_std_buffers[src_idx]; 6752 break; 6753 6754 case RXD_OPAQUE_RING_JUMBO: 6755 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6756 dest_desc = &dpr->rx_jmb[dest_idx].std; 6757 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 6758 src_desc = &spr->rx_jmb[src_idx].std; 6759 src_map = &spr->rx_jmb_buffers[src_idx]; 6760 break; 6761 6762 default: 6763 return; 6764 } 6765 6766 dest_map->data = src_map->data; 6767 dma_unmap_addr_set(dest_map, mapping, 6768 dma_unmap_addr(src_map, mapping)); 6769 dest_desc->addr_hi = src_desc->addr_hi; 6770 dest_desc->addr_lo = src_desc->addr_lo; 6771 6772 /* Ensure that the update to the skb happens after the physical 6773 * addresses have been transferred to the new BD location. 6774 */ 6775 smp_wmb(); 6776 6777 src_map->data = NULL; 6778 } 6779 6780 /* The RX ring scheme is composed of multiple rings which post fresh 6781 * buffers to the chip, and one special ring the chip uses to report 6782 * status back to the host. 6783 * 6784 * The special ring reports the status of received packets to the 6785 * host. The chip does not write into the original descriptor the 6786 * RX buffer was obtained from. The chip simply takes the original 6787 * descriptor as provided by the host, updates the status and length 6788 * field, then writes this into the next status ring entry. 6789 * 6790 * Each ring the host uses to post buffers to the chip is described 6791 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 6792 * it is first placed into the on-chip ram. When the packet's length 6793 * is known, it walks down the TG3_BDINFO entries to select the ring. 6794 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 6795 * which is within the range of the new packet's length is chosen. 6796 * 6797 * The "separate ring for rx status" scheme may sound queer, but it makes 6798 * sense from a cache coherency perspective. If only the host writes 6799 * to the buffer post rings, and only the chip writes to the rx status 6800 * rings, then cache lines never move beyond shared-modified state. 6801 * If both the host and chip were to write into the same ring, cache line 6802 * eviction could occur since both entities want it in an exclusive state. 6803 */ 6804 static int tg3_rx(struct tg3_napi *tnapi, int budget) 6805 { 6806 struct tg3 *tp = tnapi->tp; 6807 u32 work_mask, rx_std_posted = 0; 6808 u32 std_prod_idx, jmb_prod_idx; 6809 u32 sw_idx = tnapi->rx_rcb_ptr; 6810 u16 hw_idx; 6811 int received; 6812 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 6813 6814 hw_idx = *(tnapi->rx_rcb_prod_idx); 6815 /* 6816 * We need to order the read of hw_idx and the read of 6817 * the opaque cookie. 6818 */ 6819 rmb(); 6820 work_mask = 0; 6821 received = 0; 6822 std_prod_idx = tpr->rx_std_prod_idx; 6823 jmb_prod_idx = tpr->rx_jmb_prod_idx; 6824 while (sw_idx != hw_idx && budget > 0) { 6825 struct ring_info *ri; 6826 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 6827 unsigned int len; 6828 struct sk_buff *skb; 6829 dma_addr_t dma_addr; 6830 u32 opaque_key, desc_idx, *post_ptr; 6831 u8 *data; 6832 u64 tstamp = 0; 6833 6834 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 6835 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 6836 if (opaque_key == RXD_OPAQUE_RING_STD) { 6837 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 6838 dma_addr = dma_unmap_addr(ri, mapping); 6839 data = ri->data; 6840 post_ptr = &std_prod_idx; 6841 rx_std_posted++; 6842 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 6843 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 6844 dma_addr = dma_unmap_addr(ri, mapping); 6845 data = ri->data; 6846 post_ptr = &jmb_prod_idx; 6847 } else 6848 goto next_pkt_nopost; 6849 6850 work_mask |= opaque_key; 6851 6852 if (desc->err_vlan & RXD_ERR_MASK) { 6853 drop_it: 6854 tg3_recycle_rx(tnapi, tpr, opaque_key, 6855 desc_idx, *post_ptr); 6856 drop_it_no_recycle: 6857 /* Other statistics kept track of by card. */ 6858 tp->rx_dropped++; 6859 goto next_pkt; 6860 } 6861 6862 prefetch(data + TG3_RX_OFFSET(tp)); 6863 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 6864 ETH_FCS_LEN; 6865 6866 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6867 RXD_FLAG_PTPSTAT_PTPV1 || 6868 (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6869 RXD_FLAG_PTPSTAT_PTPV2) { 6870 tstamp = tr32(TG3_RX_TSTAMP_LSB); 6871 tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; 6872 } 6873 6874 if (len > TG3_RX_COPY_THRESH(tp)) { 6875 int skb_size; 6876 unsigned int frag_size; 6877 6878 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 6879 *post_ptr, &frag_size); 6880 if (skb_size < 0) 6881 goto drop_it; 6882 6883 pci_unmap_single(tp->pdev, dma_addr, skb_size, 6884 PCI_DMA_FROMDEVICE); 6885 6886 /* Ensure that the update to the data happens 6887 * after the usage of the old DMA mapping. 6888 */ 6889 smp_wmb(); 6890 6891 ri->data = NULL; 6892 6893 skb = build_skb(data, frag_size); 6894 if (!skb) { 6895 tg3_frag_free(frag_size != 0, data); 6896 goto drop_it_no_recycle; 6897 } 6898 skb_reserve(skb, TG3_RX_OFFSET(tp)); 6899 } else { 6900 tg3_recycle_rx(tnapi, tpr, opaque_key, 6901 desc_idx, *post_ptr); 6902 6903 skb = netdev_alloc_skb(tp->dev, 6904 len + TG3_RAW_IP_ALIGN); 6905 if (skb == NULL) 6906 goto drop_it_no_recycle; 6907 6908 skb_reserve(skb, TG3_RAW_IP_ALIGN); 6909 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 6910 memcpy(skb->data, 6911 data + TG3_RX_OFFSET(tp), 6912 len); 6913 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 6914 } 6915 6916 skb_put(skb, len); 6917 if (tstamp) 6918 tg3_hwclock_to_timestamp(tp, tstamp, 6919 skb_hwtstamps(skb)); 6920 6921 if ((tp->dev->features & NETIF_F_RXCSUM) && 6922 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 6923 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 6924 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 6925 skb->ip_summed = CHECKSUM_UNNECESSARY; 6926 else 6927 skb_checksum_none_assert(skb); 6928 6929 skb->protocol = eth_type_trans(skb, tp->dev); 6930 6931 if (len > (tp->dev->mtu + ETH_HLEN) && 6932 skb->protocol != htons(ETH_P_8021Q) && 6933 skb->protocol != htons(ETH_P_8021AD)) { 6934 dev_kfree_skb_any(skb); 6935 goto drop_it_no_recycle; 6936 } 6937 6938 if (desc->type_flags & RXD_FLAG_VLAN && 6939 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6940 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 6941 desc->err_vlan & RXD_VLAN_MASK); 6942 6943 napi_gro_receive(&tnapi->napi, skb); 6944 6945 received++; 6946 budget--; 6947 6948 next_pkt: 6949 (*post_ptr)++; 6950 6951 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6952 tpr->rx_std_prod_idx = std_prod_idx & 6953 tp->rx_std_ring_mask; 6954 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6955 tpr->rx_std_prod_idx); 6956 work_mask &= ~RXD_OPAQUE_RING_STD; 6957 rx_std_posted = 0; 6958 } 6959 next_pkt_nopost: 6960 sw_idx++; 6961 sw_idx &= tp->rx_ret_ring_mask; 6962 6963 /* Refresh hw_idx to see if there is new work */ 6964 if (sw_idx == hw_idx) { 6965 hw_idx = *(tnapi->rx_rcb_prod_idx); 6966 rmb(); 6967 } 6968 } 6969 6970 /* ACK the status ring. */ 6971 tnapi->rx_rcb_ptr = sw_idx; 6972 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6973 6974 /* Refill RX ring(s). */ 6975 if (!tg3_flag(tp, ENABLE_RSS)) { 6976 /* Sync BD data before updating mailbox */ 6977 wmb(); 6978 6979 if (work_mask & RXD_OPAQUE_RING_STD) { 6980 tpr->rx_std_prod_idx = std_prod_idx & 6981 tp->rx_std_ring_mask; 6982 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6983 tpr->rx_std_prod_idx); 6984 } 6985 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 6986 tpr->rx_jmb_prod_idx = jmb_prod_idx & 6987 tp->rx_jmb_ring_mask; 6988 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6989 tpr->rx_jmb_prod_idx); 6990 } 6991 mmiowb(); 6992 } else if (work_mask) { 6993 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 6994 * updated before the producer indices can be updated. 6995 */ 6996 smp_wmb(); 6997 6998 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 6999 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 7000 7001 if (tnapi != &tp->napi[1]) { 7002 tp->rx_refill = true; 7003 napi_schedule(&tp->napi[1].napi); 7004 } 7005 } 7006 7007 return received; 7008 } 7009 7010 static void tg3_poll_link(struct tg3 *tp) 7011 { 7012 /* handle link change and other phy events */ 7013 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 7014 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 7015 7016 if (sblk->status & SD_STATUS_LINK_CHG) { 7017 sblk->status = SD_STATUS_UPDATED | 7018 (sblk->status & ~SD_STATUS_LINK_CHG); 7019 spin_lock(&tp->lock); 7020 if (tg3_flag(tp, USE_PHYLIB)) { 7021 tw32_f(MAC_STATUS, 7022 (MAC_STATUS_SYNC_CHANGED | 7023 MAC_STATUS_CFG_CHANGED | 7024 MAC_STATUS_MI_COMPLETION | 7025 MAC_STATUS_LNKSTATE_CHANGED)); 7026 udelay(40); 7027 } else 7028 tg3_setup_phy(tp, false); 7029 spin_unlock(&tp->lock); 7030 } 7031 } 7032 } 7033 7034 static int tg3_rx_prodring_xfer(struct tg3 *tp, 7035 struct tg3_rx_prodring_set *dpr, 7036 struct tg3_rx_prodring_set *spr) 7037 { 7038 u32 si, di, cpycnt, src_prod_idx; 7039 int i, err = 0; 7040 7041 while (1) { 7042 src_prod_idx = spr->rx_std_prod_idx; 7043 7044 /* Make sure updates to the rx_std_buffers[] entries and the 7045 * standard producer index are seen in the correct order. 7046 */ 7047 smp_rmb(); 7048 7049 if (spr->rx_std_cons_idx == src_prod_idx) 7050 break; 7051 7052 if (spr->rx_std_cons_idx < src_prod_idx) 7053 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 7054 else 7055 cpycnt = tp->rx_std_ring_mask + 1 - 7056 spr->rx_std_cons_idx; 7057 7058 cpycnt = min(cpycnt, 7059 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 7060 7061 si = spr->rx_std_cons_idx; 7062 di = dpr->rx_std_prod_idx; 7063 7064 for (i = di; i < di + cpycnt; i++) { 7065 if (dpr->rx_std_buffers[i].data) { 7066 cpycnt = i - di; 7067 err = -ENOSPC; 7068 break; 7069 } 7070 } 7071 7072 if (!cpycnt) 7073 break; 7074 7075 /* Ensure that updates to the rx_std_buffers ring and the 7076 * shadowed hardware producer ring from tg3_recycle_skb() are 7077 * ordered correctly WRT the skb check above. 7078 */ 7079 smp_rmb(); 7080 7081 memcpy(&dpr->rx_std_buffers[di], 7082 &spr->rx_std_buffers[si], 7083 cpycnt * sizeof(struct ring_info)); 7084 7085 for (i = 0; i < cpycnt; i++, di++, si++) { 7086 struct tg3_rx_buffer_desc *sbd, *dbd; 7087 sbd = &spr->rx_std[si]; 7088 dbd = &dpr->rx_std[di]; 7089 dbd->addr_hi = sbd->addr_hi; 7090 dbd->addr_lo = sbd->addr_lo; 7091 } 7092 7093 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 7094 tp->rx_std_ring_mask; 7095 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 7096 tp->rx_std_ring_mask; 7097 } 7098 7099 while (1) { 7100 src_prod_idx = spr->rx_jmb_prod_idx; 7101 7102 /* Make sure updates to the rx_jmb_buffers[] entries and 7103 * the jumbo producer index are seen in the correct order. 7104 */ 7105 smp_rmb(); 7106 7107 if (spr->rx_jmb_cons_idx == src_prod_idx) 7108 break; 7109 7110 if (spr->rx_jmb_cons_idx < src_prod_idx) 7111 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 7112 else 7113 cpycnt = tp->rx_jmb_ring_mask + 1 - 7114 spr->rx_jmb_cons_idx; 7115 7116 cpycnt = min(cpycnt, 7117 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 7118 7119 si = spr->rx_jmb_cons_idx; 7120 di = dpr->rx_jmb_prod_idx; 7121 7122 for (i = di; i < di + cpycnt; i++) { 7123 if (dpr->rx_jmb_buffers[i].data) { 7124 cpycnt = i - di; 7125 err = -ENOSPC; 7126 break; 7127 } 7128 } 7129 7130 if (!cpycnt) 7131 break; 7132 7133 /* Ensure that updates to the rx_jmb_buffers ring and the 7134 * shadowed hardware producer ring from tg3_recycle_skb() are 7135 * ordered correctly WRT the skb check above. 7136 */ 7137 smp_rmb(); 7138 7139 memcpy(&dpr->rx_jmb_buffers[di], 7140 &spr->rx_jmb_buffers[si], 7141 cpycnt * sizeof(struct ring_info)); 7142 7143 for (i = 0; i < cpycnt; i++, di++, si++) { 7144 struct tg3_rx_buffer_desc *sbd, *dbd; 7145 sbd = &spr->rx_jmb[si].std; 7146 dbd = &dpr->rx_jmb[di].std; 7147 dbd->addr_hi = sbd->addr_hi; 7148 dbd->addr_lo = sbd->addr_lo; 7149 } 7150 7151 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 7152 tp->rx_jmb_ring_mask; 7153 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 7154 tp->rx_jmb_ring_mask; 7155 } 7156 7157 return err; 7158 } 7159 7160 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 7161 { 7162 struct tg3 *tp = tnapi->tp; 7163 7164 /* run TX completion thread */ 7165 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 7166 tg3_tx(tnapi); 7167 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7168 return work_done; 7169 } 7170 7171 if (!tnapi->rx_rcb_prod_idx) 7172 return work_done; 7173 7174 /* run RX thread, within the bounds set by NAPI. 7175 * All RX "locking" is done by ensuring outside 7176 * code synchronizes with tg3->napi.poll() 7177 */ 7178 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 7179 work_done += tg3_rx(tnapi, budget - work_done); 7180 7181 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 7182 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 7183 int i, err = 0; 7184 u32 std_prod_idx = dpr->rx_std_prod_idx; 7185 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 7186 7187 tp->rx_refill = false; 7188 for (i = 1; i <= tp->rxq_cnt; i++) 7189 err |= tg3_rx_prodring_xfer(tp, dpr, 7190 &tp->napi[i].prodring); 7191 7192 wmb(); 7193 7194 if (std_prod_idx != dpr->rx_std_prod_idx) 7195 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 7196 dpr->rx_std_prod_idx); 7197 7198 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 7199 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 7200 dpr->rx_jmb_prod_idx); 7201 7202 mmiowb(); 7203 7204 if (err) 7205 tw32_f(HOSTCC_MODE, tp->coal_now); 7206 } 7207 7208 return work_done; 7209 } 7210 7211 static inline void tg3_reset_task_schedule(struct tg3 *tp) 7212 { 7213 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 7214 schedule_work(&tp->reset_task); 7215 } 7216 7217 static inline void tg3_reset_task_cancel(struct tg3 *tp) 7218 { 7219 cancel_work_sync(&tp->reset_task); 7220 tg3_flag_clear(tp, RESET_TASK_PENDING); 7221 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 7222 } 7223 7224 static int tg3_poll_msix(struct napi_struct *napi, int budget) 7225 { 7226 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7227 struct tg3 *tp = tnapi->tp; 7228 int work_done = 0; 7229 struct tg3_hw_status *sblk = tnapi->hw_status; 7230 7231 while (1) { 7232 work_done = tg3_poll_work(tnapi, work_done, budget); 7233 7234 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7235 goto tx_recovery; 7236 7237 if (unlikely(work_done >= budget)) 7238 break; 7239 7240 /* tp->last_tag is used in tg3_int_reenable() below 7241 * to tell the hw how much work has been processed, 7242 * so we must read it before checking for more work. 7243 */ 7244 tnapi->last_tag = sblk->status_tag; 7245 tnapi->last_irq_tag = tnapi->last_tag; 7246 rmb(); 7247 7248 /* check for RX/TX work to do */ 7249 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 7250 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 7251 7252 /* This test here is not race free, but will reduce 7253 * the number of interrupts by looping again. 7254 */ 7255 if (tnapi == &tp->napi[1] && tp->rx_refill) 7256 continue; 7257 7258 napi_complete_done(napi, work_done); 7259 /* Reenable interrupts. */ 7260 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 7261 7262 /* This test here is synchronized by napi_schedule() 7263 * and napi_complete() to close the race condition. 7264 */ 7265 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 7266 tw32(HOSTCC_MODE, tp->coalesce_mode | 7267 HOSTCC_MODE_ENABLE | 7268 tnapi->coal_now); 7269 } 7270 mmiowb(); 7271 break; 7272 } 7273 } 7274 7275 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7276 return work_done; 7277 7278 tx_recovery: 7279 /* work_done is guaranteed to be less than budget. */ 7280 napi_complete(napi); 7281 tg3_reset_task_schedule(tp); 7282 return work_done; 7283 } 7284 7285 static void tg3_process_error(struct tg3 *tp) 7286 { 7287 u32 val; 7288 bool real_error = false; 7289 7290 if (tg3_flag(tp, ERROR_PROCESSED)) 7291 return; 7292 7293 /* Check Flow Attention register */ 7294 val = tr32(HOSTCC_FLOW_ATTN); 7295 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 7296 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 7297 real_error = true; 7298 } 7299 7300 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 7301 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 7302 real_error = true; 7303 } 7304 7305 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 7306 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 7307 real_error = true; 7308 } 7309 7310 if (!real_error) 7311 return; 7312 7313 tg3_dump_state(tp); 7314 7315 tg3_flag_set(tp, ERROR_PROCESSED); 7316 tg3_reset_task_schedule(tp); 7317 } 7318 7319 static int tg3_poll(struct napi_struct *napi, int budget) 7320 { 7321 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 7322 struct tg3 *tp = tnapi->tp; 7323 int work_done = 0; 7324 struct tg3_hw_status *sblk = tnapi->hw_status; 7325 7326 while (1) { 7327 if (sblk->status & SD_STATUS_ERROR) 7328 tg3_process_error(tp); 7329 7330 tg3_poll_link(tp); 7331 7332 work_done = tg3_poll_work(tnapi, work_done, budget); 7333 7334 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 7335 goto tx_recovery; 7336 7337 if (unlikely(work_done >= budget)) 7338 break; 7339 7340 if (tg3_flag(tp, TAGGED_STATUS)) { 7341 /* tp->last_tag is used in tg3_int_reenable() below 7342 * to tell the hw how much work has been processed, 7343 * so we must read it before checking for more work. 7344 */ 7345 tnapi->last_tag = sblk->status_tag; 7346 tnapi->last_irq_tag = tnapi->last_tag; 7347 rmb(); 7348 } else 7349 sblk->status &= ~SD_STATUS_UPDATED; 7350 7351 if (likely(!tg3_has_work(tnapi))) { 7352 napi_complete_done(napi, work_done); 7353 tg3_int_reenable(tnapi); 7354 break; 7355 } 7356 } 7357 7358 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1); 7359 return work_done; 7360 7361 tx_recovery: 7362 /* work_done is guaranteed to be less than budget. */ 7363 napi_complete(napi); 7364 tg3_reset_task_schedule(tp); 7365 return work_done; 7366 } 7367 7368 static void tg3_napi_disable(struct tg3 *tp) 7369 { 7370 int i; 7371 7372 for (i = tp->irq_cnt - 1; i >= 0; i--) 7373 napi_disable(&tp->napi[i].napi); 7374 } 7375 7376 static void tg3_napi_enable(struct tg3 *tp) 7377 { 7378 int i; 7379 7380 for (i = 0; i < tp->irq_cnt; i++) 7381 napi_enable(&tp->napi[i].napi); 7382 } 7383 7384 static void tg3_napi_init(struct tg3 *tp) 7385 { 7386 int i; 7387 7388 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 7389 for (i = 1; i < tp->irq_cnt; i++) 7390 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 7391 } 7392 7393 static void tg3_napi_fini(struct tg3 *tp) 7394 { 7395 int i; 7396 7397 for (i = 0; i < tp->irq_cnt; i++) 7398 netif_napi_del(&tp->napi[i].napi); 7399 } 7400 7401 static inline void tg3_netif_stop(struct tg3 *tp) 7402 { 7403 netif_trans_update(tp->dev); /* prevent tx timeout */ 7404 tg3_napi_disable(tp); 7405 netif_carrier_off(tp->dev); 7406 netif_tx_disable(tp->dev); 7407 } 7408 7409 /* tp->lock must be held */ 7410 static inline void tg3_netif_start(struct tg3 *tp) 7411 { 7412 tg3_ptp_resume(tp); 7413 7414 /* NOTE: unconditional netif_tx_wake_all_queues is only 7415 * appropriate so long as all callers are assured to 7416 * have free tx slots (such as after tg3_init_hw) 7417 */ 7418 netif_tx_wake_all_queues(tp->dev); 7419 7420 if (tp->link_up) 7421 netif_carrier_on(tp->dev); 7422 7423 tg3_napi_enable(tp); 7424 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 7425 tg3_enable_ints(tp); 7426 } 7427 7428 static void tg3_irq_quiesce(struct tg3 *tp) 7429 __releases(tp->lock) 7430 __acquires(tp->lock) 7431 { 7432 int i; 7433 7434 BUG_ON(tp->irq_sync); 7435 7436 tp->irq_sync = 1; 7437 smp_mb(); 7438 7439 spin_unlock_bh(&tp->lock); 7440 7441 for (i = 0; i < tp->irq_cnt; i++) 7442 synchronize_irq(tp->napi[i].irq_vec); 7443 7444 spin_lock_bh(&tp->lock); 7445 } 7446 7447 /* Fully shutdown all tg3 driver activity elsewhere in the system. 7448 * If irq_sync is non-zero, then the IRQ handler must be synchronized 7449 * with as well. Most of the time, this is not necessary except when 7450 * shutting down the device. 7451 */ 7452 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 7453 { 7454 spin_lock_bh(&tp->lock); 7455 if (irq_sync) 7456 tg3_irq_quiesce(tp); 7457 } 7458 7459 static inline void tg3_full_unlock(struct tg3 *tp) 7460 { 7461 spin_unlock_bh(&tp->lock); 7462 } 7463 7464 /* One-shot MSI handler - Chip automatically disables interrupt 7465 * after sending MSI so driver doesn't have to do it. 7466 */ 7467 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 7468 { 7469 struct tg3_napi *tnapi = dev_id; 7470 struct tg3 *tp = tnapi->tp; 7471 7472 prefetch(tnapi->hw_status); 7473 if (tnapi->rx_rcb) 7474 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7475 7476 if (likely(!tg3_irq_sync(tp))) 7477 napi_schedule(&tnapi->napi); 7478 7479 return IRQ_HANDLED; 7480 } 7481 7482 /* MSI ISR - No need to check for interrupt sharing and no need to 7483 * flush status block and interrupt mailbox. PCI ordering rules 7484 * guarantee that MSI will arrive after the status block. 7485 */ 7486 static irqreturn_t tg3_msi(int irq, void *dev_id) 7487 { 7488 struct tg3_napi *tnapi = dev_id; 7489 struct tg3 *tp = tnapi->tp; 7490 7491 prefetch(tnapi->hw_status); 7492 if (tnapi->rx_rcb) 7493 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7494 /* 7495 * Writing any value to intr-mbox-0 clears PCI INTA# and 7496 * chip-internal interrupt pending events. 7497 * Writing non-zero to intr-mbox-0 additional tells the 7498 * NIC to stop sending us irqs, engaging "in-intr-handler" 7499 * event coalescing. 7500 */ 7501 tw32_mailbox(tnapi->int_mbox, 0x00000001); 7502 if (likely(!tg3_irq_sync(tp))) 7503 napi_schedule(&tnapi->napi); 7504 7505 return IRQ_RETVAL(1); 7506 } 7507 7508 static irqreturn_t tg3_interrupt(int irq, void *dev_id) 7509 { 7510 struct tg3_napi *tnapi = dev_id; 7511 struct tg3 *tp = tnapi->tp; 7512 struct tg3_hw_status *sblk = tnapi->hw_status; 7513 unsigned int handled = 1; 7514 7515 /* In INTx mode, it is possible for the interrupt to arrive at 7516 * the CPU before the status block posted prior to the interrupt. 7517 * Reading the PCI State register will confirm whether the 7518 * interrupt is ours and will flush the status block. 7519 */ 7520 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 7521 if (tg3_flag(tp, CHIP_RESETTING) || 7522 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7523 handled = 0; 7524 goto out; 7525 } 7526 } 7527 7528 /* 7529 * Writing any value to intr-mbox-0 clears PCI INTA# and 7530 * chip-internal interrupt pending events. 7531 * Writing non-zero to intr-mbox-0 additional tells the 7532 * NIC to stop sending us irqs, engaging "in-intr-handler" 7533 * event coalescing. 7534 * 7535 * Flush the mailbox to de-assert the IRQ immediately to prevent 7536 * spurious interrupts. The flush impacts performance but 7537 * excessive spurious interrupts can be worse in some cases. 7538 */ 7539 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7540 if (tg3_irq_sync(tp)) 7541 goto out; 7542 sblk->status &= ~SD_STATUS_UPDATED; 7543 if (likely(tg3_has_work(tnapi))) { 7544 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7545 napi_schedule(&tnapi->napi); 7546 } else { 7547 /* No work, shared interrupt perhaps? re-enable 7548 * interrupts, and flush that PCI write 7549 */ 7550 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 7551 0x00000000); 7552 } 7553 out: 7554 return IRQ_RETVAL(handled); 7555 } 7556 7557 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 7558 { 7559 struct tg3_napi *tnapi = dev_id; 7560 struct tg3 *tp = tnapi->tp; 7561 struct tg3_hw_status *sblk = tnapi->hw_status; 7562 unsigned int handled = 1; 7563 7564 /* In INTx mode, it is possible for the interrupt to arrive at 7565 * the CPU before the status block posted prior to the interrupt. 7566 * Reading the PCI State register will confirm whether the 7567 * interrupt is ours and will flush the status block. 7568 */ 7569 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 7570 if (tg3_flag(tp, CHIP_RESETTING) || 7571 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7572 handled = 0; 7573 goto out; 7574 } 7575 } 7576 7577 /* 7578 * writing any value to intr-mbox-0 clears PCI INTA# and 7579 * chip-internal interrupt pending events. 7580 * writing non-zero to intr-mbox-0 additional tells the 7581 * NIC to stop sending us irqs, engaging "in-intr-handler" 7582 * event coalescing. 7583 * 7584 * Flush the mailbox to de-assert the IRQ immediately to prevent 7585 * spurious interrupts. The flush impacts performance but 7586 * excessive spurious interrupts can be worse in some cases. 7587 */ 7588 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 7589 7590 /* 7591 * In a shared interrupt configuration, sometimes other devices' 7592 * interrupts will scream. We record the current status tag here 7593 * so that the above check can report that the screaming interrupts 7594 * are unhandled. Eventually they will be silenced. 7595 */ 7596 tnapi->last_irq_tag = sblk->status_tag; 7597 7598 if (tg3_irq_sync(tp)) 7599 goto out; 7600 7601 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 7602 7603 napi_schedule(&tnapi->napi); 7604 7605 out: 7606 return IRQ_RETVAL(handled); 7607 } 7608 7609 /* ISR for interrupt test */ 7610 static irqreturn_t tg3_test_isr(int irq, void *dev_id) 7611 { 7612 struct tg3_napi *tnapi = dev_id; 7613 struct tg3 *tp = tnapi->tp; 7614 struct tg3_hw_status *sblk = tnapi->hw_status; 7615 7616 if ((sblk->status & SD_STATUS_UPDATED) || 7617 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 7618 tg3_disable_ints(tp); 7619 return IRQ_RETVAL(1); 7620 } 7621 return IRQ_RETVAL(0); 7622 } 7623 7624 #ifdef CONFIG_NET_POLL_CONTROLLER 7625 static void tg3_poll_controller(struct net_device *dev) 7626 { 7627 int i; 7628 struct tg3 *tp = netdev_priv(dev); 7629 7630 if (tg3_irq_sync(tp)) 7631 return; 7632 7633 for (i = 0; i < tp->irq_cnt; i++) 7634 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 7635 } 7636 #endif 7637 7638 static void tg3_tx_timeout(struct net_device *dev) 7639 { 7640 struct tg3 *tp = netdev_priv(dev); 7641 7642 if (netif_msg_tx_err(tp)) { 7643 netdev_err(dev, "transmit timed out, resetting\n"); 7644 tg3_dump_state(tp); 7645 } 7646 7647 tg3_reset_task_schedule(tp); 7648 } 7649 7650 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 7651 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 7652 { 7653 u32 base = (u32) mapping & 0xffffffff; 7654 7655 return base + len + 8 < base; 7656 } 7657 7658 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes 7659 * of any 4GB boundaries: 4G, 8G, etc 7660 */ 7661 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7662 u32 len, u32 mss) 7663 { 7664 if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) { 7665 u32 base = (u32) mapping & 0xffffffff; 7666 7667 return ((base + len + (mss & 0x3fff)) < base); 7668 } 7669 return 0; 7670 } 7671 7672 /* Test for DMA addresses > 40-bit */ 7673 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 7674 int len) 7675 { 7676 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 7677 if (tg3_flag(tp, 40BIT_DMA_BUG)) 7678 return ((u64) mapping + len) > DMA_BIT_MASK(40); 7679 return 0; 7680 #else 7681 return 0; 7682 #endif 7683 } 7684 7685 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 7686 dma_addr_t mapping, u32 len, u32 flags, 7687 u32 mss, u32 vlan) 7688 { 7689 txbd->addr_hi = ((u64) mapping >> 32); 7690 txbd->addr_lo = ((u64) mapping & 0xffffffff); 7691 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 7692 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 7693 } 7694 7695 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 7696 dma_addr_t map, u32 len, u32 flags, 7697 u32 mss, u32 vlan) 7698 { 7699 struct tg3 *tp = tnapi->tp; 7700 bool hwbug = false; 7701 7702 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 7703 hwbug = true; 7704 7705 if (tg3_4g_overflow_test(map, len)) 7706 hwbug = true; 7707 7708 if (tg3_4g_tso_overflow_test(tp, map, len, mss)) 7709 hwbug = true; 7710 7711 if (tg3_40bit_overflow_test(tp, map, len)) 7712 hwbug = true; 7713 7714 if (tp->dma_limit) { 7715 u32 prvidx = *entry; 7716 u32 tmp_flag = flags & ~TXD_FLAG_END; 7717 while (len > tp->dma_limit && *budget) { 7718 u32 frag_len = tp->dma_limit; 7719 len -= tp->dma_limit; 7720 7721 /* Avoid the 8byte DMA problem */ 7722 if (len <= 8) { 7723 len += tp->dma_limit / 2; 7724 frag_len = tp->dma_limit / 2; 7725 } 7726 7727 tnapi->tx_buffers[*entry].fragmented = true; 7728 7729 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7730 frag_len, tmp_flag, mss, vlan); 7731 *budget -= 1; 7732 prvidx = *entry; 7733 *entry = NEXT_TX(*entry); 7734 7735 map += frag_len; 7736 } 7737 7738 if (len) { 7739 if (*budget) { 7740 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7741 len, flags, mss, vlan); 7742 *budget -= 1; 7743 *entry = NEXT_TX(*entry); 7744 } else { 7745 hwbug = true; 7746 tnapi->tx_buffers[prvidx].fragmented = false; 7747 } 7748 } 7749 } else { 7750 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7751 len, flags, mss, vlan); 7752 *entry = NEXT_TX(*entry); 7753 } 7754 7755 return hwbug; 7756 } 7757 7758 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 7759 { 7760 int i; 7761 struct sk_buff *skb; 7762 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 7763 7764 skb = txb->skb; 7765 txb->skb = NULL; 7766 7767 pci_unmap_single(tnapi->tp->pdev, 7768 dma_unmap_addr(txb, mapping), 7769 skb_headlen(skb), 7770 PCI_DMA_TODEVICE); 7771 7772 while (txb->fragmented) { 7773 txb->fragmented = false; 7774 entry = NEXT_TX(entry); 7775 txb = &tnapi->tx_buffers[entry]; 7776 } 7777 7778 for (i = 0; i <= last; i++) { 7779 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7780 7781 entry = NEXT_TX(entry); 7782 txb = &tnapi->tx_buffers[entry]; 7783 7784 pci_unmap_page(tnapi->tp->pdev, 7785 dma_unmap_addr(txb, mapping), 7786 skb_frag_size(frag), PCI_DMA_TODEVICE); 7787 7788 while (txb->fragmented) { 7789 txb->fragmented = false; 7790 entry = NEXT_TX(entry); 7791 txb = &tnapi->tx_buffers[entry]; 7792 } 7793 } 7794 } 7795 7796 /* Workaround 4GB and 40-bit hardware DMA bugs. */ 7797 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 7798 struct sk_buff **pskb, 7799 u32 *entry, u32 *budget, 7800 u32 base_flags, u32 mss, u32 vlan) 7801 { 7802 struct tg3 *tp = tnapi->tp; 7803 struct sk_buff *new_skb, *skb = *pskb; 7804 dma_addr_t new_addr = 0; 7805 int ret = 0; 7806 7807 if (tg3_asic_rev(tp) != ASIC_REV_5701) 7808 new_skb = skb_copy(skb, GFP_ATOMIC); 7809 else { 7810 int more_headroom = 4 - ((unsigned long)skb->data & 3); 7811 7812 new_skb = skb_copy_expand(skb, 7813 skb_headroom(skb) + more_headroom, 7814 skb_tailroom(skb), GFP_ATOMIC); 7815 } 7816 7817 if (!new_skb) { 7818 ret = -1; 7819 } else { 7820 /* New SKB is guaranteed to be linear. */ 7821 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len, 7822 PCI_DMA_TODEVICE); 7823 /* Make sure the mapping succeeded */ 7824 if (pci_dma_mapping_error(tp->pdev, new_addr)) { 7825 dev_kfree_skb_any(new_skb); 7826 ret = -1; 7827 } else { 7828 u32 save_entry = *entry; 7829 7830 base_flags |= TXD_FLAG_END; 7831 7832 tnapi->tx_buffers[*entry].skb = new_skb; 7833 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 7834 mapping, new_addr); 7835 7836 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 7837 new_skb->len, base_flags, 7838 mss, vlan)) { 7839 tg3_tx_skb_unmap(tnapi, save_entry, -1); 7840 dev_kfree_skb_any(new_skb); 7841 ret = -1; 7842 } 7843 } 7844 } 7845 7846 dev_consume_skb_any(skb); 7847 *pskb = new_skb; 7848 return ret; 7849 } 7850 7851 static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb) 7852 { 7853 /* Check if we will never have enough descriptors, 7854 * as gso_segs can be more than current ring size 7855 */ 7856 return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3; 7857 } 7858 7859 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 7860 7861 /* Use GSO to workaround all TSO packets that meet HW bug conditions 7862 * indicated in tg3_tx_frag_set() 7863 */ 7864 static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi, 7865 struct netdev_queue *txq, struct sk_buff *skb) 7866 { 7867 struct sk_buff *segs, *nskb; 7868 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 7869 7870 /* Estimate the number of fragments in the worst case */ 7871 if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) { 7872 netif_tx_stop_queue(txq); 7873 7874 /* netif_tx_stop_queue() must be done before checking 7875 * checking tx index in tg3_tx_avail() below, because in 7876 * tg3_tx(), we update tx index before checking for 7877 * netif_tx_queue_stopped(). 7878 */ 7879 smp_mb(); 7880 if (tg3_tx_avail(tnapi) <= frag_cnt_est) 7881 return NETDEV_TX_BUSY; 7882 7883 netif_tx_wake_queue(txq); 7884 } 7885 7886 segs = skb_gso_segment(skb, tp->dev->features & 7887 ~(NETIF_F_TSO | NETIF_F_TSO6)); 7888 if (IS_ERR(segs) || !segs) 7889 goto tg3_tso_bug_end; 7890 7891 do { 7892 nskb = segs; 7893 segs = segs->next; 7894 nskb->next = NULL; 7895 tg3_start_xmit(nskb, tp->dev); 7896 } while (segs); 7897 7898 tg3_tso_bug_end: 7899 dev_consume_skb_any(skb); 7900 7901 return NETDEV_TX_OK; 7902 } 7903 7904 /* hard_start_xmit for all devices */ 7905 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 7906 { 7907 struct tg3 *tp = netdev_priv(dev); 7908 u32 len, entry, base_flags, mss, vlan = 0; 7909 u32 budget; 7910 int i = -1, would_hit_hwbug; 7911 dma_addr_t mapping; 7912 struct tg3_napi *tnapi; 7913 struct netdev_queue *txq; 7914 unsigned int last; 7915 struct iphdr *iph = NULL; 7916 struct tcphdr *tcph = NULL; 7917 __sum16 tcp_csum = 0, ip_csum = 0; 7918 __be16 ip_tot_len = 0; 7919 7920 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 7921 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 7922 if (tg3_flag(tp, ENABLE_TSS)) 7923 tnapi++; 7924 7925 budget = tg3_tx_avail(tnapi); 7926 7927 /* We are running in BH disabled context with netif_tx_lock 7928 * and TX reclaim runs via tp->napi.poll inside of a software 7929 * interrupt. Furthermore, IRQ processing runs lockless so we have 7930 * no IRQ context deadlocks to worry about either. Rejoice! 7931 */ 7932 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 7933 if (!netif_tx_queue_stopped(txq)) { 7934 netif_tx_stop_queue(txq); 7935 7936 /* This is a hard error, log it. */ 7937 netdev_err(dev, 7938 "BUG! Tx Ring full when queue awake!\n"); 7939 } 7940 return NETDEV_TX_BUSY; 7941 } 7942 7943 entry = tnapi->tx_prod; 7944 base_flags = 0; 7945 7946 mss = skb_shinfo(skb)->gso_size; 7947 if (mss) { 7948 u32 tcp_opt_len, hdr_len; 7949 7950 if (skb_cow_head(skb, 0)) 7951 goto drop; 7952 7953 iph = ip_hdr(skb); 7954 tcp_opt_len = tcp_optlen(skb); 7955 7956 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 7957 7958 /* HW/FW can not correctly segment packets that have been 7959 * vlan encapsulated. 7960 */ 7961 if (skb->protocol == htons(ETH_P_8021Q) || 7962 skb->protocol == htons(ETH_P_8021AD)) { 7963 if (tg3_tso_bug_gso_check(tnapi, skb)) 7964 return tg3_tso_bug(tp, tnapi, txq, skb); 7965 goto drop; 7966 } 7967 7968 if (!skb_is_gso_v6(skb)) { 7969 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7970 tg3_flag(tp, TSO_BUG)) { 7971 if (tg3_tso_bug_gso_check(tnapi, skb)) 7972 return tg3_tso_bug(tp, tnapi, txq, skb); 7973 goto drop; 7974 } 7975 ip_csum = iph->check; 7976 ip_tot_len = iph->tot_len; 7977 iph->check = 0; 7978 iph->tot_len = htons(mss + hdr_len); 7979 } 7980 7981 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 7982 TXD_FLAG_CPU_POST_DMA); 7983 7984 tcph = tcp_hdr(skb); 7985 tcp_csum = tcph->check; 7986 7987 if (tg3_flag(tp, HW_TSO_1) || 7988 tg3_flag(tp, HW_TSO_2) || 7989 tg3_flag(tp, HW_TSO_3)) { 7990 tcph->check = 0; 7991 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 7992 } else { 7993 tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 7994 0, IPPROTO_TCP, 0); 7995 } 7996 7997 if (tg3_flag(tp, HW_TSO_3)) { 7998 mss |= (hdr_len & 0xc) << 12; 7999 if (hdr_len & 0x10) 8000 base_flags |= 0x00000010; 8001 base_flags |= (hdr_len & 0x3e0) << 5; 8002 } else if (tg3_flag(tp, HW_TSO_2)) 8003 mss |= hdr_len << 9; 8004 else if (tg3_flag(tp, HW_TSO_1) || 8005 tg3_asic_rev(tp) == ASIC_REV_5705) { 8006 if (tcp_opt_len || iph->ihl > 5) { 8007 int tsflags; 8008 8009 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8010 mss |= (tsflags << 11); 8011 } 8012 } else { 8013 if (tcp_opt_len || iph->ihl > 5) { 8014 int tsflags; 8015 8016 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 8017 base_flags |= tsflags << 12; 8018 } 8019 } 8020 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { 8021 /* HW/FW can not correctly checksum packets that have been 8022 * vlan encapsulated. 8023 */ 8024 if (skb->protocol == htons(ETH_P_8021Q) || 8025 skb->protocol == htons(ETH_P_8021AD)) { 8026 if (skb_checksum_help(skb)) 8027 goto drop; 8028 } else { 8029 base_flags |= TXD_FLAG_TCPUDP_CSUM; 8030 } 8031 } 8032 8033 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 8034 !mss && skb->len > VLAN_ETH_FRAME_LEN) 8035 base_flags |= TXD_FLAG_JMB_PKT; 8036 8037 if (skb_vlan_tag_present(skb)) { 8038 base_flags |= TXD_FLAG_VLAN; 8039 vlan = skb_vlan_tag_get(skb); 8040 } 8041 8042 if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && 8043 tg3_flag(tp, TX_TSTAMP_EN)) { 8044 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 8045 base_flags |= TXD_FLAG_HWTSTAMP; 8046 } 8047 8048 len = skb_headlen(skb); 8049 8050 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 8051 if (pci_dma_mapping_error(tp->pdev, mapping)) 8052 goto drop; 8053 8054 8055 tnapi->tx_buffers[entry].skb = skb; 8056 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 8057 8058 would_hit_hwbug = 0; 8059 8060 if (tg3_flag(tp, 5701_DMA_BUG)) 8061 would_hit_hwbug = 1; 8062 8063 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 8064 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 8065 mss, vlan)) { 8066 would_hit_hwbug = 1; 8067 } else if (skb_shinfo(skb)->nr_frags > 0) { 8068 u32 tmp_mss = mss; 8069 8070 if (!tg3_flag(tp, HW_TSO_1) && 8071 !tg3_flag(tp, HW_TSO_2) && 8072 !tg3_flag(tp, HW_TSO_3)) 8073 tmp_mss = 0; 8074 8075 /* Now loop through additional data 8076 * fragments, and queue them. 8077 */ 8078 last = skb_shinfo(skb)->nr_frags - 1; 8079 for (i = 0; i <= last; i++) { 8080 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 8081 8082 len = skb_frag_size(frag); 8083 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 8084 len, DMA_TO_DEVICE); 8085 8086 tnapi->tx_buffers[entry].skb = NULL; 8087 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 8088 mapping); 8089 if (dma_mapping_error(&tp->pdev->dev, mapping)) 8090 goto dma_error; 8091 8092 if (!budget || 8093 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 8094 len, base_flags | 8095 ((i == last) ? TXD_FLAG_END : 0), 8096 tmp_mss, vlan)) { 8097 would_hit_hwbug = 1; 8098 break; 8099 } 8100 } 8101 } 8102 8103 if (would_hit_hwbug) { 8104 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 8105 8106 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) { 8107 /* If it's a TSO packet, do GSO instead of 8108 * allocating and copying to a large linear SKB 8109 */ 8110 if (ip_tot_len) { 8111 iph->check = ip_csum; 8112 iph->tot_len = ip_tot_len; 8113 } 8114 tcph->check = tcp_csum; 8115 return tg3_tso_bug(tp, tnapi, txq, skb); 8116 } 8117 8118 /* If the workaround fails due to memory/mapping 8119 * failure, silently drop this packet. 8120 */ 8121 entry = tnapi->tx_prod; 8122 budget = tg3_tx_avail(tnapi); 8123 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 8124 base_flags, mss, vlan)) 8125 goto drop_nofree; 8126 } 8127 8128 skb_tx_timestamp(skb); 8129 netdev_tx_sent_queue(txq, skb->len); 8130 8131 /* Sync BD data before updating mailbox */ 8132 wmb(); 8133 8134 tnapi->tx_prod = entry; 8135 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 8136 netif_tx_stop_queue(txq); 8137 8138 /* netif_tx_stop_queue() must be done before checking 8139 * checking tx index in tg3_tx_avail() below, because in 8140 * tg3_tx(), we update tx index before checking for 8141 * netif_tx_queue_stopped(). 8142 */ 8143 smp_mb(); 8144 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 8145 netif_tx_wake_queue(txq); 8146 } 8147 8148 if (!skb->xmit_more || netif_xmit_stopped(txq)) { 8149 /* Packets are ready, update Tx producer idx on card. */ 8150 tw32_tx_mbox(tnapi->prodmbox, entry); 8151 mmiowb(); 8152 } 8153 8154 return NETDEV_TX_OK; 8155 8156 dma_error: 8157 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 8158 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 8159 drop: 8160 dev_kfree_skb_any(skb); 8161 drop_nofree: 8162 tp->tx_dropped++; 8163 return NETDEV_TX_OK; 8164 } 8165 8166 static void tg3_mac_loopback(struct tg3 *tp, bool enable) 8167 { 8168 if (enable) { 8169 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 8170 MAC_MODE_PORT_MODE_MASK); 8171 8172 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 8173 8174 if (!tg3_flag(tp, 5705_PLUS)) 8175 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 8176 8177 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 8178 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 8179 else 8180 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 8181 } else { 8182 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 8183 8184 if (tg3_flag(tp, 5705_PLUS) || 8185 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 8186 tg3_asic_rev(tp) == ASIC_REV_5700) 8187 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 8188 } 8189 8190 tw32(MAC_MODE, tp->mac_mode); 8191 udelay(40); 8192 } 8193 8194 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 8195 { 8196 u32 val, bmcr, mac_mode, ptest = 0; 8197 8198 tg3_phy_toggle_apd(tp, false); 8199 tg3_phy_toggle_automdix(tp, false); 8200 8201 if (extlpbk && tg3_phy_set_extloopbk(tp)) 8202 return -EIO; 8203 8204 bmcr = BMCR_FULLDPLX; 8205 switch (speed) { 8206 case SPEED_10: 8207 break; 8208 case SPEED_100: 8209 bmcr |= BMCR_SPEED100; 8210 break; 8211 case SPEED_1000: 8212 default: 8213 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 8214 speed = SPEED_100; 8215 bmcr |= BMCR_SPEED100; 8216 } else { 8217 speed = SPEED_1000; 8218 bmcr |= BMCR_SPEED1000; 8219 } 8220 } 8221 8222 if (extlpbk) { 8223 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 8224 tg3_readphy(tp, MII_CTRL1000, &val); 8225 val |= CTL1000_AS_MASTER | 8226 CTL1000_ENABLE_MASTER; 8227 tg3_writephy(tp, MII_CTRL1000, val); 8228 } else { 8229 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 8230 MII_TG3_FET_PTEST_TRIM_2; 8231 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 8232 } 8233 } else 8234 bmcr |= BMCR_LOOPBACK; 8235 8236 tg3_writephy(tp, MII_BMCR, bmcr); 8237 8238 /* The write needs to be flushed for the FETs */ 8239 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 8240 tg3_readphy(tp, MII_BMCR, &bmcr); 8241 8242 udelay(40); 8243 8244 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 8245 tg3_asic_rev(tp) == ASIC_REV_5785) { 8246 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 8247 MII_TG3_FET_PTEST_FRC_TX_LINK | 8248 MII_TG3_FET_PTEST_FRC_TX_LOCK); 8249 8250 /* The write needs to be flushed for the AC131 */ 8251 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 8252 } 8253 8254 /* Reset to prevent losing 1st rx packet intermittently */ 8255 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 8256 tg3_flag(tp, 5780_CLASS)) { 8257 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8258 udelay(10); 8259 tw32_f(MAC_RX_MODE, tp->rx_mode); 8260 } 8261 8262 mac_mode = tp->mac_mode & 8263 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 8264 if (speed == SPEED_1000) 8265 mac_mode |= MAC_MODE_PORT_MODE_GMII; 8266 else 8267 mac_mode |= MAC_MODE_PORT_MODE_MII; 8268 8269 if (tg3_asic_rev(tp) == ASIC_REV_5700) { 8270 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 8271 8272 if (masked_phy_id == TG3_PHY_ID_BCM5401) 8273 mac_mode &= ~MAC_MODE_LINK_POLARITY; 8274 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 8275 mac_mode |= MAC_MODE_LINK_POLARITY; 8276 8277 tg3_writephy(tp, MII_TG3_EXT_CTRL, 8278 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 8279 } 8280 8281 tw32(MAC_MODE, mac_mode); 8282 udelay(40); 8283 8284 return 0; 8285 } 8286 8287 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 8288 { 8289 struct tg3 *tp = netdev_priv(dev); 8290 8291 if (features & NETIF_F_LOOPBACK) { 8292 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 8293 return; 8294 8295 spin_lock_bh(&tp->lock); 8296 tg3_mac_loopback(tp, true); 8297 netif_carrier_on(tp->dev); 8298 spin_unlock_bh(&tp->lock); 8299 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 8300 } else { 8301 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 8302 return; 8303 8304 spin_lock_bh(&tp->lock); 8305 tg3_mac_loopback(tp, false); 8306 /* Force link status check */ 8307 tg3_setup_phy(tp, true); 8308 spin_unlock_bh(&tp->lock); 8309 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 8310 } 8311 } 8312 8313 static netdev_features_t tg3_fix_features(struct net_device *dev, 8314 netdev_features_t features) 8315 { 8316 struct tg3 *tp = netdev_priv(dev); 8317 8318 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 8319 features &= ~NETIF_F_ALL_TSO; 8320 8321 return features; 8322 } 8323 8324 static int tg3_set_features(struct net_device *dev, netdev_features_t features) 8325 { 8326 netdev_features_t changed = dev->features ^ features; 8327 8328 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 8329 tg3_set_loopback(dev, features); 8330 8331 return 0; 8332 } 8333 8334 static void tg3_rx_prodring_free(struct tg3 *tp, 8335 struct tg3_rx_prodring_set *tpr) 8336 { 8337 int i; 8338 8339 if (tpr != &tp->napi[0].prodring) { 8340 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 8341 i = (i + 1) & tp->rx_std_ring_mask) 8342 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8343 tp->rx_pkt_map_sz); 8344 8345 if (tg3_flag(tp, JUMBO_CAPABLE)) { 8346 for (i = tpr->rx_jmb_cons_idx; 8347 i != tpr->rx_jmb_prod_idx; 8348 i = (i + 1) & tp->rx_jmb_ring_mask) { 8349 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8350 TG3_RX_JMB_MAP_SZ); 8351 } 8352 } 8353 8354 return; 8355 } 8356 8357 for (i = 0; i <= tp->rx_std_ring_mask; i++) 8358 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 8359 tp->rx_pkt_map_sz); 8360 8361 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8362 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 8363 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 8364 TG3_RX_JMB_MAP_SZ); 8365 } 8366 } 8367 8368 /* Initialize rx rings for packet processing. 8369 * 8370 * The chip has been shut down and the driver detached from 8371 * the networking, so no interrupts or new tx packets will 8372 * end up in the driver. tp->{tx,}lock are held and thus 8373 * we may not sleep. 8374 */ 8375 static int tg3_rx_prodring_alloc(struct tg3 *tp, 8376 struct tg3_rx_prodring_set *tpr) 8377 { 8378 u32 i, rx_pkt_dma_sz; 8379 8380 tpr->rx_std_cons_idx = 0; 8381 tpr->rx_std_prod_idx = 0; 8382 tpr->rx_jmb_cons_idx = 0; 8383 tpr->rx_jmb_prod_idx = 0; 8384 8385 if (tpr != &tp->napi[0].prodring) { 8386 memset(&tpr->rx_std_buffers[0], 0, 8387 TG3_RX_STD_BUFF_RING_SIZE(tp)); 8388 if (tpr->rx_jmb_buffers) 8389 memset(&tpr->rx_jmb_buffers[0], 0, 8390 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 8391 goto done; 8392 } 8393 8394 /* Zero out all descriptors. */ 8395 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 8396 8397 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 8398 if (tg3_flag(tp, 5780_CLASS) && 8399 tp->dev->mtu > ETH_DATA_LEN) 8400 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 8401 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 8402 8403 /* Initialize invariants of the rings, we only set this 8404 * stuff once. This works because the card does not 8405 * write into the rx buffer posting rings. 8406 */ 8407 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 8408 struct tg3_rx_buffer_desc *rxd; 8409 8410 rxd = &tpr->rx_std[i]; 8411 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 8412 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 8413 rxd->opaque = (RXD_OPAQUE_RING_STD | 8414 (i << RXD_OPAQUE_INDEX_SHIFT)); 8415 } 8416 8417 /* Now allocate fresh SKBs for each rx ring. */ 8418 for (i = 0; i < tp->rx_pending; i++) { 8419 unsigned int frag_size; 8420 8421 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 8422 &frag_size) < 0) { 8423 netdev_warn(tp->dev, 8424 "Using a smaller RX standard ring. Only " 8425 "%d out of %d buffers were allocated " 8426 "successfully\n", i, tp->rx_pending); 8427 if (i == 0) 8428 goto initfail; 8429 tp->rx_pending = i; 8430 break; 8431 } 8432 } 8433 8434 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8435 goto done; 8436 8437 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 8438 8439 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 8440 goto done; 8441 8442 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 8443 struct tg3_rx_buffer_desc *rxd; 8444 8445 rxd = &tpr->rx_jmb[i].std; 8446 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 8447 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 8448 RXD_FLAG_JUMBO; 8449 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 8450 (i << RXD_OPAQUE_INDEX_SHIFT)); 8451 } 8452 8453 for (i = 0; i < tp->rx_jumbo_pending; i++) { 8454 unsigned int frag_size; 8455 8456 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 8457 &frag_size) < 0) { 8458 netdev_warn(tp->dev, 8459 "Using a smaller RX jumbo ring. Only %d " 8460 "out of %d buffers were allocated " 8461 "successfully\n", i, tp->rx_jumbo_pending); 8462 if (i == 0) 8463 goto initfail; 8464 tp->rx_jumbo_pending = i; 8465 break; 8466 } 8467 } 8468 8469 done: 8470 return 0; 8471 8472 initfail: 8473 tg3_rx_prodring_free(tp, tpr); 8474 return -ENOMEM; 8475 } 8476 8477 static void tg3_rx_prodring_fini(struct tg3 *tp, 8478 struct tg3_rx_prodring_set *tpr) 8479 { 8480 kfree(tpr->rx_std_buffers); 8481 tpr->rx_std_buffers = NULL; 8482 kfree(tpr->rx_jmb_buffers); 8483 tpr->rx_jmb_buffers = NULL; 8484 if (tpr->rx_std) { 8485 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 8486 tpr->rx_std, tpr->rx_std_mapping); 8487 tpr->rx_std = NULL; 8488 } 8489 if (tpr->rx_jmb) { 8490 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 8491 tpr->rx_jmb, tpr->rx_jmb_mapping); 8492 tpr->rx_jmb = NULL; 8493 } 8494 } 8495 8496 static int tg3_rx_prodring_init(struct tg3 *tp, 8497 struct tg3_rx_prodring_set *tpr) 8498 { 8499 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 8500 GFP_KERNEL); 8501 if (!tpr->rx_std_buffers) 8502 return -ENOMEM; 8503 8504 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 8505 TG3_RX_STD_RING_BYTES(tp), 8506 &tpr->rx_std_mapping, 8507 GFP_KERNEL); 8508 if (!tpr->rx_std) 8509 goto err_out; 8510 8511 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 8512 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 8513 GFP_KERNEL); 8514 if (!tpr->rx_jmb_buffers) 8515 goto err_out; 8516 8517 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 8518 TG3_RX_JMB_RING_BYTES(tp), 8519 &tpr->rx_jmb_mapping, 8520 GFP_KERNEL); 8521 if (!tpr->rx_jmb) 8522 goto err_out; 8523 } 8524 8525 return 0; 8526 8527 err_out: 8528 tg3_rx_prodring_fini(tp, tpr); 8529 return -ENOMEM; 8530 } 8531 8532 /* Free up pending packets in all rx/tx rings. 8533 * 8534 * The chip has been shut down and the driver detached from 8535 * the networking, so no interrupts or new tx packets will 8536 * end up in the driver. tp->{tx,}lock is not held and we are not 8537 * in an interrupt context and thus may sleep. 8538 */ 8539 static void tg3_free_rings(struct tg3 *tp) 8540 { 8541 int i, j; 8542 8543 for (j = 0; j < tp->irq_cnt; j++) { 8544 struct tg3_napi *tnapi = &tp->napi[j]; 8545 8546 tg3_rx_prodring_free(tp, &tnapi->prodring); 8547 8548 if (!tnapi->tx_buffers) 8549 continue; 8550 8551 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 8552 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 8553 8554 if (!skb) 8555 continue; 8556 8557 tg3_tx_skb_unmap(tnapi, i, 8558 skb_shinfo(skb)->nr_frags - 1); 8559 8560 dev_consume_skb_any(skb); 8561 } 8562 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 8563 } 8564 } 8565 8566 /* Initialize tx/rx rings for packet processing. 8567 * 8568 * The chip has been shut down and the driver detached from 8569 * the networking, so no interrupts or new tx packets will 8570 * end up in the driver. tp->{tx,}lock are held and thus 8571 * we may not sleep. 8572 */ 8573 static int tg3_init_rings(struct tg3 *tp) 8574 { 8575 int i; 8576 8577 /* Free up all the SKBs. */ 8578 tg3_free_rings(tp); 8579 8580 for (i = 0; i < tp->irq_cnt; i++) { 8581 struct tg3_napi *tnapi = &tp->napi[i]; 8582 8583 tnapi->last_tag = 0; 8584 tnapi->last_irq_tag = 0; 8585 tnapi->hw_status->status = 0; 8586 tnapi->hw_status->status_tag = 0; 8587 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8588 8589 tnapi->tx_prod = 0; 8590 tnapi->tx_cons = 0; 8591 if (tnapi->tx_ring) 8592 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 8593 8594 tnapi->rx_rcb_ptr = 0; 8595 if (tnapi->rx_rcb) 8596 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 8597 8598 if (tnapi->prodring.rx_std && 8599 tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 8600 tg3_free_rings(tp); 8601 return -ENOMEM; 8602 } 8603 } 8604 8605 return 0; 8606 } 8607 8608 static void tg3_mem_tx_release(struct tg3 *tp) 8609 { 8610 int i; 8611 8612 for (i = 0; i < tp->irq_max; i++) { 8613 struct tg3_napi *tnapi = &tp->napi[i]; 8614 8615 if (tnapi->tx_ring) { 8616 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 8617 tnapi->tx_ring, tnapi->tx_desc_mapping); 8618 tnapi->tx_ring = NULL; 8619 } 8620 8621 kfree(tnapi->tx_buffers); 8622 tnapi->tx_buffers = NULL; 8623 } 8624 } 8625 8626 static int tg3_mem_tx_acquire(struct tg3 *tp) 8627 { 8628 int i; 8629 struct tg3_napi *tnapi = &tp->napi[0]; 8630 8631 /* If multivector TSS is enabled, vector 0 does not handle 8632 * tx interrupts. Don't allocate any resources for it. 8633 */ 8634 if (tg3_flag(tp, ENABLE_TSS)) 8635 tnapi++; 8636 8637 for (i = 0; i < tp->txq_cnt; i++, tnapi++) { 8638 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE, 8639 sizeof(struct tg3_tx_ring_info), 8640 GFP_KERNEL); 8641 if (!tnapi->tx_buffers) 8642 goto err_out; 8643 8644 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 8645 TG3_TX_RING_BYTES, 8646 &tnapi->tx_desc_mapping, 8647 GFP_KERNEL); 8648 if (!tnapi->tx_ring) 8649 goto err_out; 8650 } 8651 8652 return 0; 8653 8654 err_out: 8655 tg3_mem_tx_release(tp); 8656 return -ENOMEM; 8657 } 8658 8659 static void tg3_mem_rx_release(struct tg3 *tp) 8660 { 8661 int i; 8662 8663 for (i = 0; i < tp->irq_max; i++) { 8664 struct tg3_napi *tnapi = &tp->napi[i]; 8665 8666 tg3_rx_prodring_fini(tp, &tnapi->prodring); 8667 8668 if (!tnapi->rx_rcb) 8669 continue; 8670 8671 dma_free_coherent(&tp->pdev->dev, 8672 TG3_RX_RCB_RING_BYTES(tp), 8673 tnapi->rx_rcb, 8674 tnapi->rx_rcb_mapping); 8675 tnapi->rx_rcb = NULL; 8676 } 8677 } 8678 8679 static int tg3_mem_rx_acquire(struct tg3 *tp) 8680 { 8681 unsigned int i, limit; 8682 8683 limit = tp->rxq_cnt; 8684 8685 /* If RSS is enabled, we need a (dummy) producer ring 8686 * set on vector zero. This is the true hw prodring. 8687 */ 8688 if (tg3_flag(tp, ENABLE_RSS)) 8689 limit++; 8690 8691 for (i = 0; i < limit; i++) { 8692 struct tg3_napi *tnapi = &tp->napi[i]; 8693 8694 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 8695 goto err_out; 8696 8697 /* If multivector RSS is enabled, vector 0 8698 * does not handle rx or tx interrupts. 8699 * Don't allocate any resources for it. 8700 */ 8701 if (!i && tg3_flag(tp, ENABLE_RSS)) 8702 continue; 8703 8704 tnapi->rx_rcb = dma_zalloc_coherent(&tp->pdev->dev, 8705 TG3_RX_RCB_RING_BYTES(tp), 8706 &tnapi->rx_rcb_mapping, 8707 GFP_KERNEL); 8708 if (!tnapi->rx_rcb) 8709 goto err_out; 8710 } 8711 8712 return 0; 8713 8714 err_out: 8715 tg3_mem_rx_release(tp); 8716 return -ENOMEM; 8717 } 8718 8719 /* 8720 * Must not be invoked with interrupt sources disabled and 8721 * the hardware shutdown down. 8722 */ 8723 static void tg3_free_consistent(struct tg3 *tp) 8724 { 8725 int i; 8726 8727 for (i = 0; i < tp->irq_cnt; i++) { 8728 struct tg3_napi *tnapi = &tp->napi[i]; 8729 8730 if (tnapi->hw_status) { 8731 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 8732 tnapi->hw_status, 8733 tnapi->status_mapping); 8734 tnapi->hw_status = NULL; 8735 } 8736 } 8737 8738 tg3_mem_rx_release(tp); 8739 tg3_mem_tx_release(tp); 8740 8741 /* tp->hw_stats can be referenced safely: 8742 * 1. under rtnl_lock 8743 * 2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set. 8744 */ 8745 if (tp->hw_stats) { 8746 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8747 tp->hw_stats, tp->stats_mapping); 8748 tp->hw_stats = NULL; 8749 } 8750 } 8751 8752 /* 8753 * Must not be invoked with interrupt sources disabled and 8754 * the hardware shutdown down. Can sleep. 8755 */ 8756 static int tg3_alloc_consistent(struct tg3 *tp) 8757 { 8758 int i; 8759 8760 tp->hw_stats = dma_zalloc_coherent(&tp->pdev->dev, 8761 sizeof(struct tg3_hw_stats), 8762 &tp->stats_mapping, GFP_KERNEL); 8763 if (!tp->hw_stats) 8764 goto err_out; 8765 8766 for (i = 0; i < tp->irq_cnt; i++) { 8767 struct tg3_napi *tnapi = &tp->napi[i]; 8768 struct tg3_hw_status *sblk; 8769 8770 tnapi->hw_status = dma_zalloc_coherent(&tp->pdev->dev, 8771 TG3_HW_STATUS_SIZE, 8772 &tnapi->status_mapping, 8773 GFP_KERNEL); 8774 if (!tnapi->hw_status) 8775 goto err_out; 8776 8777 sblk = tnapi->hw_status; 8778 8779 if (tg3_flag(tp, ENABLE_RSS)) { 8780 u16 *prodptr = NULL; 8781 8782 /* 8783 * When RSS is enabled, the status block format changes 8784 * slightly. The "rx_jumbo_consumer", "reserved", 8785 * and "rx_mini_consumer" members get mapped to the 8786 * other three rx return ring producer indexes. 8787 */ 8788 switch (i) { 8789 case 1: 8790 prodptr = &sblk->idx[0].rx_producer; 8791 break; 8792 case 2: 8793 prodptr = &sblk->rx_jumbo_consumer; 8794 break; 8795 case 3: 8796 prodptr = &sblk->reserved; 8797 break; 8798 case 4: 8799 prodptr = &sblk->rx_mini_consumer; 8800 break; 8801 } 8802 tnapi->rx_rcb_prod_idx = prodptr; 8803 } else { 8804 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 8805 } 8806 } 8807 8808 if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp)) 8809 goto err_out; 8810 8811 return 0; 8812 8813 err_out: 8814 tg3_free_consistent(tp); 8815 return -ENOMEM; 8816 } 8817 8818 #define MAX_WAIT_CNT 1000 8819 8820 /* To stop a block, clear the enable bit and poll till it 8821 * clears. tp->lock is held. 8822 */ 8823 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent) 8824 { 8825 unsigned int i; 8826 u32 val; 8827 8828 if (tg3_flag(tp, 5705_PLUS)) { 8829 switch (ofs) { 8830 case RCVLSC_MODE: 8831 case DMAC_MODE: 8832 case MBFREE_MODE: 8833 case BUFMGR_MODE: 8834 case MEMARB_MODE: 8835 /* We can't enable/disable these bits of the 8836 * 5705/5750, just say success. 8837 */ 8838 return 0; 8839 8840 default: 8841 break; 8842 } 8843 } 8844 8845 val = tr32(ofs); 8846 val &= ~enable_bit; 8847 tw32_f(ofs, val); 8848 8849 for (i = 0; i < MAX_WAIT_CNT; i++) { 8850 if (pci_channel_offline(tp->pdev)) { 8851 dev_err(&tp->pdev->dev, 8852 "tg3_stop_block device offline, " 8853 "ofs=%lx enable_bit=%x\n", 8854 ofs, enable_bit); 8855 return -ENODEV; 8856 } 8857 8858 udelay(100); 8859 val = tr32(ofs); 8860 if ((val & enable_bit) == 0) 8861 break; 8862 } 8863 8864 if (i == MAX_WAIT_CNT && !silent) { 8865 dev_err(&tp->pdev->dev, 8866 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 8867 ofs, enable_bit); 8868 return -ENODEV; 8869 } 8870 8871 return 0; 8872 } 8873 8874 /* tp->lock is held. */ 8875 static int tg3_abort_hw(struct tg3 *tp, bool silent) 8876 { 8877 int i, err; 8878 8879 tg3_disable_ints(tp); 8880 8881 if (pci_channel_offline(tp->pdev)) { 8882 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE); 8883 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8884 err = -ENODEV; 8885 goto err_no_dev; 8886 } 8887 8888 tp->rx_mode &= ~RX_MODE_ENABLE; 8889 tw32_f(MAC_RX_MODE, tp->rx_mode); 8890 udelay(10); 8891 8892 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 8893 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 8894 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 8895 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 8896 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 8897 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 8898 8899 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 8900 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 8901 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 8902 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 8903 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 8904 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 8905 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 8906 8907 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8908 tw32_f(MAC_MODE, tp->mac_mode); 8909 udelay(40); 8910 8911 tp->tx_mode &= ~TX_MODE_ENABLE; 8912 tw32_f(MAC_TX_MODE, tp->tx_mode); 8913 8914 for (i = 0; i < MAX_WAIT_CNT; i++) { 8915 udelay(100); 8916 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 8917 break; 8918 } 8919 if (i >= MAX_WAIT_CNT) { 8920 dev_err(&tp->pdev->dev, 8921 "%s timed out, TX_MODE_ENABLE will not clear " 8922 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 8923 err |= -ENODEV; 8924 } 8925 8926 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 8927 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 8928 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 8929 8930 tw32(FTQ_RESET, 0xffffffff); 8931 tw32(FTQ_RESET, 0x00000000); 8932 8933 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 8934 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 8935 8936 err_no_dev: 8937 for (i = 0; i < tp->irq_cnt; i++) { 8938 struct tg3_napi *tnapi = &tp->napi[i]; 8939 if (tnapi->hw_status) 8940 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8941 } 8942 8943 return err; 8944 } 8945 8946 /* Save PCI command register before chip reset */ 8947 static void tg3_save_pci_state(struct tg3 *tp) 8948 { 8949 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 8950 } 8951 8952 /* Restore PCI state after chip reset */ 8953 static void tg3_restore_pci_state(struct tg3 *tp) 8954 { 8955 u32 val; 8956 8957 /* Re-enable indirect register accesses. */ 8958 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 8959 tp->misc_host_ctrl); 8960 8961 /* Set MAX PCI retry to zero. */ 8962 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 8963 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 8964 tg3_flag(tp, PCIX_MODE)) 8965 val |= PCISTATE_RETRY_SAME_DMA; 8966 /* Allow reads and writes to the APE register and memory space. */ 8967 if (tg3_flag(tp, ENABLE_APE)) 8968 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8969 PCISTATE_ALLOW_APE_SHMEM_WR | 8970 PCISTATE_ALLOW_APE_PSPACE_WR; 8971 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 8972 8973 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 8974 8975 if (!tg3_flag(tp, PCI_EXPRESS)) { 8976 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 8977 tp->pci_cacheline_sz); 8978 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 8979 tp->pci_lat_timer); 8980 } 8981 8982 /* Make sure PCI-X relaxed ordering bit is clear. */ 8983 if (tg3_flag(tp, PCIX_MODE)) { 8984 u16 pcix_cmd; 8985 8986 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8987 &pcix_cmd); 8988 pcix_cmd &= ~PCI_X_CMD_ERO; 8989 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8990 pcix_cmd); 8991 } 8992 8993 if (tg3_flag(tp, 5780_CLASS)) { 8994 8995 /* Chip reset on 5780 will reset MSI enable bit, 8996 * so need to restore it. 8997 */ 8998 if (tg3_flag(tp, USING_MSI)) { 8999 u16 ctrl; 9000 9001 pci_read_config_word(tp->pdev, 9002 tp->msi_cap + PCI_MSI_FLAGS, 9003 &ctrl); 9004 pci_write_config_word(tp->pdev, 9005 tp->msi_cap + PCI_MSI_FLAGS, 9006 ctrl | PCI_MSI_FLAGS_ENABLE); 9007 val = tr32(MSGINT_MODE); 9008 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 9009 } 9010 } 9011 } 9012 9013 static void tg3_override_clk(struct tg3 *tp) 9014 { 9015 u32 val; 9016 9017 switch (tg3_asic_rev(tp)) { 9018 case ASIC_REV_5717: 9019 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9020 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9021 TG3_CPMU_MAC_ORIDE_ENABLE); 9022 break; 9023 9024 case ASIC_REV_5719: 9025 case ASIC_REV_5720: 9026 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9027 break; 9028 9029 default: 9030 return; 9031 } 9032 } 9033 9034 static void tg3_restore_clk(struct tg3 *tp) 9035 { 9036 u32 val; 9037 9038 switch (tg3_asic_rev(tp)) { 9039 case ASIC_REV_5717: 9040 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9041 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, 9042 val & ~TG3_CPMU_MAC_ORIDE_ENABLE); 9043 break; 9044 9045 case ASIC_REV_5719: 9046 case ASIC_REV_5720: 9047 val = tr32(TG3_CPMU_CLCK_ORIDE); 9048 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 9049 break; 9050 9051 default: 9052 return; 9053 } 9054 } 9055 9056 /* tp->lock is held. */ 9057 static int tg3_chip_reset(struct tg3 *tp) 9058 __releases(tp->lock) 9059 __acquires(tp->lock) 9060 { 9061 u32 val; 9062 void (*write_op)(struct tg3 *, u32, u32); 9063 int i, err; 9064 9065 if (!pci_device_is_present(tp->pdev)) 9066 return -ENODEV; 9067 9068 tg3_nvram_lock(tp); 9069 9070 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 9071 9072 /* No matching tg3_nvram_unlock() after this because 9073 * chip reset below will undo the nvram lock. 9074 */ 9075 tp->nvram_lock_cnt = 0; 9076 9077 /* GRC_MISC_CFG core clock reset will clear the memory 9078 * enable bit in PCI register 4 and the MSI enable bit 9079 * on some chips, so we save relevant registers here. 9080 */ 9081 tg3_save_pci_state(tp); 9082 9083 if (tg3_asic_rev(tp) == ASIC_REV_5752 || 9084 tg3_flag(tp, 5755_PLUS)) 9085 tw32(GRC_FASTBOOT_PC, 0); 9086 9087 /* 9088 * We must avoid the readl() that normally takes place. 9089 * It locks machines, causes machine checks, and other 9090 * fun things. So, temporarily disable the 5701 9091 * hardware workaround, while we do the reset. 9092 */ 9093 write_op = tp->write32; 9094 if (write_op == tg3_write_flush_reg32) 9095 tp->write32 = tg3_write32; 9096 9097 /* Prevent the irq handler from reading or writing PCI registers 9098 * during chip reset when the memory enable bit in the PCI command 9099 * register may be cleared. The chip does not generate interrupt 9100 * at this time, but the irq handler may still be called due to irq 9101 * sharing or irqpoll. 9102 */ 9103 tg3_flag_set(tp, CHIP_RESETTING); 9104 for (i = 0; i < tp->irq_cnt; i++) { 9105 struct tg3_napi *tnapi = &tp->napi[i]; 9106 if (tnapi->hw_status) { 9107 tnapi->hw_status->status = 0; 9108 tnapi->hw_status->status_tag = 0; 9109 } 9110 tnapi->last_tag = 0; 9111 tnapi->last_irq_tag = 0; 9112 } 9113 smp_mb(); 9114 9115 tg3_full_unlock(tp); 9116 9117 for (i = 0; i < tp->irq_cnt; i++) 9118 synchronize_irq(tp->napi[i].irq_vec); 9119 9120 tg3_full_lock(tp, 0); 9121 9122 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9123 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9124 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9125 } 9126 9127 /* do the reset */ 9128 val = GRC_MISC_CFG_CORECLK_RESET; 9129 9130 if (tg3_flag(tp, PCI_EXPRESS)) { 9131 /* Force PCIe 1.0a mode */ 9132 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 9133 !tg3_flag(tp, 57765_PLUS) && 9134 tr32(TG3_PCIE_PHY_TSTCTL) == 9135 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 9136 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 9137 9138 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) { 9139 tw32(GRC_MISC_CFG, (1 << 29)); 9140 val |= (1 << 29); 9141 } 9142 } 9143 9144 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 9145 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 9146 tw32(GRC_VCPU_EXT_CTRL, 9147 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 9148 } 9149 9150 /* Set the clock to the highest frequency to avoid timeouts. With link 9151 * aware mode, the clock speed could be slow and bootcode does not 9152 * complete within the expected time. Override the clock to allow the 9153 * bootcode to finish sooner and then restore it. 9154 */ 9155 tg3_override_clk(tp); 9156 9157 /* Manage gphy power for all CPMU absent PCIe devices. */ 9158 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 9159 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 9160 9161 tw32(GRC_MISC_CFG, val); 9162 9163 /* restore 5701 hardware bug workaround write method */ 9164 tp->write32 = write_op; 9165 9166 /* Unfortunately, we have to delay before the PCI read back. 9167 * Some 575X chips even will not respond to a PCI cfg access 9168 * when the reset command is given to the chip. 9169 * 9170 * How do these hardware designers expect things to work 9171 * properly if the PCI write is posted for a long period 9172 * of time? It is always necessary to have some method by 9173 * which a register read back can occur to push the write 9174 * out which does the reset. 9175 * 9176 * For most tg3 variants the trick below was working. 9177 * Ho hum... 9178 */ 9179 udelay(120); 9180 9181 /* Flush PCI posted writes. The normal MMIO registers 9182 * are inaccessible at this time so this is the only 9183 * way to make this reliably (actually, this is no longer 9184 * the case, see above). I tried to use indirect 9185 * register read/write but this upset some 5701 variants. 9186 */ 9187 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 9188 9189 udelay(120); 9190 9191 if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) { 9192 u16 val16; 9193 9194 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) { 9195 int j; 9196 u32 cfg_val; 9197 9198 /* Wait for link training to complete. */ 9199 for (j = 0; j < 5000; j++) 9200 udelay(100); 9201 9202 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 9203 pci_write_config_dword(tp->pdev, 0xc4, 9204 cfg_val | (1 << 15)); 9205 } 9206 9207 /* Clear the "no snoop" and "relaxed ordering" bits. */ 9208 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN; 9209 /* 9210 * Older PCIe devices only support the 128 byte 9211 * MPS setting. Enforce the restriction. 9212 */ 9213 if (!tg3_flag(tp, CPMU_PRESENT)) 9214 val16 |= PCI_EXP_DEVCTL_PAYLOAD; 9215 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16); 9216 9217 /* Clear error status */ 9218 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA, 9219 PCI_EXP_DEVSTA_CED | 9220 PCI_EXP_DEVSTA_NFED | 9221 PCI_EXP_DEVSTA_FED | 9222 PCI_EXP_DEVSTA_URD); 9223 } 9224 9225 tg3_restore_pci_state(tp); 9226 9227 tg3_flag_clear(tp, CHIP_RESETTING); 9228 tg3_flag_clear(tp, ERROR_PROCESSED); 9229 9230 val = 0; 9231 if (tg3_flag(tp, 5780_CLASS)) 9232 val = tr32(MEMARB_MODE); 9233 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 9234 9235 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) { 9236 tg3_stop_fw(tp); 9237 tw32(0x5000, 0x400); 9238 } 9239 9240 if (tg3_flag(tp, IS_SSB_CORE)) { 9241 /* 9242 * BCM4785: In order to avoid repercussions from using 9243 * potentially defective internal ROM, stop the Rx RISC CPU, 9244 * which is not required. 9245 */ 9246 tg3_stop_fw(tp); 9247 tg3_halt_cpu(tp, RX_CPU_BASE); 9248 } 9249 9250 err = tg3_poll_fw(tp); 9251 if (err) 9252 return err; 9253 9254 tw32(GRC_MODE, tp->grc_mode); 9255 9256 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) { 9257 val = tr32(0xc4); 9258 9259 tw32(0xc4, val | (1 << 15)); 9260 } 9261 9262 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 9263 tg3_asic_rev(tp) == ASIC_REV_5705) { 9264 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 9265 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) 9266 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 9267 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9268 } 9269 9270 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9271 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 9272 val = tp->mac_mode; 9273 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9274 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 9275 val = tp->mac_mode; 9276 } else 9277 val = 0; 9278 9279 tw32_f(MAC_MODE, val); 9280 udelay(40); 9281 9282 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 9283 9284 tg3_mdio_start(tp); 9285 9286 if (tg3_flag(tp, PCI_EXPRESS) && 9287 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 9288 tg3_asic_rev(tp) != ASIC_REV_5785 && 9289 !tg3_flag(tp, 57765_PLUS)) { 9290 val = tr32(0x7c00); 9291 9292 tw32(0x7c00, val | (1 << 25)); 9293 } 9294 9295 tg3_restore_clk(tp); 9296 9297 /* Increase the core clock speed to fix tx timeout issue for 5762 9298 * with 100Mbps link speed. 9299 */ 9300 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 9301 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE); 9302 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val | 9303 TG3_CPMU_MAC_ORIDE_ENABLE); 9304 } 9305 9306 /* Reprobe ASF enable state. */ 9307 tg3_flag_clear(tp, ENABLE_ASF); 9308 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 9309 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 9310 9311 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 9312 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 9313 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 9314 u32 nic_cfg; 9315 9316 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 9317 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 9318 tg3_flag_set(tp, ENABLE_ASF); 9319 tp->last_event_jiffies = jiffies; 9320 if (tg3_flag(tp, 5750_PLUS)) 9321 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 9322 9323 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg); 9324 if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK) 9325 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 9326 if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID) 9327 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 9328 } 9329 } 9330 9331 return 0; 9332 } 9333 9334 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 9335 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 9336 static void __tg3_set_rx_mode(struct net_device *); 9337 9338 /* tp->lock is held. */ 9339 static int tg3_halt(struct tg3 *tp, int kind, bool silent) 9340 { 9341 int err; 9342 9343 tg3_stop_fw(tp); 9344 9345 tg3_write_sig_pre_reset(tp, kind); 9346 9347 tg3_abort_hw(tp, silent); 9348 err = tg3_chip_reset(tp); 9349 9350 __tg3_set_mac_addr(tp, false); 9351 9352 tg3_write_sig_legacy(tp, kind); 9353 tg3_write_sig_post_reset(tp, kind); 9354 9355 if (tp->hw_stats) { 9356 /* Save the stats across chip resets... */ 9357 tg3_get_nstats(tp, &tp->net_stats_prev); 9358 tg3_get_estats(tp, &tp->estats_prev); 9359 9360 /* And make sure the next sample is new data */ 9361 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 9362 } 9363 9364 return err; 9365 } 9366 9367 static int tg3_set_mac_addr(struct net_device *dev, void *p) 9368 { 9369 struct tg3 *tp = netdev_priv(dev); 9370 struct sockaddr *addr = p; 9371 int err = 0; 9372 bool skip_mac_1 = false; 9373 9374 if (!is_valid_ether_addr(addr->sa_data)) 9375 return -EADDRNOTAVAIL; 9376 9377 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 9378 9379 if (!netif_running(dev)) 9380 return 0; 9381 9382 if (tg3_flag(tp, ENABLE_ASF)) { 9383 u32 addr0_high, addr0_low, addr1_high, addr1_low; 9384 9385 addr0_high = tr32(MAC_ADDR_0_HIGH); 9386 addr0_low = tr32(MAC_ADDR_0_LOW); 9387 addr1_high = tr32(MAC_ADDR_1_HIGH); 9388 addr1_low = tr32(MAC_ADDR_1_LOW); 9389 9390 /* Skip MAC addr 1 if ASF is using it. */ 9391 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 9392 !(addr1_high == 0 && addr1_low == 0)) 9393 skip_mac_1 = true; 9394 } 9395 spin_lock_bh(&tp->lock); 9396 __tg3_set_mac_addr(tp, skip_mac_1); 9397 __tg3_set_rx_mode(dev); 9398 spin_unlock_bh(&tp->lock); 9399 9400 return err; 9401 } 9402 9403 /* tp->lock is held. */ 9404 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 9405 dma_addr_t mapping, u32 maxlen_flags, 9406 u32 nic_addr) 9407 { 9408 tg3_write_mem(tp, 9409 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 9410 ((u64) mapping >> 32)); 9411 tg3_write_mem(tp, 9412 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 9413 ((u64) mapping & 0xffffffff)); 9414 tg3_write_mem(tp, 9415 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 9416 maxlen_flags); 9417 9418 if (!tg3_flag(tp, 5705_PLUS)) 9419 tg3_write_mem(tp, 9420 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 9421 nic_addr); 9422 } 9423 9424 9425 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9426 { 9427 int i = 0; 9428 9429 if (!tg3_flag(tp, ENABLE_TSS)) { 9430 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 9431 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 9432 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 9433 } else { 9434 tw32(HOSTCC_TXCOL_TICKS, 0); 9435 tw32(HOSTCC_TXMAX_FRAMES, 0); 9436 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 9437 9438 for (; i < tp->txq_cnt; i++) { 9439 u32 reg; 9440 9441 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 9442 tw32(reg, ec->tx_coalesce_usecs); 9443 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 9444 tw32(reg, ec->tx_max_coalesced_frames); 9445 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 9446 tw32(reg, ec->tx_max_coalesced_frames_irq); 9447 } 9448 } 9449 9450 for (; i < tp->irq_max - 1; i++) { 9451 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 9452 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 9453 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9454 } 9455 } 9456 9457 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 9458 { 9459 int i = 0; 9460 u32 limit = tp->rxq_cnt; 9461 9462 if (!tg3_flag(tp, ENABLE_RSS)) { 9463 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 9464 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 9465 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 9466 limit--; 9467 } else { 9468 tw32(HOSTCC_RXCOL_TICKS, 0); 9469 tw32(HOSTCC_RXMAX_FRAMES, 0); 9470 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 9471 } 9472 9473 for (; i < limit; i++) { 9474 u32 reg; 9475 9476 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 9477 tw32(reg, ec->rx_coalesce_usecs); 9478 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 9479 tw32(reg, ec->rx_max_coalesced_frames); 9480 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 9481 tw32(reg, ec->rx_max_coalesced_frames_irq); 9482 } 9483 9484 for (; i < tp->irq_max - 1; i++) { 9485 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 9486 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 9487 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 9488 } 9489 } 9490 9491 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 9492 { 9493 tg3_coal_tx_init(tp, ec); 9494 tg3_coal_rx_init(tp, ec); 9495 9496 if (!tg3_flag(tp, 5705_PLUS)) { 9497 u32 val = ec->stats_block_coalesce_usecs; 9498 9499 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 9500 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 9501 9502 if (!tp->link_up) 9503 val = 0; 9504 9505 tw32(HOSTCC_STAT_COAL_TICKS, val); 9506 } 9507 } 9508 9509 /* tp->lock is held. */ 9510 static void tg3_tx_rcbs_disable(struct tg3 *tp) 9511 { 9512 u32 txrcb, limit; 9513 9514 /* Disable all transmit rings but the first. */ 9515 if (!tg3_flag(tp, 5705_PLUS)) 9516 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 9517 else if (tg3_flag(tp, 5717_PLUS)) 9518 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 9519 else if (tg3_flag(tp, 57765_CLASS) || 9520 tg3_asic_rev(tp) == ASIC_REV_5762) 9521 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 9522 else 9523 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9524 9525 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 9526 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 9527 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 9528 BDINFO_FLAGS_DISABLED); 9529 } 9530 9531 /* tp->lock is held. */ 9532 static void tg3_tx_rcbs_init(struct tg3 *tp) 9533 { 9534 int i = 0; 9535 u32 txrcb = NIC_SRAM_SEND_RCB; 9536 9537 if (tg3_flag(tp, ENABLE_TSS)) 9538 i++; 9539 9540 for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) { 9541 struct tg3_napi *tnapi = &tp->napi[i]; 9542 9543 if (!tnapi->tx_ring) 9544 continue; 9545 9546 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 9547 (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT), 9548 NIC_SRAM_TX_BUFFER_DESC); 9549 } 9550 } 9551 9552 /* tp->lock is held. */ 9553 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp) 9554 { 9555 u32 rxrcb, limit; 9556 9557 /* Disable all receive return rings but the first. */ 9558 if (tg3_flag(tp, 5717_PLUS)) 9559 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 9560 else if (!tg3_flag(tp, 5705_PLUS)) 9561 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 9562 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9563 tg3_asic_rev(tp) == ASIC_REV_5762 || 9564 tg3_flag(tp, 57765_CLASS)) 9565 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 9566 else 9567 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9568 9569 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 9570 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 9571 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 9572 BDINFO_FLAGS_DISABLED); 9573 } 9574 9575 /* tp->lock is held. */ 9576 static void tg3_rx_ret_rcbs_init(struct tg3 *tp) 9577 { 9578 int i = 0; 9579 u32 rxrcb = NIC_SRAM_RCV_RET_RCB; 9580 9581 if (tg3_flag(tp, ENABLE_RSS)) 9582 i++; 9583 9584 for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) { 9585 struct tg3_napi *tnapi = &tp->napi[i]; 9586 9587 if (!tnapi->rx_rcb) 9588 continue; 9589 9590 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 9591 (tp->rx_ret_ring_mask + 1) << 9592 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 9593 } 9594 } 9595 9596 /* tp->lock is held. */ 9597 static void tg3_rings_reset(struct tg3 *tp) 9598 { 9599 int i; 9600 u32 stblk; 9601 struct tg3_napi *tnapi = &tp->napi[0]; 9602 9603 tg3_tx_rcbs_disable(tp); 9604 9605 tg3_rx_ret_rcbs_disable(tp); 9606 9607 /* Disable interrupts */ 9608 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 9609 tp->napi[0].chk_msi_cnt = 0; 9610 tp->napi[0].last_rx_cons = 0; 9611 tp->napi[0].last_tx_cons = 0; 9612 9613 /* Zero mailbox registers. */ 9614 if (tg3_flag(tp, SUPPORT_MSIX)) { 9615 for (i = 1; i < tp->irq_max; i++) { 9616 tp->napi[i].tx_prod = 0; 9617 tp->napi[i].tx_cons = 0; 9618 if (tg3_flag(tp, ENABLE_TSS)) 9619 tw32_mailbox(tp->napi[i].prodmbox, 0); 9620 tw32_rx_mbox(tp->napi[i].consmbox, 0); 9621 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 9622 tp->napi[i].chk_msi_cnt = 0; 9623 tp->napi[i].last_rx_cons = 0; 9624 tp->napi[i].last_tx_cons = 0; 9625 } 9626 if (!tg3_flag(tp, ENABLE_TSS)) 9627 tw32_mailbox(tp->napi[0].prodmbox, 0); 9628 } else { 9629 tp->napi[0].tx_prod = 0; 9630 tp->napi[0].tx_cons = 0; 9631 tw32_mailbox(tp->napi[0].prodmbox, 0); 9632 tw32_rx_mbox(tp->napi[0].consmbox, 0); 9633 } 9634 9635 /* Make sure the NIC-based send BD rings are disabled. */ 9636 if (!tg3_flag(tp, 5705_PLUS)) { 9637 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 9638 for (i = 0; i < 16; i++) 9639 tw32_tx_mbox(mbox + i * 8, 0); 9640 } 9641 9642 /* Clear status block in ram. */ 9643 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9644 9645 /* Set status block DMA address */ 9646 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9647 ((u64) tnapi->status_mapping >> 32)); 9648 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9649 ((u64) tnapi->status_mapping & 0xffffffff)); 9650 9651 stblk = HOSTCC_STATBLCK_RING1; 9652 9653 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 9654 u64 mapping = (u64)tnapi->status_mapping; 9655 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 9656 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 9657 stblk += 8; 9658 9659 /* Clear status block in ram. */ 9660 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 9661 } 9662 9663 tg3_tx_rcbs_init(tp); 9664 tg3_rx_ret_rcbs_init(tp); 9665 } 9666 9667 static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 9668 { 9669 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 9670 9671 if (!tg3_flag(tp, 5750_PLUS) || 9672 tg3_flag(tp, 5780_CLASS) || 9673 tg3_asic_rev(tp) == ASIC_REV_5750 || 9674 tg3_asic_rev(tp) == ASIC_REV_5752 || 9675 tg3_flag(tp, 57765_PLUS)) 9676 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 9677 else if (tg3_asic_rev(tp) == ASIC_REV_5755 || 9678 tg3_asic_rev(tp) == ASIC_REV_5787) 9679 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 9680 else 9681 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 9682 9683 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 9684 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 9685 9686 val = min(nic_rep_thresh, host_rep_thresh); 9687 tw32(RCVBDI_STD_THRESH, val); 9688 9689 if (tg3_flag(tp, 57765_PLUS)) 9690 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 9691 9692 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 9693 return; 9694 9695 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 9696 9697 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 9698 9699 val = min(bdcache_maxcnt / 2, host_rep_thresh); 9700 tw32(RCVBDI_JUMBO_THRESH, val); 9701 9702 if (tg3_flag(tp, 57765_PLUS)) 9703 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 9704 } 9705 9706 static inline u32 calc_crc(unsigned char *buf, int len) 9707 { 9708 u32 reg; 9709 u32 tmp; 9710 int j, k; 9711 9712 reg = 0xffffffff; 9713 9714 for (j = 0; j < len; j++) { 9715 reg ^= buf[j]; 9716 9717 for (k = 0; k < 8; k++) { 9718 tmp = reg & 0x01; 9719 9720 reg >>= 1; 9721 9722 if (tmp) 9723 reg ^= 0xedb88320; 9724 } 9725 } 9726 9727 return ~reg; 9728 } 9729 9730 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 9731 { 9732 /* accept or reject all multicast frames */ 9733 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 9734 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 9735 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 9736 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 9737 } 9738 9739 static void __tg3_set_rx_mode(struct net_device *dev) 9740 { 9741 struct tg3 *tp = netdev_priv(dev); 9742 u32 rx_mode; 9743 9744 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 9745 RX_MODE_KEEP_VLAN_TAG); 9746 9747 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 9748 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 9749 * flag clear. 9750 */ 9751 if (!tg3_flag(tp, ENABLE_ASF)) 9752 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 9753 #endif 9754 9755 if (dev->flags & IFF_PROMISC) { 9756 /* Promiscuous mode. */ 9757 rx_mode |= RX_MODE_PROMISC; 9758 } else if (dev->flags & IFF_ALLMULTI) { 9759 /* Accept all multicast. */ 9760 tg3_set_multi(tp, 1); 9761 } else if (netdev_mc_empty(dev)) { 9762 /* Reject all multicast. */ 9763 tg3_set_multi(tp, 0); 9764 } else { 9765 /* Accept one or more multicast(s). */ 9766 struct netdev_hw_addr *ha; 9767 u32 mc_filter[4] = { 0, }; 9768 u32 regidx; 9769 u32 bit; 9770 u32 crc; 9771 9772 netdev_for_each_mc_addr(ha, dev) { 9773 crc = calc_crc(ha->addr, ETH_ALEN); 9774 bit = ~crc & 0x7f; 9775 regidx = (bit & 0x60) >> 5; 9776 bit &= 0x1f; 9777 mc_filter[regidx] |= (1 << bit); 9778 } 9779 9780 tw32(MAC_HASH_REG_0, mc_filter[0]); 9781 tw32(MAC_HASH_REG_1, mc_filter[1]); 9782 tw32(MAC_HASH_REG_2, mc_filter[2]); 9783 tw32(MAC_HASH_REG_3, mc_filter[3]); 9784 } 9785 9786 if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) { 9787 rx_mode |= RX_MODE_PROMISC; 9788 } else if (!(dev->flags & IFF_PROMISC)) { 9789 /* Add all entries into to the mac addr filter list */ 9790 int i = 0; 9791 struct netdev_hw_addr *ha; 9792 9793 netdev_for_each_uc_addr(ha, dev) { 9794 __tg3_set_one_mac_addr(tp, ha->addr, 9795 i + TG3_UCAST_ADDR_IDX(tp)); 9796 i++; 9797 } 9798 } 9799 9800 if (rx_mode != tp->rx_mode) { 9801 tp->rx_mode = rx_mode; 9802 tw32_f(MAC_RX_MODE, rx_mode); 9803 udelay(10); 9804 } 9805 } 9806 9807 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt) 9808 { 9809 int i; 9810 9811 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 9812 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt); 9813 } 9814 9815 static void tg3_rss_check_indir_tbl(struct tg3 *tp) 9816 { 9817 int i; 9818 9819 if (!tg3_flag(tp, SUPPORT_MSIX)) 9820 return; 9821 9822 if (tp->rxq_cnt == 1) { 9823 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 9824 return; 9825 } 9826 9827 /* Validate table against current IRQ count */ 9828 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 9829 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt) 9830 break; 9831 } 9832 9833 if (i != TG3_RSS_INDIR_TBL_SIZE) 9834 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt); 9835 } 9836 9837 static void tg3_rss_write_indir_tbl(struct tg3 *tp) 9838 { 9839 int i = 0; 9840 u32 reg = MAC_RSS_INDIR_TBL_0; 9841 9842 while (i < TG3_RSS_INDIR_TBL_SIZE) { 9843 u32 val = tp->rss_ind_tbl[i]; 9844 i++; 9845 for (; i % 8; i++) { 9846 val <<= 4; 9847 val |= tp->rss_ind_tbl[i]; 9848 } 9849 tw32(reg, val); 9850 reg += 4; 9851 } 9852 } 9853 9854 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) 9855 { 9856 if (tg3_asic_rev(tp) == ASIC_REV_5719) 9857 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; 9858 else 9859 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; 9860 } 9861 9862 /* tp->lock is held. */ 9863 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) 9864 { 9865 u32 val, rdmac_mode; 9866 int i, err, limit; 9867 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 9868 9869 tg3_disable_ints(tp); 9870 9871 tg3_stop_fw(tp); 9872 9873 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 9874 9875 if (tg3_flag(tp, INIT_COMPLETE)) 9876 tg3_abort_hw(tp, 1); 9877 9878 if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 9879 !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) { 9880 tg3_phy_pull_config(tp); 9881 tg3_eee_pull_config(tp, NULL); 9882 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 9883 } 9884 9885 /* Enable MAC control of LPI */ 9886 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 9887 tg3_setup_eee(tp); 9888 9889 if (reset_phy) 9890 tg3_phy_reset(tp); 9891 9892 err = tg3_chip_reset(tp); 9893 if (err) 9894 return err; 9895 9896 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 9897 9898 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) { 9899 val = tr32(TG3_CPMU_CTRL); 9900 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 9901 tw32(TG3_CPMU_CTRL, val); 9902 9903 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9904 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9905 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9906 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9907 9908 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 9909 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 9910 val |= CPMU_LNK_AWARE_MACCLK_6_25; 9911 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 9912 9913 val = tr32(TG3_CPMU_HST_ACC); 9914 val &= ~CPMU_HST_ACC_MACCLK_MASK; 9915 val |= CPMU_HST_ACC_MACCLK_6_25; 9916 tw32(TG3_CPMU_HST_ACC, val); 9917 } 9918 9919 if (tg3_asic_rev(tp) == ASIC_REV_57780) { 9920 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 9921 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 9922 PCIE_PWR_MGMT_L1_THRESH_4MS; 9923 tw32(PCIE_PWR_MGMT_THRESH, val); 9924 9925 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 9926 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 9927 9928 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 9929 9930 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9931 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9932 } 9933 9934 if (tg3_flag(tp, L1PLLPD_EN)) { 9935 u32 grc_mode = tr32(GRC_MODE); 9936 9937 /* Access the lower 1K of PL PCIE block registers. */ 9938 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9939 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9940 9941 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 9942 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 9943 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 9944 9945 tw32(GRC_MODE, grc_mode); 9946 } 9947 9948 if (tg3_flag(tp, 57765_CLASS)) { 9949 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) { 9950 u32 grc_mode = tr32(GRC_MODE); 9951 9952 /* Access the lower 1K of PL PCIE block registers. */ 9953 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9954 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9955 9956 val = tr32(TG3_PCIE_TLDLPL_PORT + 9957 TG3_PCIE_PL_LO_PHYCTL5); 9958 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 9959 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 9960 9961 tw32(GRC_MODE, grc_mode); 9962 } 9963 9964 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) { 9965 u32 grc_mode; 9966 9967 /* Fix transmit hangs */ 9968 val = tr32(TG3_CPMU_PADRNG_CTL); 9969 val |= TG3_CPMU_PADRNG_CTL_RDIV2; 9970 tw32(TG3_CPMU_PADRNG_CTL, val); 9971 9972 grc_mode = tr32(GRC_MODE); 9973 9974 /* Access the lower 1K of DL PCIE block registers. */ 9975 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9976 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 9977 9978 val = tr32(TG3_PCIE_TLDLPL_PORT + 9979 TG3_PCIE_DL_LO_FTSMAX); 9980 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 9981 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 9982 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 9983 9984 tw32(GRC_MODE, grc_mode); 9985 } 9986 9987 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9988 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9989 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9990 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9991 } 9992 9993 /* This works around an issue with Athlon chipsets on 9994 * B3 tigon3 silicon. This bit has no effect on any 9995 * other revision. But do not set this on PCI Express 9996 * chips and don't even touch the clocks if the CPMU is present. 9997 */ 9998 if (!tg3_flag(tp, CPMU_PRESENT)) { 9999 if (!tg3_flag(tp, PCI_EXPRESS)) 10000 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 10001 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 10002 } 10003 10004 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 && 10005 tg3_flag(tp, PCIX_MODE)) { 10006 val = tr32(TG3PCI_PCISTATE); 10007 val |= PCISTATE_RETRY_SAME_DMA; 10008 tw32(TG3PCI_PCISTATE, val); 10009 } 10010 10011 if (tg3_flag(tp, ENABLE_APE)) { 10012 /* Allow reads and writes to the 10013 * APE register and memory space. 10014 */ 10015 val = tr32(TG3PCI_PCISTATE); 10016 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 10017 PCISTATE_ALLOW_APE_SHMEM_WR | 10018 PCISTATE_ALLOW_APE_PSPACE_WR; 10019 tw32(TG3PCI_PCISTATE, val); 10020 } 10021 10022 if (tg3_chip_rev(tp) == CHIPREV_5704_BX) { 10023 /* Enable some hw fixes. */ 10024 val = tr32(TG3PCI_MSI_DATA); 10025 val |= (1 << 26) | (1 << 28) | (1 << 29); 10026 tw32(TG3PCI_MSI_DATA, val); 10027 } 10028 10029 /* Descriptor ring init may make accesses to the 10030 * NIC SRAM area to setup the TX descriptors, so we 10031 * can only do this after the hardware has been 10032 * successfully reset. 10033 */ 10034 err = tg3_init_rings(tp); 10035 if (err) 10036 return err; 10037 10038 if (tg3_flag(tp, 57765_PLUS)) { 10039 val = tr32(TG3PCI_DMA_RW_CTRL) & 10040 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 10041 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) 10042 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 10043 if (!tg3_flag(tp, 57765_CLASS) && 10044 tg3_asic_rev(tp) != ASIC_REV_5717 && 10045 tg3_asic_rev(tp) != ASIC_REV_5762) 10046 val |= DMA_RWCTRL_TAGGED_STAT_WA; 10047 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 10048 } else if (tg3_asic_rev(tp) != ASIC_REV_5784 && 10049 tg3_asic_rev(tp) != ASIC_REV_5761) { 10050 /* This value is determined during the probe time DMA 10051 * engine test, tg3_test_dma. 10052 */ 10053 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 10054 } 10055 10056 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 10057 GRC_MODE_4X_NIC_SEND_RINGS | 10058 GRC_MODE_NO_TX_PHDR_CSUM | 10059 GRC_MODE_NO_RX_PHDR_CSUM); 10060 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 10061 10062 /* Pseudo-header checksum is done by hardware logic and not 10063 * the offload processers, so make the chip do the pseudo- 10064 * header checksums on receive. For transmit it is more 10065 * convenient to do the pseudo-header checksum in software 10066 * as Linux does that on transmit for us in all cases. 10067 */ 10068 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 10069 10070 val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; 10071 if (tp->rxptpctl) 10072 tw32(TG3_RX_PTP_CTL, 10073 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 10074 10075 if (tg3_flag(tp, PTP_CAPABLE)) 10076 val |= GRC_MODE_TIME_SYNC_ENABLE; 10077 10078 tw32(GRC_MODE, tp->grc_mode | val); 10079 10080 /* On one of the AMD platform, MRRS is restricted to 4000 because of 10081 * south bridge limitation. As a workaround, Driver is setting MRRS 10082 * to 2048 instead of default 4096. 10083 */ 10084 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 10085 tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) { 10086 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK; 10087 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048); 10088 } 10089 10090 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 10091 val = tr32(GRC_MISC_CFG); 10092 val &= ~0xff; 10093 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 10094 tw32(GRC_MISC_CFG, val); 10095 10096 /* Initialize MBUF/DESC pool. */ 10097 if (tg3_flag(tp, 5750_PLUS)) { 10098 /* Do nothing. */ 10099 } else if (tg3_asic_rev(tp) != ASIC_REV_5705) { 10100 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 10101 if (tg3_asic_rev(tp) == ASIC_REV_5704) 10102 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 10103 else 10104 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 10105 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 10106 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 10107 } else if (tg3_flag(tp, TSO_CAPABLE)) { 10108 int fw_len; 10109 10110 fw_len = tp->fw_len; 10111 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 10112 tw32(BUFMGR_MB_POOL_ADDR, 10113 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 10114 tw32(BUFMGR_MB_POOL_SIZE, 10115 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 10116 } 10117 10118 if (tp->dev->mtu <= ETH_DATA_LEN) { 10119 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10120 tp->bufmgr_config.mbuf_read_dma_low_water); 10121 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10122 tp->bufmgr_config.mbuf_mac_rx_low_water); 10123 tw32(BUFMGR_MB_HIGH_WATER, 10124 tp->bufmgr_config.mbuf_high_water); 10125 } else { 10126 tw32(BUFMGR_MB_RDMA_LOW_WATER, 10127 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 10128 tw32(BUFMGR_MB_MACRX_LOW_WATER, 10129 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 10130 tw32(BUFMGR_MB_HIGH_WATER, 10131 tp->bufmgr_config.mbuf_high_water_jumbo); 10132 } 10133 tw32(BUFMGR_DMA_LOW_WATER, 10134 tp->bufmgr_config.dma_low_water); 10135 tw32(BUFMGR_DMA_HIGH_WATER, 10136 tp->bufmgr_config.dma_high_water); 10137 10138 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 10139 if (tg3_asic_rev(tp) == ASIC_REV_5719) 10140 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 10141 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10142 tg3_asic_rev(tp) == ASIC_REV_5762 || 10143 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10144 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) 10145 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 10146 tw32(BUFMGR_MODE, val); 10147 for (i = 0; i < 2000; i++) { 10148 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 10149 break; 10150 udelay(10); 10151 } 10152 if (i >= 2000) { 10153 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 10154 return -ENODEV; 10155 } 10156 10157 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1) 10158 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 10159 10160 tg3_setup_rxbd_thresholds(tp); 10161 10162 /* Initialize TG3_BDINFO's at: 10163 * RCVDBDI_STD_BD: standard eth size rx ring 10164 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 10165 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 10166 * 10167 * like so: 10168 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 10169 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 10170 * ring attribute flags 10171 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 10172 * 10173 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 10174 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 10175 * 10176 * The size of each ring is fixed in the firmware, but the location is 10177 * configurable. 10178 */ 10179 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10180 ((u64) tpr->rx_std_mapping >> 32)); 10181 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10182 ((u64) tpr->rx_std_mapping & 0xffffffff)); 10183 if (!tg3_flag(tp, 5717_PLUS)) 10184 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 10185 NIC_SRAM_RX_BUFFER_DESC); 10186 10187 /* Disable the mini ring */ 10188 if (!tg3_flag(tp, 5705_PLUS)) 10189 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 10190 BDINFO_FLAGS_DISABLED); 10191 10192 /* Program the jumbo buffer descriptor ring control 10193 * blocks on those devices that have them. 10194 */ 10195 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10196 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 10197 10198 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 10199 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 10200 ((u64) tpr->rx_jmb_mapping >> 32)); 10201 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 10202 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 10203 val = TG3_RX_JMB_RING_SIZE(tp) << 10204 BDINFO_FLAGS_MAXLEN_SHIFT; 10205 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10206 val | BDINFO_FLAGS_USE_EXT_RECV); 10207 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 10208 tg3_flag(tp, 57765_CLASS) || 10209 tg3_asic_rev(tp) == ASIC_REV_5762) 10210 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 10211 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 10212 } else { 10213 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 10214 BDINFO_FLAGS_DISABLED); 10215 } 10216 10217 if (tg3_flag(tp, 57765_PLUS)) { 10218 val = TG3_RX_STD_RING_SIZE(tp); 10219 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 10220 val |= (TG3_RX_STD_DMA_SZ << 2); 10221 } else 10222 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 10223 } else 10224 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 10225 10226 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 10227 10228 tpr->rx_std_prod_idx = tp->rx_pending; 10229 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 10230 10231 tpr->rx_jmb_prod_idx = 10232 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 10233 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 10234 10235 tg3_rings_reset(tp); 10236 10237 /* Initialize MAC address and backoff seed. */ 10238 __tg3_set_mac_addr(tp, false); 10239 10240 /* MTU + ethernet header + FCS + optional VLAN tag */ 10241 tw32(MAC_RX_MTU_SIZE, 10242 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 10243 10244 /* The slot time is changed by tg3_setup_phy if we 10245 * run at gigabit with half duplex. 10246 */ 10247 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 10248 (6 << TX_LENGTHS_IPG_SHIFT) | 10249 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 10250 10251 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10252 tg3_asic_rev(tp) == ASIC_REV_5762) 10253 val |= tr32(MAC_TX_LENGTHS) & 10254 (TX_LENGTHS_JMB_FRM_LEN_MSK | 10255 TX_LENGTHS_CNT_DWN_VAL_MSK); 10256 10257 tw32(MAC_TX_LENGTHS, val); 10258 10259 /* Receive rules. */ 10260 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 10261 tw32(RCVLPC_CONFIG, 0x0181); 10262 10263 /* Calculate RDMAC_MODE setting early, we need it to determine 10264 * the RCVLPC_STATE_ENABLE mask. 10265 */ 10266 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 10267 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 10268 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 10269 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 10270 RDMAC_MODE_LNGREAD_ENAB); 10271 10272 if (tg3_asic_rev(tp) == ASIC_REV_5717) 10273 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 10274 10275 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 10276 tg3_asic_rev(tp) == ASIC_REV_5785 || 10277 tg3_asic_rev(tp) == ASIC_REV_57780) 10278 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 10279 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 10280 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 10281 10282 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10283 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10284 if (tg3_flag(tp, TSO_CAPABLE) && 10285 tg3_asic_rev(tp) == ASIC_REV_5705) { 10286 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 10287 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10288 !tg3_flag(tp, IS_5788)) { 10289 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10290 } 10291 } 10292 10293 if (tg3_flag(tp, PCI_EXPRESS)) 10294 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 10295 10296 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10297 tp->dma_limit = 0; 10298 if (tp->dev->mtu <= ETH_DATA_LEN) { 10299 rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR; 10300 tp->dma_limit = TG3_TX_BD_DMA_MAX_2K; 10301 } 10302 } 10303 10304 if (tg3_flag(tp, HW_TSO_1) || 10305 tg3_flag(tp, HW_TSO_2) || 10306 tg3_flag(tp, HW_TSO_3)) 10307 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 10308 10309 if (tg3_flag(tp, 57765_PLUS) || 10310 tg3_asic_rev(tp) == ASIC_REV_5785 || 10311 tg3_asic_rev(tp) == ASIC_REV_57780) 10312 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 10313 10314 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10315 tg3_asic_rev(tp) == ASIC_REV_5762) 10316 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 10317 10318 if (tg3_asic_rev(tp) == ASIC_REV_5761 || 10319 tg3_asic_rev(tp) == ASIC_REV_5784 || 10320 tg3_asic_rev(tp) == ASIC_REV_5785 || 10321 tg3_asic_rev(tp) == ASIC_REV_57780 || 10322 tg3_flag(tp, 57765_PLUS)) { 10323 u32 tgtreg; 10324 10325 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10326 tgtreg = TG3_RDMA_RSRVCTRL_REG2; 10327 else 10328 tgtreg = TG3_RDMA_RSRVCTRL_REG; 10329 10330 val = tr32(tgtreg); 10331 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 10332 tg3_asic_rev(tp) == ASIC_REV_5762) { 10333 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 10334 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 10335 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 10336 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 10337 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 10338 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 10339 } 10340 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 10341 } 10342 10343 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10344 tg3_asic_rev(tp) == ASIC_REV_5720 || 10345 tg3_asic_rev(tp) == ASIC_REV_5762) { 10346 u32 tgtreg; 10347 10348 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10349 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; 10350 else 10351 tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; 10352 10353 val = tr32(tgtreg); 10354 tw32(tgtreg, val | 10355 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 10356 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 10357 } 10358 10359 /* Receive/send statistics. */ 10360 if (tg3_flag(tp, 5750_PLUS)) { 10361 val = tr32(RCVLPC_STATS_ENABLE); 10362 val &= ~RCVLPC_STATSENAB_DACK_FIX; 10363 tw32(RCVLPC_STATS_ENABLE, val); 10364 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 10365 tg3_flag(tp, TSO_CAPABLE)) { 10366 val = tr32(RCVLPC_STATS_ENABLE); 10367 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 10368 tw32(RCVLPC_STATS_ENABLE, val); 10369 } else { 10370 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 10371 } 10372 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 10373 tw32(SNDDATAI_STATSENAB, 0xffffff); 10374 tw32(SNDDATAI_STATSCTRL, 10375 (SNDDATAI_SCTRL_ENABLE | 10376 SNDDATAI_SCTRL_FASTUPD)); 10377 10378 /* Setup host coalescing engine. */ 10379 tw32(HOSTCC_MODE, 0); 10380 for (i = 0; i < 2000; i++) { 10381 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 10382 break; 10383 udelay(10); 10384 } 10385 10386 __tg3_set_coalesce(tp, &tp->coal); 10387 10388 if (!tg3_flag(tp, 5705_PLUS)) { 10389 /* Status/statistics block address. See tg3_timer, 10390 * the tg3_periodic_fetch_stats call there, and 10391 * tg3_get_stats to see how this works for 5705/5750 chips. 10392 */ 10393 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 10394 ((u64) tp->stats_mapping >> 32)); 10395 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 10396 ((u64) tp->stats_mapping & 0xffffffff)); 10397 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 10398 10399 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 10400 10401 /* Clear statistics and status block memory areas */ 10402 for (i = NIC_SRAM_STATS_BLK; 10403 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 10404 i += sizeof(u32)) { 10405 tg3_write_mem(tp, i, 0); 10406 udelay(40); 10407 } 10408 } 10409 10410 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 10411 10412 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 10413 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 10414 if (!tg3_flag(tp, 5705_PLUS)) 10415 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 10416 10417 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 10418 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 10419 /* reset to prevent losing 1st rx packet intermittently */ 10420 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10421 udelay(10); 10422 } 10423 10424 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 10425 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 10426 MAC_MODE_FHDE_ENABLE; 10427 if (tg3_flag(tp, ENABLE_APE)) 10428 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 10429 if (!tg3_flag(tp, 5705_PLUS) && 10430 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10431 tg3_asic_rev(tp) != ASIC_REV_5700) 10432 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 10433 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 10434 udelay(40); 10435 10436 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 10437 * If TG3_FLAG_IS_NIC is zero, we should read the 10438 * register to preserve the GPIO settings for LOMs. The GPIOs, 10439 * whether used as inputs or outputs, are set by boot code after 10440 * reset. 10441 */ 10442 if (!tg3_flag(tp, IS_NIC)) { 10443 u32 gpio_mask; 10444 10445 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 10446 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 10447 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 10448 10449 if (tg3_asic_rev(tp) == ASIC_REV_5752) 10450 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 10451 GRC_LCLCTRL_GPIO_OUTPUT3; 10452 10453 if (tg3_asic_rev(tp) == ASIC_REV_5755) 10454 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 10455 10456 tp->grc_local_ctrl &= ~gpio_mask; 10457 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 10458 10459 /* GPIO1 must be driven high for eeprom write protect */ 10460 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 10461 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 10462 GRC_LCLCTRL_GPIO_OUTPUT1); 10463 } 10464 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10465 udelay(100); 10466 10467 if (tg3_flag(tp, USING_MSIX)) { 10468 val = tr32(MSGINT_MODE); 10469 val |= MSGINT_MODE_ENABLE; 10470 if (tp->irq_cnt > 1) 10471 val |= MSGINT_MODE_MULTIVEC_EN; 10472 if (!tg3_flag(tp, 1SHOT_MSI)) 10473 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 10474 tw32(MSGINT_MODE, val); 10475 } 10476 10477 if (!tg3_flag(tp, 5705_PLUS)) { 10478 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 10479 udelay(40); 10480 } 10481 10482 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 10483 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 10484 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 10485 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 10486 WDMAC_MODE_LNGREAD_ENAB); 10487 10488 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 10489 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 10490 if (tg3_flag(tp, TSO_CAPABLE) && 10491 (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 || 10492 tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) { 10493 /* nothing */ 10494 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 10495 !tg3_flag(tp, IS_5788)) { 10496 val |= WDMAC_MODE_RX_ACCEL; 10497 } 10498 } 10499 10500 /* Enable host coalescing bug fix */ 10501 if (tg3_flag(tp, 5755_PLUS)) 10502 val |= WDMAC_MODE_STATUS_TAG_FIX; 10503 10504 if (tg3_asic_rev(tp) == ASIC_REV_5785) 10505 val |= WDMAC_MODE_BURST_ALL_DATA; 10506 10507 tw32_f(WDMAC_MODE, val); 10508 udelay(40); 10509 10510 if (tg3_flag(tp, PCIX_MODE)) { 10511 u16 pcix_cmd; 10512 10513 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10514 &pcix_cmd); 10515 if (tg3_asic_rev(tp) == ASIC_REV_5703) { 10516 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 10517 pcix_cmd |= PCI_X_CMD_READ_2K; 10518 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) { 10519 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 10520 pcix_cmd |= PCI_X_CMD_READ_2K; 10521 } 10522 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 10523 pcix_cmd); 10524 } 10525 10526 tw32_f(RDMAC_MODE, rdmac_mode); 10527 udelay(40); 10528 10529 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 10530 tg3_asic_rev(tp) == ASIC_REV_5720) { 10531 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { 10532 if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) 10533 break; 10534 } 10535 if (i < TG3_NUM_RDMA_CHANNELS) { 10536 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10537 val |= tg3_lso_rd_dma_workaround_bit(tp); 10538 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10539 tg3_flag_set(tp, 5719_5720_RDMA_BUG); 10540 } 10541 } 10542 10543 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 10544 if (!tg3_flag(tp, 5705_PLUS)) 10545 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 10546 10547 if (tg3_asic_rev(tp) == ASIC_REV_5761) 10548 tw32(SNDDATAC_MODE, 10549 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 10550 else 10551 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 10552 10553 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 10554 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 10555 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 10556 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 10557 val |= RCVDBDI_MODE_LRG_RING_SZ; 10558 tw32(RCVDBDI_MODE, val); 10559 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 10560 if (tg3_flag(tp, HW_TSO_1) || 10561 tg3_flag(tp, HW_TSO_2) || 10562 tg3_flag(tp, HW_TSO_3)) 10563 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 10564 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 10565 if (tg3_flag(tp, ENABLE_TSS)) 10566 val |= SNDBDI_MODE_MULTI_TXQ_EN; 10567 tw32(SNDBDI_MODE, val); 10568 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 10569 10570 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 10571 err = tg3_load_5701_a0_firmware_fix(tp); 10572 if (err) 10573 return err; 10574 } 10575 10576 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 10577 /* Ignore any errors for the firmware download. If download 10578 * fails, the device will operate with EEE disabled 10579 */ 10580 tg3_load_57766_firmware(tp); 10581 } 10582 10583 if (tg3_flag(tp, TSO_CAPABLE)) { 10584 err = tg3_load_tso_firmware(tp); 10585 if (err) 10586 return err; 10587 } 10588 10589 tp->tx_mode = TX_MODE_ENABLE; 10590 10591 if (tg3_flag(tp, 5755_PLUS) || 10592 tg3_asic_rev(tp) == ASIC_REV_5906) 10593 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 10594 10595 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 10596 tg3_asic_rev(tp) == ASIC_REV_5762) { 10597 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 10598 tp->tx_mode &= ~val; 10599 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 10600 } 10601 10602 tw32_f(MAC_TX_MODE, tp->tx_mode); 10603 udelay(100); 10604 10605 if (tg3_flag(tp, ENABLE_RSS)) { 10606 u32 rss_key[10]; 10607 10608 tg3_rss_write_indir_tbl(tp); 10609 10610 netdev_rss_key_fill(rss_key, 10 * sizeof(u32)); 10611 10612 for (i = 0; i < 10 ; i++) 10613 tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]); 10614 } 10615 10616 tp->rx_mode = RX_MODE_ENABLE; 10617 if (tg3_flag(tp, 5755_PLUS)) 10618 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 10619 10620 if (tg3_asic_rev(tp) == ASIC_REV_5762) 10621 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX; 10622 10623 if (tg3_flag(tp, ENABLE_RSS)) 10624 tp->rx_mode |= RX_MODE_RSS_ENABLE | 10625 RX_MODE_RSS_ITBL_HASH_BITS_7 | 10626 RX_MODE_RSS_IPV6_HASH_EN | 10627 RX_MODE_RSS_TCP_IPV6_HASH_EN | 10628 RX_MODE_RSS_IPV4_HASH_EN | 10629 RX_MODE_RSS_TCP_IPV4_HASH_EN; 10630 10631 tw32_f(MAC_RX_MODE, tp->rx_mode); 10632 udelay(10); 10633 10634 tw32(MAC_LED_CTRL, tp->led_ctrl); 10635 10636 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 10637 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10638 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 10639 udelay(10); 10640 } 10641 tw32_f(MAC_RX_MODE, tp->rx_mode); 10642 udelay(10); 10643 10644 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 10645 if ((tg3_asic_rev(tp) == ASIC_REV_5704) && 10646 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 10647 /* Set drive transmission level to 1.2V */ 10648 /* only if the signal pre-emphasis bit is not set */ 10649 val = tr32(MAC_SERDES_CFG); 10650 val &= 0xfffff000; 10651 val |= 0x880; 10652 tw32(MAC_SERDES_CFG, val); 10653 } 10654 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) 10655 tw32(MAC_SERDES_CFG, 0x616000); 10656 } 10657 10658 /* Prevent chip from dropping frames when flow control 10659 * is enabled. 10660 */ 10661 if (tg3_flag(tp, 57765_CLASS)) 10662 val = 1; 10663 else 10664 val = 2; 10665 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 10666 10667 if (tg3_asic_rev(tp) == ASIC_REV_5704 && 10668 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 10669 /* Use hardware link auto-negotiation */ 10670 tg3_flag_set(tp, HW_AUTONEG); 10671 } 10672 10673 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 10674 tg3_asic_rev(tp) == ASIC_REV_5714) { 10675 u32 tmp; 10676 10677 tmp = tr32(SERDES_RX_CTRL); 10678 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 10679 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 10680 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 10681 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 10682 } 10683 10684 if (!tg3_flag(tp, USE_PHYLIB)) { 10685 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10686 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 10687 10688 err = tg3_setup_phy(tp, false); 10689 if (err) 10690 return err; 10691 10692 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10693 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 10694 u32 tmp; 10695 10696 /* Clear CRC stats. */ 10697 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 10698 tg3_writephy(tp, MII_TG3_TEST1, 10699 tmp | MII_TG3_TEST1_CRC_EN); 10700 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 10701 } 10702 } 10703 } 10704 10705 __tg3_set_rx_mode(tp->dev); 10706 10707 /* Initialize receive rules. */ 10708 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 10709 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 10710 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 10711 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 10712 10713 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 10714 limit = 8; 10715 else 10716 limit = 16; 10717 if (tg3_flag(tp, ENABLE_ASF)) 10718 limit -= 4; 10719 switch (limit) { 10720 case 16: 10721 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 10722 case 15: 10723 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 10724 case 14: 10725 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 10726 case 13: 10727 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 10728 case 12: 10729 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 10730 case 11: 10731 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 10732 case 10: 10733 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 10734 case 9: 10735 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 10736 case 8: 10737 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 10738 case 7: 10739 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 10740 case 6: 10741 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 10742 case 5: 10743 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 10744 case 4: 10745 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 10746 case 3: 10747 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 10748 case 2: 10749 case 1: 10750 10751 default: 10752 break; 10753 } 10754 10755 if (tg3_flag(tp, ENABLE_APE)) 10756 /* Write our heartbeat update interval to APE. */ 10757 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 10758 APE_HOST_HEARTBEAT_INT_5SEC); 10759 10760 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 10761 10762 return 0; 10763 } 10764 10765 /* Called at device open time to get the chip ready for 10766 * packet processing. Invoked with tp->lock held. 10767 */ 10768 static int tg3_init_hw(struct tg3 *tp, bool reset_phy) 10769 { 10770 /* Chip may have been just powered on. If so, the boot code may still 10771 * be running initialization. Wait for it to finish to avoid races in 10772 * accessing the hardware. 10773 */ 10774 tg3_enable_register_access(tp); 10775 tg3_poll_fw(tp); 10776 10777 tg3_switch_clocks(tp); 10778 10779 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 10780 10781 return tg3_reset_hw(tp, reset_phy); 10782 } 10783 10784 #ifdef CONFIG_TIGON3_HWMON 10785 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 10786 { 10787 int i; 10788 10789 for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) { 10790 u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN; 10791 10792 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 10793 off += len; 10794 10795 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 10796 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 10797 memset(ocir, 0, TG3_OCIR_LEN); 10798 } 10799 } 10800 10801 /* sysfs attributes for hwmon */ 10802 static ssize_t tg3_show_temp(struct device *dev, 10803 struct device_attribute *devattr, char *buf) 10804 { 10805 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 10806 struct tg3 *tp = dev_get_drvdata(dev); 10807 u32 temperature; 10808 10809 spin_lock_bh(&tp->lock); 10810 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 10811 sizeof(temperature)); 10812 spin_unlock_bh(&tp->lock); 10813 return sprintf(buf, "%u\n", temperature * 1000); 10814 } 10815 10816 10817 static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL, 10818 TG3_TEMP_SENSOR_OFFSET); 10819 static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL, 10820 TG3_TEMP_CAUTION_OFFSET); 10821 static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL, 10822 TG3_TEMP_MAX_OFFSET); 10823 10824 static struct attribute *tg3_attrs[] = { 10825 &sensor_dev_attr_temp1_input.dev_attr.attr, 10826 &sensor_dev_attr_temp1_crit.dev_attr.attr, 10827 &sensor_dev_attr_temp1_max.dev_attr.attr, 10828 NULL 10829 }; 10830 ATTRIBUTE_GROUPS(tg3); 10831 10832 static void tg3_hwmon_close(struct tg3 *tp) 10833 { 10834 if (tp->hwmon_dev) { 10835 hwmon_device_unregister(tp->hwmon_dev); 10836 tp->hwmon_dev = NULL; 10837 } 10838 } 10839 10840 static void tg3_hwmon_open(struct tg3 *tp) 10841 { 10842 int i; 10843 u32 size = 0; 10844 struct pci_dev *pdev = tp->pdev; 10845 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 10846 10847 tg3_sd_scan_scratchpad(tp, ocirs); 10848 10849 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 10850 if (!ocirs[i].src_data_length) 10851 continue; 10852 10853 size += ocirs[i].src_hdr_length; 10854 size += ocirs[i].src_data_length; 10855 } 10856 10857 if (!size) 10858 return; 10859 10860 tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3", 10861 tp, tg3_groups); 10862 if (IS_ERR(tp->hwmon_dev)) { 10863 tp->hwmon_dev = NULL; 10864 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 10865 } 10866 } 10867 #else 10868 static inline void tg3_hwmon_close(struct tg3 *tp) { } 10869 static inline void tg3_hwmon_open(struct tg3 *tp) { } 10870 #endif /* CONFIG_TIGON3_HWMON */ 10871 10872 10873 #define TG3_STAT_ADD32(PSTAT, REG) \ 10874 do { u32 __val = tr32(REG); \ 10875 (PSTAT)->low += __val; \ 10876 if ((PSTAT)->low < __val) \ 10877 (PSTAT)->high += 1; \ 10878 } while (0) 10879 10880 static void tg3_periodic_fetch_stats(struct tg3 *tp) 10881 { 10882 struct tg3_hw_stats *sp = tp->hw_stats; 10883 10884 if (!tp->link_up) 10885 return; 10886 10887 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 10888 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 10889 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 10890 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 10891 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 10892 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 10893 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 10894 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 10895 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 10896 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 10897 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 10898 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 10899 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 10900 if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && 10901 (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + 10902 sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { 10903 u32 val; 10904 10905 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 10906 val &= ~tg3_lso_rd_dma_workaround_bit(tp); 10907 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 10908 tg3_flag_clear(tp, 5719_5720_RDMA_BUG); 10909 } 10910 10911 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 10912 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 10913 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 10914 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 10915 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 10916 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 10917 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 10918 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 10919 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 10920 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 10921 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 10922 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 10923 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 10924 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 10925 10926 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 10927 if (tg3_asic_rev(tp) != ASIC_REV_5717 && 10928 tg3_asic_rev(tp) != ASIC_REV_5762 && 10929 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 && 10930 tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) { 10931 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 10932 } else { 10933 u32 val = tr32(HOSTCC_FLOW_ATTN); 10934 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 10935 if (val) { 10936 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 10937 sp->rx_discards.low += val; 10938 if (sp->rx_discards.low < val) 10939 sp->rx_discards.high += 1; 10940 } 10941 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 10942 } 10943 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 10944 } 10945 10946 static void tg3_chk_missed_msi(struct tg3 *tp) 10947 { 10948 u32 i; 10949 10950 for (i = 0; i < tp->irq_cnt; i++) { 10951 struct tg3_napi *tnapi = &tp->napi[i]; 10952 10953 if (tg3_has_work(tnapi)) { 10954 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 10955 tnapi->last_tx_cons == tnapi->tx_cons) { 10956 if (tnapi->chk_msi_cnt < 1) { 10957 tnapi->chk_msi_cnt++; 10958 return; 10959 } 10960 tg3_msi(0, tnapi); 10961 } 10962 } 10963 tnapi->chk_msi_cnt = 0; 10964 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 10965 tnapi->last_tx_cons = tnapi->tx_cons; 10966 } 10967 } 10968 10969 static void tg3_timer(struct timer_list *t) 10970 { 10971 struct tg3 *tp = from_timer(tp, t, timer); 10972 10973 spin_lock(&tp->lock); 10974 10975 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) { 10976 spin_unlock(&tp->lock); 10977 goto restart_timer; 10978 } 10979 10980 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 10981 tg3_flag(tp, 57765_CLASS)) 10982 tg3_chk_missed_msi(tp); 10983 10984 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 10985 /* BCM4785: Flush posted writes from GbE to host memory. */ 10986 tr32(HOSTCC_MODE); 10987 } 10988 10989 if (!tg3_flag(tp, TAGGED_STATUS)) { 10990 /* All of this garbage is because when using non-tagged 10991 * IRQ status the mailbox/status_block protocol the chip 10992 * uses with the cpu is race prone. 10993 */ 10994 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 10995 tw32(GRC_LOCAL_CTRL, 10996 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 10997 } else { 10998 tw32(HOSTCC_MODE, tp->coalesce_mode | 10999 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 11000 } 11001 11002 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 11003 spin_unlock(&tp->lock); 11004 tg3_reset_task_schedule(tp); 11005 goto restart_timer; 11006 } 11007 } 11008 11009 /* This part only runs once per second. */ 11010 if (!--tp->timer_counter) { 11011 if (tg3_flag(tp, 5705_PLUS)) 11012 tg3_periodic_fetch_stats(tp); 11013 11014 if (tp->setlpicnt && !--tp->setlpicnt) 11015 tg3_phy_eee_enable(tp); 11016 11017 if (tg3_flag(tp, USE_LINKCHG_REG)) { 11018 u32 mac_stat; 11019 int phy_event; 11020 11021 mac_stat = tr32(MAC_STATUS); 11022 11023 phy_event = 0; 11024 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 11025 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 11026 phy_event = 1; 11027 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 11028 phy_event = 1; 11029 11030 if (phy_event) 11031 tg3_setup_phy(tp, false); 11032 } else if (tg3_flag(tp, POLL_SERDES)) { 11033 u32 mac_stat = tr32(MAC_STATUS); 11034 int need_setup = 0; 11035 11036 if (tp->link_up && 11037 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 11038 need_setup = 1; 11039 } 11040 if (!tp->link_up && 11041 (mac_stat & (MAC_STATUS_PCS_SYNCED | 11042 MAC_STATUS_SIGNAL_DET))) { 11043 need_setup = 1; 11044 } 11045 if (need_setup) { 11046 if (!tp->serdes_counter) { 11047 tw32_f(MAC_MODE, 11048 (tp->mac_mode & 11049 ~MAC_MODE_PORT_MODE_MASK)); 11050 udelay(40); 11051 tw32_f(MAC_MODE, tp->mac_mode); 11052 udelay(40); 11053 } 11054 tg3_setup_phy(tp, false); 11055 } 11056 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 11057 tg3_flag(tp, 5780_CLASS)) { 11058 tg3_serdes_parallel_detect(tp); 11059 } else if (tg3_flag(tp, POLL_CPMU_LINK)) { 11060 u32 cpmu = tr32(TG3_CPMU_STATUS); 11061 bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) == 11062 TG3_CPMU_STATUS_LINK_MASK); 11063 11064 if (link_up != tp->link_up) 11065 tg3_setup_phy(tp, false); 11066 } 11067 11068 tp->timer_counter = tp->timer_multiplier; 11069 } 11070 11071 /* Heartbeat is only sent once every 2 seconds. 11072 * 11073 * The heartbeat is to tell the ASF firmware that the host 11074 * driver is still alive. In the event that the OS crashes, 11075 * ASF needs to reset the hardware to free up the FIFO space 11076 * that may be filled with rx packets destined for the host. 11077 * If the FIFO is full, ASF will no longer function properly. 11078 * 11079 * Unintended resets have been reported on real time kernels 11080 * where the timer doesn't run on time. Netpoll will also have 11081 * same problem. 11082 * 11083 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 11084 * to check the ring condition when the heartbeat is expiring 11085 * before doing the reset. This will prevent most unintended 11086 * resets. 11087 */ 11088 if (!--tp->asf_counter) { 11089 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 11090 tg3_wait_for_event_ack(tp); 11091 11092 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 11093 FWCMD_NICDRV_ALIVE3); 11094 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 11095 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 11096 TG3_FW_UPDATE_TIMEOUT_SEC); 11097 11098 tg3_generate_fw_event(tp); 11099 } 11100 tp->asf_counter = tp->asf_multiplier; 11101 } 11102 11103 /* Update the APE heartbeat every 5 seconds.*/ 11104 tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL); 11105 11106 spin_unlock(&tp->lock); 11107 11108 restart_timer: 11109 tp->timer.expires = jiffies + tp->timer_offset; 11110 add_timer(&tp->timer); 11111 } 11112 11113 static void tg3_timer_init(struct tg3 *tp) 11114 { 11115 if (tg3_flag(tp, TAGGED_STATUS) && 11116 tg3_asic_rev(tp) != ASIC_REV_5717 && 11117 !tg3_flag(tp, 57765_CLASS)) 11118 tp->timer_offset = HZ; 11119 else 11120 tp->timer_offset = HZ / 10; 11121 11122 BUG_ON(tp->timer_offset > HZ); 11123 11124 tp->timer_multiplier = (HZ / tp->timer_offset); 11125 tp->asf_multiplier = (HZ / tp->timer_offset) * 11126 TG3_FW_UPDATE_FREQ_SEC; 11127 11128 timer_setup(&tp->timer, tg3_timer, 0); 11129 } 11130 11131 static void tg3_timer_start(struct tg3 *tp) 11132 { 11133 tp->asf_counter = tp->asf_multiplier; 11134 tp->timer_counter = tp->timer_multiplier; 11135 11136 tp->timer.expires = jiffies + tp->timer_offset; 11137 add_timer(&tp->timer); 11138 } 11139 11140 static void tg3_timer_stop(struct tg3 *tp) 11141 { 11142 del_timer_sync(&tp->timer); 11143 } 11144 11145 /* Restart hardware after configuration changes, self-test, etc. 11146 * Invoked with tp->lock held. 11147 */ 11148 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy) 11149 __releases(tp->lock) 11150 __acquires(tp->lock) 11151 { 11152 int err; 11153 11154 err = tg3_init_hw(tp, reset_phy); 11155 if (err) { 11156 netdev_err(tp->dev, 11157 "Failed to re-initialize device, aborting\n"); 11158 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11159 tg3_full_unlock(tp); 11160 tg3_timer_stop(tp); 11161 tp->irq_sync = 0; 11162 tg3_napi_enable(tp); 11163 dev_close(tp->dev); 11164 tg3_full_lock(tp, 0); 11165 } 11166 return err; 11167 } 11168 11169 static void tg3_reset_task(struct work_struct *work) 11170 { 11171 struct tg3 *tp = container_of(work, struct tg3, reset_task); 11172 int err; 11173 11174 rtnl_lock(); 11175 tg3_full_lock(tp, 0); 11176 11177 if (!netif_running(tp->dev)) { 11178 tg3_flag_clear(tp, RESET_TASK_PENDING); 11179 tg3_full_unlock(tp); 11180 rtnl_unlock(); 11181 return; 11182 } 11183 11184 tg3_full_unlock(tp); 11185 11186 tg3_phy_stop(tp); 11187 11188 tg3_netif_stop(tp); 11189 11190 tg3_full_lock(tp, 1); 11191 11192 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 11193 tp->write32_tx_mbox = tg3_write32_tx_mbox; 11194 tp->write32_rx_mbox = tg3_write_flush_reg32; 11195 tg3_flag_set(tp, MBOX_WRITE_REORDER); 11196 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 11197 } 11198 11199 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 11200 err = tg3_init_hw(tp, true); 11201 if (err) 11202 goto out; 11203 11204 tg3_netif_start(tp); 11205 11206 out: 11207 tg3_full_unlock(tp); 11208 11209 if (!err) 11210 tg3_phy_start(tp); 11211 11212 tg3_flag_clear(tp, RESET_TASK_PENDING); 11213 rtnl_unlock(); 11214 } 11215 11216 static int tg3_request_irq(struct tg3 *tp, int irq_num) 11217 { 11218 irq_handler_t fn; 11219 unsigned long flags; 11220 char *name; 11221 struct tg3_napi *tnapi = &tp->napi[irq_num]; 11222 11223 if (tp->irq_cnt == 1) 11224 name = tp->dev->name; 11225 else { 11226 name = &tnapi->irq_lbl[0]; 11227 if (tnapi->tx_buffers && tnapi->rx_rcb) 11228 snprintf(name, IFNAMSIZ, 11229 "%s-txrx-%d", tp->dev->name, irq_num); 11230 else if (tnapi->tx_buffers) 11231 snprintf(name, IFNAMSIZ, 11232 "%s-tx-%d", tp->dev->name, irq_num); 11233 else if (tnapi->rx_rcb) 11234 snprintf(name, IFNAMSIZ, 11235 "%s-rx-%d", tp->dev->name, irq_num); 11236 else 11237 snprintf(name, IFNAMSIZ, 11238 "%s-%d", tp->dev->name, irq_num); 11239 name[IFNAMSIZ-1] = 0; 11240 } 11241 11242 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11243 fn = tg3_msi; 11244 if (tg3_flag(tp, 1SHOT_MSI)) 11245 fn = tg3_msi_1shot; 11246 flags = 0; 11247 } else { 11248 fn = tg3_interrupt; 11249 if (tg3_flag(tp, TAGGED_STATUS)) 11250 fn = tg3_interrupt_tagged; 11251 flags = IRQF_SHARED; 11252 } 11253 11254 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 11255 } 11256 11257 static int tg3_test_interrupt(struct tg3 *tp) 11258 { 11259 struct tg3_napi *tnapi = &tp->napi[0]; 11260 struct net_device *dev = tp->dev; 11261 int err, i, intr_ok = 0; 11262 u32 val; 11263 11264 if (!netif_running(dev)) 11265 return -ENODEV; 11266 11267 tg3_disable_ints(tp); 11268 11269 free_irq(tnapi->irq_vec, tnapi); 11270 11271 /* 11272 * Turn off MSI one shot mode. Otherwise this test has no 11273 * observable way to know whether the interrupt was delivered. 11274 */ 11275 if (tg3_flag(tp, 57765_PLUS)) { 11276 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 11277 tw32(MSGINT_MODE, val); 11278 } 11279 11280 err = request_irq(tnapi->irq_vec, tg3_test_isr, 11281 IRQF_SHARED, dev->name, tnapi); 11282 if (err) 11283 return err; 11284 11285 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 11286 tg3_enable_ints(tp); 11287 11288 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11289 tnapi->coal_now); 11290 11291 for (i = 0; i < 5; i++) { 11292 u32 int_mbox, misc_host_ctrl; 11293 11294 int_mbox = tr32_mailbox(tnapi->int_mbox); 11295 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 11296 11297 if ((int_mbox != 0) || 11298 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 11299 intr_ok = 1; 11300 break; 11301 } 11302 11303 if (tg3_flag(tp, 57765_PLUS) && 11304 tnapi->hw_status->status_tag != tnapi->last_tag) 11305 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 11306 11307 msleep(10); 11308 } 11309 11310 tg3_disable_ints(tp); 11311 11312 free_irq(tnapi->irq_vec, tnapi); 11313 11314 err = tg3_request_irq(tp, 0); 11315 11316 if (err) 11317 return err; 11318 11319 if (intr_ok) { 11320 /* Reenable MSI one shot mode. */ 11321 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 11322 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 11323 tw32(MSGINT_MODE, val); 11324 } 11325 return 0; 11326 } 11327 11328 return -EIO; 11329 } 11330 11331 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 11332 * successfully restored 11333 */ 11334 static int tg3_test_msi(struct tg3 *tp) 11335 { 11336 int err; 11337 u16 pci_cmd; 11338 11339 if (!tg3_flag(tp, USING_MSI)) 11340 return 0; 11341 11342 /* Turn off SERR reporting in case MSI terminates with Master 11343 * Abort. 11344 */ 11345 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 11346 pci_write_config_word(tp->pdev, PCI_COMMAND, 11347 pci_cmd & ~PCI_COMMAND_SERR); 11348 11349 err = tg3_test_interrupt(tp); 11350 11351 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 11352 11353 if (!err) 11354 return 0; 11355 11356 /* other failures */ 11357 if (err != -EIO) 11358 return err; 11359 11360 /* MSI test failed, go back to INTx mode */ 11361 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 11362 "to INTx mode. Please report this failure to the PCI " 11363 "maintainer and include system chipset information\n"); 11364 11365 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11366 11367 pci_disable_msi(tp->pdev); 11368 11369 tg3_flag_clear(tp, USING_MSI); 11370 tp->napi[0].irq_vec = tp->pdev->irq; 11371 11372 err = tg3_request_irq(tp, 0); 11373 if (err) 11374 return err; 11375 11376 /* Need to reset the chip because the MSI cycle may have terminated 11377 * with Master Abort. 11378 */ 11379 tg3_full_lock(tp, 1); 11380 11381 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11382 err = tg3_init_hw(tp, true); 11383 11384 tg3_full_unlock(tp); 11385 11386 if (err) 11387 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 11388 11389 return err; 11390 } 11391 11392 static int tg3_request_firmware(struct tg3 *tp) 11393 { 11394 const struct tg3_firmware_hdr *fw_hdr; 11395 11396 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 11397 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 11398 tp->fw_needed); 11399 return -ENOENT; 11400 } 11401 11402 fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data; 11403 11404 /* Firmware blob starts with version numbers, followed by 11405 * start address and _full_ length including BSS sections 11406 * (which must be longer than the actual data, of course 11407 */ 11408 11409 tp->fw_len = be32_to_cpu(fw_hdr->len); /* includes bss */ 11410 if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) { 11411 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 11412 tp->fw_len, tp->fw_needed); 11413 release_firmware(tp->fw); 11414 tp->fw = NULL; 11415 return -EINVAL; 11416 } 11417 11418 /* We no longer need firmware; we have it. */ 11419 tp->fw_needed = NULL; 11420 return 0; 11421 } 11422 11423 static u32 tg3_irq_count(struct tg3 *tp) 11424 { 11425 u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt); 11426 11427 if (irq_cnt > 1) { 11428 /* We want as many rx rings enabled as there are cpus. 11429 * In multiqueue MSI-X mode, the first MSI-X vector 11430 * only deals with link interrupts, etc, so we add 11431 * one to the number of vectors we are requesting. 11432 */ 11433 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max); 11434 } 11435 11436 return irq_cnt; 11437 } 11438 11439 static bool tg3_enable_msix(struct tg3 *tp) 11440 { 11441 int i, rc; 11442 struct msix_entry msix_ent[TG3_IRQ_MAX_VECS]; 11443 11444 tp->txq_cnt = tp->txq_req; 11445 tp->rxq_cnt = tp->rxq_req; 11446 if (!tp->rxq_cnt) 11447 tp->rxq_cnt = netif_get_num_default_rss_queues(); 11448 if (tp->rxq_cnt > tp->rxq_max) 11449 tp->rxq_cnt = tp->rxq_max; 11450 11451 /* Disable multiple TX rings by default. Simple round-robin hardware 11452 * scheduling of the TX rings can cause starvation of rings with 11453 * small packets when other rings have TSO or jumbo packets. 11454 */ 11455 if (!tp->txq_req) 11456 tp->txq_cnt = 1; 11457 11458 tp->irq_cnt = tg3_irq_count(tp); 11459 11460 for (i = 0; i < tp->irq_max; i++) { 11461 msix_ent[i].entry = i; 11462 msix_ent[i].vector = 0; 11463 } 11464 11465 rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt); 11466 if (rc < 0) { 11467 return false; 11468 } else if (rc < tp->irq_cnt) { 11469 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 11470 tp->irq_cnt, rc); 11471 tp->irq_cnt = rc; 11472 tp->rxq_cnt = max(rc - 1, 1); 11473 if (tp->txq_cnt) 11474 tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max); 11475 } 11476 11477 for (i = 0; i < tp->irq_max; i++) 11478 tp->napi[i].irq_vec = msix_ent[i].vector; 11479 11480 if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) { 11481 pci_disable_msix(tp->pdev); 11482 return false; 11483 } 11484 11485 if (tp->irq_cnt == 1) 11486 return true; 11487 11488 tg3_flag_set(tp, ENABLE_RSS); 11489 11490 if (tp->txq_cnt > 1) 11491 tg3_flag_set(tp, ENABLE_TSS); 11492 11493 netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt); 11494 11495 return true; 11496 } 11497 11498 static void tg3_ints_init(struct tg3 *tp) 11499 { 11500 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 11501 !tg3_flag(tp, TAGGED_STATUS)) { 11502 /* All MSI supporting chips should support tagged 11503 * status. Assert that this is the case. 11504 */ 11505 netdev_warn(tp->dev, 11506 "MSI without TAGGED_STATUS? Not using MSI\n"); 11507 goto defcfg; 11508 } 11509 11510 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 11511 tg3_flag_set(tp, USING_MSIX); 11512 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 11513 tg3_flag_set(tp, USING_MSI); 11514 11515 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 11516 u32 msi_mode = tr32(MSGINT_MODE); 11517 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 11518 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 11519 if (!tg3_flag(tp, 1SHOT_MSI)) 11520 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 11521 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 11522 } 11523 defcfg: 11524 if (!tg3_flag(tp, USING_MSIX)) { 11525 tp->irq_cnt = 1; 11526 tp->napi[0].irq_vec = tp->pdev->irq; 11527 } 11528 11529 if (tp->irq_cnt == 1) { 11530 tp->txq_cnt = 1; 11531 tp->rxq_cnt = 1; 11532 netif_set_real_num_tx_queues(tp->dev, 1); 11533 netif_set_real_num_rx_queues(tp->dev, 1); 11534 } 11535 } 11536 11537 static void tg3_ints_fini(struct tg3 *tp) 11538 { 11539 if (tg3_flag(tp, USING_MSIX)) 11540 pci_disable_msix(tp->pdev); 11541 else if (tg3_flag(tp, USING_MSI)) 11542 pci_disable_msi(tp->pdev); 11543 tg3_flag_clear(tp, USING_MSI); 11544 tg3_flag_clear(tp, USING_MSIX); 11545 tg3_flag_clear(tp, ENABLE_RSS); 11546 tg3_flag_clear(tp, ENABLE_TSS); 11547 } 11548 11549 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, 11550 bool init) 11551 { 11552 struct net_device *dev = tp->dev; 11553 int i, err; 11554 11555 /* 11556 * Setup interrupts first so we know how 11557 * many NAPI resources to allocate 11558 */ 11559 tg3_ints_init(tp); 11560 11561 tg3_rss_check_indir_tbl(tp); 11562 11563 /* The placement of this call is tied 11564 * to the setup and use of Host TX descriptors. 11565 */ 11566 err = tg3_alloc_consistent(tp); 11567 if (err) 11568 goto out_ints_fini; 11569 11570 tg3_napi_init(tp); 11571 11572 tg3_napi_enable(tp); 11573 11574 for (i = 0; i < tp->irq_cnt; i++) { 11575 err = tg3_request_irq(tp, i); 11576 if (err) { 11577 for (i--; i >= 0; i--) { 11578 struct tg3_napi *tnapi = &tp->napi[i]; 11579 11580 free_irq(tnapi->irq_vec, tnapi); 11581 } 11582 goto out_napi_fini; 11583 } 11584 } 11585 11586 tg3_full_lock(tp, 0); 11587 11588 if (init) 11589 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 11590 11591 err = tg3_init_hw(tp, reset_phy); 11592 if (err) { 11593 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11594 tg3_free_rings(tp); 11595 } 11596 11597 tg3_full_unlock(tp); 11598 11599 if (err) 11600 goto out_free_irq; 11601 11602 if (test_irq && tg3_flag(tp, USING_MSI)) { 11603 err = tg3_test_msi(tp); 11604 11605 if (err) { 11606 tg3_full_lock(tp, 0); 11607 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11608 tg3_free_rings(tp); 11609 tg3_full_unlock(tp); 11610 11611 goto out_napi_fini; 11612 } 11613 11614 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 11615 u32 val = tr32(PCIE_TRANSACTION_CFG); 11616 11617 tw32(PCIE_TRANSACTION_CFG, 11618 val | PCIE_TRANS_CFG_1SHOT_MSI); 11619 } 11620 } 11621 11622 tg3_phy_start(tp); 11623 11624 tg3_hwmon_open(tp); 11625 11626 tg3_full_lock(tp, 0); 11627 11628 tg3_timer_start(tp); 11629 tg3_flag_set(tp, INIT_COMPLETE); 11630 tg3_enable_ints(tp); 11631 11632 tg3_ptp_resume(tp); 11633 11634 tg3_full_unlock(tp); 11635 11636 netif_tx_start_all_queues(dev); 11637 11638 /* 11639 * Reset loopback feature if it was turned on while the device was down 11640 * make sure that it's installed properly now. 11641 */ 11642 if (dev->features & NETIF_F_LOOPBACK) 11643 tg3_set_loopback(dev, dev->features); 11644 11645 return 0; 11646 11647 out_free_irq: 11648 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11649 struct tg3_napi *tnapi = &tp->napi[i]; 11650 free_irq(tnapi->irq_vec, tnapi); 11651 } 11652 11653 out_napi_fini: 11654 tg3_napi_disable(tp); 11655 tg3_napi_fini(tp); 11656 tg3_free_consistent(tp); 11657 11658 out_ints_fini: 11659 tg3_ints_fini(tp); 11660 11661 return err; 11662 } 11663 11664 static void tg3_stop(struct tg3 *tp) 11665 { 11666 int i; 11667 11668 tg3_reset_task_cancel(tp); 11669 tg3_netif_stop(tp); 11670 11671 tg3_timer_stop(tp); 11672 11673 tg3_hwmon_close(tp); 11674 11675 tg3_phy_stop(tp); 11676 11677 tg3_full_lock(tp, 1); 11678 11679 tg3_disable_ints(tp); 11680 11681 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11682 tg3_free_rings(tp); 11683 tg3_flag_clear(tp, INIT_COMPLETE); 11684 11685 tg3_full_unlock(tp); 11686 11687 for (i = tp->irq_cnt - 1; i >= 0; i--) { 11688 struct tg3_napi *tnapi = &tp->napi[i]; 11689 free_irq(tnapi->irq_vec, tnapi); 11690 } 11691 11692 tg3_ints_fini(tp); 11693 11694 tg3_napi_fini(tp); 11695 11696 tg3_free_consistent(tp); 11697 } 11698 11699 static int tg3_open(struct net_device *dev) 11700 { 11701 struct tg3 *tp = netdev_priv(dev); 11702 int err; 11703 11704 if (tp->pcierr_recovery) { 11705 netdev_err(dev, "Failed to open device. PCI error recovery " 11706 "in progress\n"); 11707 return -EAGAIN; 11708 } 11709 11710 if (tp->fw_needed) { 11711 err = tg3_request_firmware(tp); 11712 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 11713 if (err) { 11714 netdev_warn(tp->dev, "EEE capability disabled\n"); 11715 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11716 } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 11717 netdev_warn(tp->dev, "EEE capability restored\n"); 11718 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 11719 } 11720 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) { 11721 if (err) 11722 return err; 11723 } else if (err) { 11724 netdev_warn(tp->dev, "TSO capability disabled\n"); 11725 tg3_flag_clear(tp, TSO_CAPABLE); 11726 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 11727 netdev_notice(tp->dev, "TSO capability restored\n"); 11728 tg3_flag_set(tp, TSO_CAPABLE); 11729 } 11730 } 11731 11732 tg3_carrier_off(tp); 11733 11734 err = tg3_power_up(tp); 11735 if (err) 11736 return err; 11737 11738 tg3_full_lock(tp, 0); 11739 11740 tg3_disable_ints(tp); 11741 tg3_flag_clear(tp, INIT_COMPLETE); 11742 11743 tg3_full_unlock(tp); 11744 11745 err = tg3_start(tp, 11746 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN), 11747 true, true); 11748 if (err) { 11749 tg3_frob_aux_power(tp, false); 11750 pci_set_power_state(tp->pdev, PCI_D3hot); 11751 } 11752 11753 return err; 11754 } 11755 11756 static int tg3_close(struct net_device *dev) 11757 { 11758 struct tg3 *tp = netdev_priv(dev); 11759 11760 if (tp->pcierr_recovery) { 11761 netdev_err(dev, "Failed to close device. PCI error recovery " 11762 "in progress\n"); 11763 return -EAGAIN; 11764 } 11765 11766 tg3_stop(tp); 11767 11768 if (pci_device_is_present(tp->pdev)) { 11769 tg3_power_down_prepare(tp); 11770 11771 tg3_carrier_off(tp); 11772 } 11773 return 0; 11774 } 11775 11776 static inline u64 get_stat64(tg3_stat64_t *val) 11777 { 11778 return ((u64)val->high << 32) | ((u64)val->low); 11779 } 11780 11781 static u64 tg3_calc_crc_errors(struct tg3 *tp) 11782 { 11783 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11784 11785 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11786 (tg3_asic_rev(tp) == ASIC_REV_5700 || 11787 tg3_asic_rev(tp) == ASIC_REV_5701)) { 11788 u32 val; 11789 11790 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 11791 tg3_writephy(tp, MII_TG3_TEST1, 11792 val | MII_TG3_TEST1_CRC_EN); 11793 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 11794 } else 11795 val = 0; 11796 11797 tp->phy_crc_errors += val; 11798 11799 return tp->phy_crc_errors; 11800 } 11801 11802 return get_stat64(&hw_stats->rx_fcs_errors); 11803 } 11804 11805 #define ESTAT_ADD(member) \ 11806 estats->member = old_estats->member + \ 11807 get_stat64(&hw_stats->member) 11808 11809 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 11810 { 11811 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 11812 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11813 11814 ESTAT_ADD(rx_octets); 11815 ESTAT_ADD(rx_fragments); 11816 ESTAT_ADD(rx_ucast_packets); 11817 ESTAT_ADD(rx_mcast_packets); 11818 ESTAT_ADD(rx_bcast_packets); 11819 ESTAT_ADD(rx_fcs_errors); 11820 ESTAT_ADD(rx_align_errors); 11821 ESTAT_ADD(rx_xon_pause_rcvd); 11822 ESTAT_ADD(rx_xoff_pause_rcvd); 11823 ESTAT_ADD(rx_mac_ctrl_rcvd); 11824 ESTAT_ADD(rx_xoff_entered); 11825 ESTAT_ADD(rx_frame_too_long_errors); 11826 ESTAT_ADD(rx_jabbers); 11827 ESTAT_ADD(rx_undersize_packets); 11828 ESTAT_ADD(rx_in_length_errors); 11829 ESTAT_ADD(rx_out_length_errors); 11830 ESTAT_ADD(rx_64_or_less_octet_packets); 11831 ESTAT_ADD(rx_65_to_127_octet_packets); 11832 ESTAT_ADD(rx_128_to_255_octet_packets); 11833 ESTAT_ADD(rx_256_to_511_octet_packets); 11834 ESTAT_ADD(rx_512_to_1023_octet_packets); 11835 ESTAT_ADD(rx_1024_to_1522_octet_packets); 11836 ESTAT_ADD(rx_1523_to_2047_octet_packets); 11837 ESTAT_ADD(rx_2048_to_4095_octet_packets); 11838 ESTAT_ADD(rx_4096_to_8191_octet_packets); 11839 ESTAT_ADD(rx_8192_to_9022_octet_packets); 11840 11841 ESTAT_ADD(tx_octets); 11842 ESTAT_ADD(tx_collisions); 11843 ESTAT_ADD(tx_xon_sent); 11844 ESTAT_ADD(tx_xoff_sent); 11845 ESTAT_ADD(tx_flow_control); 11846 ESTAT_ADD(tx_mac_errors); 11847 ESTAT_ADD(tx_single_collisions); 11848 ESTAT_ADD(tx_mult_collisions); 11849 ESTAT_ADD(tx_deferred); 11850 ESTAT_ADD(tx_excessive_collisions); 11851 ESTAT_ADD(tx_late_collisions); 11852 ESTAT_ADD(tx_collide_2times); 11853 ESTAT_ADD(tx_collide_3times); 11854 ESTAT_ADD(tx_collide_4times); 11855 ESTAT_ADD(tx_collide_5times); 11856 ESTAT_ADD(tx_collide_6times); 11857 ESTAT_ADD(tx_collide_7times); 11858 ESTAT_ADD(tx_collide_8times); 11859 ESTAT_ADD(tx_collide_9times); 11860 ESTAT_ADD(tx_collide_10times); 11861 ESTAT_ADD(tx_collide_11times); 11862 ESTAT_ADD(tx_collide_12times); 11863 ESTAT_ADD(tx_collide_13times); 11864 ESTAT_ADD(tx_collide_14times); 11865 ESTAT_ADD(tx_collide_15times); 11866 ESTAT_ADD(tx_ucast_packets); 11867 ESTAT_ADD(tx_mcast_packets); 11868 ESTAT_ADD(tx_bcast_packets); 11869 ESTAT_ADD(tx_carrier_sense_errors); 11870 ESTAT_ADD(tx_discards); 11871 ESTAT_ADD(tx_errors); 11872 11873 ESTAT_ADD(dma_writeq_full); 11874 ESTAT_ADD(dma_write_prioq_full); 11875 ESTAT_ADD(rxbds_empty); 11876 ESTAT_ADD(rx_discards); 11877 ESTAT_ADD(rx_errors); 11878 ESTAT_ADD(rx_threshold_hit); 11879 11880 ESTAT_ADD(dma_readq_full); 11881 ESTAT_ADD(dma_read_prioq_full); 11882 ESTAT_ADD(tx_comp_queue_full); 11883 11884 ESTAT_ADD(ring_set_send_prod_index); 11885 ESTAT_ADD(ring_status_update); 11886 ESTAT_ADD(nic_irqs); 11887 ESTAT_ADD(nic_avoided_irqs); 11888 ESTAT_ADD(nic_tx_threshold_hit); 11889 11890 ESTAT_ADD(mbuf_lwm_thresh_hit); 11891 } 11892 11893 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 11894 { 11895 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 11896 struct tg3_hw_stats *hw_stats = tp->hw_stats; 11897 11898 stats->rx_packets = old_stats->rx_packets + 11899 get_stat64(&hw_stats->rx_ucast_packets) + 11900 get_stat64(&hw_stats->rx_mcast_packets) + 11901 get_stat64(&hw_stats->rx_bcast_packets); 11902 11903 stats->tx_packets = old_stats->tx_packets + 11904 get_stat64(&hw_stats->tx_ucast_packets) + 11905 get_stat64(&hw_stats->tx_mcast_packets) + 11906 get_stat64(&hw_stats->tx_bcast_packets); 11907 11908 stats->rx_bytes = old_stats->rx_bytes + 11909 get_stat64(&hw_stats->rx_octets); 11910 stats->tx_bytes = old_stats->tx_bytes + 11911 get_stat64(&hw_stats->tx_octets); 11912 11913 stats->rx_errors = old_stats->rx_errors + 11914 get_stat64(&hw_stats->rx_errors); 11915 stats->tx_errors = old_stats->tx_errors + 11916 get_stat64(&hw_stats->tx_errors) + 11917 get_stat64(&hw_stats->tx_mac_errors) + 11918 get_stat64(&hw_stats->tx_carrier_sense_errors) + 11919 get_stat64(&hw_stats->tx_discards); 11920 11921 stats->multicast = old_stats->multicast + 11922 get_stat64(&hw_stats->rx_mcast_packets); 11923 stats->collisions = old_stats->collisions + 11924 get_stat64(&hw_stats->tx_collisions); 11925 11926 stats->rx_length_errors = old_stats->rx_length_errors + 11927 get_stat64(&hw_stats->rx_frame_too_long_errors) + 11928 get_stat64(&hw_stats->rx_undersize_packets); 11929 11930 stats->rx_frame_errors = old_stats->rx_frame_errors + 11931 get_stat64(&hw_stats->rx_align_errors); 11932 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 11933 get_stat64(&hw_stats->tx_discards); 11934 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 11935 get_stat64(&hw_stats->tx_carrier_sense_errors); 11936 11937 stats->rx_crc_errors = old_stats->rx_crc_errors + 11938 tg3_calc_crc_errors(tp); 11939 11940 stats->rx_missed_errors = old_stats->rx_missed_errors + 11941 get_stat64(&hw_stats->rx_discards); 11942 11943 stats->rx_dropped = tp->rx_dropped; 11944 stats->tx_dropped = tp->tx_dropped; 11945 } 11946 11947 static int tg3_get_regs_len(struct net_device *dev) 11948 { 11949 return TG3_REG_BLK_SIZE; 11950 } 11951 11952 static void tg3_get_regs(struct net_device *dev, 11953 struct ethtool_regs *regs, void *_p) 11954 { 11955 struct tg3 *tp = netdev_priv(dev); 11956 11957 regs->version = 0; 11958 11959 memset(_p, 0, TG3_REG_BLK_SIZE); 11960 11961 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11962 return; 11963 11964 tg3_full_lock(tp, 0); 11965 11966 tg3_dump_legacy_regs(tp, (u32 *)_p); 11967 11968 tg3_full_unlock(tp); 11969 } 11970 11971 static int tg3_get_eeprom_len(struct net_device *dev) 11972 { 11973 struct tg3 *tp = netdev_priv(dev); 11974 11975 return tp->nvram_size; 11976 } 11977 11978 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 11979 { 11980 struct tg3 *tp = netdev_priv(dev); 11981 int ret, cpmu_restore = 0; 11982 u8 *pd; 11983 u32 i, offset, len, b_offset, b_count, cpmu_val = 0; 11984 __be32 val; 11985 11986 if (tg3_flag(tp, NO_NVRAM)) 11987 return -EINVAL; 11988 11989 offset = eeprom->offset; 11990 len = eeprom->len; 11991 eeprom->len = 0; 11992 11993 eeprom->magic = TG3_EEPROM_MAGIC; 11994 11995 /* Override clock, link aware and link idle modes */ 11996 if (tg3_flag(tp, CPMU_PRESENT)) { 11997 cpmu_val = tr32(TG3_CPMU_CTRL); 11998 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE | 11999 CPMU_CTRL_LINK_IDLE_MODE)) { 12000 tw32(TG3_CPMU_CTRL, cpmu_val & 12001 ~(CPMU_CTRL_LINK_AWARE_MODE | 12002 CPMU_CTRL_LINK_IDLE_MODE)); 12003 cpmu_restore = 1; 12004 } 12005 } 12006 tg3_override_clk(tp); 12007 12008 if (offset & 3) { 12009 /* adjustments to start on required 4 byte boundary */ 12010 b_offset = offset & 3; 12011 b_count = 4 - b_offset; 12012 if (b_count > len) { 12013 /* i.e. offset=1 len=2 */ 12014 b_count = len; 12015 } 12016 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 12017 if (ret) 12018 goto eeprom_done; 12019 memcpy(data, ((char *)&val) + b_offset, b_count); 12020 len -= b_count; 12021 offset += b_count; 12022 eeprom->len += b_count; 12023 } 12024 12025 /* read bytes up to the last 4 byte boundary */ 12026 pd = &data[eeprom->len]; 12027 for (i = 0; i < (len - (len & 3)); i += 4) { 12028 ret = tg3_nvram_read_be32(tp, offset + i, &val); 12029 if (ret) { 12030 if (i) 12031 i -= 4; 12032 eeprom->len += i; 12033 goto eeprom_done; 12034 } 12035 memcpy(pd + i, &val, 4); 12036 if (need_resched()) { 12037 if (signal_pending(current)) { 12038 eeprom->len += i; 12039 ret = -EINTR; 12040 goto eeprom_done; 12041 } 12042 cond_resched(); 12043 } 12044 } 12045 eeprom->len += i; 12046 12047 if (len & 3) { 12048 /* read last bytes not ending on 4 byte boundary */ 12049 pd = &data[eeprom->len]; 12050 b_count = len & 3; 12051 b_offset = offset + len - b_count; 12052 ret = tg3_nvram_read_be32(tp, b_offset, &val); 12053 if (ret) 12054 goto eeprom_done; 12055 memcpy(pd, &val, b_count); 12056 eeprom->len += b_count; 12057 } 12058 ret = 0; 12059 12060 eeprom_done: 12061 /* Restore clock, link aware and link idle modes */ 12062 tg3_restore_clk(tp); 12063 if (cpmu_restore) 12064 tw32(TG3_CPMU_CTRL, cpmu_val); 12065 12066 return ret; 12067 } 12068 12069 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 12070 { 12071 struct tg3 *tp = netdev_priv(dev); 12072 int ret; 12073 u32 offset, len, b_offset, odd_len; 12074 u8 *buf; 12075 __be32 start = 0, end; 12076 12077 if (tg3_flag(tp, NO_NVRAM) || 12078 eeprom->magic != TG3_EEPROM_MAGIC) 12079 return -EINVAL; 12080 12081 offset = eeprom->offset; 12082 len = eeprom->len; 12083 12084 if ((b_offset = (offset & 3))) { 12085 /* adjustments to start on required 4 byte boundary */ 12086 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 12087 if (ret) 12088 return ret; 12089 len += b_offset; 12090 offset &= ~3; 12091 if (len < 4) 12092 len = 4; 12093 } 12094 12095 odd_len = 0; 12096 if (len & 3) { 12097 /* adjustments to end on required 4 byte boundary */ 12098 odd_len = 1; 12099 len = (len + 3) & ~3; 12100 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 12101 if (ret) 12102 return ret; 12103 } 12104 12105 buf = data; 12106 if (b_offset || odd_len) { 12107 buf = kmalloc(len, GFP_KERNEL); 12108 if (!buf) 12109 return -ENOMEM; 12110 if (b_offset) 12111 memcpy(buf, &start, 4); 12112 if (odd_len) 12113 memcpy(buf+len-4, &end, 4); 12114 memcpy(buf + b_offset, data, eeprom->len); 12115 } 12116 12117 ret = tg3_nvram_write_block(tp, offset, len, buf); 12118 12119 if (buf != data) 12120 kfree(buf); 12121 12122 return ret; 12123 } 12124 12125 static int tg3_get_link_ksettings(struct net_device *dev, 12126 struct ethtool_link_ksettings *cmd) 12127 { 12128 struct tg3 *tp = netdev_priv(dev); 12129 u32 supported, advertising; 12130 12131 if (tg3_flag(tp, USE_PHYLIB)) { 12132 struct phy_device *phydev; 12133 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12134 return -EAGAIN; 12135 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12136 phy_ethtool_ksettings_get(phydev, cmd); 12137 12138 return 0; 12139 } 12140 12141 supported = (SUPPORTED_Autoneg); 12142 12143 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12144 supported |= (SUPPORTED_1000baseT_Half | 12145 SUPPORTED_1000baseT_Full); 12146 12147 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12148 supported |= (SUPPORTED_100baseT_Half | 12149 SUPPORTED_100baseT_Full | 12150 SUPPORTED_10baseT_Half | 12151 SUPPORTED_10baseT_Full | 12152 SUPPORTED_TP); 12153 cmd->base.port = PORT_TP; 12154 } else { 12155 supported |= SUPPORTED_FIBRE; 12156 cmd->base.port = PORT_FIBRE; 12157 } 12158 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 12159 supported); 12160 12161 advertising = tp->link_config.advertising; 12162 if (tg3_flag(tp, PAUSE_AUTONEG)) { 12163 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 12164 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12165 advertising |= ADVERTISED_Pause; 12166 } else { 12167 advertising |= ADVERTISED_Pause | 12168 ADVERTISED_Asym_Pause; 12169 } 12170 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 12171 advertising |= ADVERTISED_Asym_Pause; 12172 } 12173 } 12174 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 12175 advertising); 12176 12177 if (netif_running(dev) && tp->link_up) { 12178 cmd->base.speed = tp->link_config.active_speed; 12179 cmd->base.duplex = tp->link_config.active_duplex; 12180 ethtool_convert_legacy_u32_to_link_mode( 12181 cmd->link_modes.lp_advertising, 12182 tp->link_config.rmt_adv); 12183 12184 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 12185 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 12186 cmd->base.eth_tp_mdix = ETH_TP_MDI_X; 12187 else 12188 cmd->base.eth_tp_mdix = ETH_TP_MDI; 12189 } 12190 } else { 12191 cmd->base.speed = SPEED_UNKNOWN; 12192 cmd->base.duplex = DUPLEX_UNKNOWN; 12193 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; 12194 } 12195 cmd->base.phy_address = tp->phy_addr; 12196 cmd->base.autoneg = tp->link_config.autoneg; 12197 return 0; 12198 } 12199 12200 static int tg3_set_link_ksettings(struct net_device *dev, 12201 const struct ethtool_link_ksettings *cmd) 12202 { 12203 struct tg3 *tp = netdev_priv(dev); 12204 u32 speed = cmd->base.speed; 12205 u32 advertising; 12206 12207 if (tg3_flag(tp, USE_PHYLIB)) { 12208 struct phy_device *phydev; 12209 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12210 return -EAGAIN; 12211 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12212 return phy_ethtool_ksettings_set(phydev, cmd); 12213 } 12214 12215 if (cmd->base.autoneg != AUTONEG_ENABLE && 12216 cmd->base.autoneg != AUTONEG_DISABLE) 12217 return -EINVAL; 12218 12219 if (cmd->base.autoneg == AUTONEG_DISABLE && 12220 cmd->base.duplex != DUPLEX_FULL && 12221 cmd->base.duplex != DUPLEX_HALF) 12222 return -EINVAL; 12223 12224 ethtool_convert_link_mode_to_legacy_u32(&advertising, 12225 cmd->link_modes.advertising); 12226 12227 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12228 u32 mask = ADVERTISED_Autoneg | 12229 ADVERTISED_Pause | 12230 ADVERTISED_Asym_Pause; 12231 12232 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 12233 mask |= ADVERTISED_1000baseT_Half | 12234 ADVERTISED_1000baseT_Full; 12235 12236 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 12237 mask |= ADVERTISED_100baseT_Half | 12238 ADVERTISED_100baseT_Full | 12239 ADVERTISED_10baseT_Half | 12240 ADVERTISED_10baseT_Full | 12241 ADVERTISED_TP; 12242 else 12243 mask |= ADVERTISED_FIBRE; 12244 12245 if (advertising & ~mask) 12246 return -EINVAL; 12247 12248 mask &= (ADVERTISED_1000baseT_Half | 12249 ADVERTISED_1000baseT_Full | 12250 ADVERTISED_100baseT_Half | 12251 ADVERTISED_100baseT_Full | 12252 ADVERTISED_10baseT_Half | 12253 ADVERTISED_10baseT_Full); 12254 12255 advertising &= mask; 12256 } else { 12257 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 12258 if (speed != SPEED_1000) 12259 return -EINVAL; 12260 12261 if (cmd->base.duplex != DUPLEX_FULL) 12262 return -EINVAL; 12263 } else { 12264 if (speed != SPEED_100 && 12265 speed != SPEED_10) 12266 return -EINVAL; 12267 } 12268 } 12269 12270 tg3_full_lock(tp, 0); 12271 12272 tp->link_config.autoneg = cmd->base.autoneg; 12273 if (cmd->base.autoneg == AUTONEG_ENABLE) { 12274 tp->link_config.advertising = (advertising | 12275 ADVERTISED_Autoneg); 12276 tp->link_config.speed = SPEED_UNKNOWN; 12277 tp->link_config.duplex = DUPLEX_UNKNOWN; 12278 } else { 12279 tp->link_config.advertising = 0; 12280 tp->link_config.speed = speed; 12281 tp->link_config.duplex = cmd->base.duplex; 12282 } 12283 12284 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12285 12286 tg3_warn_mgmt_link_flap(tp); 12287 12288 if (netif_running(dev)) 12289 tg3_setup_phy(tp, true); 12290 12291 tg3_full_unlock(tp); 12292 12293 return 0; 12294 } 12295 12296 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 12297 { 12298 struct tg3 *tp = netdev_priv(dev); 12299 12300 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 12301 strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); 12302 strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 12303 strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 12304 } 12305 12306 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12307 { 12308 struct tg3 *tp = netdev_priv(dev); 12309 12310 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 12311 wol->supported = WAKE_MAGIC; 12312 else 12313 wol->supported = 0; 12314 wol->wolopts = 0; 12315 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 12316 wol->wolopts = WAKE_MAGIC; 12317 memset(&wol->sopass, 0, sizeof(wol->sopass)); 12318 } 12319 12320 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 12321 { 12322 struct tg3 *tp = netdev_priv(dev); 12323 struct device *dp = &tp->pdev->dev; 12324 12325 if (wol->wolopts & ~WAKE_MAGIC) 12326 return -EINVAL; 12327 if ((wol->wolopts & WAKE_MAGIC) && 12328 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 12329 return -EINVAL; 12330 12331 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 12332 12333 if (device_may_wakeup(dp)) 12334 tg3_flag_set(tp, WOL_ENABLE); 12335 else 12336 tg3_flag_clear(tp, WOL_ENABLE); 12337 12338 return 0; 12339 } 12340 12341 static u32 tg3_get_msglevel(struct net_device *dev) 12342 { 12343 struct tg3 *tp = netdev_priv(dev); 12344 return tp->msg_enable; 12345 } 12346 12347 static void tg3_set_msglevel(struct net_device *dev, u32 value) 12348 { 12349 struct tg3 *tp = netdev_priv(dev); 12350 tp->msg_enable = value; 12351 } 12352 12353 static int tg3_nway_reset(struct net_device *dev) 12354 { 12355 struct tg3 *tp = netdev_priv(dev); 12356 int r; 12357 12358 if (!netif_running(dev)) 12359 return -EAGAIN; 12360 12361 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12362 return -EINVAL; 12363 12364 tg3_warn_mgmt_link_flap(tp); 12365 12366 if (tg3_flag(tp, USE_PHYLIB)) { 12367 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12368 return -EAGAIN; 12369 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); 12370 } else { 12371 u32 bmcr; 12372 12373 spin_lock_bh(&tp->lock); 12374 r = -EINVAL; 12375 tg3_readphy(tp, MII_BMCR, &bmcr); 12376 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 12377 ((bmcr & BMCR_ANENABLE) || 12378 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 12379 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 12380 BMCR_ANENABLE); 12381 r = 0; 12382 } 12383 spin_unlock_bh(&tp->lock); 12384 } 12385 12386 return r; 12387 } 12388 12389 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 12390 { 12391 struct tg3 *tp = netdev_priv(dev); 12392 12393 ering->rx_max_pending = tp->rx_std_ring_mask; 12394 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12395 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 12396 else 12397 ering->rx_jumbo_max_pending = 0; 12398 12399 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 12400 12401 ering->rx_pending = tp->rx_pending; 12402 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12403 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 12404 else 12405 ering->rx_jumbo_pending = 0; 12406 12407 ering->tx_pending = tp->napi[0].tx_pending; 12408 } 12409 12410 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 12411 { 12412 struct tg3 *tp = netdev_priv(dev); 12413 int i, irq_sync = 0, err = 0; 12414 12415 if ((ering->rx_pending > tp->rx_std_ring_mask) || 12416 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 12417 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 12418 (ering->tx_pending <= MAX_SKB_FRAGS) || 12419 (tg3_flag(tp, TSO_BUG) && 12420 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 12421 return -EINVAL; 12422 12423 if (netif_running(dev)) { 12424 tg3_phy_stop(tp); 12425 tg3_netif_stop(tp); 12426 irq_sync = 1; 12427 } 12428 12429 tg3_full_lock(tp, irq_sync); 12430 12431 tp->rx_pending = ering->rx_pending; 12432 12433 if (tg3_flag(tp, MAX_RXPEND_64) && 12434 tp->rx_pending > 63) 12435 tp->rx_pending = 63; 12436 12437 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 12438 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 12439 12440 for (i = 0; i < tp->irq_max; i++) 12441 tp->napi[i].tx_pending = ering->tx_pending; 12442 12443 if (netif_running(dev)) { 12444 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12445 err = tg3_restart_hw(tp, false); 12446 if (!err) 12447 tg3_netif_start(tp); 12448 } 12449 12450 tg3_full_unlock(tp); 12451 12452 if (irq_sync && !err) 12453 tg3_phy_start(tp); 12454 12455 return err; 12456 } 12457 12458 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12459 { 12460 struct tg3 *tp = netdev_priv(dev); 12461 12462 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 12463 12464 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 12465 epause->rx_pause = 1; 12466 else 12467 epause->rx_pause = 0; 12468 12469 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 12470 epause->tx_pause = 1; 12471 else 12472 epause->tx_pause = 0; 12473 } 12474 12475 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 12476 { 12477 struct tg3 *tp = netdev_priv(dev); 12478 int err = 0; 12479 12480 if (tp->link_config.autoneg == AUTONEG_ENABLE) 12481 tg3_warn_mgmt_link_flap(tp); 12482 12483 if (tg3_flag(tp, USE_PHYLIB)) { 12484 u32 newadv; 12485 struct phy_device *phydev; 12486 12487 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 12488 12489 if (!(phydev->supported & SUPPORTED_Pause) || 12490 (!(phydev->supported & SUPPORTED_Asym_Pause) && 12491 (epause->rx_pause != epause->tx_pause))) 12492 return -EINVAL; 12493 12494 tp->link_config.flowctrl = 0; 12495 if (epause->rx_pause) { 12496 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12497 12498 if (epause->tx_pause) { 12499 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12500 newadv = ADVERTISED_Pause; 12501 } else 12502 newadv = ADVERTISED_Pause | 12503 ADVERTISED_Asym_Pause; 12504 } else if (epause->tx_pause) { 12505 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12506 newadv = ADVERTISED_Asym_Pause; 12507 } else 12508 newadv = 0; 12509 12510 if (epause->autoneg) 12511 tg3_flag_set(tp, PAUSE_AUTONEG); 12512 else 12513 tg3_flag_clear(tp, PAUSE_AUTONEG); 12514 12515 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 12516 u32 oldadv = phydev->advertising & 12517 (ADVERTISED_Pause | ADVERTISED_Asym_Pause); 12518 if (oldadv != newadv) { 12519 phydev->advertising &= 12520 ~(ADVERTISED_Pause | 12521 ADVERTISED_Asym_Pause); 12522 phydev->advertising |= newadv; 12523 if (phydev->autoneg) { 12524 /* 12525 * Always renegotiate the link to 12526 * inform our link partner of our 12527 * flow control settings, even if the 12528 * flow control is forced. Let 12529 * tg3_adjust_link() do the final 12530 * flow control setup. 12531 */ 12532 return phy_start_aneg(phydev); 12533 } 12534 } 12535 12536 if (!epause->autoneg) 12537 tg3_setup_flow_control(tp, 0, 0); 12538 } else { 12539 tp->link_config.advertising &= 12540 ~(ADVERTISED_Pause | 12541 ADVERTISED_Asym_Pause); 12542 tp->link_config.advertising |= newadv; 12543 } 12544 } else { 12545 int irq_sync = 0; 12546 12547 if (netif_running(dev)) { 12548 tg3_netif_stop(tp); 12549 irq_sync = 1; 12550 } 12551 12552 tg3_full_lock(tp, irq_sync); 12553 12554 if (epause->autoneg) 12555 tg3_flag_set(tp, PAUSE_AUTONEG); 12556 else 12557 tg3_flag_clear(tp, PAUSE_AUTONEG); 12558 if (epause->rx_pause) 12559 tp->link_config.flowctrl |= FLOW_CTRL_RX; 12560 else 12561 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 12562 if (epause->tx_pause) 12563 tp->link_config.flowctrl |= FLOW_CTRL_TX; 12564 else 12565 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 12566 12567 if (netif_running(dev)) { 12568 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12569 err = tg3_restart_hw(tp, false); 12570 if (!err) 12571 tg3_netif_start(tp); 12572 } 12573 12574 tg3_full_unlock(tp); 12575 } 12576 12577 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 12578 12579 return err; 12580 } 12581 12582 static int tg3_get_sset_count(struct net_device *dev, int sset) 12583 { 12584 switch (sset) { 12585 case ETH_SS_TEST: 12586 return TG3_NUM_TEST; 12587 case ETH_SS_STATS: 12588 return TG3_NUM_STATS; 12589 default: 12590 return -EOPNOTSUPP; 12591 } 12592 } 12593 12594 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 12595 u32 *rules __always_unused) 12596 { 12597 struct tg3 *tp = netdev_priv(dev); 12598 12599 if (!tg3_flag(tp, SUPPORT_MSIX)) 12600 return -EOPNOTSUPP; 12601 12602 switch (info->cmd) { 12603 case ETHTOOL_GRXRINGS: 12604 if (netif_running(tp->dev)) 12605 info->data = tp->rxq_cnt; 12606 else { 12607 info->data = num_online_cpus(); 12608 if (info->data > TG3_RSS_MAX_NUM_QS) 12609 info->data = TG3_RSS_MAX_NUM_QS; 12610 } 12611 12612 return 0; 12613 12614 default: 12615 return -EOPNOTSUPP; 12616 } 12617 } 12618 12619 static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 12620 { 12621 u32 size = 0; 12622 struct tg3 *tp = netdev_priv(dev); 12623 12624 if (tg3_flag(tp, SUPPORT_MSIX)) 12625 size = TG3_RSS_INDIR_TBL_SIZE; 12626 12627 return size; 12628 } 12629 12630 static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc) 12631 { 12632 struct tg3 *tp = netdev_priv(dev); 12633 int i; 12634 12635 if (hfunc) 12636 *hfunc = ETH_RSS_HASH_TOP; 12637 if (!indir) 12638 return 0; 12639 12640 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12641 indir[i] = tp->rss_ind_tbl[i]; 12642 12643 return 0; 12644 } 12645 12646 static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, 12647 const u8 hfunc) 12648 { 12649 struct tg3 *tp = netdev_priv(dev); 12650 size_t i; 12651 12652 /* We require at least one supported parameter to be changed and no 12653 * change in any of the unsupported parameters 12654 */ 12655 if (key || 12656 (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)) 12657 return -EOPNOTSUPP; 12658 12659 if (!indir) 12660 return 0; 12661 12662 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 12663 tp->rss_ind_tbl[i] = indir[i]; 12664 12665 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 12666 return 0; 12667 12668 /* It is legal to write the indirection 12669 * table while the device is running. 12670 */ 12671 tg3_full_lock(tp, 0); 12672 tg3_rss_write_indir_tbl(tp); 12673 tg3_full_unlock(tp); 12674 12675 return 0; 12676 } 12677 12678 static void tg3_get_channels(struct net_device *dev, 12679 struct ethtool_channels *channel) 12680 { 12681 struct tg3 *tp = netdev_priv(dev); 12682 u32 deflt_qs = netif_get_num_default_rss_queues(); 12683 12684 channel->max_rx = tp->rxq_max; 12685 channel->max_tx = tp->txq_max; 12686 12687 if (netif_running(dev)) { 12688 channel->rx_count = tp->rxq_cnt; 12689 channel->tx_count = tp->txq_cnt; 12690 } else { 12691 if (tp->rxq_req) 12692 channel->rx_count = tp->rxq_req; 12693 else 12694 channel->rx_count = min(deflt_qs, tp->rxq_max); 12695 12696 if (tp->txq_req) 12697 channel->tx_count = tp->txq_req; 12698 else 12699 channel->tx_count = min(deflt_qs, tp->txq_max); 12700 } 12701 } 12702 12703 static int tg3_set_channels(struct net_device *dev, 12704 struct ethtool_channels *channel) 12705 { 12706 struct tg3 *tp = netdev_priv(dev); 12707 12708 if (!tg3_flag(tp, SUPPORT_MSIX)) 12709 return -EOPNOTSUPP; 12710 12711 if (channel->rx_count > tp->rxq_max || 12712 channel->tx_count > tp->txq_max) 12713 return -EINVAL; 12714 12715 tp->rxq_req = channel->rx_count; 12716 tp->txq_req = channel->tx_count; 12717 12718 if (!netif_running(dev)) 12719 return 0; 12720 12721 tg3_stop(tp); 12722 12723 tg3_carrier_off(tp); 12724 12725 tg3_start(tp, true, false, false); 12726 12727 return 0; 12728 } 12729 12730 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 12731 { 12732 switch (stringset) { 12733 case ETH_SS_STATS: 12734 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 12735 break; 12736 case ETH_SS_TEST: 12737 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 12738 break; 12739 default: 12740 WARN_ON(1); /* we need a WARN() */ 12741 break; 12742 } 12743 } 12744 12745 static int tg3_set_phys_id(struct net_device *dev, 12746 enum ethtool_phys_id_state state) 12747 { 12748 struct tg3 *tp = netdev_priv(dev); 12749 12750 if (!netif_running(tp->dev)) 12751 return -EAGAIN; 12752 12753 switch (state) { 12754 case ETHTOOL_ID_ACTIVE: 12755 return 1; /* cycle on/off once per second */ 12756 12757 case ETHTOOL_ID_ON: 12758 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12759 LED_CTRL_1000MBPS_ON | 12760 LED_CTRL_100MBPS_ON | 12761 LED_CTRL_10MBPS_ON | 12762 LED_CTRL_TRAFFIC_OVERRIDE | 12763 LED_CTRL_TRAFFIC_BLINK | 12764 LED_CTRL_TRAFFIC_LED); 12765 break; 12766 12767 case ETHTOOL_ID_OFF: 12768 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 12769 LED_CTRL_TRAFFIC_OVERRIDE); 12770 break; 12771 12772 case ETHTOOL_ID_INACTIVE: 12773 tw32(MAC_LED_CTRL, tp->led_ctrl); 12774 break; 12775 } 12776 12777 return 0; 12778 } 12779 12780 static void tg3_get_ethtool_stats(struct net_device *dev, 12781 struct ethtool_stats *estats, u64 *tmp_stats) 12782 { 12783 struct tg3 *tp = netdev_priv(dev); 12784 12785 if (tp->hw_stats) 12786 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 12787 else 12788 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 12789 } 12790 12791 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen) 12792 { 12793 int i; 12794 __be32 *buf; 12795 u32 offset = 0, len = 0; 12796 u32 magic, val; 12797 12798 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 12799 return NULL; 12800 12801 if (magic == TG3_EEPROM_MAGIC) { 12802 for (offset = TG3_NVM_DIR_START; 12803 offset < TG3_NVM_DIR_END; 12804 offset += TG3_NVM_DIRENT_SIZE) { 12805 if (tg3_nvram_read(tp, offset, &val)) 12806 return NULL; 12807 12808 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 12809 TG3_NVM_DIRTYPE_EXTVPD) 12810 break; 12811 } 12812 12813 if (offset != TG3_NVM_DIR_END) { 12814 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 12815 if (tg3_nvram_read(tp, offset + 4, &offset)) 12816 return NULL; 12817 12818 offset = tg3_nvram_logical_addr(tp, offset); 12819 } 12820 } 12821 12822 if (!offset || !len) { 12823 offset = TG3_NVM_VPD_OFF; 12824 len = TG3_NVM_VPD_LEN; 12825 } 12826 12827 buf = kmalloc(len, GFP_KERNEL); 12828 if (buf == NULL) 12829 return NULL; 12830 12831 if (magic == TG3_EEPROM_MAGIC) { 12832 for (i = 0; i < len; i += 4) { 12833 /* The data is in little-endian format in NVRAM. 12834 * Use the big-endian read routines to preserve 12835 * the byte order as it exists in NVRAM. 12836 */ 12837 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 12838 goto error; 12839 } 12840 } else { 12841 u8 *ptr; 12842 ssize_t cnt; 12843 unsigned int pos = 0; 12844 12845 ptr = (u8 *)&buf[0]; 12846 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) { 12847 cnt = pci_read_vpd(tp->pdev, pos, 12848 len - pos, ptr); 12849 if (cnt == -ETIMEDOUT || cnt == -EINTR) 12850 cnt = 0; 12851 else if (cnt < 0) 12852 goto error; 12853 } 12854 if (pos != len) 12855 goto error; 12856 } 12857 12858 *vpdlen = len; 12859 12860 return buf; 12861 12862 error: 12863 kfree(buf); 12864 return NULL; 12865 } 12866 12867 #define NVRAM_TEST_SIZE 0x100 12868 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 12869 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 12870 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 12871 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 12872 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 12873 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 12874 #define NVRAM_SELFBOOT_HW_SIZE 0x20 12875 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c 12876 12877 static int tg3_test_nvram(struct tg3 *tp) 12878 { 12879 u32 csum, magic, len; 12880 __be32 *buf; 12881 int i, j, k, err = 0, size; 12882 12883 if (tg3_flag(tp, NO_NVRAM)) 12884 return 0; 12885 12886 if (tg3_nvram_read(tp, 0, &magic) != 0) 12887 return -EIO; 12888 12889 if (magic == TG3_EEPROM_MAGIC) 12890 size = NVRAM_TEST_SIZE; 12891 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 12892 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 12893 TG3_EEPROM_SB_FORMAT_1) { 12894 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 12895 case TG3_EEPROM_SB_REVISION_0: 12896 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 12897 break; 12898 case TG3_EEPROM_SB_REVISION_2: 12899 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 12900 break; 12901 case TG3_EEPROM_SB_REVISION_3: 12902 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 12903 break; 12904 case TG3_EEPROM_SB_REVISION_4: 12905 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 12906 break; 12907 case TG3_EEPROM_SB_REVISION_5: 12908 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 12909 break; 12910 case TG3_EEPROM_SB_REVISION_6: 12911 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 12912 break; 12913 default: 12914 return -EIO; 12915 } 12916 } else 12917 return 0; 12918 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 12919 size = NVRAM_SELFBOOT_HW_SIZE; 12920 else 12921 return -EIO; 12922 12923 buf = kmalloc(size, GFP_KERNEL); 12924 if (buf == NULL) 12925 return -ENOMEM; 12926 12927 err = -EIO; 12928 for (i = 0, j = 0; i < size; i += 4, j++) { 12929 err = tg3_nvram_read_be32(tp, i, &buf[j]); 12930 if (err) 12931 break; 12932 } 12933 if (i < size) 12934 goto out; 12935 12936 /* Selfboot format */ 12937 magic = be32_to_cpu(buf[0]); 12938 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 12939 TG3_EEPROM_MAGIC_FW) { 12940 u8 *buf8 = (u8 *) buf, csum8 = 0; 12941 12942 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 12943 TG3_EEPROM_SB_REVISION_2) { 12944 /* For rev 2, the csum doesn't include the MBA. */ 12945 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 12946 csum8 += buf8[i]; 12947 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 12948 csum8 += buf8[i]; 12949 } else { 12950 for (i = 0; i < size; i++) 12951 csum8 += buf8[i]; 12952 } 12953 12954 if (csum8 == 0) { 12955 err = 0; 12956 goto out; 12957 } 12958 12959 err = -EIO; 12960 goto out; 12961 } 12962 12963 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 12964 TG3_EEPROM_MAGIC_HW) { 12965 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 12966 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 12967 u8 *buf8 = (u8 *) buf; 12968 12969 /* Separate the parity bits and the data bytes. */ 12970 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 12971 if ((i == 0) || (i == 8)) { 12972 int l; 12973 u8 msk; 12974 12975 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 12976 parity[k++] = buf8[i] & msk; 12977 i++; 12978 } else if (i == 16) { 12979 int l; 12980 u8 msk; 12981 12982 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 12983 parity[k++] = buf8[i] & msk; 12984 i++; 12985 12986 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 12987 parity[k++] = buf8[i] & msk; 12988 i++; 12989 } 12990 data[j++] = buf8[i]; 12991 } 12992 12993 err = -EIO; 12994 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 12995 u8 hw8 = hweight8(data[i]); 12996 12997 if ((hw8 & 0x1) && parity[i]) 12998 goto out; 12999 else if (!(hw8 & 0x1) && !parity[i]) 13000 goto out; 13001 } 13002 err = 0; 13003 goto out; 13004 } 13005 13006 err = -EIO; 13007 13008 /* Bootstrap checksum at offset 0x10 */ 13009 csum = calc_crc((unsigned char *) buf, 0x10); 13010 if (csum != le32_to_cpu(buf[0x10/4])) 13011 goto out; 13012 13013 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 13014 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 13015 if (csum != le32_to_cpu(buf[0xfc/4])) 13016 goto out; 13017 13018 kfree(buf); 13019 13020 buf = tg3_vpd_readblock(tp, &len); 13021 if (!buf) 13022 return -ENOMEM; 13023 13024 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA); 13025 if (i > 0) { 13026 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]); 13027 if (j < 0) 13028 goto out; 13029 13030 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len) 13031 goto out; 13032 13033 i += PCI_VPD_LRDT_TAG_SIZE; 13034 j = pci_vpd_find_info_keyword((u8 *)buf, i, j, 13035 PCI_VPD_RO_KEYWORD_CHKSUM); 13036 if (j > 0) { 13037 u8 csum8 = 0; 13038 13039 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13040 13041 for (i = 0; i <= j; i++) 13042 csum8 += ((u8 *)buf)[i]; 13043 13044 if (csum8) 13045 goto out; 13046 } 13047 } 13048 13049 err = 0; 13050 13051 out: 13052 kfree(buf); 13053 return err; 13054 } 13055 13056 #define TG3_SERDES_TIMEOUT_SEC 2 13057 #define TG3_COPPER_TIMEOUT_SEC 6 13058 13059 static int tg3_test_link(struct tg3 *tp) 13060 { 13061 int i, max; 13062 13063 if (!netif_running(tp->dev)) 13064 return -ENODEV; 13065 13066 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 13067 max = TG3_SERDES_TIMEOUT_SEC; 13068 else 13069 max = TG3_COPPER_TIMEOUT_SEC; 13070 13071 for (i = 0; i < max; i++) { 13072 if (tp->link_up) 13073 return 0; 13074 13075 if (msleep_interruptible(1000)) 13076 break; 13077 } 13078 13079 return -EIO; 13080 } 13081 13082 /* Only test the commonly used registers */ 13083 static int tg3_test_registers(struct tg3 *tp) 13084 { 13085 int i, is_5705, is_5750; 13086 u32 offset, read_mask, write_mask, val, save_val, read_val; 13087 static struct { 13088 u16 offset; 13089 u16 flags; 13090 #define TG3_FL_5705 0x1 13091 #define TG3_FL_NOT_5705 0x2 13092 #define TG3_FL_NOT_5788 0x4 13093 #define TG3_FL_NOT_5750 0x8 13094 u32 read_mask; 13095 u32 write_mask; 13096 } reg_tbl[] = { 13097 /* MAC Control Registers */ 13098 { MAC_MODE, TG3_FL_NOT_5705, 13099 0x00000000, 0x00ef6f8c }, 13100 { MAC_MODE, TG3_FL_5705, 13101 0x00000000, 0x01ef6b8c }, 13102 { MAC_STATUS, TG3_FL_NOT_5705, 13103 0x03800107, 0x00000000 }, 13104 { MAC_STATUS, TG3_FL_5705, 13105 0x03800100, 0x00000000 }, 13106 { MAC_ADDR_0_HIGH, 0x0000, 13107 0x00000000, 0x0000ffff }, 13108 { MAC_ADDR_0_LOW, 0x0000, 13109 0x00000000, 0xffffffff }, 13110 { MAC_RX_MTU_SIZE, 0x0000, 13111 0x00000000, 0x0000ffff }, 13112 { MAC_TX_MODE, 0x0000, 13113 0x00000000, 0x00000070 }, 13114 { MAC_TX_LENGTHS, 0x0000, 13115 0x00000000, 0x00003fff }, 13116 { MAC_RX_MODE, TG3_FL_NOT_5705, 13117 0x00000000, 0x000007fc }, 13118 { MAC_RX_MODE, TG3_FL_5705, 13119 0x00000000, 0x000007dc }, 13120 { MAC_HASH_REG_0, 0x0000, 13121 0x00000000, 0xffffffff }, 13122 { MAC_HASH_REG_1, 0x0000, 13123 0x00000000, 0xffffffff }, 13124 { MAC_HASH_REG_2, 0x0000, 13125 0x00000000, 0xffffffff }, 13126 { MAC_HASH_REG_3, 0x0000, 13127 0x00000000, 0xffffffff }, 13128 13129 /* Receive Data and Receive BD Initiator Control Registers. */ 13130 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 13131 0x00000000, 0xffffffff }, 13132 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 13133 0x00000000, 0xffffffff }, 13134 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 13135 0x00000000, 0x00000003 }, 13136 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 13137 0x00000000, 0xffffffff }, 13138 { RCVDBDI_STD_BD+0, 0x0000, 13139 0x00000000, 0xffffffff }, 13140 { RCVDBDI_STD_BD+4, 0x0000, 13141 0x00000000, 0xffffffff }, 13142 { RCVDBDI_STD_BD+8, 0x0000, 13143 0x00000000, 0xffff0002 }, 13144 { RCVDBDI_STD_BD+0xc, 0x0000, 13145 0x00000000, 0xffffffff }, 13146 13147 /* Receive BD Initiator Control Registers. */ 13148 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 13149 0x00000000, 0xffffffff }, 13150 { RCVBDI_STD_THRESH, TG3_FL_5705, 13151 0x00000000, 0x000003ff }, 13152 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 13153 0x00000000, 0xffffffff }, 13154 13155 /* Host Coalescing Control Registers. */ 13156 { HOSTCC_MODE, TG3_FL_NOT_5705, 13157 0x00000000, 0x00000004 }, 13158 { HOSTCC_MODE, TG3_FL_5705, 13159 0x00000000, 0x000000f6 }, 13160 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 13161 0x00000000, 0xffffffff }, 13162 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 13163 0x00000000, 0x000003ff }, 13164 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 13165 0x00000000, 0xffffffff }, 13166 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 13167 0x00000000, 0x000003ff }, 13168 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 13169 0x00000000, 0xffffffff }, 13170 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13171 0x00000000, 0x000000ff }, 13172 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 13173 0x00000000, 0xffffffff }, 13174 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 13175 0x00000000, 0x000000ff }, 13176 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 13177 0x00000000, 0xffffffff }, 13178 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 13179 0x00000000, 0xffffffff }, 13180 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13181 0x00000000, 0xffffffff }, 13182 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13183 0x00000000, 0x000000ff }, 13184 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 13185 0x00000000, 0xffffffff }, 13186 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 13187 0x00000000, 0x000000ff }, 13188 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 13189 0x00000000, 0xffffffff }, 13190 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 13191 0x00000000, 0xffffffff }, 13192 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 13193 0x00000000, 0xffffffff }, 13194 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 13195 0x00000000, 0xffffffff }, 13196 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 13197 0x00000000, 0xffffffff }, 13198 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 13199 0xffffffff, 0x00000000 }, 13200 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 13201 0xffffffff, 0x00000000 }, 13202 13203 /* Buffer Manager Control Registers. */ 13204 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 13205 0x00000000, 0x007fff80 }, 13206 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 13207 0x00000000, 0x007fffff }, 13208 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 13209 0x00000000, 0x0000003f }, 13210 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 13211 0x00000000, 0x000001ff }, 13212 { BUFMGR_MB_HIGH_WATER, 0x0000, 13213 0x00000000, 0x000001ff }, 13214 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 13215 0xffffffff, 0x00000000 }, 13216 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 13217 0xffffffff, 0x00000000 }, 13218 13219 /* Mailbox Registers */ 13220 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 13221 0x00000000, 0x000001ff }, 13222 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 13223 0x00000000, 0x000001ff }, 13224 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 13225 0x00000000, 0x000007ff }, 13226 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 13227 0x00000000, 0x000001ff }, 13228 13229 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 13230 }; 13231 13232 is_5705 = is_5750 = 0; 13233 if (tg3_flag(tp, 5705_PLUS)) { 13234 is_5705 = 1; 13235 if (tg3_flag(tp, 5750_PLUS)) 13236 is_5750 = 1; 13237 } 13238 13239 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 13240 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 13241 continue; 13242 13243 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 13244 continue; 13245 13246 if (tg3_flag(tp, IS_5788) && 13247 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 13248 continue; 13249 13250 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 13251 continue; 13252 13253 offset = (u32) reg_tbl[i].offset; 13254 read_mask = reg_tbl[i].read_mask; 13255 write_mask = reg_tbl[i].write_mask; 13256 13257 /* Save the original register content */ 13258 save_val = tr32(offset); 13259 13260 /* Determine the read-only value. */ 13261 read_val = save_val & read_mask; 13262 13263 /* Write zero to the register, then make sure the read-only bits 13264 * are not changed and the read/write bits are all zeros. 13265 */ 13266 tw32(offset, 0); 13267 13268 val = tr32(offset); 13269 13270 /* Test the read-only and read/write bits. */ 13271 if (((val & read_mask) != read_val) || (val & write_mask)) 13272 goto out; 13273 13274 /* Write ones to all the bits defined by RdMask and WrMask, then 13275 * make sure the read-only bits are not changed and the 13276 * read/write bits are all ones. 13277 */ 13278 tw32(offset, read_mask | write_mask); 13279 13280 val = tr32(offset); 13281 13282 /* Test the read-only bits. */ 13283 if ((val & read_mask) != read_val) 13284 goto out; 13285 13286 /* Test the read/write bits. */ 13287 if ((val & write_mask) != write_mask) 13288 goto out; 13289 13290 tw32(offset, save_val); 13291 } 13292 13293 return 0; 13294 13295 out: 13296 if (netif_msg_hw(tp)) 13297 netdev_err(tp->dev, 13298 "Register test failed at offset %x\n", offset); 13299 tw32(offset, save_val); 13300 return -EIO; 13301 } 13302 13303 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 13304 { 13305 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 13306 int i; 13307 u32 j; 13308 13309 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 13310 for (j = 0; j < len; j += 4) { 13311 u32 val; 13312 13313 tg3_write_mem(tp, offset + j, test_pattern[i]); 13314 tg3_read_mem(tp, offset + j, &val); 13315 if (val != test_pattern[i]) 13316 return -EIO; 13317 } 13318 } 13319 return 0; 13320 } 13321 13322 static int tg3_test_memory(struct tg3 *tp) 13323 { 13324 static struct mem_entry { 13325 u32 offset; 13326 u32 len; 13327 } mem_tbl_570x[] = { 13328 { 0x00000000, 0x00b50}, 13329 { 0x00002000, 0x1c000}, 13330 { 0xffffffff, 0x00000} 13331 }, mem_tbl_5705[] = { 13332 { 0x00000100, 0x0000c}, 13333 { 0x00000200, 0x00008}, 13334 { 0x00004000, 0x00800}, 13335 { 0x00006000, 0x01000}, 13336 { 0x00008000, 0x02000}, 13337 { 0x00010000, 0x0e000}, 13338 { 0xffffffff, 0x00000} 13339 }, mem_tbl_5755[] = { 13340 { 0x00000200, 0x00008}, 13341 { 0x00004000, 0x00800}, 13342 { 0x00006000, 0x00800}, 13343 { 0x00008000, 0x02000}, 13344 { 0x00010000, 0x0c000}, 13345 { 0xffffffff, 0x00000} 13346 }, mem_tbl_5906[] = { 13347 { 0x00000200, 0x00008}, 13348 { 0x00004000, 0x00400}, 13349 { 0x00006000, 0x00400}, 13350 { 0x00008000, 0x01000}, 13351 { 0x00010000, 0x01000}, 13352 { 0xffffffff, 0x00000} 13353 }, mem_tbl_5717[] = { 13354 { 0x00000200, 0x00008}, 13355 { 0x00010000, 0x0a000}, 13356 { 0x00020000, 0x13c00}, 13357 { 0xffffffff, 0x00000} 13358 }, mem_tbl_57765[] = { 13359 { 0x00000200, 0x00008}, 13360 { 0x00004000, 0x00800}, 13361 { 0x00006000, 0x09800}, 13362 { 0x00010000, 0x0a000}, 13363 { 0xffffffff, 0x00000} 13364 }; 13365 struct mem_entry *mem_tbl; 13366 int err = 0; 13367 int i; 13368 13369 if (tg3_flag(tp, 5717_PLUS)) 13370 mem_tbl = mem_tbl_5717; 13371 else if (tg3_flag(tp, 57765_CLASS) || 13372 tg3_asic_rev(tp) == ASIC_REV_5762) 13373 mem_tbl = mem_tbl_57765; 13374 else if (tg3_flag(tp, 5755_PLUS)) 13375 mem_tbl = mem_tbl_5755; 13376 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 13377 mem_tbl = mem_tbl_5906; 13378 else if (tg3_flag(tp, 5705_PLUS)) 13379 mem_tbl = mem_tbl_5705; 13380 else 13381 mem_tbl = mem_tbl_570x; 13382 13383 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 13384 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 13385 if (err) 13386 break; 13387 } 13388 13389 return err; 13390 } 13391 13392 #define TG3_TSO_MSS 500 13393 13394 #define TG3_TSO_IP_HDR_LEN 20 13395 #define TG3_TSO_TCP_HDR_LEN 20 13396 #define TG3_TSO_TCP_OPT_LEN 12 13397 13398 static const u8 tg3_tso_header[] = { 13399 0x08, 0x00, 13400 0x45, 0x00, 0x00, 0x00, 13401 0x00, 0x00, 0x40, 0x00, 13402 0x40, 0x06, 0x00, 0x00, 13403 0x0a, 0x00, 0x00, 0x01, 13404 0x0a, 0x00, 0x00, 0x02, 13405 0x0d, 0x00, 0xe0, 0x00, 13406 0x00, 0x00, 0x01, 0x00, 13407 0x00, 0x00, 0x02, 0x00, 13408 0x80, 0x10, 0x10, 0x00, 13409 0x14, 0x09, 0x00, 0x00, 13410 0x01, 0x01, 0x08, 0x0a, 13411 0x11, 0x11, 0x11, 0x11, 13412 0x11, 0x11, 0x11, 0x11, 13413 }; 13414 13415 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 13416 { 13417 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 13418 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 13419 u32 budget; 13420 struct sk_buff *skb; 13421 u8 *tx_data, *rx_data; 13422 dma_addr_t map; 13423 int num_pkts, tx_len, rx_len, i, err; 13424 struct tg3_rx_buffer_desc *desc; 13425 struct tg3_napi *tnapi, *rnapi; 13426 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 13427 13428 tnapi = &tp->napi[0]; 13429 rnapi = &tp->napi[0]; 13430 if (tp->irq_cnt > 1) { 13431 if (tg3_flag(tp, ENABLE_RSS)) 13432 rnapi = &tp->napi[1]; 13433 if (tg3_flag(tp, ENABLE_TSS)) 13434 tnapi = &tp->napi[1]; 13435 } 13436 coal_now = tnapi->coal_now | rnapi->coal_now; 13437 13438 err = -EIO; 13439 13440 tx_len = pktsz; 13441 skb = netdev_alloc_skb(tp->dev, tx_len); 13442 if (!skb) 13443 return -ENOMEM; 13444 13445 tx_data = skb_put(skb, tx_len); 13446 memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN); 13447 memset(tx_data + ETH_ALEN, 0x0, 8); 13448 13449 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 13450 13451 if (tso_loopback) { 13452 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 13453 13454 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 13455 TG3_TSO_TCP_OPT_LEN; 13456 13457 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 13458 sizeof(tg3_tso_header)); 13459 mss = TG3_TSO_MSS; 13460 13461 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 13462 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 13463 13464 /* Set the total length field in the IP header */ 13465 iph->tot_len = htons((u16)(mss + hdr_len)); 13466 13467 base_flags = (TXD_FLAG_CPU_PRE_DMA | 13468 TXD_FLAG_CPU_POST_DMA); 13469 13470 if (tg3_flag(tp, HW_TSO_1) || 13471 tg3_flag(tp, HW_TSO_2) || 13472 tg3_flag(tp, HW_TSO_3)) { 13473 struct tcphdr *th; 13474 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 13475 th = (struct tcphdr *)&tx_data[val]; 13476 th->check = 0; 13477 } else 13478 base_flags |= TXD_FLAG_TCPUDP_CSUM; 13479 13480 if (tg3_flag(tp, HW_TSO_3)) { 13481 mss |= (hdr_len & 0xc) << 12; 13482 if (hdr_len & 0x10) 13483 base_flags |= 0x00000010; 13484 base_flags |= (hdr_len & 0x3e0) << 5; 13485 } else if (tg3_flag(tp, HW_TSO_2)) 13486 mss |= hdr_len << 9; 13487 else if (tg3_flag(tp, HW_TSO_1) || 13488 tg3_asic_rev(tp) == ASIC_REV_5705) { 13489 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 13490 } else { 13491 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 13492 } 13493 13494 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 13495 } else { 13496 num_pkts = 1; 13497 data_off = ETH_HLEN; 13498 13499 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 13500 tx_len > VLAN_ETH_FRAME_LEN) 13501 base_flags |= TXD_FLAG_JMB_PKT; 13502 } 13503 13504 for (i = data_off; i < tx_len; i++) 13505 tx_data[i] = (u8) (i & 0xff); 13506 13507 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE); 13508 if (pci_dma_mapping_error(tp->pdev, map)) { 13509 dev_kfree_skb(skb); 13510 return -EIO; 13511 } 13512 13513 val = tnapi->tx_prod; 13514 tnapi->tx_buffers[val].skb = skb; 13515 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 13516 13517 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13518 rnapi->coal_now); 13519 13520 udelay(10); 13521 13522 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 13523 13524 budget = tg3_tx_avail(tnapi); 13525 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 13526 base_flags | TXD_FLAG_END, mss, 0)) { 13527 tnapi->tx_buffers[val].skb = NULL; 13528 dev_kfree_skb(skb); 13529 return -EIO; 13530 } 13531 13532 tnapi->tx_prod++; 13533 13534 /* Sync BD data before updating mailbox */ 13535 wmb(); 13536 13537 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 13538 tr32_mailbox(tnapi->prodmbox); 13539 13540 udelay(10); 13541 13542 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 13543 for (i = 0; i < 35; i++) { 13544 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 13545 coal_now); 13546 13547 udelay(10); 13548 13549 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 13550 rx_idx = rnapi->hw_status->idx[0].rx_producer; 13551 if ((tx_idx == tnapi->tx_prod) && 13552 (rx_idx == (rx_start_idx + num_pkts))) 13553 break; 13554 } 13555 13556 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 13557 dev_kfree_skb(skb); 13558 13559 if (tx_idx != tnapi->tx_prod) 13560 goto out; 13561 13562 if (rx_idx != rx_start_idx + num_pkts) 13563 goto out; 13564 13565 val = data_off; 13566 while (rx_idx != rx_start_idx) { 13567 desc = &rnapi->rx_rcb[rx_start_idx++]; 13568 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 13569 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 13570 13571 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 13572 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 13573 goto out; 13574 13575 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 13576 - ETH_FCS_LEN; 13577 13578 if (!tso_loopback) { 13579 if (rx_len != tx_len) 13580 goto out; 13581 13582 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 13583 if (opaque_key != RXD_OPAQUE_RING_STD) 13584 goto out; 13585 } else { 13586 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 13587 goto out; 13588 } 13589 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 13590 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 13591 >> RXD_TCPCSUM_SHIFT != 0xffff) { 13592 goto out; 13593 } 13594 13595 if (opaque_key == RXD_OPAQUE_RING_STD) { 13596 rx_data = tpr->rx_std_buffers[desc_idx].data; 13597 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 13598 mapping); 13599 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 13600 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 13601 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 13602 mapping); 13603 } else 13604 goto out; 13605 13606 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, 13607 PCI_DMA_FROMDEVICE); 13608 13609 rx_data += TG3_RX_OFFSET(tp); 13610 for (i = data_off; i < rx_len; i++, val++) { 13611 if (*(rx_data + i) != (u8) (val & 0xff)) 13612 goto out; 13613 } 13614 } 13615 13616 err = 0; 13617 13618 /* tg3_free_rings will unmap and free the rx_data */ 13619 out: 13620 return err; 13621 } 13622 13623 #define TG3_STD_LOOPBACK_FAILED 1 13624 #define TG3_JMB_LOOPBACK_FAILED 2 13625 #define TG3_TSO_LOOPBACK_FAILED 4 13626 #define TG3_LOOPBACK_FAILED \ 13627 (TG3_STD_LOOPBACK_FAILED | \ 13628 TG3_JMB_LOOPBACK_FAILED | \ 13629 TG3_TSO_LOOPBACK_FAILED) 13630 13631 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 13632 { 13633 int err = -EIO; 13634 u32 eee_cap; 13635 u32 jmb_pkt_sz = 9000; 13636 13637 if (tp->dma_limit) 13638 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 13639 13640 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 13641 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 13642 13643 if (!netif_running(tp->dev)) { 13644 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13645 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13646 if (do_extlpbk) 13647 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13648 goto done; 13649 } 13650 13651 err = tg3_reset_hw(tp, true); 13652 if (err) { 13653 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13654 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13655 if (do_extlpbk) 13656 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 13657 goto done; 13658 } 13659 13660 if (tg3_flag(tp, ENABLE_RSS)) { 13661 int i; 13662 13663 /* Reroute all rx packets to the 1st queue */ 13664 for (i = MAC_RSS_INDIR_TBL_0; 13665 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 13666 tw32(i, 0x0); 13667 } 13668 13669 /* HW errata - mac loopback fails in some cases on 5780. 13670 * Normal traffic and PHY loopback are not affected by 13671 * errata. Also, the MAC loopback test is deprecated for 13672 * all newer ASIC revisions. 13673 */ 13674 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 13675 !tg3_flag(tp, CPMU_PRESENT)) { 13676 tg3_mac_loopback(tp, true); 13677 13678 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13679 data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13680 13681 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13682 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13683 data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13684 13685 tg3_mac_loopback(tp, false); 13686 } 13687 13688 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 13689 !tg3_flag(tp, USE_PHYLIB)) { 13690 int i; 13691 13692 tg3_phy_lpbk_set(tp, 0, false); 13693 13694 /* Wait for link */ 13695 for (i = 0; i < 100; i++) { 13696 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 13697 break; 13698 mdelay(1); 13699 } 13700 13701 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13702 data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 13703 if (tg3_flag(tp, TSO_CAPABLE) && 13704 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13705 data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED; 13706 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13707 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13708 data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 13709 13710 if (do_extlpbk) { 13711 tg3_phy_lpbk_set(tp, 0, true); 13712 13713 /* All link indications report up, but the hardware 13714 * isn't really ready for about 20 msec. Double it 13715 * to be sure. 13716 */ 13717 mdelay(40); 13718 13719 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 13720 data[TG3_EXT_LOOPB_TEST] |= 13721 TG3_STD_LOOPBACK_FAILED; 13722 if (tg3_flag(tp, TSO_CAPABLE) && 13723 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 13724 data[TG3_EXT_LOOPB_TEST] |= 13725 TG3_TSO_LOOPBACK_FAILED; 13726 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 13727 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 13728 data[TG3_EXT_LOOPB_TEST] |= 13729 TG3_JMB_LOOPBACK_FAILED; 13730 } 13731 13732 /* Re-enable gphy autopowerdown. */ 13733 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 13734 tg3_phy_toggle_apd(tp, true); 13735 } 13736 13737 err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] | 13738 data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0; 13739 13740 done: 13741 tp->phy_flags |= eee_cap; 13742 13743 return err; 13744 } 13745 13746 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 13747 u64 *data) 13748 { 13749 struct tg3 *tp = netdev_priv(dev); 13750 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 13751 13752 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 13753 if (tg3_power_up(tp)) { 13754 etest->flags |= ETH_TEST_FL_FAILED; 13755 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 13756 return; 13757 } 13758 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 13759 } 13760 13761 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 13762 13763 if (tg3_test_nvram(tp) != 0) { 13764 etest->flags |= ETH_TEST_FL_FAILED; 13765 data[TG3_NVRAM_TEST] = 1; 13766 } 13767 if (!doextlpbk && tg3_test_link(tp)) { 13768 etest->flags |= ETH_TEST_FL_FAILED; 13769 data[TG3_LINK_TEST] = 1; 13770 } 13771 if (etest->flags & ETH_TEST_FL_OFFLINE) { 13772 int err, err2 = 0, irq_sync = 0; 13773 13774 if (netif_running(dev)) { 13775 tg3_phy_stop(tp); 13776 tg3_netif_stop(tp); 13777 irq_sync = 1; 13778 } 13779 13780 tg3_full_lock(tp, irq_sync); 13781 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 13782 err = tg3_nvram_lock(tp); 13783 tg3_halt_cpu(tp, RX_CPU_BASE); 13784 if (!tg3_flag(tp, 5705_PLUS)) 13785 tg3_halt_cpu(tp, TX_CPU_BASE); 13786 if (!err) 13787 tg3_nvram_unlock(tp); 13788 13789 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 13790 tg3_phy_reset(tp); 13791 13792 if (tg3_test_registers(tp) != 0) { 13793 etest->flags |= ETH_TEST_FL_FAILED; 13794 data[TG3_REGISTER_TEST] = 1; 13795 } 13796 13797 if (tg3_test_memory(tp) != 0) { 13798 etest->flags |= ETH_TEST_FL_FAILED; 13799 data[TG3_MEMORY_TEST] = 1; 13800 } 13801 13802 if (doextlpbk) 13803 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 13804 13805 if (tg3_test_loopback(tp, data, doextlpbk)) 13806 etest->flags |= ETH_TEST_FL_FAILED; 13807 13808 tg3_full_unlock(tp); 13809 13810 if (tg3_test_interrupt(tp) != 0) { 13811 etest->flags |= ETH_TEST_FL_FAILED; 13812 data[TG3_INTERRUPT_TEST] = 1; 13813 } 13814 13815 tg3_full_lock(tp, 0); 13816 13817 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 13818 if (netif_running(dev)) { 13819 tg3_flag_set(tp, INIT_COMPLETE); 13820 err2 = tg3_restart_hw(tp, true); 13821 if (!err2) 13822 tg3_netif_start(tp); 13823 } 13824 13825 tg3_full_unlock(tp); 13826 13827 if (irq_sync && !err2) 13828 tg3_phy_start(tp); 13829 } 13830 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 13831 tg3_power_down_prepare(tp); 13832 13833 } 13834 13835 static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr) 13836 { 13837 struct tg3 *tp = netdev_priv(dev); 13838 struct hwtstamp_config stmpconf; 13839 13840 if (!tg3_flag(tp, PTP_CAPABLE)) 13841 return -EOPNOTSUPP; 13842 13843 if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) 13844 return -EFAULT; 13845 13846 if (stmpconf.flags) 13847 return -EINVAL; 13848 13849 if (stmpconf.tx_type != HWTSTAMP_TX_ON && 13850 stmpconf.tx_type != HWTSTAMP_TX_OFF) 13851 return -ERANGE; 13852 13853 switch (stmpconf.rx_filter) { 13854 case HWTSTAMP_FILTER_NONE: 13855 tp->rxptpctl = 0; 13856 break; 13857 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 13858 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13859 TG3_RX_PTP_CTL_ALL_V1_EVENTS; 13860 break; 13861 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 13862 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13863 TG3_RX_PTP_CTL_SYNC_EVNT; 13864 break; 13865 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 13866 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 13867 TG3_RX_PTP_CTL_DELAY_REQ; 13868 break; 13869 case HWTSTAMP_FILTER_PTP_V2_EVENT: 13870 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13871 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13872 break; 13873 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 13874 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13875 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13876 break; 13877 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 13878 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13879 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 13880 break; 13881 case HWTSTAMP_FILTER_PTP_V2_SYNC: 13882 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13883 TG3_RX_PTP_CTL_SYNC_EVNT; 13884 break; 13885 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 13886 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13887 TG3_RX_PTP_CTL_SYNC_EVNT; 13888 break; 13889 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 13890 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13891 TG3_RX_PTP_CTL_SYNC_EVNT; 13892 break; 13893 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 13894 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 13895 TG3_RX_PTP_CTL_DELAY_REQ; 13896 break; 13897 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 13898 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 13899 TG3_RX_PTP_CTL_DELAY_REQ; 13900 break; 13901 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 13902 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 13903 TG3_RX_PTP_CTL_DELAY_REQ; 13904 break; 13905 default: 13906 return -ERANGE; 13907 } 13908 13909 if (netif_running(dev) && tp->rxptpctl) 13910 tw32(TG3_RX_PTP_CTL, 13911 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 13912 13913 if (stmpconf.tx_type == HWTSTAMP_TX_ON) 13914 tg3_flag_set(tp, TX_TSTAMP_EN); 13915 else 13916 tg3_flag_clear(tp, TX_TSTAMP_EN); 13917 13918 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13919 -EFAULT : 0; 13920 } 13921 13922 static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr) 13923 { 13924 struct tg3 *tp = netdev_priv(dev); 13925 struct hwtstamp_config stmpconf; 13926 13927 if (!tg3_flag(tp, PTP_CAPABLE)) 13928 return -EOPNOTSUPP; 13929 13930 stmpconf.flags = 0; 13931 stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ? 13932 HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF); 13933 13934 switch (tp->rxptpctl) { 13935 case 0: 13936 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE; 13937 break; 13938 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS: 13939 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 13940 break; 13941 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13942 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC; 13943 break; 13944 case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13945 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ; 13946 break; 13947 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13948 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 13949 break; 13950 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13951 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT; 13952 break; 13953 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS: 13954 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 13955 break; 13956 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13957 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC; 13958 break; 13959 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13960 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC; 13961 break; 13962 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT: 13963 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC; 13964 break; 13965 case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13966 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ; 13967 break; 13968 case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13969 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ; 13970 break; 13971 case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ: 13972 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ; 13973 break; 13974 default: 13975 WARN_ON_ONCE(1); 13976 return -ERANGE; 13977 } 13978 13979 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 13980 -EFAULT : 0; 13981 } 13982 13983 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 13984 { 13985 struct mii_ioctl_data *data = if_mii(ifr); 13986 struct tg3 *tp = netdev_priv(dev); 13987 int err; 13988 13989 if (tg3_flag(tp, USE_PHYLIB)) { 13990 struct phy_device *phydev; 13991 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 13992 return -EAGAIN; 13993 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); 13994 return phy_mii_ioctl(phydev, ifr, cmd); 13995 } 13996 13997 switch (cmd) { 13998 case SIOCGMIIPHY: 13999 data->phy_id = tp->phy_addr; 14000 14001 /* fallthru */ 14002 case SIOCGMIIREG: { 14003 u32 mii_regval; 14004 14005 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14006 break; /* We have no PHY */ 14007 14008 if (!netif_running(dev)) 14009 return -EAGAIN; 14010 14011 spin_lock_bh(&tp->lock); 14012 err = __tg3_readphy(tp, data->phy_id & 0x1f, 14013 data->reg_num & 0x1f, &mii_regval); 14014 spin_unlock_bh(&tp->lock); 14015 14016 data->val_out = mii_regval; 14017 14018 return err; 14019 } 14020 14021 case SIOCSMIIREG: 14022 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14023 break; /* We have no PHY */ 14024 14025 if (!netif_running(dev)) 14026 return -EAGAIN; 14027 14028 spin_lock_bh(&tp->lock); 14029 err = __tg3_writephy(tp, data->phy_id & 0x1f, 14030 data->reg_num & 0x1f, data->val_in); 14031 spin_unlock_bh(&tp->lock); 14032 14033 return err; 14034 14035 case SIOCSHWTSTAMP: 14036 return tg3_hwtstamp_set(dev, ifr); 14037 14038 case SIOCGHWTSTAMP: 14039 return tg3_hwtstamp_get(dev, ifr); 14040 14041 default: 14042 /* do nothing */ 14043 break; 14044 } 14045 return -EOPNOTSUPP; 14046 } 14047 14048 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 14049 { 14050 struct tg3 *tp = netdev_priv(dev); 14051 14052 memcpy(ec, &tp->coal, sizeof(*ec)); 14053 return 0; 14054 } 14055 14056 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 14057 { 14058 struct tg3 *tp = netdev_priv(dev); 14059 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 14060 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 14061 14062 if (!tg3_flag(tp, 5705_PLUS)) { 14063 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 14064 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 14065 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 14066 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 14067 } 14068 14069 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 14070 (!ec->rx_coalesce_usecs) || 14071 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 14072 (!ec->tx_coalesce_usecs) || 14073 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 14074 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 14075 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 14076 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 14077 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 14078 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 14079 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 14080 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 14081 return -EINVAL; 14082 14083 /* Only copy relevant parameters, ignore all others. */ 14084 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 14085 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 14086 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 14087 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 14088 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 14089 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 14090 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 14091 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 14092 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 14093 14094 if (netif_running(dev)) { 14095 tg3_full_lock(tp, 0); 14096 __tg3_set_coalesce(tp, &tp->coal); 14097 tg3_full_unlock(tp); 14098 } 14099 return 0; 14100 } 14101 14102 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata) 14103 { 14104 struct tg3 *tp = netdev_priv(dev); 14105 14106 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14107 netdev_warn(tp->dev, "Board does not support EEE!\n"); 14108 return -EOPNOTSUPP; 14109 } 14110 14111 if (edata->advertised != tp->eee.advertised) { 14112 netdev_warn(tp->dev, 14113 "Direct manipulation of EEE advertisement is not supported\n"); 14114 return -EINVAL; 14115 } 14116 14117 if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) { 14118 netdev_warn(tp->dev, 14119 "Maximal Tx Lpi timer supported is %#x(u)\n", 14120 TG3_CPMU_DBTMR1_LNKIDLE_MAX); 14121 return -EINVAL; 14122 } 14123 14124 tp->eee = *edata; 14125 14126 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; 14127 tg3_warn_mgmt_link_flap(tp); 14128 14129 if (netif_running(tp->dev)) { 14130 tg3_full_lock(tp, 0); 14131 tg3_setup_eee(tp); 14132 tg3_phy_reset(tp); 14133 tg3_full_unlock(tp); 14134 } 14135 14136 return 0; 14137 } 14138 14139 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata) 14140 { 14141 struct tg3 *tp = netdev_priv(dev); 14142 14143 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) { 14144 netdev_warn(tp->dev, 14145 "Board does not support EEE!\n"); 14146 return -EOPNOTSUPP; 14147 } 14148 14149 *edata = tp->eee; 14150 return 0; 14151 } 14152 14153 static const struct ethtool_ops tg3_ethtool_ops = { 14154 .get_drvinfo = tg3_get_drvinfo, 14155 .get_regs_len = tg3_get_regs_len, 14156 .get_regs = tg3_get_regs, 14157 .get_wol = tg3_get_wol, 14158 .set_wol = tg3_set_wol, 14159 .get_msglevel = tg3_get_msglevel, 14160 .set_msglevel = tg3_set_msglevel, 14161 .nway_reset = tg3_nway_reset, 14162 .get_link = ethtool_op_get_link, 14163 .get_eeprom_len = tg3_get_eeprom_len, 14164 .get_eeprom = tg3_get_eeprom, 14165 .set_eeprom = tg3_set_eeprom, 14166 .get_ringparam = tg3_get_ringparam, 14167 .set_ringparam = tg3_set_ringparam, 14168 .get_pauseparam = tg3_get_pauseparam, 14169 .set_pauseparam = tg3_set_pauseparam, 14170 .self_test = tg3_self_test, 14171 .get_strings = tg3_get_strings, 14172 .set_phys_id = tg3_set_phys_id, 14173 .get_ethtool_stats = tg3_get_ethtool_stats, 14174 .get_coalesce = tg3_get_coalesce, 14175 .set_coalesce = tg3_set_coalesce, 14176 .get_sset_count = tg3_get_sset_count, 14177 .get_rxnfc = tg3_get_rxnfc, 14178 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 14179 .get_rxfh = tg3_get_rxfh, 14180 .set_rxfh = tg3_set_rxfh, 14181 .get_channels = tg3_get_channels, 14182 .set_channels = tg3_set_channels, 14183 .get_ts_info = tg3_get_ts_info, 14184 .get_eee = tg3_get_eee, 14185 .set_eee = tg3_set_eee, 14186 .get_link_ksettings = tg3_get_link_ksettings, 14187 .set_link_ksettings = tg3_set_link_ksettings, 14188 }; 14189 14190 static void tg3_get_stats64(struct net_device *dev, 14191 struct rtnl_link_stats64 *stats) 14192 { 14193 struct tg3 *tp = netdev_priv(dev); 14194 14195 spin_lock_bh(&tp->lock); 14196 if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) { 14197 *stats = tp->net_stats_prev; 14198 spin_unlock_bh(&tp->lock); 14199 return; 14200 } 14201 14202 tg3_get_nstats(tp, stats); 14203 spin_unlock_bh(&tp->lock); 14204 } 14205 14206 static void tg3_set_rx_mode(struct net_device *dev) 14207 { 14208 struct tg3 *tp = netdev_priv(dev); 14209 14210 if (!netif_running(dev)) 14211 return; 14212 14213 tg3_full_lock(tp, 0); 14214 __tg3_set_rx_mode(dev); 14215 tg3_full_unlock(tp); 14216 } 14217 14218 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 14219 int new_mtu) 14220 { 14221 dev->mtu = new_mtu; 14222 14223 if (new_mtu > ETH_DATA_LEN) { 14224 if (tg3_flag(tp, 5780_CLASS)) { 14225 netdev_update_features(dev); 14226 tg3_flag_clear(tp, TSO_CAPABLE); 14227 } else { 14228 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14229 } 14230 } else { 14231 if (tg3_flag(tp, 5780_CLASS)) { 14232 tg3_flag_set(tp, TSO_CAPABLE); 14233 netdev_update_features(dev); 14234 } 14235 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 14236 } 14237 } 14238 14239 static int tg3_change_mtu(struct net_device *dev, int new_mtu) 14240 { 14241 struct tg3 *tp = netdev_priv(dev); 14242 int err; 14243 bool reset_phy = false; 14244 14245 if (!netif_running(dev)) { 14246 /* We'll just catch it later when the 14247 * device is up'd. 14248 */ 14249 tg3_set_mtu(dev, tp, new_mtu); 14250 return 0; 14251 } 14252 14253 tg3_phy_stop(tp); 14254 14255 tg3_netif_stop(tp); 14256 14257 tg3_set_mtu(dev, tp, new_mtu); 14258 14259 tg3_full_lock(tp, 1); 14260 14261 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 14262 14263 /* Reset PHY, otherwise the read DMA engine will be in a mode that 14264 * breaks all requests to 256 bytes. 14265 */ 14266 if (tg3_asic_rev(tp) == ASIC_REV_57766 || 14267 tg3_asic_rev(tp) == ASIC_REV_5717 || 14268 tg3_asic_rev(tp) == ASIC_REV_5719 || 14269 tg3_asic_rev(tp) == ASIC_REV_5720) 14270 reset_phy = true; 14271 14272 err = tg3_restart_hw(tp, reset_phy); 14273 14274 if (!err) 14275 tg3_netif_start(tp); 14276 14277 tg3_full_unlock(tp); 14278 14279 if (!err) 14280 tg3_phy_start(tp); 14281 14282 return err; 14283 } 14284 14285 static const struct net_device_ops tg3_netdev_ops = { 14286 .ndo_open = tg3_open, 14287 .ndo_stop = tg3_close, 14288 .ndo_start_xmit = tg3_start_xmit, 14289 .ndo_get_stats64 = tg3_get_stats64, 14290 .ndo_validate_addr = eth_validate_addr, 14291 .ndo_set_rx_mode = tg3_set_rx_mode, 14292 .ndo_set_mac_address = tg3_set_mac_addr, 14293 .ndo_do_ioctl = tg3_ioctl, 14294 .ndo_tx_timeout = tg3_tx_timeout, 14295 .ndo_change_mtu = tg3_change_mtu, 14296 .ndo_fix_features = tg3_fix_features, 14297 .ndo_set_features = tg3_set_features, 14298 #ifdef CONFIG_NET_POLL_CONTROLLER 14299 .ndo_poll_controller = tg3_poll_controller, 14300 #endif 14301 }; 14302 14303 static void tg3_get_eeprom_size(struct tg3 *tp) 14304 { 14305 u32 cursize, val, magic; 14306 14307 tp->nvram_size = EEPROM_CHIP_SIZE; 14308 14309 if (tg3_nvram_read(tp, 0, &magic) != 0) 14310 return; 14311 14312 if ((magic != TG3_EEPROM_MAGIC) && 14313 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 14314 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 14315 return; 14316 14317 /* 14318 * Size the chip by reading offsets at increasing powers of two. 14319 * When we encounter our validation signature, we know the addressing 14320 * has wrapped around, and thus have our chip size. 14321 */ 14322 cursize = 0x10; 14323 14324 while (cursize < tp->nvram_size) { 14325 if (tg3_nvram_read(tp, cursize, &val) != 0) 14326 return; 14327 14328 if (val == magic) 14329 break; 14330 14331 cursize <<= 1; 14332 } 14333 14334 tp->nvram_size = cursize; 14335 } 14336 14337 static void tg3_get_nvram_size(struct tg3 *tp) 14338 { 14339 u32 val; 14340 14341 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 14342 return; 14343 14344 /* Selfboot format */ 14345 if (val != TG3_EEPROM_MAGIC) { 14346 tg3_get_eeprom_size(tp); 14347 return; 14348 } 14349 14350 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 14351 if (val != 0) { 14352 /* This is confusing. We want to operate on the 14353 * 16-bit value at offset 0xf2. The tg3_nvram_read() 14354 * call will read from NVRAM and byteswap the data 14355 * according to the byteswapping settings for all 14356 * other register accesses. This ensures the data we 14357 * want will always reside in the lower 16-bits. 14358 * However, the data in NVRAM is in LE format, which 14359 * means the data from the NVRAM read will always be 14360 * opposite the endianness of the CPU. The 16-bit 14361 * byteswap then brings the data to CPU endianness. 14362 */ 14363 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 14364 return; 14365 } 14366 } 14367 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14368 } 14369 14370 static void tg3_get_nvram_info(struct tg3 *tp) 14371 { 14372 u32 nvcfg1; 14373 14374 nvcfg1 = tr32(NVRAM_CFG1); 14375 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 14376 tg3_flag_set(tp, FLASH); 14377 } else { 14378 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14379 tw32(NVRAM_CFG1, nvcfg1); 14380 } 14381 14382 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 14383 tg3_flag(tp, 5780_CLASS)) { 14384 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 14385 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 14386 tp->nvram_jedecnum = JEDEC_ATMEL; 14387 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14388 tg3_flag_set(tp, NVRAM_BUFFERED); 14389 break; 14390 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 14391 tp->nvram_jedecnum = JEDEC_ATMEL; 14392 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 14393 break; 14394 case FLASH_VENDOR_ATMEL_EEPROM: 14395 tp->nvram_jedecnum = JEDEC_ATMEL; 14396 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14397 tg3_flag_set(tp, NVRAM_BUFFERED); 14398 break; 14399 case FLASH_VENDOR_ST: 14400 tp->nvram_jedecnum = JEDEC_ST; 14401 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 14402 tg3_flag_set(tp, NVRAM_BUFFERED); 14403 break; 14404 case FLASH_VENDOR_SAIFUN: 14405 tp->nvram_jedecnum = JEDEC_SAIFUN; 14406 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 14407 break; 14408 case FLASH_VENDOR_SST_SMALL: 14409 case FLASH_VENDOR_SST_LARGE: 14410 tp->nvram_jedecnum = JEDEC_SST; 14411 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 14412 break; 14413 } 14414 } else { 14415 tp->nvram_jedecnum = JEDEC_ATMEL; 14416 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 14417 tg3_flag_set(tp, NVRAM_BUFFERED); 14418 } 14419 } 14420 14421 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 14422 { 14423 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 14424 case FLASH_5752PAGE_SIZE_256: 14425 tp->nvram_pagesize = 256; 14426 break; 14427 case FLASH_5752PAGE_SIZE_512: 14428 tp->nvram_pagesize = 512; 14429 break; 14430 case FLASH_5752PAGE_SIZE_1K: 14431 tp->nvram_pagesize = 1024; 14432 break; 14433 case FLASH_5752PAGE_SIZE_2K: 14434 tp->nvram_pagesize = 2048; 14435 break; 14436 case FLASH_5752PAGE_SIZE_4K: 14437 tp->nvram_pagesize = 4096; 14438 break; 14439 case FLASH_5752PAGE_SIZE_264: 14440 tp->nvram_pagesize = 264; 14441 break; 14442 case FLASH_5752PAGE_SIZE_528: 14443 tp->nvram_pagesize = 528; 14444 break; 14445 } 14446 } 14447 14448 static void tg3_get_5752_nvram_info(struct tg3 *tp) 14449 { 14450 u32 nvcfg1; 14451 14452 nvcfg1 = tr32(NVRAM_CFG1); 14453 14454 /* NVRAM protection for TPM */ 14455 if (nvcfg1 & (1 << 27)) 14456 tg3_flag_set(tp, PROTECTED_NVRAM); 14457 14458 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14459 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 14460 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 14461 tp->nvram_jedecnum = JEDEC_ATMEL; 14462 tg3_flag_set(tp, NVRAM_BUFFERED); 14463 break; 14464 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14465 tp->nvram_jedecnum = JEDEC_ATMEL; 14466 tg3_flag_set(tp, NVRAM_BUFFERED); 14467 tg3_flag_set(tp, FLASH); 14468 break; 14469 case FLASH_5752VENDOR_ST_M45PE10: 14470 case FLASH_5752VENDOR_ST_M45PE20: 14471 case FLASH_5752VENDOR_ST_M45PE40: 14472 tp->nvram_jedecnum = JEDEC_ST; 14473 tg3_flag_set(tp, NVRAM_BUFFERED); 14474 tg3_flag_set(tp, FLASH); 14475 break; 14476 } 14477 14478 if (tg3_flag(tp, FLASH)) { 14479 tg3_nvram_get_pagesize(tp, nvcfg1); 14480 } else { 14481 /* For eeprom, set pagesize to maximum eeprom size */ 14482 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14483 14484 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14485 tw32(NVRAM_CFG1, nvcfg1); 14486 } 14487 } 14488 14489 static void tg3_get_5755_nvram_info(struct tg3 *tp) 14490 { 14491 u32 nvcfg1, protect = 0; 14492 14493 nvcfg1 = tr32(NVRAM_CFG1); 14494 14495 /* NVRAM protection for TPM */ 14496 if (nvcfg1 & (1 << 27)) { 14497 tg3_flag_set(tp, PROTECTED_NVRAM); 14498 protect = 1; 14499 } 14500 14501 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14502 switch (nvcfg1) { 14503 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14504 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14505 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14506 case FLASH_5755VENDOR_ATMEL_FLASH_5: 14507 tp->nvram_jedecnum = JEDEC_ATMEL; 14508 tg3_flag_set(tp, NVRAM_BUFFERED); 14509 tg3_flag_set(tp, FLASH); 14510 tp->nvram_pagesize = 264; 14511 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 14512 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 14513 tp->nvram_size = (protect ? 0x3e200 : 14514 TG3_NVRAM_SIZE_512KB); 14515 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 14516 tp->nvram_size = (protect ? 0x1f200 : 14517 TG3_NVRAM_SIZE_256KB); 14518 else 14519 tp->nvram_size = (protect ? 0x1f200 : 14520 TG3_NVRAM_SIZE_128KB); 14521 break; 14522 case FLASH_5752VENDOR_ST_M45PE10: 14523 case FLASH_5752VENDOR_ST_M45PE20: 14524 case FLASH_5752VENDOR_ST_M45PE40: 14525 tp->nvram_jedecnum = JEDEC_ST; 14526 tg3_flag_set(tp, NVRAM_BUFFERED); 14527 tg3_flag_set(tp, FLASH); 14528 tp->nvram_pagesize = 256; 14529 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 14530 tp->nvram_size = (protect ? 14531 TG3_NVRAM_SIZE_64KB : 14532 TG3_NVRAM_SIZE_128KB); 14533 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 14534 tp->nvram_size = (protect ? 14535 TG3_NVRAM_SIZE_64KB : 14536 TG3_NVRAM_SIZE_256KB); 14537 else 14538 tp->nvram_size = (protect ? 14539 TG3_NVRAM_SIZE_128KB : 14540 TG3_NVRAM_SIZE_512KB); 14541 break; 14542 } 14543 } 14544 14545 static void tg3_get_5787_nvram_info(struct tg3 *tp) 14546 { 14547 u32 nvcfg1; 14548 14549 nvcfg1 = tr32(NVRAM_CFG1); 14550 14551 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14552 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 14553 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14554 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 14555 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14556 tp->nvram_jedecnum = JEDEC_ATMEL; 14557 tg3_flag_set(tp, NVRAM_BUFFERED); 14558 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14559 14560 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14561 tw32(NVRAM_CFG1, nvcfg1); 14562 break; 14563 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14564 case FLASH_5755VENDOR_ATMEL_FLASH_1: 14565 case FLASH_5755VENDOR_ATMEL_FLASH_2: 14566 case FLASH_5755VENDOR_ATMEL_FLASH_3: 14567 tp->nvram_jedecnum = JEDEC_ATMEL; 14568 tg3_flag_set(tp, NVRAM_BUFFERED); 14569 tg3_flag_set(tp, FLASH); 14570 tp->nvram_pagesize = 264; 14571 break; 14572 case FLASH_5752VENDOR_ST_M45PE10: 14573 case FLASH_5752VENDOR_ST_M45PE20: 14574 case FLASH_5752VENDOR_ST_M45PE40: 14575 tp->nvram_jedecnum = JEDEC_ST; 14576 tg3_flag_set(tp, NVRAM_BUFFERED); 14577 tg3_flag_set(tp, FLASH); 14578 tp->nvram_pagesize = 256; 14579 break; 14580 } 14581 } 14582 14583 static void tg3_get_5761_nvram_info(struct tg3 *tp) 14584 { 14585 u32 nvcfg1, protect = 0; 14586 14587 nvcfg1 = tr32(NVRAM_CFG1); 14588 14589 /* NVRAM protection for TPM */ 14590 if (nvcfg1 & (1 << 27)) { 14591 tg3_flag_set(tp, PROTECTED_NVRAM); 14592 protect = 1; 14593 } 14594 14595 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 14596 switch (nvcfg1) { 14597 case FLASH_5761VENDOR_ATMEL_ADB021D: 14598 case FLASH_5761VENDOR_ATMEL_ADB041D: 14599 case FLASH_5761VENDOR_ATMEL_ADB081D: 14600 case FLASH_5761VENDOR_ATMEL_ADB161D: 14601 case FLASH_5761VENDOR_ATMEL_MDB021D: 14602 case FLASH_5761VENDOR_ATMEL_MDB041D: 14603 case FLASH_5761VENDOR_ATMEL_MDB081D: 14604 case FLASH_5761VENDOR_ATMEL_MDB161D: 14605 tp->nvram_jedecnum = JEDEC_ATMEL; 14606 tg3_flag_set(tp, NVRAM_BUFFERED); 14607 tg3_flag_set(tp, FLASH); 14608 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14609 tp->nvram_pagesize = 256; 14610 break; 14611 case FLASH_5761VENDOR_ST_A_M45PE20: 14612 case FLASH_5761VENDOR_ST_A_M45PE40: 14613 case FLASH_5761VENDOR_ST_A_M45PE80: 14614 case FLASH_5761VENDOR_ST_A_M45PE16: 14615 case FLASH_5761VENDOR_ST_M_M45PE20: 14616 case FLASH_5761VENDOR_ST_M_M45PE40: 14617 case FLASH_5761VENDOR_ST_M_M45PE80: 14618 case FLASH_5761VENDOR_ST_M_M45PE16: 14619 tp->nvram_jedecnum = JEDEC_ST; 14620 tg3_flag_set(tp, NVRAM_BUFFERED); 14621 tg3_flag_set(tp, FLASH); 14622 tp->nvram_pagesize = 256; 14623 break; 14624 } 14625 14626 if (protect) { 14627 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 14628 } else { 14629 switch (nvcfg1) { 14630 case FLASH_5761VENDOR_ATMEL_ADB161D: 14631 case FLASH_5761VENDOR_ATMEL_MDB161D: 14632 case FLASH_5761VENDOR_ST_A_M45PE16: 14633 case FLASH_5761VENDOR_ST_M_M45PE16: 14634 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 14635 break; 14636 case FLASH_5761VENDOR_ATMEL_ADB081D: 14637 case FLASH_5761VENDOR_ATMEL_MDB081D: 14638 case FLASH_5761VENDOR_ST_A_M45PE80: 14639 case FLASH_5761VENDOR_ST_M_M45PE80: 14640 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14641 break; 14642 case FLASH_5761VENDOR_ATMEL_ADB041D: 14643 case FLASH_5761VENDOR_ATMEL_MDB041D: 14644 case FLASH_5761VENDOR_ST_A_M45PE40: 14645 case FLASH_5761VENDOR_ST_M_M45PE40: 14646 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14647 break; 14648 case FLASH_5761VENDOR_ATMEL_ADB021D: 14649 case FLASH_5761VENDOR_ATMEL_MDB021D: 14650 case FLASH_5761VENDOR_ST_A_M45PE20: 14651 case FLASH_5761VENDOR_ST_M_M45PE20: 14652 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14653 break; 14654 } 14655 } 14656 } 14657 14658 static void tg3_get_5906_nvram_info(struct tg3 *tp) 14659 { 14660 tp->nvram_jedecnum = JEDEC_ATMEL; 14661 tg3_flag_set(tp, NVRAM_BUFFERED); 14662 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14663 } 14664 14665 static void tg3_get_57780_nvram_info(struct tg3 *tp) 14666 { 14667 u32 nvcfg1; 14668 14669 nvcfg1 = tr32(NVRAM_CFG1); 14670 14671 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14672 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 14673 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 14674 tp->nvram_jedecnum = JEDEC_ATMEL; 14675 tg3_flag_set(tp, NVRAM_BUFFERED); 14676 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14677 14678 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14679 tw32(NVRAM_CFG1, nvcfg1); 14680 return; 14681 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14682 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14683 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14684 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14685 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14686 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14687 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14688 tp->nvram_jedecnum = JEDEC_ATMEL; 14689 tg3_flag_set(tp, NVRAM_BUFFERED); 14690 tg3_flag_set(tp, FLASH); 14691 14692 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14693 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 14694 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 14695 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 14696 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14697 break; 14698 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 14699 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 14700 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14701 break; 14702 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 14703 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 14704 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14705 break; 14706 } 14707 break; 14708 case FLASH_5752VENDOR_ST_M45PE10: 14709 case FLASH_5752VENDOR_ST_M45PE20: 14710 case FLASH_5752VENDOR_ST_M45PE40: 14711 tp->nvram_jedecnum = JEDEC_ST; 14712 tg3_flag_set(tp, NVRAM_BUFFERED); 14713 tg3_flag_set(tp, FLASH); 14714 14715 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14716 case FLASH_5752VENDOR_ST_M45PE10: 14717 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14718 break; 14719 case FLASH_5752VENDOR_ST_M45PE20: 14720 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14721 break; 14722 case FLASH_5752VENDOR_ST_M45PE40: 14723 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14724 break; 14725 } 14726 break; 14727 default: 14728 tg3_flag_set(tp, NO_NVRAM); 14729 return; 14730 } 14731 14732 tg3_nvram_get_pagesize(tp, nvcfg1); 14733 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14734 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14735 } 14736 14737 14738 static void tg3_get_5717_nvram_info(struct tg3 *tp) 14739 { 14740 u32 nvcfg1; 14741 14742 nvcfg1 = tr32(NVRAM_CFG1); 14743 14744 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14745 case FLASH_5717VENDOR_ATMEL_EEPROM: 14746 case FLASH_5717VENDOR_MICRO_EEPROM: 14747 tp->nvram_jedecnum = JEDEC_ATMEL; 14748 tg3_flag_set(tp, NVRAM_BUFFERED); 14749 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14750 14751 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14752 tw32(NVRAM_CFG1, nvcfg1); 14753 return; 14754 case FLASH_5717VENDOR_ATMEL_MDB011D: 14755 case FLASH_5717VENDOR_ATMEL_ADB011B: 14756 case FLASH_5717VENDOR_ATMEL_ADB011D: 14757 case FLASH_5717VENDOR_ATMEL_MDB021D: 14758 case FLASH_5717VENDOR_ATMEL_ADB021B: 14759 case FLASH_5717VENDOR_ATMEL_ADB021D: 14760 case FLASH_5717VENDOR_ATMEL_45USPT: 14761 tp->nvram_jedecnum = JEDEC_ATMEL; 14762 tg3_flag_set(tp, NVRAM_BUFFERED); 14763 tg3_flag_set(tp, FLASH); 14764 14765 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14766 case FLASH_5717VENDOR_ATMEL_MDB021D: 14767 /* Detect size with tg3_nvram_get_size() */ 14768 break; 14769 case FLASH_5717VENDOR_ATMEL_ADB021B: 14770 case FLASH_5717VENDOR_ATMEL_ADB021D: 14771 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14772 break; 14773 default: 14774 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14775 break; 14776 } 14777 break; 14778 case FLASH_5717VENDOR_ST_M_M25PE10: 14779 case FLASH_5717VENDOR_ST_A_M25PE10: 14780 case FLASH_5717VENDOR_ST_M_M45PE10: 14781 case FLASH_5717VENDOR_ST_A_M45PE10: 14782 case FLASH_5717VENDOR_ST_M_M25PE20: 14783 case FLASH_5717VENDOR_ST_A_M25PE20: 14784 case FLASH_5717VENDOR_ST_M_M45PE20: 14785 case FLASH_5717VENDOR_ST_A_M45PE20: 14786 case FLASH_5717VENDOR_ST_25USPT: 14787 case FLASH_5717VENDOR_ST_45USPT: 14788 tp->nvram_jedecnum = JEDEC_ST; 14789 tg3_flag_set(tp, NVRAM_BUFFERED); 14790 tg3_flag_set(tp, FLASH); 14791 14792 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 14793 case FLASH_5717VENDOR_ST_M_M25PE20: 14794 case FLASH_5717VENDOR_ST_M_M45PE20: 14795 /* Detect size with tg3_nvram_get_size() */ 14796 break; 14797 case FLASH_5717VENDOR_ST_A_M25PE20: 14798 case FLASH_5717VENDOR_ST_A_M45PE20: 14799 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14800 break; 14801 default: 14802 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14803 break; 14804 } 14805 break; 14806 default: 14807 tg3_flag_set(tp, NO_NVRAM); 14808 return; 14809 } 14810 14811 tg3_nvram_get_pagesize(tp, nvcfg1); 14812 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14813 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14814 } 14815 14816 static void tg3_get_5720_nvram_info(struct tg3 *tp) 14817 { 14818 u32 nvcfg1, nvmpinstrp, nv_status; 14819 14820 nvcfg1 = tr32(NVRAM_CFG1); 14821 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 14822 14823 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14824 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) { 14825 tg3_flag_set(tp, NO_NVRAM); 14826 return; 14827 } 14828 14829 switch (nvmpinstrp) { 14830 case FLASH_5762_MX25L_100: 14831 case FLASH_5762_MX25L_200: 14832 case FLASH_5762_MX25L_400: 14833 case FLASH_5762_MX25L_800: 14834 case FLASH_5762_MX25L_160_320: 14835 tp->nvram_pagesize = 4096; 14836 tp->nvram_jedecnum = JEDEC_MACRONIX; 14837 tg3_flag_set(tp, NVRAM_BUFFERED); 14838 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14839 tg3_flag_set(tp, FLASH); 14840 nv_status = tr32(NVRAM_AUTOSENSE_STATUS); 14841 tp->nvram_size = 14842 (1 << (nv_status >> AUTOSENSE_DEVID & 14843 AUTOSENSE_DEVID_MASK) 14844 << AUTOSENSE_SIZE_IN_MB); 14845 return; 14846 14847 case FLASH_5762_EEPROM_HD: 14848 nvmpinstrp = FLASH_5720_EEPROM_HD; 14849 break; 14850 case FLASH_5762_EEPROM_LD: 14851 nvmpinstrp = FLASH_5720_EEPROM_LD; 14852 break; 14853 case FLASH_5720VENDOR_M_ST_M45PE20: 14854 /* This pinstrap supports multiple sizes, so force it 14855 * to read the actual size from location 0xf0. 14856 */ 14857 nvmpinstrp = FLASH_5720VENDOR_ST_45USPT; 14858 break; 14859 } 14860 } 14861 14862 switch (nvmpinstrp) { 14863 case FLASH_5720_EEPROM_HD: 14864 case FLASH_5720_EEPROM_LD: 14865 tp->nvram_jedecnum = JEDEC_ATMEL; 14866 tg3_flag_set(tp, NVRAM_BUFFERED); 14867 14868 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 14869 tw32(NVRAM_CFG1, nvcfg1); 14870 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 14871 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 14872 else 14873 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 14874 return; 14875 case FLASH_5720VENDOR_M_ATMEL_DB011D: 14876 case FLASH_5720VENDOR_A_ATMEL_DB011B: 14877 case FLASH_5720VENDOR_A_ATMEL_DB011D: 14878 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14879 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14880 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14881 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14882 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14883 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14884 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14885 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14886 case FLASH_5720VENDOR_ATMEL_45USPT: 14887 tp->nvram_jedecnum = JEDEC_ATMEL; 14888 tg3_flag_set(tp, NVRAM_BUFFERED); 14889 tg3_flag_set(tp, FLASH); 14890 14891 switch (nvmpinstrp) { 14892 case FLASH_5720VENDOR_M_ATMEL_DB021D: 14893 case FLASH_5720VENDOR_A_ATMEL_DB021B: 14894 case FLASH_5720VENDOR_A_ATMEL_DB021D: 14895 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14896 break; 14897 case FLASH_5720VENDOR_M_ATMEL_DB041D: 14898 case FLASH_5720VENDOR_A_ATMEL_DB041B: 14899 case FLASH_5720VENDOR_A_ATMEL_DB041D: 14900 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14901 break; 14902 case FLASH_5720VENDOR_M_ATMEL_DB081D: 14903 case FLASH_5720VENDOR_A_ATMEL_DB081D: 14904 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14905 break; 14906 default: 14907 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14908 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14909 break; 14910 } 14911 break; 14912 case FLASH_5720VENDOR_M_ST_M25PE10: 14913 case FLASH_5720VENDOR_M_ST_M45PE10: 14914 case FLASH_5720VENDOR_A_ST_M25PE10: 14915 case FLASH_5720VENDOR_A_ST_M45PE10: 14916 case FLASH_5720VENDOR_M_ST_M25PE20: 14917 case FLASH_5720VENDOR_M_ST_M45PE20: 14918 case FLASH_5720VENDOR_A_ST_M25PE20: 14919 case FLASH_5720VENDOR_A_ST_M45PE20: 14920 case FLASH_5720VENDOR_M_ST_M25PE40: 14921 case FLASH_5720VENDOR_M_ST_M45PE40: 14922 case FLASH_5720VENDOR_A_ST_M25PE40: 14923 case FLASH_5720VENDOR_A_ST_M45PE40: 14924 case FLASH_5720VENDOR_M_ST_M25PE80: 14925 case FLASH_5720VENDOR_M_ST_M45PE80: 14926 case FLASH_5720VENDOR_A_ST_M25PE80: 14927 case FLASH_5720VENDOR_A_ST_M45PE80: 14928 case FLASH_5720VENDOR_ST_25USPT: 14929 case FLASH_5720VENDOR_ST_45USPT: 14930 tp->nvram_jedecnum = JEDEC_ST; 14931 tg3_flag_set(tp, NVRAM_BUFFERED); 14932 tg3_flag_set(tp, FLASH); 14933 14934 switch (nvmpinstrp) { 14935 case FLASH_5720VENDOR_M_ST_M25PE20: 14936 case FLASH_5720VENDOR_M_ST_M45PE20: 14937 case FLASH_5720VENDOR_A_ST_M25PE20: 14938 case FLASH_5720VENDOR_A_ST_M45PE20: 14939 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 14940 break; 14941 case FLASH_5720VENDOR_M_ST_M25PE40: 14942 case FLASH_5720VENDOR_M_ST_M45PE40: 14943 case FLASH_5720VENDOR_A_ST_M25PE40: 14944 case FLASH_5720VENDOR_A_ST_M45PE40: 14945 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 14946 break; 14947 case FLASH_5720VENDOR_M_ST_M25PE80: 14948 case FLASH_5720VENDOR_M_ST_M45PE80: 14949 case FLASH_5720VENDOR_A_ST_M25PE80: 14950 case FLASH_5720VENDOR_A_ST_M45PE80: 14951 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 14952 break; 14953 default: 14954 if (tg3_asic_rev(tp) != ASIC_REV_5762) 14955 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 14956 break; 14957 } 14958 break; 14959 default: 14960 tg3_flag_set(tp, NO_NVRAM); 14961 return; 14962 } 14963 14964 tg3_nvram_get_pagesize(tp, nvcfg1); 14965 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 14966 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 14967 14968 if (tg3_asic_rev(tp) == ASIC_REV_5762) { 14969 u32 val; 14970 14971 if (tg3_nvram_read(tp, 0, &val)) 14972 return; 14973 14974 if (val != TG3_EEPROM_MAGIC && 14975 (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) 14976 tg3_flag_set(tp, NO_NVRAM); 14977 } 14978 } 14979 14980 /* Chips other than 5700/5701 use the NVRAM for fetching info. */ 14981 static void tg3_nvram_init(struct tg3 *tp) 14982 { 14983 if (tg3_flag(tp, IS_SSB_CORE)) { 14984 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */ 14985 tg3_flag_clear(tp, NVRAM); 14986 tg3_flag_clear(tp, NVRAM_BUFFERED); 14987 tg3_flag_set(tp, NO_NVRAM); 14988 return; 14989 } 14990 14991 tw32_f(GRC_EEPROM_ADDR, 14992 (EEPROM_ADDR_FSM_RESET | 14993 (EEPROM_DEFAULT_CLOCK_PERIOD << 14994 EEPROM_ADDR_CLKPERD_SHIFT))); 14995 14996 msleep(1); 14997 14998 /* Enable seeprom accesses. */ 14999 tw32_f(GRC_LOCAL_CTRL, 15000 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 15001 udelay(100); 15002 15003 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15004 tg3_asic_rev(tp) != ASIC_REV_5701) { 15005 tg3_flag_set(tp, NVRAM); 15006 15007 if (tg3_nvram_lock(tp)) { 15008 netdev_warn(tp->dev, 15009 "Cannot get nvram lock, %s failed\n", 15010 __func__); 15011 return; 15012 } 15013 tg3_enable_nvram_access(tp); 15014 15015 tp->nvram_size = 0; 15016 15017 if (tg3_asic_rev(tp) == ASIC_REV_5752) 15018 tg3_get_5752_nvram_info(tp); 15019 else if (tg3_asic_rev(tp) == ASIC_REV_5755) 15020 tg3_get_5755_nvram_info(tp); 15021 else if (tg3_asic_rev(tp) == ASIC_REV_5787 || 15022 tg3_asic_rev(tp) == ASIC_REV_5784 || 15023 tg3_asic_rev(tp) == ASIC_REV_5785) 15024 tg3_get_5787_nvram_info(tp); 15025 else if (tg3_asic_rev(tp) == ASIC_REV_5761) 15026 tg3_get_5761_nvram_info(tp); 15027 else if (tg3_asic_rev(tp) == ASIC_REV_5906) 15028 tg3_get_5906_nvram_info(tp); 15029 else if (tg3_asic_rev(tp) == ASIC_REV_57780 || 15030 tg3_flag(tp, 57765_CLASS)) 15031 tg3_get_57780_nvram_info(tp); 15032 else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15033 tg3_asic_rev(tp) == ASIC_REV_5719) 15034 tg3_get_5717_nvram_info(tp); 15035 else if (tg3_asic_rev(tp) == ASIC_REV_5720 || 15036 tg3_asic_rev(tp) == ASIC_REV_5762) 15037 tg3_get_5720_nvram_info(tp); 15038 else 15039 tg3_get_nvram_info(tp); 15040 15041 if (tp->nvram_size == 0) 15042 tg3_get_nvram_size(tp); 15043 15044 tg3_disable_nvram_access(tp); 15045 tg3_nvram_unlock(tp); 15046 15047 } else { 15048 tg3_flag_clear(tp, NVRAM); 15049 tg3_flag_clear(tp, NVRAM_BUFFERED); 15050 15051 tg3_get_eeprom_size(tp); 15052 } 15053 } 15054 15055 struct subsys_tbl_ent { 15056 u16 subsys_vendor, subsys_devid; 15057 u32 phy_id; 15058 }; 15059 15060 static struct subsys_tbl_ent subsys_id_to_phy_id[] = { 15061 /* Broadcom boards. */ 15062 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15063 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 15064 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15065 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 15066 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15067 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 15068 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15069 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 15070 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15071 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 15072 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15073 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 15074 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15075 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 15076 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15077 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 15078 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15079 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 15080 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15081 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 15082 { TG3PCI_SUBVENDOR_ID_BROADCOM, 15083 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 15084 15085 /* 3com boards. */ 15086 { TG3PCI_SUBVENDOR_ID_3COM, 15087 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 15088 { TG3PCI_SUBVENDOR_ID_3COM, 15089 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 15090 { TG3PCI_SUBVENDOR_ID_3COM, 15091 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 15092 { TG3PCI_SUBVENDOR_ID_3COM, 15093 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 15094 { TG3PCI_SUBVENDOR_ID_3COM, 15095 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 15096 15097 /* DELL boards. */ 15098 { TG3PCI_SUBVENDOR_ID_DELL, 15099 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 15100 { TG3PCI_SUBVENDOR_ID_DELL, 15101 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 15102 { TG3PCI_SUBVENDOR_ID_DELL, 15103 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 15104 { TG3PCI_SUBVENDOR_ID_DELL, 15105 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 15106 15107 /* Compaq boards. */ 15108 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15109 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 15110 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15111 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 15112 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15113 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 15114 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15115 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 15116 { TG3PCI_SUBVENDOR_ID_COMPAQ, 15117 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 15118 15119 /* IBM boards. */ 15120 { TG3PCI_SUBVENDOR_ID_IBM, 15121 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 15122 }; 15123 15124 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) 15125 { 15126 int i; 15127 15128 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 15129 if ((subsys_id_to_phy_id[i].subsys_vendor == 15130 tp->pdev->subsystem_vendor) && 15131 (subsys_id_to_phy_id[i].subsys_devid == 15132 tp->pdev->subsystem_device)) 15133 return &subsys_id_to_phy_id[i]; 15134 } 15135 return NULL; 15136 } 15137 15138 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) 15139 { 15140 u32 val; 15141 15142 tp->phy_id = TG3_PHY_ID_INVALID; 15143 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15144 15145 /* Assume an onboard device and WOL capable by default. */ 15146 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15147 tg3_flag_set(tp, WOL_CAP); 15148 15149 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15150 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 15151 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15152 tg3_flag_set(tp, IS_NIC); 15153 } 15154 val = tr32(VCPU_CFGSHDW); 15155 if (val & VCPU_CFGSHDW_ASPM_DBNC) 15156 tg3_flag_set(tp, ASPM_WORKAROUND); 15157 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 15158 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 15159 tg3_flag_set(tp, WOL_ENABLE); 15160 device_set_wakeup_enable(&tp->pdev->dev, true); 15161 } 15162 goto done; 15163 } 15164 15165 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 15166 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 15167 u32 nic_cfg, led_cfg; 15168 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0; 15169 u32 nic_phy_id, ver, eeprom_phy_id; 15170 int eeprom_phy_serdes = 0; 15171 15172 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 15173 tp->nic_sram_data_cfg = nic_cfg; 15174 15175 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 15176 ver >>= NIC_SRAM_DATA_VER_SHIFT; 15177 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 15178 tg3_asic_rev(tp) != ASIC_REV_5701 && 15179 tg3_asic_rev(tp) != ASIC_REV_5703 && 15180 (ver > 0) && (ver < 0x100)) 15181 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 15182 15183 if (tg3_asic_rev(tp) == ASIC_REV_5785) 15184 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 15185 15186 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 15187 tg3_asic_rev(tp) == ASIC_REV_5719 || 15188 tg3_asic_rev(tp) == ASIC_REV_5720) 15189 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5); 15190 15191 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 15192 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 15193 eeprom_phy_serdes = 1; 15194 15195 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 15196 if (nic_phy_id != 0) { 15197 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 15198 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 15199 15200 eeprom_phy_id = (id1 >> 16) << 10; 15201 eeprom_phy_id |= (id2 & 0xfc00) << 16; 15202 eeprom_phy_id |= (id2 & 0x03ff) << 0; 15203 } else 15204 eeprom_phy_id = 0; 15205 15206 tp->phy_id = eeprom_phy_id; 15207 if (eeprom_phy_serdes) { 15208 if (!tg3_flag(tp, 5705_PLUS)) 15209 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15210 else 15211 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 15212 } 15213 15214 if (tg3_flag(tp, 5750_PLUS)) 15215 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 15216 SHASTA_EXT_LED_MODE_MASK); 15217 else 15218 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 15219 15220 switch (led_cfg) { 15221 default: 15222 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 15223 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15224 break; 15225 15226 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 15227 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15228 break; 15229 15230 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 15231 tp->led_ctrl = LED_CTRL_MODE_MAC; 15232 15233 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 15234 * read on some older 5700/5701 bootcode. 15235 */ 15236 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 15237 tg3_asic_rev(tp) == ASIC_REV_5701) 15238 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15239 15240 break; 15241 15242 case SHASTA_EXT_LED_SHARED: 15243 tp->led_ctrl = LED_CTRL_MODE_SHARED; 15244 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 && 15245 tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1) 15246 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15247 LED_CTRL_MODE_PHY_2); 15248 15249 if (tg3_flag(tp, 5717_PLUS) || 15250 tg3_asic_rev(tp) == ASIC_REV_5762) 15251 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE | 15252 LED_CTRL_BLINK_RATE_MASK; 15253 15254 break; 15255 15256 case SHASTA_EXT_LED_MAC: 15257 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 15258 break; 15259 15260 case SHASTA_EXT_LED_COMBO: 15261 tp->led_ctrl = LED_CTRL_MODE_COMBO; 15262 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) 15263 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 15264 LED_CTRL_MODE_PHY_2); 15265 break; 15266 15267 } 15268 15269 if ((tg3_asic_rev(tp) == ASIC_REV_5700 || 15270 tg3_asic_rev(tp) == ASIC_REV_5701) && 15271 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 15272 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 15273 15274 if (tg3_chip_rev(tp) == CHIPREV_5784_AX) 15275 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 15276 15277 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 15278 tg3_flag_set(tp, EEPROM_WRITE_PROT); 15279 if ((tp->pdev->subsystem_vendor == 15280 PCI_VENDOR_ID_ARIMA) && 15281 (tp->pdev->subsystem_device == 0x205a || 15282 tp->pdev->subsystem_device == 0x2063)) 15283 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15284 } else { 15285 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 15286 tg3_flag_set(tp, IS_NIC); 15287 } 15288 15289 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 15290 tg3_flag_set(tp, ENABLE_ASF); 15291 if (tg3_flag(tp, 5750_PLUS)) 15292 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 15293 } 15294 15295 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 15296 tg3_flag(tp, 5750_PLUS)) 15297 tg3_flag_set(tp, ENABLE_APE); 15298 15299 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 15300 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 15301 tg3_flag_clear(tp, WOL_CAP); 15302 15303 if (tg3_flag(tp, WOL_CAP) && 15304 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 15305 tg3_flag_set(tp, WOL_ENABLE); 15306 device_set_wakeup_enable(&tp->pdev->dev, true); 15307 } 15308 15309 if (cfg2 & (1 << 17)) 15310 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 15311 15312 /* serdes signal pre-emphasis in register 0x590 set by */ 15313 /* bootcode if bit 18 is set */ 15314 if (cfg2 & (1 << 18)) 15315 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 15316 15317 if ((tg3_flag(tp, 57765_PLUS) || 15318 (tg3_asic_rev(tp) == ASIC_REV_5784 && 15319 tg3_chip_rev(tp) != CHIPREV_5784_AX)) && 15320 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 15321 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 15322 15323 if (tg3_flag(tp, PCI_EXPRESS)) { 15324 u32 cfg3; 15325 15326 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 15327 if (tg3_asic_rev(tp) != ASIC_REV_5785 && 15328 !tg3_flag(tp, 57765_PLUS) && 15329 (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)) 15330 tg3_flag_set(tp, ASPM_WORKAROUND); 15331 if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID) 15332 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN; 15333 if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK) 15334 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK; 15335 } 15336 15337 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 15338 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 15339 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 15340 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 15341 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 15342 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 15343 15344 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV) 15345 tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV; 15346 } 15347 done: 15348 if (tg3_flag(tp, WOL_CAP)) 15349 device_set_wakeup_enable(&tp->pdev->dev, 15350 tg3_flag(tp, WOL_ENABLE)); 15351 else 15352 device_set_wakeup_capable(&tp->pdev->dev, false); 15353 } 15354 15355 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val) 15356 { 15357 int i, err; 15358 u32 val2, off = offset * 8; 15359 15360 err = tg3_nvram_lock(tp); 15361 if (err) 15362 return err; 15363 15364 tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE); 15365 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN | 15366 APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START); 15367 tg3_ape_read32(tp, TG3_APE_OTP_CTRL); 15368 udelay(10); 15369 15370 for (i = 0; i < 100; i++) { 15371 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS); 15372 if (val2 & APE_OTP_STATUS_CMD_DONE) { 15373 *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA); 15374 break; 15375 } 15376 udelay(10); 15377 } 15378 15379 tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0); 15380 15381 tg3_nvram_unlock(tp); 15382 if (val2 & APE_OTP_STATUS_CMD_DONE) 15383 return 0; 15384 15385 return -EBUSY; 15386 } 15387 15388 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 15389 { 15390 int i; 15391 u32 val; 15392 15393 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 15394 tw32(OTP_CTRL, cmd); 15395 15396 /* Wait for up to 1 ms for command to execute. */ 15397 for (i = 0; i < 100; i++) { 15398 val = tr32(OTP_STATUS); 15399 if (val & OTP_STATUS_CMD_DONE) 15400 break; 15401 udelay(10); 15402 } 15403 15404 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 15405 } 15406 15407 /* Read the gphy configuration from the OTP region of the chip. The gphy 15408 * configuration is a 32-bit value that straddles the alignment boundary. 15409 * We do two 32-bit reads and then shift and merge the results. 15410 */ 15411 static u32 tg3_read_otp_phycfg(struct tg3 *tp) 15412 { 15413 u32 bhalf_otp, thalf_otp; 15414 15415 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 15416 15417 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 15418 return 0; 15419 15420 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 15421 15422 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15423 return 0; 15424 15425 thalf_otp = tr32(OTP_READ_DATA); 15426 15427 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 15428 15429 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 15430 return 0; 15431 15432 bhalf_otp = tr32(OTP_READ_DATA); 15433 15434 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 15435 } 15436 15437 static void tg3_phy_init_link_config(struct tg3 *tp) 15438 { 15439 u32 adv = ADVERTISED_Autoneg; 15440 15441 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 15442 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV)) 15443 adv |= ADVERTISED_1000baseT_Half; 15444 adv |= ADVERTISED_1000baseT_Full; 15445 } 15446 15447 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 15448 adv |= ADVERTISED_100baseT_Half | 15449 ADVERTISED_100baseT_Full | 15450 ADVERTISED_10baseT_Half | 15451 ADVERTISED_10baseT_Full | 15452 ADVERTISED_TP; 15453 else 15454 adv |= ADVERTISED_FIBRE; 15455 15456 tp->link_config.advertising = adv; 15457 tp->link_config.speed = SPEED_UNKNOWN; 15458 tp->link_config.duplex = DUPLEX_UNKNOWN; 15459 tp->link_config.autoneg = AUTONEG_ENABLE; 15460 tp->link_config.active_speed = SPEED_UNKNOWN; 15461 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 15462 15463 tp->old_link = -1; 15464 } 15465 15466 static int tg3_phy_probe(struct tg3 *tp) 15467 { 15468 u32 hw_phy_id_1, hw_phy_id_2; 15469 u32 hw_phy_id, hw_phy_id_masked; 15470 int err; 15471 15472 /* flow control autonegotiation is default behavior */ 15473 tg3_flag_set(tp, PAUSE_AUTONEG); 15474 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 15475 15476 if (tg3_flag(tp, ENABLE_APE)) { 15477 switch (tp->pci_fn) { 15478 case 0: 15479 tp->phy_ape_lock = TG3_APE_LOCK_PHY0; 15480 break; 15481 case 1: 15482 tp->phy_ape_lock = TG3_APE_LOCK_PHY1; 15483 break; 15484 case 2: 15485 tp->phy_ape_lock = TG3_APE_LOCK_PHY2; 15486 break; 15487 case 3: 15488 tp->phy_ape_lock = TG3_APE_LOCK_PHY3; 15489 break; 15490 } 15491 } 15492 15493 if (!tg3_flag(tp, ENABLE_ASF) && 15494 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15495 !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 15496 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK | 15497 TG3_PHYFLG_KEEP_LINK_ON_PWRDN); 15498 15499 if (tg3_flag(tp, USE_PHYLIB)) 15500 return tg3_phy_init(tp); 15501 15502 /* Reading the PHY ID register can conflict with ASF 15503 * firmware access to the PHY hardware. 15504 */ 15505 err = 0; 15506 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 15507 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 15508 } else { 15509 /* Now read the physical PHY_ID from the chip and verify 15510 * that it is sane. If it doesn't look good, we fall back 15511 * to either the hard-coded table based PHY_ID and failing 15512 * that the value found in the eeprom area. 15513 */ 15514 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 15515 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 15516 15517 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 15518 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 15519 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 15520 15521 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 15522 } 15523 15524 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 15525 tp->phy_id = hw_phy_id; 15526 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 15527 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15528 else 15529 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 15530 } else { 15531 if (tp->phy_id != TG3_PHY_ID_INVALID) { 15532 /* Do nothing, phy ID already set up in 15533 * tg3_get_eeprom_hw_cfg(). 15534 */ 15535 } else { 15536 struct subsys_tbl_ent *p; 15537 15538 /* No eeprom signature? Try the hardcoded 15539 * subsys device table. 15540 */ 15541 p = tg3_lookup_by_subsys(tp); 15542 if (p) { 15543 tp->phy_id = p->phy_id; 15544 } else if (!tg3_flag(tp, IS_SSB_CORE)) { 15545 /* For now we saw the IDs 0xbc050cd0, 15546 * 0xbc050f80 and 0xbc050c30 on devices 15547 * connected to an BCM4785 and there are 15548 * probably more. Just assume that the phy is 15549 * supported when it is connected to a SSB core 15550 * for now. 15551 */ 15552 return -ENODEV; 15553 } 15554 15555 if (!tp->phy_id || 15556 tp->phy_id == TG3_PHY_ID_BCM8002) 15557 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 15558 } 15559 } 15560 15561 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15562 (tg3_asic_rev(tp) == ASIC_REV_5719 || 15563 tg3_asic_rev(tp) == ASIC_REV_5720 || 15564 tg3_asic_rev(tp) == ASIC_REV_57766 || 15565 tg3_asic_rev(tp) == ASIC_REV_5762 || 15566 (tg3_asic_rev(tp) == ASIC_REV_5717 && 15567 tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) || 15568 (tg3_asic_rev(tp) == ASIC_REV_57765 && 15569 tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) { 15570 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 15571 15572 tp->eee.supported = SUPPORTED_100baseT_Full | 15573 SUPPORTED_1000baseT_Full; 15574 tp->eee.advertised = ADVERTISED_100baseT_Full | 15575 ADVERTISED_1000baseT_Full; 15576 tp->eee.eee_enabled = 1; 15577 tp->eee.tx_lpi_enabled = 1; 15578 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US; 15579 } 15580 15581 tg3_phy_init_link_config(tp); 15582 15583 if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) && 15584 !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 15585 !tg3_flag(tp, ENABLE_APE) && 15586 !tg3_flag(tp, ENABLE_ASF)) { 15587 u32 bmsr, dummy; 15588 15589 tg3_readphy(tp, MII_BMSR, &bmsr); 15590 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 15591 (bmsr & BMSR_LSTATUS)) 15592 goto skip_phy_reset; 15593 15594 err = tg3_phy_reset(tp); 15595 if (err) 15596 return err; 15597 15598 tg3_phy_set_wirespeed(tp); 15599 15600 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 15601 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 15602 tp->link_config.flowctrl); 15603 15604 tg3_writephy(tp, MII_BMCR, 15605 BMCR_ANENABLE | BMCR_ANRESTART); 15606 } 15607 } 15608 15609 skip_phy_reset: 15610 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 15611 err = tg3_init_5401phy_dsp(tp); 15612 if (err) 15613 return err; 15614 15615 err = tg3_init_5401phy_dsp(tp); 15616 } 15617 15618 return err; 15619 } 15620 15621 static void tg3_read_vpd(struct tg3 *tp) 15622 { 15623 u8 *vpd_data; 15624 unsigned int block_end, rosize, len; 15625 u32 vpdlen; 15626 int j, i = 0; 15627 15628 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 15629 if (!vpd_data) 15630 goto out_no_vpd; 15631 15632 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA); 15633 if (i < 0) 15634 goto out_not_found; 15635 15636 rosize = pci_vpd_lrdt_size(&vpd_data[i]); 15637 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize; 15638 i += PCI_VPD_LRDT_TAG_SIZE; 15639 15640 if (block_end > vpdlen) 15641 goto out_not_found; 15642 15643 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 15644 PCI_VPD_RO_KEYWORD_MFR_ID); 15645 if (j > 0) { 15646 len = pci_vpd_info_field_size(&vpd_data[j]); 15647 15648 j += PCI_VPD_INFO_FLD_HDR_SIZE; 15649 if (j + len > block_end || len != 4 || 15650 memcmp(&vpd_data[j], "1028", 4)) 15651 goto partno; 15652 15653 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 15654 PCI_VPD_RO_KEYWORD_VENDOR0); 15655 if (j < 0) 15656 goto partno; 15657 15658 len = pci_vpd_info_field_size(&vpd_data[j]); 15659 15660 j += PCI_VPD_INFO_FLD_HDR_SIZE; 15661 if (j + len > block_end) 15662 goto partno; 15663 15664 if (len >= sizeof(tp->fw_ver)) 15665 len = sizeof(tp->fw_ver) - 1; 15666 memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); 15667 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, 15668 &vpd_data[j]); 15669 } 15670 15671 partno: 15672 i = pci_vpd_find_info_keyword(vpd_data, i, rosize, 15673 PCI_VPD_RO_KEYWORD_PARTNO); 15674 if (i < 0) 15675 goto out_not_found; 15676 15677 len = pci_vpd_info_field_size(&vpd_data[i]); 15678 15679 i += PCI_VPD_INFO_FLD_HDR_SIZE; 15680 if (len > TG3_BPN_SIZE || 15681 (len + i) > vpdlen) 15682 goto out_not_found; 15683 15684 memcpy(tp->board_part_number, &vpd_data[i], len); 15685 15686 out_not_found: 15687 kfree(vpd_data); 15688 if (tp->board_part_number[0]) 15689 return; 15690 15691 out_no_vpd: 15692 if (tg3_asic_rev(tp) == ASIC_REV_5717) { 15693 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15694 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C) 15695 strcpy(tp->board_part_number, "BCM5717"); 15696 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 15697 strcpy(tp->board_part_number, "BCM5718"); 15698 else 15699 goto nomatch; 15700 } else if (tg3_asic_rev(tp) == ASIC_REV_57780) { 15701 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 15702 strcpy(tp->board_part_number, "BCM57780"); 15703 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 15704 strcpy(tp->board_part_number, "BCM57760"); 15705 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 15706 strcpy(tp->board_part_number, "BCM57790"); 15707 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 15708 strcpy(tp->board_part_number, "BCM57788"); 15709 else 15710 goto nomatch; 15711 } else if (tg3_asic_rev(tp) == ASIC_REV_57765) { 15712 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 15713 strcpy(tp->board_part_number, "BCM57761"); 15714 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 15715 strcpy(tp->board_part_number, "BCM57765"); 15716 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 15717 strcpy(tp->board_part_number, "BCM57781"); 15718 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 15719 strcpy(tp->board_part_number, "BCM57785"); 15720 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 15721 strcpy(tp->board_part_number, "BCM57791"); 15722 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 15723 strcpy(tp->board_part_number, "BCM57795"); 15724 else 15725 goto nomatch; 15726 } else if (tg3_asic_rev(tp) == ASIC_REV_57766) { 15727 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 15728 strcpy(tp->board_part_number, "BCM57762"); 15729 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 15730 strcpy(tp->board_part_number, "BCM57766"); 15731 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 15732 strcpy(tp->board_part_number, "BCM57782"); 15733 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 15734 strcpy(tp->board_part_number, "BCM57786"); 15735 else 15736 goto nomatch; 15737 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) { 15738 strcpy(tp->board_part_number, "BCM95906"); 15739 } else { 15740 nomatch: 15741 strcpy(tp->board_part_number, "none"); 15742 } 15743 } 15744 15745 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 15746 { 15747 u32 val; 15748 15749 if (tg3_nvram_read(tp, offset, &val) || 15750 (val & 0xfc000000) != 0x0c000000 || 15751 tg3_nvram_read(tp, offset + 4, &val) || 15752 val != 0) 15753 return 0; 15754 15755 return 1; 15756 } 15757 15758 static void tg3_read_bc_ver(struct tg3 *tp) 15759 { 15760 u32 val, offset, start, ver_offset; 15761 int i, dst_off; 15762 bool newver = false; 15763 15764 if (tg3_nvram_read(tp, 0xc, &offset) || 15765 tg3_nvram_read(tp, 0x4, &start)) 15766 return; 15767 15768 offset = tg3_nvram_logical_addr(tp, offset); 15769 15770 if (tg3_nvram_read(tp, offset, &val)) 15771 return; 15772 15773 if ((val & 0xfc000000) == 0x0c000000) { 15774 if (tg3_nvram_read(tp, offset + 4, &val)) 15775 return; 15776 15777 if (val == 0) 15778 newver = true; 15779 } 15780 15781 dst_off = strlen(tp->fw_ver); 15782 15783 if (newver) { 15784 if (TG3_VER_SIZE - dst_off < 16 || 15785 tg3_nvram_read(tp, offset + 8, &ver_offset)) 15786 return; 15787 15788 offset = offset + ver_offset - start; 15789 for (i = 0; i < 16; i += 4) { 15790 __be32 v; 15791 if (tg3_nvram_read_be32(tp, offset + i, &v)) 15792 return; 15793 15794 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 15795 } 15796 } else { 15797 u32 major, minor; 15798 15799 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 15800 return; 15801 15802 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 15803 TG3_NVM_BCVER_MAJSFT; 15804 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 15805 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 15806 "v%d.%02d", major, minor); 15807 } 15808 } 15809 15810 static void tg3_read_hwsb_ver(struct tg3 *tp) 15811 { 15812 u32 val, major, minor; 15813 15814 /* Use native endian representation */ 15815 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 15816 return; 15817 15818 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 15819 TG3_NVM_HWSB_CFG1_MAJSFT; 15820 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 15821 TG3_NVM_HWSB_CFG1_MINSFT; 15822 15823 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 15824 } 15825 15826 static void tg3_read_sb_ver(struct tg3 *tp, u32 val) 15827 { 15828 u32 offset, major, minor, build; 15829 15830 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 15831 15832 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 15833 return; 15834 15835 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 15836 case TG3_EEPROM_SB_REVISION_0: 15837 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 15838 break; 15839 case TG3_EEPROM_SB_REVISION_2: 15840 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 15841 break; 15842 case TG3_EEPROM_SB_REVISION_3: 15843 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 15844 break; 15845 case TG3_EEPROM_SB_REVISION_4: 15846 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 15847 break; 15848 case TG3_EEPROM_SB_REVISION_5: 15849 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 15850 break; 15851 case TG3_EEPROM_SB_REVISION_6: 15852 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 15853 break; 15854 default: 15855 return; 15856 } 15857 15858 if (tg3_nvram_read(tp, offset, &val)) 15859 return; 15860 15861 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 15862 TG3_EEPROM_SB_EDH_BLD_SHFT; 15863 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 15864 TG3_EEPROM_SB_EDH_MAJ_SHFT; 15865 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 15866 15867 if (minor > 99 || build > 26) 15868 return; 15869 15870 offset = strlen(tp->fw_ver); 15871 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 15872 " v%d.%02d", major, minor); 15873 15874 if (build > 0) { 15875 offset = strlen(tp->fw_ver); 15876 if (offset < TG3_VER_SIZE - 1) 15877 tp->fw_ver[offset] = 'a' + build - 1; 15878 } 15879 } 15880 15881 static void tg3_read_mgmtfw_ver(struct tg3 *tp) 15882 { 15883 u32 val, offset, start; 15884 int i, vlen; 15885 15886 for (offset = TG3_NVM_DIR_START; 15887 offset < TG3_NVM_DIR_END; 15888 offset += TG3_NVM_DIRENT_SIZE) { 15889 if (tg3_nvram_read(tp, offset, &val)) 15890 return; 15891 15892 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 15893 break; 15894 } 15895 15896 if (offset == TG3_NVM_DIR_END) 15897 return; 15898 15899 if (!tg3_flag(tp, 5705_PLUS)) 15900 start = 0x08000000; 15901 else if (tg3_nvram_read(tp, offset - 4, &start)) 15902 return; 15903 15904 if (tg3_nvram_read(tp, offset + 4, &offset) || 15905 !tg3_fw_img_is_valid(tp, offset) || 15906 tg3_nvram_read(tp, offset + 8, &val)) 15907 return; 15908 15909 offset += val - start; 15910 15911 vlen = strlen(tp->fw_ver); 15912 15913 tp->fw_ver[vlen++] = ','; 15914 tp->fw_ver[vlen++] = ' '; 15915 15916 for (i = 0; i < 4; i++) { 15917 __be32 v; 15918 if (tg3_nvram_read_be32(tp, offset, &v)) 15919 return; 15920 15921 offset += sizeof(v); 15922 15923 if (vlen > TG3_VER_SIZE - sizeof(v)) { 15924 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 15925 break; 15926 } 15927 15928 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 15929 vlen += sizeof(v); 15930 } 15931 } 15932 15933 static void tg3_probe_ncsi(struct tg3 *tp) 15934 { 15935 u32 apedata; 15936 15937 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 15938 if (apedata != APE_SEG_SIG_MAGIC) 15939 return; 15940 15941 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 15942 if (!(apedata & APE_FW_STATUS_READY)) 15943 return; 15944 15945 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 15946 tg3_flag_set(tp, APE_HAS_NCSI); 15947 } 15948 15949 static void tg3_read_dash_ver(struct tg3 *tp) 15950 { 15951 int vlen; 15952 u32 apedata; 15953 char *fwtype; 15954 15955 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 15956 15957 if (tg3_flag(tp, APE_HAS_NCSI)) 15958 fwtype = "NCSI"; 15959 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725) 15960 fwtype = "SMASH"; 15961 else 15962 fwtype = "DASH"; 15963 15964 vlen = strlen(tp->fw_ver); 15965 15966 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 15967 fwtype, 15968 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 15969 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 15970 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 15971 (apedata & APE_FW_VERSION_BLDMSK)); 15972 } 15973 15974 static void tg3_read_otp_ver(struct tg3 *tp) 15975 { 15976 u32 val, val2; 15977 15978 if (tg3_asic_rev(tp) != ASIC_REV_5762) 15979 return; 15980 15981 if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) && 15982 !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) && 15983 TG3_OTP_MAGIC0_VALID(val)) { 15984 u64 val64 = (u64) val << 32 | val2; 15985 u32 ver = 0; 15986 int i, vlen; 15987 15988 for (i = 0; i < 7; i++) { 15989 if ((val64 & 0xff) == 0) 15990 break; 15991 ver = val64 & 0xff; 15992 val64 >>= 8; 15993 } 15994 vlen = strlen(tp->fw_ver); 15995 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver); 15996 } 15997 } 15998 15999 static void tg3_read_fw_ver(struct tg3 *tp) 16000 { 16001 u32 val; 16002 bool vpd_vers = false; 16003 16004 if (tp->fw_ver[0] != 0) 16005 vpd_vers = true; 16006 16007 if (tg3_flag(tp, NO_NVRAM)) { 16008 strcat(tp->fw_ver, "sb"); 16009 tg3_read_otp_ver(tp); 16010 return; 16011 } 16012 16013 if (tg3_nvram_read(tp, 0, &val)) 16014 return; 16015 16016 if (val == TG3_EEPROM_MAGIC) 16017 tg3_read_bc_ver(tp); 16018 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 16019 tg3_read_sb_ver(tp, val); 16020 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 16021 tg3_read_hwsb_ver(tp); 16022 16023 if (tg3_flag(tp, ENABLE_ASF)) { 16024 if (tg3_flag(tp, ENABLE_APE)) { 16025 tg3_probe_ncsi(tp); 16026 if (!vpd_vers) 16027 tg3_read_dash_ver(tp); 16028 } else if (!vpd_vers) { 16029 tg3_read_mgmtfw_ver(tp); 16030 } 16031 } 16032 16033 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 16034 } 16035 16036 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 16037 { 16038 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 16039 return TG3_RX_RET_MAX_SIZE_5717; 16040 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 16041 return TG3_RX_RET_MAX_SIZE_5700; 16042 else 16043 return TG3_RX_RET_MAX_SIZE_5705; 16044 } 16045 16046 static const struct pci_device_id tg3_write_reorder_chipsets[] = { 16047 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 16048 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 16049 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 16050 { }, 16051 }; 16052 16053 static struct pci_dev *tg3_find_peer(struct tg3 *tp) 16054 { 16055 struct pci_dev *peer; 16056 unsigned int func, devnr = tp->pdev->devfn & ~7; 16057 16058 for (func = 0; func < 8; func++) { 16059 peer = pci_get_slot(tp->pdev->bus, devnr | func); 16060 if (peer && peer != tp->pdev) 16061 break; 16062 pci_dev_put(peer); 16063 } 16064 /* 5704 can be configured in single-port mode, set peer to 16065 * tp->pdev in that case. 16066 */ 16067 if (!peer) { 16068 peer = tp->pdev; 16069 return peer; 16070 } 16071 16072 /* 16073 * We don't need to keep the refcount elevated; there's no way 16074 * to remove one half of this device without removing the other 16075 */ 16076 pci_dev_put(peer); 16077 16078 return peer; 16079 } 16080 16081 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 16082 { 16083 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 16084 if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) { 16085 u32 reg; 16086 16087 /* All devices that use the alternate 16088 * ASIC REV location have a CPMU. 16089 */ 16090 tg3_flag_set(tp, CPMU_PRESENT); 16091 16092 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 16093 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 16094 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 16095 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 16096 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 16097 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 16098 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 16099 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 16100 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 16101 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 16102 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) 16103 reg = TG3PCI_GEN2_PRODID_ASICREV; 16104 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 16105 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 16106 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 16107 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 16108 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 16109 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 16110 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 16111 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 16112 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 16113 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 16114 reg = TG3PCI_GEN15_PRODID_ASICREV; 16115 else 16116 reg = TG3PCI_PRODID_ASICREV; 16117 16118 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 16119 } 16120 16121 /* Wrong chip ID in 5752 A0. This code can be removed later 16122 * as A0 is not in production. 16123 */ 16124 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW) 16125 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 16126 16127 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0) 16128 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0; 16129 16130 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16131 tg3_asic_rev(tp) == ASIC_REV_5719 || 16132 tg3_asic_rev(tp) == ASIC_REV_5720) 16133 tg3_flag_set(tp, 5717_PLUS); 16134 16135 if (tg3_asic_rev(tp) == ASIC_REV_57765 || 16136 tg3_asic_rev(tp) == ASIC_REV_57766) 16137 tg3_flag_set(tp, 57765_CLASS); 16138 16139 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || 16140 tg3_asic_rev(tp) == ASIC_REV_5762) 16141 tg3_flag_set(tp, 57765_PLUS); 16142 16143 /* Intentionally exclude ASIC_REV_5906 */ 16144 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16145 tg3_asic_rev(tp) == ASIC_REV_5787 || 16146 tg3_asic_rev(tp) == ASIC_REV_5784 || 16147 tg3_asic_rev(tp) == ASIC_REV_5761 || 16148 tg3_asic_rev(tp) == ASIC_REV_5785 || 16149 tg3_asic_rev(tp) == ASIC_REV_57780 || 16150 tg3_flag(tp, 57765_PLUS)) 16151 tg3_flag_set(tp, 5755_PLUS); 16152 16153 if (tg3_asic_rev(tp) == ASIC_REV_5780 || 16154 tg3_asic_rev(tp) == ASIC_REV_5714) 16155 tg3_flag_set(tp, 5780_CLASS); 16156 16157 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16158 tg3_asic_rev(tp) == ASIC_REV_5752 || 16159 tg3_asic_rev(tp) == ASIC_REV_5906 || 16160 tg3_flag(tp, 5755_PLUS) || 16161 tg3_flag(tp, 5780_CLASS)) 16162 tg3_flag_set(tp, 5750_PLUS); 16163 16164 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 16165 tg3_flag(tp, 5750_PLUS)) 16166 tg3_flag_set(tp, 5705_PLUS); 16167 } 16168 16169 static bool tg3_10_100_only_device(struct tg3 *tp, 16170 const struct pci_device_id *ent) 16171 { 16172 u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK; 16173 16174 if ((tg3_asic_rev(tp) == ASIC_REV_5703 && 16175 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 16176 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 16177 return true; 16178 16179 if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) { 16180 if (tg3_asic_rev(tp) == ASIC_REV_5705) { 16181 if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100) 16182 return true; 16183 } else { 16184 return true; 16185 } 16186 } 16187 16188 return false; 16189 } 16190 16191 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) 16192 { 16193 u32 misc_ctrl_reg; 16194 u32 pci_state_reg, grc_misc_cfg; 16195 u32 val; 16196 u16 pci_cmd; 16197 int err; 16198 16199 /* Force memory write invalidate off. If we leave it on, 16200 * then on 5700_BX chips we have to enable a workaround. 16201 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 16202 * to match the cacheline size. The Broadcom driver have this 16203 * workaround but turns MWI off all the times so never uses 16204 * it. This seems to suggest that the workaround is insufficient. 16205 */ 16206 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16207 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 16208 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16209 16210 /* Important! -- Make sure register accesses are byteswapped 16211 * correctly. Also, for those chips that require it, make 16212 * sure that indirect register accesses are enabled before 16213 * the first operation. 16214 */ 16215 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16216 &misc_ctrl_reg); 16217 tp->misc_host_ctrl |= (misc_ctrl_reg & 16218 MISC_HOST_CTRL_CHIPREV); 16219 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16220 tp->misc_host_ctrl); 16221 16222 tg3_detect_asic_rev(tp, misc_ctrl_reg); 16223 16224 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 16225 * we need to disable memory and use config. cycles 16226 * only to access all registers. The 5702/03 chips 16227 * can mistakenly decode the special cycles from the 16228 * ICH chipsets as memory write cycles, causing corruption 16229 * of register and memory space. Only certain ICH bridges 16230 * will drive special cycles with non-zero data during the 16231 * address phase which can fall within the 5703's address 16232 * range. This is not an ICH bug as the PCI spec allows 16233 * non-zero address during special cycles. However, only 16234 * these ICH bridges are known to drive non-zero addresses 16235 * during special cycles. 16236 * 16237 * Since special cycles do not cross PCI bridges, we only 16238 * enable this workaround if the 5703 is on the secondary 16239 * bus of these ICH bridges. 16240 */ 16241 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) || 16242 (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) { 16243 static struct tg3_dev_id { 16244 u32 vendor; 16245 u32 device; 16246 u32 rev; 16247 } ich_chipsets[] = { 16248 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 16249 PCI_ANY_ID }, 16250 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 16251 PCI_ANY_ID }, 16252 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 16253 0xa }, 16254 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 16255 PCI_ANY_ID }, 16256 { }, 16257 }; 16258 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 16259 struct pci_dev *bridge = NULL; 16260 16261 while (pci_id->vendor != 0) { 16262 bridge = pci_get_device(pci_id->vendor, pci_id->device, 16263 bridge); 16264 if (!bridge) { 16265 pci_id++; 16266 continue; 16267 } 16268 if (pci_id->rev != PCI_ANY_ID) { 16269 if (bridge->revision > pci_id->rev) 16270 continue; 16271 } 16272 if (bridge->subordinate && 16273 (bridge->subordinate->number == 16274 tp->pdev->bus->number)) { 16275 tg3_flag_set(tp, ICH_WORKAROUND); 16276 pci_dev_put(bridge); 16277 break; 16278 } 16279 } 16280 } 16281 16282 if (tg3_asic_rev(tp) == ASIC_REV_5701) { 16283 static struct tg3_dev_id { 16284 u32 vendor; 16285 u32 device; 16286 } bridge_chipsets[] = { 16287 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 16288 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 16289 { }, 16290 }; 16291 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 16292 struct pci_dev *bridge = NULL; 16293 16294 while (pci_id->vendor != 0) { 16295 bridge = pci_get_device(pci_id->vendor, 16296 pci_id->device, 16297 bridge); 16298 if (!bridge) { 16299 pci_id++; 16300 continue; 16301 } 16302 if (bridge->subordinate && 16303 (bridge->subordinate->number <= 16304 tp->pdev->bus->number) && 16305 (bridge->subordinate->busn_res.end >= 16306 tp->pdev->bus->number)) { 16307 tg3_flag_set(tp, 5701_DMA_BUG); 16308 pci_dev_put(bridge); 16309 break; 16310 } 16311 } 16312 } 16313 16314 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 16315 * DMA addresses > 40-bit. This bridge may have other additional 16316 * 57xx devices behind it in some 4-port NIC designs for example. 16317 * Any tg3 device found behind the bridge will also need the 40-bit 16318 * DMA workaround. 16319 */ 16320 if (tg3_flag(tp, 5780_CLASS)) { 16321 tg3_flag_set(tp, 40BIT_DMA_BUG); 16322 tp->msi_cap = tp->pdev->msi_cap; 16323 } else { 16324 struct pci_dev *bridge = NULL; 16325 16326 do { 16327 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 16328 PCI_DEVICE_ID_SERVERWORKS_EPB, 16329 bridge); 16330 if (bridge && bridge->subordinate && 16331 (bridge->subordinate->number <= 16332 tp->pdev->bus->number) && 16333 (bridge->subordinate->busn_res.end >= 16334 tp->pdev->bus->number)) { 16335 tg3_flag_set(tp, 40BIT_DMA_BUG); 16336 pci_dev_put(bridge); 16337 break; 16338 } 16339 } while (bridge); 16340 } 16341 16342 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16343 tg3_asic_rev(tp) == ASIC_REV_5714) 16344 tp->pdev_peer = tg3_find_peer(tp); 16345 16346 /* Determine TSO capabilities */ 16347 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0) 16348 ; /* Do nothing. HW bug. */ 16349 else if (tg3_flag(tp, 57765_PLUS)) 16350 tg3_flag_set(tp, HW_TSO_3); 16351 else if (tg3_flag(tp, 5755_PLUS) || 16352 tg3_asic_rev(tp) == ASIC_REV_5906) 16353 tg3_flag_set(tp, HW_TSO_2); 16354 else if (tg3_flag(tp, 5750_PLUS)) { 16355 tg3_flag_set(tp, HW_TSO_1); 16356 tg3_flag_set(tp, TSO_BUG); 16357 if (tg3_asic_rev(tp) == ASIC_REV_5750 && 16358 tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2) 16359 tg3_flag_clear(tp, TSO_BUG); 16360 } else if (tg3_asic_rev(tp) != ASIC_REV_5700 && 16361 tg3_asic_rev(tp) != ASIC_REV_5701 && 16362 tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) { 16363 tg3_flag_set(tp, FW_TSO); 16364 tg3_flag_set(tp, TSO_BUG); 16365 if (tg3_asic_rev(tp) == ASIC_REV_5705) 16366 tp->fw_needed = FIRMWARE_TG3TSO5; 16367 else 16368 tp->fw_needed = FIRMWARE_TG3TSO; 16369 } 16370 16371 /* Selectively allow TSO based on operating conditions */ 16372 if (tg3_flag(tp, HW_TSO_1) || 16373 tg3_flag(tp, HW_TSO_2) || 16374 tg3_flag(tp, HW_TSO_3) || 16375 tg3_flag(tp, FW_TSO)) { 16376 /* For firmware TSO, assume ASF is disabled. 16377 * We'll disable TSO later if we discover ASF 16378 * is enabled in tg3_get_eeprom_hw_cfg(). 16379 */ 16380 tg3_flag_set(tp, TSO_CAPABLE); 16381 } else { 16382 tg3_flag_clear(tp, TSO_CAPABLE); 16383 tg3_flag_clear(tp, TSO_BUG); 16384 tp->fw_needed = NULL; 16385 } 16386 16387 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) 16388 tp->fw_needed = FIRMWARE_TG3; 16389 16390 if (tg3_asic_rev(tp) == ASIC_REV_57766) 16391 tp->fw_needed = FIRMWARE_TG357766; 16392 16393 tp->irq_max = 1; 16394 16395 if (tg3_flag(tp, 5750_PLUS)) { 16396 tg3_flag_set(tp, SUPPORT_MSI); 16397 if (tg3_chip_rev(tp) == CHIPREV_5750_AX || 16398 tg3_chip_rev(tp) == CHIPREV_5750_BX || 16399 (tg3_asic_rev(tp) == ASIC_REV_5714 && 16400 tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 && 16401 tp->pdev_peer == tp->pdev)) 16402 tg3_flag_clear(tp, SUPPORT_MSI); 16403 16404 if (tg3_flag(tp, 5755_PLUS) || 16405 tg3_asic_rev(tp) == ASIC_REV_5906) { 16406 tg3_flag_set(tp, 1SHOT_MSI); 16407 } 16408 16409 if (tg3_flag(tp, 57765_PLUS)) { 16410 tg3_flag_set(tp, SUPPORT_MSIX); 16411 tp->irq_max = TG3_IRQ_MAX_VECS; 16412 } 16413 } 16414 16415 tp->txq_max = 1; 16416 tp->rxq_max = 1; 16417 if (tp->irq_max > 1) { 16418 tp->rxq_max = TG3_RSS_MAX_NUM_QS; 16419 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS); 16420 16421 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 16422 tg3_asic_rev(tp) == ASIC_REV_5720) 16423 tp->txq_max = tp->irq_max - 1; 16424 } 16425 16426 if (tg3_flag(tp, 5755_PLUS) || 16427 tg3_asic_rev(tp) == ASIC_REV_5906) 16428 tg3_flag_set(tp, SHORT_DMA_BUG); 16429 16430 if (tg3_asic_rev(tp) == ASIC_REV_5719) 16431 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 16432 16433 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16434 tg3_asic_rev(tp) == ASIC_REV_5719 || 16435 tg3_asic_rev(tp) == ASIC_REV_5720 || 16436 tg3_asic_rev(tp) == ASIC_REV_5762) 16437 tg3_flag_set(tp, LRG_PROD_RING_CAP); 16438 16439 if (tg3_flag(tp, 57765_PLUS) && 16440 tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0) 16441 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 16442 16443 if (!tg3_flag(tp, 5705_PLUS) || 16444 tg3_flag(tp, 5780_CLASS) || 16445 tg3_flag(tp, USE_JUMBO_BDFLAG)) 16446 tg3_flag_set(tp, JUMBO_CAPABLE); 16447 16448 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16449 &pci_state_reg); 16450 16451 if (pci_is_pcie(tp->pdev)) { 16452 u16 lnkctl; 16453 16454 tg3_flag_set(tp, PCI_EXPRESS); 16455 16456 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl); 16457 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 16458 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16459 tg3_flag_clear(tp, HW_TSO_2); 16460 tg3_flag_clear(tp, TSO_CAPABLE); 16461 } 16462 if (tg3_asic_rev(tp) == ASIC_REV_5784 || 16463 tg3_asic_rev(tp) == ASIC_REV_5761 || 16464 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 || 16465 tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1) 16466 tg3_flag_set(tp, CLKREQ_BUG); 16467 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) { 16468 tg3_flag_set(tp, L1PLLPD_EN); 16469 } 16470 } else if (tg3_asic_rev(tp) == ASIC_REV_5785) { 16471 /* BCM5785 devices are effectively PCIe devices, and should 16472 * follow PCIe codepaths, but do not have a PCIe capabilities 16473 * section. 16474 */ 16475 tg3_flag_set(tp, PCI_EXPRESS); 16476 } else if (!tg3_flag(tp, 5705_PLUS) || 16477 tg3_flag(tp, 5780_CLASS)) { 16478 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 16479 if (!tp->pcix_cap) { 16480 dev_err(&tp->pdev->dev, 16481 "Cannot find PCI-X capability, aborting\n"); 16482 return -EIO; 16483 } 16484 16485 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 16486 tg3_flag_set(tp, PCIX_MODE); 16487 } 16488 16489 /* If we have an AMD 762 or VIA K8T800 chipset, write 16490 * reordering to the mailbox registers done by the host 16491 * controller can cause major troubles. We read back from 16492 * every mailbox register write to force the writes to be 16493 * posted to the chip in order. 16494 */ 16495 if (pci_dev_present(tg3_write_reorder_chipsets) && 16496 !tg3_flag(tp, PCI_EXPRESS)) 16497 tg3_flag_set(tp, MBOX_WRITE_REORDER); 16498 16499 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 16500 &tp->pci_cacheline_sz); 16501 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16502 &tp->pci_lat_timer); 16503 if (tg3_asic_rev(tp) == ASIC_REV_5703 && 16504 tp->pci_lat_timer < 64) { 16505 tp->pci_lat_timer = 64; 16506 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 16507 tp->pci_lat_timer); 16508 } 16509 16510 /* Important! -- It is critical that the PCI-X hw workaround 16511 * situation is decided before the first MMIO register access. 16512 */ 16513 if (tg3_chip_rev(tp) == CHIPREV_5700_BX) { 16514 /* 5700 BX chips need to have their TX producer index 16515 * mailboxes written twice to workaround a bug. 16516 */ 16517 tg3_flag_set(tp, TXD_MBOX_HWBUG); 16518 16519 /* If we are in PCI-X mode, enable register write workaround. 16520 * 16521 * The workaround is to use indirect register accesses 16522 * for all chip writes not to mailbox registers. 16523 */ 16524 if (tg3_flag(tp, PCIX_MODE)) { 16525 u32 pm_reg; 16526 16527 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16528 16529 /* The chip can have it's power management PCI config 16530 * space registers clobbered due to this bug. 16531 * So explicitly force the chip into D0 here. 16532 */ 16533 pci_read_config_dword(tp->pdev, 16534 tp->pdev->pm_cap + PCI_PM_CTRL, 16535 &pm_reg); 16536 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 16537 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 16538 pci_write_config_dword(tp->pdev, 16539 tp->pdev->pm_cap + PCI_PM_CTRL, 16540 pm_reg); 16541 16542 /* Also, force SERR#/PERR# in PCI command. */ 16543 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16544 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 16545 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16546 } 16547 } 16548 16549 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 16550 tg3_flag_set(tp, PCI_HIGH_SPEED); 16551 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 16552 tg3_flag_set(tp, PCI_32BIT); 16553 16554 /* Chip-specific fixup from Broadcom driver */ 16555 if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) && 16556 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 16557 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 16558 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 16559 } 16560 16561 /* Default fast path register access methods */ 16562 tp->read32 = tg3_read32; 16563 tp->write32 = tg3_write32; 16564 tp->read32_mbox = tg3_read32; 16565 tp->write32_mbox = tg3_write32; 16566 tp->write32_tx_mbox = tg3_write32; 16567 tp->write32_rx_mbox = tg3_write32; 16568 16569 /* Various workaround register access methods */ 16570 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 16571 tp->write32 = tg3_write_indirect_reg32; 16572 else if (tg3_asic_rev(tp) == ASIC_REV_5701 || 16573 (tg3_flag(tp, PCI_EXPRESS) && 16574 tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) { 16575 /* 16576 * Back to back register writes can cause problems on these 16577 * chips, the workaround is to read back all reg writes 16578 * except those to mailbox regs. 16579 * 16580 * See tg3_write_indirect_reg32(). 16581 */ 16582 tp->write32 = tg3_write_flush_reg32; 16583 } 16584 16585 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 16586 tp->write32_tx_mbox = tg3_write32_tx_mbox; 16587 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 16588 tp->write32_rx_mbox = tg3_write_flush_reg32; 16589 } 16590 16591 if (tg3_flag(tp, ICH_WORKAROUND)) { 16592 tp->read32 = tg3_read_indirect_reg32; 16593 tp->write32 = tg3_write_indirect_reg32; 16594 tp->read32_mbox = tg3_read_indirect_mbox; 16595 tp->write32_mbox = tg3_write_indirect_mbox; 16596 tp->write32_tx_mbox = tg3_write_indirect_mbox; 16597 tp->write32_rx_mbox = tg3_write_indirect_mbox; 16598 16599 iounmap(tp->regs); 16600 tp->regs = NULL; 16601 16602 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 16603 pci_cmd &= ~PCI_COMMAND_MEMORY; 16604 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 16605 } 16606 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 16607 tp->read32_mbox = tg3_read32_mbox_5906; 16608 tp->write32_mbox = tg3_write32_mbox_5906; 16609 tp->write32_tx_mbox = tg3_write32_mbox_5906; 16610 tp->write32_rx_mbox = tg3_write32_mbox_5906; 16611 } 16612 16613 if (tp->write32 == tg3_write_indirect_reg32 || 16614 (tg3_flag(tp, PCIX_MODE) && 16615 (tg3_asic_rev(tp) == ASIC_REV_5700 || 16616 tg3_asic_rev(tp) == ASIC_REV_5701))) 16617 tg3_flag_set(tp, SRAM_USE_CONFIG); 16618 16619 /* The memory arbiter has to be enabled in order for SRAM accesses 16620 * to succeed. Normally on powerup the tg3 chip firmware will make 16621 * sure it is enabled, but other entities such as system netboot 16622 * code might disable it. 16623 */ 16624 val = tr32(MEMARB_MODE); 16625 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 16626 16627 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 16628 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 16629 tg3_flag(tp, 5780_CLASS)) { 16630 if (tg3_flag(tp, PCIX_MODE)) { 16631 pci_read_config_dword(tp->pdev, 16632 tp->pcix_cap + PCI_X_STATUS, 16633 &val); 16634 tp->pci_fn = val & 0x7; 16635 } 16636 } else if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16637 tg3_asic_rev(tp) == ASIC_REV_5719 || 16638 tg3_asic_rev(tp) == ASIC_REV_5720) { 16639 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 16640 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG) 16641 val = tr32(TG3_CPMU_STATUS); 16642 16643 if (tg3_asic_rev(tp) == ASIC_REV_5717) 16644 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0; 16645 else 16646 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 16647 TG3_CPMU_STATUS_FSHFT_5719; 16648 } 16649 16650 if (tg3_flag(tp, FLUSH_POSTED_WRITES)) { 16651 tp->write32_tx_mbox = tg3_write_flush_reg32; 16652 tp->write32_rx_mbox = tg3_write_flush_reg32; 16653 } 16654 16655 /* Get eeprom hw config before calling tg3_set_power_state(). 16656 * In particular, the TG3_FLAG_IS_NIC flag must be 16657 * determined before calling tg3_set_power_state() so that 16658 * we know whether or not to switch out of Vaux power. 16659 * When the flag is set, it means that GPIO1 is used for eeprom 16660 * write protect and also implies that it is a LOM where GPIOs 16661 * are not used to switch power. 16662 */ 16663 tg3_get_eeprom_hw_cfg(tp); 16664 16665 if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) { 16666 tg3_flag_clear(tp, TSO_CAPABLE); 16667 tg3_flag_clear(tp, TSO_BUG); 16668 tp->fw_needed = NULL; 16669 } 16670 16671 if (tg3_flag(tp, ENABLE_APE)) { 16672 /* Allow reads and writes to the 16673 * APE register and memory space. 16674 */ 16675 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 16676 PCISTATE_ALLOW_APE_SHMEM_WR | 16677 PCISTATE_ALLOW_APE_PSPACE_WR; 16678 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 16679 pci_state_reg); 16680 16681 tg3_ape_lock_init(tp); 16682 tp->ape_hb_interval = 16683 msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC); 16684 } 16685 16686 /* Set up tp->grc_local_ctrl before calling 16687 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 16688 * will bring 5700's external PHY out of reset. 16689 * It is also used as eeprom write protect on LOMs. 16690 */ 16691 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 16692 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16693 tg3_flag(tp, EEPROM_WRITE_PROT)) 16694 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 16695 GRC_LCLCTRL_GPIO_OUTPUT1); 16696 /* Unused GPIO3 must be driven as output on 5752 because there 16697 * are no pull-up resistors on unused GPIO pins. 16698 */ 16699 else if (tg3_asic_rev(tp) == ASIC_REV_5752) 16700 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 16701 16702 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16703 tg3_asic_rev(tp) == ASIC_REV_57780 || 16704 tg3_flag(tp, 57765_CLASS)) 16705 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16706 16707 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 16708 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 16709 /* Turn off the debug UART. */ 16710 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 16711 if (tg3_flag(tp, IS_NIC)) 16712 /* Keep VMain power. */ 16713 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 16714 GRC_LCLCTRL_GPIO_OUTPUT0; 16715 } 16716 16717 if (tg3_asic_rev(tp) == ASIC_REV_5762) 16718 tp->grc_local_ctrl |= 16719 tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL; 16720 16721 /* Switch out of Vaux if it is a NIC */ 16722 tg3_pwrsrc_switch_to_vmain(tp); 16723 16724 /* Derive initial jumbo mode from MTU assigned in 16725 * ether_setup() via the alloc_etherdev() call 16726 */ 16727 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 16728 tg3_flag_set(tp, JUMBO_RING_ENABLE); 16729 16730 /* Determine WakeOnLan speed to use. */ 16731 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16732 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16733 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16734 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) { 16735 tg3_flag_clear(tp, WOL_SPEED_100MB); 16736 } else { 16737 tg3_flag_set(tp, WOL_SPEED_100MB); 16738 } 16739 16740 if (tg3_asic_rev(tp) == ASIC_REV_5906) 16741 tp->phy_flags |= TG3_PHYFLG_IS_FET; 16742 16743 /* A few boards don't want Ethernet@WireSpeed phy feature */ 16744 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 16745 (tg3_asic_rev(tp) == ASIC_REV_5705 && 16746 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) && 16747 (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) || 16748 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 16749 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 16750 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 16751 16752 if (tg3_chip_rev(tp) == CHIPREV_5703_AX || 16753 tg3_chip_rev(tp) == CHIPREV_5704_AX) 16754 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 16755 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) 16756 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 16757 16758 if (tg3_flag(tp, 5705_PLUS) && 16759 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 16760 tg3_asic_rev(tp) != ASIC_REV_5785 && 16761 tg3_asic_rev(tp) != ASIC_REV_57780 && 16762 !tg3_flag(tp, 57765_PLUS)) { 16763 if (tg3_asic_rev(tp) == ASIC_REV_5755 || 16764 tg3_asic_rev(tp) == ASIC_REV_5787 || 16765 tg3_asic_rev(tp) == ASIC_REV_5784 || 16766 tg3_asic_rev(tp) == ASIC_REV_5761) { 16767 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 16768 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 16769 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 16770 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 16771 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 16772 } else 16773 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 16774 } 16775 16776 if (tg3_asic_rev(tp) == ASIC_REV_5784 && 16777 tg3_chip_rev(tp) != CHIPREV_5784_AX) { 16778 tp->phy_otp = tg3_read_otp_phycfg(tp); 16779 if (tp->phy_otp == 0) 16780 tp->phy_otp = TG3_OTP_DEFAULT; 16781 } 16782 16783 if (tg3_flag(tp, CPMU_PRESENT)) 16784 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 16785 else 16786 tp->mi_mode = MAC_MI_MODE_BASE; 16787 16788 tp->coalesce_mode = 0; 16789 if (tg3_chip_rev(tp) != CHIPREV_5700_AX && 16790 tg3_chip_rev(tp) != CHIPREV_5700_BX) 16791 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 16792 16793 /* Set these bits to enable statistics workaround. */ 16794 if (tg3_asic_rev(tp) == ASIC_REV_5717 || 16795 tg3_asic_rev(tp) == ASIC_REV_5762 || 16796 tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 || 16797 tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) { 16798 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 16799 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 16800 } 16801 16802 if (tg3_asic_rev(tp) == ASIC_REV_5785 || 16803 tg3_asic_rev(tp) == ASIC_REV_57780) 16804 tg3_flag_set(tp, USE_PHYLIB); 16805 16806 err = tg3_mdio_init(tp); 16807 if (err) 16808 return err; 16809 16810 /* Initialize data/descriptor byte/word swapping. */ 16811 val = tr32(GRC_MODE); 16812 if (tg3_asic_rev(tp) == ASIC_REV_5720 || 16813 tg3_asic_rev(tp) == ASIC_REV_5762) 16814 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 16815 GRC_MODE_WORD_SWAP_B2HRX_DATA | 16816 GRC_MODE_B2HRX_ENABLE | 16817 GRC_MODE_HTX2B_ENABLE | 16818 GRC_MODE_HOST_STACKUP); 16819 else 16820 val &= GRC_MODE_HOST_STACKUP; 16821 16822 tw32(GRC_MODE, val | tp->grc_mode); 16823 16824 tg3_switch_clocks(tp); 16825 16826 /* Clear this out for sanity. */ 16827 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 16828 16829 /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */ 16830 tw32(TG3PCI_REG_BASE_ADDR, 0); 16831 16832 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 16833 &pci_state_reg); 16834 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 16835 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 16836 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 || 16837 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 || 16838 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 || 16839 tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) { 16840 void __iomem *sram_base; 16841 16842 /* Write some dummy words into the SRAM status block 16843 * area, see if it reads back correctly. If the return 16844 * value is bad, force enable the PCIX workaround. 16845 */ 16846 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 16847 16848 writel(0x00000000, sram_base); 16849 writel(0x00000000, sram_base + 4); 16850 writel(0xffffffff, sram_base + 4); 16851 if (readl(sram_base) != 0x00000000) 16852 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 16853 } 16854 } 16855 16856 udelay(50); 16857 tg3_nvram_init(tp); 16858 16859 /* If the device has an NVRAM, no need to load patch firmware */ 16860 if (tg3_asic_rev(tp) == ASIC_REV_57766 && 16861 !tg3_flag(tp, NO_NVRAM)) 16862 tp->fw_needed = NULL; 16863 16864 grc_misc_cfg = tr32(GRC_MISC_CFG); 16865 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 16866 16867 if (tg3_asic_rev(tp) == ASIC_REV_5705 && 16868 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 16869 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 16870 tg3_flag_set(tp, IS_5788); 16871 16872 if (!tg3_flag(tp, IS_5788) && 16873 tg3_asic_rev(tp) != ASIC_REV_5700) 16874 tg3_flag_set(tp, TAGGED_STATUS); 16875 if (tg3_flag(tp, TAGGED_STATUS)) { 16876 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 16877 HOSTCC_MODE_CLRTICK_TXBD); 16878 16879 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 16880 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 16881 tp->misc_host_ctrl); 16882 } 16883 16884 /* Preserve the APE MAC_MODE bits */ 16885 if (tg3_flag(tp, ENABLE_APE)) 16886 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 16887 else 16888 tp->mac_mode = 0; 16889 16890 if (tg3_10_100_only_device(tp, ent)) 16891 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 16892 16893 err = tg3_phy_probe(tp); 16894 if (err) { 16895 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 16896 /* ... but do not return immediately ... */ 16897 tg3_mdio_fini(tp); 16898 } 16899 16900 tg3_read_vpd(tp); 16901 tg3_read_fw_ver(tp); 16902 16903 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 16904 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16905 } else { 16906 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16907 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16908 else 16909 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 16910 } 16911 16912 /* 5700 {AX,BX} chips have a broken status block link 16913 * change bit implementation, so we must use the 16914 * status register in those cases. 16915 */ 16916 if (tg3_asic_rev(tp) == ASIC_REV_5700) 16917 tg3_flag_set(tp, USE_LINKCHG_REG); 16918 else 16919 tg3_flag_clear(tp, USE_LINKCHG_REG); 16920 16921 /* The led_ctrl is set during tg3_phy_probe, here we might 16922 * have to force the link status polling mechanism based 16923 * upon subsystem IDs. 16924 */ 16925 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 16926 tg3_asic_rev(tp) == ASIC_REV_5701 && 16927 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 16928 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 16929 tg3_flag_set(tp, USE_LINKCHG_REG); 16930 } 16931 16932 /* For all SERDES we poll the MAC status register. */ 16933 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 16934 tg3_flag_set(tp, POLL_SERDES); 16935 else 16936 tg3_flag_clear(tp, POLL_SERDES); 16937 16938 if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF)) 16939 tg3_flag_set(tp, POLL_CPMU_LINK); 16940 16941 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 16942 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 16943 if (tg3_asic_rev(tp) == ASIC_REV_5701 && 16944 tg3_flag(tp, PCIX_MODE)) { 16945 tp->rx_offset = NET_SKB_PAD; 16946 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 16947 tp->rx_copy_thresh = ~(u16)0; 16948 #endif 16949 } 16950 16951 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 16952 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 16953 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 16954 16955 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 16956 16957 /* Increment the rx prod index on the rx std ring by at most 16958 * 8 for these chips to workaround hw errata. 16959 */ 16960 if (tg3_asic_rev(tp) == ASIC_REV_5750 || 16961 tg3_asic_rev(tp) == ASIC_REV_5752 || 16962 tg3_asic_rev(tp) == ASIC_REV_5755) 16963 tp->rx_std_max_post = 8; 16964 16965 if (tg3_flag(tp, ASPM_WORKAROUND)) 16966 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 16967 PCIE_PWR_MGMT_L1_THRESH_MSK; 16968 16969 return err; 16970 } 16971 16972 #ifdef CONFIG_SPARC 16973 static int tg3_get_macaddr_sparc(struct tg3 *tp) 16974 { 16975 struct net_device *dev = tp->dev; 16976 struct pci_dev *pdev = tp->pdev; 16977 struct device_node *dp = pci_device_to_OF_node(pdev); 16978 const unsigned char *addr; 16979 int len; 16980 16981 addr = of_get_property(dp, "local-mac-address", &len); 16982 if (addr && len == ETH_ALEN) { 16983 memcpy(dev->dev_addr, addr, ETH_ALEN); 16984 return 0; 16985 } 16986 return -ENODEV; 16987 } 16988 16989 static int tg3_get_default_macaddr_sparc(struct tg3 *tp) 16990 { 16991 struct net_device *dev = tp->dev; 16992 16993 memcpy(dev->dev_addr, idprom->id_ethaddr, ETH_ALEN); 16994 return 0; 16995 } 16996 #endif 16997 16998 static int tg3_get_device_address(struct tg3 *tp) 16999 { 17000 struct net_device *dev = tp->dev; 17001 u32 hi, lo, mac_offset; 17002 int addr_ok = 0; 17003 int err; 17004 17005 #ifdef CONFIG_SPARC 17006 if (!tg3_get_macaddr_sparc(tp)) 17007 return 0; 17008 #endif 17009 17010 if (tg3_flag(tp, IS_SSB_CORE)) { 17011 err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]); 17012 if (!err && is_valid_ether_addr(&dev->dev_addr[0])) 17013 return 0; 17014 } 17015 17016 mac_offset = 0x7c; 17017 if (tg3_asic_rev(tp) == ASIC_REV_5704 || 17018 tg3_flag(tp, 5780_CLASS)) { 17019 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 17020 mac_offset = 0xcc; 17021 if (tg3_nvram_lock(tp)) 17022 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 17023 else 17024 tg3_nvram_unlock(tp); 17025 } else if (tg3_flag(tp, 5717_PLUS)) { 17026 if (tp->pci_fn & 1) 17027 mac_offset = 0xcc; 17028 if (tp->pci_fn > 1) 17029 mac_offset += 0x18c; 17030 } else if (tg3_asic_rev(tp) == ASIC_REV_5906) 17031 mac_offset = 0x10; 17032 17033 /* First try to get it from MAC address mailbox. */ 17034 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 17035 if ((hi >> 16) == 0x484b) { 17036 dev->dev_addr[0] = (hi >> 8) & 0xff; 17037 dev->dev_addr[1] = (hi >> 0) & 0xff; 17038 17039 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 17040 dev->dev_addr[2] = (lo >> 24) & 0xff; 17041 dev->dev_addr[3] = (lo >> 16) & 0xff; 17042 dev->dev_addr[4] = (lo >> 8) & 0xff; 17043 dev->dev_addr[5] = (lo >> 0) & 0xff; 17044 17045 /* Some old bootcode may report a 0 MAC address in SRAM */ 17046 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]); 17047 } 17048 if (!addr_ok) { 17049 /* Next, try NVRAM. */ 17050 if (!tg3_flag(tp, NO_NVRAM) && 17051 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 17052 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 17053 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2); 17054 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo)); 17055 } 17056 /* Finally just fetch it out of the MAC control regs. */ 17057 else { 17058 hi = tr32(MAC_ADDR_0_HIGH); 17059 lo = tr32(MAC_ADDR_0_LOW); 17060 17061 dev->dev_addr[5] = lo & 0xff; 17062 dev->dev_addr[4] = (lo >> 8) & 0xff; 17063 dev->dev_addr[3] = (lo >> 16) & 0xff; 17064 dev->dev_addr[2] = (lo >> 24) & 0xff; 17065 dev->dev_addr[1] = hi & 0xff; 17066 dev->dev_addr[0] = (hi >> 8) & 0xff; 17067 } 17068 } 17069 17070 if (!is_valid_ether_addr(&dev->dev_addr[0])) { 17071 #ifdef CONFIG_SPARC 17072 if (!tg3_get_default_macaddr_sparc(tp)) 17073 return 0; 17074 #endif 17075 return -EINVAL; 17076 } 17077 return 0; 17078 } 17079 17080 #define BOUNDARY_SINGLE_CACHELINE 1 17081 #define BOUNDARY_MULTI_CACHELINE 2 17082 17083 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 17084 { 17085 int cacheline_size; 17086 u8 byte; 17087 int goal; 17088 17089 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 17090 if (byte == 0) 17091 cacheline_size = 1024; 17092 else 17093 cacheline_size = (int) byte * 4; 17094 17095 /* On 5703 and later chips, the boundary bits have no 17096 * effect. 17097 */ 17098 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17099 tg3_asic_rev(tp) != ASIC_REV_5701 && 17100 !tg3_flag(tp, PCI_EXPRESS)) 17101 goto out; 17102 17103 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 17104 goal = BOUNDARY_MULTI_CACHELINE; 17105 #else 17106 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 17107 goal = BOUNDARY_SINGLE_CACHELINE; 17108 #else 17109 goal = 0; 17110 #endif 17111 #endif 17112 17113 if (tg3_flag(tp, 57765_PLUS)) { 17114 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 17115 goto out; 17116 } 17117 17118 if (!goal) 17119 goto out; 17120 17121 /* PCI controllers on most RISC systems tend to disconnect 17122 * when a device tries to burst across a cache-line boundary. 17123 * Therefore, letting tg3 do so just wastes PCI bandwidth. 17124 * 17125 * Unfortunately, for PCI-E there are only limited 17126 * write-side controls for this, and thus for reads 17127 * we will still get the disconnects. We'll also waste 17128 * these PCI cycles for both read and write for chips 17129 * other than 5700 and 5701 which do not implement the 17130 * boundary bits. 17131 */ 17132 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 17133 switch (cacheline_size) { 17134 case 16: 17135 case 32: 17136 case 64: 17137 case 128: 17138 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17139 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 17140 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 17141 } else { 17142 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17143 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17144 } 17145 break; 17146 17147 case 256: 17148 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 17149 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 17150 break; 17151 17152 default: 17153 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 17154 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 17155 break; 17156 } 17157 } else if (tg3_flag(tp, PCI_EXPRESS)) { 17158 switch (cacheline_size) { 17159 case 16: 17160 case 32: 17161 case 64: 17162 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17163 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17164 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 17165 break; 17166 } 17167 /* fallthrough */ 17168 case 128: 17169 default: 17170 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 17171 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 17172 break; 17173 } 17174 } else { 17175 switch (cacheline_size) { 17176 case 16: 17177 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17178 val |= (DMA_RWCTRL_READ_BNDRY_16 | 17179 DMA_RWCTRL_WRITE_BNDRY_16); 17180 break; 17181 } 17182 /* fallthrough */ 17183 case 32: 17184 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17185 val |= (DMA_RWCTRL_READ_BNDRY_32 | 17186 DMA_RWCTRL_WRITE_BNDRY_32); 17187 break; 17188 } 17189 /* fallthrough */ 17190 case 64: 17191 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17192 val |= (DMA_RWCTRL_READ_BNDRY_64 | 17193 DMA_RWCTRL_WRITE_BNDRY_64); 17194 break; 17195 } 17196 /* fallthrough */ 17197 case 128: 17198 if (goal == BOUNDARY_SINGLE_CACHELINE) { 17199 val |= (DMA_RWCTRL_READ_BNDRY_128 | 17200 DMA_RWCTRL_WRITE_BNDRY_128); 17201 break; 17202 } 17203 /* fallthrough */ 17204 case 256: 17205 val |= (DMA_RWCTRL_READ_BNDRY_256 | 17206 DMA_RWCTRL_WRITE_BNDRY_256); 17207 break; 17208 case 512: 17209 val |= (DMA_RWCTRL_READ_BNDRY_512 | 17210 DMA_RWCTRL_WRITE_BNDRY_512); 17211 break; 17212 case 1024: 17213 default: 17214 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 17215 DMA_RWCTRL_WRITE_BNDRY_1024); 17216 break; 17217 } 17218 } 17219 17220 out: 17221 return val; 17222 } 17223 17224 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, 17225 int size, bool to_device) 17226 { 17227 struct tg3_internal_buffer_desc test_desc; 17228 u32 sram_dma_descs; 17229 int i, ret; 17230 17231 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 17232 17233 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 17234 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 17235 tw32(RDMAC_STATUS, 0); 17236 tw32(WDMAC_STATUS, 0); 17237 17238 tw32(BUFMGR_MODE, 0); 17239 tw32(FTQ_RESET, 0); 17240 17241 test_desc.addr_hi = ((u64) buf_dma) >> 32; 17242 test_desc.addr_lo = buf_dma & 0xffffffff; 17243 test_desc.nic_mbuf = 0x00002100; 17244 test_desc.len = size; 17245 17246 /* 17247 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 17248 * the *second* time the tg3 driver was getting loaded after an 17249 * initial scan. 17250 * 17251 * Broadcom tells me: 17252 * ...the DMA engine is connected to the GRC block and a DMA 17253 * reset may affect the GRC block in some unpredictable way... 17254 * The behavior of resets to individual blocks has not been tested. 17255 * 17256 * Broadcom noted the GRC reset will also reset all sub-components. 17257 */ 17258 if (to_device) { 17259 test_desc.cqid_sqid = (13 << 8) | 2; 17260 17261 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 17262 udelay(40); 17263 } else { 17264 test_desc.cqid_sqid = (16 << 8) | 7; 17265 17266 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 17267 udelay(40); 17268 } 17269 test_desc.flags = 0x00000005; 17270 17271 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 17272 u32 val; 17273 17274 val = *(((u32 *)&test_desc) + i); 17275 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 17276 sram_dma_descs + (i * sizeof(u32))); 17277 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 17278 } 17279 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 17280 17281 if (to_device) 17282 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 17283 else 17284 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 17285 17286 ret = -ENODEV; 17287 for (i = 0; i < 40; i++) { 17288 u32 val; 17289 17290 if (to_device) 17291 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 17292 else 17293 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 17294 if ((val & 0xffff) == sram_dma_descs) { 17295 ret = 0; 17296 break; 17297 } 17298 17299 udelay(100); 17300 } 17301 17302 return ret; 17303 } 17304 17305 #define TEST_BUFFER_SIZE 0x2000 17306 17307 static const struct pci_device_id tg3_dma_wait_state_chipsets[] = { 17308 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 17309 { }, 17310 }; 17311 17312 static int tg3_test_dma(struct tg3 *tp) 17313 { 17314 dma_addr_t buf_dma; 17315 u32 *buf, saved_dma_rwctrl; 17316 int ret = 0; 17317 17318 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 17319 &buf_dma, GFP_KERNEL); 17320 if (!buf) { 17321 ret = -ENOMEM; 17322 goto out_nofree; 17323 } 17324 17325 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 17326 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 17327 17328 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 17329 17330 if (tg3_flag(tp, 57765_PLUS)) 17331 goto out; 17332 17333 if (tg3_flag(tp, PCI_EXPRESS)) { 17334 /* DMA read watermark not used on PCIE */ 17335 tp->dma_rwctrl |= 0x00180000; 17336 } else if (!tg3_flag(tp, PCIX_MODE)) { 17337 if (tg3_asic_rev(tp) == ASIC_REV_5705 || 17338 tg3_asic_rev(tp) == ASIC_REV_5750) 17339 tp->dma_rwctrl |= 0x003f0000; 17340 else 17341 tp->dma_rwctrl |= 0x003f000f; 17342 } else { 17343 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17344 tg3_asic_rev(tp) == ASIC_REV_5704) { 17345 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 17346 u32 read_water = 0x7; 17347 17348 /* If the 5704 is behind the EPB bridge, we can 17349 * do the less restrictive ONE_DMA workaround for 17350 * better performance. 17351 */ 17352 if (tg3_flag(tp, 40BIT_DMA_BUG) && 17353 tg3_asic_rev(tp) == ASIC_REV_5704) 17354 tp->dma_rwctrl |= 0x8000; 17355 else if (ccval == 0x6 || ccval == 0x7) 17356 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17357 17358 if (tg3_asic_rev(tp) == ASIC_REV_5703) 17359 read_water = 4; 17360 /* Set bit 23 to enable PCIX hw bug fix */ 17361 tp->dma_rwctrl |= 17362 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 17363 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 17364 (1 << 23); 17365 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) { 17366 /* 5780 always in PCIX mode */ 17367 tp->dma_rwctrl |= 0x00144000; 17368 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) { 17369 /* 5714 always in PCIX mode */ 17370 tp->dma_rwctrl |= 0x00148000; 17371 } else { 17372 tp->dma_rwctrl |= 0x001b000f; 17373 } 17374 } 17375 if (tg3_flag(tp, ONE_DMA_AT_ONCE)) 17376 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 17377 17378 if (tg3_asic_rev(tp) == ASIC_REV_5703 || 17379 tg3_asic_rev(tp) == ASIC_REV_5704) 17380 tp->dma_rwctrl &= 0xfffffff0; 17381 17382 if (tg3_asic_rev(tp) == ASIC_REV_5700 || 17383 tg3_asic_rev(tp) == ASIC_REV_5701) { 17384 /* Remove this if it causes problems for some boards. */ 17385 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 17386 17387 /* On 5700/5701 chips, we need to set this bit. 17388 * Otherwise the chip will issue cacheline transactions 17389 * to streamable DMA memory with not all the byte 17390 * enables turned on. This is an error on several 17391 * RISC PCI controllers, in particular sparc64. 17392 * 17393 * On 5703/5704 chips, this bit has been reassigned 17394 * a different meaning. In particular, it is used 17395 * on those chips to enable a PCI-X workaround. 17396 */ 17397 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 17398 } 17399 17400 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17401 17402 17403 if (tg3_asic_rev(tp) != ASIC_REV_5700 && 17404 tg3_asic_rev(tp) != ASIC_REV_5701) 17405 goto out; 17406 17407 /* It is best to perform DMA test with maximum write burst size 17408 * to expose the 5700/5701 write DMA bug. 17409 */ 17410 saved_dma_rwctrl = tp->dma_rwctrl; 17411 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17412 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17413 17414 while (1) { 17415 u32 *p = buf, i; 17416 17417 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 17418 p[i] = i; 17419 17420 /* Send the buffer to the chip. */ 17421 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true); 17422 if (ret) { 17423 dev_err(&tp->pdev->dev, 17424 "%s: Buffer write failed. err = %d\n", 17425 __func__, ret); 17426 break; 17427 } 17428 17429 /* Now read it back. */ 17430 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false); 17431 if (ret) { 17432 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 17433 "err = %d\n", __func__, ret); 17434 break; 17435 } 17436 17437 /* Verify it. */ 17438 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 17439 if (p[i] == i) 17440 continue; 17441 17442 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17443 DMA_RWCTRL_WRITE_BNDRY_16) { 17444 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17445 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17446 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17447 break; 17448 } else { 17449 dev_err(&tp->pdev->dev, 17450 "%s: Buffer corrupted on read back! " 17451 "(%d != %d)\n", __func__, p[i], i); 17452 ret = -ENODEV; 17453 goto out; 17454 } 17455 } 17456 17457 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 17458 /* Success. */ 17459 ret = 0; 17460 break; 17461 } 17462 } 17463 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 17464 DMA_RWCTRL_WRITE_BNDRY_16) { 17465 /* DMA test passed without adjusting DMA boundary, 17466 * now look for chipsets that are known to expose the 17467 * DMA bug without failing the test. 17468 */ 17469 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 17470 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 17471 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 17472 } else { 17473 /* Safe to use the calculated DMA boundary. */ 17474 tp->dma_rwctrl = saved_dma_rwctrl; 17475 } 17476 17477 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 17478 } 17479 17480 out: 17481 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 17482 out_nofree: 17483 return ret; 17484 } 17485 17486 static void tg3_init_bufmgr_config(struct tg3 *tp) 17487 { 17488 if (tg3_flag(tp, 57765_PLUS)) { 17489 tp->bufmgr_config.mbuf_read_dma_low_water = 17490 DEFAULT_MB_RDMA_LOW_WATER_5705; 17491 tp->bufmgr_config.mbuf_mac_rx_low_water = 17492 DEFAULT_MB_MACRX_LOW_WATER_57765; 17493 tp->bufmgr_config.mbuf_high_water = 17494 DEFAULT_MB_HIGH_WATER_57765; 17495 17496 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17497 DEFAULT_MB_RDMA_LOW_WATER_5705; 17498 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17499 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 17500 tp->bufmgr_config.mbuf_high_water_jumbo = 17501 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 17502 } else if (tg3_flag(tp, 5705_PLUS)) { 17503 tp->bufmgr_config.mbuf_read_dma_low_water = 17504 DEFAULT_MB_RDMA_LOW_WATER_5705; 17505 tp->bufmgr_config.mbuf_mac_rx_low_water = 17506 DEFAULT_MB_MACRX_LOW_WATER_5705; 17507 tp->bufmgr_config.mbuf_high_water = 17508 DEFAULT_MB_HIGH_WATER_5705; 17509 if (tg3_asic_rev(tp) == ASIC_REV_5906) { 17510 tp->bufmgr_config.mbuf_mac_rx_low_water = 17511 DEFAULT_MB_MACRX_LOW_WATER_5906; 17512 tp->bufmgr_config.mbuf_high_water = 17513 DEFAULT_MB_HIGH_WATER_5906; 17514 } 17515 17516 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17517 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 17518 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17519 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 17520 tp->bufmgr_config.mbuf_high_water_jumbo = 17521 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 17522 } else { 17523 tp->bufmgr_config.mbuf_read_dma_low_water = 17524 DEFAULT_MB_RDMA_LOW_WATER; 17525 tp->bufmgr_config.mbuf_mac_rx_low_water = 17526 DEFAULT_MB_MACRX_LOW_WATER; 17527 tp->bufmgr_config.mbuf_high_water = 17528 DEFAULT_MB_HIGH_WATER; 17529 17530 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 17531 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 17532 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 17533 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 17534 tp->bufmgr_config.mbuf_high_water_jumbo = 17535 DEFAULT_MB_HIGH_WATER_JUMBO; 17536 } 17537 17538 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 17539 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 17540 } 17541 17542 static char *tg3_phy_string(struct tg3 *tp) 17543 { 17544 switch (tp->phy_id & TG3_PHY_ID_MASK) { 17545 case TG3_PHY_ID_BCM5400: return "5400"; 17546 case TG3_PHY_ID_BCM5401: return "5401"; 17547 case TG3_PHY_ID_BCM5411: return "5411"; 17548 case TG3_PHY_ID_BCM5701: return "5701"; 17549 case TG3_PHY_ID_BCM5703: return "5703"; 17550 case TG3_PHY_ID_BCM5704: return "5704"; 17551 case TG3_PHY_ID_BCM5705: return "5705"; 17552 case TG3_PHY_ID_BCM5750: return "5750"; 17553 case TG3_PHY_ID_BCM5752: return "5752"; 17554 case TG3_PHY_ID_BCM5714: return "5714"; 17555 case TG3_PHY_ID_BCM5780: return "5780"; 17556 case TG3_PHY_ID_BCM5755: return "5755"; 17557 case TG3_PHY_ID_BCM5787: return "5787"; 17558 case TG3_PHY_ID_BCM5784: return "5784"; 17559 case TG3_PHY_ID_BCM5756: return "5722/5756"; 17560 case TG3_PHY_ID_BCM5906: return "5906"; 17561 case TG3_PHY_ID_BCM5761: return "5761"; 17562 case TG3_PHY_ID_BCM5718C: return "5718C"; 17563 case TG3_PHY_ID_BCM5718S: return "5718S"; 17564 case TG3_PHY_ID_BCM57765: return "57765"; 17565 case TG3_PHY_ID_BCM5719C: return "5719C"; 17566 case TG3_PHY_ID_BCM5720C: return "5720C"; 17567 case TG3_PHY_ID_BCM5762: return "5762C"; 17568 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 17569 case 0: return "serdes"; 17570 default: return "unknown"; 17571 } 17572 } 17573 17574 static char *tg3_bus_string(struct tg3 *tp, char *str) 17575 { 17576 if (tg3_flag(tp, PCI_EXPRESS)) { 17577 strcpy(str, "PCI Express"); 17578 return str; 17579 } else if (tg3_flag(tp, PCIX_MODE)) { 17580 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 17581 17582 strcpy(str, "PCIX:"); 17583 17584 if ((clock_ctrl == 7) || 17585 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 17586 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 17587 strcat(str, "133MHz"); 17588 else if (clock_ctrl == 0) 17589 strcat(str, "33MHz"); 17590 else if (clock_ctrl == 2) 17591 strcat(str, "50MHz"); 17592 else if (clock_ctrl == 4) 17593 strcat(str, "66MHz"); 17594 else if (clock_ctrl == 6) 17595 strcat(str, "100MHz"); 17596 } else { 17597 strcpy(str, "PCI:"); 17598 if (tg3_flag(tp, PCI_HIGH_SPEED)) 17599 strcat(str, "66MHz"); 17600 else 17601 strcat(str, "33MHz"); 17602 } 17603 if (tg3_flag(tp, PCI_32BIT)) 17604 strcat(str, ":32-bit"); 17605 else 17606 strcat(str, ":64-bit"); 17607 return str; 17608 } 17609 17610 static void tg3_init_coal(struct tg3 *tp) 17611 { 17612 struct ethtool_coalesce *ec = &tp->coal; 17613 17614 memset(ec, 0, sizeof(*ec)); 17615 ec->cmd = ETHTOOL_GCOALESCE; 17616 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 17617 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 17618 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 17619 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 17620 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 17621 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 17622 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 17623 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 17624 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 17625 17626 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 17627 HOSTCC_MODE_CLRTICK_TXBD)) { 17628 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 17629 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 17630 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 17631 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 17632 } 17633 17634 if (tg3_flag(tp, 5705_PLUS)) { 17635 ec->rx_coalesce_usecs_irq = 0; 17636 ec->tx_coalesce_usecs_irq = 0; 17637 ec->stats_block_coalesce_usecs = 0; 17638 } 17639 } 17640 17641 static int tg3_init_one(struct pci_dev *pdev, 17642 const struct pci_device_id *ent) 17643 { 17644 struct net_device *dev; 17645 struct tg3 *tp; 17646 int i, err; 17647 u32 sndmbx, rcvmbx, intmbx; 17648 char str[40]; 17649 u64 dma_mask, persist_dma_mask; 17650 netdev_features_t features = 0; 17651 17652 printk_once(KERN_INFO "%s\n", version); 17653 17654 err = pci_enable_device(pdev); 17655 if (err) { 17656 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 17657 return err; 17658 } 17659 17660 err = pci_request_regions(pdev, DRV_MODULE_NAME); 17661 if (err) { 17662 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 17663 goto err_out_disable_pdev; 17664 } 17665 17666 pci_set_master(pdev); 17667 17668 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 17669 if (!dev) { 17670 err = -ENOMEM; 17671 goto err_out_free_res; 17672 } 17673 17674 SET_NETDEV_DEV(dev, &pdev->dev); 17675 17676 tp = netdev_priv(dev); 17677 tp->pdev = pdev; 17678 tp->dev = dev; 17679 tp->rx_mode = TG3_DEF_RX_MODE; 17680 tp->tx_mode = TG3_DEF_TX_MODE; 17681 tp->irq_sync = 1; 17682 tp->pcierr_recovery = false; 17683 17684 if (tg3_debug > 0) 17685 tp->msg_enable = tg3_debug; 17686 else 17687 tp->msg_enable = TG3_DEF_MSG_ENABLE; 17688 17689 if (pdev_is_ssb_gige_core(pdev)) { 17690 tg3_flag_set(tp, IS_SSB_CORE); 17691 if (ssb_gige_must_flush_posted_writes(pdev)) 17692 tg3_flag_set(tp, FLUSH_POSTED_WRITES); 17693 if (ssb_gige_one_dma_at_once(pdev)) 17694 tg3_flag_set(tp, ONE_DMA_AT_ONCE); 17695 if (ssb_gige_have_roboswitch(pdev)) { 17696 tg3_flag_set(tp, USE_PHYLIB); 17697 tg3_flag_set(tp, ROBOSWITCH); 17698 } 17699 if (ssb_gige_is_rgmii(pdev)) 17700 tg3_flag_set(tp, RGMII_MODE); 17701 } 17702 17703 /* The word/byte swap controls here control register access byte 17704 * swapping. DMA data byte swapping is controlled in the GRC_MODE 17705 * setting below. 17706 */ 17707 tp->misc_host_ctrl = 17708 MISC_HOST_CTRL_MASK_PCI_INT | 17709 MISC_HOST_CTRL_WORD_SWAP | 17710 MISC_HOST_CTRL_INDIR_ACCESS | 17711 MISC_HOST_CTRL_PCISTATE_RW; 17712 17713 /* The NONFRM (non-frame) byte/word swap controls take effect 17714 * on descriptor entries, anything which isn't packet data. 17715 * 17716 * The StrongARM chips on the board (one for tx, one for rx) 17717 * are running in big-endian mode. 17718 */ 17719 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 17720 GRC_MODE_WSWAP_NONFRM_DATA); 17721 #ifdef __BIG_ENDIAN 17722 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 17723 #endif 17724 spin_lock_init(&tp->lock); 17725 spin_lock_init(&tp->indirect_lock); 17726 INIT_WORK(&tp->reset_task, tg3_reset_task); 17727 17728 tp->regs = pci_ioremap_bar(pdev, BAR_0); 17729 if (!tp->regs) { 17730 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 17731 err = -ENOMEM; 17732 goto err_out_free_dev; 17733 } 17734 17735 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 17736 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 17737 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 17738 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 17739 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 17740 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 17741 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 17742 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 17743 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || 17744 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 || 17745 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 || 17746 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || 17747 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || 17748 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 || 17749 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) { 17750 tg3_flag_set(tp, ENABLE_APE); 17751 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 17752 if (!tp->aperegs) { 17753 dev_err(&pdev->dev, 17754 "Cannot map APE registers, aborting\n"); 17755 err = -ENOMEM; 17756 goto err_out_iounmap; 17757 } 17758 } 17759 17760 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 17761 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 17762 17763 dev->ethtool_ops = &tg3_ethtool_ops; 17764 dev->watchdog_timeo = TG3_TX_TIMEOUT; 17765 dev->netdev_ops = &tg3_netdev_ops; 17766 dev->irq = pdev->irq; 17767 17768 err = tg3_get_invariants(tp, ent); 17769 if (err) { 17770 dev_err(&pdev->dev, 17771 "Problem fetching invariants of chip, aborting\n"); 17772 goto err_out_apeunmap; 17773 } 17774 17775 /* The EPB bridge inside 5714, 5715, and 5780 and any 17776 * device behind the EPB cannot support DMA addresses > 40-bit. 17777 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 17778 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 17779 * do DMA address check in tg3_start_xmit(). 17780 */ 17781 if (tg3_flag(tp, IS_5788)) 17782 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 17783 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 17784 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 17785 #ifdef CONFIG_HIGHMEM 17786 dma_mask = DMA_BIT_MASK(64); 17787 #endif 17788 } else 17789 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 17790 17791 /* Configure DMA attributes. */ 17792 if (dma_mask > DMA_BIT_MASK(32)) { 17793 err = pci_set_dma_mask(pdev, dma_mask); 17794 if (!err) { 17795 features |= NETIF_F_HIGHDMA; 17796 err = pci_set_consistent_dma_mask(pdev, 17797 persist_dma_mask); 17798 if (err < 0) { 17799 dev_err(&pdev->dev, "Unable to obtain 64 bit " 17800 "DMA for consistent allocations\n"); 17801 goto err_out_apeunmap; 17802 } 17803 } 17804 } 17805 if (err || dma_mask == DMA_BIT_MASK(32)) { 17806 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 17807 if (err) { 17808 dev_err(&pdev->dev, 17809 "No usable DMA configuration, aborting\n"); 17810 goto err_out_apeunmap; 17811 } 17812 } 17813 17814 tg3_init_bufmgr_config(tp); 17815 17816 /* 5700 B0 chips do not support checksumming correctly due 17817 * to hardware bugs. 17818 */ 17819 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) { 17820 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 17821 17822 if (tg3_flag(tp, 5755_PLUS)) 17823 features |= NETIF_F_IPV6_CSUM; 17824 } 17825 17826 /* TSO is on by default on chips that support hardware TSO. 17827 * Firmware TSO on older chips gives lower performance, so it 17828 * is off by default, but can be enabled using ethtool. 17829 */ 17830 if ((tg3_flag(tp, HW_TSO_1) || 17831 tg3_flag(tp, HW_TSO_2) || 17832 tg3_flag(tp, HW_TSO_3)) && 17833 (features & NETIF_F_IP_CSUM)) 17834 features |= NETIF_F_TSO; 17835 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 17836 if (features & NETIF_F_IPV6_CSUM) 17837 features |= NETIF_F_TSO6; 17838 if (tg3_flag(tp, HW_TSO_3) || 17839 tg3_asic_rev(tp) == ASIC_REV_5761 || 17840 (tg3_asic_rev(tp) == ASIC_REV_5784 && 17841 tg3_chip_rev(tp) != CHIPREV_5784_AX) || 17842 tg3_asic_rev(tp) == ASIC_REV_5785 || 17843 tg3_asic_rev(tp) == ASIC_REV_57780) 17844 features |= NETIF_F_TSO_ECN; 17845 } 17846 17847 dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX | 17848 NETIF_F_HW_VLAN_CTAG_RX; 17849 dev->vlan_features |= features; 17850 17851 /* 17852 * Add loopback capability only for a subset of devices that support 17853 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 17854 * loopback for the remaining devices. 17855 */ 17856 if (tg3_asic_rev(tp) != ASIC_REV_5780 && 17857 !tg3_flag(tp, CPMU_PRESENT)) 17858 /* Add the loopback capability */ 17859 features |= NETIF_F_LOOPBACK; 17860 17861 dev->hw_features |= features; 17862 dev->priv_flags |= IFF_UNICAST_FLT; 17863 17864 /* MTU range: 60 - 9000 or 1500, depending on hardware */ 17865 dev->min_mtu = TG3_MIN_MTU; 17866 dev->max_mtu = TG3_MAX_MTU(tp); 17867 17868 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 && 17869 !tg3_flag(tp, TSO_CAPABLE) && 17870 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 17871 tg3_flag_set(tp, MAX_RXPEND_64); 17872 tp->rx_pending = 63; 17873 } 17874 17875 err = tg3_get_device_address(tp); 17876 if (err) { 17877 dev_err(&pdev->dev, 17878 "Could not obtain valid ethernet address, aborting\n"); 17879 goto err_out_apeunmap; 17880 } 17881 17882 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 17883 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 17884 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 17885 for (i = 0; i < tp->irq_max; i++) { 17886 struct tg3_napi *tnapi = &tp->napi[i]; 17887 17888 tnapi->tp = tp; 17889 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 17890 17891 tnapi->int_mbox = intmbx; 17892 if (i <= 4) 17893 intmbx += 0x8; 17894 else 17895 intmbx += 0x4; 17896 17897 tnapi->consmbox = rcvmbx; 17898 tnapi->prodmbox = sndmbx; 17899 17900 if (i) 17901 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 17902 else 17903 tnapi->coal_now = HOSTCC_MODE_NOW; 17904 17905 if (!tg3_flag(tp, SUPPORT_MSIX)) 17906 break; 17907 17908 /* 17909 * If we support MSIX, we'll be using RSS. If we're using 17910 * RSS, the first vector only handles link interrupts and the 17911 * remaining vectors handle rx and tx interrupts. Reuse the 17912 * mailbox values for the next iteration. The values we setup 17913 * above are still useful for the single vectored mode. 17914 */ 17915 if (!i) 17916 continue; 17917 17918 rcvmbx += 0x8; 17919 17920 if (sndmbx & 0x4) 17921 sndmbx -= 0x4; 17922 else 17923 sndmbx += 0xc; 17924 } 17925 17926 /* 17927 * Reset chip in case UNDI or EFI driver did not shutdown 17928 * DMA self test will enable WDMAC and we'll see (spurious) 17929 * pending DMA on the PCI bus at that point. 17930 */ 17931 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 17932 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 17933 tg3_full_lock(tp, 0); 17934 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 17935 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 17936 tg3_full_unlock(tp); 17937 } 17938 17939 err = tg3_test_dma(tp); 17940 if (err) { 17941 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 17942 goto err_out_apeunmap; 17943 } 17944 17945 tg3_init_coal(tp); 17946 17947 pci_set_drvdata(pdev, dev); 17948 17949 if (tg3_asic_rev(tp) == ASIC_REV_5719 || 17950 tg3_asic_rev(tp) == ASIC_REV_5720 || 17951 tg3_asic_rev(tp) == ASIC_REV_5762) 17952 tg3_flag_set(tp, PTP_CAPABLE); 17953 17954 tg3_timer_init(tp); 17955 17956 tg3_carrier_off(tp); 17957 17958 err = register_netdev(dev); 17959 if (err) { 17960 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 17961 goto err_out_apeunmap; 17962 } 17963 17964 if (tg3_flag(tp, PTP_CAPABLE)) { 17965 tg3_ptp_init(tp); 17966 tp->ptp_clock = ptp_clock_register(&tp->ptp_info, 17967 &tp->pdev->dev); 17968 if (IS_ERR(tp->ptp_clock)) 17969 tp->ptp_clock = NULL; 17970 } 17971 17972 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 17973 tp->board_part_number, 17974 tg3_chip_rev_id(tp), 17975 tg3_bus_string(tp, str), 17976 dev->dev_addr); 17977 17978 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) { 17979 char *ethtype; 17980 17981 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 17982 ethtype = "10/100Base-TX"; 17983 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 17984 ethtype = "1000Base-SX"; 17985 else 17986 ethtype = "10/100/1000Base-T"; 17987 17988 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 17989 "(WireSpeed[%d], EEE[%d])\n", 17990 tg3_phy_string(tp), ethtype, 17991 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 17992 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 17993 } 17994 17995 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 17996 (dev->features & NETIF_F_RXCSUM) != 0, 17997 tg3_flag(tp, USE_LINKCHG_REG) != 0, 17998 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 17999 tg3_flag(tp, ENABLE_ASF) != 0, 18000 tg3_flag(tp, TSO_CAPABLE) != 0); 18001 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 18002 tp->dma_rwctrl, 18003 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 18004 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 18005 18006 pci_save_state(pdev); 18007 18008 return 0; 18009 18010 err_out_apeunmap: 18011 if (tp->aperegs) { 18012 iounmap(tp->aperegs); 18013 tp->aperegs = NULL; 18014 } 18015 18016 err_out_iounmap: 18017 if (tp->regs) { 18018 iounmap(tp->regs); 18019 tp->regs = NULL; 18020 } 18021 18022 err_out_free_dev: 18023 free_netdev(dev); 18024 18025 err_out_free_res: 18026 pci_release_regions(pdev); 18027 18028 err_out_disable_pdev: 18029 if (pci_is_enabled(pdev)) 18030 pci_disable_device(pdev); 18031 return err; 18032 } 18033 18034 static void tg3_remove_one(struct pci_dev *pdev) 18035 { 18036 struct net_device *dev = pci_get_drvdata(pdev); 18037 18038 if (dev) { 18039 struct tg3 *tp = netdev_priv(dev); 18040 18041 tg3_ptp_fini(tp); 18042 18043 release_firmware(tp->fw); 18044 18045 tg3_reset_task_cancel(tp); 18046 18047 if (tg3_flag(tp, USE_PHYLIB)) { 18048 tg3_phy_fini(tp); 18049 tg3_mdio_fini(tp); 18050 } 18051 18052 unregister_netdev(dev); 18053 if (tp->aperegs) { 18054 iounmap(tp->aperegs); 18055 tp->aperegs = NULL; 18056 } 18057 if (tp->regs) { 18058 iounmap(tp->regs); 18059 tp->regs = NULL; 18060 } 18061 free_netdev(dev); 18062 pci_release_regions(pdev); 18063 pci_disable_device(pdev); 18064 } 18065 } 18066 18067 #ifdef CONFIG_PM_SLEEP 18068 static int tg3_suspend(struct device *device) 18069 { 18070 struct pci_dev *pdev = to_pci_dev(device); 18071 struct net_device *dev = pci_get_drvdata(pdev); 18072 struct tg3 *tp = netdev_priv(dev); 18073 int err = 0; 18074 18075 rtnl_lock(); 18076 18077 if (!netif_running(dev)) 18078 goto unlock; 18079 18080 tg3_reset_task_cancel(tp); 18081 tg3_phy_stop(tp); 18082 tg3_netif_stop(tp); 18083 18084 tg3_timer_stop(tp); 18085 18086 tg3_full_lock(tp, 1); 18087 tg3_disable_ints(tp); 18088 tg3_full_unlock(tp); 18089 18090 netif_device_detach(dev); 18091 18092 tg3_full_lock(tp, 0); 18093 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 18094 tg3_flag_clear(tp, INIT_COMPLETE); 18095 tg3_full_unlock(tp); 18096 18097 err = tg3_power_down_prepare(tp); 18098 if (err) { 18099 int err2; 18100 18101 tg3_full_lock(tp, 0); 18102 18103 tg3_flag_set(tp, INIT_COMPLETE); 18104 err2 = tg3_restart_hw(tp, true); 18105 if (err2) 18106 goto out; 18107 18108 tg3_timer_start(tp); 18109 18110 netif_device_attach(dev); 18111 tg3_netif_start(tp); 18112 18113 out: 18114 tg3_full_unlock(tp); 18115 18116 if (!err2) 18117 tg3_phy_start(tp); 18118 } 18119 18120 unlock: 18121 rtnl_unlock(); 18122 return err; 18123 } 18124 18125 static int tg3_resume(struct device *device) 18126 { 18127 struct pci_dev *pdev = to_pci_dev(device); 18128 struct net_device *dev = pci_get_drvdata(pdev); 18129 struct tg3 *tp = netdev_priv(dev); 18130 int err = 0; 18131 18132 rtnl_lock(); 18133 18134 if (!netif_running(dev)) 18135 goto unlock; 18136 18137 netif_device_attach(dev); 18138 18139 tg3_full_lock(tp, 0); 18140 18141 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18142 18143 tg3_flag_set(tp, INIT_COMPLETE); 18144 err = tg3_restart_hw(tp, 18145 !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)); 18146 if (err) 18147 goto out; 18148 18149 tg3_timer_start(tp); 18150 18151 tg3_netif_start(tp); 18152 18153 out: 18154 tg3_full_unlock(tp); 18155 18156 if (!err) 18157 tg3_phy_start(tp); 18158 18159 unlock: 18160 rtnl_unlock(); 18161 return err; 18162 } 18163 #endif /* CONFIG_PM_SLEEP */ 18164 18165 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 18166 18167 static void tg3_shutdown(struct pci_dev *pdev) 18168 { 18169 struct net_device *dev = pci_get_drvdata(pdev); 18170 struct tg3 *tp = netdev_priv(dev); 18171 18172 rtnl_lock(); 18173 netif_device_detach(dev); 18174 18175 if (netif_running(dev)) 18176 dev_close(dev); 18177 18178 if (system_state == SYSTEM_POWER_OFF) 18179 tg3_power_down(tp); 18180 18181 rtnl_unlock(); 18182 } 18183 18184 /** 18185 * tg3_io_error_detected - called when PCI error is detected 18186 * @pdev: Pointer to PCI device 18187 * @state: The current pci connection state 18188 * 18189 * This function is called after a PCI bus error affecting 18190 * this device has been detected. 18191 */ 18192 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 18193 pci_channel_state_t state) 18194 { 18195 struct net_device *netdev = pci_get_drvdata(pdev); 18196 struct tg3 *tp = netdev_priv(netdev); 18197 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 18198 18199 netdev_info(netdev, "PCI I/O error detected\n"); 18200 18201 rtnl_lock(); 18202 18203 /* We probably don't have netdev yet */ 18204 if (!netdev || !netif_running(netdev)) 18205 goto done; 18206 18207 /* We needn't recover from permanent error */ 18208 if (state == pci_channel_io_frozen) 18209 tp->pcierr_recovery = true; 18210 18211 tg3_phy_stop(tp); 18212 18213 tg3_netif_stop(tp); 18214 18215 tg3_timer_stop(tp); 18216 18217 /* Want to make sure that the reset task doesn't run */ 18218 tg3_reset_task_cancel(tp); 18219 18220 netif_device_detach(netdev); 18221 18222 /* Clean up software state, even if MMIO is blocked */ 18223 tg3_full_lock(tp, 0); 18224 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 18225 tg3_full_unlock(tp); 18226 18227 done: 18228 if (state == pci_channel_io_perm_failure) { 18229 if (netdev) { 18230 tg3_napi_enable(tp); 18231 dev_close(netdev); 18232 } 18233 err = PCI_ERS_RESULT_DISCONNECT; 18234 } else { 18235 pci_disable_device(pdev); 18236 } 18237 18238 rtnl_unlock(); 18239 18240 return err; 18241 } 18242 18243 /** 18244 * tg3_io_slot_reset - called after the pci bus has been reset. 18245 * @pdev: Pointer to PCI device 18246 * 18247 * Restart the card from scratch, as if from a cold-boot. 18248 * At this point, the card has exprienced a hard reset, 18249 * followed by fixups by BIOS, and has its config space 18250 * set up identically to what it was at cold boot. 18251 */ 18252 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 18253 { 18254 struct net_device *netdev = pci_get_drvdata(pdev); 18255 struct tg3 *tp = netdev_priv(netdev); 18256 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 18257 int err; 18258 18259 rtnl_lock(); 18260 18261 if (pci_enable_device(pdev)) { 18262 dev_err(&pdev->dev, 18263 "Cannot re-enable PCI device after reset.\n"); 18264 goto done; 18265 } 18266 18267 pci_set_master(pdev); 18268 pci_restore_state(pdev); 18269 pci_save_state(pdev); 18270 18271 if (!netdev || !netif_running(netdev)) { 18272 rc = PCI_ERS_RESULT_RECOVERED; 18273 goto done; 18274 } 18275 18276 err = tg3_power_up(tp); 18277 if (err) 18278 goto done; 18279 18280 rc = PCI_ERS_RESULT_RECOVERED; 18281 18282 done: 18283 if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) { 18284 tg3_napi_enable(tp); 18285 dev_close(netdev); 18286 } 18287 rtnl_unlock(); 18288 18289 return rc; 18290 } 18291 18292 /** 18293 * tg3_io_resume - called when traffic can start flowing again. 18294 * @pdev: Pointer to PCI device 18295 * 18296 * This callback is called when the error recovery driver tells 18297 * us that its OK to resume normal operation. 18298 */ 18299 static void tg3_io_resume(struct pci_dev *pdev) 18300 { 18301 struct net_device *netdev = pci_get_drvdata(pdev); 18302 struct tg3 *tp = netdev_priv(netdev); 18303 int err; 18304 18305 rtnl_lock(); 18306 18307 if (!netdev || !netif_running(netdev)) 18308 goto done; 18309 18310 tg3_full_lock(tp, 0); 18311 tg3_ape_driver_state_change(tp, RESET_KIND_INIT); 18312 tg3_flag_set(tp, INIT_COMPLETE); 18313 err = tg3_restart_hw(tp, true); 18314 if (err) { 18315 tg3_full_unlock(tp); 18316 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 18317 goto done; 18318 } 18319 18320 netif_device_attach(netdev); 18321 18322 tg3_timer_start(tp); 18323 18324 tg3_netif_start(tp); 18325 18326 tg3_full_unlock(tp); 18327 18328 tg3_phy_start(tp); 18329 18330 done: 18331 tp->pcierr_recovery = false; 18332 rtnl_unlock(); 18333 } 18334 18335 static const struct pci_error_handlers tg3_err_handler = { 18336 .error_detected = tg3_io_error_detected, 18337 .slot_reset = tg3_io_slot_reset, 18338 .resume = tg3_io_resume 18339 }; 18340 18341 static struct pci_driver tg3_driver = { 18342 .name = DRV_MODULE_NAME, 18343 .id_table = tg3_pci_tbl, 18344 .probe = tg3_init_one, 18345 .remove = tg3_remove_one, 18346 .err_handler = &tg3_err_handler, 18347 .driver.pm = &tg3_pm_ops, 18348 .shutdown = tg3_shutdown, 18349 }; 18350 18351 module_pci_driver(tg3_driver); 18352