linux/drivers/net/ethernet/broadcom/tg3.c
<<
>>
Prefs
   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-2014 Broadcom Corporation.
   8 *
   9 * Firmware is:
  10 *      Derived from proprietary unpublished source code,
  11 *      Copyright (C) 2000-2003 Broadcom Corporation.
  12 *
  13 *      Permission is hereby granted for the distribution of this firmware
  14 *      data in hexadecimal or equivalent format, provided this copyright
  15 *      notice is accompanying it.
  16 */
  17
  18
  19#include <linux/module.h>
  20#include <linux/moduleparam.h>
  21#include <linux/stringify.h>
  22#include <linux/kernel.h>
  23#include <linux/sched/signal.h>
  24#include <linux/types.h>
  25#include <linux/compiler.h>
  26#include <linux/slab.h>
  27#include <linux/delay.h>
  28#include <linux/in.h>
  29#include <linux/interrupt.h>
  30#include <linux/ioport.h>
  31#include <linux/pci.h>
  32#include <linux/netdevice.h>
  33#include <linux/etherdevice.h>
  34#include <linux/skbuff.h>
  35#include <linux/ethtool.h>
  36#include <linux/mdio.h>
  37#include <linux/mii.h>
  38#include <linux/phy.h>
  39#include <linux/brcmphy.h>
  40#include <linux/if.h>
  41#include <linux/if_vlan.h>
  42#include <linux/ip.h>
  43#include <linux/tcp.h>
  44#include <linux/workqueue.h>
  45#include <linux/prefetch.h>
  46#include <linux/dma-mapping.h>
  47#include <linux/firmware.h>
  48#include <linux/ssb/ssb_driver_gige.h>
  49#include <linux/hwmon.h>
  50#include <linux/hwmon-sysfs.h>
  51
  52#include <net/checksum.h>
  53#include <net/ip.h>
  54
  55#include <linux/io.h>
  56#include <asm/byteorder.h>
  57#include <linux/uaccess.h>
  58
  59#include <uapi/linux/net_tstamp.h>
  60#include <linux/ptp_clock_kernel.h>
  61
  62#ifdef CONFIG_SPARC
  63#include <asm/idprom.h>
  64#include <asm/prom.h>
  65#endif
  66
  67#define BAR_0   0
  68#define BAR_2   2
  69
  70#include "tg3.h"
  71
  72/* Functions & macros to verify TG3_FLAGS types */
  73
  74static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
  75{
  76        return test_bit(flag, bits);
  77}
  78
  79static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
  80{
  81        set_bit(flag, bits);
  82}
  83
  84static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
  85{
  86        clear_bit(flag, bits);
  87}
  88
  89#define tg3_flag(tp, flag)                              \
  90        _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
  91#define tg3_flag_set(tp, flag)                          \
  92        _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
  93#define tg3_flag_clear(tp, flag)                        \
  94        _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
  95
  96#define DRV_MODULE_NAME         "tg3"
  97#define TG3_MAJ_NUM                     3
  98#define TG3_MIN_NUM                     137
  99#define DRV_MODULE_VERSION      \
 100        __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
 101#define DRV_MODULE_RELDATE      "May 11, 2014"
 102
 103#define RESET_KIND_SHUTDOWN     0
 104#define RESET_KIND_INIT         1
 105#define RESET_KIND_SUSPEND      2
 106
 107#define TG3_DEF_RX_MODE         0
 108#define TG3_DEF_TX_MODE         0
 109#define TG3_DEF_MSG_ENABLE        \
 110        (NETIF_MSG_DRV          | \
 111         NETIF_MSG_PROBE        | \
 112         NETIF_MSG_LINK         | \
 113         NETIF_MSG_TIMER        | \
 114         NETIF_MSG_IFDOWN       | \
 115         NETIF_MSG_IFUP         | \
 116         NETIF_MSG_RX_ERR       | \
 117         NETIF_MSG_TX_ERR)
 118
 119#define TG3_GRC_LCLCTL_PWRSW_DELAY      100
 120
 121/* length of time before we decide the hardware is borked,
 122 * and dev->tx_timeout() should be called to fix the problem
 123 */
 124
 125#define TG3_TX_TIMEOUT                  (5 * HZ)
 126
 127/* hardware minimum and maximum for a single frame's data payload */
 128#define TG3_MIN_MTU                     ETH_ZLEN
 129#define TG3_MAX_MTU(tp) \
 130        (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
 131
 132/* These numbers seem to be hard coded in the NIC firmware somehow.
 133 * You can't change the ring sizes, but you can change where you place
 134 * them in the NIC onboard memory.
 135 */
 136#define TG3_RX_STD_RING_SIZE(tp) \
 137        (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
 138         TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
 139#define TG3_DEF_RX_RING_PENDING         200
 140#define TG3_RX_JMB_RING_SIZE(tp) \
 141        (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
 142         TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
 143#define TG3_DEF_RX_JUMBO_RING_PENDING   100
 144
 145/* Do not place this n-ring entries value into the tp struct itself,
 146 * we really want to expose these constants to GCC so that modulo et
 147 * al.  operations are done with shifts and masks instead of with
 148 * hw multiply/modulo instructions.  Another solution would be to
 149 * replace things like '% foo' with '& (foo - 1)'.
 150 */
 151
 152#define TG3_TX_RING_SIZE                512
 153#define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
 154
 155#define TG3_RX_STD_RING_BYTES(tp) \
 156        (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
 157#define TG3_RX_JMB_RING_BYTES(tp) \
 158        (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
 159#define TG3_RX_RCB_RING_BYTES(tp) \
 160        (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
 161#define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
 162                                 TG3_TX_RING_SIZE)
 163#define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
 164
 165#define TG3_DMA_BYTE_ENAB               64
 166
 167#define TG3_RX_STD_DMA_SZ               1536
 168#define TG3_RX_JMB_DMA_SZ               9046
 169
 170#define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
 171
 172#define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
 173#define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
 174
 175#define TG3_RX_STD_BUFF_RING_SIZE(tp) \
 176        (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
 177
 178#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
 179        (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
 180
 181/* Due to a hardware bug, the 5701 can only DMA to memory addresses
 182 * that are at least dword aligned when used in PCIX mode.  The driver
 183 * works around this bug by double copying the packet.  This workaround
 184 * is built into the normal double copy length check for efficiency.
 185 *
 186 * However, the double copy is only necessary on those architectures
 187 * where unaligned memory accesses are inefficient.  For those architectures
 188 * where unaligned memory accesses incur little penalty, we can reintegrate
 189 * the 5701 in the normal rx path.  Doing so saves a device structure
 190 * dereference by hardcoding the double copy threshold in place.
 191 */
 192#define TG3_RX_COPY_THRESHOLD           256
 193#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
 194        #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
 195#else
 196        #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
 197#endif
 198
 199#if (NET_IP_ALIGN != 0)
 200#define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
 201#else
 202#define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
 203#endif
 204
 205/* minimum number of free TX descriptors required to wake up TX process */
 206#define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
 207#define TG3_TX_BD_DMA_MAX_2K            2048
 208#define TG3_TX_BD_DMA_MAX_4K            4096
 209
 210#define TG3_RAW_IP_ALIGN 2
 211
 212#define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
 213#define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
 214
 215#define TG3_FW_UPDATE_TIMEOUT_SEC       5
 216#define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
 217
 218#define FIRMWARE_TG3            "tigon/tg3.bin"
 219#define FIRMWARE_TG357766       "tigon/tg357766.bin"
 220#define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
 221#define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
 222
 223static char version[] =
 224        DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
 225
 226MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
 227MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
 228MODULE_LICENSE("GPL");
 229MODULE_VERSION(DRV_MODULE_VERSION);
 230MODULE_FIRMWARE(FIRMWARE_TG3);
 231MODULE_FIRMWARE(FIRMWARE_TG3TSO);
 232MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
 233
 234static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
 235module_param(tg3_debug, int, 0);
 236MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
 237
 238#define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
 239#define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
 240
 241static const struct pci_device_id tg3_pci_tbl[] = {
 242        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
 243        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
 244        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
 245        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
 246        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
 247        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
 248        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
 249        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
 250        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
 251        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
 252        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
 253        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
 254        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
 255        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
 256        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
 257        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
 258        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
 259        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
 260        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
 261         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
 262                        TG3_DRV_DATA_FLAG_5705_10_100},
 263        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
 264         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
 265                        TG3_DRV_DATA_FLAG_5705_10_100},
 266        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
 267        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
 268         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
 269                        TG3_DRV_DATA_FLAG_5705_10_100},
 270        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
 271        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
 272        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
 273        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
 274        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
 275        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
 276         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 277        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
 278        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
 279        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
 280        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
 281        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
 282         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 283        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
 284        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
 285        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
 286        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
 287        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
 288        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
 289        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
 290        {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
 291                        PCI_VENDOR_ID_LENOVO,
 292                        TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
 293         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 294        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
 295        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
 296         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 297        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
 298        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
 299        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
 300        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
 301        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
 302        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
 303        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
 304        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
 305        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
 306        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
 307        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
 308        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
 309        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
 310        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
 311        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
 312        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
 313        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
 314        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
 315        {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
 316                        PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
 317         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 318        {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
 319                        PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
 320         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 321        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
 322        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
 323        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
 324         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 325        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
 326        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
 327        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
 328        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
 329        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
 330        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
 331        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
 332        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
 333        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
 334         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 335        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
 336         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 337        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
 338        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
 339        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
 340        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
 341        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
 342        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
 343        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
 344        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
 345        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
 346        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
 347        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
 348        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
 349        {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
 350        {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
 351        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
 352        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
 353        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
 354        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
 355        {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
 356        {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
 357        {}
 358};
 359
 360MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
 361
 362static const struct {
 363        const char string[ETH_GSTRING_LEN];
 364} ethtool_stats_keys[] = {
 365        { "rx_octets" },
 366        { "rx_fragments" },
 367        { "rx_ucast_packets" },
 368        { "rx_mcast_packets" },
 369        { "rx_bcast_packets" },
 370        { "rx_fcs_errors" },
 371        { "rx_align_errors" },
 372        { "rx_xon_pause_rcvd" },
 373        { "rx_xoff_pause_rcvd" },
 374        { "rx_mac_ctrl_rcvd" },
 375        { "rx_xoff_entered" },
 376        { "rx_frame_too_long_errors" },
 377        { "rx_jabbers" },
 378        { "rx_undersize_packets" },
 379        { "rx_in_length_errors" },
 380        { "rx_out_length_errors" },
 381        { "rx_64_or_less_octet_packets" },
 382        { "rx_65_to_127_octet_packets" },
 383        { "rx_128_to_255_octet_packets" },
 384        { "rx_256_to_511_octet_packets" },
 385        { "rx_512_to_1023_octet_packets" },
 386        { "rx_1024_to_1522_octet_packets" },
 387        { "rx_1523_to_2047_octet_packets" },
 388        { "rx_2048_to_4095_octet_packets" },
 389        { "rx_4096_to_8191_octet_packets" },
 390        { "rx_8192_to_9022_octet_packets" },
 391
 392        { "tx_octets" },
 393        { "tx_collisions" },
 394
 395        { "tx_xon_sent" },
 396        { "tx_xoff_sent" },
 397        { "tx_flow_control" },
 398        { "tx_mac_errors" },
 399        { "tx_single_collisions" },
 400        { "tx_mult_collisions" },
 401        { "tx_deferred" },
 402        { "tx_excessive_collisions" },
 403        { "tx_late_collisions" },
 404        { "tx_collide_2times" },
 405        { "tx_collide_3times" },
 406        { "tx_collide_4times" },
 407        { "tx_collide_5times" },
 408        { "tx_collide_6times" },
 409        { "tx_collide_7times" },
 410        { "tx_collide_8times" },
 411        { "tx_collide_9times" },
 412        { "tx_collide_10times" },
 413        { "tx_collide_11times" },
 414        { "tx_collide_12times" },
 415        { "tx_collide_13times" },
 416        { "tx_collide_14times" },
 417        { "tx_collide_15times" },
 418        { "tx_ucast_packets" },
 419        { "tx_mcast_packets" },
 420        { "tx_bcast_packets" },
 421        { "tx_carrier_sense_errors" },
 422        { "tx_discards" },
 423        { "tx_errors" },
 424
 425        { "dma_writeq_full" },
 426        { "dma_write_prioq_full" },
 427        { "rxbds_empty" },
 428        { "rx_discards" },
 429        { "rx_errors" },
 430        { "rx_threshold_hit" },
 431
 432        { "dma_readq_full" },
 433        { "dma_read_prioq_full" },
 434        { "tx_comp_queue_full" },
 435
 436        { "ring_set_send_prod_index" },
 437        { "ring_status_update" },
 438        { "nic_irqs" },
 439        { "nic_avoided_irqs" },
 440        { "nic_tx_threshold_hit" },
 441
 442        { "mbuf_lwm_thresh_hit" },
 443};
 444
 445#define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
 446#define TG3_NVRAM_TEST          0
 447#define TG3_LINK_TEST           1
 448#define TG3_REGISTER_TEST       2
 449#define TG3_MEMORY_TEST         3
 450#define TG3_MAC_LOOPB_TEST      4
 451#define TG3_PHY_LOOPB_TEST      5
 452#define TG3_EXT_LOOPB_TEST      6
 453#define TG3_INTERRUPT_TEST      7
 454
 455
 456static const struct {
 457        const char string[ETH_GSTRING_LEN];
 458} ethtool_test_keys[] = {
 459        [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
 460        [TG3_LINK_TEST]         = { "link test         (online) " },
 461        [TG3_REGISTER_TEST]     = { "register test     (offline)" },
 462        [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
 463        [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
 464        [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
 465        [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
 466        [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
 467};
 468
 469#define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
 470
 471
 472static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
 473{
 474        writel(val, tp->regs + off);
 475}
 476
 477static u32 tg3_read32(struct tg3 *tp, u32 off)
 478{
 479        return readl(tp->regs + off);
 480}
 481
 482static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
 483{
 484        writel(val, tp->aperegs + off);
 485}
 486
 487static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
 488{
 489        return readl(tp->aperegs + off);
 490}
 491
 492static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
 493{
 494        unsigned long flags;
 495
 496        spin_lock_irqsave(&tp->indirect_lock, flags);
 497        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
 498        pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
 499        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 500}
 501
 502static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
 503{
 504        writel(val, tp->regs + off);
 505        readl(tp->regs + off);
 506}
 507
 508static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
 509{
 510        unsigned long flags;
 511        u32 val;
 512
 513        spin_lock_irqsave(&tp->indirect_lock, flags);
 514        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
 515        pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
 516        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 517        return val;
 518}
 519
 520static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
 521{
 522        unsigned long flags;
 523
 524        if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
 525                pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
 526                                       TG3_64BIT_REG_LOW, val);
 527                return;
 528        }
 529        if (off == TG3_RX_STD_PROD_IDX_REG) {
 530                pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
 531                                       TG3_64BIT_REG_LOW, val);
 532                return;
 533        }
 534
 535        spin_lock_irqsave(&tp->indirect_lock, flags);
 536        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
 537        pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
 538        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 539
 540        /* In indirect mode when disabling interrupts, we also need
 541         * to clear the interrupt bit in the GRC local ctrl register.
 542         */
 543        if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
 544            (val == 0x1)) {
 545                pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
 546                                       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
 547        }
 548}
 549
 550static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
 551{
 552        unsigned long flags;
 553        u32 val;
 554
 555        spin_lock_irqsave(&tp->indirect_lock, flags);
 556        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
 557        pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
 558        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 559        return val;
 560}
 561
 562/* usec_wait specifies the wait time in usec when writing to certain registers
 563 * where it is unsafe to read back the register without some delay.
 564 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
 565 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
 566 */
 567static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
 568{
 569        if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
 570                /* Non-posted methods */
 571                tp->write32(tp, off, val);
 572        else {
 573                /* Posted method */
 574                tg3_write32(tp, off, val);
 575                if (usec_wait)
 576                        udelay(usec_wait);
 577                tp->read32(tp, off);
 578        }
 579        /* Wait again after the read for the posted method to guarantee that
 580         * the wait time is met.
 581         */
 582        if (usec_wait)
 583                udelay(usec_wait);
 584}
 585
 586static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
 587{
 588        tp->write32_mbox(tp, off, val);
 589        if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
 590            (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
 591             !tg3_flag(tp, ICH_WORKAROUND)))
 592                tp->read32_mbox(tp, off);
 593}
 594
 595static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
 596{
 597        void __iomem *mbox = tp->regs + off;
 598        writel(val, mbox);
 599        if (tg3_flag(tp, TXD_MBOX_HWBUG))
 600                writel(val, mbox);
 601        if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
 602            tg3_flag(tp, FLUSH_POSTED_WRITES))
 603                readl(mbox);
 604}
 605
 606static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
 607{
 608        return readl(tp->regs + off + GRCMBOX_BASE);
 609}
 610
 611static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
 612{
 613        writel(val, tp->regs + off + GRCMBOX_BASE);
 614}
 615
 616#define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
 617#define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
 618#define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
 619#define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
 620#define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
 621
 622#define tw32(reg, val)                  tp->write32(tp, reg, val)
 623#define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
 624#define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
 625#define tr32(reg)                       tp->read32(tp, reg)
 626
 627static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
 628{
 629        unsigned long flags;
 630
 631        if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
 632            (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
 633                return;
 634
 635        spin_lock_irqsave(&tp->indirect_lock, flags);
 636        if (tg3_flag(tp, SRAM_USE_CONFIG)) {
 637                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
 638                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
 639
 640                /* Always leave this as zero. */
 641                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
 642        } else {
 643                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
 644                tw32_f(TG3PCI_MEM_WIN_DATA, val);
 645
 646                /* Always leave this as zero. */
 647                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
 648        }
 649        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 650}
 651
 652static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
 653{
 654        unsigned long flags;
 655
 656        if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
 657            (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
 658                *val = 0;
 659                return;
 660        }
 661
 662        spin_lock_irqsave(&tp->indirect_lock, flags);
 663        if (tg3_flag(tp, SRAM_USE_CONFIG)) {
 664                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
 665                pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
 666
 667                /* Always leave this as zero. */
 668                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
 669        } else {
 670                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
 671                *val = tr32(TG3PCI_MEM_WIN_DATA);
 672
 673                /* Always leave this as zero. */
 674                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
 675        }
 676        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 677}
 678
 679static void tg3_ape_lock_init(struct tg3 *tp)
 680{
 681        int i;
 682        u32 regbase, bit;
 683
 684        if (tg3_asic_rev(tp) == ASIC_REV_5761)
 685                regbase = TG3_APE_LOCK_GRANT;
 686        else
 687                regbase = TG3_APE_PER_LOCK_GRANT;
 688
 689        /* Make sure the driver hasn't any stale locks. */
 690        for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
 691                switch (i) {
 692                case TG3_APE_LOCK_PHY0:
 693                case TG3_APE_LOCK_PHY1:
 694                case TG3_APE_LOCK_PHY2:
 695                case TG3_APE_LOCK_PHY3:
 696                        bit = APE_LOCK_GRANT_DRIVER;
 697                        break;
 698                default:
 699                        if (!tp->pci_fn)
 700                                bit = APE_LOCK_GRANT_DRIVER;
 701                        else
 702                                bit = 1 << tp->pci_fn;
 703                }
 704                tg3_ape_write32(tp, regbase + 4 * i, bit);
 705        }
 706
 707}
 708
 709static int tg3_ape_lock(struct tg3 *tp, int locknum)
 710{
 711        int i, off;
 712        int ret = 0;
 713        u32 status, req, gnt, bit;
 714
 715        if (!tg3_flag(tp, ENABLE_APE))
 716                return 0;
 717
 718        switch (locknum) {
 719        case TG3_APE_LOCK_GPIO:
 720                if (tg3_asic_rev(tp) == ASIC_REV_5761)
 721                        return 0;
 722        case TG3_APE_LOCK_GRC:
 723        case TG3_APE_LOCK_MEM:
 724                if (!tp->pci_fn)
 725                        bit = APE_LOCK_REQ_DRIVER;
 726                else
 727                        bit = 1 << tp->pci_fn;
 728                break;
 729        case TG3_APE_LOCK_PHY0:
 730        case TG3_APE_LOCK_PHY1:
 731        case TG3_APE_LOCK_PHY2:
 732        case TG3_APE_LOCK_PHY3:
 733                bit = APE_LOCK_REQ_DRIVER;
 734                break;
 735        default:
 736                return -EINVAL;
 737        }
 738
 739        if (tg3_asic_rev(tp) == ASIC_REV_5761) {
 740                req = TG3_APE_LOCK_REQ;
 741                gnt = TG3_APE_LOCK_GRANT;
 742        } else {
 743                req = TG3_APE_PER_LOCK_REQ;
 744                gnt = TG3_APE_PER_LOCK_GRANT;
 745        }
 746
 747        off = 4 * locknum;
 748
 749        tg3_ape_write32(tp, req + off, bit);
 750
 751        /* Wait for up to 1 millisecond to acquire lock. */
 752        for (i = 0; i < 100; i++) {
 753                status = tg3_ape_read32(tp, gnt + off);
 754                if (status == bit)
 755                        break;
 756                if (pci_channel_offline(tp->pdev))
 757                        break;
 758
 759                udelay(10);
 760        }
 761
 762        if (status != bit) {
 763                /* Revoke the lock request. */
 764                tg3_ape_write32(tp, gnt + off, bit);
 765                ret = -EBUSY;
 766        }
 767
 768        return ret;
 769}
 770
 771static void tg3_ape_unlock(struct tg3 *tp, int locknum)
 772{
 773        u32 gnt, bit;
 774
 775        if (!tg3_flag(tp, ENABLE_APE))
 776                return;
 777
 778        switch (locknum) {
 779        case TG3_APE_LOCK_GPIO:
 780                if (tg3_asic_rev(tp) == ASIC_REV_5761)
 781                        return;
 782        case TG3_APE_LOCK_GRC:
 783        case TG3_APE_LOCK_MEM:
 784                if (!tp->pci_fn)
 785                        bit = APE_LOCK_GRANT_DRIVER;
 786                else
 787                        bit = 1 << tp->pci_fn;
 788                break;
 789        case TG3_APE_LOCK_PHY0:
 790        case TG3_APE_LOCK_PHY1:
 791        case TG3_APE_LOCK_PHY2:
 792        case TG3_APE_LOCK_PHY3:
 793                bit = APE_LOCK_GRANT_DRIVER;
 794                break;
 795        default:
 796                return;
 797        }
 798
 799        if (tg3_asic_rev(tp) == ASIC_REV_5761)
 800                gnt = TG3_APE_LOCK_GRANT;
 801        else
 802                gnt = TG3_APE_PER_LOCK_GRANT;
 803
 804        tg3_ape_write32(tp, gnt + 4 * locknum, bit);
 805}
 806
 807static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
 808{
 809        u32 apedata;
 810
 811        while (timeout_us) {
 812                if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
 813                        return -EBUSY;
 814
 815                apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
 816                if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
 817                        break;
 818
 819                tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
 820
 821                udelay(10);
 822                timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
 823        }
 824
 825        return timeout_us ? 0 : -EBUSY;
 826}
 827
 828#ifdef CONFIG_TIGON3_HWMON
 829static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
 830{
 831        u32 i, apedata;
 832
 833        for (i = 0; i < timeout_us / 10; i++) {
 834                apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
 835
 836                if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
 837                        break;
 838
 839                udelay(10);
 840        }
 841
 842        return i == timeout_us / 10;
 843}
 844
 845static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
 846                                   u32 len)
 847{
 848        int err;
 849        u32 i, bufoff, msgoff, maxlen, apedata;
 850
 851        if (!tg3_flag(tp, APE_HAS_NCSI))
 852                return 0;
 853
 854        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
 855        if (apedata != APE_SEG_SIG_MAGIC)
 856                return -ENODEV;
 857
 858        apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
 859        if (!(apedata & APE_FW_STATUS_READY))
 860                return -EAGAIN;
 861
 862        bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
 863                 TG3_APE_SHMEM_BASE;
 864        msgoff = bufoff + 2 * sizeof(u32);
 865        maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
 866
 867        while (len) {
 868                u32 length;
 869
 870                /* Cap xfer sizes to scratchpad limits. */
 871                length = (len > maxlen) ? maxlen : len;
 872                len -= length;
 873
 874                apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
 875                if (!(apedata & APE_FW_STATUS_READY))
 876                        return -EAGAIN;
 877
 878                /* Wait for up to 1 msec for APE to service previous event. */
 879                err = tg3_ape_event_lock(tp, 1000);
 880                if (err)
 881                        return err;
 882
 883                apedata = APE_EVENT_STATUS_DRIVER_EVNT |
 884                          APE_EVENT_STATUS_SCRTCHPD_READ |
 885                          APE_EVENT_STATUS_EVENT_PENDING;
 886                tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
 887
 888                tg3_ape_write32(tp, bufoff, base_off);
 889                tg3_ape_write32(tp, bufoff + sizeof(u32), length);
 890
 891                tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
 892                tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
 893
 894                base_off += length;
 895
 896                if (tg3_ape_wait_for_event(tp, 30000))
 897                        return -EAGAIN;
 898
 899                for (i = 0; length; i += 4, length -= 4) {
 900                        u32 val = tg3_ape_read32(tp, msgoff + i);
 901                        memcpy(data, &val, sizeof(u32));
 902                        data++;
 903                }
 904        }
 905
 906        return 0;
 907}
 908#endif
 909
 910static int tg3_ape_send_event(struct tg3 *tp, u32 event)
 911{
 912        int err;
 913        u32 apedata;
 914
 915        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
 916        if (apedata != APE_SEG_SIG_MAGIC)
 917                return -EAGAIN;
 918
 919        apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
 920        if (!(apedata & APE_FW_STATUS_READY))
 921                return -EAGAIN;
 922
 923        /* Wait for up to 1 millisecond for APE to service previous event. */
 924        err = tg3_ape_event_lock(tp, 1000);
 925        if (err)
 926                return err;
 927
 928        tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
 929                        event | APE_EVENT_STATUS_EVENT_PENDING);
 930
 931        tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
 932        tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
 933
 934        return 0;
 935}
 936
 937static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
 938{
 939        u32 event;
 940        u32 apedata;
 941
 942        if (!tg3_flag(tp, ENABLE_APE))
 943                return;
 944
 945        switch (kind) {
 946        case RESET_KIND_INIT:
 947                tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
 948                                APE_HOST_SEG_SIG_MAGIC);
 949                tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
 950                                APE_HOST_SEG_LEN_MAGIC);
 951                apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
 952                tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
 953                tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
 954                        APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
 955                tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
 956                                APE_HOST_BEHAV_NO_PHYLOCK);
 957                tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
 958                                    TG3_APE_HOST_DRVR_STATE_START);
 959
 960                event = APE_EVENT_STATUS_STATE_START;
 961                break;
 962        case RESET_KIND_SHUTDOWN:
 963                /* With the interface we are currently using,
 964                 * APE does not track driver state.  Wiping
 965                 * out the HOST SEGMENT SIGNATURE forces
 966                 * the APE to assume OS absent status.
 967                 */
 968                tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
 969
 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
 991static void tg3_disable_ints(struct tg3 *tp)
 992{
 993        int i;
 994
 995        tw32(TG3PCI_MISC_HOST_CTRL,
 996             (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
 997        for (i = 0; i < tp->irq_max; i++)
 998                tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
 999}
1000
1001static void tg3_enable_ints(struct tg3 *tp)
1002{
1003        int i;
1004
1005        tp->irq_sync = 0;
1006        wmb();
1007
1008        tw32(TG3PCI_MISC_HOST_CTRL,
1009             (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1010
1011        tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1012        for (i = 0; i < tp->irq_cnt; i++) {
1013                struct tg3_napi *tnapi = &tp->napi[i];
1014
1015                tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1016                if (tg3_flag(tp, 1SHOT_MSI))
1017                        tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1018
1019                tp->coal_now |= tnapi->coal_now;
1020        }
1021
1022        /* Force an initial interrupt */
1023        if (!tg3_flag(tp, TAGGED_STATUS) &&
1024            (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1025                tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1026        else
1027                tw32(HOSTCC_MODE, tp->coal_now);
1028
1029        tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1030}
1031
1032static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1033{
1034        struct tg3 *tp = tnapi->tp;
1035        struct tg3_hw_status *sblk = tnapi->hw_status;
1036        unsigned int work_exists = 0;
1037
1038        /* check for phy events */
1039        if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1040                if (sblk->status & SD_STATUS_LINK_CHG)
1041                        work_exists = 1;
1042        }
1043
1044        /* check for TX work to do */
1045        if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1046                work_exists = 1;
1047
1048        /* check for RX work to do */
1049        if (tnapi->rx_rcb_prod_idx &&
1050            *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1051                work_exists = 1;
1052
1053        return work_exists;
1054}
1055
1056/* tg3_int_reenable
1057 *  similar to tg3_enable_ints, but it accurately determines whether there
1058 *  is new work pending and can return without flushing the PIO write
1059 *  which reenables interrupts
1060 */
1061static void tg3_int_reenable(struct tg3_napi *tnapi)
1062{
1063        struct tg3 *tp = tnapi->tp;
1064
1065        tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1066        mmiowb();
1067
1068        /* When doing tagged status, this work check is unnecessary.
1069         * The last_tag we write above tells the chip which piece of
1070         * work we've completed.
1071         */
1072        if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1073                tw32(HOSTCC_MODE, tp->coalesce_mode |
1074                     HOSTCC_MODE_ENABLE | tnapi->coal_now);
1075}
1076
1077static void tg3_switch_clocks(struct tg3 *tp)
1078{
1079        u32 clock_ctrl;
1080        u32 orig_clock_ctrl;
1081
1082        if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1083                return;
1084
1085        clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1086
1087        orig_clock_ctrl = clock_ctrl;
1088        clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1089                       CLOCK_CTRL_CLKRUN_OENABLE |
1090                       0x1f);
1091        tp->pci_clock_ctrl = clock_ctrl;
1092
1093        if (tg3_flag(tp, 5705_PLUS)) {
1094                if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1095                        tw32_wait_f(TG3PCI_CLOCK_CTRL,
1096                                    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1097                }
1098        } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1099                tw32_wait_f(TG3PCI_CLOCK_CTRL,
1100                            clock_ctrl |
1101                            (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1102                            40);
1103                tw32_wait_f(TG3PCI_CLOCK_CTRL,
1104                            clock_ctrl | (CLOCK_CTRL_ALTCLK),
1105                            40);
1106        }
1107        tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1108}
1109
1110#define PHY_BUSY_LOOPS  5000
1111
1112static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1113                         u32 *val)
1114{
1115        u32 frame_val;
1116        unsigned int loops;
1117        int ret;
1118
1119        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1120                tw32_f(MAC_MI_MODE,
1121                     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1122                udelay(80);
1123        }
1124
1125        tg3_ape_lock(tp, tp->phy_ape_lock);
1126
1127        *val = 0x0;
1128
1129        frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1130                      MI_COM_PHY_ADDR_MASK);
1131        frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1132                      MI_COM_REG_ADDR_MASK);
1133        frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1134
1135        tw32_f(MAC_MI_COM, frame_val);
1136
1137        loops = PHY_BUSY_LOOPS;
1138        while (loops != 0) {
1139                udelay(10);
1140                frame_val = tr32(MAC_MI_COM);
1141
1142                if ((frame_val & MI_COM_BUSY) == 0) {
1143                        udelay(5);
1144                        frame_val = tr32(MAC_MI_COM);
1145                        break;
1146                }
1147                loops -= 1;
1148        }
1149
1150        ret = -EBUSY;
1151        if (loops != 0) {
1152                *val = frame_val & MI_COM_DATA_MASK;
1153                ret = 0;
1154        }
1155
1156        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1157                tw32_f(MAC_MI_MODE, tp->mi_mode);
1158                udelay(80);
1159        }
1160
1161        tg3_ape_unlock(tp, tp->phy_ape_lock);
1162
1163        return ret;
1164}
1165
1166static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1167{
1168        return __tg3_readphy(tp, tp->phy_addr, reg, val);
1169}
1170
1171static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1172                          u32 val)
1173{
1174        u32 frame_val;
1175        unsigned int loops;
1176        int ret;
1177
1178        if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1179            (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1180                return 0;
1181
1182        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1183                tw32_f(MAC_MI_MODE,
1184                     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1185                udelay(80);
1186        }
1187
1188        tg3_ape_lock(tp, tp->phy_ape_lock);
1189
1190        frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1191                      MI_COM_PHY_ADDR_MASK);
1192        frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1193                      MI_COM_REG_ADDR_MASK);
1194        frame_val |= (val & MI_COM_DATA_MASK);
1195        frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1196
1197        tw32_f(MAC_MI_COM, frame_val);
1198
1199        loops = PHY_BUSY_LOOPS;
1200        while (loops != 0) {
1201                udelay(10);
1202                frame_val = tr32(MAC_MI_COM);
1203                if ((frame_val & MI_COM_BUSY) == 0) {
1204                        udelay(5);
1205                        frame_val = tr32(MAC_MI_COM);
1206                        break;
1207                }
1208                loops -= 1;
1209        }
1210
1211        ret = -EBUSY;
1212        if (loops != 0)
1213                ret = 0;
1214
1215        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1216                tw32_f(MAC_MI_MODE, tp->mi_mode);
1217                udelay(80);
1218        }
1219
1220        tg3_ape_unlock(tp, tp->phy_ape_lock);
1221
1222        return ret;
1223}
1224
1225static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1226{
1227        return __tg3_writephy(tp, tp->phy_addr, reg, val);
1228}
1229
1230static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1231{
1232        int err;
1233
1234        err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1235        if (err)
1236                goto done;
1237
1238        err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1239        if (err)
1240                goto done;
1241
1242        err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1243                           MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1244        if (err)
1245                goto done;
1246
1247        err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1248
1249done:
1250        return err;
1251}
1252
1253static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1254{
1255        int err;
1256
1257        err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1258        if (err)
1259                goto done;
1260
1261        err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1262        if (err)
1263                goto done;
1264
1265        err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1266                           MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1267        if (err)
1268                goto done;
1269
1270        err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1271
1272done:
1273        return err;
1274}
1275
1276static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1277{
1278        int err;
1279
1280        err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1281        if (!err)
1282                err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1283
1284        return err;
1285}
1286
1287static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1288{
1289        int err;
1290
1291        err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1292        if (!err)
1293                err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1294
1295        return err;
1296}
1297
1298static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1299{
1300        int err;
1301
1302        err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1303                           (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1304                           MII_TG3_AUXCTL_SHDWSEL_MISC);
1305        if (!err)
1306                err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1307
1308        return err;
1309}
1310
1311static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1312{
1313        if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1314                set |= MII_TG3_AUXCTL_MISC_WREN;
1315
1316        return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1317}
1318
1319static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1320{
1321        u32 val;
1322        int err;
1323
1324        err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1325
1326        if (err)
1327                return err;
1328
1329        if (enable)
1330                val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1331        else
1332                val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1333
1334        err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1335                                   val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1336
1337        return err;
1338}
1339
1340static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1341{
1342        return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1343                            reg | val | MII_TG3_MISC_SHDW_WREN);
1344}
1345
1346static int tg3_bmcr_reset(struct tg3 *tp)
1347{
1348        u32 phy_control;
1349        int limit, err;
1350
1351        /* OK, reset it, and poll the BMCR_RESET bit until it
1352         * clears or we time out.
1353         */
1354        phy_control = BMCR_RESET;
1355        err = tg3_writephy(tp, MII_BMCR, phy_control);
1356        if (err != 0)
1357                return -EBUSY;
1358
1359        limit = 5000;
1360        while (limit--) {
1361                err = tg3_readphy(tp, MII_BMCR, &phy_control);
1362                if (err != 0)
1363                        return -EBUSY;
1364
1365                if ((phy_control & BMCR_RESET) == 0) {
1366                        udelay(40);
1367                        break;
1368                }
1369                udelay(10);
1370        }
1371        if (limit < 0)
1372                return -EBUSY;
1373
1374        return 0;
1375}
1376
1377static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1378{
1379        struct tg3 *tp = bp->priv;
1380        u32 val;
1381
1382        spin_lock_bh(&tp->lock);
1383
1384        if (__tg3_readphy(tp, mii_id, reg, &val))
1385                val = -EIO;
1386
1387        spin_unlock_bh(&tp->lock);
1388
1389        return val;
1390}
1391
1392static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1393{
1394        struct tg3 *tp = bp->priv;
1395        u32 ret = 0;
1396
1397        spin_lock_bh(&tp->lock);
1398
1399        if (__tg3_writephy(tp, mii_id, reg, val))
1400                ret = -EIO;
1401
1402        spin_unlock_bh(&tp->lock);
1403
1404        return ret;
1405}
1406
1407static void tg3_mdio_config_5785(struct tg3 *tp)
1408{
1409        u32 val;
1410        struct phy_device *phydev;
1411
1412        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1413        switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1414        case PHY_ID_BCM50610:
1415        case PHY_ID_BCM50610M:
1416                val = MAC_PHYCFG2_50610_LED_MODES;
1417                break;
1418        case PHY_ID_BCMAC131:
1419                val = MAC_PHYCFG2_AC131_LED_MODES;
1420                break;
1421        case PHY_ID_RTL8211C:
1422                val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1423                break;
1424        case PHY_ID_RTL8201E:
1425                val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1426                break;
1427        default:
1428                return;
1429        }
1430
1431        if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1432                tw32(MAC_PHYCFG2, val);
1433
1434                val = tr32(MAC_PHYCFG1);
1435                val &= ~(MAC_PHYCFG1_RGMII_INT |
1436                         MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1437                val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1438                tw32(MAC_PHYCFG1, val);
1439
1440                return;
1441        }
1442
1443        if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1444                val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1445                       MAC_PHYCFG2_FMODE_MASK_MASK |
1446                       MAC_PHYCFG2_GMODE_MASK_MASK |
1447                       MAC_PHYCFG2_ACT_MASK_MASK   |
1448                       MAC_PHYCFG2_QUAL_MASK_MASK |
1449                       MAC_PHYCFG2_INBAND_ENABLE;
1450
1451        tw32(MAC_PHYCFG2, val);
1452
1453        val = tr32(MAC_PHYCFG1);
1454        val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1455                 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1456        if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1457                if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1458                        val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1459                if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1460                        val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1461        }
1462        val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1463               MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1464        tw32(MAC_PHYCFG1, val);
1465
1466        val = tr32(MAC_EXT_RGMII_MODE);
1467        val &= ~(MAC_RGMII_MODE_RX_INT_B |
1468                 MAC_RGMII_MODE_RX_QUALITY |
1469                 MAC_RGMII_MODE_RX_ACTIVITY |
1470                 MAC_RGMII_MODE_RX_ENG_DET |
1471                 MAC_RGMII_MODE_TX_ENABLE |
1472                 MAC_RGMII_MODE_TX_LOWPWR |
1473                 MAC_RGMII_MODE_TX_RESET);
1474        if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1475                if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1476                        val |= MAC_RGMII_MODE_RX_INT_B |
1477                               MAC_RGMII_MODE_RX_QUALITY |
1478                               MAC_RGMII_MODE_RX_ACTIVITY |
1479                               MAC_RGMII_MODE_RX_ENG_DET;
1480                if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1481                        val |= MAC_RGMII_MODE_TX_ENABLE |
1482                               MAC_RGMII_MODE_TX_LOWPWR |
1483                               MAC_RGMII_MODE_TX_RESET;
1484        }
1485        tw32(MAC_EXT_RGMII_MODE, val);
1486}
1487
1488static void tg3_mdio_start(struct tg3 *tp)
1489{
1490        tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1491        tw32_f(MAC_MI_MODE, tp->mi_mode);
1492        udelay(80);
1493
1494        if (tg3_flag(tp, MDIOBUS_INITED) &&
1495            tg3_asic_rev(tp) == ASIC_REV_5785)
1496                tg3_mdio_config_5785(tp);
1497}
1498
1499static int tg3_mdio_init(struct tg3 *tp)
1500{
1501        int i;
1502        u32 reg;
1503        struct phy_device *phydev;
1504
1505        if (tg3_flag(tp, 5717_PLUS)) {
1506                u32 is_serdes;
1507
1508                tp->phy_addr = tp->pci_fn + 1;
1509
1510                if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1511                        is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1512                else
1513                        is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1514                                    TG3_CPMU_PHY_STRAP_IS_SERDES;
1515                if (is_serdes)
1516                        tp->phy_addr += 7;
1517        } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1518                int addr;
1519
1520                addr = ssb_gige_get_phyaddr(tp->pdev);
1521                if (addr < 0)
1522                        return addr;
1523                tp->phy_addr = addr;
1524        } else
1525                tp->phy_addr = TG3_PHY_MII_ADDR;
1526
1527        tg3_mdio_start(tp);
1528
1529        if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1530                return 0;
1531
1532        tp->mdio_bus = mdiobus_alloc();
1533        if (tp->mdio_bus == NULL)
1534                return -ENOMEM;
1535
1536        tp->mdio_bus->name     = "tg3 mdio bus";
1537        snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1538                 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1539        tp->mdio_bus->priv     = tp;
1540        tp->mdio_bus->parent   = &tp->pdev->dev;
1541        tp->mdio_bus->read     = &tg3_mdio_read;
1542        tp->mdio_bus->write    = &tg3_mdio_write;
1543        tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1544
1545        /* The bus registration will look for all the PHYs on the mdio bus.
1546         * Unfortunately, it does not ensure the PHY is powered up before
1547         * accessing the PHY ID registers.  A chip reset is the
1548         * quickest way to bring the device back to an operational state..
1549         */
1550        if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1551                tg3_bmcr_reset(tp);
1552
1553        i = mdiobus_register(tp->mdio_bus);
1554        if (i) {
1555                dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1556                mdiobus_free(tp->mdio_bus);
1557                return i;
1558        }
1559
1560        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1561
1562        if (!phydev || !phydev->drv) {
1563                dev_warn(&tp->pdev->dev, "No PHY devices\n");
1564                mdiobus_unregister(tp->mdio_bus);
1565                mdiobus_free(tp->mdio_bus);
1566                return -ENODEV;
1567        }
1568
1569        switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1570        case PHY_ID_BCM57780:
1571                phydev->interface = PHY_INTERFACE_MODE_GMII;
1572                phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1573                break;
1574        case PHY_ID_BCM50610:
1575        case PHY_ID_BCM50610M:
1576                phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1577                                     PHY_BRCM_RX_REFCLK_UNUSED |
1578                                     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1579                                     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1580                if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1581                        phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1582                if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1583                        phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1584                if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1585                        phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1586                /* fallthru */
1587        case PHY_ID_RTL8211C:
1588                phydev->interface = PHY_INTERFACE_MODE_RGMII;
1589                break;
1590        case PHY_ID_RTL8201E:
1591        case PHY_ID_BCMAC131:
1592                phydev->interface = PHY_INTERFACE_MODE_MII;
1593                phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1594                tp->phy_flags |= TG3_PHYFLG_IS_FET;
1595                break;
1596        }
1597
1598        tg3_flag_set(tp, MDIOBUS_INITED);
1599
1600        if (tg3_asic_rev(tp) == ASIC_REV_5785)
1601                tg3_mdio_config_5785(tp);
1602
1603        return 0;
1604}
1605
1606static void tg3_mdio_fini(struct tg3 *tp)
1607{
1608        if (tg3_flag(tp, MDIOBUS_INITED)) {
1609                tg3_flag_clear(tp, MDIOBUS_INITED);
1610                mdiobus_unregister(tp->mdio_bus);
1611                mdiobus_free(tp->mdio_bus);
1612        }
1613}
1614
1615/* tp->lock is held. */
1616static inline void tg3_generate_fw_event(struct tg3 *tp)
1617{
1618        u32 val;
1619
1620        val = tr32(GRC_RX_CPU_EVENT);
1621        val |= GRC_RX_CPU_DRIVER_EVENT;
1622        tw32_f(GRC_RX_CPU_EVENT, val);
1623
1624        tp->last_event_jiffies = jiffies;
1625}
1626
1627#define TG3_FW_EVENT_TIMEOUT_USEC 2500
1628
1629/* tp->lock is held. */
1630static void tg3_wait_for_event_ack(struct tg3 *tp)
1631{
1632        int i;
1633        unsigned int delay_cnt;
1634        long time_remain;
1635
1636        /* If enough time has passed, no wait is necessary. */
1637        time_remain = (long)(tp->last_event_jiffies + 1 +
1638                      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1639                      (long)jiffies;
1640        if (time_remain < 0)
1641                return;
1642
1643        /* Check if we can shorten the wait time. */
1644        delay_cnt = jiffies_to_usecs(time_remain);
1645        if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1646                delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1647        delay_cnt = (delay_cnt >> 3) + 1;
1648
1649        for (i = 0; i < delay_cnt; i++) {
1650                if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1651                        break;
1652                if (pci_channel_offline(tp->pdev))
1653                        break;
1654
1655                udelay(8);
1656        }
1657}
1658
1659/* tp->lock is held. */
1660static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1661{
1662        u32 reg, val;
1663
1664        val = 0;
1665        if (!tg3_readphy(tp, MII_BMCR, &reg))
1666                val = reg << 16;
1667        if (!tg3_readphy(tp, MII_BMSR, &reg))
1668                val |= (reg & 0xffff);
1669        *data++ = val;
1670
1671        val = 0;
1672        if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1673                val = reg << 16;
1674        if (!tg3_readphy(tp, MII_LPA, &reg))
1675                val |= (reg & 0xffff);
1676        *data++ = val;
1677
1678        val = 0;
1679        if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1680                if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1681                        val = reg << 16;
1682                if (!tg3_readphy(tp, MII_STAT1000, &reg))
1683                        val |= (reg & 0xffff);
1684        }
1685        *data++ = val;
1686
1687        if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1688                val = reg << 16;
1689        else
1690                val = 0;
1691        *data++ = val;
1692}
1693
1694/* tp->lock is held. */
1695static void tg3_ump_link_report(struct tg3 *tp)
1696{
1697        u32 data[4];
1698
1699        if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1700                return;
1701
1702        tg3_phy_gather_ump_data(tp, data);
1703
1704        tg3_wait_for_event_ack(tp);
1705
1706        tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1707        tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1708        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1709        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1710        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1711        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1712
1713        tg3_generate_fw_event(tp);
1714}
1715
1716/* tp->lock is held. */
1717static void tg3_stop_fw(struct tg3 *tp)
1718{
1719        if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1720                /* Wait for RX cpu to ACK the previous event. */
1721                tg3_wait_for_event_ack(tp);
1722
1723                tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1724
1725                tg3_generate_fw_event(tp);
1726
1727                /* Wait for RX cpu to ACK this event. */
1728                tg3_wait_for_event_ack(tp);
1729        }
1730}
1731
1732/* tp->lock is held. */
1733static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1734{
1735        tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1736                      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1737
1738        if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1739                switch (kind) {
1740                case RESET_KIND_INIT:
1741                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1742                                      DRV_STATE_START);
1743                        break;
1744
1745                case RESET_KIND_SHUTDOWN:
1746                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1747                                      DRV_STATE_UNLOAD);
1748                        break;
1749
1750                case RESET_KIND_SUSPEND:
1751                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1752                                      DRV_STATE_SUSPEND);
1753                        break;
1754
1755                default:
1756                        break;
1757                }
1758        }
1759}
1760
1761/* tp->lock is held. */
1762static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1763{
1764        if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1765                switch (kind) {
1766                case RESET_KIND_INIT:
1767                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1768                                      DRV_STATE_START_DONE);
1769                        break;
1770
1771                case RESET_KIND_SHUTDOWN:
1772                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1773                                      DRV_STATE_UNLOAD_DONE);
1774                        break;
1775
1776                default:
1777                        break;
1778                }
1779        }
1780}
1781
1782/* tp->lock is held. */
1783static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1784{
1785        if (tg3_flag(tp, ENABLE_ASF)) {
1786                switch (kind) {
1787                case RESET_KIND_INIT:
1788                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1789                                      DRV_STATE_START);
1790                        break;
1791
1792                case RESET_KIND_SHUTDOWN:
1793                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1794                                      DRV_STATE_UNLOAD);
1795                        break;
1796
1797                case RESET_KIND_SUSPEND:
1798                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1799                                      DRV_STATE_SUSPEND);
1800                        break;
1801
1802                default:
1803                        break;
1804                }
1805        }
1806}
1807
1808static int tg3_poll_fw(struct tg3 *tp)
1809{
1810        int i;
1811        u32 val;
1812
1813        if (tg3_flag(tp, NO_FWARE_REPORTED))
1814                return 0;
1815
1816        if (tg3_flag(tp, IS_SSB_CORE)) {
1817                /* We don't use firmware. */
1818                return 0;
1819        }
1820
1821        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1822                /* Wait up to 20ms for init done. */
1823                for (i = 0; i < 200; i++) {
1824                        if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1825                                return 0;
1826                        if (pci_channel_offline(tp->pdev))
1827                                return -ENODEV;
1828
1829                        udelay(100);
1830                }
1831                return -ENODEV;
1832        }
1833
1834        /* Wait for firmware initialization to complete. */
1835        for (i = 0; i < 100000; i++) {
1836                tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1837                if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1838                        break;
1839                if (pci_channel_offline(tp->pdev)) {
1840                        if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1841                                tg3_flag_set(tp, NO_FWARE_REPORTED);
1842                                netdev_info(tp->dev, "No firmware running\n");
1843                        }
1844
1845                        break;
1846                }
1847
1848                udelay(10);
1849        }
1850
1851        /* Chip might not be fitted with firmware.  Some Sun onboard
1852         * parts are configured like that.  So don't signal the timeout
1853         * of the above loop as an error, but do report the lack of
1854         * running firmware once.
1855         */
1856        if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1857                tg3_flag_set(tp, NO_FWARE_REPORTED);
1858
1859                netdev_info(tp->dev, "No firmware running\n");
1860        }
1861
1862        if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1863                /* The 57765 A0 needs a little more
1864                 * time to do some important work.
1865                 */
1866                mdelay(10);
1867        }
1868
1869        return 0;
1870}
1871
1872static void tg3_link_report(struct tg3 *tp)
1873{
1874        if (!netif_carrier_ok(tp->dev)) {
1875                netif_info(tp, link, tp->dev, "Link is down\n");
1876                tg3_ump_link_report(tp);
1877        } else if (netif_msg_link(tp)) {
1878                netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1879                            (tp->link_config.active_speed == SPEED_1000 ?
1880                             1000 :
1881                             (tp->link_config.active_speed == SPEED_100 ?
1882                              100 : 10)),
1883                            (tp->link_config.active_duplex == DUPLEX_FULL ?
1884                             "full" : "half"));
1885
1886                netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1887                            (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1888                            "on" : "off",
1889                            (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1890                            "on" : "off");
1891
1892                if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1893                        netdev_info(tp->dev, "EEE is %s\n",
1894                                    tp->setlpicnt ? "enabled" : "disabled");
1895
1896                tg3_ump_link_report(tp);
1897        }
1898
1899        tp->link_up = netif_carrier_ok(tp->dev);
1900}
1901
1902static u32 tg3_decode_flowctrl_1000T(u32 adv)
1903{
1904        u32 flowctrl = 0;
1905
1906        if (adv & ADVERTISE_PAUSE_CAP) {
1907                flowctrl |= FLOW_CTRL_RX;
1908                if (!(adv & ADVERTISE_PAUSE_ASYM))
1909                        flowctrl |= FLOW_CTRL_TX;
1910        } else if (adv & ADVERTISE_PAUSE_ASYM)
1911                flowctrl |= FLOW_CTRL_TX;
1912
1913        return flowctrl;
1914}
1915
1916static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1917{
1918        u16 miireg;
1919
1920        if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1921                miireg = ADVERTISE_1000XPAUSE;
1922        else if (flow_ctrl & FLOW_CTRL_TX)
1923                miireg = ADVERTISE_1000XPSE_ASYM;
1924        else if (flow_ctrl & FLOW_CTRL_RX)
1925                miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1926        else
1927                miireg = 0;
1928
1929        return miireg;
1930}
1931
1932static u32 tg3_decode_flowctrl_1000X(u32 adv)
1933{
1934        u32 flowctrl = 0;
1935
1936        if (adv & ADVERTISE_1000XPAUSE) {
1937                flowctrl |= FLOW_CTRL_RX;
1938                if (!(adv & ADVERTISE_1000XPSE_ASYM))
1939                        flowctrl |= FLOW_CTRL_TX;
1940        } else if (adv & ADVERTISE_1000XPSE_ASYM)
1941                flowctrl |= FLOW_CTRL_TX;
1942
1943        return flowctrl;
1944}
1945
1946static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1947{
1948        u8 cap = 0;
1949
1950        if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1951                cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1952        } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1953                if (lcladv & ADVERTISE_1000XPAUSE)
1954                        cap = FLOW_CTRL_RX;
1955                if (rmtadv & ADVERTISE_1000XPAUSE)
1956                        cap = FLOW_CTRL_TX;
1957        }
1958
1959        return cap;
1960}
1961
1962static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1963{
1964        u8 autoneg;
1965        u8 flowctrl = 0;
1966        u32 old_rx_mode = tp->rx_mode;
1967        u32 old_tx_mode = tp->tx_mode;
1968
1969        if (tg3_flag(tp, USE_PHYLIB))
1970                autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1971        else
1972                autoneg = tp->link_config.autoneg;
1973
1974        if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1975                if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1976                        flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1977                else
1978                        flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1979        } else
1980                flowctrl = tp->link_config.flowctrl;
1981
1982        tp->link_config.active_flowctrl = flowctrl;
1983
1984        if (flowctrl & FLOW_CTRL_RX)
1985                tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1986        else
1987                tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1988
1989        if (old_rx_mode != tp->rx_mode)
1990                tw32_f(MAC_RX_MODE, tp->rx_mode);
1991
1992        if (flowctrl & FLOW_CTRL_TX)
1993                tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1994        else
1995                tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1996
1997        if (old_tx_mode != tp->tx_mode)
1998                tw32_f(MAC_TX_MODE, tp->tx_mode);
1999}
2000
2001static void tg3_adjust_link(struct net_device *dev)
2002{
2003        u8 oldflowctrl, linkmesg = 0;
2004        u32 mac_mode, lcl_adv, rmt_adv;
2005        struct tg3 *tp = netdev_priv(dev);
2006        struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2007
2008        spin_lock_bh(&tp->lock);
2009
2010        mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2011                                    MAC_MODE_HALF_DUPLEX);
2012
2013        oldflowctrl = tp->link_config.active_flowctrl;
2014
2015        if (phydev->link) {
2016                lcl_adv = 0;
2017                rmt_adv = 0;
2018
2019                if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2020                        mac_mode |= MAC_MODE_PORT_MODE_MII;
2021                else if (phydev->speed == SPEED_1000 ||
2022                         tg3_asic_rev(tp) != ASIC_REV_5785)
2023                        mac_mode |= MAC_MODE_PORT_MODE_GMII;
2024                else
2025                        mac_mode |= MAC_MODE_PORT_MODE_MII;
2026
2027                if (phydev->duplex == DUPLEX_HALF)
2028                        mac_mode |= MAC_MODE_HALF_DUPLEX;
2029                else {
2030                        lcl_adv = mii_advertise_flowctrl(
2031                                  tp->link_config.flowctrl);
2032
2033                        if (phydev->pause)
2034                                rmt_adv = LPA_PAUSE_CAP;
2035                        if (phydev->asym_pause)
2036                                rmt_adv |= LPA_PAUSE_ASYM;
2037                }
2038
2039                tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2040        } else
2041                mac_mode |= MAC_MODE_PORT_MODE_GMII;
2042
2043        if (mac_mode != tp->mac_mode) {
2044                tp->mac_mode = mac_mode;
2045                tw32_f(MAC_MODE, tp->mac_mode);
2046                udelay(40);
2047        }
2048
2049        if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2050                if (phydev->speed == SPEED_10)
2051                        tw32(MAC_MI_STAT,
2052                             MAC_MI_STAT_10MBPS_MODE |
2053                             MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2054                else
2055                        tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2056        }
2057
2058        if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2059                tw32(MAC_TX_LENGTHS,
2060                     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2061                      (6 << TX_LENGTHS_IPG_SHIFT) |
2062                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2063        else
2064                tw32(MAC_TX_LENGTHS,
2065                     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2066                      (6 << TX_LENGTHS_IPG_SHIFT) |
2067                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2068
2069        if (phydev->link != tp->old_link ||
2070            phydev->speed != tp->link_config.active_speed ||
2071            phydev->duplex != tp->link_config.active_duplex ||
2072            oldflowctrl != tp->link_config.active_flowctrl)
2073                linkmesg = 1;
2074
2075        tp->old_link = phydev->link;
2076        tp->link_config.active_speed = phydev->speed;
2077        tp->link_config.active_duplex = phydev->duplex;
2078
2079        spin_unlock_bh(&tp->lock);
2080
2081        if (linkmesg)
2082                tg3_link_report(tp);
2083}
2084
2085static int tg3_phy_init(struct tg3 *tp)
2086{
2087        struct phy_device *phydev;
2088
2089        if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2090                return 0;
2091
2092        /* Bring the PHY back to a known state. */
2093        tg3_bmcr_reset(tp);
2094
2095        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2096
2097        /* Attach the MAC to the PHY. */
2098        phydev = phy_connect(tp->dev, phydev_name(phydev),
2099                             tg3_adjust_link, phydev->interface);
2100        if (IS_ERR(phydev)) {
2101                dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2102                return PTR_ERR(phydev);
2103        }
2104
2105        /* Mask with MAC supported features. */
2106        switch (phydev->interface) {
2107        case PHY_INTERFACE_MODE_GMII:
2108        case PHY_INTERFACE_MODE_RGMII:
2109                if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2110                        phydev->supported &= (PHY_GBIT_FEATURES |
2111                                              SUPPORTED_Pause |
2112                                              SUPPORTED_Asym_Pause);
2113                        break;
2114                }
2115                /* fallthru */
2116        case PHY_INTERFACE_MODE_MII:
2117                phydev->supported &= (PHY_BASIC_FEATURES |
2118                                      SUPPORTED_Pause |
2119                                      SUPPORTED_Asym_Pause);
2120                break;
2121        default:
2122                phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2123                return -EINVAL;
2124        }
2125
2126        tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2127
2128        phydev->advertising = phydev->supported;
2129
2130        phy_attached_info(phydev);
2131
2132        return 0;
2133}
2134
2135static void tg3_phy_start(struct tg3 *tp)
2136{
2137        struct phy_device *phydev;
2138
2139        if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2140                return;
2141
2142        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2143
2144        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2145                tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2146                phydev->speed = tp->link_config.speed;
2147                phydev->duplex = tp->link_config.duplex;
2148                phydev->autoneg = tp->link_config.autoneg;
2149                phydev->advertising = tp->link_config.advertising;
2150        }
2151
2152        phy_start(phydev);
2153
2154        phy_start_aneg(phydev);
2155}
2156
2157static void tg3_phy_stop(struct tg3 *tp)
2158{
2159        if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2160                return;
2161
2162        phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2163}
2164
2165static void tg3_phy_fini(struct tg3 *tp)
2166{
2167        if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2168                phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2169                tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2170        }
2171}
2172
2173static int tg3_phy_set_extloopbk(struct tg3 *tp)
2174{
2175        int err;
2176        u32 val;
2177
2178        if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2179                return 0;
2180
2181        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2182                /* Cannot do read-modify-write on 5401 */
2183                err = tg3_phy_auxctl_write(tp,
2184                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2185                                           MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2186                                           0x4c20);
2187                goto done;
2188        }
2189
2190        err = tg3_phy_auxctl_read(tp,
2191                                  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2192        if (err)
2193                return err;
2194
2195        val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2196        err = tg3_phy_auxctl_write(tp,
2197                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2198
2199done:
2200        return err;
2201}
2202
2203static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2204{
2205        u32 phytest;
2206
2207        if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2208                u32 phy;
2209
2210                tg3_writephy(tp, MII_TG3_FET_TEST,
2211                             phytest | MII_TG3_FET_SHADOW_EN);
2212                if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2213                        if (enable)
2214                                phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2215                        else
2216                                phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2217                        tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2218                }
2219                tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2220        }
2221}
2222
2223static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2224{
2225        u32 reg;
2226
2227        if (!tg3_flag(tp, 5705_PLUS) ||
2228            (tg3_flag(tp, 5717_PLUS) &&
2229             (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2230                return;
2231
2232        if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2233                tg3_phy_fet_toggle_apd(tp, enable);
2234                return;
2235        }
2236
2237        reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2238              MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2239              MII_TG3_MISC_SHDW_SCR5_SDTL |
2240              MII_TG3_MISC_SHDW_SCR5_C125OE;
2241        if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2242                reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2243
2244        tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2245
2246
2247        reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2248        if (enable)
2249                reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2250
2251        tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2252}
2253
2254static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2255{
2256        u32 phy;
2257
2258        if (!tg3_flag(tp, 5705_PLUS) ||
2259            (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2260                return;
2261
2262        if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2263                u32 ephy;
2264
2265                if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2266                        u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2267
2268                        tg3_writephy(tp, MII_TG3_FET_TEST,
2269                                     ephy | MII_TG3_FET_SHADOW_EN);
2270                        if (!tg3_readphy(tp, reg, &phy)) {
2271                                if (enable)
2272                                        phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2273                                else
2274                                        phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2275                                tg3_writephy(tp, reg, phy);
2276                        }
2277                        tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2278                }
2279        } else {
2280                int ret;
2281
2282                ret = tg3_phy_auxctl_read(tp,
2283                                          MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2284                if (!ret) {
2285                        if (enable)
2286                                phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2287                        else
2288                                phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2289                        tg3_phy_auxctl_write(tp,
2290                                             MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2291                }
2292        }
2293}
2294
2295static void tg3_phy_set_wirespeed(struct tg3 *tp)
2296{
2297        int ret;
2298        u32 val;
2299
2300        if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2301                return;
2302
2303        ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2304        if (!ret)
2305                tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2306                                     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2307}
2308
2309static void tg3_phy_apply_otp(struct tg3 *tp)
2310{
2311        u32 otp, phy;
2312
2313        if (!tp->phy_otp)
2314                return;
2315
2316        otp = tp->phy_otp;
2317
2318        if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2319                return;
2320
2321        phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2322        phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2323        tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2324
2325        phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2326              ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2327        tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2328
2329        phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2330        phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2331        tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2332
2333        phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2334        tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2335
2336        phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2337        tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2338
2339        phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2340              ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2341        tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2342
2343        tg3_phy_toggle_auxctl_smdsp(tp, false);
2344}
2345
2346static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2347{
2348        u32 val;
2349        struct ethtool_eee *dest = &tp->eee;
2350
2351        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2352                return;
2353
2354        if (eee)
2355                dest = eee;
2356
2357        if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2358                return;
2359
2360        /* Pull eee_active */
2361        if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2362            val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2363                dest->eee_active = 1;
2364        } else
2365                dest->eee_active = 0;
2366
2367        /* Pull lp advertised settings */
2368        if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2369                return;
2370        dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2371
2372        /* Pull advertised and eee_enabled settings */
2373        if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2374                return;
2375        dest->eee_enabled = !!val;
2376        dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2377
2378        /* Pull tx_lpi_enabled */
2379        val = tr32(TG3_CPMU_EEE_MODE);
2380        dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2381
2382        /* Pull lpi timer value */
2383        dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2384}
2385
2386static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2387{
2388        u32 val;
2389
2390        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2391                return;
2392
2393        tp->setlpicnt = 0;
2394
2395        if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2396            current_link_up &&
2397            tp->link_config.active_duplex == DUPLEX_FULL &&
2398            (tp->link_config.active_speed == SPEED_100 ||
2399             tp->link_config.active_speed == SPEED_1000)) {
2400                u32 eeectl;
2401
2402                if (tp->link_config.active_speed == SPEED_1000)
2403                        eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2404                else
2405                        eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2406
2407                tw32(TG3_CPMU_EEE_CTRL, eeectl);
2408
2409                tg3_eee_pull_config(tp, NULL);
2410                if (tp->eee.eee_active)
2411                        tp->setlpicnt = 2;
2412        }
2413
2414        if (!tp->setlpicnt) {
2415                if (current_link_up &&
2416                   !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2417                        tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2418                        tg3_phy_toggle_auxctl_smdsp(tp, false);
2419                }
2420
2421                val = tr32(TG3_CPMU_EEE_MODE);
2422                tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2423        }
2424}
2425
2426static void tg3_phy_eee_enable(struct tg3 *tp)
2427{
2428        u32 val;
2429
2430        if (tp->link_config.active_speed == SPEED_1000 &&
2431            (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2432             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2433             tg3_flag(tp, 57765_CLASS)) &&
2434            !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2435                val = MII_TG3_DSP_TAP26_ALNOKO |
2436                      MII_TG3_DSP_TAP26_RMRXSTO;
2437                tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2438                tg3_phy_toggle_auxctl_smdsp(tp, false);
2439        }
2440
2441        val = tr32(TG3_CPMU_EEE_MODE);
2442        tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2443}
2444
2445static int tg3_wait_macro_done(struct tg3 *tp)
2446{
2447        int limit = 100;
2448
2449        while (limit--) {
2450                u32 tmp32;
2451
2452                if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2453                        if ((tmp32 & 0x1000) == 0)
2454                                break;
2455                }
2456        }
2457        if (limit < 0)
2458                return -EBUSY;
2459
2460        return 0;
2461}
2462
2463static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2464{
2465        static const u32 test_pat[4][6] = {
2466        { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2467        { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2468        { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2469        { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2470        };
2471        int chan;
2472
2473        for (chan = 0; chan < 4; chan++) {
2474                int i;
2475
2476                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2477                             (chan * 0x2000) | 0x0200);
2478                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2479
2480                for (i = 0; i < 6; i++)
2481                        tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2482                                     test_pat[chan][i]);
2483
2484                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2485                if (tg3_wait_macro_done(tp)) {
2486                        *resetp = 1;
2487                        return -EBUSY;
2488                }
2489
2490                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2491                             (chan * 0x2000) | 0x0200);
2492                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2493                if (tg3_wait_macro_done(tp)) {
2494                        *resetp = 1;
2495                        return -EBUSY;
2496                }
2497
2498                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2499                if (tg3_wait_macro_done(tp)) {
2500                        *resetp = 1;
2501                        return -EBUSY;
2502                }
2503
2504                for (i = 0; i < 6; i += 2) {
2505                        u32 low, high;
2506
2507                        if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2508                            tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2509                            tg3_wait_macro_done(tp)) {
2510                                *resetp = 1;
2511                                return -EBUSY;
2512                        }
2513                        low &= 0x7fff;
2514                        high &= 0x000f;
2515                        if (low != test_pat[chan][i] ||
2516                            high != test_pat[chan][i+1]) {
2517                                tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2518                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2519                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2520
2521                                return -EBUSY;
2522                        }
2523                }
2524        }
2525
2526        return 0;
2527}
2528
2529static int tg3_phy_reset_chanpat(struct tg3 *tp)
2530{
2531        int chan;
2532
2533        for (chan = 0; chan < 4; chan++) {
2534                int i;
2535
2536                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2537                             (chan * 0x2000) | 0x0200);
2538                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2539                for (i = 0; i < 6; i++)
2540                        tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2541                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2542                if (tg3_wait_macro_done(tp))
2543                        return -EBUSY;
2544        }
2545
2546        return 0;
2547}
2548
2549static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2550{
2551        u32 reg32, phy9_orig;
2552        int retries, do_phy_reset, err;
2553
2554        retries = 10;
2555        do_phy_reset = 1;
2556        do {
2557                if (do_phy_reset) {
2558                        err = tg3_bmcr_reset(tp);
2559                        if (err)
2560                                return err;
2561                        do_phy_reset = 0;
2562                }
2563
2564                /* Disable transmitter and interrupt.  */
2565                if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2566                        continue;
2567
2568                reg32 |= 0x3000;
2569                tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2570
2571                /* Set full-duplex, 1000 mbps.  */
2572                tg3_writephy(tp, MII_BMCR,
2573                             BMCR_FULLDPLX | BMCR_SPEED1000);
2574
2575                /* Set to master mode.  */
2576                if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2577                        continue;
2578
2579                tg3_writephy(tp, MII_CTRL1000,
2580                             CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2581
2582                err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2583                if (err)
2584                        return err;
2585
2586                /* Block the PHY control access.  */
2587                tg3_phydsp_write(tp, 0x8005, 0x0800);
2588
2589                err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2590                if (!err)
2591                        break;
2592        } while (--retries);
2593
2594        err = tg3_phy_reset_chanpat(tp);
2595        if (err)
2596                return err;
2597
2598        tg3_phydsp_write(tp, 0x8005, 0x0000);
2599
2600        tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2601        tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2602
2603        tg3_phy_toggle_auxctl_smdsp(tp, false);
2604
2605        tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2606
2607        err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2608        if (err)
2609                return err;
2610
2611        reg32 &= ~0x3000;
2612        tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2613
2614        return 0;
2615}
2616
2617static void tg3_carrier_off(struct tg3 *tp)
2618{
2619        netif_carrier_off(tp->dev);
2620        tp->link_up = false;
2621}
2622
2623static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2624{
2625        if (tg3_flag(tp, ENABLE_ASF))
2626                netdev_warn(tp->dev,
2627                            "Management side-band traffic will be interrupted during phy settings change\n");
2628}
2629
2630/* This will reset the tigon3 PHY if there is no valid
2631 * link unless the FORCE argument is non-zero.
2632 */
2633static int tg3_phy_reset(struct tg3 *tp)
2634{
2635        u32 val, cpmuctrl;
2636        int err;
2637
2638        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2639                val = tr32(GRC_MISC_CFG);
2640                tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2641                udelay(40);
2642        }
2643        err  = tg3_readphy(tp, MII_BMSR, &val);
2644        err |= tg3_readphy(tp, MII_BMSR, &val);
2645        if (err != 0)
2646                return -EBUSY;
2647
2648        if (netif_running(tp->dev) && tp->link_up) {
2649                netif_carrier_off(tp->dev);
2650                tg3_link_report(tp);
2651        }
2652
2653        if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2654            tg3_asic_rev(tp) == ASIC_REV_5704 ||
2655            tg3_asic_rev(tp) == ASIC_REV_5705) {
2656                err = tg3_phy_reset_5703_4_5(tp);
2657                if (err)
2658                        return err;
2659                goto out;
2660        }
2661
2662        cpmuctrl = 0;
2663        if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2664            tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2665                cpmuctrl = tr32(TG3_CPMU_CTRL);
2666                if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2667                        tw32(TG3_CPMU_CTRL,
2668                             cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2669        }
2670
2671        err = tg3_bmcr_reset(tp);
2672        if (err)
2673                return err;
2674
2675        if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2676                val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2677                tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2678
2679                tw32(TG3_CPMU_CTRL, cpmuctrl);
2680        }
2681
2682        if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2683            tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2684                val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2685                if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2686                    CPMU_LSPD_1000MB_MACCLK_12_5) {
2687                        val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2688                        udelay(40);
2689                        tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2690                }
2691        }
2692
2693        if (tg3_flag(tp, 5717_PLUS) &&
2694            (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2695                return 0;
2696
2697        tg3_phy_apply_otp(tp);
2698
2699        if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2700                tg3_phy_toggle_apd(tp, true);
2701        else
2702                tg3_phy_toggle_apd(tp, false);
2703
2704out:
2705        if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2706            !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2707                tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2708                tg3_phydsp_write(tp, 0x000a, 0x0323);
2709                tg3_phy_toggle_auxctl_smdsp(tp, false);
2710        }
2711
2712        if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2713                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2714                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2715        }
2716
2717        if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2718                if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2719                        tg3_phydsp_write(tp, 0x000a, 0x310b);
2720                        tg3_phydsp_write(tp, 0x201f, 0x9506);
2721                        tg3_phydsp_write(tp, 0x401f, 0x14e2);
2722                        tg3_phy_toggle_auxctl_smdsp(tp, false);
2723                }
2724        } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2725                if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2726                        tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2727                        if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2728                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2729                                tg3_writephy(tp, MII_TG3_TEST1,
2730                                             MII_TG3_TEST1_TRIM_EN | 0x4);
2731                        } else
2732                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2733
2734                        tg3_phy_toggle_auxctl_smdsp(tp, false);
2735                }
2736        }
2737
2738        /* Set Extended packet length bit (bit 14) on all chips that */
2739        /* support jumbo frames */
2740        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2741                /* Cannot do read-modify-write on 5401 */
2742                tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2743        } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2744                /* Set bit 14 with read-modify-write to preserve other bits */
2745                err = tg3_phy_auxctl_read(tp,
2746                                          MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2747                if (!err)
2748                        tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2749                                           val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2750        }
2751
2752        /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2753         * jumbo frames transmission.
2754         */
2755        if (tg3_flag(tp, JUMBO_CAPABLE)) {
2756                if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2757                        tg3_writephy(tp, MII_TG3_EXT_CTRL,
2758                                     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2759        }
2760
2761        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2762                /* adjust output voltage */
2763                tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2764        }
2765
2766        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2767                tg3_phydsp_write(tp, 0xffb, 0x4000);
2768
2769        tg3_phy_toggle_automdix(tp, true);
2770        tg3_phy_set_wirespeed(tp);
2771        return 0;
2772}
2773
2774#define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2775#define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2776#define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2777                                          TG3_GPIO_MSG_NEED_VAUX)
2778#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2779        ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2780         (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2781         (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2782         (TG3_GPIO_MSG_DRVR_PRES << 12))
2783
2784#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2785        ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2786         (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2787         (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2788         (TG3_GPIO_MSG_NEED_VAUX << 12))
2789
2790static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2791{
2792        u32 status, shift;
2793
2794        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2795            tg3_asic_rev(tp) == ASIC_REV_5719)
2796                status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2797        else
2798                status = tr32(TG3_CPMU_DRV_STATUS);
2799
2800        shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2801        status &= ~(TG3_GPIO_MSG_MASK << shift);
2802        status |= (newstat << shift);
2803
2804        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2805            tg3_asic_rev(tp) == ASIC_REV_5719)
2806                tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2807        else
2808                tw32(TG3_CPMU_DRV_STATUS, status);
2809
2810        return status >> TG3_APE_GPIO_MSG_SHIFT;
2811}
2812
2813static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2814{
2815        if (!tg3_flag(tp, IS_NIC))
2816                return 0;
2817
2818        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2819            tg3_asic_rev(tp) == ASIC_REV_5719 ||
2820            tg3_asic_rev(tp) == ASIC_REV_5720) {
2821                if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2822                        return -EIO;
2823
2824                tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2825
2826                tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2827                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2828
2829                tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2830        } else {
2831                tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2832                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2833        }
2834
2835        return 0;
2836}
2837
2838static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2839{
2840        u32 grc_local_ctrl;
2841
2842        if (!tg3_flag(tp, IS_NIC) ||
2843            tg3_asic_rev(tp) == ASIC_REV_5700 ||
2844            tg3_asic_rev(tp) == ASIC_REV_5701)
2845                return;
2846
2847        grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2848
2849        tw32_wait_f(GRC_LOCAL_CTRL,
2850                    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2851                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2852
2853        tw32_wait_f(GRC_LOCAL_CTRL,
2854                    grc_local_ctrl,
2855                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2856
2857        tw32_wait_f(GRC_LOCAL_CTRL,
2858                    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2859                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2860}
2861
2862static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2863{
2864        if (!tg3_flag(tp, IS_NIC))
2865                return;
2866
2867        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2868            tg3_asic_rev(tp) == ASIC_REV_5701) {
2869                tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2870                            (GRC_LCLCTRL_GPIO_OE0 |
2871                             GRC_LCLCTRL_GPIO_OE1 |
2872                             GRC_LCLCTRL_GPIO_OE2 |
2873                             GRC_LCLCTRL_GPIO_OUTPUT0 |
2874                             GRC_LCLCTRL_GPIO_OUTPUT1),
2875                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2876        } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2877                   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2878                /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2879                u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2880                                     GRC_LCLCTRL_GPIO_OE1 |
2881                                     GRC_LCLCTRL_GPIO_OE2 |
2882                                     GRC_LCLCTRL_GPIO_OUTPUT0 |
2883                                     GRC_LCLCTRL_GPIO_OUTPUT1 |
2884                                     tp->grc_local_ctrl;
2885                tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2886                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2887
2888                grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2889                tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2890                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2891
2892                grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2893                tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2894                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2895        } else {
2896                u32 no_gpio2;
2897                u32 grc_local_ctrl = 0;
2898
2899                /* Workaround to prevent overdrawing Amps. */
2900                if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2901                        grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2902                        tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2903                                    grc_local_ctrl,
2904                                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2905                }
2906
2907                /* On 5753 and variants, GPIO2 cannot be used. */
2908                no_gpio2 = tp->nic_sram_data_cfg &
2909                           NIC_SRAM_DATA_CFG_NO_GPIO2;
2910
2911                grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2912                                  GRC_LCLCTRL_GPIO_OE1 |
2913                                  GRC_LCLCTRL_GPIO_OE2 |
2914                                  GRC_LCLCTRL_GPIO_OUTPUT1 |
2915                                  GRC_LCLCTRL_GPIO_OUTPUT2;
2916                if (no_gpio2) {
2917                        grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2918                                            GRC_LCLCTRL_GPIO_OUTPUT2);
2919                }
2920                tw32_wait_f(GRC_LOCAL_CTRL,
2921                            tp->grc_local_ctrl | grc_local_ctrl,
2922                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2923
2924                grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2925
2926                tw32_wait_f(GRC_LOCAL_CTRL,
2927                            tp->grc_local_ctrl | grc_local_ctrl,
2928                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2929
2930                if (!no_gpio2) {
2931                        grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2932                        tw32_wait_f(GRC_LOCAL_CTRL,
2933                                    tp->grc_local_ctrl | grc_local_ctrl,
2934                                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2935                }
2936        }
2937}
2938
2939static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2940{
2941        u32 msg = 0;
2942
2943        /* Serialize power state transitions */
2944        if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2945                return;
2946
2947        if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2948                msg = TG3_GPIO_MSG_NEED_VAUX;
2949
2950        msg = tg3_set_function_status(tp, msg);
2951
2952        if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2953                goto done;
2954
2955        if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2956                tg3_pwrsrc_switch_to_vaux(tp);
2957        else
2958                tg3_pwrsrc_die_with_vmain(tp);
2959
2960done:
2961        tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2962}
2963
2964static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2965{
2966        bool need_vaux = false;
2967
2968        /* The GPIOs do something completely different on 57765. */
2969        if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2970                return;
2971
2972        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2973            tg3_asic_rev(tp) == ASIC_REV_5719 ||
2974            tg3_asic_rev(tp) == ASIC_REV_5720) {
2975                tg3_frob_aux_power_5717(tp, include_wol ?
2976                                        tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2977                return;
2978        }
2979
2980        if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2981                struct net_device *dev_peer;
2982
2983                dev_peer = pci_get_drvdata(tp->pdev_peer);
2984
2985                /* remove_one() may have been run on the peer. */
2986                if (dev_peer) {
2987                        struct tg3 *tp_peer = netdev_priv(dev_peer);
2988
2989                        if (tg3_flag(tp_peer, INIT_COMPLETE))
2990                                return;
2991
2992                        if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2993                            tg3_flag(tp_peer, ENABLE_ASF))
2994                                need_vaux = true;
2995                }
2996        }
2997
2998        if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2999            tg3_flag(tp, ENABLE_ASF))
3000                need_vaux = true;
3001
3002        if (need_vaux)
3003                tg3_pwrsrc_switch_to_vaux(tp);
3004        else
3005                tg3_pwrsrc_die_with_vmain(tp);
3006}
3007
3008static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3009{
3010        if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3011                return 1;
3012        else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3013                if (speed != SPEED_10)
3014                        return 1;
3015        } else if (speed == SPEED_10)
3016                return 1;
3017
3018        return 0;
3019}
3020
3021static bool tg3_phy_power_bug(struct tg3 *tp)
3022{
3023        switch (tg3_asic_rev(tp)) {
3024        case ASIC_REV_5700:
3025        case ASIC_REV_5704:
3026                return true;
3027        case ASIC_REV_5780:
3028                if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3029                        return true;
3030                return false;
3031        case ASIC_REV_5717:
3032                if (!tp->pci_fn)
3033                        return true;
3034                return false;
3035        case ASIC_REV_5719:
3036        case ASIC_REV_5720:
3037                if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3038                    !tp->pci_fn)
3039                        return true;
3040                return false;
3041        }
3042
3043        return false;
3044}
3045
3046static bool tg3_phy_led_bug(struct tg3 *tp)
3047{
3048        switch (tg3_asic_rev(tp)) {
3049        case ASIC_REV_5719:
3050        case ASIC_REV_5720:
3051                if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3052                    !tp->pci_fn)
3053                        return true;
3054                return false;
3055        }
3056
3057        return false;
3058}
3059
3060static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3061{
3062        u32 val;
3063
3064        if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3065                return;
3066
3067        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3068                if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3069                        u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3070                        u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3071
3072                        sg_dig_ctrl |=
3073                                SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3074                        tw32(SG_DIG_CTRL, sg_dig_ctrl);
3075                        tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3076                }
3077                return;
3078        }
3079
3080        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3081                tg3_bmcr_reset(tp);
3082                val = tr32(GRC_MISC_CFG);
3083                tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3084                udelay(40);
3085                return;
3086        } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3087                u32 phytest;
3088                if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3089                        u32 phy;
3090
3091                        tg3_writephy(tp, MII_ADVERTISE, 0);
3092                        tg3_writephy(tp, MII_BMCR,
3093                                     BMCR_ANENABLE | BMCR_ANRESTART);
3094
3095                        tg3_writephy(tp, MII_TG3_FET_TEST,
3096                                     phytest | MII_TG3_FET_SHADOW_EN);
3097                        if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3098                                phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3099                                tg3_writephy(tp,
3100                                             MII_TG3_FET_SHDW_AUXMODE4,
3101                                             phy);
3102                        }
3103                        tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3104                }
3105                return;
3106        } else if (do_low_power) {
3107                if (!tg3_phy_led_bug(tp))
3108                        tg3_writephy(tp, MII_TG3_EXT_CTRL,
3109                                     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3110
3111                val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3112                      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3113                      MII_TG3_AUXCTL_PCTL_VREG_11V;
3114                tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3115        }
3116
3117        /* The PHY should not be powered down on some chips because
3118         * of bugs.
3119         */
3120        if (tg3_phy_power_bug(tp))
3121                return;
3122
3123        if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3124            tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3125                val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3126                val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3127                val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3128                tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3129        }
3130
3131        tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3132}
3133
3134/* tp->lock is held. */
3135static int tg3_nvram_lock(struct tg3 *tp)
3136{
3137        if (tg3_flag(tp, NVRAM)) {
3138                int i;
3139
3140                if (tp->nvram_lock_cnt == 0) {
3141                        tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3142                        for (i = 0; i < 8000; i++) {
3143                                if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3144                                        break;
3145                                udelay(20);
3146                        }
3147                        if (i == 8000) {
3148                                tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3149                                return -ENODEV;
3150                        }
3151                }
3152                tp->nvram_lock_cnt++;
3153        }
3154        return 0;
3155}
3156
3157/* tp->lock is held. */
3158static void tg3_nvram_unlock(struct tg3 *tp)
3159{
3160        if (tg3_flag(tp, NVRAM)) {
3161                if (tp->nvram_lock_cnt > 0)
3162                        tp->nvram_lock_cnt--;
3163                if (tp->nvram_lock_cnt == 0)
3164                        tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3165        }
3166}
3167
3168/* tp->lock is held. */
3169static void tg3_enable_nvram_access(struct tg3 *tp)
3170{
3171        if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3172                u32 nvaccess = tr32(NVRAM_ACCESS);
3173
3174                tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3175        }
3176}
3177
3178/* tp->lock is held. */
3179static void tg3_disable_nvram_access(struct tg3 *tp)
3180{
3181        if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3182                u32 nvaccess = tr32(NVRAM_ACCESS);
3183
3184                tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3185        }
3186}
3187
3188static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3189                                        u32 offset, u32 *val)
3190{
3191        u32 tmp;
3192        int i;
3193
3194        if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3195                return -EINVAL;
3196
3197        tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3198                                        EEPROM_ADDR_DEVID_MASK |
3199                                        EEPROM_ADDR_READ);
3200        tw32(GRC_EEPROM_ADDR,
3201             tmp |
3202             (0 << EEPROM_ADDR_DEVID_SHIFT) |
3203             ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3204              EEPROM_ADDR_ADDR_MASK) |
3205             EEPROM_ADDR_READ | EEPROM_ADDR_START);
3206
3207        for (i = 0; i < 1000; i++) {
3208                tmp = tr32(GRC_EEPROM_ADDR);
3209
3210                if (tmp & EEPROM_ADDR_COMPLETE)
3211                        break;
3212                msleep(1);
3213        }
3214        if (!(tmp & EEPROM_ADDR_COMPLETE))
3215                return -EBUSY;
3216
3217        tmp = tr32(GRC_EEPROM_DATA);
3218
3219        /*
3220         * The data will always be opposite the native endian
3221         * format.  Perform a blind byteswap to compensate.
3222         */
3223        *val = swab32(tmp);
3224
3225        return 0;
3226}
3227
3228#define NVRAM_CMD_TIMEOUT 5000
3229
3230static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3231{
3232        int i;
3233
3234        tw32(NVRAM_CMD, nvram_cmd);
3235        for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3236                usleep_range(10, 40);
3237                if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3238                        udelay(10);
3239                        break;
3240                }
3241        }
3242
3243        if (i == NVRAM_CMD_TIMEOUT)
3244                return -EBUSY;
3245
3246        return 0;
3247}
3248
3249static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3250{
3251        if (tg3_flag(tp, NVRAM) &&
3252            tg3_flag(tp, NVRAM_BUFFERED) &&
3253            tg3_flag(tp, FLASH) &&
3254            !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3255            (tp->nvram_jedecnum == JEDEC_ATMEL))
3256
3257                addr = ((addr / tp->nvram_pagesize) <<
3258                        ATMEL_AT45DB0X1B_PAGE_POS) +
3259                       (addr % tp->nvram_pagesize);
3260
3261        return addr;
3262}
3263
3264static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3265{
3266        if (tg3_flag(tp, NVRAM) &&
3267            tg3_flag(tp, NVRAM_BUFFERED) &&
3268            tg3_flag(tp, FLASH) &&
3269            !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3270            (tp->nvram_jedecnum == JEDEC_ATMEL))
3271
3272                addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3273                        tp->nvram_pagesize) +
3274                       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3275
3276        return addr;
3277}
3278
3279/* NOTE: Data read in from NVRAM is byteswapped according to
3280 * the byteswapping settings for all other register accesses.
3281 * tg3 devices are BE devices, so on a BE machine, the data
3282 * returned will be exactly as it is seen in NVRAM.  On a LE
3283 * machine, the 32-bit value will be byteswapped.
3284 */
3285static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3286{
3287        int ret;
3288
3289        if (!tg3_flag(tp, NVRAM))
3290                return tg3_nvram_read_using_eeprom(tp, offset, val);
3291
3292        offset = tg3_nvram_phys_addr(tp, offset);
3293
3294        if (offset > NVRAM_ADDR_MSK)
3295                return -EINVAL;
3296
3297        ret = tg3_nvram_lock(tp);
3298        if (ret)
3299                return ret;
3300
3301        tg3_enable_nvram_access(tp);
3302
3303        tw32(NVRAM_ADDR, offset);
3304        ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3305                NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3306
3307        if (ret == 0)
3308                *val = tr32(NVRAM_RDDATA);
3309
3310        tg3_disable_nvram_access(tp);
3311
3312        tg3_nvram_unlock(tp);
3313
3314        return ret;
3315}
3316
3317/* Ensures NVRAM data is in bytestream format. */
3318static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3319{
3320        u32 v;
3321        int res = tg3_nvram_read(tp, offset, &v);
3322        if (!res)
3323                *val = cpu_to_be32(v);
3324        return res;
3325}
3326
3327static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3328                                    u32 offset, u32 len, u8 *buf)
3329{
3330        int i, j, rc = 0;
3331        u32 val;
3332
3333        for (i = 0; i < len; i += 4) {
3334                u32 addr;
3335                __be32 data;
3336
3337                addr = offset + i;
3338
3339                memcpy(&data, buf + i, 4);
3340
3341                /*
3342                 * The SEEPROM interface expects the data to always be opposite
3343                 * the native endian format.  We accomplish this by reversing
3344                 * all the operations that would have been performed on the
3345                 * data from a call to tg3_nvram_read_be32().
3346                 */
3347                tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3348
3349                val = tr32(GRC_EEPROM_ADDR);
3350                tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3351
3352                val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3353                        EEPROM_ADDR_READ);
3354                tw32(GRC_EEPROM_ADDR, val |
3355                        (0 << EEPROM_ADDR_DEVID_SHIFT) |
3356                        (addr & EEPROM_ADDR_ADDR_MASK) |
3357                        EEPROM_ADDR_START |
3358                        EEPROM_ADDR_WRITE);
3359
3360                for (j = 0; j < 1000; j++) {
3361                        val = tr32(GRC_EEPROM_ADDR);
3362
3363                        if (val & EEPROM_ADDR_COMPLETE)
3364                                break;
3365                        msleep(1);
3366                }
3367                if (!(val & EEPROM_ADDR_COMPLETE)) {
3368                        rc = -EBUSY;
3369                        break;
3370                }
3371        }
3372
3373        return rc;
3374}
3375
3376/* offset and length are dword aligned */
3377static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3378                u8 *buf)
3379{
3380        int ret = 0;
3381        u32 pagesize = tp->nvram_pagesize;
3382        u32 pagemask = pagesize - 1;
3383        u32 nvram_cmd;
3384        u8 *tmp;
3385
3386        tmp = kmalloc(pagesize, GFP_KERNEL);
3387        if (tmp == NULL)
3388                return -ENOMEM;
3389
3390        while (len) {
3391                int j;
3392                u32 phy_addr, page_off, size;
3393
3394                phy_addr = offset & ~pagemask;
3395
3396                for (j = 0; j < pagesize; j += 4) {
3397                        ret = tg3_nvram_read_be32(tp, phy_addr + j,
3398                                                  (__be32 *) (tmp + j));
3399                        if (ret)
3400                                break;
3401                }
3402                if (ret)
3403                        break;
3404
3405                page_off = offset & pagemask;
3406                size = pagesize;
3407                if (len < size)
3408                        size = len;
3409
3410                len -= size;
3411
3412                memcpy(tmp + page_off, buf, size);
3413
3414                offset = offset + (pagesize - page_off);
3415
3416                tg3_enable_nvram_access(tp);
3417
3418                /*
3419                 * Before we can erase the flash page, we need
3420                 * to issue a special "write enable" command.
3421                 */
3422                nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3423
3424                if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3425                        break;
3426
3427                /* Erase the target page */
3428                tw32(NVRAM_ADDR, phy_addr);
3429
3430                nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3431                        NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3432
3433                if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3434                        break;
3435
3436                /* Issue another write enable to start the write. */
3437                nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3438
3439                if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3440                        break;
3441
3442                for (j = 0; j < pagesize; j += 4) {
3443                        __be32 data;
3444
3445                        data = *((__be32 *) (tmp + j));
3446
3447                        tw32(NVRAM_WRDATA, be32_to_cpu(data));
3448
3449                        tw32(NVRAM_ADDR, phy_addr + j);
3450
3451                        nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3452                                NVRAM_CMD_WR;
3453
3454                        if (j == 0)
3455                                nvram_cmd |= NVRAM_CMD_FIRST;
3456                        else if (j == (pagesize - 4))
3457                                nvram_cmd |= NVRAM_CMD_LAST;
3458
3459                        ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3460                        if (ret)
3461                                break;
3462                }
3463                if (ret)
3464                        break;
3465        }
3466
3467        nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3468        tg3_nvram_exec_cmd(tp, nvram_cmd);
3469
3470        kfree(tmp);
3471
3472        return ret;
3473}
3474
3475/* offset and length are dword aligned */
3476static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3477                u8 *buf)
3478{
3479        int i, ret = 0;
3480
3481        for (i = 0; i < len; i += 4, offset += 4) {
3482                u32 page_off, phy_addr, nvram_cmd;
3483                __be32 data;
3484
3485                memcpy(&data, buf + i, 4);
3486                tw32(NVRAM_WRDATA, be32_to_cpu(data));
3487
3488                page_off = offset % tp->nvram_pagesize;
3489
3490                phy_addr = tg3_nvram_phys_addr(tp, offset);
3491
3492                nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3493
3494                if (page_off == 0 || i == 0)
3495                        nvram_cmd |= NVRAM_CMD_FIRST;
3496                if (page_off == (tp->nvram_pagesize - 4))
3497                        nvram_cmd |= NVRAM_CMD_LAST;
3498
3499                if (i == (len - 4))
3500                        nvram_cmd |= NVRAM_CMD_LAST;
3501
3502                if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3503                    !tg3_flag(tp, FLASH) ||
3504                    !tg3_flag(tp, 57765_PLUS))
3505                        tw32(NVRAM_ADDR, phy_addr);
3506
3507                if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3508                    !tg3_flag(tp, 5755_PLUS) &&
3509                    (tp->nvram_jedecnum == JEDEC_ST) &&
3510                    (nvram_cmd & NVRAM_CMD_FIRST)) {
3511                        u32 cmd;
3512
3513                        cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3514                        ret = tg3_nvram_exec_cmd(tp, cmd);
3515                        if (ret)
3516                                break;
3517                }
3518                if (!tg3_flag(tp, FLASH)) {
3519                        /* We always do complete word writes to eeprom. */
3520                        nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3521                }
3522
3523                ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3524                if (ret)
3525                        break;
3526        }
3527        return ret;
3528}
3529
3530/* offset and length are dword aligned */
3531static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3532{
3533        int ret;
3534
3535        if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3536                tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3537                       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3538                udelay(40);
3539        }
3540
3541        if (!tg3_flag(tp, NVRAM)) {
3542                ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3543        } else {
3544                u32 grc_mode;
3545
3546                ret = tg3_nvram_lock(tp);
3547                if (ret)
3548                        return ret;
3549
3550                tg3_enable_nvram_access(tp);
3551                if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3552                        tw32(NVRAM_WRITE1, 0x406);
3553
3554                grc_mode = tr32(GRC_MODE);
3555                tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3556
3557                if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3558                        ret = tg3_nvram_write_block_buffered(tp, offset, len,
3559                                buf);
3560                } else {
3561                        ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3562                                buf);
3563                }
3564
3565                grc_mode = tr32(GRC_MODE);
3566                tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3567
3568                tg3_disable_nvram_access(tp);
3569                tg3_nvram_unlock(tp);
3570        }
3571
3572        if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3573                tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3574                udelay(40);
3575        }
3576
3577        return ret;
3578}
3579
3580#define RX_CPU_SCRATCH_BASE     0x30000
3581#define RX_CPU_SCRATCH_SIZE     0x04000
3582#define TX_CPU_SCRATCH_BASE     0x34000
3583#define TX_CPU_SCRATCH_SIZE     0x04000
3584
3585/* tp->lock is held. */
3586static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3587{
3588        int i;
3589        const int iters = 10000;
3590
3591        for (i = 0; i < iters; i++) {
3592                tw32(cpu_base + CPU_STATE, 0xffffffff);
3593                tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3594                if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3595                        break;
3596                if (pci_channel_offline(tp->pdev))
3597                        return -EBUSY;
3598        }
3599
3600        return (i == iters) ? -EBUSY : 0;
3601}
3602
3603/* tp->lock is held. */
3604static int tg3_rxcpu_pause(struct tg3 *tp)
3605{
3606        int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3607
3608        tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3609        tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3610        udelay(10);
3611
3612        return rc;
3613}
3614
3615/* tp->lock is held. */
3616static int tg3_txcpu_pause(struct tg3 *tp)
3617{
3618        return tg3_pause_cpu(tp, TX_CPU_BASE);
3619}
3620
3621/* tp->lock is held. */
3622static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3623{
3624        tw32(cpu_base + CPU_STATE, 0xffffffff);
3625        tw32_f(cpu_base + CPU_MODE,  0x00000000);
3626}
3627
3628/* tp->lock is held. */
3629static void tg3_rxcpu_resume(struct tg3 *tp)
3630{
3631        tg3_resume_cpu(tp, RX_CPU_BASE);
3632}
3633
3634/* tp->lock is held. */
3635static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3636{
3637        int rc;
3638
3639        BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3640
3641        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3642                u32 val = tr32(GRC_VCPU_EXT_CTRL);
3643
3644                tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3645                return 0;
3646        }
3647        if (cpu_base == RX_CPU_BASE) {
3648                rc = tg3_rxcpu_pause(tp);
3649        } else {
3650                /*
3651                 * There is only an Rx CPU for the 5750 derivative in the
3652                 * BCM4785.
3653                 */
3654                if (tg3_flag(tp, IS_SSB_CORE))
3655                        return 0;
3656
3657                rc = tg3_txcpu_pause(tp);
3658        }
3659
3660        if (rc) {
3661                netdev_err(tp->dev, "%s timed out, %s CPU\n",
3662                           __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3663                return -ENODEV;
3664        }
3665
3666        /* Clear firmware's nvram arbitration. */
3667        if (tg3_flag(tp, NVRAM))
3668                tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3669        return 0;
3670}
3671
3672static int tg3_fw_data_len(struct tg3 *tp,
3673                           const struct tg3_firmware_hdr *fw_hdr)
3674{
3675        int fw_len;
3676
3677        /* Non fragmented firmware have one firmware header followed by a
3678         * contiguous chunk of data to be written. The length field in that
3679         * header is not the length of data to be written but the complete
3680         * length of the bss. The data length is determined based on
3681         * tp->fw->size minus headers.
3682         *
3683         * Fragmented firmware have a main header followed by multiple
3684         * fragments. Each fragment is identical to non fragmented firmware
3685         * with a firmware header followed by a contiguous chunk of data. In
3686         * the main header, the length field is unused and set to 0xffffffff.
3687         * In each fragment header the length is the entire size of that
3688         * fragment i.e. fragment data + header length. Data length is
3689         * therefore length field in the header minus TG3_FW_HDR_LEN.
3690         */
3691        if (tp->fw_len == 0xffffffff)
3692                fw_len = be32_to_cpu(fw_hdr->len);
3693        else
3694                fw_len = tp->fw->size;
3695
3696        return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3697}
3698
3699/* tp->lock is held. */
3700static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3701                                 u32 cpu_scratch_base, int cpu_scratch_size,
3702                                 const struct tg3_firmware_hdr *fw_hdr)
3703{
3704        int err, i;
3705        void (*write_op)(struct tg3 *, u32, u32);
3706        int total_len = tp->fw->size;
3707
3708        if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3709                netdev_err(tp->dev,
3710                           "%s: Trying to load TX cpu firmware which is 5705\n",
3711                           __func__);
3712                return -EINVAL;
3713        }
3714
3715        if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3716                write_op = tg3_write_mem;
3717        else
3718                write_op = tg3_write_indirect_reg32;
3719
3720        if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3721                /* It is possible that bootcode is still loading at this point.
3722                 * Get the nvram lock first before halting the cpu.
3723                 */
3724                int lock_err = tg3_nvram_lock(tp);
3725                err = tg3_halt_cpu(tp, cpu_base);
3726                if (!lock_err)
3727                        tg3_nvram_unlock(tp);
3728                if (err)
3729                        goto out;
3730
3731                for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3732                        write_op(tp, cpu_scratch_base + i, 0);
3733                tw32(cpu_base + CPU_STATE, 0xffffffff);
3734                tw32(cpu_base + CPU_MODE,
3735                     tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3736        } else {
3737                /* Subtract additional main header for fragmented firmware and
3738                 * advance to the first fragment
3739                 */
3740                total_len -= TG3_FW_HDR_LEN;
3741                fw_hdr++;
3742        }
3743
3744        do {
3745                u32 *fw_data = (u32 *)(fw_hdr + 1);
3746                for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3747                        write_op(tp, cpu_scratch_base +
3748                                     (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3749                                     (i * sizeof(u32)),
3750                                 be32_to_cpu(fw_data[i]));
3751
3752                total_len -= be32_to_cpu(fw_hdr->len);
3753
3754                /* Advance to next fragment */
3755                fw_hdr = (struct tg3_firmware_hdr *)
3756                         ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3757        } while (total_len > 0);
3758
3759        err = 0;
3760
3761out:
3762        return err;
3763}
3764
3765/* tp->lock is held. */
3766static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3767{
3768        int i;
3769        const int iters = 5;
3770
3771        tw32(cpu_base + CPU_STATE, 0xffffffff);
3772        tw32_f(cpu_base + CPU_PC, pc);
3773
3774        for (i = 0; i < iters; i++) {
3775                if (tr32(cpu_base + CPU_PC) == pc)
3776                        break;
3777                tw32(cpu_base + CPU_STATE, 0xffffffff);
3778                tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3779                tw32_f(cpu_base + CPU_PC, pc);
3780                udelay(1000);
3781        }
3782
3783        return (i == iters) ? -EBUSY : 0;
3784}
3785
3786/* tp->lock is held. */
3787static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3788{
3789        const struct tg3_firmware_hdr *fw_hdr;
3790        int err;
3791
3792        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3793
3794        /* Firmware blob starts with version numbers, followed by
3795           start address and length. We are setting complete length.
3796           length = end_address_of_bss - start_address_of_text.
3797           Remainder is the blob to be loaded contiguously
3798           from start address. */
3799
3800        err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3801                                    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3802                                    fw_hdr);
3803        if (err)
3804                return err;
3805
3806        err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3807                                    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3808                                    fw_hdr);
3809        if (err)
3810                return err;
3811
3812        /* Now startup only the RX cpu. */
3813        err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3814                                       be32_to_cpu(fw_hdr->base_addr));
3815        if (err) {
3816                netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3817                           "should be %08x\n", __func__,
3818                           tr32(RX_CPU_BASE + CPU_PC),
3819                                be32_to_cpu(fw_hdr->base_addr));
3820                return -ENODEV;
3821        }
3822
3823        tg3_rxcpu_resume(tp);
3824
3825        return 0;
3826}
3827
3828static int tg3_validate_rxcpu_state(struct tg3 *tp)
3829{
3830        const int iters = 1000;
3831        int i;
3832        u32 val;
3833
3834        /* Wait for boot code to complete initialization and enter service
3835         * loop. It is then safe to download service patches
3836         */
3837        for (i = 0; i < iters; i++) {
3838                if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3839                        break;
3840
3841                udelay(10);
3842        }
3843
3844        if (i == iters) {
3845                netdev_err(tp->dev, "Boot code not ready for service patches\n");
3846                return -EBUSY;
3847        }
3848
3849        val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3850        if (val & 0xff) {
3851                netdev_warn(tp->dev,
3852                            "Other patches exist. Not downloading EEE patch\n");
3853                return -EEXIST;
3854        }
3855
3856        return 0;
3857}
3858
3859/* tp->lock is held. */
3860static void tg3_load_57766_firmware(struct tg3 *tp)
3861{
3862        struct tg3_firmware_hdr *fw_hdr;
3863
3864        if (!tg3_flag(tp, NO_NVRAM))
3865                return;
3866
3867        if (tg3_validate_rxcpu_state(tp))
3868                return;
3869
3870        if (!tp->fw)
3871                return;
3872
3873        /* This firmware blob has a different format than older firmware
3874         * releases as given below. The main difference is we have fragmented
3875         * data to be written to non-contiguous locations.
3876         *
3877         * In the beginning we have a firmware header identical to other
3878         * firmware which consists of version, base addr and length. The length
3879         * here is unused and set to 0xffffffff.
3880         *
3881         * This is followed by a series of firmware fragments which are
3882         * individually identical to previous firmware. i.e. they have the
3883         * firmware header and followed by data for that fragment. The version
3884         * field of the individual fragment header is unused.
3885         */
3886
3887        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3888        if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3889                return;
3890
3891        if (tg3_rxcpu_pause(tp))
3892                return;
3893
3894        /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3895        tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3896
3897        tg3_rxcpu_resume(tp);
3898}
3899
3900/* tp->lock is held. */
3901static int tg3_load_tso_firmware(struct tg3 *tp)
3902{
3903        const struct tg3_firmware_hdr *fw_hdr;
3904        unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3905        int err;
3906
3907        if (!tg3_flag(tp, FW_TSO))
3908                return 0;
3909
3910        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3911
3912        /* Firmware blob starts with version numbers, followed by
3913           start address and length. We are setting complete length.
3914           length = end_address_of_bss - start_address_of_text.
3915           Remainder is the blob to be loaded contiguously
3916           from start address. */
3917
3918        cpu_scratch_size = tp->fw_len;
3919
3920        if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3921                cpu_base = RX_CPU_BASE;
3922                cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3923        } else {
3924                cpu_base = TX_CPU_BASE;
3925                cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3926                cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3927        }
3928
3929        err = tg3_load_firmware_cpu(tp, cpu_base,
3930                                    cpu_scratch_base, cpu_scratch_size,
3931                                    fw_hdr);
3932        if (err)
3933                return err;
3934
3935        /* Now startup the cpu. */
3936        err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3937                                       be32_to_cpu(fw_hdr->base_addr));
3938        if (err) {
3939                netdev_err(tp->dev,
3940                           "%s fails to set CPU PC, is %08x should be %08x\n",
3941                           __func__, tr32(cpu_base + CPU_PC),
3942                           be32_to_cpu(fw_hdr->base_addr));
3943                return -ENODEV;
3944        }
3945
3946        tg3_resume_cpu(tp, cpu_base);
3947        return 0;
3948}
3949
3950/* tp->lock is held. */
3951static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index)
3952{
3953        u32 addr_high, addr_low;
3954
3955        addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3956        addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3957                    (mac_addr[4] <<  8) | mac_addr[5]);
3958
3959        if (index < 4) {
3960                tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3961                tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3962        } else {
3963                index -= 4;
3964                tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3965                tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3966        }
3967}
3968
3969/* tp->lock is held. */
3970static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3971{
3972        u32 addr_high;
3973        int i;
3974
3975        for (i = 0; i < 4; i++) {
3976                if (i == 1 && skip_mac_1)
3977                        continue;
3978                __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3979        }
3980
3981        if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3982            tg3_asic_rev(tp) == ASIC_REV_5704) {
3983                for (i = 4; i < 16; i++)
3984                        __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3985        }
3986
3987        addr_high = (tp->dev->dev_addr[0] +
3988                     tp->dev->dev_addr[1] +
3989                     tp->dev->dev_addr[2] +
3990                     tp->dev->dev_addr[3] +
3991                     tp->dev->dev_addr[4] +
3992                     tp->dev->dev_addr[5]) &
3993                TX_BACKOFF_SEED_MASK;
3994        tw32(MAC_TX_BACKOFF_SEED, addr_high);
3995}
3996
3997static void tg3_enable_register_access(struct tg3 *tp)
3998{
3999        /*
4000         * Make sure register accesses (indirect or otherwise) will function
4001         * correctly.
4002         */
4003        pci_write_config_dword(tp->pdev,
4004                               TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
4005}
4006
4007static int tg3_power_up(struct tg3 *tp)
4008{
4009        int err;
4010
4011        tg3_enable_register_access(tp);
4012
4013        err = pci_set_power_state(tp->pdev, PCI_D0);
4014        if (!err) {
4015                /* Switch out of Vaux if it is a NIC */
4016                tg3_pwrsrc_switch_to_vmain(tp);
4017        } else {
4018                netdev_err(tp->dev, "Transition to D0 failed\n");
4019        }
4020
4021        return err;
4022}
4023
4024static int tg3_setup_phy(struct tg3 *, bool);
4025
4026static int tg3_power_down_prepare(struct tg3 *tp)
4027{
4028        u32 misc_host_ctrl;
4029        bool device_should_wake, do_low_power;
4030
4031        tg3_enable_register_access(tp);
4032
4033        /* Restore the CLKREQ setting. */
4034        if (tg3_flag(tp, CLKREQ_BUG))
4035                pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4036                                         PCI_EXP_LNKCTL_CLKREQ_EN);
4037
4038        misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4039        tw32(TG3PCI_MISC_HOST_CTRL,
4040             misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4041
4042        device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4043                             tg3_flag(tp, WOL_ENABLE);
4044
4045        if (tg3_flag(tp, USE_PHYLIB)) {
4046                do_low_power = false;
4047                if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4048                    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4049                        struct phy_device *phydev;
4050                        u32 phyid, advertising;
4051
4052                        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4053
4054                        tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4055
4056                        tp->link_config.speed = phydev->speed;
4057                        tp->link_config.duplex = phydev->duplex;
4058                        tp->link_config.autoneg = phydev->autoneg;
4059                        tp->link_config.advertising = phydev->advertising;
4060
4061                        advertising = ADVERTISED_TP |
4062                                      ADVERTISED_Pause |
4063                                      ADVERTISED_Autoneg |
4064                                      ADVERTISED_10baseT_Half;
4065
4066                        if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4067                                if (tg3_flag(tp, WOL_SPEED_100MB))
4068                                        advertising |=
4069                                                ADVERTISED_100baseT_Half |
4070                                                ADVERTISED_100baseT_Full |
4071                                                ADVERTISED_10baseT_Full;
4072                                else
4073                                        advertising |= ADVERTISED_10baseT_Full;
4074                        }
4075
4076                        phydev->advertising = advertising;
4077
4078                        phy_start_aneg(phydev);
4079
4080                        phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4081                        if (phyid != PHY_ID_BCMAC131) {
4082                                phyid &= PHY_BCM_OUI_MASK;
4083                                if (phyid == PHY_BCM_OUI_1 ||
4084                                    phyid == PHY_BCM_OUI_2 ||
4085                                    phyid == PHY_BCM_OUI_3)
4086                                        do_low_power = true;
4087                        }
4088                }
4089        } else {
4090                do_low_power = true;
4091
4092                if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4093                        tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4094
4095                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4096                        tg3_setup_phy(tp, false);
4097        }
4098
4099        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4100                u32 val;
4101
4102                val = tr32(GRC_VCPU_EXT_CTRL);
4103                tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4104        } else if (!tg3_flag(tp, ENABLE_ASF)) {
4105                int i;
4106                u32 val;
4107
4108                for (i = 0; i < 200; i++) {
4109                        tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4110                        if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4111                                break;
4112                        msleep(1);
4113                }
4114        }
4115        if (tg3_flag(tp, WOL_CAP))
4116                tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4117                                                     WOL_DRV_STATE_SHUTDOWN |
4118                                                     WOL_DRV_WOL |
4119                                                     WOL_SET_MAGIC_PKT);
4120
4121        if (device_should_wake) {
4122                u32 mac_mode;
4123
4124                if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4125                        if (do_low_power &&
4126                            !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4127                                tg3_phy_auxctl_write(tp,
4128                                               MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4129                                               MII_TG3_AUXCTL_PCTL_WOL_EN |
4130                                               MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4131                                               MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4132                                udelay(40);
4133                        }
4134
4135                        if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4136                                mac_mode = MAC_MODE_PORT_MODE_GMII;
4137                        else if (tp->phy_flags &
4138                                 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4139                                if (tp->link_config.active_speed == SPEED_1000)
4140                                        mac_mode = MAC_MODE_PORT_MODE_GMII;
4141                                else
4142                                        mac_mode = MAC_MODE_PORT_MODE_MII;
4143                        } else
4144                                mac_mode = MAC_MODE_PORT_MODE_MII;
4145
4146                        mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4147                        if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4148                                u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4149                                             SPEED_100 : SPEED_10;
4150                                if (tg3_5700_link_polarity(tp, speed))
4151                                        mac_mode |= MAC_MODE_LINK_POLARITY;
4152                                else
4153                                        mac_mode &= ~MAC_MODE_LINK_POLARITY;
4154                        }
4155                } else {
4156                        mac_mode = MAC_MODE_PORT_MODE_TBI;
4157                }
4158
4159                if (!tg3_flag(tp, 5750_PLUS))
4160                        tw32(MAC_LED_CTRL, tp->led_ctrl);
4161
4162                mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4163                if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4164                    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4165                        mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4166
4167                if (tg3_flag(tp, ENABLE_APE))
4168                        mac_mode |= MAC_MODE_APE_TX_EN |
4169                                    MAC_MODE_APE_RX_EN |
4170                                    MAC_MODE_TDE_ENABLE;
4171
4172                tw32_f(MAC_MODE, mac_mode);
4173                udelay(100);
4174
4175                tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4176                udelay(10);
4177        }
4178
4179        if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4180            (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4181             tg3_asic_rev(tp) == ASIC_REV_5701)) {
4182                u32 base_val;
4183
4184                base_val = tp->pci_clock_ctrl;
4185                base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4186                             CLOCK_CTRL_TXCLK_DISABLE);
4187
4188                tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4189                            CLOCK_CTRL_PWRDOWN_PLL133, 40);
4190        } else if (tg3_flag(tp, 5780_CLASS) ||
4191                   tg3_flag(tp, CPMU_PRESENT) ||
4192                   tg3_asic_rev(tp) == ASIC_REV_5906) {
4193                /* do nothing */
4194        } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4195                u32 newbits1, newbits2;
4196
4197                if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4198                    tg3_asic_rev(tp) == ASIC_REV_5701) {
4199                        newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4200                                    CLOCK_CTRL_TXCLK_DISABLE |
4201                                    CLOCK_CTRL_ALTCLK);
4202                        newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4203                } else if (tg3_flag(tp, 5705_PLUS)) {
4204                        newbits1 = CLOCK_CTRL_625_CORE;
4205                        newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4206                } else {
4207                        newbits1 = CLOCK_CTRL_ALTCLK;
4208                        newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4209                }
4210
4211                tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4212                            40);
4213
4214                tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4215                            40);
4216
4217                if (!tg3_flag(tp, 5705_PLUS)) {
4218                        u32 newbits3;
4219
4220                        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4221                            tg3_asic_rev(tp) == ASIC_REV_5701) {
4222                                newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4223                                            CLOCK_CTRL_TXCLK_DISABLE |
4224                                            CLOCK_CTRL_44MHZ_CORE);
4225                        } else {
4226                                newbits3 = CLOCK_CTRL_44MHZ_CORE;
4227                        }
4228
4229                        tw32_wait_f(TG3PCI_CLOCK_CTRL,
4230                                    tp->pci_clock_ctrl | newbits3, 40);
4231                }
4232        }
4233
4234        if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4235                tg3_power_down_phy(tp, do_low_power);
4236
4237        tg3_frob_aux_power(tp, true);
4238
4239        /* Workaround for unstable PLL clock */
4240        if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4241            ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4242             (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4243                u32 val = tr32(0x7d00);
4244
4245                val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4246                tw32(0x7d00, val);
4247                if (!tg3_flag(tp, ENABLE_ASF)) {
4248                        int err;
4249
4250                        err = tg3_nvram_lock(tp);
4251                        tg3_halt_cpu(tp, RX_CPU_BASE);
4252                        if (!err)
4253                                tg3_nvram_unlock(tp);
4254                }
4255        }
4256
4257        tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4258
4259        tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4260
4261        return 0;
4262}
4263
4264static void tg3_power_down(struct tg3 *tp)
4265{
4266        pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4267        pci_set_power_state(tp->pdev, PCI_D3hot);
4268}
4269
4270static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
4271{
4272        switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4273        case MII_TG3_AUX_STAT_10HALF:
4274                *speed = SPEED_10;
4275                *duplex = DUPLEX_HALF;
4276                break;
4277
4278        case MII_TG3_AUX_STAT_10FULL:
4279                *speed = SPEED_10;
4280                *duplex = DUPLEX_FULL;
4281                break;
4282
4283        case MII_TG3_AUX_STAT_100HALF:
4284                *speed = SPEED_100;
4285                *duplex = DUPLEX_HALF;
4286                break;
4287
4288        case MII_TG3_AUX_STAT_100FULL:
4289                *speed = SPEED_100;
4290                *duplex = DUPLEX_FULL;
4291                break;
4292
4293        case MII_TG3_AUX_STAT_1000HALF:
4294                *speed = SPEED_1000;
4295                *duplex = DUPLEX_HALF;
4296                break;
4297
4298        case MII_TG3_AUX_STAT_1000FULL:
4299                *speed = SPEED_1000;
4300                *duplex = DUPLEX_FULL;
4301                break;
4302
4303        default:
4304                if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4305                        *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4306                                 SPEED_10;
4307                        *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4308                                  DUPLEX_HALF;
4309                        break;
4310                }
4311                *speed = SPEED_UNKNOWN;
4312                *duplex = DUPLEX_UNKNOWN;
4313                break;
4314        }
4315}
4316
4317static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4318{
4319        int err = 0;
4320        u32 val, new_adv;
4321
4322        new_adv = ADVERTISE_CSMA;
4323        new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4324        new_adv |= mii_advertise_flowctrl(flowctrl);
4325
4326        err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4327        if (err)
4328                goto done;
4329
4330        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4331                new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4332
4333                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4334                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4335                        new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4336
4337                err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4338                if (err)
4339                        goto done;
4340        }
4341
4342        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4343                goto done;
4344
4345        tw32(TG3_CPMU_EEE_MODE,
4346             tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4347
4348        err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4349        if (!err) {
4350                u32 err2;
4351
4352                val = 0;
4353                /* Advertise 100-BaseTX EEE ability */
4354                if (advertise & ADVERTISED_100baseT_Full)
4355                        val |= MDIO_AN_EEE_ADV_100TX;
4356                /* Advertise 1000-BaseT EEE ability */
4357                if (advertise & ADVERTISED_1000baseT_Full)
4358                        val |= MDIO_AN_EEE_ADV_1000T;
4359
4360                if (!tp->eee.eee_enabled) {
4361                        val = 0;
4362                        tp->eee.advertised = 0;
4363                } else {
4364                        tp->eee.advertised = advertise &
4365                                             (ADVERTISED_100baseT_Full |
4366                                              ADVERTISED_1000baseT_Full);
4367                }
4368
4369                err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4370                if (err)
4371                        val = 0;
4372
4373                switch (tg3_asic_rev(tp)) {
4374                case ASIC_REV_5717:
4375                case ASIC_REV_57765:
4376                case ASIC_REV_57766:
4377                case ASIC_REV_5719:
4378                        /* If we advertised any eee advertisements above... */
4379                        if (val)
4380                                val = MII_TG3_DSP_TAP26_ALNOKO |
4381                                      MII_TG3_DSP_TAP26_RMRXSTO |
4382                                      MII_TG3_DSP_TAP26_OPCSINPT;
4383                        tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4384                        /* Fall through */
4385                case ASIC_REV_5720:
4386                case ASIC_REV_5762:
4387                        if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4388                                tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4389                                                 MII_TG3_DSP_CH34TP2_HIBW01);
4390                }
4391
4392                err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4393                if (!err)
4394                        err = err2;
4395        }
4396
4397done:
4398        return err;
4399}
4400
4401static void tg3_phy_copper_begin(struct tg3 *tp)
4402{
4403        if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4404            (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4405                u32 adv, fc;
4406
4407                if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4408                    !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4409                        adv = ADVERTISED_10baseT_Half |
4410                              ADVERTISED_10baseT_Full;
4411                        if (tg3_flag(tp, WOL_SPEED_100MB))
4412                                adv |= ADVERTISED_100baseT_Half |
4413                                       ADVERTISED_100baseT_Full;
4414                        if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4415                                if (!(tp->phy_flags &
4416                                      TG3_PHYFLG_DISABLE_1G_HD_ADV))
4417                                        adv |= ADVERTISED_1000baseT_Half;
4418                                adv |= ADVERTISED_1000baseT_Full;
4419                        }
4420
4421                        fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4422                } else {
4423                        adv = tp->link_config.advertising;
4424                        if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4425                                adv &= ~(ADVERTISED_1000baseT_Half |
4426                                         ADVERTISED_1000baseT_Full);
4427
4428                        fc = tp->link_config.flowctrl;
4429                }
4430
4431                tg3_phy_autoneg_cfg(tp, adv, fc);
4432
4433                if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4434                    (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4435                        /* Normally during power down we want to autonegotiate
4436                         * the lowest possible speed for WOL. However, to avoid
4437                         * link flap, we leave it untouched.
4438                         */
4439                        return;
4440                }
4441
4442                tg3_writephy(tp, MII_BMCR,
4443                             BMCR_ANENABLE | BMCR_ANRESTART);
4444        } else {
4445                int i;
4446                u32 bmcr, orig_bmcr;
4447
4448                tp->link_config.active_speed = tp->link_config.speed;
4449                tp->link_config.active_duplex = tp->link_config.duplex;
4450
4451                if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4452                        /* With autoneg disabled, 5715 only links up when the
4453                         * advertisement register has the configured speed
4454                         * enabled.
4455                         */
4456                        tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4457                }
4458
4459                bmcr = 0;
4460                switch (tp->link_config.speed) {
4461                default:
4462                case SPEED_10:
4463                        break;
4464
4465                case SPEED_100:
4466                        bmcr |= BMCR_SPEED100;
4467                        break;
4468
4469                case SPEED_1000:
4470                        bmcr |= BMCR_SPEED1000;
4471                        break;
4472                }
4473
4474                if (tp->link_config.duplex == DUPLEX_FULL)
4475                        bmcr |= BMCR_FULLDPLX;
4476
4477                if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4478                    (bmcr != orig_bmcr)) {
4479                        tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4480                        for (i = 0; i < 1500; i++) {
4481                                u32 tmp;
4482
4483                                udelay(10);
4484                                if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4485                                    tg3_readphy(tp, MII_BMSR, &tmp))
4486                                        continue;
4487                                if (!(tmp & BMSR_LSTATUS)) {
4488                                        udelay(40);
4489                                        break;
4490                                }
4491                        }
4492                        tg3_writephy(tp, MII_BMCR, bmcr);
4493                        udelay(40);
4494                }
4495        }
4496}
4497
4498static int tg3_phy_pull_config(struct tg3 *tp)
4499{
4500        int err;
4501        u32 val;
4502
4503        err = tg3_readphy(tp, MII_BMCR, &val);
4504        if (err)
4505                goto done;
4506
4507        if (!(val & BMCR_ANENABLE)) {
4508                tp->link_config.autoneg = AUTONEG_DISABLE;
4509                tp->link_config.advertising = 0;
4510                tg3_flag_clear(tp, PAUSE_AUTONEG);
4511
4512                err = -EIO;
4513
4514                switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4515                case 0:
4516                        if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4517                                goto done;
4518
4519                        tp->link_config.speed = SPEED_10;
4520                        break;
4521                case BMCR_SPEED100:
4522                        if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4523                                goto done;
4524
4525                        tp->link_config.speed = SPEED_100;
4526                        break;
4527                case BMCR_SPEED1000:
4528                        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4529                                tp->link_config.speed = SPEED_1000;
4530                                break;
4531                        }
4532                        /* Fall through */
4533                default:
4534                        goto done;
4535                }
4536
4537                if (val & BMCR_FULLDPLX)
4538                        tp->link_config.duplex = DUPLEX_FULL;
4539                else
4540                        tp->link_config.duplex = DUPLEX_HALF;
4541
4542                tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4543
4544                err = 0;
4545                goto done;
4546        }
4547
4548        tp->link_config.autoneg = AUTONEG_ENABLE;
4549        tp->link_config.advertising = ADVERTISED_Autoneg;
4550        tg3_flag_set(tp, PAUSE_AUTONEG);
4551
4552        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4553                u32 adv;
4554
4555                err = tg3_readphy(tp, MII_ADVERTISE, &val);
4556                if (err)
4557                        goto done;
4558
4559                adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4560                tp->link_config.advertising |= adv | ADVERTISED_TP;
4561
4562                tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4563        } else {
4564                tp->link_config.advertising |= ADVERTISED_FIBRE;
4565        }
4566
4567        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4568                u32 adv;
4569
4570                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4571                        err = tg3_readphy(tp, MII_CTRL1000, &val);
4572                        if (err)
4573                                goto done;
4574
4575                        adv = mii_ctrl1000_to_ethtool_adv_t(val);
4576                } else {
4577                        err = tg3_readphy(tp, MII_ADVERTISE, &val);
4578                        if (err)
4579                                goto done;
4580
4581                        adv = tg3_decode_flowctrl_1000X(val);
4582                        tp->link_config.flowctrl = adv;
4583
4584                        val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4585                        adv = mii_adv_to_ethtool_adv_x(val);
4586                }
4587
4588                tp->link_config.advertising |= adv;
4589        }
4590
4591done:
4592        return err;
4593}
4594
4595static int tg3_init_5401phy_dsp(struct tg3 *tp)
4596{
4597        int err;
4598
4599        /* Turn off tap power management. */
4600        /* Set Extended packet length bit */
4601        err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4602
4603        err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4604        err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4605        err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4606        err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4607        err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4608
4609        udelay(40);
4610
4611        return err;
4612}
4613
4614static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4615{
4616        struct ethtool_eee eee;
4617
4618        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4619                return true;
4620
4621        tg3_eee_pull_config(tp, &eee);
4622
4623        if (tp->eee.eee_enabled) {
4624                if (tp->eee.advertised != eee.advertised ||
4625                    tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4626                    tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4627                        return false;
4628        } else {
4629                /* EEE is disabled but we're advertising */
4630                if (eee.advertised)
4631                        return false;
4632        }
4633
4634        return true;
4635}
4636
4637static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4638{
4639        u32 advmsk, tgtadv, advertising;
4640
4641        advertising = tp->link_config.advertising;
4642        tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4643
4644        advmsk = ADVERTISE_ALL;
4645        if (tp->link_config.active_duplex == DUPLEX_FULL) {
4646                tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4647                advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4648        }
4649
4650        if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4651                return false;
4652
4653        if ((*lcladv & advmsk) != tgtadv)
4654                return false;
4655
4656        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4657                u32 tg3_ctrl;
4658
4659                tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4660
4661                if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4662                        return false;
4663
4664                if (tgtadv &&
4665                    (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4666                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4667                        tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4668                        tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4669                                     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4670                } else {
4671                        tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4672                }
4673
4674                if (tg3_ctrl != tgtadv)
4675                        return false;
4676        }
4677
4678        return true;
4679}
4680
4681static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4682{
4683        u32 lpeth = 0;
4684
4685        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4686                u32 val;
4687
4688                if (tg3_readphy(tp, MII_STAT1000, &val))
4689                        return false;
4690
4691                lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4692        }
4693
4694        if (tg3_readphy(tp, MII_LPA, rmtadv))
4695                return false;
4696
4697        lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4698        tp->link_config.rmt_adv = lpeth;
4699
4700        return true;
4701}
4702
4703static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4704{
4705        if (curr_link_up != tp->link_up) {
4706                if (curr_link_up) {
4707                        netif_carrier_on(tp->dev);
4708                } else {
4709                        netif_carrier_off(tp->dev);
4710                        if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4711                                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4712                }
4713
4714                tg3_link_report(tp);
4715                return true;
4716        }
4717
4718        return false;
4719}
4720
4721static void tg3_clear_mac_status(struct tg3 *tp)
4722{
4723        tw32(MAC_EVENT, 0);
4724
4725        tw32_f(MAC_STATUS,
4726               MAC_STATUS_SYNC_CHANGED |
4727               MAC_STATUS_CFG_CHANGED |
4728               MAC_STATUS_MI_COMPLETION |
4729               MAC_STATUS_LNKSTATE_CHANGED);
4730        udelay(40);
4731}
4732
4733static void tg3_setup_eee(struct tg3 *tp)
4734{
4735        u32 val;
4736
4737        val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4738              TG3_CPMU_EEE_LNKIDL_UART_IDL;
4739        if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4740                val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4741
4742        tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4743
4744        tw32_f(TG3_CPMU_EEE_CTRL,
4745               TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4746
4747        val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4748              (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4749              TG3_CPMU_EEEMD_LPI_IN_RX |
4750              TG3_CPMU_EEEMD_EEE_ENABLE;
4751
4752        if (tg3_asic_rev(tp) != ASIC_REV_5717)
4753                val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4754
4755        if (tg3_flag(tp, ENABLE_APE))
4756                val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4757
4758        tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4759
4760        tw32_f(TG3_CPMU_EEE_DBTMR1,
4761               TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4762               (tp->eee.tx_lpi_timer & 0xffff));
4763
4764        tw32_f(TG3_CPMU_EEE_DBTMR2,
4765               TG3_CPMU_DBTMR2_APE_TX_2047US |
4766               TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4767}
4768
4769static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4770{
4771        bool current_link_up;
4772        u32 bmsr, val;
4773        u32 lcl_adv, rmt_adv;
4774        u16 current_speed;
4775        u8 current_duplex;
4776        int i, err;
4777
4778        tg3_clear_mac_status(tp);
4779
4780        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4781                tw32_f(MAC_MI_MODE,
4782                     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4783                udelay(80);
4784        }
4785
4786        tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4787
4788        /* Some third-party PHYs need to be reset on link going
4789         * down.
4790         */
4791        if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4792             tg3_asic_rev(tp) == ASIC_REV_5704 ||
4793             tg3_asic_rev(tp) == ASIC_REV_5705) &&
4794            tp->link_up) {
4795                tg3_readphy(tp, MII_BMSR, &bmsr);
4796                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4797                    !(bmsr & BMSR_LSTATUS))
4798                        force_reset = true;
4799        }
4800        if (force_reset)
4801                tg3_phy_reset(tp);
4802
4803        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4804                tg3_readphy(tp, MII_BMSR, &bmsr);
4805                if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4806                    !tg3_flag(tp, INIT_COMPLETE))
4807                        bmsr = 0;
4808
4809                if (!(bmsr & BMSR_LSTATUS)) {
4810                        err = tg3_init_5401phy_dsp(tp);
4811                        if (err)
4812                                return err;
4813
4814                        tg3_readphy(tp, MII_BMSR, &bmsr);
4815                        for (i = 0; i < 1000; i++) {
4816                                udelay(10);
4817                                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4818                                    (bmsr & BMSR_LSTATUS)) {
4819                                        udelay(40);
4820                                        break;
4821                                }
4822                        }
4823
4824                        if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4825                            TG3_PHY_REV_BCM5401_B0 &&
4826                            !(bmsr & BMSR_LSTATUS) &&
4827                            tp->link_config.active_speed == SPEED_1000) {
4828                                err = tg3_phy_reset(tp);
4829                                if (!err)
4830                                        err = tg3_init_5401phy_dsp(tp);
4831                                if (err)
4832                                        return err;
4833                        }
4834                }
4835        } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4836                   tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4837                /* 5701 {A0,B0} CRC bug workaround */
4838                tg3_writephy(tp, 0x15, 0x0a75);
4839                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4840                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4841                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4842        }
4843
4844        /* Clear pending interrupts... */
4845        tg3_readphy(tp, MII_TG3_ISTAT, &val);
4846        tg3_readphy(tp, MII_TG3_ISTAT, &val);
4847
4848        if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4849                tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4850        else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4851                tg3_writephy(tp, MII_TG3_IMASK, ~0);
4852
4853        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4854            tg3_asic_rev(tp) == ASIC_REV_5701) {
4855                if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4856                        tg3_writephy(tp, MII_TG3_EXT_CTRL,
4857                                     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4858                else
4859                        tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4860        }
4861
4862        current_link_up = false;
4863        current_speed = SPEED_UNKNOWN;
4864        current_duplex = DUPLEX_UNKNOWN;
4865        tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4866        tp->link_config.rmt_adv = 0;
4867
4868        if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4869                err = tg3_phy_auxctl_read(tp,
4870                                          MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4871                                          &val);
4872                if (!err && !(val & (1 << 10))) {
4873                        tg3_phy_auxctl_write(tp,
4874                                             MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4875                                             val | (1 << 10));
4876                        goto relink;
4877                }
4878        }
4879
4880        bmsr = 0;
4881        for (i = 0; i < 100; i++) {
4882                tg3_readphy(tp, MII_BMSR, &bmsr);
4883                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4884                    (bmsr & BMSR_LSTATUS))
4885                        break;
4886                udelay(40);
4887        }
4888
4889        if (bmsr & BMSR_LSTATUS) {
4890                u32 aux_stat, bmcr;
4891
4892                tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4893                for (i = 0; i < 2000; i++) {
4894                        udelay(10);
4895                        if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4896                            aux_stat)
4897                                break;
4898                }
4899
4900                tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4901                                             &current_speed,
4902                                             &current_duplex);
4903
4904                bmcr = 0;
4905                for (i = 0; i < 200; i++) {
4906                        tg3_readphy(tp, MII_BMCR, &bmcr);
4907                        if (tg3_readphy(tp, MII_BMCR, &bmcr))
4908                                continue;
4909                        if (bmcr && bmcr != 0x7fff)
4910                                break;
4911                        udelay(10);
4912                }
4913
4914                lcl_adv = 0;
4915                rmt_adv = 0;
4916
4917                tp->link_config.active_speed = current_speed;
4918                tp->link_config.active_duplex = current_duplex;
4919
4920                if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4921                        bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4922
4923                        if ((bmcr & BMCR_ANENABLE) &&
4924                            eee_config_ok &&
4925                            tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4926                            tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4927                                current_link_up = true;
4928
4929                        /* EEE settings changes take effect only after a phy
4930                         * reset.  If we have skipped a reset due to Link Flap
4931                         * Avoidance being enabled, do it now.
4932                         */
4933                        if (!eee_config_ok &&
4934                            (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4935                            !force_reset) {
4936                                tg3_setup_eee(tp);
4937                                tg3_phy_reset(tp);
4938                        }
4939                } else {
4940                        if (!(bmcr & BMCR_ANENABLE) &&
4941                            tp->link_config.speed == current_speed &&
4942                            tp->link_config.duplex == current_duplex) {
4943                                current_link_up = true;
4944                        }
4945                }
4946
4947                if (current_link_up &&
4948                    tp->link_config.active_duplex == DUPLEX_FULL) {
4949                        u32 reg, bit;
4950
4951                        if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4952                                reg = MII_TG3_FET_GEN_STAT;
4953                                bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4954                        } else {
4955                                reg = MII_TG3_EXT_STAT;
4956                                bit = MII_TG3_EXT_STAT_MDIX;
4957                        }
4958
4959                        if (!tg3_readphy(tp, reg, &val) && (val & bit))
4960                                tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4961
4962                        tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4963                }
4964        }
4965
4966relink:
4967        if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4968                tg3_phy_copper_begin(tp);
4969
4970                if (tg3_flag(tp, ROBOSWITCH)) {
4971                        current_link_up = true;
4972                        /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4973                        current_speed = SPEED_1000;
4974                        current_duplex = DUPLEX_FULL;
4975                        tp->link_config.active_speed = current_speed;
4976                        tp->link_config.active_duplex = current_duplex;
4977                }
4978
4979                tg3_readphy(tp, MII_BMSR, &bmsr);
4980                if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4981                    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4982                        current_link_up = true;
4983        }
4984
4985        tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4986        if (current_link_up) {
4987                if (tp->link_config.active_speed == SPEED_100 ||
4988                    tp->link_config.active_speed == SPEED_10)
4989                        tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4990                else
4991                        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4992        } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4993                tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4994        else
4995                tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4996
4997        /* In order for the 5750 core in BCM4785 chip to work properly
4998         * in RGMII mode, the Led Control Register must be set up.
4999         */
5000        if (tg3_flag(tp, RGMII_MODE)) {
5001                u32 led_ctrl = tr32(MAC_LED_CTRL);
5002                led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5003
5004                if (tp->link_config.active_speed == SPEED_10)
5005                        led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5006                else if (tp->link_config.active_speed == SPEED_100)
5007                        led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5008                                     LED_CTRL_100MBPS_ON);
5009                else if (tp->link_config.active_speed == SPEED_1000)
5010                        led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5011                                     LED_CTRL_1000MBPS_ON);
5012
5013                tw32(MAC_LED_CTRL, led_ctrl);
5014                udelay(40);
5015        }
5016
5017        tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5018        if (tp->link_config.active_duplex == DUPLEX_HALF)
5019                tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5020
5021        if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5022                if (current_link_up &&
5023                    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5024                        tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5025                else
5026                        tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5027        }
5028
5029        /* ??? Without this setting Netgear GA302T PHY does not
5030         * ??? send/receive packets...
5031         */
5032        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5033            tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5034                tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5035                tw32_f(MAC_MI_MODE, tp->mi_mode);
5036                udelay(80);
5037        }
5038
5039        tw32_f(MAC_MODE, tp->mac_mode);
5040        udelay(40);
5041
5042        tg3_phy_eee_adjust(tp, current_link_up);
5043
5044        if (tg3_flag(tp, USE_LINKCHG_REG)) {
5045                /* Polled via timer. */
5046                tw32_f(MAC_EVENT, 0);
5047        } else {
5048                tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5049        }
5050        udelay(40);
5051
5052        if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5053            current_link_up &&
5054            tp->link_config.active_speed == SPEED_1000 &&
5055            (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5056                udelay(120);
5057                tw32_f(MAC_STATUS,
5058                     (MAC_STATUS_SYNC_CHANGED |
5059                      MAC_STATUS_CFG_CHANGED));
5060                udelay(40);
5061                tg3_write_mem(tp,
5062                              NIC_SRAM_FIRMWARE_MBOX,
5063                              NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5064        }
5065
5066        /* Prevent send BD corruption. */
5067        if (tg3_flag(tp, CLKREQ_BUG)) {
5068                if (tp->link_config.active_speed == SPEED_100 ||
5069                    tp->link_config.active_speed == SPEED_10)
5070                        pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5071                                                   PCI_EXP_LNKCTL_CLKREQ_EN);
5072                else
5073                        pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5074                                                 PCI_EXP_LNKCTL_CLKREQ_EN);
5075        }
5076
5077        tg3_test_and_report_link_chg(tp, current_link_up);
5078
5079        return 0;
5080}
5081
5082struct tg3_fiber_aneginfo {
5083        int state;
5084#define ANEG_STATE_UNKNOWN              0
5085#define ANEG_STATE_AN_ENABLE            1
5086#define ANEG_STATE_RESTART_INIT         2
5087#define ANEG_STATE_RESTART              3
5088#define ANEG_STATE_DISABLE_LINK_OK      4
5089#define ANEG_STATE_ABILITY_DETECT_INIT  5
5090#define ANEG_STATE_ABILITY_DETECT       6
5091#define ANEG_STATE_ACK_DETECT_INIT      7
5092#define ANEG_STATE_ACK_DETECT           8
5093#define ANEG_STATE_COMPLETE_ACK_INIT    9
5094#define ANEG_STATE_COMPLETE_ACK         10
5095#define ANEG_STATE_IDLE_DETECT_INIT     11
5096#define ANEG_STATE_IDLE_DETECT          12
5097#define ANEG_STATE_LINK_OK              13
5098#define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5099#define ANEG_STATE_NEXT_PAGE_WAIT       15
5100
5101        u32 flags;
5102#define MR_AN_ENABLE            0x00000001
5103#define MR_RESTART_AN           0x00000002
5104#define MR_AN_COMPLETE          0x00000004
5105#define MR_PAGE_RX              0x00000008
5106#define MR_NP_LOADED            0x00000010
5107#define MR_TOGGLE_TX            0x00000020
5108#define MR_LP_ADV_FULL_DUPLEX   0x00000040
5109#define MR_LP_ADV_HALF_DUPLEX   0x00000080
5110#define MR_LP_ADV_SYM_PAUSE     0x00000100
5111#define MR_LP_ADV_ASYM_PAUSE    0x00000200
5112#define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5113#define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5114#define MR_LP_ADV_NEXT_PAGE     0x00001000
5115#define MR_TOGGLE_RX            0x00002000
5116#define MR_NP_RX                0x00004000
5117
5118#define MR_LINK_OK              0x80000000
5119
5120        unsigned long link_time, cur_time;
5121
5122        u32 ability_match_cfg;
5123        int ability_match_count;
5124
5125        char ability_match, idle_match, ack_match;
5126
5127        u32 txconfig, rxconfig;
5128#define ANEG_CFG_NP             0x00000080
5129#define ANEG_CFG_ACK            0x00000040
5130#define ANEG_CFG_RF2            0x00000020
5131#define ANEG_CFG_RF1            0x00000010
5132#define ANEG_CFG_PS2            0x00000001
5133#define ANEG_CFG_PS1            0x00008000
5134#define ANEG_CFG_HD             0x00004000
5135#define ANEG_CFG_FD             0x00002000
5136#define ANEG_CFG_INVAL          0x00001f06
5137
5138};
5139#define ANEG_OK         0
5140#define ANEG_DONE       1
5141#define ANEG_TIMER_ENAB 2
5142#define ANEG_FAILED     -1
5143
5144#define ANEG_STATE_SETTLE_TIME  10000
5145
5146static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5147                                   struct tg3_fiber_aneginfo *ap)
5148{
5149        u16 flowctrl;
5150        unsigned long delta;
5151        u32 rx_cfg_reg;
5152        int ret;
5153
5154        if (ap->state == ANEG_STATE_UNKNOWN) {
5155                ap->rxconfig = 0;
5156                ap->link_time = 0;
5157                ap->cur_time = 0;
5158                ap->ability_match_cfg = 0;
5159                ap->ability_match_count = 0;
5160                ap->ability_match = 0;
5161                ap->idle_match = 0;
5162                ap->ack_match = 0;
5163        }
5164        ap->cur_time++;
5165
5166        if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5167                rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5168
5169                if (rx_cfg_reg != ap->ability_match_cfg) {
5170                        ap->ability_match_cfg = rx_cfg_reg;
5171                        ap->ability_match = 0;
5172                        ap->ability_match_count = 0;
5173                } else {
5174                        if (++ap->ability_match_count > 1) {
5175                                ap->ability_match = 1;
5176                                ap->ability_match_cfg = rx_cfg_reg;
5177                        }
5178                }
5179                if (rx_cfg_reg & ANEG_CFG_ACK)
5180                        ap->ack_match = 1;
5181                else
5182                        ap->ack_match = 0;
5183
5184                ap->idle_match = 0;
5185        } else {
5186                ap->idle_match = 1;
5187                ap->ability_match_cfg = 0;
5188                ap->ability_match_count = 0;
5189                ap->ability_match = 0;
5190                ap->ack_match = 0;
5191
5192                rx_cfg_reg = 0;
5193        }
5194
5195        ap->rxconfig = rx_cfg_reg;
5196        ret = ANEG_OK;
5197
5198        switch (ap->state) {
5199        case ANEG_STATE_UNKNOWN:
5200                if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5201                        ap->state = ANEG_STATE_AN_ENABLE;
5202
5203                /* fallthru */
5204        case ANEG_STATE_AN_ENABLE:
5205                ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5206                if (ap->flags & MR_AN_ENABLE) {
5207                        ap->link_time = 0;
5208                        ap->cur_time = 0;
5209                        ap->ability_match_cfg = 0;
5210                        ap->ability_match_count = 0;
5211                        ap->ability_match = 0;
5212                        ap->idle_match = 0;
5213                        ap->ack_match = 0;
5214
5215                        ap->state = ANEG_STATE_RESTART_INIT;
5216                } else {
5217                        ap->state = ANEG_STATE_DISABLE_LINK_OK;
5218                }
5219                break;
5220
5221        case ANEG_STATE_RESTART_INIT:
5222                ap->link_time = ap->cur_time;
5223                ap->flags &= ~(MR_NP_LOADED);
5224                ap->txconfig = 0;
5225                tw32(MAC_TX_AUTO_NEG, 0);
5226                tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5227                tw32_f(MAC_MODE, tp->mac_mode);
5228                udelay(40);
5229
5230                ret = ANEG_TIMER_ENAB;
5231                ap->state = ANEG_STATE_RESTART;
5232
5233                /* fallthru */
5234        case ANEG_STATE_RESTART:
5235                delta = ap->cur_time - ap->link_time;
5236                if (delta > ANEG_STATE_SETTLE_TIME)
5237                        ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5238                else
5239                        ret = ANEG_TIMER_ENAB;
5240                break;
5241
5242        case ANEG_STATE_DISABLE_LINK_OK:
5243                ret = ANEG_DONE;
5244                break;
5245
5246        case ANEG_STATE_ABILITY_DETECT_INIT:
5247                ap->flags &= ~(MR_TOGGLE_TX);
5248                ap->txconfig = ANEG_CFG_FD;
5249                flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5250                if (flowctrl & ADVERTISE_1000XPAUSE)
5251                        ap->txconfig |= ANEG_CFG_PS1;
5252                if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5253                        ap->txconfig |= ANEG_CFG_PS2;
5254                tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5255                tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5256                tw32_f(MAC_MODE, tp->mac_mode);
5257                udelay(40);
5258
5259                ap->state = ANEG_STATE_ABILITY_DETECT;
5260                break;
5261
5262        case ANEG_STATE_ABILITY_DETECT:
5263                if (ap->ability_match != 0 && ap->rxconfig != 0)
5264                        ap->state = ANEG_STATE_ACK_DETECT_INIT;
5265                break;
5266
5267        case ANEG_STATE_ACK_DETECT_INIT:
5268                ap->txconfig |= ANEG_CFG_ACK;
5269                tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5270                tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5271                tw32_f(MAC_MODE, tp->mac_mode);
5272                udelay(40);
5273
5274                ap->state = ANEG_STATE_ACK_DETECT;
5275
5276                /* fallthru */
5277        case ANEG_STATE_ACK_DETECT:
5278                if (ap->ack_match != 0) {
5279                        if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5280                            (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5281                                ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5282                        } else {
5283                                ap->state = ANEG_STATE_AN_ENABLE;
5284                        }
5285                } else if (ap->ability_match != 0 &&
5286                           ap->rxconfig == 0) {
5287                        ap->state = ANEG_STATE_AN_ENABLE;
5288                }
5289                break;
5290
5291        case ANEG_STATE_COMPLETE_ACK_INIT:
5292                if (ap->rxconfig & ANEG_CFG_INVAL) {
5293                        ret = ANEG_FAILED;
5294                        break;
5295                }
5296                ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5297                               MR_LP_ADV_HALF_DUPLEX |
5298                               MR_LP_ADV_SYM_PAUSE |
5299                               MR_LP_ADV_ASYM_PAUSE |
5300                               MR_LP_ADV_REMOTE_FAULT1 |
5301                               MR_LP_ADV_REMOTE_FAULT2 |
5302                               MR_LP_ADV_NEXT_PAGE |
5303                               MR_TOGGLE_RX |
5304                               MR_NP_RX);
5305                if (ap->rxconfig & ANEG_CFG_FD)
5306                        ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5307                if (ap->rxconfig & ANEG_CFG_HD)
5308                        ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5309                if (ap->rxconfig & ANEG_CFG_PS1)
5310                        ap->flags |= MR_LP_ADV_SYM_PAUSE;
5311                if (ap->rxconfig & ANEG_CFG_PS2)
5312                        ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5313                if (ap->rxconfig & ANEG_CFG_RF1)
5314                        ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5315                if (ap->rxconfig & ANEG_CFG_RF2)
5316                        ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5317                if (ap->rxconfig & ANEG_CFG_NP)
5318                        ap->flags |= MR_LP_ADV_NEXT_PAGE;
5319
5320                ap->link_time = ap->cur_time;
5321
5322                ap->flags ^= (MR_TOGGLE_TX);
5323                if (ap->rxconfig & 0x0008)
5324                        ap->flags |= MR_TOGGLE_RX;
5325                if (ap->rxconfig & ANEG_CFG_NP)
5326                        ap->flags |= MR_NP_RX;
5327                ap->flags |= MR_PAGE_RX;
5328
5329                ap->state = ANEG_STATE_COMPLETE_ACK;
5330                ret = ANEG_TIMER_ENAB;
5331                break;
5332
5333        case ANEG_STATE_COMPLETE_ACK:
5334                if (ap->ability_match != 0 &&
5335                    ap->rxconfig == 0) {
5336                        ap->state = ANEG_STATE_AN_ENABLE;
5337                        break;
5338                }
5339                delta = ap->cur_time - ap->link_time;
5340                if (delta > ANEG_STATE_SETTLE_TIME) {
5341                        if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5342                                ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5343                        } else {
5344                                if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5345                                    !(ap->flags & MR_NP_RX)) {
5346                                        ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5347                                } else {
5348                                        ret = ANEG_FAILED;
5349                                }
5350                        }
5351                }
5352                break;
5353
5354        case ANEG_STATE_IDLE_DETECT_INIT:
5355                ap->link_time = ap->cur_time;
5356                tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5357                tw32_f(MAC_MODE, tp->mac_mode);
5358                udelay(40);
5359
5360                ap->state = ANEG_STATE_IDLE_DETECT;
5361                ret = ANEG_TIMER_ENAB;
5362                break;
5363
5364        case ANEG_STATE_IDLE_DETECT:
5365                if (ap->ability_match != 0 &&
5366                    ap->rxconfig == 0) {
5367                        ap->state = ANEG_STATE_AN_ENABLE;
5368                        break;
5369                }
5370                delta = ap->cur_time - ap->link_time;
5371                if (delta > ANEG_STATE_SETTLE_TIME) {
5372                        /* XXX another gem from the Broadcom driver :( */
5373                        ap->state = ANEG_STATE_LINK_OK;
5374                }
5375                break;
5376
5377        case ANEG_STATE_LINK_OK:
5378                ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5379                ret = ANEG_DONE;
5380                break;
5381
5382        case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5383                /* ??? unimplemented */
5384                break;
5385
5386        case ANEG_STATE_NEXT_PAGE_WAIT:
5387                /* ??? unimplemented */
5388                break;
5389
5390        default:
5391                ret = ANEG_FAILED;
5392                break;
5393        }
5394
5395        return ret;
5396}
5397
5398static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5399{
5400        int res = 0;
5401        struct tg3_fiber_aneginfo aninfo;
5402        int status = ANEG_FAILED;
5403        unsigned int tick;
5404        u32 tmp;
5405
5406        tw32_f(MAC_TX_AUTO_NEG, 0);
5407
5408        tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5409        tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5410        udelay(40);
5411
5412        tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5413        udelay(40);
5414
5415        memset(&aninfo, 0, sizeof(aninfo));
5416        aninfo.flags |= MR_AN_ENABLE;
5417        aninfo.state = ANEG_STATE_UNKNOWN;
5418        aninfo.cur_time = 0;
5419        tick = 0;
5420        while (++tick < 195000) {
5421                status = tg3_fiber_aneg_smachine(tp, &aninfo);
5422                if (status == ANEG_DONE || status == ANEG_FAILED)
5423                        break;
5424
5425                udelay(1);
5426        }
5427
5428        tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5429        tw32_f(MAC_MODE, tp->mac_mode);
5430        udelay(40);
5431
5432        *txflags = aninfo.txconfig;
5433        *rxflags = aninfo.flags;
5434
5435        if (status == ANEG_DONE &&
5436            (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5437                             MR_LP_ADV_FULL_DUPLEX)))
5438                res = 1;
5439
5440        return res;
5441}
5442
5443static void tg3_init_bcm8002(struct tg3 *tp)
5444{
5445        u32 mac_status = tr32(MAC_STATUS);
5446        int i;
5447
5448        /* Reset when initting first time or we have a link. */
5449        if (tg3_flag(tp, INIT_COMPLETE) &&
5450            !(mac_status & MAC_STATUS_PCS_SYNCED))
5451                return;
5452
5453        /* Set PLL lock range. */
5454        tg3_writephy(tp, 0x16, 0x8007);
5455
5456        /* SW reset */
5457        tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5458
5459        /* Wait for reset to complete. */
5460        /* XXX schedule_timeout() ... */
5461        for (i = 0; i < 500; i++)
5462                udelay(10);
5463
5464        /* Config mode; select PMA/Ch 1 regs. */
5465        tg3_writephy(tp, 0x10, 0x8411);
5466
5467        /* Enable auto-lock and comdet, select txclk for tx. */
5468        tg3_writephy(tp, 0x11, 0x0a10);
5469
5470        tg3_writephy(tp, 0x18, 0x00a0);
5471        tg3_writephy(tp, 0x16, 0x41ff);
5472
5473        /* Assert and deassert POR. */
5474        tg3_writephy(tp, 0x13, 0x0400);
5475        udelay(40);
5476        tg3_writephy(tp, 0x13, 0x0000);
5477
5478        tg3_writephy(tp, 0x11, 0x0a50);
5479        udelay(40);
5480        tg3_writephy(tp, 0x11, 0x0a10);
5481
5482        /* Wait for signal to stabilize */
5483        /* XXX schedule_timeout() ... */
5484        for (i = 0; i < 15000; i++)
5485                udelay(10);
5486
5487        /* Deselect the channel register so we can read the PHYID
5488         * later.
5489         */
5490        tg3_writephy(tp, 0x10, 0x8011);
5491}
5492
5493static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5494{
5495        u16 flowctrl;
5496        bool current_link_up;
5497        u32 sg_dig_ctrl, sg_dig_status;
5498        u32 serdes_cfg, expected_sg_dig_ctrl;
5499        int workaround, port_a;
5500
5501        serdes_cfg = 0;
5502        expected_sg_dig_ctrl = 0;
5503        workaround = 0;
5504        port_a = 1;
5505        current_link_up = false;
5506
5507        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5508            tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5509                workaround = 1;
5510                if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5511                        port_a = 0;
5512
5513                /* preserve bits 0-11,13,14 for signal pre-emphasis */
5514                /* preserve bits 20-23 for voltage regulator */
5515                serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5516        }
5517
5518        sg_dig_ctrl = tr32(SG_DIG_CTRL);
5519
5520        if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5521                if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5522                        if (workaround) {
5523                                u32 val = serdes_cfg;
5524
5525                                if (port_a)
5526                                        val |= 0xc010000;
5527                                else
5528                                        val |= 0x4010000;
5529                                tw32_f(MAC_SERDES_CFG, val);
5530                        }
5531
5532                        tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5533                }
5534                if (mac_status & MAC_STATUS_PCS_SYNCED) {
5535                        tg3_setup_flow_control(tp, 0, 0);
5536                        current_link_up = true;
5537                }
5538                goto out;
5539        }
5540
5541        /* Want auto-negotiation.  */
5542        expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5543
5544        flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5545        if (flowctrl & ADVERTISE_1000XPAUSE)
5546                expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5547        if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5548                expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5549
5550        if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5551                if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5552                    tp->serdes_counter &&
5553                    ((mac_status & (MAC_STATUS_PCS_SYNCED |
5554                                    MAC_STATUS_RCVD_CFG)) ==
5555                     MAC_STATUS_PCS_SYNCED)) {
5556                        tp->serdes_counter--;
5557                        current_link_up = true;
5558                        goto out;
5559                }
5560restart_autoneg:
5561                if (workaround)
5562                        tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5563                tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5564                udelay(5);
5565                tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5566
5567                tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5568                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5569        } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5570                                 MAC_STATUS_SIGNAL_DET)) {
5571                sg_dig_status = tr32(SG_DIG_STATUS);
5572                mac_status = tr32(MAC_STATUS);
5573
5574                if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5575                    (mac_status & MAC_STATUS_PCS_SYNCED)) {
5576                        u32 local_adv = 0, remote_adv = 0;
5577
5578                        if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5579                                local_adv |= ADVERTISE_1000XPAUSE;
5580                        if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5581                                local_adv |= ADVERTISE_1000XPSE_ASYM;
5582
5583                        if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5584                                remote_adv |= LPA_1000XPAUSE;
5585                        if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5586                                remote_adv |= LPA_1000XPAUSE_ASYM;
5587
5588                        tp->link_config.rmt_adv =
5589                                           mii_adv_to_ethtool_adv_x(remote_adv);
5590
5591                        tg3_setup_flow_control(tp, local_adv, remote_adv);
5592                        current_link_up = true;
5593                        tp->serdes_counter = 0;
5594                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5595                } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5596                        if (tp->serdes_counter)
5597                                tp->serdes_counter--;
5598                        else {
5599                                if (workaround) {
5600                                        u32 val = serdes_cfg;
5601
5602                                        if (port_a)
5603                                                val |= 0xc010000;
5604                                        else
5605                                                val |= 0x4010000;
5606
5607                                        tw32_f(MAC_SERDES_CFG, val);
5608                                }
5609
5610                                tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5611                                udelay(40);
5612
5613                                /* Link parallel detection - link is up */
5614                                /* only if we have PCS_SYNC and not */
5615                                /* receiving config code words */
5616                                mac_status = tr32(MAC_STATUS);
5617                                if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5618                                    !(mac_status & MAC_STATUS_RCVD_CFG)) {
5619                                        tg3_setup_flow_control(tp, 0, 0);
5620                                        current_link_up = true;
5621                                        tp->phy_flags |=
5622                                                TG3_PHYFLG_PARALLEL_DETECT;
5623                                        tp->serdes_counter =
5624                                                SERDES_PARALLEL_DET_TIMEOUT;
5625                                } else
5626                                        goto restart_autoneg;
5627                        }
5628                }
5629        } else {
5630                tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5631                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5632        }
5633
5634out:
5635        return current_link_up;
5636}
5637
5638static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5639{
5640        bool current_link_up = false;
5641
5642        if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5643                goto out;
5644
5645        if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5646                u32 txflags, rxflags;
5647                int i;
5648
5649                if (fiber_autoneg(tp, &txflags, &rxflags)) {
5650                        u32 local_adv = 0, remote_adv = 0;
5651
5652                        if (txflags & ANEG_CFG_PS1)
5653                                local_adv |= ADVERTISE_1000XPAUSE;
5654                        if (txflags & ANEG_CFG_PS2)
5655                                local_adv |= ADVERTISE_1000XPSE_ASYM;
5656
5657                        if (rxflags & MR_LP_ADV_SYM_PAUSE)
5658                                remote_adv |= LPA_1000XPAUSE;
5659                        if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5660                                remote_adv |= LPA_1000XPAUSE_ASYM;
5661
5662                        tp->link_config.rmt_adv =
5663                                           mii_adv_to_ethtool_adv_x(remote_adv);
5664
5665                        tg3_setup_flow_control(tp, local_adv, remote_adv);
5666
5667                        current_link_up = true;
5668                }
5669                for (i = 0; i < 30; i++) {
5670                        udelay(20);
5671                        tw32_f(MAC_STATUS,
5672                               (MAC_STATUS_SYNC_CHANGED |
5673                                MAC_STATUS_CFG_CHANGED));
5674                        udelay(40);
5675                        if ((tr32(MAC_STATUS) &
5676                             (MAC_STATUS_SYNC_CHANGED |
5677                              MAC_STATUS_CFG_CHANGED)) == 0)
5678                                break;
5679                }
5680
5681                mac_status = tr32(MAC_STATUS);
5682                if (!current_link_up &&
5683                    (mac_status & MAC_STATUS_PCS_SYNCED) &&
5684                    !(mac_status & MAC_STATUS_RCVD_CFG))
5685                        current_link_up = true;
5686        } else {
5687                tg3_setup_flow_control(tp, 0, 0);
5688
5689                /* Forcing 1000FD link up. */
5690                current_link_up = true;
5691
5692                tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5693                udelay(40);
5694
5695                tw32_f(MAC_MODE, tp->mac_mode);
5696                udelay(40);
5697        }
5698
5699out:
5700        return current_link_up;
5701}
5702
5703static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5704{
5705        u32 orig_pause_cfg;
5706        u16 orig_active_speed;
5707        u8 orig_active_duplex;
5708        u32 mac_status;
5709        bool current_link_up;
5710        int i;
5711
5712        orig_pause_cfg = tp->link_config.active_flowctrl;
5713        orig_active_speed = tp->link_config.active_speed;
5714        orig_active_duplex = tp->link_config.active_duplex;
5715
5716        if (!tg3_flag(tp, HW_AUTONEG) &&
5717            tp->link_up &&
5718            tg3_flag(tp, INIT_COMPLETE)) {
5719                mac_status = tr32(MAC_STATUS);
5720                mac_status &= (MAC_STATUS_PCS_SYNCED |
5721                               MAC_STATUS_SIGNAL_DET |
5722                               MAC_STATUS_CFG_CHANGED |
5723                               MAC_STATUS_RCVD_CFG);
5724                if (mac_status == (MAC_STATUS_PCS_SYNCED |
5725                                   MAC_STATUS_SIGNAL_DET)) {
5726                        tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5727                                            MAC_STATUS_CFG_CHANGED));
5728                        return 0;
5729                }
5730        }
5731
5732        tw32_f(MAC_TX_AUTO_NEG, 0);
5733
5734        tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5735        tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5736        tw32_f(MAC_MODE, tp->mac_mode);
5737        udelay(40);
5738
5739        if (tp->phy_id == TG3_PHY_ID_BCM8002)
5740                tg3_init_bcm8002(tp);
5741
5742        /* Enable link change event even when serdes polling.  */
5743        tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5744        udelay(40);
5745
5746        current_link_up = false;
5747        tp->link_config.rmt_adv = 0;
5748        mac_status = tr32(MAC_STATUS);
5749
5750        if (tg3_flag(tp, HW_AUTONEG))
5751                current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5752        else
5753                current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5754
5755        tp->napi[0].hw_status->status =
5756                (SD_STATUS_UPDATED |
5757                 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5758
5759        for (i = 0; i < 100; i++) {
5760                tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5761                                    MAC_STATUS_CFG_CHANGED));
5762                udelay(5);
5763                if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5764                                         MAC_STATUS_CFG_CHANGED |
5765                                         MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5766                        break;
5767        }
5768
5769        mac_status = tr32(MAC_STATUS);
5770        if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5771                current_link_up = false;
5772                if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5773                    tp->serdes_counter == 0) {
5774                        tw32_f(MAC_MODE, (tp->mac_mode |
5775                                          MAC_MODE_SEND_CONFIGS));
5776                        udelay(1);
5777                        tw32_f(MAC_MODE, tp->mac_mode);
5778                }
5779        }
5780
5781        if (current_link_up) {
5782                tp->link_config.active_speed = SPEED_1000;
5783                tp->link_config.active_duplex = DUPLEX_FULL;
5784                tw32(MAC_LED_CTRL, (tp->led_ctrl |
5785                                    LED_CTRL_LNKLED_OVERRIDE |
5786                                    LED_CTRL_1000MBPS_ON));
5787        } else {
5788                tp->link_config.active_speed = SPEED_UNKNOWN;
5789                tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5790                tw32(MAC_LED_CTRL, (tp->led_ctrl |
5791                                    LED_CTRL_LNKLED_OVERRIDE |
5792                                    LED_CTRL_TRAFFIC_OVERRIDE));
5793        }
5794
5795        if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5796                u32 now_pause_cfg = tp->link_config.active_flowctrl;
5797                if (orig_pause_cfg != now_pause_cfg ||
5798                    orig_active_speed != tp->link_config.active_speed ||
5799                    orig_active_duplex != tp->link_config.active_duplex)
5800                        tg3_link_report(tp);
5801        }
5802
5803        return 0;
5804}
5805
5806static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5807{
5808        int err = 0;
5809        u32 bmsr, bmcr;
5810        u16 current_speed = SPEED_UNKNOWN;
5811        u8 current_duplex = DUPLEX_UNKNOWN;
5812        bool current_link_up = false;
5813        u32 local_adv, remote_adv, sgsr;
5814
5815        if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5816             tg3_asic_rev(tp) == ASIC_REV_5720) &&
5817             !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5818             (sgsr & SERDES_TG3_SGMII_MODE)) {
5819
5820                if (force_reset)
5821                        tg3_phy_reset(tp);
5822
5823                tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5824
5825                if (!(sgsr & SERDES_TG3_LINK_UP)) {
5826                        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5827                } else {
5828                        current_link_up = true;
5829                        if (sgsr & SERDES_TG3_SPEED_1000) {
5830                                current_speed = SPEED_1000;
5831                                tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5832                        } else if (sgsr & SERDES_TG3_SPEED_100) {
5833                                current_speed = SPEED_100;
5834                                tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5835                        } else {
5836                                current_speed = SPEED_10;
5837                                tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5838                        }
5839
5840                        if (sgsr & SERDES_TG3_FULL_DUPLEX)
5841                                current_duplex = DUPLEX_FULL;
5842                        else
5843                                current_duplex = DUPLEX_HALF;
5844                }
5845
5846                tw32_f(MAC_MODE, tp->mac_mode);
5847                udelay(40);
5848
5849                tg3_clear_mac_status(tp);
5850
5851                goto fiber_setup_done;
5852        }
5853
5854        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5855        tw32_f(MAC_MODE, tp->mac_mode);
5856        udelay(40);
5857
5858        tg3_clear_mac_status(tp);
5859
5860        if (force_reset)
5861                tg3_phy_reset(tp);
5862
5863        tp->link_config.rmt_adv = 0;
5864
5865        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5866        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5867        if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5868                if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5869                        bmsr |= BMSR_LSTATUS;
5870                else
5871                        bmsr &= ~BMSR_LSTATUS;
5872        }
5873
5874        err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5875
5876        if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5877            (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5878                /* do nothing, just check for link up at the end */
5879        } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5880                u32 adv, newadv;
5881
5882                err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5883                newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5884                                 ADVERTISE_1000XPAUSE |
5885                                 ADVERTISE_1000XPSE_ASYM |
5886                                 ADVERTISE_SLCT);
5887
5888                newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5889                newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5890
5891                if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5892                        tg3_writephy(tp, MII_ADVERTISE, newadv);
5893                        bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5894                        tg3_writephy(tp, MII_BMCR, bmcr);
5895
5896                        tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5897                        tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5898                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5899
5900                        return err;
5901                }
5902        } else {
5903                u32 new_bmcr;
5904
5905                bmcr &= ~BMCR_SPEED1000;
5906                new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5907
5908                if (tp->link_config.duplex == DUPLEX_FULL)
5909                        new_bmcr |= BMCR_FULLDPLX;
5910
5911                if (new_bmcr != bmcr) {
5912                        /* BMCR_SPEED1000 is a reserved bit that needs
5913                         * to be set on write.
5914                         */
5915                        new_bmcr |= BMCR_SPEED1000;
5916
5917                        /* Force a linkdown */
5918                        if (tp->link_up) {
5919                                u32 adv;
5920
5921                                err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5922                                adv &= ~(ADVERTISE_1000XFULL |
5923                                         ADVERTISE_1000XHALF |
5924                                         ADVERTISE_SLCT);
5925                                tg3_writephy(tp, MII_ADVERTISE, adv);
5926                                tg3_writephy(tp, MII_BMCR, bmcr |
5927                                                           BMCR_ANRESTART |
5928                                                           BMCR_ANENABLE);
5929                                udelay(10);
5930                                tg3_carrier_off(tp);
5931                        }
5932                        tg3_writephy(tp, MII_BMCR, new_bmcr);
5933                        bmcr = new_bmcr;
5934                        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5935                        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5936                        if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5937                                if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5938                                        bmsr |= BMSR_LSTATUS;
5939                                else
5940                                        bmsr &= ~BMSR_LSTATUS;
5941                        }
5942                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5943                }
5944        }
5945
5946        if (bmsr & BMSR_LSTATUS) {
5947                current_speed = SPEED_1000;
5948                current_link_up = true;
5949                if (bmcr & BMCR_FULLDPLX)
5950                        current_duplex = DUPLEX_FULL;
5951                else
5952                        current_duplex = DUPLEX_HALF;
5953
5954                local_adv = 0;
5955                remote_adv = 0;
5956
5957                if (bmcr & BMCR_ANENABLE) {
5958                        u32 common;
5959
5960                        err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5961                        err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5962                        common = local_adv & remote_adv;
5963                        if (common & (ADVERTISE_1000XHALF |
5964                                      ADVERTISE_1000XFULL)) {
5965                                if (common & ADVERTISE_1000XFULL)
5966                                        current_duplex = DUPLEX_FULL;
5967                                else
5968                                        current_duplex = DUPLEX_HALF;
5969
5970                                tp->link_config.rmt_adv =
5971                                           mii_adv_to_ethtool_adv_x(remote_adv);
5972                        } else if (!tg3_flag(tp, 5780_CLASS)) {
5973                                /* Link is up via parallel detect */
5974                        } else {
5975                                current_link_up = false;
5976                        }
5977                }
5978        }
5979
5980fiber_setup_done:
5981        if (current_link_up && current_duplex == DUPLEX_FULL)
5982                tg3_setup_flow_control(tp, local_adv, remote_adv);
5983
5984        tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5985        if (tp->link_config.active_duplex == DUPLEX_HALF)
5986                tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5987
5988        tw32_f(MAC_MODE, tp->mac_mode);
5989        udelay(40);
5990
5991        tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5992
5993        tp->link_config.active_speed = current_speed;
5994        tp->link_config.active_duplex = current_duplex;
5995
5996        tg3_test_and_report_link_chg(tp, current_link_up);
5997        return err;
5998}
5999
6000static void tg3_serdes_parallel_detect(struct tg3 *tp)
6001{
6002        if (tp->serdes_counter) {
6003                /* Give autoneg time to complete. */
6004                tp->serdes_counter--;
6005                return;
6006        }
6007
6008        if (!tp->link_up &&
6009            (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6010                u32 bmcr;
6011
6012                tg3_readphy(tp, MII_BMCR, &bmcr);
6013                if (bmcr & BMCR_ANENABLE) {
6014                        u32 phy1, phy2;
6015
6016                        /* Select shadow register 0x1f */
6017                        tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6018                        tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6019
6020                        /* Select expansion interrupt status register */
6021                        tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6022                                         MII_TG3_DSP_EXP1_INT_STAT);
6023                        tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6024                        tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6025
6026                        if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6027                                /* We have signal detect and not receiving
6028                                 * config code words, link is up by parallel
6029                                 * detection.
6030                                 */
6031
6032                                bmcr &= ~BMCR_ANENABLE;
6033                                bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6034                                tg3_writephy(tp, MII_BMCR, bmcr);
6035                                tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6036                        }
6037                }
6038        } else if (tp->link_up &&
6039                   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6040                   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6041                u32 phy2;
6042
6043                /* Select expansion interrupt status register */
6044                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6045                                 MII_TG3_DSP_EXP1_INT_STAT);
6046                tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6047                if (phy2 & 0x20) {
6048                        u32 bmcr;
6049
6050                        /* Config code words received, turn on autoneg. */
6051                        tg3_readphy(tp, MII_BMCR, &bmcr);
6052                        tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6053
6054                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6055
6056                }
6057        }
6058}
6059
6060static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6061{
6062        u32 val;
6063        int err;
6064
6065        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6066                err = tg3_setup_fiber_phy(tp, force_reset);
6067        else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6068                err = tg3_setup_fiber_mii_phy(tp, force_reset);
6069        else
6070                err = tg3_setup_copper_phy(tp, force_reset);
6071
6072        if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6073                u32 scale;
6074
6075                val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6076                if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6077                        scale = 65;
6078                else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6079                        scale = 6;
6080                else
6081                        scale = 12;
6082
6083                val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6084                val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6085                tw32(GRC_MISC_CFG, val);
6086        }
6087
6088        val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6089              (6 << TX_LENGTHS_IPG_SHIFT);
6090        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6091            tg3_asic_rev(tp) == ASIC_REV_5762)
6092                val |= tr32(MAC_TX_LENGTHS) &
6093                       (TX_LENGTHS_JMB_FRM_LEN_MSK |
6094                        TX_LENGTHS_CNT_DWN_VAL_MSK);
6095
6096        if (tp->link_config.active_speed == SPEED_1000 &&
6097            tp->link_config.active_duplex == DUPLEX_HALF)
6098                tw32(MAC_TX_LENGTHS, val |
6099                     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6100        else
6101                tw32(MAC_TX_LENGTHS, val |
6102                     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6103
6104        if (!tg3_flag(tp, 5705_PLUS)) {
6105                if (tp->link_up) {
6106                        tw32(HOSTCC_STAT_COAL_TICKS,
6107                             tp->coal.stats_block_coalesce_usecs);
6108                } else {
6109                        tw32(HOSTCC_STAT_COAL_TICKS, 0);
6110                }
6111        }
6112
6113        if (tg3_flag(tp, ASPM_WORKAROUND)) {
6114                val = tr32(PCIE_PWR_MGMT_THRESH);
6115                if (!tp->link_up)
6116                        val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6117                              tp->pwrmgmt_thresh;
6118                else
6119                        val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6120                tw32(PCIE_PWR_MGMT_THRESH, val);
6121        }
6122
6123        return err;
6124}
6125
6126/* tp->lock must be held */
6127static u64 tg3_refclk_read(struct tg3 *tp)
6128{
6129        u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6130        return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6131}
6132
6133/* tp->lock must be held */
6134static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6135{
6136        u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6137
6138        tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6139        tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6140        tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6141        tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6142}
6143
6144static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6145static inline void tg3_full_unlock(struct tg3 *tp);
6146static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6147{
6148        struct tg3 *tp = netdev_priv(dev);
6149
6150        info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6151                                SOF_TIMESTAMPING_RX_SOFTWARE |
6152                                SOF_TIMESTAMPING_SOFTWARE;
6153
6154        if (tg3_flag(tp, PTP_CAPABLE)) {
6155                info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6156                                        SOF_TIMESTAMPING_RX_HARDWARE |
6157                                        SOF_TIMESTAMPING_RAW_HARDWARE;
6158        }
6159
6160        if (tp->ptp_clock)
6161                info->phc_index = ptp_clock_index(tp->ptp_clock);
6162        else
6163                info->phc_index = -1;
6164
6165        info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6166
6167        info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6168                           (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6169                           (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6170                           (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6171        return 0;
6172}
6173
6174static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6175{
6176        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6177        bool neg_adj = false;
6178        u32 correction = 0;
6179
6180        if (ppb < 0) {
6181                neg_adj = true;
6182                ppb = -ppb;
6183        }
6184
6185        /* Frequency adjustment is performed using hardware with a 24 bit
6186         * accumulator and a programmable correction value. On each clk, the
6187         * correction value gets added to the accumulator and when it
6188         * overflows, the time counter is incremented/decremented.
6189         *
6190         * So conversion from ppb to correction value is
6191         *              ppb * (1 << 24) / 1000000000
6192         */
6193        correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6194                     TG3_EAV_REF_CLK_CORRECT_MASK;
6195
6196        tg3_full_lock(tp, 0);
6197
6198        if (correction)
6199                tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6200                     TG3_EAV_REF_CLK_CORRECT_EN |
6201                     (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6202        else
6203                tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6204
6205        tg3_full_unlock(tp);
6206
6207        return 0;
6208}
6209
6210static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6211{
6212        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6213
6214        tg3_full_lock(tp, 0);
6215        tp->ptp_adjust += delta;
6216        tg3_full_unlock(tp);
6217
6218        return 0;
6219}
6220
6221static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
6222{
6223        u64 ns;
6224        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6225
6226        tg3_full_lock(tp, 0);
6227        ns = tg3_refclk_read(tp);
6228        ns += tp->ptp_adjust;
6229        tg3_full_unlock(tp);
6230
6231        *ts = ns_to_timespec64(ns);
6232
6233        return 0;
6234}
6235
6236static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6237                           const struct timespec64 *ts)
6238{
6239        u64 ns;
6240        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6241
6242        ns = timespec64_to_ns(ts);
6243
6244        tg3_full_lock(tp, 0);
6245        tg3_refclk_write(tp, ns);
6246        tp->ptp_adjust = 0;
6247        tg3_full_unlock(tp);
6248
6249        return 0;
6250}
6251
6252static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6253                          struct ptp_clock_request *rq, int on)
6254{
6255        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6256        u32 clock_ctl;
6257        int rval = 0;
6258
6259        switch (rq->type) {
6260        case PTP_CLK_REQ_PEROUT:
6261                if (rq->perout.index != 0)
6262                        return -EINVAL;
6263
6264                tg3_full_lock(tp, 0);
6265                clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6266                clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6267
6268                if (on) {
6269                        u64 nsec;
6270
6271                        nsec = rq->perout.start.sec * 1000000000ULL +
6272                               rq->perout.start.nsec;
6273
6274                        if (rq->perout.period.sec || rq->perout.period.nsec) {
6275                                netdev_warn(tp->dev,
6276                                            "Device supports only a one-shot timesync output, period must be 0\n");
6277                                rval = -EINVAL;
6278                                goto err_out;
6279                        }
6280
6281                        if (nsec & (1ULL << 63)) {
6282                                netdev_warn(tp->dev,
6283                                            "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6284                                rval = -EINVAL;
6285                                goto err_out;
6286                        }
6287
6288                        tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6289                        tw32(TG3_EAV_WATCHDOG0_MSB,
6290                             TG3_EAV_WATCHDOG0_EN |
6291                             ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6292
6293                        tw32(TG3_EAV_REF_CLCK_CTL,
6294                             clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6295                } else {
6296                        tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6297                        tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6298                }
6299
6300err_out:
6301                tg3_full_unlock(tp);
6302                return rval;
6303
6304        default:
6305                break;
6306        }
6307
6308        return -EOPNOTSUPP;
6309}
6310
6311static const struct ptp_clock_info tg3_ptp_caps = {
6312        .owner          = THIS_MODULE,
6313        .name           = "tg3 clock",
6314        .max_adj        = 250000000,
6315        .n_alarm        = 0,
6316        .n_ext_ts       = 0,
6317        .n_per_out      = 1,
6318        .n_pins         = 0,
6319        .pps            = 0,
6320        .adjfreq        = tg3_ptp_adjfreq,
6321        .adjtime        = tg3_ptp_adjtime,
6322        .gettime64      = tg3_ptp_gettime,
6323        .settime64      = tg3_ptp_settime,
6324        .enable         = tg3_ptp_enable,
6325};
6326
6327static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6328                                     struct skb_shared_hwtstamps *timestamp)
6329{
6330        memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6331        timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6332                                           tp->ptp_adjust);
6333}
6334
6335/* tp->lock must be held */
6336static void tg3_ptp_init(struct tg3 *tp)
6337{
6338        if (!tg3_flag(tp, PTP_CAPABLE))
6339                return;
6340
6341        /* Initialize the hardware clock to the system time. */
6342        tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6343        tp->ptp_adjust = 0;
6344        tp->ptp_info = tg3_ptp_caps;
6345}
6346
6347/* tp->lock must be held */
6348static void tg3_ptp_resume(struct tg3 *tp)
6349{
6350        if (!tg3_flag(tp, PTP_CAPABLE))
6351                return;
6352
6353        tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6354        tp->ptp_adjust = 0;
6355}
6356
6357static void tg3_ptp_fini(struct tg3 *tp)
6358{
6359        if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6360                return;
6361
6362        ptp_clock_unregister(tp->ptp_clock);
6363        tp->ptp_clock = NULL;
6364        tp->ptp_adjust = 0;
6365}
6366
6367static inline int tg3_irq_sync(struct tg3 *tp)
6368{
6369        return tp->irq_sync;
6370}
6371
6372static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6373{
6374        int i;
6375
6376        dst = (u32 *)((u8 *)dst + off);
6377        for (i = 0; i < len; i += sizeof(u32))
6378                *dst++ = tr32(off + i);
6379}
6380
6381static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6382{
6383        tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6384        tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6385        tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6386        tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6387        tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6388        tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6389        tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6390        tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6391        tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6392        tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6393        tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6394        tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6395        tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6396        tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6397        tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6398        tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6399        tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6400        tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6401        tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6402
6403        if (tg3_flag(tp, SUPPORT_MSIX))
6404                tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6405
6406        tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6407        tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6408        tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6409        tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6410        tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6411        tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6412        tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6413        tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6414
6415        if (!tg3_flag(tp, 5705_PLUS)) {
6416                tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6417                tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6418                tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6419        }
6420
6421        tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6422        tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6423        tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6424        tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6425        tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6426
6427        if (tg3_flag(tp, NVRAM))
6428                tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6429}
6430
6431static void tg3_dump_state(struct tg3 *tp)
6432{
6433        int i;
6434        u32 *regs;
6435
6436        regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6437        if (!regs)
6438                return;
6439
6440        if (tg3_flag(tp, PCI_EXPRESS)) {
6441                /* Read up to but not including private PCI registers */
6442                for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6443                        regs[i / sizeof(u32)] = tr32(i);
6444        } else
6445                tg3_dump_legacy_regs(tp, regs);
6446
6447        for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6448                if (!regs[i + 0] && !regs[i + 1] &&
6449                    !regs[i + 2] && !regs[i + 3])
6450                        continue;
6451
6452                netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6453                           i * 4,
6454                           regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6455        }
6456
6457        kfree(regs);
6458
6459        for (i = 0; i < tp->irq_cnt; i++) {
6460                struct tg3_napi *tnapi = &tp->napi[i];
6461
6462                /* SW status block */
6463                netdev_err(tp->dev,
6464                         "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6465                           i,
6466                           tnapi->hw_status->status,
6467                           tnapi->hw_status->status_tag,
6468                           tnapi->hw_status->rx_jumbo_consumer,
6469                           tnapi->hw_status->rx_consumer,
6470                           tnapi->hw_status->rx_mini_consumer,
6471                           tnapi->hw_status->idx[0].rx_producer,
6472                           tnapi->hw_status->idx[0].tx_consumer);
6473
6474                netdev_err(tp->dev,
6475                "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6476                           i,
6477                           tnapi->last_tag, tnapi->last_irq_tag,
6478                           tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6479                           tnapi->rx_rcb_ptr,
6480                           tnapi->prodring.rx_std_prod_idx,
6481                           tnapi->prodring.rx_std_cons_idx,
6482                           tnapi->prodring.rx_jmb_prod_idx,
6483                           tnapi->prodring.rx_jmb_cons_idx);
6484        }
6485}
6486
6487/* This is called whenever we suspect that the system chipset is re-
6488 * ordering the sequence of MMIO to the tx send mailbox. The symptom
6489 * is bogus tx completions. We try to recover by setting the
6490 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6491 * in the workqueue.
6492 */
6493static void tg3_tx_recover(struct tg3 *tp)
6494{
6495        BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6496               tp->write32_tx_mbox == tg3_write_indirect_mbox);
6497
6498        netdev_warn(tp->dev,
6499                    "The system may be re-ordering memory-mapped I/O "
6500                    "cycles to the network device, attempting to recover. "
6501                    "Please report the problem to the driver maintainer "
6502                    "and include system chipset information.\n");
6503
6504        tg3_flag_set(tp, TX_RECOVERY_PENDING);
6505}
6506
6507static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6508{
6509        /* Tell compiler to fetch tx indices from memory. */
6510        barrier();
6511        return tnapi->tx_pending -
6512               ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6513}
6514
6515/* Tigon3 never reports partial packet sends.  So we do not
6516 * need special logic to handle SKBs that have not had all
6517 * of their frags sent yet, like SunGEM does.
6518 */
6519static void tg3_tx(struct tg3_napi *tnapi)
6520{
6521        struct tg3 *tp = tnapi->tp;
6522        u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6523        u32 sw_idx = tnapi->tx_cons;
6524        struct netdev_queue *txq;
6525        int index = tnapi - tp->napi;
6526        unsigned int pkts_compl = 0, bytes_compl = 0;
6527
6528        if (tg3_flag(tp, ENABLE_TSS))
6529                index--;
6530
6531        txq = netdev_get_tx_queue(tp->dev, index);
6532
6533        while (sw_idx != hw_idx) {
6534                struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6535                struct sk_buff *skb = ri->skb;
6536                int i, tx_bug = 0;
6537
6538                if (unlikely(skb == NULL)) {
6539                        tg3_tx_recover(tp);
6540                        return;
6541                }
6542
6543                if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6544                        struct skb_shared_hwtstamps timestamp;
6545                        u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6546                        hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6547
6548                        tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6549
6550                        skb_tstamp_tx(skb, &timestamp);
6551                }
6552
6553                pci_unmap_single(tp->pdev,
6554                                 dma_unmap_addr(ri, mapping),
6555                                 skb_headlen(skb),
6556                                 PCI_DMA_TODEVICE);
6557
6558                ri->skb = NULL;
6559
6560                while (ri->fragmented) {
6561                        ri->fragmented = false;
6562                        sw_idx = NEXT_TX(sw_idx);
6563                        ri = &tnapi->tx_buffers[sw_idx];
6564                }
6565
6566                sw_idx = NEXT_TX(sw_idx);
6567
6568                for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6569                        ri = &tnapi->tx_buffers[sw_idx];
6570                        if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6571                                tx_bug = 1;
6572
6573                        pci_unmap_page(tp->pdev,
6574                                       dma_unmap_addr(ri, mapping),
6575                                       skb_frag_size(&skb_shinfo(skb)->frags[i]),
6576                                       PCI_DMA_TODEVICE);
6577
6578                        while (ri->fragmented) {
6579                                ri->fragmented = false;
6580                                sw_idx = NEXT_TX(sw_idx);
6581                                ri = &tnapi->tx_buffers[sw_idx];
6582                        }
6583
6584                        sw_idx = NEXT_TX(sw_idx);
6585                }
6586
6587                pkts_compl++;
6588                bytes_compl += skb->len;
6589
6590                dev_consume_skb_any(skb);
6591
6592                if (unlikely(tx_bug)) {
6593                        tg3_tx_recover(tp);
6594                        return;
6595                }
6596        }
6597
6598        netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6599
6600        tnapi->tx_cons = sw_idx;
6601
6602        /* Need to make the tx_cons update visible to tg3_start_xmit()
6603         * before checking for netif_queue_stopped().  Without the
6604         * memory barrier, there is a small possibility that tg3_start_xmit()
6605         * will miss it and cause the queue to be stopped forever.
6606         */
6607        smp_mb();
6608
6609        if (unlikely(netif_tx_queue_stopped(txq) &&
6610                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6611                __netif_tx_lock(txq, smp_processor_id());
6612                if (netif_tx_queue_stopped(txq) &&
6613                    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6614                        netif_tx_wake_queue(txq);
6615                __netif_tx_unlock(txq);
6616        }
6617}
6618
6619static void tg3_frag_free(bool is_frag, void *data)
6620{
6621        if (is_frag)
6622                skb_free_frag(data);
6623        else
6624                kfree(data);
6625}
6626
6627static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6628{
6629        unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6630                   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6631
6632        if (!ri->data)
6633                return;
6634
6635        pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
6636                         map_sz, PCI_DMA_FROMDEVICE);
6637        tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6638        ri->data = NULL;
6639}
6640
6641
6642/* Returns size of skb allocated or < 0 on error.
6643 *
6644 * We only need to fill in the address because the other members
6645 * of the RX descriptor are invariant, see tg3_init_rings.
6646 *
6647 * Note the purposeful assymetry of cpu vs. chip accesses.  For
6648 * posting buffers we only dirty the first cache line of the RX
6649 * descriptor (containing the address).  Whereas for the RX status
6650 * buffers the cpu only reads the last cacheline of the RX descriptor
6651 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6652 */
6653static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6654                             u32 opaque_key, u32 dest_idx_unmasked,
6655                             unsigned int *frag_size)
6656{
6657        struct tg3_rx_buffer_desc *desc;
6658        struct ring_info *map;
6659        u8 *data;
6660        dma_addr_t mapping;
6661        int skb_size, data_size, dest_idx;
6662
6663        switch (opaque_key) {
6664        case RXD_OPAQUE_RING_STD:
6665                dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6666                desc = &tpr->rx_std[dest_idx];
6667                map = &tpr->rx_std_buffers[dest_idx];
6668                data_size = tp->rx_pkt_map_sz;
6669                break;
6670
6671        case RXD_OPAQUE_RING_JUMBO:
6672                dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6673                desc = &tpr->rx_jmb[dest_idx].std;
6674                map = &tpr->rx_jmb_buffers[dest_idx];
6675                data_size = TG3_RX_JMB_MAP_SZ;
6676                break;
6677
6678        default:
6679                return -EINVAL;
6680        }
6681
6682        /* Do not overwrite any of the map or rp information
6683         * until we are sure we can commit to a new buffer.
6684         *
6685         * Callers depend upon this behavior and assume that
6686         * we leave everything unchanged if we fail.
6687         */
6688        skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6689                   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6690        if (skb_size <= PAGE_SIZE) {
6691                data = netdev_alloc_frag(skb_size);
6692                *frag_size = skb_size;
6693        } else {
6694                data = kmalloc(skb_size, GFP_ATOMIC);
6695                *frag_size = 0;
6696        }
6697        if (!data)
6698                return -ENOMEM;
6699
6700        mapping = pci_map_single(tp->pdev,
6701                                 data + TG3_RX_OFFSET(tp),
6702                                 data_size,
6703                                 PCI_DMA_FROMDEVICE);
6704        if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
6705                tg3_frag_free(skb_size <= PAGE_SIZE, data);
6706                return -EIO;
6707        }
6708
6709        map->data = data;
6710        dma_unmap_addr_set(map, mapping, mapping);
6711
6712        desc->addr_hi = ((u64)mapping >> 32);
6713        desc->addr_lo = ((u64)mapping & 0xffffffff);
6714
6715        return data_size;
6716}
6717
6718/* We only need to move over in the address because the other
6719 * members of the RX descriptor are invariant.  See notes above
6720 * tg3_alloc_rx_data for full details.
6721 */
6722static void tg3_recycle_rx(struct tg3_napi *tnapi,
6723                           struct tg3_rx_prodring_set *dpr,
6724                           u32 opaque_key, int src_idx,
6725                           u32 dest_idx_unmasked)
6726{
6727        struct tg3 *tp = tnapi->tp;
6728        struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6729        struct ring_info *src_map, *dest_map;
6730        struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6731        int dest_idx;
6732
6733        switch (opaque_key) {
6734        case RXD_OPAQUE_RING_STD:
6735                dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6736                dest_desc = &dpr->rx_std[dest_idx];
6737                dest_map = &dpr->rx_std_buffers[dest_idx];
6738                src_desc = &spr->rx_std[src_idx];
6739                src_map = &spr->rx_std_buffers[src_idx];
6740                break;
6741
6742        case RXD_OPAQUE_RING_JUMBO:
6743                dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6744                dest_desc = &dpr->rx_jmb[dest_idx].std;
6745                dest_map = &dpr->rx_jmb_buffers[dest_idx];
6746                src_desc = &spr->rx_jmb[src_idx].std;
6747                src_map = &spr->rx_jmb_buffers[src_idx];
6748                break;
6749
6750        default:
6751                return;
6752        }
6753
6754        dest_map->data = src_map->data;
6755        dma_unmap_addr_set(dest_map, mapping,
6756                           dma_unmap_addr(src_map, mapping));
6757        dest_desc->addr_hi = src_desc->addr_hi;
6758        dest_desc->addr_lo = src_desc->addr_lo;
6759
6760        /* Ensure that the update to the skb happens after the physical
6761         * addresses have been transferred to the new BD location.
6762         */
6763        smp_wmb();
6764
6765        src_map->data = NULL;
6766}
6767
6768/* The RX ring scheme is composed of multiple rings which post fresh
6769 * buffers to the chip, and one special ring the chip uses to report
6770 * status back to the host.
6771 *
6772 * The special ring reports the status of received packets to the
6773 * host.  The chip does not write into the original descriptor the
6774 * RX buffer was obtained from.  The chip simply takes the original
6775 * descriptor as provided by the host, updates the status and length
6776 * field, then writes this into the next status ring entry.
6777 *
6778 * Each ring the host uses to post buffers to the chip is described
6779 * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6780 * it is first placed into the on-chip ram.  When the packet's length
6781 * is known, it walks down the TG3_BDINFO entries to select the ring.
6782 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6783 * which is within the range of the new packet's length is chosen.
6784 *
6785 * The "separate ring for rx status" scheme may sound queer, but it makes
6786 * sense from a cache coherency perspective.  If only the host writes
6787 * to the buffer post rings, and only the chip writes to the rx status
6788 * rings, then cache lines never move beyond shared-modified state.
6789 * If both the host and chip were to write into the same ring, cache line
6790 * eviction could occur since both entities want it in an exclusive state.
6791 */
6792static int tg3_rx(struct tg3_napi *tnapi, int budget)
6793{
6794        struct tg3 *tp = tnapi->tp;
6795        u32 work_mask, rx_std_posted = 0;
6796        u32 std_prod_idx, jmb_prod_idx;
6797        u32 sw_idx = tnapi->rx_rcb_ptr;
6798        u16 hw_idx;
6799        int received;
6800        struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6801
6802        hw_idx = *(tnapi->rx_rcb_prod_idx);
6803        /*
6804         * We need to order the read of hw_idx and the read of
6805         * the opaque cookie.
6806         */
6807        rmb();
6808        work_mask = 0;
6809        received = 0;
6810        std_prod_idx = tpr->rx_std_prod_idx;
6811        jmb_prod_idx = tpr->rx_jmb_prod_idx;
6812        while (sw_idx != hw_idx && budget > 0) {
6813                struct ring_info *ri;
6814                struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6815                unsigned int len;
6816                struct sk_buff *skb;
6817                dma_addr_t dma_addr;
6818                u32 opaque_key, desc_idx, *post_ptr;
6819                u8 *data;
6820                u64 tstamp = 0;
6821
6822                desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6823                opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6824                if (opaque_key == RXD_OPAQUE_RING_STD) {
6825                        ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6826                        dma_addr = dma_unmap_addr(ri, mapping);
6827                        data = ri->data;
6828                        post_ptr = &std_prod_idx;
6829                        rx_std_posted++;
6830                } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6831                        ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6832                        dma_addr = dma_unmap_addr(ri, mapping);
6833                        data = ri->data;
6834                        post_ptr = &jmb_prod_idx;
6835                } else
6836                        goto next_pkt_nopost;
6837
6838                work_mask |= opaque_key;
6839
6840                if (desc->err_vlan & RXD_ERR_MASK) {
6841                drop_it:
6842                        tg3_recycle_rx(tnapi, tpr, opaque_key,
6843                                       desc_idx, *post_ptr);
6844                drop_it_no_recycle:
6845                        /* Other statistics kept track of by card. */
6846                        tp->rx_dropped++;
6847                        goto next_pkt;
6848                }
6849
6850                prefetch(data + TG3_RX_OFFSET(tp));
6851                len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6852                      ETH_FCS_LEN;
6853
6854                if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6855                     RXD_FLAG_PTPSTAT_PTPV1 ||
6856                    (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6857                     RXD_FLAG_PTPSTAT_PTPV2) {
6858                        tstamp = tr32(TG3_RX_TSTAMP_LSB);
6859                        tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6860                }
6861
6862                if (len > TG3_RX_COPY_THRESH(tp)) {
6863                        int skb_size;
6864                        unsigned int frag_size;
6865
6866                        skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6867                                                    *post_ptr, &frag_size);
6868                        if (skb_size < 0)
6869                                goto drop_it;
6870
6871                        pci_unmap_single(tp->pdev, dma_addr, skb_size,
6872                                         PCI_DMA_FROMDEVICE);
6873
6874                        /* Ensure that the update to the data happens
6875                         * after the usage of the old DMA mapping.
6876                         */
6877                        smp_wmb();
6878
6879                        ri->data = NULL;
6880
6881                        skb = build_skb(data, frag_size);
6882                        if (!skb) {
6883                                tg3_frag_free(frag_size != 0, data);
6884                                goto drop_it_no_recycle;
6885                        }
6886                        skb_reserve(skb, TG3_RX_OFFSET(tp));
6887                } else {
6888                        tg3_recycle_rx(tnapi, tpr, opaque_key,
6889                                       desc_idx, *post_ptr);
6890
6891                        skb = netdev_alloc_skb(tp->dev,
6892                                               len + TG3_RAW_IP_ALIGN);
6893                        if (skb == NULL)
6894                                goto drop_it_no_recycle;
6895
6896                        skb_reserve(skb, TG3_RAW_IP_ALIGN);
6897                        pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6898                        memcpy(skb->data,
6899                               data + TG3_RX_OFFSET(tp),
6900                               len);
6901                        pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6902                }
6903
6904                skb_put(skb, len);
6905                if (tstamp)
6906                        tg3_hwclock_to_timestamp(tp, tstamp,
6907                                                 skb_hwtstamps(skb));
6908
6909                if ((tp->dev->features & NETIF_F_RXCSUM) &&
6910                    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6911                    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6912                      >> RXD_TCPCSUM_SHIFT) == 0xffff))
6913                        skb->ip_summed = CHECKSUM_UNNECESSARY;
6914                else
6915                        skb_checksum_none_assert(skb);
6916
6917                skb->protocol = eth_type_trans(skb, tp->dev);
6918
6919                if (len > (tp->dev->mtu + ETH_HLEN) &&
6920                    skb->protocol != htons(ETH_P_8021Q) &&
6921                    skb->protocol != htons(ETH_P_8021AD)) {
6922                        dev_kfree_skb_any(skb);
6923                        goto drop_it_no_recycle;
6924                }
6925
6926                if (desc->type_flags & RXD_FLAG_VLAN &&
6927                    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6928                        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6929                                               desc->err_vlan & RXD_VLAN_MASK);
6930
6931                napi_gro_receive(&tnapi->napi, skb);
6932
6933                received++;
6934                budget--;
6935
6936next_pkt:
6937                (*post_ptr)++;
6938
6939                if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6940                        tpr->rx_std_prod_idx = std_prod_idx &
6941                                               tp->rx_std_ring_mask;
6942                        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6943                                     tpr->rx_std_prod_idx);
6944                        work_mask &= ~RXD_OPAQUE_RING_STD;
6945                        rx_std_posted = 0;
6946                }
6947next_pkt_nopost:
6948                sw_idx++;
6949                sw_idx &= tp->rx_ret_ring_mask;
6950
6951                /* Refresh hw_idx to see if there is new work */
6952                if (sw_idx == hw_idx) {
6953                        hw_idx = *(tnapi->rx_rcb_prod_idx);
6954                        rmb();
6955                }
6956        }
6957
6958        /* ACK the status ring. */
6959        tnapi->rx_rcb_ptr = sw_idx;
6960        tw32_rx_mbox(tnapi->consmbox, sw_idx);
6961
6962        /* Refill RX ring(s). */
6963        if (!tg3_flag(tp, ENABLE_RSS)) {
6964                /* Sync BD data before updating mailbox */
6965                wmb();
6966
6967                if (work_mask & RXD_OPAQUE_RING_STD) {
6968                        tpr->rx_std_prod_idx = std_prod_idx &
6969                                               tp->rx_std_ring_mask;
6970                        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6971                                     tpr->rx_std_prod_idx);
6972                }
6973                if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6974                        tpr->rx_jmb_prod_idx = jmb_prod_idx &
6975                                               tp->rx_jmb_ring_mask;
6976                        tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6977                                     tpr->rx_jmb_prod_idx);
6978                }
6979                mmiowb();
6980        } else if (work_mask) {
6981                /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6982                 * updated before the producer indices can be updated.
6983                 */
6984                smp_wmb();
6985
6986                tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6987                tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6988
6989                if (tnapi != &tp->napi[1]) {
6990                        tp->rx_refill = true;
6991                        napi_schedule(&tp->napi[1].napi);
6992                }
6993        }
6994
6995        return received;
6996}
6997
6998static void tg3_poll_link(struct tg3 *tp)
6999{
7000        /* handle link change and other phy events */
7001        if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7002                struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7003
7004                if (sblk->status & SD_STATUS_LINK_CHG) {
7005                        sblk->status = SD_STATUS_UPDATED |
7006                                       (sblk->status & ~SD_STATUS_LINK_CHG);
7007                        spin_lock(&tp->lock);
7008                        if (tg3_flag(tp, USE_PHYLIB)) {
7009                                tw32_f(MAC_STATUS,
7010                                     (MAC_STATUS_SYNC_CHANGED |
7011                                      MAC_STATUS_CFG_CHANGED |
7012                                      MAC_STATUS_MI_COMPLETION |
7013                                      MAC_STATUS_LNKSTATE_CHANGED));
7014                                udelay(40);
7015                        } else
7016                                tg3_setup_phy(tp, false);
7017                        spin_unlock(&tp->lock);
7018                }
7019        }
7020}
7021
7022static int tg3_rx_prodring_xfer(struct tg3 *tp,
7023                                struct tg3_rx_prodring_set *dpr,
7024                                struct tg3_rx_prodring_set *spr)
7025{
7026        u32 si, di, cpycnt, src_prod_idx;
7027        int i, err = 0;
7028
7029        while (1) {
7030                src_prod_idx = spr->rx_std_prod_idx;
7031
7032                /* Make sure updates to the rx_std_buffers[] entries and the
7033                 * standard producer index are seen in the correct order.
7034                 */
7035                smp_rmb();
7036
7037                if (spr->rx_std_cons_idx == src_prod_idx)
7038                        break;
7039
7040                if (spr->rx_std_cons_idx < src_prod_idx)
7041                        cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7042                else
7043                        cpycnt = tp->rx_std_ring_mask + 1 -
7044                                 spr->rx_std_cons_idx;
7045
7046                cpycnt = min(cpycnt,
7047                             tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7048
7049                si = spr->rx_std_cons_idx;
7050                di = dpr->rx_std_prod_idx;
7051
7052                for (i = di; i < di + cpycnt; i++) {
7053                        if (dpr->rx_std_buffers[i].data) {
7054                                cpycnt = i - di;
7055                                err = -ENOSPC;
7056                                break;
7057                        }
7058                }
7059
7060                if (!cpycnt)
7061                        break;
7062
7063                /* Ensure that updates to the rx_std_buffers ring and the
7064                 * shadowed hardware producer ring from tg3_recycle_skb() are
7065                 * ordered correctly WRT the skb check above.
7066                 */
7067                smp_rmb();
7068
7069                memcpy(&dpr->rx_std_buffers[di],
7070                       &spr->rx_std_buffers[si],
7071                       cpycnt * sizeof(struct ring_info));
7072
7073                for (i = 0; i < cpycnt; i++, di++, si++) {
7074                        struct tg3_rx_buffer_desc *sbd, *dbd;
7075                        sbd = &spr->rx_std[si];
7076                        dbd = &dpr->rx_std[di];
7077                        dbd->addr_hi = sbd->addr_hi;
7078                        dbd->addr_lo = sbd->addr_lo;
7079                }
7080
7081                spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7082                                       tp->rx_std_ring_mask;
7083                dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7084                                       tp->rx_std_ring_mask;
7085        }
7086
7087        while (1) {
7088                src_prod_idx = spr->rx_jmb_prod_idx;
7089
7090                /* Make sure updates to the rx_jmb_buffers[] entries and
7091                 * the jumbo producer index are seen in the correct order.
7092                 */
7093                smp_rmb();
7094
7095                if (spr->rx_jmb_cons_idx == src_prod_idx)
7096                        break;
7097
7098                if (spr->rx_jmb_cons_idx < src_prod_idx)
7099                        cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7100                else
7101                        cpycnt = tp->rx_jmb_ring_mask + 1 -
7102                                 spr->rx_jmb_cons_idx;
7103
7104                cpycnt = min(cpycnt,
7105                             tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7106
7107                si = spr->rx_jmb_cons_idx;
7108                di = dpr->rx_jmb_prod_idx;
7109
7110                for (i = di; i < di + cpycnt; i++) {
7111                        if (dpr->rx_jmb_buffers[i].data) {
7112                                cpycnt = i - di;
7113                                err = -ENOSPC;
7114                                break;
7115                        }
7116                }
7117
7118                if (!cpycnt)
7119                        break;
7120
7121                /* Ensure that updates to the rx_jmb_buffers ring and the
7122                 * shadowed hardware producer ring from tg3_recycle_skb() are
7123                 * ordered correctly WRT the skb check above.
7124                 */
7125                smp_rmb();
7126
7127                memcpy(&dpr->rx_jmb_buffers[di],
7128                       &spr->rx_jmb_buffers[si],
7129                       cpycnt * sizeof(struct ring_info));
7130
7131                for (i = 0; i < cpycnt; i++, di++, si++) {
7132                        struct tg3_rx_buffer_desc *sbd, *dbd;
7133                        sbd = &spr->rx_jmb[si].std;
7134                        dbd = &dpr->rx_jmb[di].std;
7135                        dbd->addr_hi = sbd->addr_hi;
7136                        dbd->addr_lo = sbd->addr_lo;
7137                }
7138
7139                spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7140                                       tp->rx_jmb_ring_mask;
7141                dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7142                                       tp->rx_jmb_ring_mask;
7143        }
7144
7145        return err;
7146}
7147
7148static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7149{
7150        struct tg3 *tp = tnapi->tp;
7151
7152        /* run TX completion thread */
7153        if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7154                tg3_tx(tnapi);
7155                if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7156                        return work_done;
7157        }
7158
7159        if (!tnapi->rx_rcb_prod_idx)
7160                return work_done;
7161
7162        /* run RX thread, within the bounds set by NAPI.
7163         * All RX "locking" is done by ensuring outside
7164         * code synchronizes with tg3->napi.poll()
7165         */
7166        if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7167                work_done += tg3_rx(tnapi, budget - work_done);
7168
7169        if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7170                struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7171                int i, err = 0;
7172                u32 std_prod_idx = dpr->rx_std_prod_idx;
7173                u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7174
7175                tp->rx_refill = false;
7176                for (i = 1; i <= tp->rxq_cnt; i++)
7177                        err |= tg3_rx_prodring_xfer(tp, dpr,
7178                                                    &tp->napi[i].prodring);
7179
7180                wmb();
7181
7182                if (std_prod_idx != dpr->rx_std_prod_idx)
7183                        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7184                                     dpr->rx_std_prod_idx);
7185
7186                if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7187                        tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7188                                     dpr->rx_jmb_prod_idx);
7189
7190                mmiowb();
7191
7192                if (err)
7193                        tw32_f(HOSTCC_MODE, tp->coal_now);
7194        }
7195
7196        return work_done;
7197}
7198
7199static inline void tg3_reset_task_schedule(struct tg3 *tp)
7200{
7201        if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7202                schedule_work(&tp->reset_task);
7203}
7204
7205static inline void tg3_reset_task_cancel(struct tg3 *tp)
7206{
7207        cancel_work_sync(&tp->reset_task);
7208        tg3_flag_clear(tp, RESET_TASK_PENDING);
7209        tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7210}
7211
7212static int tg3_poll_msix(struct napi_struct *napi, int budget)
7213{
7214        struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7215        struct tg3 *tp = tnapi->tp;
7216        int work_done = 0;
7217        struct tg3_hw_status *sblk = tnapi->hw_status;
7218
7219        while (1) {
7220                work_done = tg3_poll_work(tnapi, work_done, budget);
7221
7222                if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7223                        goto tx_recovery;
7224
7225                if (unlikely(work_done >= budget))
7226                        break;
7227
7228                /* tp->last_tag is used in tg3_int_reenable() below
7229                 * to tell the hw how much work has been processed,
7230                 * so we must read it before checking for more work.
7231                 */
7232                tnapi->last_tag = sblk->status_tag;
7233                tnapi->last_irq_tag = tnapi->last_tag;
7234                rmb();
7235
7236                /* check for RX/TX work to do */
7237                if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7238                           *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7239
7240                        /* This test here is not race free, but will reduce
7241                         * the number of interrupts by looping again.
7242                         */
7243                        if (tnapi == &tp->napi[1] && tp->rx_refill)
7244                                continue;
7245
7246                        napi_complete_done(napi, work_done);
7247                        /* Reenable interrupts. */
7248                        tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7249
7250                        /* This test here is synchronized by napi_schedule()
7251                         * and napi_complete() to close the race condition.
7252                         */
7253                        if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7254                                tw32(HOSTCC_MODE, tp->coalesce_mode |
7255                                                  HOSTCC_MODE_ENABLE |
7256                                                  tnapi->coal_now);
7257                        }
7258                        mmiowb();
7259                        break;
7260                }
7261        }
7262
7263        return work_done;
7264
7265tx_recovery:
7266        /* work_done is guaranteed to be less than budget. */
7267        napi_complete(napi);
7268        tg3_reset_task_schedule(tp);
7269        return work_done;
7270}
7271
7272static void tg3_process_error(struct tg3 *tp)
7273{
7274        u32 val;
7275        bool real_error = false;
7276
7277        if (tg3_flag(tp, ERROR_PROCESSED))
7278                return;
7279
7280        /* Check Flow Attention register */
7281        val = tr32(HOSTCC_FLOW_ATTN);
7282        if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7283                netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7284                real_error = true;
7285        }
7286
7287        if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7288                netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7289                real_error = true;
7290        }
7291
7292        if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7293                netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7294                real_error = true;
7295        }
7296
7297        if (!real_error)
7298                return;
7299
7300        tg3_dump_state(tp);
7301
7302        tg3_flag_set(tp, ERROR_PROCESSED);
7303        tg3_reset_task_schedule(tp);
7304}
7305
7306static int tg3_poll(struct napi_struct *napi, int budget)
7307{
7308        struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7309        struct tg3 *tp = tnapi->tp;
7310        int work_done = 0;
7311        struct tg3_hw_status *sblk = tnapi->hw_status;
7312
7313        while (1) {
7314                if (sblk->status & SD_STATUS_ERROR)
7315                        tg3_process_error(tp);
7316
7317                tg3_poll_link(tp);
7318
7319                work_done = tg3_poll_work(tnapi, work_done, budget);
7320
7321                if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7322                        goto tx_recovery;
7323
7324                if (unlikely(work_done >= budget))
7325                        break;
7326
7327                if (tg3_flag(tp, TAGGED_STATUS)) {
7328                        /* tp->last_tag is used in tg3_int_reenable() below
7329                         * to tell the hw how much work has been processed,
7330                         * so we must read it before checking for more work.
7331                         */
7332                        tnapi->last_tag = sblk->status_tag;
7333                        tnapi->last_irq_tag = tnapi->last_tag;
7334                        rmb();
7335                } else
7336                        sblk->status &= ~SD_STATUS_UPDATED;
7337
7338                if (likely(!tg3_has_work(tnapi))) {
7339                        napi_complete_done(napi, work_done);
7340                        tg3_int_reenable(tnapi);
7341                        break;
7342                }
7343        }
7344
7345        return work_done;
7346
7347tx_recovery:
7348        /* work_done is guaranteed to be less than budget. */
7349        napi_complete(napi);
7350        tg3_reset_task_schedule(tp);
7351        return work_done;
7352}
7353
7354static void tg3_napi_disable(struct tg3 *tp)
7355{
7356        int i;
7357
7358        for (i = tp->irq_cnt - 1; i >= 0; i--)
7359                napi_disable(&tp->napi[i].napi);
7360}
7361
7362static void tg3_napi_enable(struct tg3 *tp)
7363{
7364        int i;
7365
7366        for (i = 0; i < tp->irq_cnt; i++)
7367                napi_enable(&tp->napi[i].napi);
7368}
7369
7370static void tg3_napi_init(struct tg3 *tp)
7371{
7372        int i;
7373
7374        netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7375        for (i = 1; i < tp->irq_cnt; i++)
7376                netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7377}
7378
7379static void tg3_napi_fini(struct tg3 *tp)
7380{
7381        int i;
7382
7383        for (i = 0; i < tp->irq_cnt; i++)
7384                netif_napi_del(&tp->napi[i].napi);
7385}
7386
7387static inline void tg3_netif_stop(struct tg3 *tp)
7388{
7389        netif_trans_update(tp->dev);    /* prevent tx timeout */
7390        tg3_napi_disable(tp);
7391        netif_carrier_off(tp->dev);
7392        netif_tx_disable(tp->dev);
7393}
7394
7395/* tp->lock must be held */
7396static inline void tg3_netif_start(struct tg3 *tp)
7397{
7398        tg3_ptp_resume(tp);
7399
7400        /* NOTE: unconditional netif_tx_wake_all_queues is only
7401         * appropriate so long as all callers are assured to
7402         * have free tx slots (such as after tg3_init_hw)
7403         */
7404        netif_tx_wake_all_queues(tp->dev);
7405
7406        if (tp->link_up)
7407                netif_carrier_on(tp->dev);
7408
7409        tg3_napi_enable(tp);
7410        tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7411        tg3_enable_ints(tp);
7412}
7413
7414static void tg3_irq_quiesce(struct tg3 *tp)
7415        __releases(tp->lock)
7416        __acquires(tp->lock)
7417{
7418        int i;
7419
7420        BUG_ON(tp->irq_sync);
7421
7422        tp->irq_sync = 1;
7423        smp_mb();
7424
7425        spin_unlock_bh(&tp->lock);
7426
7427        for (i = 0; i < tp->irq_cnt; i++)
7428                synchronize_irq(tp->napi[i].irq_vec);
7429
7430        spin_lock_bh(&tp->lock);
7431}
7432
7433/* Fully shutdown all tg3 driver activity elsewhere in the system.
7434 * If irq_sync is non-zero, then the IRQ handler must be synchronized
7435 * with as well.  Most of the time, this is not necessary except when
7436 * shutting down the device.
7437 */
7438static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7439{
7440        spin_lock_bh(&tp->lock);
7441        if (irq_sync)
7442                tg3_irq_quiesce(tp);
7443}
7444
7445static inline void tg3_full_unlock(struct tg3 *tp)
7446{
7447        spin_unlock_bh(&tp->lock);
7448}
7449
7450/* One-shot MSI handler - Chip automatically disables interrupt
7451 * after sending MSI so driver doesn't have to do it.
7452 */
7453static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7454{
7455        struct tg3_napi *tnapi = dev_id;
7456        struct tg3 *tp = tnapi->tp;
7457
7458        prefetch(tnapi->hw_status);
7459        if (tnapi->rx_rcb)
7460                prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7461
7462        if (likely(!tg3_irq_sync(tp)))
7463                napi_schedule(&tnapi->napi);
7464
7465        return IRQ_HANDLED;
7466}
7467
7468/* MSI ISR - No need to check for interrupt sharing and no need to
7469 * flush status block and interrupt mailbox. PCI ordering rules
7470 * guarantee that MSI will arrive after the status block.
7471 */
7472static irqreturn_t tg3_msi(int irq, void *dev_id)
7473{
7474        struct tg3_napi *tnapi = dev_id;
7475        struct tg3 *tp = tnapi->tp;
7476
7477        prefetch(tnapi->hw_status);
7478        if (tnapi->rx_rcb)
7479                prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7480        /*
7481         * Writing any value to intr-mbox-0 clears PCI INTA# and
7482         * chip-internal interrupt pending events.
7483         * Writing non-zero to intr-mbox-0 additional tells the
7484         * NIC to stop sending us irqs, engaging "in-intr-handler"
7485         * event coalescing.
7486         */
7487        tw32_mailbox(tnapi->int_mbox, 0x00000001);
7488        if (likely(!tg3_irq_sync(tp)))
7489                napi_schedule(&tnapi->napi);
7490
7491        return IRQ_RETVAL(1);
7492}
7493
7494static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7495{
7496        struct tg3_napi *tnapi = dev_id;
7497        struct tg3 *tp = tnapi->tp;
7498        struct tg3_hw_status *sblk = tnapi->hw_status;
7499        unsigned int handled = 1;
7500
7501        /* In INTx mode, it is possible for the interrupt to arrive at
7502         * the CPU before the status block posted prior to the interrupt.
7503         * Reading the PCI State register will confirm whether the
7504         * interrupt is ours and will flush the status block.
7505         */
7506        if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7507                if (tg3_flag(tp, CHIP_RESETTING) ||
7508                    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7509                        handled = 0;
7510                        goto out;
7511                }
7512        }
7513
7514        /*
7515         * Writing any value to intr-mbox-0 clears PCI INTA# and
7516         * chip-internal interrupt pending events.
7517         * Writing non-zero to intr-mbox-0 additional tells the
7518         * NIC to stop sending us irqs, engaging "in-intr-handler"
7519         * event coalescing.
7520         *
7521         * Flush the mailbox to de-assert the IRQ immediately to prevent
7522         * spurious interrupts.  The flush impacts performance but
7523         * excessive spurious interrupts can be worse in some cases.
7524         */
7525        tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7526        if (tg3_irq_sync(tp))
7527                goto out;
7528        sblk->status &= ~SD_STATUS_UPDATED;
7529        if (likely(tg3_has_work(tnapi))) {
7530                prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7531                napi_schedule(&tnapi->napi);
7532        } else {
7533                /* No work, shared interrupt perhaps?  re-enable
7534                 * interrupts, and flush that PCI write
7535                 */
7536                tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7537                               0x00000000);
7538        }
7539out:
7540        return IRQ_RETVAL(handled);
7541}
7542
7543static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7544{
7545        struct tg3_napi *tnapi = dev_id;
7546        struct tg3 *tp = tnapi->tp;
7547        struct tg3_hw_status *sblk = tnapi->hw_status;
7548        unsigned int handled = 1;
7549
7550        /* In INTx mode, it is possible for the interrupt to arrive at
7551         * the CPU before the status block posted prior to the interrupt.
7552         * Reading the PCI State register will confirm whether the
7553         * interrupt is ours and will flush the status block.
7554         */
7555        if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7556                if (tg3_flag(tp, CHIP_RESETTING) ||
7557                    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7558                        handled = 0;
7559                        goto out;
7560                }
7561        }
7562
7563        /*
7564         * writing any value to intr-mbox-0 clears PCI INTA# and
7565         * chip-internal interrupt pending events.
7566         * writing non-zero to intr-mbox-0 additional tells the
7567         * NIC to stop sending us irqs, engaging "in-intr-handler"
7568         * event coalescing.
7569         *
7570         * Flush the mailbox to de-assert the IRQ immediately to prevent
7571         * spurious interrupts.  The flush impacts performance but
7572         * excessive spurious interrupts can be worse in some cases.
7573         */
7574        tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7575
7576        /*
7577         * In a shared interrupt configuration, sometimes other devices'
7578         * interrupts will scream.  We record the current status tag here
7579         * so that the above check can report that the screaming interrupts
7580         * are unhandled.  Eventually they will be silenced.
7581         */
7582        tnapi->last_irq_tag = sblk->status_tag;
7583
7584        if (tg3_irq_sync(tp))
7585                goto out;
7586
7587        prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7588
7589        napi_schedule(&tnapi->napi);
7590
7591out:
7592        return IRQ_RETVAL(handled);
7593}
7594
7595/* ISR for interrupt test */
7596static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7597{
7598        struct tg3_napi *tnapi = dev_id;
7599        struct tg3 *tp = tnapi->tp;
7600        struct tg3_hw_status *sblk = tnapi->hw_status;
7601
7602        if ((sblk->status & SD_STATUS_UPDATED) ||
7603            !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7604                tg3_disable_ints(tp);
7605                return IRQ_RETVAL(1);
7606        }
7607        return IRQ_RETVAL(0);
7608}
7609
7610#ifdef CONFIG_NET_POLL_CONTROLLER
7611static void tg3_poll_controller(struct net_device *dev)
7612{
7613        int i;
7614        struct tg3 *tp = netdev_priv(dev);
7615
7616        if (tg3_irq_sync(tp))
7617                return;
7618
7619        for (i = 0; i < tp->irq_cnt; i++)
7620                tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7621}
7622#endif
7623
7624static void tg3_tx_timeout(struct net_device *dev)
7625{
7626        struct tg3 *tp = netdev_priv(dev);
7627
7628        if (netif_msg_tx_err(tp)) {
7629                netdev_err(dev, "transmit timed out, resetting\n");
7630                tg3_dump_state(tp);
7631        }
7632
7633        tg3_reset_task_schedule(tp);
7634}
7635
7636/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7637static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7638{
7639        u32 base = (u32) mapping & 0xffffffff;
7640
7641        return base + len + 8 < base;
7642}
7643
7644/* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7645 * of any 4GB boundaries: 4G, 8G, etc
7646 */
7647static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7648                                           u32 len, u32 mss)
7649{
7650        if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7651                u32 base = (u32) mapping & 0xffffffff;
7652
7653                return ((base + len + (mss & 0x3fff)) < base);
7654        }
7655        return 0;
7656}
7657
7658/* Test for DMA addresses > 40-bit */
7659static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7660                                          int len)
7661{
7662#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7663        if (tg3_flag(tp, 40BIT_DMA_BUG))
7664                return ((u64) mapping + len) > DMA_BIT_MASK(40);
7665        return 0;
7666#else
7667        return 0;
7668#endif
7669}
7670
7671static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7672                                 dma_addr_t mapping, u32 len, u32 flags,
7673                                 u32 mss, u32 vlan)
7674{
7675        txbd->addr_hi = ((u64) mapping >> 32);
7676        txbd->addr_lo = ((u64) mapping & 0xffffffff);
7677        txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7678        txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7679}
7680
7681static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7682                            dma_addr_t map, u32 len, u32 flags,
7683                            u32 mss, u32 vlan)
7684{
7685        struct tg3 *tp = tnapi->tp;
7686        bool hwbug = false;
7687
7688        if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7689                hwbug = true;
7690
7691        if (tg3_4g_overflow_test(map, len))
7692                hwbug = true;
7693
7694        if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7695                hwbug = true;
7696
7697        if (tg3_40bit_overflow_test(tp, map, len))
7698                hwbug = true;
7699
7700        if (tp->dma_limit) {
7701                u32 prvidx = *entry;
7702                u32 tmp_flag = flags & ~TXD_FLAG_END;
7703                while (len > tp->dma_limit && *budget) {
7704                        u32 frag_len = tp->dma_limit;
7705                        len -= tp->dma_limit;
7706
7707                        /* Avoid the 8byte DMA problem */
7708                        if (len <= 8) {
7709                                len += tp->dma_limit / 2;
7710                                frag_len = tp->dma_limit / 2;
7711                        }
7712
7713                        tnapi->tx_buffers[*entry].fragmented = true;
7714
7715                        tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7716                                      frag_len, tmp_flag, mss, vlan);
7717                        *budget -= 1;
7718                        prvidx = *entry;
7719                        *entry = NEXT_TX(*entry);
7720
7721                        map += frag_len;
7722                }
7723
7724                if (len) {
7725                        if (*budget) {
7726                                tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7727                                              len, flags, mss, vlan);
7728                                *budget -= 1;
7729                                *entry = NEXT_TX(*entry);
7730                        } else {
7731                                hwbug = true;
7732                                tnapi->tx_buffers[prvidx].fragmented = false;
7733                        }
7734                }
7735        } else {
7736                tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7737                              len, flags, mss, vlan);
7738                *entry = NEXT_TX(*entry);
7739        }
7740
7741        return hwbug;
7742}
7743
7744static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7745{
7746        int i;
7747        struct sk_buff *skb;
7748        struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7749
7750        skb = txb->skb;
7751        txb->skb = NULL;
7752
7753        pci_unmap_single(tnapi->tp->pdev,
7754                         dma_unmap_addr(txb, mapping),
7755                         skb_headlen(skb),
7756                         PCI_DMA_TODEVICE);
7757
7758        while (txb->fragmented) {
7759                txb->fragmented = false;
7760                entry = NEXT_TX(entry);
7761                txb = &tnapi->tx_buffers[entry];
7762        }
7763
7764        for (i = 0; i <= last; i++) {
7765                const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7766
7767                entry = NEXT_TX(entry);
7768                txb = &tnapi->tx_buffers[entry];
7769
7770                pci_unmap_page(tnapi->tp->pdev,
7771                               dma_unmap_addr(txb, mapping),
7772                               skb_frag_size(frag), PCI_DMA_TODEVICE);
7773
7774                while (txb->fragmented) {
7775                        txb->fragmented = false;
7776                        entry = NEXT_TX(entry);
7777                        txb = &tnapi->tx_buffers[entry];
7778                }
7779        }
7780}
7781
7782/* Workaround 4GB and 40-bit hardware DMA bugs. */
7783static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7784                                       struct sk_buff **pskb,
7785                                       u32 *entry, u32 *budget,
7786                                       u32 base_flags, u32 mss, u32 vlan)
7787{
7788        struct tg3 *tp = tnapi->tp;
7789        struct sk_buff *new_skb, *skb = *pskb;
7790        dma_addr_t new_addr = 0;
7791        int ret = 0;
7792
7793        if (tg3_asic_rev(tp) != ASIC_REV_5701)
7794                new_skb = skb_copy(skb, GFP_ATOMIC);
7795        else {
7796                int more_headroom = 4 - ((unsigned long)skb->data & 3);
7797
7798                new_skb = skb_copy_expand(skb,
7799                                          skb_headroom(skb) + more_headroom,
7800                                          skb_tailroom(skb), GFP_ATOMIC);
7801        }
7802
7803        if (!new_skb) {
7804                ret = -1;
7805        } else {
7806                /* New SKB is guaranteed to be linear. */
7807                new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
7808                                          PCI_DMA_TODEVICE);
7809                /* Make sure the mapping succeeded */
7810                if (pci_dma_mapping_error(tp->pdev, new_addr)) {
7811                        dev_kfree_skb_any(new_skb);
7812                        ret = -1;
7813                } else {
7814                        u32 save_entry = *entry;
7815
7816                        base_flags |= TXD_FLAG_END;
7817
7818                        tnapi->tx_buffers[*entry].skb = new_skb;
7819                        dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7820                                           mapping, new_addr);
7821
7822                        if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7823                                            new_skb->len, base_flags,
7824                                            mss, vlan)) {
7825                                tg3_tx_skb_unmap(tnapi, save_entry, -1);
7826                                dev_kfree_skb_any(new_skb);
7827                                ret = -1;
7828                        }
7829                }
7830        }
7831
7832        dev_consume_skb_any(skb);
7833        *pskb = new_skb;
7834        return ret;
7835}
7836
7837static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7838{
7839        /* Check if we will never have enough descriptors,
7840         * as gso_segs can be more than current ring size
7841         */
7842        return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7843}
7844
7845static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7846
7847/* Use GSO to workaround all TSO packets that meet HW bug conditions
7848 * indicated in tg3_tx_frag_set()
7849 */
7850static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7851                       struct netdev_queue *txq, struct sk_buff *skb)
7852{
7853        struct sk_buff *segs, *nskb;
7854        u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7855
7856        /* Estimate the number of fragments in the worst case */
7857        if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7858                netif_tx_stop_queue(txq);
7859
7860                /* netif_tx_stop_queue() must be done before checking
7861                 * checking tx index in tg3_tx_avail() below, because in
7862                 * tg3_tx(), we update tx index before checking for
7863                 * netif_tx_queue_stopped().
7864                 */
7865                smp_mb();
7866                if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7867                        return NETDEV_TX_BUSY;
7868
7869                netif_tx_wake_queue(txq);
7870        }
7871
7872        segs = skb_gso_segment(skb, tp->dev->features &
7873                                    ~(NETIF_F_TSO | NETIF_F_TSO6));
7874        if (IS_ERR(segs) || !segs)
7875                goto tg3_tso_bug_end;
7876
7877        do {
7878                nskb = segs;
7879                segs = segs->next;
7880                nskb->next = NULL;
7881                tg3_start_xmit(nskb, tp->dev);
7882        } while (segs);
7883
7884tg3_tso_bug_end:
7885        dev_consume_skb_any(skb);
7886
7887        return NETDEV_TX_OK;
7888}
7889
7890/* hard_start_xmit for all devices */
7891static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7892{
7893        struct tg3 *tp = netdev_priv(dev);
7894        u32 len, entry, base_flags, mss, vlan = 0;
7895        u32 budget;
7896        int i = -1, would_hit_hwbug;
7897        dma_addr_t mapping;
7898        struct tg3_napi *tnapi;
7899        struct netdev_queue *txq;
7900        unsigned int last;
7901        struct iphdr *iph = NULL;
7902        struct tcphdr *tcph = NULL;
7903        __sum16 tcp_csum = 0, ip_csum = 0;
7904        __be16 ip_tot_len = 0;
7905
7906        txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7907        tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7908        if (tg3_flag(tp, ENABLE_TSS))
7909                tnapi++;
7910
7911        budget = tg3_tx_avail(tnapi);
7912
7913        /* We are running in BH disabled context with netif_tx_lock
7914         * and TX reclaim runs via tp->napi.poll inside of a software
7915         * interrupt.  Furthermore, IRQ processing runs lockless so we have
7916         * no IRQ context deadlocks to worry about either.  Rejoice!
7917         */
7918        if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7919                if (!netif_tx_queue_stopped(txq)) {
7920                        netif_tx_stop_queue(txq);
7921
7922                        /* This is a hard error, log it. */
7923                        netdev_err(dev,
7924                                   "BUG! Tx Ring full when queue awake!\n");
7925                }
7926                return NETDEV_TX_BUSY;
7927        }
7928
7929        entry = tnapi->tx_prod;
7930        base_flags = 0;
7931
7932        mss = skb_shinfo(skb)->gso_size;
7933        if (mss) {
7934                u32 tcp_opt_len, hdr_len;
7935
7936                if (skb_cow_head(skb, 0))
7937                        goto drop;
7938
7939                iph = ip_hdr(skb);
7940                tcp_opt_len = tcp_optlen(skb);
7941
7942                hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7943
7944                /* HW/FW can not correctly segment packets that have been
7945                 * vlan encapsulated.
7946                 */
7947                if (skb->protocol == htons(ETH_P_8021Q) ||
7948                    skb->protocol == htons(ETH_P_8021AD)) {
7949                        if (tg3_tso_bug_gso_check(tnapi, skb))
7950                                return tg3_tso_bug(tp, tnapi, txq, skb);
7951                        goto drop;
7952                }
7953
7954                if (!skb_is_gso_v6(skb)) {
7955                        if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7956                            tg3_flag(tp, TSO_BUG)) {
7957                                if (tg3_tso_bug_gso_check(tnapi, skb))
7958                                        return tg3_tso_bug(tp, tnapi, txq, skb);
7959                                goto drop;
7960                        }
7961                        ip_csum = iph->check;
7962                        ip_tot_len = iph->tot_len;
7963                        iph->check = 0;
7964                        iph->tot_len = htons(mss + hdr_len);
7965                }
7966
7967                base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7968                               TXD_FLAG_CPU_POST_DMA);
7969
7970                tcph = tcp_hdr(skb);
7971                tcp_csum = tcph->check;
7972
7973                if (tg3_flag(tp, HW_TSO_1) ||
7974                    tg3_flag(tp, HW_TSO_2) ||
7975                    tg3_flag(tp, HW_TSO_3)) {
7976                        tcph->check = 0;
7977                        base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7978                } else {
7979                        tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
7980                                                         0, IPPROTO_TCP, 0);
7981                }
7982
7983                if (tg3_flag(tp, HW_TSO_3)) {
7984                        mss |= (hdr_len & 0xc) << 12;
7985                        if (hdr_len & 0x10)
7986                                base_flags |= 0x00000010;
7987                        base_flags |= (hdr_len & 0x3e0) << 5;
7988                } else if (tg3_flag(tp, HW_TSO_2))
7989                        mss |= hdr_len << 9;
7990                else if (tg3_flag(tp, HW_TSO_1) ||
7991                         tg3_asic_rev(tp) == ASIC_REV_5705) {
7992                        if (tcp_opt_len || iph->ihl > 5) {
7993                                int tsflags;
7994
7995                                tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7996                                mss |= (tsflags << 11);
7997                        }
7998                } else {
7999                        if (tcp_opt_len || iph->ihl > 5) {
8000                                int tsflags;
8001
8002                                tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8003                                base_flags |= tsflags << 12;
8004                        }
8005                }
8006        } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8007                /* HW/FW can not correctly checksum packets that have been
8008                 * vlan encapsulated.
8009                 */
8010                if (skb->protocol == htons(ETH_P_8021Q) ||
8011                    skb->protocol == htons(ETH_P_8021AD)) {
8012                        if (skb_checksum_help(skb))
8013                                goto drop;
8014                } else  {
8015                        base_flags |= TXD_FLAG_TCPUDP_CSUM;
8016                }
8017        }
8018
8019        if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8020            !mss && skb->len > VLAN_ETH_FRAME_LEN)
8021                base_flags |= TXD_FLAG_JMB_PKT;
8022
8023        if (skb_vlan_tag_present(skb)) {
8024                base_flags |= TXD_FLAG_VLAN;
8025                vlan = skb_vlan_tag_get(skb);
8026        }
8027
8028        if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8029            tg3_flag(tp, TX_TSTAMP_EN)) {
8030                skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8031                base_flags |= TXD_FLAG_HWTSTAMP;
8032        }
8033
8034        len = skb_headlen(skb);
8035
8036        mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
8037        if (pci_dma_mapping_error(tp->pdev, mapping))
8038                goto drop;
8039
8040
8041        tnapi->tx_buffers[entry].skb = skb;
8042        dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8043
8044        would_hit_hwbug = 0;
8045
8046        if (tg3_flag(tp, 5701_DMA_BUG))
8047                would_hit_hwbug = 1;
8048
8049        if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8050                          ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8051                            mss, vlan)) {
8052                would_hit_hwbug = 1;
8053        } else if (skb_shinfo(skb)->nr_frags > 0) {
8054                u32 tmp_mss = mss;
8055
8056                if (!tg3_flag(tp, HW_TSO_1) &&
8057                    !tg3_flag(tp, HW_TSO_2) &&
8058                    !tg3_flag(tp, HW_TSO_3))
8059                        tmp_mss = 0;
8060
8061                /* Now loop through additional data
8062                 * fragments, and queue them.
8063                 */
8064                last = skb_shinfo(skb)->nr_frags - 1;
8065                for (i = 0; i <= last; i++) {
8066                        skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8067
8068                        len = skb_frag_size(frag);
8069                        mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8070                                                   len, DMA_TO_DEVICE);
8071
8072                        tnapi->tx_buffers[entry].skb = NULL;
8073                        dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8074                                           mapping);
8075                        if (dma_mapping_error(&tp->pdev->dev, mapping))
8076                                goto dma_error;
8077
8078                        if (!budget ||
8079                            tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8080                                            len, base_flags |
8081                                            ((i == last) ? TXD_FLAG_END : 0),
8082                                            tmp_mss, vlan)) {
8083                                would_hit_hwbug = 1;
8084                                break;
8085                        }
8086                }
8087        }
8088
8089        if (would_hit_hwbug) {
8090                tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8091
8092                if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8093                        /* If it's a TSO packet, do GSO instead of
8094                         * allocating and copying to a large linear SKB
8095                         */
8096                        if (ip_tot_len) {
8097                                iph->check = ip_csum;
8098                                iph->tot_len = ip_tot_len;
8099                        }
8100                        tcph->check = tcp_csum;
8101                        return tg3_tso_bug(tp, tnapi, txq, skb);
8102                }
8103
8104                /* If the workaround fails due to memory/mapping
8105                 * failure, silently drop this packet.
8106                 */
8107                entry = tnapi->tx_prod;
8108                budget = tg3_tx_avail(tnapi);
8109                if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8110                                                base_flags, mss, vlan))
8111                        goto drop_nofree;
8112        }
8113
8114        skb_tx_timestamp(skb);
8115        netdev_tx_sent_queue(txq, skb->len);
8116
8117        /* Sync BD data before updating mailbox */
8118        wmb();
8119
8120        tnapi->tx_prod = entry;
8121        if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8122                netif_tx_stop_queue(txq);
8123
8124                /* netif_tx_stop_queue() must be done before checking
8125                 * checking tx index in tg3_tx_avail() below, because in
8126                 * tg3_tx(), we update tx index before checking for
8127                 * netif_tx_queue_stopped().
8128                 */
8129                smp_mb();
8130                if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8131                        netif_tx_wake_queue(txq);
8132        }
8133
8134        if (!skb->xmit_more || netif_xmit_stopped(txq)) {
8135                /* Packets are ready, update Tx producer idx on card. */
8136                tw32_tx_mbox(tnapi->prodmbox, entry);
8137                mmiowb();
8138        }
8139
8140        return NETDEV_TX_OK;
8141
8142dma_error:
8143        tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8144        tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8145drop:
8146        dev_kfree_skb_any(skb);
8147drop_nofree:
8148        tp->tx_dropped++;
8149        return NETDEV_TX_OK;
8150}
8151
8152static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8153{
8154        if (enable) {
8155                tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8156                                  MAC_MODE_PORT_MODE_MASK);
8157
8158                tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8159
8160                if (!tg3_flag(tp, 5705_PLUS))
8161                        tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8162
8163                if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8164                        tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8165                else
8166                        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8167        } else {
8168                tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8169
8170                if (tg3_flag(tp, 5705_PLUS) ||
8171                    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8172                    tg3_asic_rev(tp) == ASIC_REV_5700)
8173                        tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8174        }
8175
8176        tw32(MAC_MODE, tp->mac_mode);
8177        udelay(40);
8178}
8179
8180static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8181{
8182        u32 val, bmcr, mac_mode, ptest = 0;
8183
8184        tg3_phy_toggle_apd(tp, false);
8185        tg3_phy_toggle_automdix(tp, false);
8186
8187        if (extlpbk && tg3_phy_set_extloopbk(tp))
8188                return -EIO;
8189
8190        bmcr = BMCR_FULLDPLX;
8191        switch (speed) {
8192        case SPEED_10:
8193                break;
8194        case SPEED_100:
8195                bmcr |= BMCR_SPEED100;
8196                break;
8197        case SPEED_1000:
8198        default:
8199                if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8200                        speed = SPEED_100;
8201                        bmcr |= BMCR_SPEED100;
8202                } else {
8203                        speed = SPEED_1000;
8204                        bmcr |= BMCR_SPEED1000;
8205                }
8206        }
8207
8208        if (extlpbk) {
8209                if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8210                        tg3_readphy(tp, MII_CTRL1000, &val);
8211                        val |= CTL1000_AS_MASTER |
8212                               CTL1000_ENABLE_MASTER;
8213                        tg3_writephy(tp, MII_CTRL1000, val);
8214                } else {
8215                        ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8216                                MII_TG3_FET_PTEST_TRIM_2;
8217                        tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8218                }
8219        } else
8220                bmcr |= BMCR_LOOPBACK;
8221
8222        tg3_writephy(tp, MII_BMCR, bmcr);
8223
8224        /* The write needs to be flushed for the FETs */
8225        if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8226                tg3_readphy(tp, MII_BMCR, &bmcr);
8227
8228        udelay(40);
8229
8230        if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8231            tg3_asic_rev(tp) == ASIC_REV_5785) {
8232                tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8233                             MII_TG3_FET_PTEST_FRC_TX_LINK |
8234                             MII_TG3_FET_PTEST_FRC_TX_LOCK);
8235
8236                /* The write needs to be flushed for the AC131 */
8237                tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8238        }
8239
8240        /* Reset to prevent losing 1st rx packet intermittently */
8241        if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8242            tg3_flag(tp, 5780_CLASS)) {
8243                tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8244                udelay(10);
8245                tw32_f(MAC_RX_MODE, tp->rx_mode);
8246        }
8247
8248        mac_mode = tp->mac_mode &
8249                   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8250        if (speed == SPEED_1000)
8251                mac_mode |= MAC_MODE_PORT_MODE_GMII;
8252        else
8253                mac_mode |= MAC_MODE_PORT_MODE_MII;
8254
8255        if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8256                u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8257
8258                if (masked_phy_id == TG3_PHY_ID_BCM5401)
8259                        mac_mode &= ~MAC_MODE_LINK_POLARITY;
8260                else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8261                        mac_mode |= MAC_MODE_LINK_POLARITY;
8262
8263                tg3_writephy(tp, MII_TG3_EXT_CTRL,
8264                             MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8265        }
8266
8267        tw32(MAC_MODE, mac_mode);
8268        udelay(40);
8269
8270        return 0;
8271}
8272
8273static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8274{
8275        struct tg3 *tp = netdev_priv(dev);
8276
8277        if (features & NETIF_F_LOOPBACK) {
8278                if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8279                        return;
8280
8281                spin_lock_bh(&tp->lock);
8282                tg3_mac_loopback(tp, true);
8283                netif_carrier_on(tp->dev);
8284                spin_unlock_bh(&tp->lock);
8285                netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8286        } else {
8287                if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8288                        return;
8289
8290                spin_lock_bh(&tp->lock);
8291                tg3_mac_loopback(tp, false);
8292                /* Force link status check */
8293                tg3_setup_phy(tp, true);
8294                spin_unlock_bh(&tp->lock);
8295                netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8296        }
8297}
8298
8299static netdev_features_t tg3_fix_features(struct net_device *dev,
8300        netdev_features_t features)
8301{
8302        struct tg3 *tp = netdev_priv(dev);
8303
8304        if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8305                features &= ~NETIF_F_ALL_TSO;
8306
8307        return features;
8308}
8309
8310static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8311{
8312        netdev_features_t changed = dev->features ^ features;
8313
8314        if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8315                tg3_set_loopback(dev, features);
8316
8317        return 0;
8318}
8319
8320static void tg3_rx_prodring_free(struct tg3 *tp,
8321                                 struct tg3_rx_prodring_set *tpr)
8322{
8323        int i;
8324
8325        if (tpr != &tp->napi[0].prodring) {
8326                for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8327                     i = (i + 1) & tp->rx_std_ring_mask)
8328                        tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8329                                        tp->rx_pkt_map_sz);
8330
8331                if (tg3_flag(tp, JUMBO_CAPABLE)) {
8332                        for (i = tpr->rx_jmb_cons_idx;
8333                             i != tpr->rx_jmb_prod_idx;
8334                             i = (i + 1) & tp->rx_jmb_ring_mask) {
8335                                tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8336                                                TG3_RX_JMB_MAP_SZ);
8337                        }
8338                }
8339
8340                return;
8341        }
8342
8343        for (i = 0; i <= tp->rx_std_ring_mask; i++)
8344                tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8345                                tp->rx_pkt_map_sz);
8346
8347        if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8348                for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8349                        tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8350                                        TG3_RX_JMB_MAP_SZ);
8351        }
8352}
8353
8354/* Initialize rx rings for packet processing.
8355 *
8356 * The chip has been shut down and the driver detached from
8357 * the networking, so no interrupts or new tx packets will
8358 * end up in the driver.  tp->{tx,}lock are held and thus
8359 * we may not sleep.
8360 */
8361static int tg3_rx_prodring_alloc(struct tg3 *tp,
8362                                 struct tg3_rx_prodring_set *tpr)
8363{
8364        u32 i, rx_pkt_dma_sz;
8365
8366        tpr->rx_std_cons_idx = 0;
8367        tpr->rx_std_prod_idx = 0;
8368        tpr->rx_jmb_cons_idx = 0;
8369        tpr->rx_jmb_prod_idx = 0;
8370
8371        if (tpr != &tp->napi[0].prodring) {
8372                memset(&tpr->rx_std_buffers[0], 0,
8373                       TG3_RX_STD_BUFF_RING_SIZE(tp));
8374                if (tpr->rx_jmb_buffers)
8375                        memset(&tpr->rx_jmb_buffers[0], 0,
8376                               TG3_RX_JMB_BUFF_RING_SIZE(tp));
8377                goto done;
8378        }
8379
8380        /* Zero out all descriptors. */
8381        memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8382
8383        rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8384        if (tg3_flag(tp, 5780_CLASS) &&
8385            tp->dev->mtu > ETH_DATA_LEN)
8386                rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8387        tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8388
8389        /* Initialize invariants of the rings, we only set this
8390         * stuff once.  This works because the card does not
8391         * write into the rx buffer posting rings.
8392         */
8393        for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8394                struct tg3_rx_buffer_desc *rxd;
8395
8396                rxd = &tpr->rx_std[i];
8397                rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8398                rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8399                rxd->opaque = (RXD_OPAQUE_RING_STD |
8400                               (i << RXD_OPAQUE_INDEX_SHIFT));
8401        }
8402
8403        /* Now allocate fresh SKBs for each rx ring. */
8404        for (i = 0; i < tp->rx_pending; i++) {
8405                unsigned int frag_size;
8406
8407                if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8408                                      &frag_size) < 0) {
8409                        netdev_warn(tp->dev,
8410                                    "Using a smaller RX standard ring. Only "
8411                                    "%d out of %d buffers were allocated "
8412                                    "successfully\n", i, tp->rx_pending);
8413                        if (i == 0)
8414                                goto initfail;
8415                        tp->rx_pending = i;
8416                        break;
8417                }
8418        }
8419
8420        if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8421                goto done;
8422
8423        memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8424
8425        if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8426                goto done;
8427
8428        for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8429                struct tg3_rx_buffer_desc *rxd;
8430
8431                rxd = &tpr->rx_jmb[i].std;
8432                rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8433                rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8434                                  RXD_FLAG_JUMBO;
8435                rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8436                       (i << RXD_OPAQUE_INDEX_SHIFT));
8437        }
8438
8439        for (i = 0; i < tp->rx_jumbo_pending; i++) {
8440                unsigned int frag_size;
8441
8442                if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8443                                      &frag_size) < 0) {
8444                        netdev_warn(tp->dev,
8445                                    "Using a smaller RX jumbo ring. Only %d "
8446                                    "out of %d buffers were allocated "
8447                                    "successfully\n", i, tp->rx_jumbo_pending);
8448                        if (i == 0)
8449                                goto initfail;
8450                        tp->rx_jumbo_pending = i;
8451                        break;
8452                }
8453        }
8454
8455done:
8456        return 0;
8457
8458initfail:
8459        tg3_rx_prodring_free(tp, tpr);
8460        return -ENOMEM;
8461}
8462
8463static void tg3_rx_prodring_fini(struct tg3 *tp,
8464                                 struct tg3_rx_prodring_set *tpr)
8465{
8466        kfree(tpr->rx_std_buffers);
8467        tpr->rx_std_buffers = NULL;
8468        kfree(tpr->rx_jmb_buffers);
8469        tpr->rx_jmb_buffers = NULL;
8470        if (tpr->rx_std) {
8471                dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8472                                  tpr->rx_std, tpr->rx_std_mapping);
8473                tpr->rx_std = NULL;
8474        }
8475        if (tpr->rx_jmb) {
8476                dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8477                                  tpr->rx_jmb, tpr->rx_jmb_mapping);
8478                tpr->rx_jmb = NULL;
8479        }
8480}
8481
8482static int tg3_rx_prodring_init(struct tg3 *tp,
8483                                struct tg3_rx_prodring_set *tpr)
8484{
8485        tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8486                                      GFP_KERNEL);
8487        if (!tpr->rx_std_buffers)
8488                return -ENOMEM;
8489
8490        tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8491                                         TG3_RX_STD_RING_BYTES(tp),
8492                                         &tpr->rx_std_mapping,
8493                                         GFP_KERNEL);
8494        if (!tpr->rx_std)
8495                goto err_out;
8496
8497        if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8498                tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8499                                              GFP_KERNEL);
8500                if (!tpr->rx_jmb_buffers)
8501                        goto err_out;
8502
8503                tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8504                                                 TG3_RX_JMB_RING_BYTES(tp),
8505                                                 &tpr->rx_jmb_mapping,
8506                                                 GFP_KERNEL);
8507                if (!tpr->rx_jmb)
8508                        goto err_out;
8509        }
8510
8511        return 0;
8512
8513err_out:
8514        tg3_rx_prodring_fini(tp, tpr);
8515        return -ENOMEM;
8516}
8517
8518/* Free up pending packets in all rx/tx rings.
8519 *
8520 * The chip has been shut down and the driver detached from
8521 * the networking, so no interrupts or new tx packets will
8522 * end up in the driver.  tp->{tx,}lock is not held and we are not
8523 * in an interrupt context and thus may sleep.
8524 */
8525static void tg3_free_rings(struct tg3 *tp)
8526{
8527        int i, j;
8528
8529        for (j = 0; j < tp->irq_cnt; j++) {
8530                struct tg3_napi *tnapi = &tp->napi[j];
8531
8532                tg3_rx_prodring_free(tp, &tnapi->prodring);
8533
8534                if (!tnapi->tx_buffers)
8535                        continue;
8536
8537                for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8538                        struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8539
8540                        if (!skb)
8541                                continue;
8542
8543                        tg3_tx_skb_unmap(tnapi, i,
8544                                         skb_shinfo(skb)->nr_frags - 1);
8545
8546                        dev_consume_skb_any(skb);
8547                }
8548                netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8549        }
8550}
8551
8552/* Initialize tx/rx rings for packet processing.
8553 *
8554 * The chip has been shut down and the driver detached from
8555 * the networking, so no interrupts or new tx packets will
8556 * end up in the driver.  tp->{tx,}lock are held and thus
8557 * we may not sleep.
8558 */
8559static int tg3_init_rings(struct tg3 *tp)
8560{
8561        int i;
8562
8563        /* Free up all the SKBs. */
8564        tg3_free_rings(tp);
8565
8566        for (i = 0; i < tp->irq_cnt; i++) {
8567                struct tg3_napi *tnapi = &tp->napi[i];
8568
8569                tnapi->last_tag = 0;
8570                tnapi->last_irq_tag = 0;
8571                tnapi->hw_status->status = 0;
8572                tnapi->hw_status->status_tag = 0;
8573                memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8574
8575                tnapi->tx_prod = 0;
8576                tnapi->tx_cons = 0;
8577                if (tnapi->tx_ring)
8578                        memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8579
8580                tnapi->rx_rcb_ptr = 0;
8581                if (tnapi->rx_rcb)
8582                        memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8583
8584                if (tnapi->prodring.rx_std &&
8585                    tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8586                        tg3_free_rings(tp);
8587                        return -ENOMEM;
8588                }
8589        }
8590
8591        return 0;
8592}
8593
8594static void tg3_mem_tx_release(struct tg3 *tp)
8595{
8596        int i;
8597
8598        for (i = 0; i < tp->irq_max; i++) {
8599                struct tg3_napi *tnapi = &tp->napi[i];
8600
8601                if (tnapi->tx_ring) {
8602                        dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8603                                tnapi->tx_ring, tnapi->tx_desc_mapping);
8604                        tnapi->tx_ring = NULL;
8605                }
8606
8607                kfree(tnapi->tx_buffers);
8608                tnapi->tx_buffers = NULL;
8609        }
8610}
8611
8612static int tg3_mem_tx_acquire(struct tg3 *tp)
8613{
8614        int i;
8615        struct tg3_napi *tnapi = &tp->napi[0];
8616
8617        /* If multivector TSS is enabled, vector 0 does not handle
8618         * tx interrupts.  Don't allocate any resources for it.
8619         */
8620        if (tg3_flag(tp, ENABLE_TSS))
8621                tnapi++;
8622
8623        for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8624                tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) *
8625                                            TG3_TX_RING_SIZE, GFP_KERNEL);
8626                if (!tnapi->tx_buffers)
8627                        goto err_out;
8628
8629                tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8630                                                    TG3_TX_RING_BYTES,
8631                                                    &tnapi->tx_desc_mapping,
8632                                                    GFP_KERNEL);
8633                if (!tnapi->tx_ring)
8634                        goto err_out;
8635        }
8636
8637        return 0;
8638
8639err_out:
8640        tg3_mem_tx_release(tp);
8641        return -ENOMEM;
8642}
8643
8644static void tg3_mem_rx_release(struct tg3 *tp)
8645{
8646        int i;
8647
8648        for (i = 0; i < tp->irq_max; i++) {
8649                struct tg3_napi *tnapi = &tp->napi[i];
8650
8651                tg3_rx_prodring_fini(tp, &tnapi->prodring);
8652
8653                if (!tnapi->rx_rcb)
8654                        continue;
8655
8656                dma_free_coherent(&tp->pdev->dev,
8657                                  TG3_RX_RCB_RING_BYTES(tp),
8658                                  tnapi->rx_rcb,
8659                                  tnapi->rx_rcb_mapping);
8660                tnapi->rx_rcb = NULL;
8661        }
8662}
8663
8664static int tg3_mem_rx_acquire(struct tg3 *tp)
8665{
8666        unsigned int i, limit;
8667
8668        limit = tp->rxq_cnt;
8669
8670        /* If RSS is enabled, we need a (dummy) producer ring
8671         * set on vector zero.  This is the true hw prodring.
8672         */
8673        if (tg3_flag(tp, ENABLE_RSS))
8674                limit++;
8675
8676        for (i = 0; i < limit; i++) {
8677                struct tg3_napi *tnapi = &tp->napi[i];
8678
8679                if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8680                        goto err_out;
8681
8682                /* If multivector RSS is enabled, vector 0
8683                 * does not handle rx or tx interrupts.
8684                 * Don't allocate any resources for it.
8685                 */
8686                if (!i && tg3_flag(tp, ENABLE_RSS))
8687                        continue;
8688
8689                tnapi->rx_rcb = dma_zalloc_coherent(&tp->pdev->dev,
8690                                                    TG3_RX_RCB_RING_BYTES(tp),
8691                                                    &tnapi->rx_rcb_mapping,
8692                                                    GFP_KERNEL);
8693                if (!tnapi->rx_rcb)
8694                        goto err_out;
8695        }
8696
8697        return 0;
8698
8699err_out:
8700        tg3_mem_rx_release(tp);
8701        return -ENOMEM;
8702}
8703
8704/*
8705 * Must not be invoked with interrupt sources disabled and
8706 * the hardware shutdown down.
8707 */
8708static void tg3_free_consistent(struct tg3 *tp)
8709{
8710        int i;
8711
8712        for (i = 0; i < tp->irq_cnt; i++) {
8713                struct tg3_napi *tnapi = &tp->napi[i];
8714
8715                if (tnapi->hw_status) {
8716                        dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8717                                          tnapi->hw_status,
8718                                          tnapi->status_mapping);
8719                        tnapi->hw_status = NULL;
8720                }
8721        }
8722
8723        tg3_mem_rx_release(tp);
8724        tg3_mem_tx_release(tp);
8725
8726        /* Protect tg3_get_stats64() from reading freed tp->hw_stats. */
8727        tg3_full_lock(tp, 0);
8728        if (tp->hw_stats) {
8729                dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8730                                  tp->hw_stats, tp->stats_mapping);
8731                tp->hw_stats = NULL;
8732        }
8733        tg3_full_unlock(tp);
8734}
8735
8736/*
8737 * Must not be invoked with interrupt sources disabled and
8738 * the hardware shutdown down.  Can sleep.
8739 */
8740static int tg3_alloc_consistent(struct tg3 *tp)
8741{
8742        int i;
8743
8744        tp->hw_stats = dma_zalloc_coherent(&tp->pdev->dev,
8745                                           sizeof(struct tg3_hw_stats),
8746                                           &tp->stats_mapping, GFP_KERNEL);
8747        if (!tp->hw_stats)
8748                goto err_out;
8749
8750        for (i = 0; i < tp->irq_cnt; i++) {
8751                struct tg3_napi *tnapi = &tp->napi[i];
8752                struct tg3_hw_status *sblk;
8753
8754                tnapi->hw_status = dma_zalloc_coherent(&tp->pdev->dev,
8755                                                       TG3_HW_STATUS_SIZE,
8756                                                       &tnapi->status_mapping,
8757                                                       GFP_KERNEL);
8758                if (!tnapi->hw_status)
8759                        goto err_out;
8760
8761                sblk = tnapi->hw_status;
8762
8763                if (tg3_flag(tp, ENABLE_RSS)) {
8764                        u16 *prodptr = NULL;
8765
8766                        /*
8767                         * When RSS is enabled, the status block format changes
8768                         * slightly.  The "rx_jumbo_consumer", "reserved",
8769                         * and "rx_mini_consumer" members get mapped to the
8770                         * other three rx return ring producer indexes.
8771                         */
8772                        switch (i) {
8773                        case 1:
8774                                prodptr = &sblk->idx[0].rx_producer;
8775                                break;
8776                        case 2:
8777                                prodptr = &sblk->rx_jumbo_consumer;
8778                                break;
8779                        case 3:
8780                                prodptr = &sblk->reserved;
8781                                break;
8782                        case 4:
8783                                prodptr = &sblk->rx_mini_consumer;
8784                                break;
8785                        }
8786                        tnapi->rx_rcb_prod_idx = prodptr;
8787                } else {
8788                        tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8789                }
8790        }
8791
8792        if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8793                goto err_out;
8794
8795        return 0;
8796
8797err_out:
8798        tg3_free_consistent(tp);
8799        return -ENOMEM;
8800}
8801
8802#define MAX_WAIT_CNT 1000
8803
8804/* To stop a block, clear the enable bit and poll till it
8805 * clears.  tp->lock is held.
8806 */
8807static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8808{
8809        unsigned int i;
8810        u32 val;
8811
8812        if (tg3_flag(tp, 5705_PLUS)) {
8813                switch (ofs) {
8814                case RCVLSC_MODE:
8815                case DMAC_MODE:
8816                case MBFREE_MODE:
8817                case BUFMGR_MODE:
8818                case MEMARB_MODE:
8819                        /* We can't enable/disable these bits of the
8820                         * 5705/5750, just say success.
8821                         */
8822                        return 0;
8823
8824                default:
8825                        break;
8826                }
8827        }
8828
8829        val = tr32(ofs);
8830        val &= ~enable_bit;
8831        tw32_f(ofs, val);
8832
8833        for (i = 0; i < MAX_WAIT_CNT; i++) {
8834                if (pci_channel_offline(tp->pdev)) {
8835                        dev_err(&tp->pdev->dev,
8836                                "tg3_stop_block device offline, "
8837                                "ofs=%lx enable_bit=%x\n",
8838                                ofs, enable_bit);
8839                        return -ENODEV;
8840                }
8841
8842                udelay(100);
8843                val = tr32(ofs);
8844                if ((val & enable_bit) == 0)
8845                        break;
8846        }
8847
8848        if (i == MAX_WAIT_CNT && !silent) {
8849                dev_err(&tp->pdev->dev,
8850                        "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8851                        ofs, enable_bit);
8852                return -ENODEV;
8853        }
8854
8855        return 0;
8856}
8857
8858/* tp->lock is held. */
8859static int tg3_abort_hw(struct tg3 *tp, bool silent)
8860{
8861        int i, err;
8862
8863        tg3_disable_ints(tp);
8864
8865        if (pci_channel_offline(tp->pdev)) {
8866                tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8867                tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8868                err = -ENODEV;
8869                goto err_no_dev;
8870        }
8871
8872        tp->rx_mode &= ~RX_MODE_ENABLE;
8873        tw32_f(MAC_RX_MODE, tp->rx_mode);
8874        udelay(10);
8875
8876        err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8877        err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8878        err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8879        err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8880        err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8881        err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8882
8883        err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8884        err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8885        err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8886        err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8887        err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8888        err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8889        err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8890
8891        tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8892        tw32_f(MAC_MODE, tp->mac_mode);
8893        udelay(40);
8894
8895        tp->tx_mode &= ~TX_MODE_ENABLE;
8896        tw32_f(MAC_TX_MODE, tp->tx_mode);
8897
8898        for (i = 0; i < MAX_WAIT_CNT; i++) {
8899                udelay(100);
8900                if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8901                        break;
8902        }
8903        if (i >= MAX_WAIT_CNT) {
8904                dev_err(&tp->pdev->dev,
8905                        "%s timed out, TX_MODE_ENABLE will not clear "
8906                        "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8907                err |= -ENODEV;
8908        }
8909
8910        err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8911        err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8912        err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8913
8914        tw32(FTQ_RESET, 0xffffffff);
8915        tw32(FTQ_RESET, 0x00000000);
8916
8917        err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8918        err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8919
8920err_no_dev:
8921        for (i = 0; i < tp->irq_cnt; i++) {
8922                struct tg3_napi *tnapi = &tp->napi[i];
8923                if (tnapi->hw_status)
8924                        memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8925        }
8926
8927        return err;
8928}
8929
8930/* Save PCI command register before chip reset */
8931static void tg3_save_pci_state(struct tg3 *tp)
8932{
8933        pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8934}
8935
8936/* Restore PCI state after chip reset */
8937static void tg3_restore_pci_state(struct tg3 *tp)
8938{
8939        u32 val;
8940
8941        /* Re-enable indirect register accesses. */
8942        pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8943                               tp->misc_host_ctrl);
8944
8945        /* Set MAX PCI retry to zero. */
8946        val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8947        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8948            tg3_flag(tp, PCIX_MODE))
8949                val |= PCISTATE_RETRY_SAME_DMA;
8950        /* Allow reads and writes to the APE register and memory space. */
8951        if (tg3_flag(tp, ENABLE_APE))
8952                val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8953                       PCISTATE_ALLOW_APE_SHMEM_WR |
8954                       PCISTATE_ALLOW_APE_PSPACE_WR;
8955        pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8956
8957        pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8958
8959        if (!tg3_flag(tp, PCI_EXPRESS)) {
8960                pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8961                                      tp->pci_cacheline_sz);
8962                pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8963                                      tp->pci_lat_timer);
8964        }
8965
8966        /* Make sure PCI-X relaxed ordering bit is clear. */
8967        if (tg3_flag(tp, PCIX_MODE)) {
8968                u16 pcix_cmd;
8969
8970                pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8971                                     &pcix_cmd);
8972                pcix_cmd &= ~PCI_X_CMD_ERO;
8973                pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8974                                      pcix_cmd);
8975        }
8976
8977        if (tg3_flag(tp, 5780_CLASS)) {
8978
8979                /* Chip reset on 5780 will reset MSI enable bit,
8980                 * so need to restore it.
8981                 */
8982                if (tg3_flag(tp, USING_MSI)) {
8983                        u16 ctrl;
8984
8985                        pci_read_config_word(tp->pdev,
8986                                             tp->msi_cap + PCI_MSI_FLAGS,
8987                                             &ctrl);
8988                        pci_write_config_word(tp->pdev,
8989                                              tp->msi_cap + PCI_MSI_FLAGS,
8990                                              ctrl | PCI_MSI_FLAGS_ENABLE);
8991                        val = tr32(MSGINT_MODE);
8992                        tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
8993                }
8994        }
8995}
8996
8997static void tg3_override_clk(struct tg3 *tp)
8998{
8999        u32 val;
9000
9001        switch (tg3_asic_rev(tp)) {
9002        case ASIC_REV_5717:
9003                val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9004                tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9005                     TG3_CPMU_MAC_ORIDE_ENABLE);
9006                break;
9007
9008        case ASIC_REV_5719:
9009        case ASIC_REV_5720:
9010                tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9011                break;
9012
9013        default:
9014                return;
9015        }
9016}
9017
9018static void tg3_restore_clk(struct tg3 *tp)
9019{
9020        u32 val;
9021
9022        switch (tg3_asic_rev(tp)) {
9023        case ASIC_REV_5717:
9024                val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9025                tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9026                     val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9027                break;
9028
9029        case ASIC_REV_5719:
9030        case ASIC_REV_5720:
9031                val = tr32(TG3_CPMU_CLCK_ORIDE);
9032                tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9033                break;
9034
9035        default:
9036                return;
9037        }
9038}
9039
9040/* tp->lock is held. */
9041static int tg3_chip_reset(struct tg3 *tp)
9042        __releases(tp->lock)
9043        __acquires(tp->lock)
9044{
9045        u32 val;
9046        void (*write_op)(struct tg3 *, u32, u32);
9047        int i, err;
9048
9049        if (!pci_device_is_present(tp->pdev))
9050                return -ENODEV;
9051
9052        tg3_nvram_lock(tp);
9053
9054        tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9055
9056        /* No matching tg3_nvram_unlock() after this because
9057         * chip reset below will undo the nvram lock.
9058         */
9059        tp->nvram_lock_cnt = 0;
9060
9061        /* GRC_MISC_CFG core clock reset will clear the memory
9062         * enable bit in PCI register 4 and the MSI enable bit
9063         * on some chips, so we save relevant registers here.
9064         */
9065        tg3_save_pci_state(tp);
9066
9067        if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9068            tg3_flag(tp, 5755_PLUS))
9069                tw32(GRC_FASTBOOT_PC, 0);
9070
9071        /*
9072         * We must avoid the readl() that normally takes place.
9073         * It locks machines, causes machine checks, and other
9074         * fun things.  So, temporarily disable the 5701
9075         * hardware workaround, while we do the reset.
9076         */
9077        write_op = tp->write32;
9078        if (write_op == tg3_write_flush_reg32)
9079                tp->write32 = tg3_write32;
9080
9081        /* Prevent the irq handler from reading or writing PCI registers
9082         * during chip reset when the memory enable bit in the PCI command
9083         * register may be cleared.  The chip does not generate interrupt
9084         * at this time, but the irq handler may still be called due to irq
9085         * sharing or irqpoll.
9086         */
9087        tg3_flag_set(tp, CHIP_RESETTING);
9088        for (i = 0; i < tp->irq_cnt; i++) {
9089                struct tg3_napi *tnapi = &tp->napi[i];
9090                if (tnapi->hw_status) {
9091                        tnapi->hw_status->status = 0;
9092                        tnapi->hw_status->status_tag = 0;
9093                }
9094                tnapi->last_tag = 0;
9095                tnapi->last_irq_tag = 0;
9096        }
9097        smp_mb();
9098
9099        tg3_full_unlock(tp);
9100
9101        for (i = 0; i < tp->irq_cnt; i++)
9102                synchronize_irq(tp->napi[i].irq_vec);
9103
9104        tg3_full_lock(tp, 0);
9105
9106        if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9107                val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9108                tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9109        }
9110
9111        /* do the reset */
9112        val = GRC_MISC_CFG_CORECLK_RESET;
9113
9114        if (tg3_flag(tp, PCI_EXPRESS)) {
9115                /* Force PCIe 1.0a mode */
9116                if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9117                    !tg3_flag(tp, 57765_PLUS) &&
9118                    tr32(TG3_PCIE_PHY_TSTCTL) ==
9119                    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9120                        tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9121
9122                if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9123                        tw32(GRC_MISC_CFG, (1 << 29));
9124                        val |= (1 << 29);
9125                }
9126        }
9127
9128        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9129                tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9130                tw32(GRC_VCPU_EXT_CTRL,
9131                     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9132        }
9133
9134        /* Set the clock to the highest frequency to avoid timeouts. With link
9135         * aware mode, the clock speed could be slow and bootcode does not
9136         * complete within the expected time. Override the clock to allow the
9137         * bootcode to finish sooner and then restore it.
9138         */
9139        tg3_override_clk(tp);
9140
9141        /* Manage gphy power for all CPMU absent PCIe devices. */
9142        if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9143                val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9144
9145        tw32(GRC_MISC_CFG, val);
9146
9147        /* restore 5701 hardware bug workaround write method */
9148        tp->write32 = write_op;
9149
9150        /* Unfortunately, we have to delay before the PCI read back.
9151         * Some 575X chips even will not respond to a PCI cfg access
9152         * when the reset command is given to the chip.
9153         *
9154         * How do these hardware designers expect things to work
9155         * properly if the PCI write is posted for a long period
9156         * of time?  It is always necessary to have some method by
9157         * which a register read back can occur to push the write
9158         * out which does the reset.
9159         *
9160         * For most tg3 variants the trick below was working.
9161         * Ho hum...
9162         */
9163        udelay(120);
9164
9165        /* Flush PCI posted writes.  The normal MMIO registers
9166         * are inaccessible at this time so this is the only
9167         * way to make this reliably (actually, this is no longer
9168         * the case, see above).  I tried to use indirect
9169         * register read/write but this upset some 5701 variants.
9170         */
9171        pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9172
9173        udelay(120);
9174
9175        if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9176                u16 val16;
9177
9178                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9179                        int j;
9180                        u32 cfg_val;
9181
9182                        /* Wait for link training to complete.  */
9183                        for (j = 0; j < 5000; j++)
9184                                udelay(100);
9185
9186                        pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9187                        pci_write_config_dword(tp->pdev, 0xc4,
9188                                               cfg_val | (1 << 15));
9189                }
9190
9191                /* Clear the "no snoop" and "relaxed ordering" bits. */
9192                val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9193                /*
9194                 * Older PCIe devices only support the 128 byte
9195                 * MPS setting.  Enforce the restriction.
9196                 */
9197                if (!tg3_flag(tp, CPMU_PRESENT))
9198                        val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9199                pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9200
9201                /* Clear error status */
9202                pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9203                                      PCI_EXP_DEVSTA_CED |
9204                                      PCI_EXP_DEVSTA_NFED |
9205                                      PCI_EXP_DEVSTA_FED |
9206                                      PCI_EXP_DEVSTA_URD);
9207        }
9208
9209        tg3_restore_pci_state(tp);
9210
9211        tg3_flag_clear(tp, CHIP_RESETTING);
9212        tg3_flag_clear(tp, ERROR_PROCESSED);
9213
9214        val = 0;
9215        if (tg3_flag(tp, 5780_CLASS))
9216                val = tr32(MEMARB_MODE);
9217        tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9218
9219        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9220                tg3_stop_fw(tp);
9221                tw32(0x5000, 0x400);
9222        }
9223
9224        if (tg3_flag(tp, IS_SSB_CORE)) {
9225                /*
9226                 * BCM4785: In order to avoid repercussions from using
9227                 * potentially defective internal ROM, stop the Rx RISC CPU,
9228                 * which is not required.
9229                 */
9230                tg3_stop_fw(tp);
9231                tg3_halt_cpu(tp, RX_CPU_BASE);
9232        }
9233
9234        err = tg3_poll_fw(tp);
9235        if (err)
9236                return err;
9237
9238        tw32(GRC_MODE, tp->grc_mode);
9239
9240        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9241                val = tr32(0xc4);
9242
9243                tw32(0xc4, val | (1 << 15));
9244        }
9245
9246        if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9247            tg3_asic_rev(tp) == ASIC_REV_5705) {
9248                tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9249                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9250                        tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9251                tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9252        }
9253
9254        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9255                tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9256                val = tp->mac_mode;
9257        } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9258                tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9259                val = tp->mac_mode;
9260        } else
9261                val = 0;
9262
9263        tw32_f(MAC_MODE, val);
9264        udelay(40);
9265
9266        tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9267
9268        tg3_mdio_start(tp);
9269
9270        if (tg3_flag(tp, PCI_EXPRESS) &&
9271            tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9272            tg3_asic_rev(tp) != ASIC_REV_5785 &&
9273            !tg3_flag(tp, 57765_PLUS)) {
9274                val = tr32(0x7c00);
9275
9276                tw32(0x7c00, val | (1 << 25));
9277        }
9278
9279        tg3_restore_clk(tp);
9280
9281        /* Reprobe ASF enable state.  */
9282        tg3_flag_clear(tp, ENABLE_ASF);
9283        tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9284                           TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9285
9286        tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9287        tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9288        if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9289                u32 nic_cfg;
9290
9291                tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9292                if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9293                        tg3_flag_set(tp, ENABLE_ASF);
9294                        tp->last_event_jiffies = jiffies;
9295                        if (tg3_flag(tp, 5750_PLUS))
9296                                tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9297
9298                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9299                        if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9300                                tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9301                        if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9302                                tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9303                }
9304        }
9305
9306        return 0;
9307}
9308
9309static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9310static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9311static void __tg3_set_rx_mode(struct net_device *);
9312
9313/* tp->lock is held. */
9314static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9315{
9316        int err;
9317
9318        tg3_stop_fw(tp);
9319
9320        tg3_write_sig_pre_reset(tp, kind);
9321
9322        tg3_abort_hw(tp, silent);
9323        err = tg3_chip_reset(tp);
9324
9325        __tg3_set_mac_addr(tp, false);
9326
9327        tg3_write_sig_legacy(tp, kind);
9328        tg3_write_sig_post_reset(tp, kind);
9329
9330        if (tp->hw_stats) {
9331                /* Save the stats across chip resets... */
9332                tg3_get_nstats(tp, &tp->net_stats_prev);
9333                tg3_get_estats(tp, &tp->estats_prev);
9334
9335                /* And make sure the next sample is new data */
9336                memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9337        }
9338
9339        return err;
9340}
9341
9342static int tg3_set_mac_addr(struct net_device *dev, void *p)
9343{
9344        struct tg3 *tp = netdev_priv(dev);
9345        struct sockaddr *addr = p;
9346        int err = 0;
9347        bool skip_mac_1 = false;
9348
9349        if (!is_valid_ether_addr(addr->sa_data))
9350                return -EADDRNOTAVAIL;
9351
9352        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
9353
9354        if (!netif_running(dev))
9355                return 0;
9356
9357        if (tg3_flag(tp, ENABLE_ASF)) {
9358                u32 addr0_high, addr0_low, addr1_high, addr1_low;
9359
9360                addr0_high = tr32(MAC_ADDR_0_HIGH);
9361                addr0_low = tr32(MAC_ADDR_0_LOW);
9362                addr1_high = tr32(MAC_ADDR_1_HIGH);
9363                addr1_low = tr32(MAC_ADDR_1_LOW);
9364
9365                /* Skip MAC addr 1 if ASF is using it. */
9366                if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9367                    !(addr1_high == 0 && addr1_low == 0))
9368                        skip_mac_1 = true;
9369        }
9370        spin_lock_bh(&tp->lock);
9371        __tg3_set_mac_addr(tp, skip_mac_1);
9372        __tg3_set_rx_mode(dev);
9373        spin_unlock_bh(&tp->lock);
9374
9375        return err;
9376}
9377
9378/* tp->lock is held. */
9379static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9380                           dma_addr_t mapping, u32 maxlen_flags,
9381                           u32 nic_addr)
9382{
9383        tg3_write_mem(tp,
9384                      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9385                      ((u64) mapping >> 32));
9386        tg3_write_mem(tp,
9387                      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9388                      ((u64) mapping & 0xffffffff));
9389        tg3_write_mem(tp,
9390                      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9391                       maxlen_flags);
9392
9393        if (!tg3_flag(tp, 5705_PLUS))
9394                tg3_write_mem(tp,
9395                              (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9396                              nic_addr);
9397}
9398
9399
9400static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9401{
9402        int i = 0;
9403
9404        if (!tg3_flag(tp, ENABLE_TSS)) {
9405                tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9406                tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9407                tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9408        } else {
9409                tw32(HOSTCC_TXCOL_TICKS, 0);
9410                tw32(HOSTCC_TXMAX_FRAMES, 0);
9411                tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9412
9413                for (; i < tp->txq_cnt; i++) {
9414                        u32 reg;
9415
9416                        reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9417                        tw32(reg, ec->tx_coalesce_usecs);
9418                        reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9419                        tw32(reg, ec->tx_max_coalesced_frames);
9420                        reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9421                        tw32(reg, ec->tx_max_coalesced_frames_irq);
9422                }
9423        }
9424
9425        for (; i < tp->irq_max - 1; i++) {
9426                tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9427                tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9428                tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9429        }
9430}
9431
9432static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9433{
9434        int i = 0;
9435        u32 limit = tp->rxq_cnt;
9436
9437        if (!tg3_flag(tp, ENABLE_RSS)) {
9438                tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9439                tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9440                tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9441                limit--;
9442        } else {
9443                tw32(HOSTCC_RXCOL_TICKS, 0);
9444                tw32(HOSTCC_RXMAX_FRAMES, 0);
9445                tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9446        }
9447
9448        for (; i < limit; i++) {
9449                u32 reg;
9450
9451                reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9452                tw32(reg, ec->rx_coalesce_usecs);
9453                reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9454                tw32(reg, ec->rx_max_coalesced_frames);
9455                reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9456                tw32(reg, ec->rx_max_coalesced_frames_irq);
9457        }
9458
9459        for (; i < tp->irq_max - 1; i++) {
9460                tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9461                tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9462                tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9463        }
9464}
9465
9466static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9467{
9468        tg3_coal_tx_init(tp, ec);
9469        tg3_coal_rx_init(tp, ec);
9470
9471        if (!tg3_flag(tp, 5705_PLUS)) {
9472                u32 val = ec->stats_block_coalesce_usecs;
9473
9474                tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9475                tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9476
9477                if (!tp->link_up)
9478                        val = 0;
9479
9480                tw32(HOSTCC_STAT_COAL_TICKS, val);
9481        }
9482}
9483
9484/* tp->lock is held. */
9485static void tg3_tx_rcbs_disable(struct tg3 *tp)
9486{
9487        u32 txrcb, limit;
9488
9489        /* Disable all transmit rings but the first. */
9490        if (!tg3_flag(tp, 5705_PLUS))
9491                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9492        else if (tg3_flag(tp, 5717_PLUS))
9493                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9494        else if (tg3_flag(tp, 57765_CLASS) ||
9495                 tg3_asic_rev(tp) == ASIC_REV_5762)
9496                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9497        else
9498                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9499
9500        for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9501             txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9502                tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9503                              BDINFO_FLAGS_DISABLED);
9504}
9505
9506/* tp->lock is held. */
9507static void tg3_tx_rcbs_init(struct tg3 *tp)
9508{
9509        int i = 0;
9510        u32 txrcb = NIC_SRAM_SEND_RCB;
9511
9512        if (tg3_flag(tp, ENABLE_TSS))
9513                i++;
9514
9515        for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9516                struct tg3_napi *tnapi = &tp->napi[i];
9517
9518                if (!tnapi->tx_ring)
9519                        continue;
9520
9521                tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9522                               (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9523                               NIC_SRAM_TX_BUFFER_DESC);
9524        }
9525}
9526
9527/* tp->lock is held. */
9528static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9529{
9530        u32 rxrcb, limit;
9531
9532        /* Disable all receive return rings but the first. */
9533        if (tg3_flag(tp, 5717_PLUS))
9534                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9535        else if (!tg3_flag(tp, 5705_PLUS))
9536                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9537        else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9538                 tg3_asic_rev(tp) == ASIC_REV_5762 ||
9539                 tg3_flag(tp, 57765_CLASS))
9540                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9541        else
9542                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9543
9544        for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9545             rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9546                tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9547                              BDINFO_FLAGS_DISABLED);
9548}
9549
9550/* tp->lock is held. */
9551static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9552{
9553        int i = 0;
9554        u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9555
9556        if (tg3_flag(tp, ENABLE_RSS))
9557                i++;
9558
9559        for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9560                struct tg3_napi *tnapi = &tp->napi[i];
9561
9562                if (!tnapi->rx_rcb)
9563                        continue;
9564
9565                tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9566                               (tp->rx_ret_ring_mask + 1) <<
9567                                BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9568        }
9569}
9570
9571/* tp->lock is held. */
9572static void tg3_rings_reset(struct tg3 *tp)
9573{
9574        int i;
9575        u32 stblk;
9576        struct tg3_napi *tnapi = &tp->napi[0];
9577
9578        tg3_tx_rcbs_disable(tp);
9579
9580        tg3_rx_ret_rcbs_disable(tp);
9581
9582        /* Disable interrupts */
9583        tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9584        tp->napi[0].chk_msi_cnt = 0;
9585        tp->napi[0].last_rx_cons = 0;
9586        tp->napi[0].last_tx_cons = 0;
9587
9588        /* Zero mailbox registers. */
9589        if (tg3_flag(tp, SUPPORT_MSIX)) {
9590                for (i = 1; i < tp->irq_max; i++) {
9591                        tp->napi[i].tx_prod = 0;
9592                        tp->napi[i].tx_cons = 0;
9593                        if (tg3_flag(tp, ENABLE_TSS))
9594                                tw32_mailbox(tp->napi[i].prodmbox, 0);
9595                        tw32_rx_mbox(tp->napi[i].consmbox, 0);
9596                        tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9597                        tp->napi[i].chk_msi_cnt = 0;
9598                        tp->napi[i].last_rx_cons = 0;
9599                        tp->napi[i].last_tx_cons = 0;
9600                }
9601                if (!tg3_flag(tp, ENABLE_TSS))
9602                        tw32_mailbox(tp->napi[0].prodmbox, 0);
9603        } else {
9604                tp->napi[0].tx_prod = 0;
9605                tp->napi[0].tx_cons = 0;
9606                tw32_mailbox(tp->napi[0].prodmbox, 0);
9607                tw32_rx_mbox(tp->napi[0].consmbox, 0);
9608        }
9609
9610        /* Make sure the NIC-based send BD rings are disabled. */
9611        if (!tg3_flag(tp, 5705_PLUS)) {
9612                u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9613                for (i = 0; i < 16; i++)
9614                        tw32_tx_mbox(mbox + i * 8, 0);
9615        }
9616
9617        /* Clear status block in ram. */
9618        memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9619
9620        /* Set status block DMA address */
9621        tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9622             ((u64) tnapi->status_mapping >> 32));
9623        tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9624             ((u64) tnapi->status_mapping & 0xffffffff));
9625
9626        stblk = HOSTCC_STATBLCK_RING1;
9627
9628        for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9629                u64 mapping = (u64)tnapi->status_mapping;
9630                tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9631                tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9632                stblk += 8;
9633
9634                /* Clear status block in ram. */
9635                memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9636        }
9637
9638        tg3_tx_rcbs_init(tp);
9639        tg3_rx_ret_rcbs_init(tp);
9640}
9641
9642static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9643{
9644        u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9645
9646        if (!tg3_flag(tp, 5750_PLUS) ||
9647            tg3_flag(tp, 5780_CLASS) ||
9648            tg3_asic_rev(tp) == ASIC_REV_5750 ||
9649            tg3_asic_rev(tp) == ASIC_REV_5752 ||
9650            tg3_flag(tp, 57765_PLUS))
9651                bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9652        else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9653                 tg3_asic_rev(tp) == ASIC_REV_5787)
9654                bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9655        else
9656                bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9657
9658        nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9659        host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9660
9661        val = min(nic_rep_thresh, host_rep_thresh);
9662        tw32(RCVBDI_STD_THRESH, val);
9663
9664        if (tg3_flag(tp, 57765_PLUS))
9665                tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9666
9667        if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9668                return;
9669
9670        bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9671
9672        host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9673
9674        val = min(bdcache_maxcnt / 2, host_rep_thresh);
9675        tw32(RCVBDI_JUMBO_THRESH, val);
9676
9677        if (tg3_flag(tp, 57765_PLUS))
9678                tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9679}
9680
9681static inline u32 calc_crc(unsigned char *buf, int len)
9682{
9683        u32 reg;
9684        u32 tmp;
9685        int j, k;
9686
9687        reg = 0xffffffff;
9688
9689        for (j = 0; j < len; j++) {
9690                reg ^= buf[j];
9691
9692                for (k = 0; k < 8; k++) {
9693                        tmp = reg & 0x01;
9694
9695                        reg >>= 1;
9696
9697                        if (tmp)
9698                                reg ^= 0xedb88320;
9699                }
9700        }
9701
9702        return ~reg;
9703}
9704
9705static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9706{
9707        /* accept or reject all multicast frames */
9708        tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9709        tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9710        tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9711        tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9712}
9713
9714static void __tg3_set_rx_mode(struct net_device *dev)
9715{
9716        struct tg3 *tp = netdev_priv(dev);
9717        u32 rx_mode;
9718
9719        rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9720                                  RX_MODE_KEEP_VLAN_TAG);
9721
9722#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9723        /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9724         * flag clear.
9725         */
9726        if (!tg3_flag(tp, ENABLE_ASF))
9727                rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9728#endif
9729
9730        if (dev->flags & IFF_PROMISC) {
9731                /* Promiscuous mode. */
9732                rx_mode |= RX_MODE_PROMISC;
9733        } else if (dev->flags & IFF_ALLMULTI) {
9734                /* Accept all multicast. */
9735                tg3_set_multi(tp, 1);
9736        } else if (netdev_mc_empty(dev)) {
9737                /* Reject all multicast. */
9738                tg3_set_multi(tp, 0);
9739        } else {
9740                /* Accept one or more multicast(s). */
9741                struct netdev_hw_addr *ha;
9742                u32 mc_filter[4] = { 0, };
9743                u32 regidx;
9744                u32 bit;
9745                u32 crc;
9746
9747                netdev_for_each_mc_addr(ha, dev) {
9748                        crc = calc_crc(ha->addr, ETH_ALEN);
9749                        bit = ~crc & 0x7f;
9750                        regidx = (bit & 0x60) >> 5;
9751                        bit &= 0x1f;
9752                        mc_filter[regidx] |= (1 << bit);
9753                }
9754
9755                tw32(MAC_HASH_REG_0, mc_filter[0]);
9756                tw32(MAC_HASH_REG_1, mc_filter[1]);
9757                tw32(MAC_HASH_REG_2, mc_filter[2]);
9758                tw32(MAC_HASH_REG_3, mc_filter[3]);
9759        }
9760
9761        if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9762                rx_mode |= RX_MODE_PROMISC;
9763        } else if (!(dev->flags & IFF_PROMISC)) {
9764                /* Add all entries into to the mac addr filter list */
9765                int i = 0;
9766                struct netdev_hw_addr *ha;
9767
9768                netdev_for_each_uc_addr(ha, dev) {
9769                        __tg3_set_one_mac_addr(tp, ha->addr,
9770                                               i + TG3_UCAST_ADDR_IDX(tp));
9771                        i++;
9772                }
9773        }
9774
9775        if (rx_mode != tp->rx_mode) {
9776                tp->rx_mode = rx_mode;
9777                tw32_f(MAC_RX_MODE, rx_mode);
9778                udelay(10);
9779        }
9780}
9781
9782static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9783{
9784        int i;
9785
9786        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9787                tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9788}
9789
9790static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9791{
9792        int i;
9793
9794        if (!tg3_flag(tp, SUPPORT_MSIX))
9795                return;
9796
9797        if (tp->rxq_cnt == 1) {
9798                memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9799                return;
9800        }
9801
9802        /* Validate table against current IRQ count */
9803        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9804                if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9805                        break;
9806        }
9807
9808        if (i != TG3_RSS_INDIR_TBL_SIZE)
9809                tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9810}
9811
9812static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9813{
9814        int i = 0;
9815        u32 reg = MAC_RSS_INDIR_TBL_0;
9816
9817        while (i < TG3_RSS_INDIR_TBL_SIZE) {
9818                u32 val = tp->rss_ind_tbl[i];
9819                i++;
9820                for (; i % 8; i++) {
9821                        val <<= 4;
9822                        val |= tp->rss_ind_tbl[i];
9823                }
9824                tw32(reg, val);
9825                reg += 4;
9826        }
9827}
9828
9829static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9830{
9831        if (tg3_asic_rev(tp) == ASIC_REV_5719)
9832                return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9833        else
9834                return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9835}
9836
9837/* tp->lock is held. */
9838static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9839{
9840        u32 val, rdmac_mode;
9841        int i, err, limit;
9842        struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9843
9844        tg3_disable_ints(tp);
9845
9846        tg3_stop_fw(tp);
9847
9848        tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9849
9850        if (tg3_flag(tp, INIT_COMPLETE))
9851                tg3_abort_hw(tp, 1);
9852
9853        if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9854            !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9855                tg3_phy_pull_config(tp);
9856                tg3_eee_pull_config(tp, NULL);
9857                tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9858        }
9859
9860        /* Enable MAC control of LPI */
9861        if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9862                tg3_setup_eee(tp);
9863
9864        if (reset_phy)
9865                tg3_phy_reset(tp);
9866
9867        err = tg3_chip_reset(tp);
9868        if (err)
9869                return err;
9870
9871        tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9872
9873        if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9874                val = tr32(TG3_CPMU_CTRL);
9875                val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9876                tw32(TG3_CPMU_CTRL, val);
9877
9878                val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9879                val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9880                val |= CPMU_LSPD_10MB_MACCLK_6_25;
9881                tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9882
9883                val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9884                val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9885                val |= CPMU_LNK_AWARE_MACCLK_6_25;
9886                tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9887
9888                val = tr32(TG3_CPMU_HST_ACC);
9889                val &= ~CPMU_HST_ACC_MACCLK_MASK;
9890                val |= CPMU_HST_ACC_MACCLK_6_25;
9891                tw32(TG3_CPMU_HST_ACC, val);
9892        }
9893
9894        if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9895                val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9896                val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9897                       PCIE_PWR_MGMT_L1_THRESH_4MS;
9898                tw32(PCIE_PWR_MGMT_THRESH, val);
9899
9900                val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9901                tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9902
9903                tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9904
9905                val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9906                tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9907        }
9908
9909        if (tg3_flag(tp, L1PLLPD_EN)) {
9910                u32 grc_mode = tr32(GRC_MODE);
9911
9912                /* Access the lower 1K of PL PCIE block registers. */
9913                val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9914                tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9915
9916                val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9917                tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9918                     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9919
9920                tw32(GRC_MODE, grc_mode);
9921        }
9922
9923        if (tg3_flag(tp, 57765_CLASS)) {
9924                if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9925                        u32 grc_mode = tr32(GRC_MODE);
9926
9927                        /* Access the lower 1K of PL PCIE block registers. */
9928                        val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9929                        tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9930
9931                        val = tr32(TG3_PCIE_TLDLPL_PORT +
9932                                   TG3_PCIE_PL_LO_PHYCTL5);
9933                        tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9934                             val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9935
9936                        tw32(GRC_MODE, grc_mode);
9937                }
9938
9939                if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9940                        u32 grc_mode;
9941
9942                        /* Fix transmit hangs */
9943                        val = tr32(TG3_CPMU_PADRNG_CTL);
9944                        val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9945                        tw32(TG3_CPMU_PADRNG_CTL, val);
9946
9947                        grc_mode = tr32(GRC_MODE);
9948
9949                        /* Access the lower 1K of DL PCIE block registers. */
9950                        val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9951                        tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9952
9953                        val = tr32(TG3_PCIE_TLDLPL_PORT +
9954                                   TG3_PCIE_DL_LO_FTSMAX);
9955                        val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9956                        tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9957                             val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9958
9959                        tw32(GRC_MODE, grc_mode);
9960                }
9961
9962                val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9963                val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9964                val |= CPMU_LSPD_10MB_MACCLK_6_25;
9965                tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9966        }
9967
9968        /* This works around an issue with Athlon chipsets on
9969         * B3 tigon3 silicon.  This bit has no effect on any
9970         * other revision.  But do not set this on PCI Express
9971         * chips and don't even touch the clocks if the CPMU is present.
9972         */
9973        if (!tg3_flag(tp, CPMU_PRESENT)) {
9974                if (!tg3_flag(tp, PCI_EXPRESS))
9975                        tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9976                tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9977        }
9978
9979        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9980            tg3_flag(tp, PCIX_MODE)) {
9981                val = tr32(TG3PCI_PCISTATE);
9982                val |= PCISTATE_RETRY_SAME_DMA;
9983                tw32(TG3PCI_PCISTATE, val);
9984        }
9985
9986        if (tg3_flag(tp, ENABLE_APE)) {
9987                /* Allow reads and writes to the
9988                 * APE register and memory space.
9989                 */
9990                val = tr32(TG3PCI_PCISTATE);
9991                val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
9992                       PCISTATE_ALLOW_APE_SHMEM_WR |
9993                       PCISTATE_ALLOW_APE_PSPACE_WR;
9994                tw32(TG3PCI_PCISTATE, val);
9995        }
9996
9997        if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
9998                /* Enable some hw fixes.  */
9999                val = tr32(TG3PCI_MSI_DATA);
10000                val |= (1 << 26) | (1 << 28) | (1 << 29);
10001                tw32(TG3PCI_MSI_DATA, val);
10002        }
10003
10004        /* Descriptor ring init may make accesses to the
10005         * NIC SRAM area to setup the TX descriptors, so we
10006         * can only do this after the hardware has been
10007         * successfully reset.
10008         */
10009        err = tg3_init_rings(tp);
10010        if (err)
10011                return err;
10012
10013        if (tg3_flag(tp, 57765_PLUS)) {
10014                val = tr32(TG3PCI_DMA_RW_CTRL) &
10015                      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10016                if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10017                        val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10018                if (!tg3_flag(tp, 57765_CLASS) &&
10019                    tg3_asic_rev(tp) != ASIC_REV_5717 &&
10020                    tg3_asic_rev(tp) != ASIC_REV_5762)
10021                        val |= DMA_RWCTRL_TAGGED_STAT_WA;
10022                tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10023        } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10024                   tg3_asic_rev(tp) != ASIC_REV_5761) {
10025                /* This value is determined during the probe time DMA
10026                 * engine test, tg3_test_dma.
10027                 */
10028                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10029        }
10030
10031        tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10032                          GRC_MODE_4X_NIC_SEND_RINGS |
10033                          GRC_MODE_NO_TX_PHDR_CSUM |
10034                          GRC_MODE_NO_RX_PHDR_CSUM);
10035        tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10036
10037        /* Pseudo-header checksum is done by hardware logic and not
10038         * the offload processers, so make the chip do the pseudo-
10039         * header checksums on receive.  For transmit it is more
10040         * convenient to do the pseudo-header checksum in software
10041         * as Linux does that on transmit for us in all cases.
10042         */
10043        tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10044
10045        val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10046        if (tp->rxptpctl)
10047                tw32(TG3_RX_PTP_CTL,
10048                     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10049
10050        if (tg3_flag(tp, PTP_CAPABLE))
10051                val |= GRC_MODE_TIME_SYNC_ENABLE;
10052
10053        tw32(GRC_MODE, tp->grc_mode | val);
10054
10055        /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10056        val = tr32(GRC_MISC_CFG);
10057        val &= ~0xff;
10058        val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10059        tw32(GRC_MISC_CFG, val);
10060
10061        /* Initialize MBUF/DESC pool. */
10062        if (tg3_flag(tp, 5750_PLUS)) {
10063                /* Do nothing.  */
10064        } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10065                tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10066                if (tg3_asic_rev(tp) == ASIC_REV_5704)
10067                        tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10068                else
10069                        tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10070                tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10071                tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10072        } else if (tg3_flag(tp, TSO_CAPABLE)) {
10073                int fw_len;
10074
10075                fw_len = tp->fw_len;
10076                fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10077                tw32(BUFMGR_MB_POOL_ADDR,
10078                     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10079                tw32(BUFMGR_MB_POOL_SIZE,
10080                     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10081        }
10082
10083        if (tp->dev->mtu <= ETH_DATA_LEN) {
10084                tw32(BUFMGR_MB_RDMA_LOW_WATER,
10085                     tp->bufmgr_config.mbuf_read_dma_low_water);
10086                tw32(BUFMGR_MB_MACRX_LOW_WATER,
10087                     tp->bufmgr_config.mbuf_mac_rx_low_water);
10088                tw32(BUFMGR_MB_HIGH_WATER,
10089                     tp->bufmgr_config.mbuf_high_water);
10090        } else {
10091                tw32(BUFMGR_MB_RDMA_LOW_WATER,
10092                     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10093                tw32(BUFMGR_MB_MACRX_LOW_WATER,
10094                     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10095                tw32(BUFMGR_MB_HIGH_WATER,
10096                     tp->bufmgr_config.mbuf_high_water_jumbo);
10097        }
10098        tw32(BUFMGR_DMA_LOW_WATER,
10099             tp->bufmgr_config.dma_low_water);
10100        tw32(BUFMGR_DMA_HIGH_WATER,
10101             tp->bufmgr_config.dma_high_water);
10102
10103        val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10104        if (tg3_asic_rev(tp) == ASIC_REV_5719)
10105                val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10106        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10107            tg3_asic_rev(tp) == ASIC_REV_5762 ||
10108            tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10109            tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10110                val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10111        tw32(BUFMGR_MODE, val);
10112        for (i = 0; i < 2000; i++) {
10113                if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10114                        break;
10115                udelay(10);
10116        }
10117        if (i >= 2000) {
10118                netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10119                return -ENODEV;
10120        }
10121
10122        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10123                tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10124
10125        tg3_setup_rxbd_thresholds(tp);
10126
10127        /* Initialize TG3_BDINFO's at:
10128         *  RCVDBDI_STD_BD:     standard eth size rx ring
10129         *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10130         *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10131         *
10132         * like so:
10133         *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10134         *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10135         *                              ring attribute flags
10136         *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10137         *
10138         * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10139         * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10140         *
10141         * The size of each ring is fixed in the firmware, but the location is
10142         * configurable.
10143         */
10144        tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10145             ((u64) tpr->rx_std_mapping >> 32));
10146        tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10147             ((u64) tpr->rx_std_mapping & 0xffffffff));
10148        if (!tg3_flag(tp, 5717_PLUS))
10149                tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10150                     NIC_SRAM_RX_BUFFER_DESC);
10151
10152        /* Disable the mini ring */
10153        if (!tg3_flag(tp, 5705_PLUS))
10154                tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10155                     BDINFO_FLAGS_DISABLED);
10156
10157        /* Program the jumbo buffer descriptor ring control
10158         * blocks on those devices that have them.
10159         */
10160        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10161            (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10162
10163                if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10164                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10165                             ((u64) tpr->rx_jmb_mapping >> 32));
10166                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10167                             ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10168                        val = TG3_RX_JMB_RING_SIZE(tp) <<
10169                              BDINFO_FLAGS_MAXLEN_SHIFT;
10170                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10171                             val | BDINFO_FLAGS_USE_EXT_RECV);
10172                        if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10173                            tg3_flag(tp, 57765_CLASS) ||
10174                            tg3_asic_rev(tp) == ASIC_REV_5762)
10175                                tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10176                                     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10177                } else {
10178                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10179                             BDINFO_FLAGS_DISABLED);
10180                }
10181
10182                if (tg3_flag(tp, 57765_PLUS)) {
10183                        val = TG3_RX_STD_RING_SIZE(tp);
10184                        val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10185                        val |= (TG3_RX_STD_DMA_SZ << 2);
10186                } else
10187                        val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10188        } else
10189                val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10190
10191        tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10192
10193        tpr->rx_std_prod_idx = tp->rx_pending;
10194        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10195
10196        tpr->rx_jmb_prod_idx =
10197                tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10198        tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10199
10200        tg3_rings_reset(tp);
10201
10202        /* Initialize MAC address and backoff seed. */
10203        __tg3_set_mac_addr(tp, false);
10204
10205        /* MTU + ethernet header + FCS + optional VLAN tag */
10206        tw32(MAC_RX_MTU_SIZE,
10207             tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10208
10209        /* The slot time is changed by tg3_setup_phy if we
10210         * run at gigabit with half duplex.
10211         */
10212        val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10213              (6 << TX_LENGTHS_IPG_SHIFT) |
10214              (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10215
10216        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10217            tg3_asic_rev(tp) == ASIC_REV_5762)
10218                val |= tr32(MAC_TX_LENGTHS) &
10219                       (TX_LENGTHS_JMB_FRM_LEN_MSK |
10220                        TX_LENGTHS_CNT_DWN_VAL_MSK);
10221
10222        tw32(MAC_TX_LENGTHS, val);
10223
10224        /* Receive rules. */
10225        tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10226        tw32(RCVLPC_CONFIG, 0x0181);
10227
10228        /* Calculate RDMAC_MODE setting early, we need it to determine
10229         * the RCVLPC_STATE_ENABLE mask.
10230         */
10231        rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10232                      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10233                      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10234                      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10235                      RDMAC_MODE_LNGREAD_ENAB);
10236
10237        if (tg3_asic_rev(tp) == ASIC_REV_5717)
10238                rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10239
10240        if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10241            tg3_asic_rev(tp) == ASIC_REV_5785 ||
10242            tg3_asic_rev(tp) == ASIC_REV_57780)
10243                rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10244                              RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10245                              RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10246
10247        if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10248            tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10249                if (tg3_flag(tp, TSO_CAPABLE) &&
10250                    tg3_asic_rev(tp) == ASIC_REV_5705) {
10251                        rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10252                } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10253                           !tg3_flag(tp, IS_5788)) {
10254                        rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10255                }
10256        }
10257
10258        if (tg3_flag(tp, PCI_EXPRESS))
10259                rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10260
10261        if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10262                tp->dma_limit = 0;
10263                if (tp->dev->mtu <= ETH_DATA_LEN) {
10264                        rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10265                        tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10266                }
10267        }
10268
10269        if (tg3_flag(tp, HW_TSO_1) ||
10270            tg3_flag(tp, HW_TSO_2) ||
10271            tg3_flag(tp, HW_TSO_3))
10272                rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10273
10274        if (tg3_flag(tp, 57765_PLUS) ||
10275            tg3_asic_rev(tp) == ASIC_REV_5785 ||
10276            tg3_asic_rev(tp) == ASIC_REV_57780)
10277                rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10278
10279        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10280            tg3_asic_rev(tp) == ASIC_REV_5762)
10281                rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10282
10283        if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10284            tg3_asic_rev(tp) == ASIC_REV_5784 ||
10285            tg3_asic_rev(tp) == ASIC_REV_5785 ||
10286            tg3_asic_rev(tp) == ASIC_REV_57780 ||
10287            tg3_flag(tp, 57765_PLUS)) {
10288                u32 tgtreg;
10289
10290                if (tg3_asic_rev(tp) == ASIC_REV_5762)
10291                        tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10292                else
10293                        tgtreg = TG3_RDMA_RSRVCTRL_REG;
10294
10295                val = tr32(tgtreg);
10296                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10297                    tg3_asic_rev(tp) == ASIC_REV_5762) {
10298                        val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10299                                 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10300                                 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10301                        val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10302                               TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10303                               TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10304                }
10305                tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10306        }
10307
10308        if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10309            tg3_asic_rev(tp) == ASIC_REV_5720 ||
10310            tg3_asic_rev(tp) == ASIC_REV_5762) {
10311                u32 tgtreg;
10312
10313                if (tg3_asic_rev(tp) == ASIC_REV_5762)
10314                        tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10315                else
10316                        tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10317
10318                val = tr32(tgtreg);
10319                tw32(tgtreg, val |
10320                     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10321                     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10322        }
10323
10324        /* Receive/send statistics. */
10325        if (tg3_flag(tp, 5750_PLUS)) {
10326                val = tr32(RCVLPC_STATS_ENABLE);
10327                val &= ~RCVLPC_STATSENAB_DACK_FIX;
10328                tw32(RCVLPC_STATS_ENABLE, val);
10329        } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10330                   tg3_flag(tp, TSO_CAPABLE)) {
10331                val = tr32(RCVLPC_STATS_ENABLE);
10332                val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10333                tw32(RCVLPC_STATS_ENABLE, val);
10334        } else {
10335                tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10336        }
10337        tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10338        tw32(SNDDATAI_STATSENAB, 0xffffff);
10339        tw32(SNDDATAI_STATSCTRL,
10340             (SNDDATAI_SCTRL_ENABLE |
10341              SNDDATAI_SCTRL_FASTUPD));
10342
10343        /* Setup host coalescing engine. */
10344        tw32(HOSTCC_MODE, 0);
10345        for (i = 0; i < 2000; i++) {
10346                if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10347                        break;
10348                udelay(10);
10349        }
10350
10351        __tg3_set_coalesce(tp, &tp->coal);
10352
10353        if (!tg3_flag(tp, 5705_PLUS)) {
10354                /* Status/statistics block address.  See tg3_timer,
10355                 * the tg3_periodic_fetch_stats call there, and
10356                 * tg3_get_stats to see how this works for 5705/5750 chips.
10357                 */
10358                tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10359                     ((u64) tp->stats_mapping >> 32));
10360                tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10361                     ((u64) tp->stats_mapping & 0xffffffff));
10362                tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10363
10364                tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10365
10366                /* Clear statistics and status block memory areas */
10367                for (i = NIC_SRAM_STATS_BLK;
10368                     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10369                     i += sizeof(u32)) {
10370                        tg3_write_mem(tp, i, 0);
10371                        udelay(40);
10372                }
10373        }
10374
10375        tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10376
10377        tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10378        tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10379        if (!tg3_flag(tp, 5705_PLUS))
10380                tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10381
10382        if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10383                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10384                /* reset to prevent losing 1st rx packet intermittently */
10385                tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10386                udelay(10);
10387        }
10388
10389        tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10390                        MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10391                        MAC_MODE_FHDE_ENABLE;
10392        if (tg3_flag(tp, ENABLE_APE))
10393                tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10394        if (!tg3_flag(tp, 5705_PLUS) &&
10395            !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10396            tg3_asic_rev(tp) != ASIC_REV_5700)
10397                tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10398        tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10399        udelay(40);
10400
10401        /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10402         * If TG3_FLAG_IS_NIC is zero, we should read the
10403         * register to preserve the GPIO settings for LOMs. The GPIOs,
10404         * whether used as inputs or outputs, are set by boot code after
10405         * reset.
10406         */
10407        if (!tg3_flag(tp, IS_NIC)) {
10408                u32 gpio_mask;
10409
10410                gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10411                            GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10412                            GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10413
10414                if (tg3_asic_rev(tp) == ASIC_REV_5752)
10415                        gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10416                                     GRC_LCLCTRL_GPIO_OUTPUT3;
10417
10418                if (tg3_asic_rev(tp) == ASIC_REV_5755)
10419                        gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10420
10421                tp->grc_local_ctrl &= ~gpio_mask;
10422                tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10423
10424                /* GPIO1 must be driven high for eeprom write protect */
10425                if (tg3_flag(tp, EEPROM_WRITE_PROT))
10426                        tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10427                                               GRC_LCLCTRL_GPIO_OUTPUT1);
10428        }
10429        tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10430        udelay(100);
10431
10432        if (tg3_flag(tp, USING_MSIX)) {
10433                val = tr32(MSGINT_MODE);
10434                val |= MSGINT_MODE_ENABLE;
10435                if (tp->irq_cnt > 1)
10436                        val |= MSGINT_MODE_MULTIVEC_EN;
10437                if (!tg3_flag(tp, 1SHOT_MSI))
10438                        val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10439                tw32(MSGINT_MODE, val);
10440        }
10441
10442        if (!tg3_flag(tp, 5705_PLUS)) {
10443                tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10444                udelay(40);
10445        }
10446
10447        val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10448               WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10449               WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10450               WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10451               WDMAC_MODE_LNGREAD_ENAB);
10452
10453        if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10454            tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10455                if (tg3_flag(tp, TSO_CAPABLE) &&
10456                    (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10457                     tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10458                        /* nothing */
10459                } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10460                           !tg3_flag(tp, IS_5788)) {
10461                        val |= WDMAC_MODE_RX_ACCEL;
10462                }
10463        }
10464
10465        /* Enable host coalescing bug fix */
10466        if (tg3_flag(tp, 5755_PLUS))
10467                val |= WDMAC_MODE_STATUS_TAG_FIX;
10468
10469        if (tg3_asic_rev(tp) == ASIC_REV_5785)
10470                val |= WDMAC_MODE_BURST_ALL_DATA;
10471
10472        tw32_f(WDMAC_MODE, val);
10473        udelay(40);
10474
10475        if (tg3_flag(tp, PCIX_MODE)) {
10476                u16 pcix_cmd;
10477
10478                pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10479                                     &pcix_cmd);
10480                if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10481                        pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10482                        pcix_cmd |= PCI_X_CMD_READ_2K;
10483                } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10484                        pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10485                        pcix_cmd |= PCI_X_CMD_READ_2K;
10486                }
10487                pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10488                                      pcix_cmd);
10489        }
10490
10491        tw32_f(RDMAC_MODE, rdmac_mode);
10492        udelay(40);
10493
10494        if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10495            tg3_asic_rev(tp) == ASIC_REV_5720) {
10496                for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10497                        if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10498                                break;
10499                }
10500                if (i < TG3_NUM_RDMA_CHANNELS) {
10501                        val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10502                        val |= tg3_lso_rd_dma_workaround_bit(tp);
10503                        tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10504                        tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10505                }
10506        }
10507
10508        tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10509        if (!tg3_flag(tp, 5705_PLUS))
10510                tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10511
10512        if (tg3_asic_rev(tp) == ASIC_REV_5761)
10513                tw32(SNDDATAC_MODE,
10514                     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10515        else
10516                tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10517
10518        tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10519        tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10520        val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10521        if (tg3_flag(tp, LRG_PROD_RING_CAP))
10522                val |= RCVDBDI_MODE_LRG_RING_SZ;
10523        tw32(RCVDBDI_MODE, val);
10524        tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10525        if (tg3_flag(tp, HW_TSO_1) ||
10526            tg3_flag(tp, HW_TSO_2) ||
10527            tg3_flag(tp, HW_TSO_3))
10528                tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10529        val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10530        if (tg3_flag(tp, ENABLE_TSS))
10531                val |= SNDBDI_MODE_MULTI_TXQ_EN;
10532        tw32(SNDBDI_MODE, val);
10533        tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10534
10535        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10536                err = tg3_load_5701_a0_firmware_fix(tp);
10537                if (err)
10538                        return err;
10539        }
10540
10541        if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10542                /* Ignore any errors for the firmware download. If download
10543                 * fails, the device will operate with EEE disabled
10544                 */
10545                tg3_load_57766_firmware(tp);
10546        }
10547
10548        if (tg3_flag(tp, TSO_CAPABLE)) {
10549                err = tg3_load_tso_firmware(tp);
10550                if (err)
10551                        return err;
10552        }
10553
10554        tp->tx_mode = TX_MODE_ENABLE;
10555
10556        if (tg3_flag(tp, 5755_PLUS) ||
10557            tg3_asic_rev(tp) == ASIC_REV_5906)
10558                tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10559
10560        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10561            tg3_asic_rev(tp) == ASIC_REV_5762) {
10562                val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10563                tp->tx_mode &= ~val;
10564                tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10565        }
10566
10567        tw32_f(MAC_TX_MODE, tp->tx_mode);
10568        udelay(100);
10569
10570        if (tg3_flag(tp, ENABLE_RSS)) {
10571                u32 rss_key[10];
10572
10573                tg3_rss_write_indir_tbl(tp);
10574
10575                netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10576
10577                for (i = 0; i < 10 ; i++)
10578                        tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10579        }
10580
10581        tp->rx_mode = RX_MODE_ENABLE;
10582        if (tg3_flag(tp, 5755_PLUS))
10583                tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10584
10585        if (tg3_asic_rev(tp) == ASIC_REV_5762)
10586                tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10587
10588        if (tg3_flag(tp, ENABLE_RSS))
10589                tp->rx_mode |= RX_MODE_RSS_ENABLE |
10590                               RX_MODE_RSS_ITBL_HASH_BITS_7 |
10591                               RX_MODE_RSS_IPV6_HASH_EN |
10592                               RX_MODE_RSS_TCP_IPV6_HASH_EN |
10593                               RX_MODE_RSS_IPV4_HASH_EN |
10594                               RX_MODE_RSS_TCP_IPV4_HASH_EN;
10595
10596        tw32_f(MAC_RX_MODE, tp->rx_mode);
10597        udelay(10);
10598
10599        tw32(MAC_LED_CTRL, tp->led_ctrl);
10600
10601        tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10602        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10603                tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10604                udelay(10);
10605        }
10606        tw32_f(MAC_RX_MODE, tp->rx_mode);
10607        udelay(10);
10608
10609        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10610                if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10611                    !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10612                        /* Set drive transmission level to 1.2V  */
10613                        /* only if the signal pre-emphasis bit is not set  */
10614                        val = tr32(MAC_SERDES_CFG);
10615                        val &= 0xfffff000;
10616                        val |= 0x880;
10617                        tw32(MAC_SERDES_CFG, val);
10618                }
10619                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10620                        tw32(MAC_SERDES_CFG, 0x616000);
10621        }
10622
10623        /* Prevent chip from dropping frames when flow control
10624         * is enabled.
10625         */
10626        if (tg3_flag(tp, 57765_CLASS))
10627                val = 1;
10628        else
10629                val = 2;
10630        tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10631
10632        if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10633            (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10634                /* Use hardware link auto-negotiation */
10635                tg3_flag_set(tp, HW_AUTONEG);
10636        }
10637
10638        if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10639            tg3_asic_rev(tp) == ASIC_REV_5714) {
10640                u32 tmp;
10641
10642                tmp = tr32(SERDES_RX_CTRL);
10643                tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10644                tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10645                tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10646                tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10647        }
10648
10649        if (!tg3_flag(tp, USE_PHYLIB)) {
10650                if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10651                        tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10652
10653                err = tg3_setup_phy(tp, false);
10654                if (err)
10655                        return err;
10656
10657                if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10658                    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10659                        u32 tmp;
10660
10661                        /* Clear CRC stats. */
10662                        if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10663                                tg3_writephy(tp, MII_TG3_TEST1,
10664                                             tmp | MII_TG3_TEST1_CRC_EN);
10665                                tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10666                        }
10667                }
10668        }
10669
10670        __tg3_set_rx_mode(tp->dev);
10671
10672        /* Initialize receive rules. */
10673        tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10674        tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10675        tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10676        tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10677
10678        if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10679                limit = 8;
10680        else
10681                limit = 16;
10682        if (tg3_flag(tp, ENABLE_ASF))
10683                limit -= 4;
10684        switch (limit) {
10685        case 16:
10686                tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10687        case 15:
10688                tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10689        case 14:
10690                tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10691        case 13:
10692                tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10693        case 12:
10694                tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10695        case 11:
10696                tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10697        case 10:
10698                tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10699        case 9:
10700                tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10701        case 8:
10702                tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10703        case 7:
10704                tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10705        case 6:
10706                tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10707        case 5:
10708                tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10709        case 4:
10710                /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10711        case 3:
10712                /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10713        case 2:
10714        case 1:
10715
10716        default:
10717                break;
10718        }
10719
10720        if (tg3_flag(tp, ENABLE_APE))
10721                /* Write our heartbeat update interval to APE. */
10722                tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10723                                APE_HOST_HEARTBEAT_INT_DISABLE);
10724
10725        tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10726
10727        return 0;
10728}
10729
10730/* Called at device open time to get the chip ready for
10731 * packet processing.  Invoked with tp->lock held.
10732 */
10733static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10734{
10735        /* Chip may have been just powered on. If so, the boot code may still
10736         * be running initialization. Wait for it to finish to avoid races in
10737         * accessing the hardware.
10738         */
10739        tg3_enable_register_access(tp);
10740        tg3_poll_fw(tp);
10741
10742        tg3_switch_clocks(tp);
10743
10744        tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10745
10746        return tg3_reset_hw(tp, reset_phy);
10747}
10748
10749#ifdef CONFIG_TIGON3_HWMON
10750static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10751{
10752        int i;
10753
10754        for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
10755                u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
10756
10757                tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10758                off += len;
10759
10760                if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10761                    !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10762                        memset(ocir, 0, TG3_OCIR_LEN);
10763        }
10764}
10765
10766/* sysfs attributes for hwmon */
10767static ssize_t tg3_show_temp(struct device *dev,
10768                             struct device_attribute *devattr, char *buf)
10769{
10770        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10771        struct tg3 *tp = dev_get_drvdata(dev);
10772        u32 temperature;
10773
10774        spin_lock_bh(&tp->lock);
10775        tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10776                                sizeof(temperature));
10777        spin_unlock_bh(&tp->lock);
10778        return sprintf(buf, "%u\n", temperature * 1000);
10779}
10780
10781
10782static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
10783                          TG3_TEMP_SENSOR_OFFSET);
10784static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
10785                          TG3_TEMP_CAUTION_OFFSET);
10786static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
10787                          TG3_TEMP_MAX_OFFSET);
10788
10789static struct attribute *tg3_attrs[] = {
10790        &sensor_dev_attr_temp1_input.dev_attr.attr,
10791        &sensor_dev_attr_temp1_crit.dev_attr.attr,
10792        &sensor_dev_attr_temp1_max.dev_attr.attr,
10793        NULL
10794};
10795ATTRIBUTE_GROUPS(tg3);
10796
10797static void tg3_hwmon_close(struct tg3 *tp)
10798{
10799        if (tp->hwmon_dev) {
10800                hwmon_device_unregister(tp->hwmon_dev);
10801                tp->hwmon_dev = NULL;
10802        }
10803}
10804
10805static void tg3_hwmon_open(struct tg3 *tp)
10806{
10807        int i;
10808        u32 size = 0;
10809        struct pci_dev *pdev = tp->pdev;
10810        struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10811
10812        tg3_sd_scan_scratchpad(tp, ocirs);
10813
10814        for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10815                if (!ocirs[i].src_data_length)
10816                        continue;
10817
10818                size += ocirs[i].src_hdr_length;
10819                size += ocirs[i].src_data_length;
10820        }
10821
10822        if (!size)
10823                return;
10824
10825        tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10826                                                          tp, tg3_groups);
10827        if (IS_ERR(tp->hwmon_dev)) {
10828                tp->hwmon_dev = NULL;
10829                dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10830        }
10831}
10832#else
10833static inline void tg3_hwmon_close(struct tg3 *tp) { }
10834static inline void tg3_hwmon_open(struct tg3 *tp) { }
10835#endif /* CONFIG_TIGON3_HWMON */
10836
10837
10838#define TG3_STAT_ADD32(PSTAT, REG) \
10839do {    u32 __val = tr32(REG); \
10840        (PSTAT)->low += __val; \
10841        if ((PSTAT)->low < __val) \
10842                (PSTAT)->high += 1; \
10843} while (0)
10844
10845static void tg3_periodic_fetch_stats(struct tg3 *tp)
10846{
10847        struct tg3_hw_stats *sp = tp->hw_stats;
10848
10849        if (!tp->link_up)
10850                return;
10851
10852        TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10853        TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10854        TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10855        TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10856        TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10857        TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10858        TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10859        TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10860        TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10861        TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10862        TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10863        TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10864        TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10865        if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10866                     (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10867                      sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10868                u32 val;
10869
10870                val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10871                val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10872                tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10873                tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10874        }
10875
10876        TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10877        TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10878        TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10879        TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10880        TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10881        TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10882        TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10883        TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10884        TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10885        TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10886        TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10887        TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10888        TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10889        TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10890
10891        TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10892        if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10893            tg3_asic_rev(tp) != ASIC_REV_5762 &&
10894            tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10895            tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10896                TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10897        } else {
10898                u32 val = tr32(HOSTCC_FLOW_ATTN);
10899                val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10900                if (val) {
10901                        tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10902                        sp->rx_discards.low += val;
10903                        if (sp->rx_discards.low < val)
10904                                sp->rx_discards.high += 1;
10905                }
10906                sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10907        }
10908        TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10909}
10910
10911static void tg3_chk_missed_msi(struct tg3 *tp)
10912{
10913        u32 i;
10914
10915        for (i = 0; i < tp->irq_cnt; i++) {
10916                struct tg3_napi *tnapi = &tp->napi[i];
10917
10918                if (tg3_has_work(tnapi)) {
10919                        if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10920                            tnapi->last_tx_cons == tnapi->tx_cons) {
10921                                if (tnapi->chk_msi_cnt < 1) {
10922                                        tnapi->chk_msi_cnt++;
10923                                        return;
10924                                }
10925                                tg3_msi(0, tnapi);
10926                        }
10927                }
10928                tnapi->chk_msi_cnt = 0;
10929                tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10930                tnapi->last_tx_cons = tnapi->tx_cons;
10931        }
10932}
10933
10934static void tg3_timer(unsigned long __opaque)
10935{
10936        struct tg3 *tp = (struct tg3 *) __opaque;
10937
10938        spin_lock(&tp->lock);
10939
10940        if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10941                spin_unlock(&tp->lock);
10942                goto restart_timer;
10943        }
10944
10945        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10946            tg3_flag(tp, 57765_CLASS))
10947                tg3_chk_missed_msi(tp);
10948
10949        if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10950                /* BCM4785: Flush posted writes from GbE to host memory. */
10951                tr32(HOSTCC_MODE);
10952        }
10953
10954        if (!tg3_flag(tp, TAGGED_STATUS)) {
10955                /* All of this garbage is because when using non-tagged
10956                 * IRQ status the mailbox/status_block protocol the chip
10957                 * uses with the cpu is race prone.
10958                 */
10959                if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10960                        tw32(GRC_LOCAL_CTRL,
10961                             tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10962                } else {
10963                        tw32(HOSTCC_MODE, tp->coalesce_mode |
10964                             HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
10965                }
10966
10967                if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
10968                        spin_unlock(&tp->lock);
10969                        tg3_reset_task_schedule(tp);
10970                        goto restart_timer;
10971                }
10972        }
10973
10974        /* This part only runs once per second. */
10975        if (!--tp->timer_counter) {
10976                if (tg3_flag(tp, 5705_PLUS))
10977                        tg3_periodic_fetch_stats(tp);
10978
10979                if (tp->setlpicnt && !--tp->setlpicnt)
10980                        tg3_phy_eee_enable(tp);
10981
10982                if (tg3_flag(tp, USE_LINKCHG_REG)) {
10983                        u32 mac_stat;
10984                        int phy_event;
10985
10986                        mac_stat = tr32(MAC_STATUS);
10987
10988                        phy_event = 0;
10989                        if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
10990                                if (mac_stat & MAC_STATUS_MI_INTERRUPT)
10991                                        phy_event = 1;
10992                        } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
10993                                phy_event = 1;
10994
10995                        if (phy_event)
10996                                tg3_setup_phy(tp, false);
10997                } else if (tg3_flag(tp, POLL_SERDES)) {
10998                        u32 mac_stat = tr32(MAC_STATUS);
10999                        int need_setup = 0;
11000
11001                        if (tp->link_up &&
11002                            (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11003                                need_setup = 1;
11004                        }
11005                        if (!tp->link_up &&
11006                            (mac_stat & (MAC_STATUS_PCS_SYNCED |
11007                                         MAC_STATUS_SIGNAL_DET))) {
11008                                need_setup = 1;
11009                        }
11010                        if (need_setup) {
11011                                if (!tp->serdes_counter) {
11012                                        tw32_f(MAC_MODE,
11013                                             (tp->mac_mode &
11014                                              ~MAC_MODE_PORT_MODE_MASK));
11015                                        udelay(40);
11016                                        tw32_f(MAC_MODE, tp->mac_mode);
11017                                        udelay(40);
11018                                }
11019                                tg3_setup_phy(tp, false);
11020                        }
11021                } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11022                           tg3_flag(tp, 5780_CLASS)) {
11023                        tg3_serdes_parallel_detect(tp);
11024                } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11025                        u32 cpmu = tr32(TG3_CPMU_STATUS);
11026                        bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11027                                         TG3_CPMU_STATUS_LINK_MASK);
11028
11029                        if (link_up != tp->link_up)
11030                                tg3_setup_phy(tp, false);
11031                }
11032
11033                tp->timer_counter = tp->timer_multiplier;
11034        }
11035
11036        /* Heartbeat is only sent once every 2 seconds.
11037         *
11038         * The heartbeat is to tell the ASF firmware that the host
11039         * driver is still alive.  In the event that the OS crashes,
11040         * ASF needs to reset the hardware to free up the FIFO space
11041         * that may be filled with rx packets destined for the host.
11042         * If the FIFO is full, ASF will no longer function properly.
11043         *
11044         * Unintended resets have been reported on real time kernels
11045         * where the timer doesn't run on time.  Netpoll will also have
11046         * same problem.
11047         *
11048         * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11049         * to check the ring condition when the heartbeat is expiring
11050         * before doing the reset.  This will prevent most unintended
11051         * resets.
11052         */
11053        if (!--tp->asf_counter) {
11054                if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11055                        tg3_wait_for_event_ack(tp);
11056
11057                        tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11058                                      FWCMD_NICDRV_ALIVE3);
11059                        tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11060                        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11061                                      TG3_FW_UPDATE_TIMEOUT_SEC);
11062
11063                        tg3_generate_fw_event(tp);
11064                }
11065                tp->asf_counter = tp->asf_multiplier;
11066        }
11067
11068        spin_unlock(&tp->lock);
11069
11070restart_timer:
11071        tp->timer.expires = jiffies + tp->timer_offset;
11072        add_timer(&tp->timer);
11073}
11074
11075static void tg3_timer_init(struct tg3 *tp)
11076{
11077        if (tg3_flag(tp, TAGGED_STATUS) &&
11078            tg3_asic_rev(tp) != ASIC_REV_5717 &&
11079            !tg3_flag(tp, 57765_CLASS))
11080                tp->timer_offset = HZ;
11081        else
11082                tp->timer_offset = HZ / 10;
11083
11084        BUG_ON(tp->timer_offset > HZ);
11085
11086        tp->timer_multiplier = (HZ / tp->timer_offset);
11087        tp->asf_multiplier = (HZ / tp->timer_offset) *
11088                             TG3_FW_UPDATE_FREQ_SEC;
11089
11090        init_timer(&tp->timer);
11091        tp->timer.data = (unsigned long) tp;
11092        tp->timer.function = tg3_timer;
11093}
11094
11095static void tg3_timer_start(struct tg3 *tp)
11096{
11097        tp->asf_counter   = tp->asf_multiplier;
11098        tp->timer_counter = tp->timer_multiplier;
11099
11100        tp->timer.expires = jiffies + tp->timer_offset;
11101        add_timer(&tp->timer);
11102}
11103
11104static void tg3_timer_stop(struct tg3 *tp)
11105{
11106        del_timer_sync(&tp->timer);
11107}
11108
11109/* Restart hardware after configuration changes, self-test, etc.
11110 * Invoked with tp->lock held.
11111 */
11112static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11113        __releases(tp->lock)
11114        __acquires(tp->lock)
11115{
11116        int err;
11117
11118        err = tg3_init_hw(tp, reset_phy);
11119        if (err) {
11120                netdev_err(tp->dev,
11121                           "Failed to re-initialize device, aborting\n");
11122                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11123                tg3_full_unlock(tp);
11124                tg3_timer_stop(tp);
11125                tp->irq_sync = 0;
11126                tg3_napi_enable(tp);
11127                dev_close(tp->dev);
11128                tg3_full_lock(tp, 0);
11129        }
11130        return err;
11131}
11132
11133static void tg3_reset_task(struct work_struct *work)
11134{
11135        struct tg3 *tp = container_of(work, struct tg3, reset_task);
11136        int err;
11137
11138        rtnl_lock();
11139        tg3_full_lock(tp, 0);
11140
11141        if (!netif_running(tp->dev)) {
11142                tg3_flag_clear(tp, RESET_TASK_PENDING);
11143                tg3_full_unlock(tp);
11144                rtnl_unlock();
11145                return;
11146        }
11147
11148        tg3_full_unlock(tp);
11149
11150        tg3_phy_stop(tp);
11151
11152        tg3_netif_stop(tp);
11153
11154        tg3_full_lock(tp, 1);
11155
11156        if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11157                tp->write32_tx_mbox = tg3_write32_tx_mbox;
11158                tp->write32_rx_mbox = tg3_write_flush_reg32;
11159                tg3_flag_set(tp, MBOX_WRITE_REORDER);
11160                tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11161        }
11162
11163        tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11164        err = tg3_init_hw(tp, true);
11165        if (err)
11166                goto out;
11167
11168        tg3_netif_start(tp);
11169
11170out:
11171        tg3_full_unlock(tp);
11172
11173        if (!err)
11174                tg3_phy_start(tp);
11175
11176        tg3_flag_clear(tp, RESET_TASK_PENDING);
11177        rtnl_unlock();
11178}
11179
11180static int tg3_request_irq(struct tg3 *tp, int irq_num)
11181{
11182        irq_handler_t fn;
11183        unsigned long flags;
11184        char *name;
11185        struct tg3_napi *tnapi = &tp->napi[irq_num];
11186
11187        if (tp->irq_cnt == 1)
11188                name = tp->dev->name;
11189        else {
11190                name = &tnapi->irq_lbl[0];
11191                if (tnapi->tx_buffers && tnapi->rx_rcb)
11192                        snprintf(name, IFNAMSIZ,
11193                                 "%s-txrx-%d", tp->dev->name, irq_num);
11194                else if (tnapi->tx_buffers)
11195                        snprintf(name, IFNAMSIZ,
11196                                 "%s-tx-%d", tp->dev->name, irq_num);
11197                else if (tnapi->rx_rcb)
11198                        snprintf(name, IFNAMSIZ,
11199                                 "%s-rx-%d", tp->dev->name, irq_num);
11200                else
11201                        snprintf(name, IFNAMSIZ,
11202                                 "%s-%d", tp->dev->name, irq_num);
11203                name[IFNAMSIZ-1] = 0;
11204        }
11205
11206        if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11207                fn = tg3_msi;
11208                if (tg3_flag(tp, 1SHOT_MSI))
11209                        fn = tg3_msi_1shot;
11210                flags = 0;
11211        } else {
11212                fn = tg3_interrupt;
11213                if (tg3_flag(tp, TAGGED_STATUS))
11214                        fn = tg3_interrupt_tagged;
11215                flags = IRQF_SHARED;
11216        }
11217
11218        return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11219}
11220
11221static int tg3_test_interrupt(struct tg3 *tp)
11222{
11223        struct tg3_napi *tnapi = &tp->napi[0];
11224        struct net_device *dev = tp->dev;
11225        int err, i, intr_ok = 0;
11226        u32 val;
11227
11228        if (!netif_running(dev))
11229                return -ENODEV;
11230
11231        tg3_disable_ints(tp);
11232
11233        free_irq(tnapi->irq_vec, tnapi);
11234
11235        /*
11236         * Turn off MSI one shot mode.  Otherwise this test has no
11237         * observable way to know whether the interrupt was delivered.
11238         */
11239        if (tg3_flag(tp, 57765_PLUS)) {
11240                val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11241                tw32(MSGINT_MODE, val);
11242        }
11243
11244        err = request_irq(tnapi->irq_vec, tg3_test_isr,
11245                          IRQF_SHARED, dev->name, tnapi);
11246        if (err)
11247                return err;
11248
11249        tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11250        tg3_enable_ints(tp);
11251
11252        tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11253               tnapi->coal_now);
11254
11255        for (i = 0; i < 5; i++) {
11256                u32 int_mbox, misc_host_ctrl;
11257
11258                int_mbox = tr32_mailbox(tnapi->int_mbox);
11259                misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11260
11261                if ((int_mbox != 0) ||
11262                    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11263                        intr_ok = 1;
11264                        break;
11265                }
11266
11267                if (tg3_flag(tp, 57765_PLUS) &&
11268                    tnapi->hw_status->status_tag != tnapi->last_tag)
11269                        tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11270
11271                msleep(10);
11272        }
11273
11274        tg3_disable_ints(tp);
11275
11276        free_irq(tnapi->irq_vec, tnapi);
11277
11278        err = tg3_request_irq(tp, 0);
11279
11280        if (err)
11281                return err;
11282
11283        if (intr_ok) {
11284                /* Reenable MSI one shot mode. */
11285                if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11286                        val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11287                        tw32(MSGINT_MODE, val);
11288                }
11289                return 0;
11290        }
11291
11292        return -EIO;
11293}
11294
11295/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11296 * successfully restored
11297 */
11298static int tg3_test_msi(struct tg3 *tp)
11299{
11300        int err;
11301        u16 pci_cmd;
11302
11303        if (!tg3_flag(tp, USING_MSI))
11304                return 0;
11305
11306        /* Turn off SERR reporting in case MSI terminates with Master
11307         * Abort.
11308         */
11309        pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11310        pci_write_config_word(tp->pdev, PCI_COMMAND,
11311                              pci_cmd & ~PCI_COMMAND_SERR);
11312
11313        err = tg3_test_interrupt(tp);
11314
11315        pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11316
11317        if (!err)
11318                return 0;
11319
11320        /* other failures */
11321        if (err != -EIO)
11322                return err;
11323
11324        /* MSI test failed, go back to INTx mode */
11325        netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11326                    "to INTx mode. Please report this failure to the PCI "
11327                    "maintainer and include system chipset information\n");
11328
11329        free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11330
11331        pci_disable_msi(tp->pdev);
11332
11333        tg3_flag_clear(tp, USING_MSI);
11334        tp->napi[0].irq_vec = tp->pdev->irq;
11335
11336        err = tg3_request_irq(tp, 0);
11337        if (err)
11338                return err;
11339
11340        /* Need to reset the chip because the MSI cycle may have terminated
11341         * with Master Abort.
11342         */
11343        tg3_full_lock(tp, 1);
11344
11345        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11346        err = tg3_init_hw(tp, true);
11347
11348        tg3_full_unlock(tp);
11349
11350        if (err)
11351                free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11352
11353        return err;
11354}
11355
11356static int tg3_request_firmware(struct tg3 *tp)
11357{
11358        const struct tg3_firmware_hdr *fw_hdr;
11359
11360        if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11361                netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11362                           tp->fw_needed);
11363                return -ENOENT;
11364        }
11365
11366        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11367
11368        /* Firmware blob starts with version numbers, followed by
11369         * start address and _full_ length including BSS sections
11370         * (which must be longer than the actual data, of course
11371         */
11372
11373        tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11374        if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11375                netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11376                           tp->fw_len, tp->fw_needed);
11377                release_firmware(tp->fw);
11378                tp->fw = NULL;
11379                return -EINVAL;
11380        }
11381
11382        /* We no longer need firmware; we have it. */
11383        tp->fw_needed = NULL;
11384        return 0;
11385}
11386
11387static u32 tg3_irq_count(struct tg3 *tp)
11388{
11389        u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11390
11391        if (irq_cnt > 1) {
11392                /* We want as many rx rings enabled as there are cpus.
11393                 * In multiqueue MSI-X mode, the first MSI-X vector
11394                 * only deals with link interrupts, etc, so we add
11395                 * one to the number of vectors we are requesting.
11396                 */
11397                irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11398        }
11399
11400        return irq_cnt;
11401}
11402
11403static bool tg3_enable_msix(struct tg3 *tp)
11404{
11405        int i, rc;
11406        struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11407
11408        tp->txq_cnt = tp->txq_req;
11409        tp->rxq_cnt = tp->rxq_req;
11410        if (!tp->rxq_cnt)
11411                tp->rxq_cnt = netif_get_num_default_rss_queues();
11412        if (tp->rxq_cnt > tp->rxq_max)
11413                tp->rxq_cnt = tp->rxq_max;
11414
11415        /* Disable multiple TX rings by default.  Simple round-robin hardware
11416         * scheduling of the TX rings can cause starvation of rings with
11417         * small packets when other rings have TSO or jumbo packets.
11418         */
11419        if (!tp->txq_req)
11420                tp->txq_cnt = 1;
11421
11422        tp->irq_cnt = tg3_irq_count(tp);
11423
11424        for (i = 0; i < tp->irq_max; i++) {
11425                msix_ent[i].entry  = i;
11426                msix_ent[i].vector = 0;
11427        }
11428
11429        rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11430        if (rc < 0) {
11431                return false;
11432        } else if (rc < tp->irq_cnt) {
11433                netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11434                              tp->irq_cnt, rc);
11435                tp->irq_cnt = rc;
11436                tp->rxq_cnt = max(rc - 1, 1);
11437                if (tp->txq_cnt)
11438                        tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11439        }
11440
11441        for (i = 0; i < tp->irq_max; i++)
11442                tp->napi[i].irq_vec = msix_ent[i].vector;
11443
11444        if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11445                pci_disable_msix(tp->pdev);
11446                return false;
11447        }
11448
11449        if (tp->irq_cnt == 1)
11450                return true;
11451
11452        tg3_flag_set(tp, ENABLE_RSS);
11453
11454        if (tp->txq_cnt > 1)
11455                tg3_flag_set(tp, ENABLE_TSS);
11456
11457        netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11458
11459        return true;
11460}
11461
11462static void tg3_ints_init(struct tg3 *tp)
11463{
11464        if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11465            !tg3_flag(tp, TAGGED_STATUS)) {
11466                /* All MSI supporting chips should support tagged
11467                 * status.  Assert that this is the case.
11468                 */
11469                netdev_warn(tp->dev,
11470                            "MSI without TAGGED_STATUS? Not using MSI\n");
11471                goto defcfg;
11472        }
11473
11474        if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11475                tg3_flag_set(tp, USING_MSIX);
11476        else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11477                tg3_flag_set(tp, USING_MSI);
11478
11479        if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11480                u32 msi_mode = tr32(MSGINT_MODE);
11481                if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11482                        msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11483                if (!tg3_flag(tp, 1SHOT_MSI))
11484                        msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11485                tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11486        }
11487defcfg:
11488        if (!tg3_flag(tp, USING_MSIX)) {
11489                tp->irq_cnt = 1;
11490                tp->napi[0].irq_vec = tp->pdev->irq;
11491        }
11492
11493        if (tp->irq_cnt == 1) {
11494                tp->txq_cnt = 1;
11495                tp->rxq_cnt = 1;
11496                netif_set_real_num_tx_queues(tp->dev, 1);
11497                netif_set_real_num_rx_queues(tp->dev, 1);
11498        }
11499}
11500
11501static void tg3_ints_fini(struct tg3 *tp)
11502{
11503        if (tg3_flag(tp, USING_MSIX))
11504                pci_disable_msix(tp->pdev);
11505        else if (tg3_flag(tp, USING_MSI))
11506                pci_disable_msi(tp->pdev);
11507        tg3_flag_clear(tp, USING_MSI);
11508        tg3_flag_clear(tp, USING_MSIX);
11509        tg3_flag_clear(tp, ENABLE_RSS);
11510        tg3_flag_clear(tp, ENABLE_TSS);
11511}
11512
11513static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11514                     bool init)
11515{
11516        struct net_device *dev = tp->dev;
11517        int i, err;
11518
11519        /*
11520         * Setup interrupts first so we know how
11521         * many NAPI resources to allocate
11522         */
11523        tg3_ints_init(tp);
11524
11525        tg3_rss_check_indir_tbl(tp);
11526
11527        /* The placement of this call is tied
11528         * to the setup and use of Host TX descriptors.
11529         */
11530        err = tg3_alloc_consistent(tp);
11531        if (err)
11532                goto out_ints_fini;
11533
11534        tg3_napi_init(tp);
11535
11536        tg3_napi_enable(tp);
11537
11538        for (i = 0; i < tp->irq_cnt; i++) {
11539                err = tg3_request_irq(tp, i);
11540                if (err) {
11541                        for (i--; i >= 0; i--) {
11542                                struct tg3_napi *tnapi = &tp->napi[i];
11543
11544                                free_irq(tnapi->irq_vec, tnapi);
11545                        }
11546                        goto out_napi_fini;
11547                }
11548        }
11549
11550        tg3_full_lock(tp, 0);
11551
11552        if (init)
11553                tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11554
11555        err = tg3_init_hw(tp, reset_phy);
11556        if (err) {
11557                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11558                tg3_free_rings(tp);
11559        }
11560
11561        tg3_full_unlock(tp);
11562
11563        if (err)
11564                goto out_free_irq;
11565
11566        if (test_irq && tg3_flag(tp, USING_MSI)) {
11567                err = tg3_test_msi(tp);
11568
11569                if (err) {
11570                        tg3_full_lock(tp, 0);
11571                        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11572                        tg3_free_rings(tp);
11573                        tg3_full_unlock(tp);
11574
11575                        goto out_napi_fini;
11576                }
11577
11578                if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11579                        u32 val = tr32(PCIE_TRANSACTION_CFG);
11580
11581                        tw32(PCIE_TRANSACTION_CFG,
11582                             val | PCIE_TRANS_CFG_1SHOT_MSI);
11583                }
11584        }
11585
11586        tg3_phy_start(tp);
11587
11588        tg3_hwmon_open(tp);
11589
11590        tg3_full_lock(tp, 0);
11591
11592        tg3_timer_start(tp);
11593        tg3_flag_set(tp, INIT_COMPLETE);
11594        tg3_enable_ints(tp);
11595
11596        tg3_ptp_resume(tp);
11597
11598        tg3_full_unlock(tp);
11599
11600        netif_tx_start_all_queues(dev);
11601
11602        /*
11603         * Reset loopback feature if it was turned on while the device was down
11604         * make sure that it's installed properly now.
11605         */
11606        if (dev->features & NETIF_F_LOOPBACK)
11607                tg3_set_loopback(dev, dev->features);
11608
11609        return 0;
11610
11611out_free_irq:
11612        for (i = tp->irq_cnt - 1; i >= 0; i--) {
11613                struct tg3_napi *tnapi = &tp->napi[i];
11614                free_irq(tnapi->irq_vec, tnapi);
11615        }
11616
11617out_napi_fini:
11618        tg3_napi_disable(tp);
11619        tg3_napi_fini(tp);
11620        tg3_free_consistent(tp);
11621
11622out_ints_fini:
11623        tg3_ints_fini(tp);
11624
11625        return err;
11626}
11627
11628static void tg3_stop(struct tg3 *tp)
11629{
11630        int i;
11631
11632        tg3_reset_task_cancel(tp);
11633        tg3_netif_stop(tp);
11634
11635        tg3_timer_stop(tp);
11636
11637        tg3_hwmon_close(tp);
11638
11639        tg3_phy_stop(tp);
11640
11641        tg3_full_lock(tp, 1);
11642
11643        tg3_disable_ints(tp);
11644
11645        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11646        tg3_free_rings(tp);
11647        tg3_flag_clear(tp, INIT_COMPLETE);
11648
11649        tg3_full_unlock(tp);
11650
11651        for (i = tp->irq_cnt - 1; i >= 0; i--) {
11652                struct tg3_napi *tnapi = &tp->napi[i];
11653                free_irq(tnapi->irq_vec, tnapi);
11654        }
11655
11656        tg3_ints_fini(tp);
11657
11658        tg3_napi_fini(tp);
11659
11660        tg3_free_consistent(tp);
11661}
11662
11663static int tg3_open(struct net_device *dev)
11664{
11665        struct tg3 *tp = netdev_priv(dev);
11666        int err;
11667
11668        if (tp->pcierr_recovery) {
11669                netdev_err(dev, "Failed to open device. PCI error recovery "
11670                           "in progress\n");
11671                return -EAGAIN;
11672        }
11673
11674        if (tp->fw_needed) {
11675                err = tg3_request_firmware(tp);
11676                if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11677                        if (err) {
11678                                netdev_warn(tp->dev, "EEE capability disabled\n");
11679                                tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11680                        } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11681                                netdev_warn(tp->dev, "EEE capability restored\n");
11682                                tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11683                        }
11684                } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11685                        if (err)
11686                                return err;
11687                } else if (err) {
11688                        netdev_warn(tp->dev, "TSO capability disabled\n");
11689                        tg3_flag_clear(tp, TSO_CAPABLE);
11690                } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11691                        netdev_notice(tp->dev, "TSO capability restored\n");
11692                        tg3_flag_set(tp, TSO_CAPABLE);
11693                }
11694        }
11695
11696        tg3_carrier_off(tp);
11697
11698        err = tg3_power_up(tp);
11699        if (err)
11700                return err;
11701
11702        tg3_full_lock(tp, 0);
11703
11704        tg3_disable_ints(tp);
11705        tg3_flag_clear(tp, INIT_COMPLETE);
11706
11707        tg3_full_unlock(tp);
11708
11709        err = tg3_start(tp,
11710                        !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11711                        true, true);
11712        if (err) {
11713                tg3_frob_aux_power(tp, false);
11714                pci_set_power_state(tp->pdev, PCI_D3hot);
11715        }
11716
11717        return err;
11718}
11719
11720static int tg3_close(struct net_device *dev)
11721{
11722        struct tg3 *tp = netdev_priv(dev);
11723
11724        if (tp->pcierr_recovery) {
11725                netdev_err(dev, "Failed to close device. PCI error recovery "
11726                           "in progress\n");
11727                return -EAGAIN;
11728        }
11729
11730        tg3_stop(tp);
11731
11732        if (pci_device_is_present(tp->pdev)) {
11733                tg3_power_down_prepare(tp);
11734
11735                tg3_carrier_off(tp);
11736        }
11737        return 0;
11738}
11739
11740static inline u64 get_stat64(tg3_stat64_t *val)
11741{
11742       return ((u64)val->high << 32) | ((u64)val->low);
11743}
11744
11745static u64 tg3_calc_crc_errors(struct tg3 *tp)
11746{
11747        struct tg3_hw_stats *hw_stats = tp->hw_stats;
11748
11749        if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11750            (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11751             tg3_asic_rev(tp) == ASIC_REV_5701)) {
11752                u32 val;
11753
11754                if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11755                        tg3_writephy(tp, MII_TG3_TEST1,
11756                                     val | MII_TG3_TEST1_CRC_EN);
11757                        tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11758                } else
11759                        val = 0;
11760
11761                tp->phy_crc_errors += val;
11762
11763                return tp->phy_crc_errors;
11764        }
11765
11766        return get_stat64(&hw_stats->rx_fcs_errors);
11767}
11768
11769#define ESTAT_ADD(member) \
11770        estats->member =        old_estats->member + \
11771                                get_stat64(&hw_stats->member)
11772
11773static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11774{
11775        struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11776        struct tg3_hw_stats *hw_stats = tp->hw_stats;
11777
11778        ESTAT_ADD(rx_octets);
11779        ESTAT_ADD(rx_fragments);
11780        ESTAT_ADD(rx_ucast_packets);
11781        ESTAT_ADD(rx_mcast_packets);
11782        ESTAT_ADD(rx_bcast_packets);
11783        ESTAT_ADD(rx_fcs_errors);
11784        ESTAT_ADD(rx_align_errors);
11785        ESTAT_ADD(rx_xon_pause_rcvd);
11786        ESTAT_ADD(rx_xoff_pause_rcvd);
11787        ESTAT_ADD(rx_mac_ctrl_rcvd);
11788        ESTAT_ADD(rx_xoff_entered);
11789        ESTAT_ADD(rx_frame_too_long_errors);
11790        ESTAT_ADD(rx_jabbers);
11791        ESTAT_ADD(rx_undersize_packets);
11792        ESTAT_ADD(rx_in_length_errors);
11793        ESTAT_ADD(rx_out_length_errors);
11794        ESTAT_ADD(rx_64_or_less_octet_packets);
11795        ESTAT_ADD(rx_65_to_127_octet_packets);
11796        ESTAT_ADD(rx_128_to_255_octet_packets);
11797        ESTAT_ADD(rx_256_to_511_octet_packets);
11798        ESTAT_ADD(rx_512_to_1023_octet_packets);
11799        ESTAT_ADD(rx_1024_to_1522_octet_packets);
11800        ESTAT_ADD(rx_1523_to_2047_octet_packets);
11801        ESTAT_ADD(rx_2048_to_4095_octet_packets);
11802        ESTAT_ADD(rx_4096_to_8191_octet_packets);
11803        ESTAT_ADD(rx_8192_to_9022_octet_packets);
11804
11805        ESTAT_ADD(tx_octets);
11806        ESTAT_ADD(tx_collisions);
11807        ESTAT_ADD(tx_xon_sent);
11808        ESTAT_ADD(tx_xoff_sent);
11809        ESTAT_ADD(tx_flow_control);
11810        ESTAT_ADD(tx_mac_errors);
11811        ESTAT_ADD(tx_single_collisions);
11812        ESTAT_ADD(tx_mult_collisions);
11813        ESTAT_ADD(tx_deferred);
11814        ESTAT_ADD(tx_excessive_collisions);
11815        ESTAT_ADD(tx_late_collisions);
11816        ESTAT_ADD(tx_collide_2times);
11817        ESTAT_ADD(tx_collide_3times);
11818        ESTAT_ADD(tx_collide_4times);
11819        ESTAT_ADD(tx_collide_5times);
11820        ESTAT_ADD(tx_collide_6times);
11821        ESTAT_ADD(tx_collide_7times);
11822        ESTAT_ADD(tx_collide_8times);
11823        ESTAT_ADD(tx_collide_9times);
11824        ESTAT_ADD(tx_collide_10times);
11825        ESTAT_ADD(tx_collide_11times);
11826        ESTAT_ADD(tx_collide_12times);
11827        ESTAT_ADD(tx_collide_13times);
11828        ESTAT_ADD(tx_collide_14times);
11829        ESTAT_ADD(tx_collide_15times);
11830        ESTAT_ADD(tx_ucast_packets);
11831        ESTAT_ADD(tx_mcast_packets);
11832        ESTAT_ADD(tx_bcast_packets);
11833        ESTAT_ADD(tx_carrier_sense_errors);
11834        ESTAT_ADD(tx_discards);
11835        ESTAT_ADD(tx_errors);
11836
11837        ESTAT_ADD(dma_writeq_full);
11838        ESTAT_ADD(dma_write_prioq_full);
11839        ESTAT_ADD(rxbds_empty);
11840        ESTAT_ADD(rx_discards);
11841        ESTAT_ADD(rx_errors);
11842        ESTAT_ADD(rx_threshold_hit);
11843
11844        ESTAT_ADD(dma_readq_full);
11845        ESTAT_ADD(dma_read_prioq_full);
11846        ESTAT_ADD(tx_comp_queue_full);
11847
11848        ESTAT_ADD(ring_set_send_prod_index);
11849        ESTAT_ADD(ring_status_update);
11850        ESTAT_ADD(nic_irqs);
11851        ESTAT_ADD(nic_avoided_irqs);
11852        ESTAT_ADD(nic_tx_threshold_hit);
11853
11854        ESTAT_ADD(mbuf_lwm_thresh_hit);
11855}
11856
11857static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11858{
11859        struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11860        struct tg3_hw_stats *hw_stats = tp->hw_stats;
11861
11862        stats->rx_packets = old_stats->rx_packets +
11863                get_stat64(&hw_stats->rx_ucast_packets) +
11864                get_stat64(&hw_stats->rx_mcast_packets) +
11865                get_stat64(&hw_stats->rx_bcast_packets);
11866
11867        stats->tx_packets = old_stats->tx_packets +
11868                get_stat64(&hw_stats->tx_ucast_packets) +
11869                get_stat64(&hw_stats->tx_mcast_packets) +
11870                get_stat64(&hw_stats->tx_bcast_packets);
11871
11872        stats->rx_bytes = old_stats->rx_bytes +
11873                get_stat64(&hw_stats->rx_octets);
11874        stats->tx_bytes = old_stats->tx_bytes +
11875                get_stat64(&hw_stats->tx_octets);
11876
11877        stats->rx_errors = old_stats->rx_errors +
11878                get_stat64(&hw_stats->rx_errors);
11879        stats->tx_errors = old_stats->tx_errors +
11880                get_stat64(&hw_stats->tx_errors) +
11881                get_stat64(&hw_stats->tx_mac_errors) +
11882                get_stat64(&hw_stats->tx_carrier_sense_errors) +
11883                get_stat64(&hw_stats->tx_discards);
11884
11885        stats->multicast = old_stats->multicast +
11886                get_stat64(&hw_stats->rx_mcast_packets);
11887        stats->collisions = old_stats->collisions +
11888                get_stat64(&hw_stats->tx_collisions);
11889
11890        stats->rx_length_errors = old_stats->rx_length_errors +
11891                get_stat64(&hw_stats->rx_frame_too_long_errors) +
11892                get_stat64(&hw_stats->rx_undersize_packets);
11893
11894        stats->rx_frame_errors = old_stats->rx_frame_errors +
11895                get_stat64(&hw_stats->rx_align_errors);
11896        stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11897                get_stat64(&hw_stats->tx_discards);
11898        stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11899                get_stat64(&hw_stats->tx_carrier_sense_errors);
11900
11901        stats->rx_crc_errors = old_stats->rx_crc_errors +
11902                tg3_calc_crc_errors(tp);
11903
11904        stats->rx_missed_errors = old_stats->rx_missed_errors +
11905                get_stat64(&hw_stats->rx_discards);
11906
11907        stats->rx_dropped = tp->rx_dropped;
11908        stats->tx_dropped = tp->tx_dropped;
11909}
11910
11911static int tg3_get_regs_len(struct net_device *dev)
11912{
11913        return TG3_REG_BLK_SIZE;
11914}
11915
11916static void tg3_get_regs(struct net_device *dev,
11917                struct ethtool_regs *regs, void *_p)
11918{
11919        struct tg3 *tp = netdev_priv(dev);
11920
11921        regs->version = 0;
11922
11923        memset(_p, 0, TG3_REG_BLK_SIZE);
11924
11925        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11926                return;
11927
11928        tg3_full_lock(tp, 0);
11929
11930        tg3_dump_legacy_regs(tp, (u32 *)_p);
11931
11932        tg3_full_unlock(tp);
11933}
11934
11935static int tg3_get_eeprom_len(struct net_device *dev)
11936{
11937        struct tg3 *tp = netdev_priv(dev);
11938
11939        return tp->nvram_size;
11940}
11941
11942static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11943{
11944        struct tg3 *tp = netdev_priv(dev);
11945        int ret, cpmu_restore = 0;
11946        u8  *pd;
11947        u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
11948        __be32 val;
11949
11950        if (tg3_flag(tp, NO_NVRAM))
11951                return -EINVAL;
11952
11953        offset = eeprom->offset;
11954        len = eeprom->len;
11955        eeprom->len = 0;
11956
11957        eeprom->magic = TG3_EEPROM_MAGIC;
11958
11959        /* Override clock, link aware and link idle modes */
11960        if (tg3_flag(tp, CPMU_PRESENT)) {
11961                cpmu_val = tr32(TG3_CPMU_CTRL);
11962                if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
11963                                CPMU_CTRL_LINK_IDLE_MODE)) {
11964                        tw32(TG3_CPMU_CTRL, cpmu_val &
11965                                            ~(CPMU_CTRL_LINK_AWARE_MODE |
11966                                             CPMU_CTRL_LINK_IDLE_MODE));
11967                        cpmu_restore = 1;
11968                }
11969        }
11970        tg3_override_clk(tp);
11971
11972        if (offset & 3) {
11973                /* adjustments to start on required 4 byte boundary */
11974                b_offset = offset & 3;
11975                b_count = 4 - b_offset;
11976                if (b_count > len) {
11977                        /* i.e. offset=1 len=2 */
11978                        b_count = len;
11979                }
11980                ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
11981                if (ret)
11982                        goto eeprom_done;
11983                memcpy(data, ((char *)&val) + b_offset, b_count);
11984                len -= b_count;
11985                offset += b_count;
11986                eeprom->len += b_count;
11987        }
11988
11989        /* read bytes up to the last 4 byte boundary */
11990        pd = &data[eeprom->len];
11991        for (i = 0; i < (len - (len & 3)); i += 4) {
11992                ret = tg3_nvram_read_be32(tp, offset + i, &val);
11993                if (ret) {
11994                        if (i)
11995                                i -= 4;
11996                        eeprom->len += i;
11997                        goto eeprom_done;
11998                }
11999                memcpy(pd + i, &val, 4);
12000                if (need_resched()) {
12001                        if (signal_pending(current)) {
12002                                eeprom->len += i;
12003                                ret = -EINTR;
12004                                goto eeprom_done;
12005                        }
12006                        cond_resched();
12007                }
12008        }
12009        eeprom->len += i;
12010
12011        if (len & 3) {
12012                /* read last bytes not ending on 4 byte boundary */
12013                pd = &data[eeprom->len];
12014                b_count = len & 3;
12015                b_offset = offset + len - b_count;
12016                ret = tg3_nvram_read_be32(tp, b_offset, &val);
12017                if (ret)
12018                        goto eeprom_done;
12019                memcpy(pd, &val, b_count);
12020                eeprom->len += b_count;
12021        }
12022        ret = 0;
12023
12024eeprom_done:
12025        /* Restore clock, link aware and link idle modes */
12026        tg3_restore_clk(tp);
12027        if (cpmu_restore)
12028                tw32(TG3_CPMU_CTRL, cpmu_val);
12029
12030        return ret;
12031}
12032
12033static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12034{
12035        struct tg3 *tp = netdev_priv(dev);
12036        int ret;
12037        u32 offset, len, b_offset, odd_len;
12038        u8 *buf;
12039        __be32 start = 0, end;
12040
12041        if (tg3_flag(tp, NO_NVRAM) ||
12042            eeprom->magic != TG3_EEPROM_MAGIC)
12043                return -EINVAL;
12044
12045        offset = eeprom->offset;
12046        len = eeprom->len;
12047
12048        if ((b_offset = (offset & 3))) {
12049                /* adjustments to start on required 4 byte boundary */
12050                ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12051                if (ret)
12052                        return ret;
12053                len += b_offset;
12054                offset &= ~3;
12055                if (len < 4)
12056                        len = 4;
12057        }
12058
12059        odd_len = 0;
12060        if (len & 3) {
12061                /* adjustments to end on required 4 byte boundary */
12062                odd_len = 1;
12063                len = (len + 3) & ~3;
12064                ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12065                if (ret)
12066                        return ret;
12067        }
12068
12069        buf = data;
12070        if (b_offset || odd_len) {
12071                buf = kmalloc(len, GFP_KERNEL);
12072                if (!buf)
12073                        return -ENOMEM;
12074                if (b_offset)
12075                        memcpy(buf, &start, 4);
12076                if (odd_len)
12077                        memcpy(buf+len-4, &end, 4);
12078                memcpy(buf + b_offset, data, eeprom->len);
12079        }
12080
12081        ret = tg3_nvram_write_block(tp, offset, len, buf);
12082
12083        if (buf != data)
12084                kfree(buf);
12085
12086        return ret;
12087}
12088
12089static int tg3_get_link_ksettings(struct net_device *dev,
12090                                  struct ethtool_link_ksettings *cmd)
12091{
12092        struct tg3 *tp = netdev_priv(dev);
12093        u32 supported, advertising;
12094
12095        if (tg3_flag(tp, USE_PHYLIB)) {
12096                struct phy_device *phydev;
12097                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12098                        return -EAGAIN;
12099                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12100                phy_ethtool_ksettings_get(phydev, cmd);
12101
12102                return 0;
12103        }
12104
12105        supported = (SUPPORTED_Autoneg);
12106
12107        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12108                supported |= (SUPPORTED_1000baseT_Half |
12109                              SUPPORTED_1000baseT_Full);
12110
12111        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12112                supported |= (SUPPORTED_100baseT_Half |
12113                              SUPPORTED_100baseT_Full |
12114                              SUPPORTED_10baseT_Half |
12115                              SUPPORTED_10baseT_Full |
12116                              SUPPORTED_TP);
12117                cmd->base.port = PORT_TP;
12118        } else {
12119                supported |= SUPPORTED_FIBRE;
12120                cmd->base.port = PORT_FIBRE;
12121        }
12122        ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12123                                                supported);
12124
12125        advertising = tp->link_config.advertising;
12126        if (tg3_flag(tp, PAUSE_AUTONEG)) {
12127                if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12128                        if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12129                                advertising |= ADVERTISED_Pause;
12130                        } else {
12131                                advertising |= ADVERTISED_Pause |
12132                                        ADVERTISED_Asym_Pause;
12133                        }
12134                } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12135                        advertising |= ADVERTISED_Asym_Pause;
12136                }
12137        }
12138        ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12139                                                advertising);
12140
12141        if (netif_running(dev) && tp->link_up) {
12142                cmd->base.speed = tp->link_config.active_speed;
12143                cmd->base.duplex = tp->link_config.active_duplex;
12144                ethtool_convert_legacy_u32_to_link_mode(
12145                        cmd->link_modes.lp_advertising,
12146                        tp->link_config.rmt_adv);
12147
12148                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12149                        if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12150                                cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12151                        else
12152                                cmd->base.eth_tp_mdix = ETH_TP_MDI;
12153                }
12154        } else {
12155                cmd->base.speed = SPEED_UNKNOWN;
12156                cmd->base.duplex = DUPLEX_UNKNOWN;
12157                cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12158        }
12159        cmd->base.phy_address = tp->phy_addr;
12160        cmd->base.autoneg = tp->link_config.autoneg;
12161        return 0;
12162}
12163
12164static int tg3_set_link_ksettings(struct net_device *dev,
12165                                  const struct ethtool_link_ksettings *cmd)
12166{
12167        struct tg3 *tp = netdev_priv(dev);
12168        u32 speed = cmd->base.speed;
12169        u32 advertising;
12170
12171        if (tg3_flag(tp, USE_PHYLIB)) {
12172                struct phy_device *phydev;
12173                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12174                        return -EAGAIN;
12175                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12176                return phy_ethtool_ksettings_set(phydev, cmd);
12177        }
12178
12179        if (cmd->base.autoneg != AUTONEG_ENABLE &&
12180            cmd->base.autoneg != AUTONEG_DISABLE)
12181                return -EINVAL;
12182
12183        if (cmd->base.autoneg == AUTONEG_DISABLE &&
12184            cmd->base.duplex != DUPLEX_FULL &&
12185            cmd->base.duplex != DUPLEX_HALF)
12186                return -EINVAL;
12187
12188        ethtool_convert_link_mode_to_legacy_u32(&advertising,
12189                                                cmd->link_modes.advertising);
12190
12191        if (cmd->base.autoneg == AUTONEG_ENABLE) {
12192                u32 mask = ADVERTISED_Autoneg |
12193                           ADVERTISED_Pause |
12194                           ADVERTISED_Asym_Pause;
12195
12196                if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12197                        mask |= ADVERTISED_1000baseT_Half |
12198                                ADVERTISED_1000baseT_Full;
12199
12200                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12201                        mask |= ADVERTISED_100baseT_Half |
12202                                ADVERTISED_100baseT_Full |
12203                                ADVERTISED_10baseT_Half |
12204                                ADVERTISED_10baseT_Full |
12205                                ADVERTISED_TP;
12206                else
12207                        mask |= ADVERTISED_FIBRE;
12208
12209                if (advertising & ~mask)
12210                        return -EINVAL;
12211
12212                mask &= (ADVERTISED_1000baseT_Half |
12213                         ADVERTISED_1000baseT_Full |
12214                         ADVERTISED_100baseT_Half |
12215                         ADVERTISED_100baseT_Full |
12216                         ADVERTISED_10baseT_Half |
12217                         ADVERTISED_10baseT_Full);
12218
12219                advertising &= mask;
12220        } else {
12221                if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12222                        if (speed != SPEED_1000)
12223                                return -EINVAL;
12224
12225                        if (cmd->base.duplex != DUPLEX_FULL)
12226                                return -EINVAL;
12227                } else {
12228                        if (speed != SPEED_100 &&
12229                            speed != SPEED_10)
12230                                return -EINVAL;
12231                }
12232        }
12233
12234        tg3_full_lock(tp, 0);
12235
12236        tp->link_config.autoneg = cmd->base.autoneg;
12237        if (cmd->base.autoneg == AUTONEG_ENABLE) {
12238                tp->link_config.advertising = (advertising |
12239                                              ADVERTISED_Autoneg);
12240                tp->link_config.speed = SPEED_UNKNOWN;
12241                tp->link_config.duplex = DUPLEX_UNKNOWN;
12242        } else {
12243                tp->link_config.advertising = 0;
12244                tp->link_config.speed = speed;
12245                tp->link_config.duplex = cmd->base.duplex;
12246        }
12247
12248        tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12249
12250        tg3_warn_mgmt_link_flap(tp);
12251
12252        if (netif_running(dev))
12253                tg3_setup_phy(tp, true);
12254
12255        tg3_full_unlock(tp);
12256
12257        return 0;
12258}
12259
12260static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12261{
12262        struct tg3 *tp = netdev_priv(dev);
12263
12264        strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12265        strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
12266        strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12267        strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12268}
12269
12270static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12271{
12272        struct tg3 *tp = netdev_priv(dev);
12273
12274        if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12275                wol->supported = WAKE_MAGIC;
12276        else
12277                wol->supported = 0;
12278        wol->wolopts = 0;
12279        if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12280                wol->wolopts = WAKE_MAGIC;
12281        memset(&wol->sopass, 0, sizeof(wol->sopass));
12282}
12283
12284static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12285{
12286        struct tg3 *tp = netdev_priv(dev);
12287        struct device *dp = &tp->pdev->dev;
12288
12289        if (wol->wolopts & ~WAKE_MAGIC)
12290                return -EINVAL;
12291        if ((wol->wolopts & WAKE_MAGIC) &&
12292            !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12293                return -EINVAL;
12294
12295        device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12296
12297        if (device_may_wakeup(dp))
12298                tg3_flag_set(tp, WOL_ENABLE);
12299        else
12300                tg3_flag_clear(tp, WOL_ENABLE);
12301
12302        return 0;
12303}
12304
12305static u32 tg3_get_msglevel(struct net_device *dev)
12306{
12307        struct tg3 *tp = netdev_priv(dev);
12308        return tp->msg_enable;
12309}
12310
12311static void tg3_set_msglevel(struct net_device *dev, u32 value)
12312{
12313        struct tg3 *tp = netdev_priv(dev);
12314        tp->msg_enable = value;
12315}
12316
12317static int tg3_nway_reset(struct net_device *dev)
12318{
12319        struct tg3 *tp = netdev_priv(dev);
12320        int r;
12321
12322        if (!netif_running(dev))
12323                return -EAGAIN;
12324
12325        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12326                return -EINVAL;
12327
12328        tg3_warn_mgmt_link_flap(tp);
12329
12330        if (tg3_flag(tp, USE_PHYLIB)) {
12331                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12332                        return -EAGAIN;
12333                r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12334        } else {
12335                u32 bmcr;
12336
12337                spin_lock_bh(&tp->lock);
12338                r = -EINVAL;
12339                tg3_readphy(tp, MII_BMCR, &bmcr);
12340                if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12341                    ((bmcr & BMCR_ANENABLE) ||
12342                     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12343                        tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12344                                                   BMCR_ANENABLE);
12345                        r = 0;
12346                }
12347                spin_unlock_bh(&tp->lock);
12348        }
12349
12350        return r;
12351}
12352
12353static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12354{
12355        struct tg3 *tp = netdev_priv(dev);
12356
12357        ering->rx_max_pending = tp->rx_std_ring_mask;
12358        if (tg3_flag(tp, JUMBO_RING_ENABLE))
12359                ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12360        else
12361                ering->rx_jumbo_max_pending = 0;
12362
12363        ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12364
12365        ering->rx_pending = tp->rx_pending;
12366        if (tg3_flag(tp, JUMBO_RING_ENABLE))
12367                ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12368        else
12369                ering->rx_jumbo_pending = 0;
12370
12371        ering->tx_pending = tp->napi[0].tx_pending;
12372}
12373
12374static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12375{
12376        struct tg3 *tp = netdev_priv(dev);
12377        int i, irq_sync = 0, err = 0;
12378
12379        if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12380            (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12381            (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12382            (ering->tx_pending <= MAX_SKB_FRAGS) ||
12383            (tg3_flag(tp, TSO_BUG) &&
12384             (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12385                return -EINVAL;
12386
12387        if (netif_running(dev)) {
12388                tg3_phy_stop(tp);
12389                tg3_netif_stop(tp);
12390                irq_sync = 1;
12391        }
12392
12393        tg3_full_lock(tp, irq_sync);
12394
12395        tp->rx_pending = ering->rx_pending;
12396
12397        if (tg3_flag(tp, MAX_RXPEND_64) &&
12398            tp->rx_pending > 63)
12399                tp->rx_pending = 63;
12400
12401        if (tg3_flag(tp, JUMBO_RING_ENABLE))
12402                tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12403
12404        for (i = 0; i < tp->irq_max; i++)
12405                tp->napi[i].tx_pending = ering->tx_pending;
12406
12407        if (netif_running(dev)) {
12408                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12409                err = tg3_restart_hw(tp, false);
12410                if (!err)
12411                        tg3_netif_start(tp);
12412        }
12413
12414        tg3_full_unlock(tp);
12415
12416        if (irq_sync && !err)
12417                tg3_phy_start(tp);
12418
12419        return err;
12420}
12421
12422static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12423{
12424        struct tg3 *tp = netdev_priv(dev);
12425
12426        epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12427
12428        if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12429                epause->rx_pause = 1;
12430        else
12431                epause->rx_pause = 0;
12432
12433        if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12434                epause->tx_pause = 1;
12435        else
12436                epause->tx_pause = 0;
12437}
12438
12439static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12440{
12441        struct tg3 *tp = netdev_priv(dev);
12442        int err = 0;
12443
12444        if (tp->link_config.autoneg == AUTONEG_ENABLE)
12445                tg3_warn_mgmt_link_flap(tp);
12446
12447        if (tg3_flag(tp, USE_PHYLIB)) {
12448                u32 newadv;
12449                struct phy_device *phydev;
12450
12451                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12452
12453                if (!(phydev->supported & SUPPORTED_Pause) ||
12454                    (!(phydev->supported & SUPPORTED_Asym_Pause) &&
12455                     (epause->rx_pause != epause->tx_pause)))
12456                        return -EINVAL;
12457
12458                tp->link_config.flowctrl = 0;
12459                if (epause->rx_pause) {
12460                        tp->link_config.flowctrl |= FLOW_CTRL_RX;
12461
12462                        if (epause->tx_pause) {
12463                                tp->link_config.flowctrl |= FLOW_CTRL_TX;
12464                                newadv = ADVERTISED_Pause;
12465                        } else
12466                                newadv = ADVERTISED_Pause |
12467                                         ADVERTISED_Asym_Pause;
12468                } else if (epause->tx_pause) {
12469                        tp->link_config.flowctrl |= FLOW_CTRL_TX;
12470                        newadv = ADVERTISED_Asym_Pause;
12471                } else
12472                        newadv = 0;
12473
12474                if (epause->autoneg)
12475                        tg3_flag_set(tp, PAUSE_AUTONEG);
12476                else
12477                        tg3_flag_clear(tp, PAUSE_AUTONEG);
12478
12479                if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12480                        u32 oldadv = phydev->advertising &
12481                                     (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
12482                        if (oldadv != newadv) {
12483                                phydev->advertising &=
12484                                        ~(ADVERTISED_Pause |
12485                                          ADVERTISED_Asym_Pause);
12486                                phydev->advertising |= newadv;
12487                                if (phydev->autoneg) {
12488                                        /*
12489                                         * Always renegotiate the link to
12490                                         * inform our link partner of our
12491                                         * flow control settings, even if the
12492                                         * flow control is forced.  Let
12493                                         * tg3_adjust_link() do the final
12494                                         * flow control setup.
12495                                         */
12496                                        return phy_start_aneg(phydev);
12497                                }
12498                        }
12499
12500                        if (!epause->autoneg)
12501                                tg3_setup_flow_control(tp, 0, 0);
12502                } else {
12503                        tp->link_config.advertising &=
12504                                        ~(ADVERTISED_Pause |
12505                                          ADVERTISED_Asym_Pause);
12506                        tp->link_config.advertising |= newadv;
12507                }
12508        } else {
12509                int irq_sync = 0;
12510
12511                if (netif_running(dev)) {
12512                        tg3_netif_stop(tp);
12513                        irq_sync = 1;
12514                }
12515
12516                tg3_full_lock(tp, irq_sync);
12517
12518                if (epause->autoneg)
12519                        tg3_flag_set(tp, PAUSE_AUTONEG);
12520                else
12521                        tg3_flag_clear(tp, PAUSE_AUTONEG);
12522                if (epause->rx_pause)
12523                        tp->link_config.flowctrl |= FLOW_CTRL_RX;
12524                else
12525                        tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12526                if (epause->tx_pause)
12527                        tp->link_config.flowctrl |= FLOW_CTRL_TX;
12528                else
12529                        tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12530
12531                if (netif_running(dev)) {
12532                        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12533                        err = tg3_restart_hw(tp, false);
12534                        if (!err)
12535                                tg3_netif_start(tp);
12536                }
12537
12538                tg3_full_unlock(tp);
12539        }
12540
12541        tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12542
12543        return err;
12544}
12545
12546static int tg3_get_sset_count(struct net_device *dev, int sset)
12547{
12548        switch (sset) {
12549        case ETH_SS_TEST:
12550                return TG3_NUM_TEST;
12551        case ETH_SS_STATS:
12552                return TG3_NUM_STATS;
12553        default:
12554                return -EOPNOTSUPP;
12555        }
12556}
12557
12558static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12559                         u32 *rules __always_unused)
12560{
12561        struct tg3 *tp = netdev_priv(dev);
12562
12563        if (!tg3_flag(tp, SUPPORT_MSIX))
12564                return -EOPNOTSUPP;
12565
12566        switch (info->cmd) {
12567        case ETHTOOL_GRXRINGS:
12568                if (netif_running(tp->dev))
12569                        info->data = tp->rxq_cnt;
12570                else {
12571                        info->data = num_online_cpus();
12572                        if (info->data > TG3_RSS_MAX_NUM_QS)
12573                                info->data = TG3_RSS_MAX_NUM_QS;
12574                }
12575
12576                return 0;
12577
12578        default:
12579                return -EOPNOTSUPP;
12580        }
12581}
12582
12583static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12584{
12585        u32 size = 0;
12586        struct tg3 *tp = netdev_priv(dev);
12587
12588        if (tg3_flag(tp, SUPPORT_MSIX))
12589                size = TG3_RSS_INDIR_TBL_SIZE;
12590
12591        return size;
12592}
12593
12594static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12595{
12596        struct tg3 *tp = netdev_priv(dev);
12597        int i;
12598
12599        if (hfunc)
12600                *hfunc = ETH_RSS_HASH_TOP;
12601        if (!indir)
12602                return 0;
12603
12604        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12605                indir[i] = tp->rss_ind_tbl[i];
12606
12607        return 0;
12608}
12609
12610static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12611                        const u8 hfunc)
12612{
12613        struct tg3 *tp = netdev_priv(dev);
12614        size_t i;
12615
12616        /* We require at least one supported parameter to be changed and no
12617         * change in any of the unsupported parameters
12618         */
12619        if (key ||
12620            (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12621                return -EOPNOTSUPP;
12622
12623        if (!indir)
12624                return 0;
12625
12626        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12627                tp->rss_ind_tbl[i] = indir[i];
12628
12629        if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12630                return 0;
12631
12632        /* It is legal to write the indirection
12633         * table while the device is running.
12634         */
12635        tg3_full_lock(tp, 0);
12636        tg3_rss_write_indir_tbl(tp);
12637        tg3_full_unlock(tp);
12638
12639        return 0;
12640}
12641
12642static void tg3_get_channels(struct net_device *dev,
12643                             struct ethtool_channels *channel)
12644{
12645        struct tg3 *tp = netdev_priv(dev);
12646        u32 deflt_qs = netif_get_num_default_rss_queues();
12647
12648        channel->max_rx = tp->rxq_max;
12649        channel->max_tx = tp->txq_max;
12650
12651        if (netif_running(dev)) {
12652                channel->rx_count = tp->rxq_cnt;
12653                channel->tx_count = tp->txq_cnt;
12654        } else {
12655                if (tp->rxq_req)
12656                        channel->rx_count = tp->rxq_req;
12657                else
12658                        channel->rx_count = min(deflt_qs, tp->rxq_max);
12659
12660                if (tp->txq_req)
12661                        channel->tx_count = tp->txq_req;
12662                else
12663                        channel->tx_count = min(deflt_qs, tp->txq_max);
12664        }
12665}
12666
12667static int tg3_set_channels(struct net_device *dev,
12668                            struct ethtool_channels *channel)
12669{
12670        struct tg3 *tp = netdev_priv(dev);
12671
12672        if (!tg3_flag(tp, SUPPORT_MSIX))
12673                return -EOPNOTSUPP;
12674
12675        if (channel->rx_count > tp->rxq_max ||
12676            channel->tx_count > tp->txq_max)
12677                return -EINVAL;
12678
12679        tp->rxq_req = channel->rx_count;
12680        tp->txq_req = channel->tx_count;
12681
12682        if (!netif_running(dev))
12683                return 0;
12684
12685        tg3_stop(tp);
12686
12687        tg3_carrier_off(tp);
12688
12689        tg3_start(tp, true, false, false);
12690
12691        return 0;
12692}
12693
12694static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12695{
12696        switch (stringset) {
12697        case ETH_SS_STATS:
12698                memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12699                break;
12700        case ETH_SS_TEST:
12701                memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12702                break;
12703        default:
12704                WARN_ON(1);     /* we need a WARN() */
12705                break;
12706        }
12707}
12708
12709static int tg3_set_phys_id(struct net_device *dev,
12710                            enum ethtool_phys_id_state state)
12711{
12712        struct tg3 *tp = netdev_priv(dev);
12713
12714        if (!netif_running(tp->dev))
12715                return -EAGAIN;
12716
12717        switch (state) {
12718        case ETHTOOL_ID_ACTIVE:
12719                return 1;       /* cycle on/off once per second */
12720
12721        case ETHTOOL_ID_ON:
12722                tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12723                     LED_CTRL_1000MBPS_ON |
12724                     LED_CTRL_100MBPS_ON |
12725                     LED_CTRL_10MBPS_ON |
12726                     LED_CTRL_TRAFFIC_OVERRIDE |
12727                     LED_CTRL_TRAFFIC_BLINK |
12728                     LED_CTRL_TRAFFIC_LED);
12729                break;
12730
12731        case ETHTOOL_ID_OFF:
12732                tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12733                     LED_CTRL_TRAFFIC_OVERRIDE);
12734                break;
12735
12736        case ETHTOOL_ID_INACTIVE:
12737                tw32(MAC_LED_CTRL, tp->led_ctrl);
12738                break;
12739        }
12740
12741        return 0;
12742}
12743
12744static void tg3_get_ethtool_stats(struct net_device *dev,
12745                                   struct ethtool_stats *estats, u64 *tmp_stats)
12746{
12747        struct tg3 *tp = netdev_priv(dev);
12748
12749        if (tp->hw_stats)
12750                tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12751        else
12752                memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12753}
12754
12755static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
12756{
12757        int i;
12758        __be32 *buf;
12759        u32 offset = 0, len = 0;
12760        u32 magic, val;
12761
12762        if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12763                return NULL;
12764
12765        if (magic == TG3_EEPROM_MAGIC) {
12766                for (offset = TG3_NVM_DIR_START;
12767                     offset < TG3_NVM_DIR_END;
12768                     offset += TG3_NVM_DIRENT_SIZE) {
12769                        if (tg3_nvram_read(tp, offset, &val))
12770                                return NULL;
12771
12772                        if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12773                            TG3_NVM_DIRTYPE_EXTVPD)
12774                                break;
12775                }
12776
12777                if (offset != TG3_NVM_DIR_END) {
12778                        len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12779                        if (tg3_nvram_read(tp, offset + 4, &offset))
12780                                return NULL;
12781
12782                        offset = tg3_nvram_logical_addr(tp, offset);
12783                }
12784        }
12785
12786        if (!offset || !len) {
12787                offset = TG3_NVM_VPD_OFF;
12788                len = TG3_NVM_VPD_LEN;
12789        }
12790
12791        buf = kmalloc(len, GFP_KERNEL);
12792        if (buf == NULL)
12793                return NULL;
12794
12795        if (magic == TG3_EEPROM_MAGIC) {
12796                for (i = 0; i < len; i += 4) {
12797                        /* The data is in little-endian format in NVRAM.
12798                         * Use the big-endian read routines to preserve
12799                         * the byte order as it exists in NVRAM.
12800                         */
12801                        if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12802                                goto error;
12803                }
12804        } else {
12805                u8 *ptr;
12806                ssize_t cnt;
12807                unsigned int pos = 0;
12808
12809                ptr = (u8 *)&buf[0];
12810                for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
12811                        cnt = pci_read_vpd(tp->pdev, pos,
12812                                           len - pos, ptr);
12813                        if (cnt == -ETIMEDOUT || cnt == -EINTR)
12814                                cnt = 0;
12815                        else if (cnt < 0)
12816                                goto error;
12817                }
12818                if (pos != len)
12819                        goto error;
12820        }
12821
12822        *vpdlen = len;
12823
12824        return buf;
12825
12826error:
12827        kfree(buf);
12828        return NULL;
12829}
12830
12831#define NVRAM_TEST_SIZE 0x100
12832#define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12833#define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12834#define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12835#define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12836#define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12837#define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12838#define NVRAM_SELFBOOT_HW_SIZE 0x20
12839#define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12840
12841static int tg3_test_nvram(struct tg3 *tp)
12842{
12843        u32 csum, magic, len;
12844        __be32 *buf;
12845        int i, j, k, err = 0, size;
12846
12847        if (tg3_flag(tp, NO_NVRAM))
12848                return 0;
12849
12850        if (tg3_nvram_read(tp, 0, &magic) != 0)
12851                return -EIO;
12852
12853        if (magic == TG3_EEPROM_MAGIC)
12854                size = NVRAM_TEST_SIZE;
12855        else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12856                if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12857                    TG3_EEPROM_SB_FORMAT_1) {
12858                        switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12859                        case TG3_EEPROM_SB_REVISION_0:
12860                                size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12861                                break;
12862                        case TG3_EEPROM_SB_REVISION_2:
12863                                size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12864                                break;
12865                        case TG3_EEPROM_SB_REVISION_3:
12866                                size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12867                                break;
12868                        case TG3_EEPROM_SB_REVISION_4:
12869                                size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12870                                break;
12871                        case TG3_EEPROM_SB_REVISION_5:
12872                                size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12873                                break;
12874                        case TG3_EEPROM_SB_REVISION_6:
12875                                size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12876                                break;
12877                        default:
12878                                return -EIO;
12879                        }
12880                } else
12881                        return 0;
12882        } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12883                size = NVRAM_SELFBOOT_HW_SIZE;
12884        else
12885                return -EIO;
12886
12887        buf = kmalloc(size, GFP_KERNEL);
12888        if (buf == NULL)
12889                return -ENOMEM;
12890
12891        err = -EIO;
12892        for (i = 0, j = 0; i < size; i += 4, j++) {
12893                err = tg3_nvram_read_be32(tp, i, &buf[j]);
12894                if (err)
12895                        break;
12896        }
12897        if (i < size)
12898                goto out;
12899
12900        /* Selfboot format */
12901        magic = be32_to_cpu(buf[0]);
12902        if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12903            TG3_EEPROM_MAGIC_FW) {
12904                u8 *buf8 = (u8 *) buf, csum8 = 0;
12905
12906                if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12907                    TG3_EEPROM_SB_REVISION_2) {
12908                        /* For rev 2, the csum doesn't include the MBA. */
12909                        for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12910                                csum8 += buf8[i];
12911                        for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12912                                csum8 += buf8[i];
12913                } else {
12914                        for (i = 0; i < size; i++)
12915                                csum8 += buf8[i];
12916                }
12917
12918                if (csum8 == 0) {
12919                        err = 0;
12920                        goto out;
12921                }
12922
12923                err = -EIO;
12924                goto out;
12925        }
12926
12927        if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12928            TG3_EEPROM_MAGIC_HW) {
12929                u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12930                u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12931                u8 *buf8 = (u8 *) buf;
12932
12933                /* Separate the parity bits and the data bytes.  */
12934                for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12935                        if ((i == 0) || (i == 8)) {
12936                                int l;
12937                                u8 msk;
12938
12939                                for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12940                                        parity[k++] = buf8[i] & msk;
12941                                i++;
12942                        } else if (i == 16) {
12943                                int l;
12944                                u8 msk;
12945
12946                                for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12947                                        parity[k++] = buf8[i] & msk;
12948                                i++;
12949
12950                                for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12951                                        parity[k++] = buf8[i] & msk;
12952                                i++;
12953                        }
12954                        data[j++] = buf8[i];
12955                }
12956
12957                err = -EIO;
12958                for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12959                        u8 hw8 = hweight8(data[i]);
12960
12961                        if ((hw8 & 0x1) && parity[i])
12962                                goto out;
12963                        else if (!(hw8 & 0x1) && !parity[i])
12964                                goto out;
12965                }
12966                err = 0;
12967                goto out;
12968        }
12969
12970        err = -EIO;
12971
12972        /* Bootstrap checksum at offset 0x10 */
12973        csum = calc_crc((unsigned char *) buf, 0x10);
12974        if (csum != le32_to_cpu(buf[0x10/4]))
12975                goto out;
12976
12977        /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
12978        csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
12979        if (csum != le32_to_cpu(buf[0xfc/4]))
12980                goto out;
12981
12982        kfree(buf);
12983
12984        buf = tg3_vpd_readblock(tp, &len);
12985        if (!buf)
12986                return -ENOMEM;
12987
12988        i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
12989        if (i > 0) {
12990                j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
12991                if (j < 0)
12992                        goto out;
12993
12994                if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
12995                        goto out;
12996
12997                i += PCI_VPD_LRDT_TAG_SIZE;
12998                j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
12999                                              PCI_VPD_RO_KEYWORD_CHKSUM);
13000                if (j > 0) {
13001                        u8 csum8 = 0;
13002
13003                        j += PCI_VPD_INFO_FLD_HDR_SIZE;
13004
13005                        for (i = 0; i <= j; i++)
13006                                csum8 += ((u8 *)buf)[i];
13007
13008                        if (csum8)
13009                                goto out;
13010                }
13011        }
13012
13013        err = 0;
13014
13015out:
13016        kfree(buf);
13017        return err;
13018}
13019
13020#define TG3_SERDES_TIMEOUT_SEC  2
13021#define TG3_COPPER_TIMEOUT_SEC  6
13022
13023static int tg3_test_link(struct tg3 *tp)
13024{
13025        int i, max;
13026
13027        if (!netif_running(tp->dev))
13028                return -ENODEV;
13029
13030        if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13031                max = TG3_SERDES_TIMEOUT_SEC;
13032        else
13033                max = TG3_COPPER_TIMEOUT_SEC;
13034
13035        for (i = 0; i < max; i++) {
13036                if (tp->link_up)
13037                        return 0;
13038
13039                if (msleep_interruptible(1000))
13040                        break;
13041        }
13042
13043        return -EIO;
13044}
13045
13046/* Only test the commonly used registers */
13047static int tg3_test_registers(struct tg3 *tp)
13048{
13049        int i, is_5705, is_5750;
13050        u32 offset, read_mask, write_mask, val, save_val, read_val;
13051        static struct {
13052                u16 offset;
13053                u16 flags;
13054#define TG3_FL_5705     0x1
13055#define TG3_FL_NOT_5705 0x2
13056#define TG3_FL_NOT_5788 0x4
13057#define TG3_FL_NOT_5750 0x8
13058                u32 read_mask;
13059                u32 write_mask;
13060        } reg_tbl[] = {
13061                /* MAC Control Registers */
13062                { MAC_MODE, TG3_FL_NOT_5705,
13063                        0x00000000, 0x00ef6f8c },
13064                { MAC_MODE, TG3_FL_5705,
13065                        0x00000000, 0x01ef6b8c },
13066                { MAC_STATUS, TG3_FL_NOT_5705,
13067                        0x03800107, 0x00000000 },
13068                { MAC_STATUS, TG3_FL_5705,
13069                        0x03800100, 0x00000000 },
13070                { MAC_ADDR_0_HIGH, 0x0000,
13071                        0x00000000, 0x0000ffff },
13072                { MAC_ADDR_0_LOW, 0x0000,
13073                        0x00000000, 0xffffffff },
13074                { MAC_RX_MTU_SIZE, 0x0000,
13075                        0x00000000, 0x0000ffff },
13076                { MAC_TX_MODE, 0x0000,
13077                        0x00000000, 0x00000070 },
13078                { MAC_TX_LENGTHS, 0x0000,
13079                        0x00000000, 0x00003fff },
13080                { MAC_RX_MODE, TG3_FL_NOT_5705,
13081                        0x00000000, 0x000007fc },
13082                { MAC_RX_MODE, TG3_FL_5705,
13083                        0x00000000, 0x000007dc },
13084                { MAC_HASH_REG_0, 0x0000,
13085                        0x00000000, 0xffffffff },
13086                { MAC_HASH_REG_1, 0x0000,
13087                        0x00000000, 0xffffffff },
13088                { MAC_HASH_REG_2, 0x0000,
13089                        0x00000000, 0xffffffff },
13090                { MAC_HASH_REG_3, 0x0000,
13091                        0x00000000, 0xffffffff },
13092
13093                /* Receive Data and Receive BD Initiator Control Registers. */
13094                { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13095                        0x00000000, 0xffffffff },
13096                { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13097                        0x00000000, 0xffffffff },
13098                { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13099                        0x00000000, 0x00000003 },
13100                { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13101                        0x00000000, 0xffffffff },
13102                { RCVDBDI_STD_BD+0, 0x0000,
13103                        0x00000000, 0xffffffff },
13104                { RCVDBDI_STD_BD+4, 0x0000,
13105                        0x00000000, 0xffffffff },
13106                { RCVDBDI_STD_BD+8, 0x0000,
13107                        0x00000000, 0xffff0002 },
13108                { RCVDBDI_STD_BD+0xc, 0x0000,
13109                        0x00000000, 0xffffffff },
13110
13111                /* Receive BD Initiator Control Registers. */
13112                { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13113                        0x00000000, 0xffffffff },
13114                { RCVBDI_STD_THRESH, TG3_FL_5705,
13115                        0x00000000, 0x000003ff },
13116                { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13117                        0x00000000, 0xffffffff },
13118
13119                /* Host Coalescing Control Registers. */
13120                { HOSTCC_MODE, TG3_FL_NOT_5705,
13121                        0x00000000, 0x00000004 },
13122                { HOSTCC_MODE, TG3_FL_5705,
13123                        0x00000000, 0x000000f6 },
13124                { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13125                        0x00000000, 0xffffffff },
13126                { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13127                        0x00000000, 0x000003ff },
13128                { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13129                        0x00000000, 0xffffffff },
13130                { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13131                        0x00000000, 0x000003ff },
13132                { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13133                        0x00000000, 0xffffffff },
13134                { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13135                        0x00000000, 0x000000ff },
13136                { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13137                        0x00000000, 0xffffffff },
13138                { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13139                        0x00000000, 0x000000ff },
13140                { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13141                        0x00000000, 0xffffffff },
13142                { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13143                        0x00000000, 0xffffffff },
13144                { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13145                        0x00000000, 0xffffffff },
13146                { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13147                        0x00000000, 0x000000ff },
13148                { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13149                        0x00000000, 0xffffffff },
13150                { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13151                        0x00000000, 0x000000ff },
13152                { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13153                        0x00000000, 0xffffffff },
13154                { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13155                        0x00000000, 0xffffffff },
13156                { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13157                        0x00000000, 0xffffffff },
13158                { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13159                        0x00000000, 0xffffffff },
13160                { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13161                        0x00000000, 0xffffffff },
13162                { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13163                        0xffffffff, 0x00000000 },
13164                { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13165                        0xffffffff, 0x00000000 },
13166
13167                /* Buffer Manager Control Registers. */
13168                { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13169                        0x00000000, 0x007fff80 },
13170                { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13171                        0x00000000, 0x007fffff },
13172                { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13173                        0x00000000, 0x0000003f },
13174                { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13175                        0x00000000, 0x000001ff },
13176                { BUFMGR_MB_HIGH_WATER, 0x0000,
13177                        0x00000000, 0x000001ff },
13178                { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13179                        0xffffffff, 0x00000000 },
13180                { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13181                        0xffffffff, 0x00000000 },
13182
13183                /* Mailbox Registers */
13184                { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13185                        0x00000000, 0x000001ff },
13186                { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13187                        0x00000000, 0x000001ff },
13188                { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13189                        0x00000000, 0x000007ff },
13190                { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13191                        0x00000000, 0x000001ff },
13192
13193                { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13194        };
13195
13196        is_5705 = is_5750 = 0;
13197        if (tg3_flag(tp, 5705_PLUS)) {
13198                is_5705 = 1;
13199                if (tg3_flag(tp, 5750_PLUS))
13200                        is_5750 = 1;
13201        }
13202
13203        for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13204                if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13205                        continue;
13206
13207                if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13208                        continue;
13209
13210                if (tg3_flag(tp, IS_5788) &&
13211                    (reg_tbl[i].flags & TG3_FL_NOT_5788))
13212                        continue;
13213
13214                if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13215                        continue;
13216
13217                offset = (u32) reg_tbl[i].offset;
13218                read_mask = reg_tbl[i].read_mask;
13219                write_mask = reg_tbl[i].write_mask;
13220
13221                /* Save the original register content */
13222                save_val = tr32(offset);
13223
13224                /* Determine the read-only value. */
13225                read_val = save_val & read_mask;
13226
13227                /* Write zero to the register, then make sure the read-only bits
13228                 * are not changed and the read/write bits are all zeros.
13229                 */
13230                tw32(offset, 0);
13231
13232                val = tr32(offset);
13233
13234                /* Test the read-only and read/write bits. */
13235                if (((val & read_mask) != read_val) || (val & write_mask))
13236                        goto out;
13237
13238                /* Write ones to all the bits defined by RdMask and WrMask, then
13239                 * make sure the read-only bits are not changed and the
13240                 * read/write bits are all ones.
13241                 */
13242                tw32(offset, read_mask | write_mask);
13243
13244                val = tr32(offset);
13245
13246                /* Test the read-only bits. */
13247                if ((val & read_mask) != read_val)
13248                        goto out;
13249
13250                /* Test the read/write bits. */
13251                if ((val & write_mask) != write_mask)
13252                        goto out;
13253
13254                tw32(offset, save_val);
13255        }
13256
13257        return 0;
13258
13259out:
13260        if (netif_msg_hw(tp))
13261                netdev_err(tp->dev,
13262                           "Register test failed at offset %x\n", offset);
13263        tw32(offset, save_val);
13264        return -EIO;
13265}
13266
13267static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13268{
13269        static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13270        int i;
13271        u32 j;
13272
13273        for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13274                for (j = 0; j < len; j += 4) {
13275                        u32 val;
13276
13277                        tg3_write_mem(tp, offset + j, test_pattern[i]);
13278                        tg3_read_mem(tp, offset + j, &val);
13279                        if (val != test_pattern[i])
13280                                return -EIO;
13281                }
13282        }
13283        return 0;
13284}
13285
13286static int tg3_test_memory(struct tg3 *tp)
13287{
13288        static struct mem_entry {
13289                u32 offset;
13290                u32 len;
13291        } mem_tbl_570x[] = {
13292                { 0x00000000, 0x00b50},
13293                { 0x00002000, 0x1c000},
13294                { 0xffffffff, 0x00000}
13295        }, mem_tbl_5705[] = {
13296                { 0x00000100, 0x0000c},
13297                { 0x00000200, 0x00008},
13298                { 0x00004000, 0x00800},
13299                { 0x00006000, 0x01000},
13300                { 0x00008000, 0x02000},
13301                { 0x00010000, 0x0e000},
13302                { 0xffffffff, 0x00000}
13303        }, mem_tbl_5755[] = {
13304                { 0x00000200, 0x00008},
13305                { 0x00004000, 0x00800},
13306                { 0x00006000, 0x00800},
13307                { 0x00008000, 0x02000},
13308                { 0x00010000, 0x0c000},
13309                { 0xffffffff, 0x00000}
13310        }, mem_tbl_5906[] = {
13311                { 0x00000200, 0x00008},
13312                { 0x00004000, 0x00400},
13313                { 0x00006000, 0x00400},
13314                { 0x00008000, 0x01000},
13315                { 0x00010000, 0x01000},
13316                { 0xffffffff, 0x00000}
13317        }, mem_tbl_5717[] = {
13318                { 0x00000200, 0x00008},
13319                { 0x00010000, 0x0a000},
13320                { 0x00020000, 0x13c00},
13321                { 0xffffffff, 0x00000}
13322        }, mem_tbl_57765[] = {
13323                { 0x00000200, 0x00008},
13324                { 0x00004000, 0x00800},
13325                { 0x00006000, 0x09800},
13326                { 0x00010000, 0x0a000},
13327                { 0xffffffff, 0x00000}
13328        };
13329        struct mem_entry *mem_tbl;
13330        int err = 0;
13331        int i;
13332
13333        if (tg3_flag(tp, 5717_PLUS))
13334                mem_tbl = mem_tbl_5717;
13335        else if (tg3_flag(tp, 57765_CLASS) ||
13336                 tg3_asic_rev(tp) == ASIC_REV_5762)
13337                mem_tbl = mem_tbl_57765;
13338        else if (tg3_flag(tp, 5755_PLUS))
13339                mem_tbl = mem_tbl_5755;
13340        else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13341                mem_tbl = mem_tbl_5906;
13342        else if (tg3_flag(tp, 5705_PLUS))
13343                mem_tbl = mem_tbl_5705;
13344        else
13345                mem_tbl = mem_tbl_570x;
13346
13347        for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13348                err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13349                if (err)
13350                        break;
13351        }
13352
13353        return err;
13354}
13355
13356#define TG3_TSO_MSS             500
13357
13358#define TG3_TSO_IP_HDR_LEN      20
13359#define TG3_TSO_TCP_HDR_LEN     20
13360#define TG3_TSO_TCP_OPT_LEN     12
13361
13362static const u8 tg3_tso_header[] = {
133630x08, 0x00,
133640x45, 0x00, 0x00, 0x00,
133650x00, 0x00, 0x40, 0x00,
133660x40, 0x06, 0x00, 0x00,
133670x0a, 0x00, 0x00, 0x01,
133680x0a, 0x00, 0x00, 0x02,
133690x0d, 0x00, 0xe0, 0x00,
133700x00, 0x00, 0x01, 0x00,
133710x00, 0x00, 0x02, 0x00,
133720x80, 0x10, 0x10, 0x00,
133730x14, 0x09, 0x00, 0x00,
133740x01, 0x01, 0x08, 0x0a,
133750x11, 0x11, 0x11, 0x11,
133760x11, 0x11, 0x11, 0x11,
13377};
13378
13379static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13380{
13381        u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13382        u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13383        u32 budget;
13384        struct sk_buff *skb;
13385        u8 *tx_data, *rx_data;
13386        dma_addr_t map;
13387        int num_pkts, tx_len, rx_len, i, err;
13388        struct tg3_rx_buffer_desc *desc;
13389        struct tg3_napi *tnapi, *rnapi;
13390        struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13391
13392        tnapi = &tp->napi[0];
13393        rnapi = &tp->napi[0];
13394        if (tp->irq_cnt > 1) {
13395                if (tg3_flag(tp, ENABLE_RSS))
13396                        rnapi = &tp->napi[1];
13397                if (tg3_flag(tp, ENABLE_TSS))
13398                        tnapi = &tp->napi[1];
13399        }
13400        coal_now = tnapi->coal_now | rnapi->coal_now;
13401
13402        err = -EIO;
13403
13404        tx_len = pktsz;
13405        skb = netdev_alloc_skb(tp->dev, tx_len);
13406        if (!skb)
13407                return -ENOMEM;
13408
13409        tx_data = skb_put(skb, tx_len);
13410        memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13411        memset(tx_data + ETH_ALEN, 0x0, 8);
13412
13413        tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13414
13415        if (tso_loopback) {
13416                struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13417
13418                u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13419                              TG3_TSO_TCP_OPT_LEN;
13420
13421                memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13422                       sizeof(tg3_tso_header));
13423                mss = TG3_TSO_MSS;
13424
13425                val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13426                num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13427
13428                /* Set the total length field in the IP header */
13429                iph->tot_len = htons((u16)(mss + hdr_len));
13430
13431                base_flags = (TXD_FLAG_CPU_PRE_DMA |
13432                              TXD_FLAG_CPU_POST_DMA);
13433
13434                if (tg3_flag(tp, HW_TSO_1) ||
13435                    tg3_flag(tp, HW_TSO_2) ||
13436                    tg3_flag(tp, HW_TSO_3)) {
13437                        struct tcphdr *th;
13438                        val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13439                        th = (struct tcphdr *)&tx_data[val];
13440                        th->check = 0;
13441                } else
13442                        base_flags |= TXD_FLAG_TCPUDP_CSUM;
13443
13444                if (tg3_flag(tp, HW_TSO_3)) {
13445                        mss |= (hdr_len & 0xc) << 12;
13446                        if (hdr_len & 0x10)
13447                                base_flags |= 0x00000010;
13448                        base_flags |= (hdr_len & 0x3e0) << 5;
13449                } else if (tg3_flag(tp, HW_TSO_2))
13450                        mss |= hdr_len << 9;
13451                else if (tg3_flag(tp, HW_TSO_1) ||
13452                         tg3_asic_rev(tp) == ASIC_REV_5705) {
13453                        mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13454                } else {
13455                        base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13456                }
13457
13458                data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13459        } else {
13460                num_pkts = 1;
13461                data_off = ETH_HLEN;
13462
13463                if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13464                    tx_len > VLAN_ETH_FRAME_LEN)
13465                        base_flags |= TXD_FLAG_JMB_PKT;
13466        }
13467
13468        for (i = data_off; i < tx_len; i++)
13469                tx_data[i] = (u8) (i & 0xff);
13470
13471        map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
13472        if (pci_dma_mapping_error(tp->pdev, map)) {
13473                dev_kfree_skb(skb);
13474                return -EIO;
13475        }
13476
13477        val = tnapi->tx_prod;
13478        tnapi->tx_buffers[val].skb = skb;
13479        dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13480
13481        tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13482               rnapi->coal_now);
13483
13484        udelay(10);
13485
13486        rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13487
13488        budget = tg3_tx_avail(tnapi);
13489        if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13490                            base_flags | TXD_FLAG_END, mss, 0)) {
13491                tnapi->tx_buffers[val].skb = NULL;
13492                dev_kfree_skb(skb);
13493                return -EIO;
13494        }
13495
13496        tnapi->tx_prod++;
13497
13498        /* Sync BD data before updating mailbox */
13499        wmb();
13500
13501        tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13502        tr32_mailbox(tnapi->prodmbox);
13503
13504        udelay(10);
13505
13506        /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13507        for (i = 0; i < 35; i++) {
13508                tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13509                       coal_now);
13510
13511                udelay(10);
13512
13513                tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13514                rx_idx = rnapi->hw_status->idx[0].rx_producer;
13515                if ((tx_idx == tnapi->tx_prod) &&
13516                    (rx_idx == (rx_start_idx + num_pkts)))
13517                        break;
13518        }
13519
13520        tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13521        dev_kfree_skb(skb);
13522
13523        if (tx_idx != tnapi->tx_prod)
13524                goto out;
13525
13526        if (rx_idx != rx_start_idx + num_pkts)
13527                goto out;
13528
13529        val = data_off;
13530        while (rx_idx != rx_start_idx) {
13531                desc = &rnapi->rx_rcb[rx_start_idx++];
13532                desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13533                opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13534
13535                if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13536                    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13537                        goto out;
13538
13539                rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13540                         - ETH_FCS_LEN;
13541
13542                if (!tso_loopback) {
13543                        if (rx_len != tx_len)
13544                                goto out;
13545
13546                        if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13547                                if (opaque_key != RXD_OPAQUE_RING_STD)
13548                                        goto out;
13549                        } else {
13550                                if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13551                                        goto out;
13552                        }
13553                } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13554                           (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13555                            >> RXD_TCPCSUM_SHIFT != 0xffff) {
13556                        goto out;
13557                }
13558
13559                if (opaque_key == RXD_OPAQUE_RING_STD) {
13560                        rx_data = tpr->rx_std_buffers[desc_idx].data;
13561                        map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13562                                             mapping);
13563                } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13564                        rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13565                        map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13566                                             mapping);
13567                } else
13568                        goto out;
13569
13570                pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
13571                                            PCI_DMA_FROMDEVICE);
13572
13573                rx_data += TG3_RX_OFFSET(tp);
13574                for (i = data_off; i < rx_len; i++, val++) {
13575                        if (*(rx_data + i) != (u8) (val & 0xff))
13576                                goto out;
13577                }
13578        }
13579
13580        err = 0;
13581
13582        /* tg3_free_rings will unmap and free the rx_data */
13583out:
13584        return err;
13585}
13586
13587#define TG3_STD_LOOPBACK_FAILED         1
13588#define TG3_JMB_LOOPBACK_FAILED         2
13589#define TG3_TSO_LOOPBACK_FAILED         4
13590#define TG3_LOOPBACK_FAILED \
13591        (TG3_STD_LOOPBACK_FAILED | \
13592         TG3_JMB_LOOPBACK_FAILED | \
13593         TG3_TSO_LOOPBACK_FAILED)
13594
13595static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13596{
13597        int err = -EIO;
13598        u32 eee_cap;
13599        u32 jmb_pkt_sz = 9000;
13600
13601        if (tp->dma_limit)
13602                jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13603
13604        eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13605        tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13606
13607        if (!netif_running(tp->dev)) {
13608                data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13609                data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13610                if (do_extlpbk)
13611                        data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13612                goto done;
13613        }
13614
13615        err = tg3_reset_hw(tp, true);
13616        if (err) {
13617                data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13618                data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13619                if (do_extlpbk)
13620                        data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13621                goto done;
13622        }
13623
13624        if (tg3_flag(tp, ENABLE_RSS)) {
13625                int i;
13626
13627                /* Reroute all rx packets to the 1st queue */
13628                for (i = MAC_RSS_INDIR_TBL_0;
13629                     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13630                        tw32(i, 0x0);
13631        }
13632
13633        /* HW errata - mac loopback fails in some cases on 5780.
13634         * Normal traffic and PHY loopback are not affected by
13635         * errata.  Also, the MAC loopback test is deprecated for
13636         * all newer ASIC revisions.
13637         */
13638        if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13639            !tg3_flag(tp, CPMU_PRESENT)) {
13640                tg3_mac_loopback(tp, true);
13641
13642                if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13643                        data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13644
13645                if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13646                    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13647                        data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13648
13649                tg3_mac_loopback(tp, false);
13650        }
13651
13652        if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13653            !tg3_flag(tp, USE_PHYLIB)) {
13654                int i;
13655
13656                tg3_phy_lpbk_set(tp, 0, false);
13657
13658                /* Wait for link */
13659                for (i = 0; i < 100; i++) {
13660                        if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13661                                break;
13662                        mdelay(1);
13663                }
13664
13665                if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13666                        data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13667                if (tg3_flag(tp, TSO_CAPABLE) &&
13668                    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13669                        data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13670                if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13671                    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13672                        data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13673
13674                if (do_extlpbk) {
13675                        tg3_phy_lpbk_set(tp, 0, true);
13676
13677                        /* All link indications report up, but the hardware
13678                         * isn't really ready for about 20 msec.  Double it
13679                         * to be sure.
13680                         */
13681                        mdelay(40);
13682
13683                        if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13684                                data[TG3_EXT_LOOPB_TEST] |=
13685                                                        TG3_STD_LOOPBACK_FAILED;
13686                        if (tg3_flag(tp, TSO_CAPABLE) &&
13687                            tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13688                                data[TG3_EXT_LOOPB_TEST] |=
13689                                                        TG3_TSO_LOOPBACK_FAILED;
13690                        if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13691                            tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13692                                data[TG3_EXT_LOOPB_TEST] |=
13693                                                        TG3_JMB_LOOPBACK_FAILED;
13694                }
13695
13696                /* Re-enable gphy autopowerdown. */
13697                if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13698                        tg3_phy_toggle_apd(tp, true);
13699        }
13700
13701        err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13702               data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13703
13704done:
13705        tp->phy_flags |= eee_cap;
13706
13707        return err;
13708}
13709
13710static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13711                          u64 *data)
13712{
13713        struct tg3 *tp = netdev_priv(dev);
13714        bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13715
13716        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13717                if (tg3_power_up(tp)) {
13718                        etest->flags |= ETH_TEST_FL_FAILED;
13719                        memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13720                        return;
13721                }
13722                tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13723        }
13724
13725        memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13726
13727        if (tg3_test_nvram(tp) != 0) {
13728                etest->flags |= ETH_TEST_FL_FAILED;
13729                data[TG3_NVRAM_TEST] = 1;
13730        }
13731        if (!doextlpbk && tg3_test_link(tp)) {
13732                etest->flags |= ETH_TEST_FL_FAILED;
13733                data[TG3_LINK_TEST] = 1;
13734        }
13735        if (etest->flags & ETH_TEST_FL_OFFLINE) {
13736                int err, err2 = 0, irq_sync = 0;
13737
13738                if (netif_running(dev)) {
13739                        tg3_phy_stop(tp);
13740                        tg3_netif_stop(tp);
13741                        irq_sync = 1;
13742                }
13743
13744                tg3_full_lock(tp, irq_sync);
13745                tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13746                err = tg3_nvram_lock(tp);
13747                tg3_halt_cpu(tp, RX_CPU_BASE);
13748                if (!tg3_flag(tp, 5705_PLUS))
13749                        tg3_halt_cpu(tp, TX_CPU_BASE);
13750                if (!err)
13751                        tg3_nvram_unlock(tp);
13752
13753                if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13754                        tg3_phy_reset(tp);
13755
13756                if (tg3_test_registers(tp) != 0) {
13757                        etest->flags |= ETH_TEST_FL_FAILED;
13758                        data[TG3_REGISTER_TEST] = 1;
13759                }
13760
13761                if (tg3_test_memory(tp) != 0) {
13762                        etest->flags |= ETH_TEST_FL_FAILED;
13763                        data[TG3_MEMORY_TEST] = 1;
13764                }
13765
13766                if (doextlpbk)
13767                        etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13768
13769                if (tg3_test_loopback(tp, data, doextlpbk))
13770                        etest->flags |= ETH_TEST_FL_FAILED;
13771
13772                tg3_full_unlock(tp);
13773
13774                if (tg3_test_interrupt(tp) != 0) {
13775                        etest->flags |= ETH_TEST_FL_FAILED;
13776                        data[TG3_INTERRUPT_TEST] = 1;
13777                }
13778
13779                tg3_full_lock(tp, 0);
13780
13781                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13782                if (netif_running(dev)) {
13783                        tg3_flag_set(tp, INIT_COMPLETE);
13784                        err2 = tg3_restart_hw(tp, true);
13785                        if (!err2)
13786                                tg3_netif_start(tp);
13787                }
13788
13789                tg3_full_unlock(tp);
13790
13791                if (irq_sync && !err2)
13792                        tg3_phy_start(tp);
13793        }
13794        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13795                tg3_power_down_prepare(tp);
13796
13797}
13798
13799static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13800{
13801        struct tg3 *tp = netdev_priv(dev);
13802        struct hwtstamp_config stmpconf;
13803
13804        if (!tg3_flag(tp, PTP_CAPABLE))
13805                return -EOPNOTSUPP;
13806
13807        if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13808                return -EFAULT;
13809
13810        if (stmpconf.flags)
13811                return -EINVAL;
13812
13813        if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13814            stmpconf.tx_type != HWTSTAMP_TX_OFF)
13815                return -ERANGE;
13816
13817        switch (stmpconf.rx_filter) {
13818        case HWTSTAMP_FILTER_NONE:
13819                tp->rxptpctl = 0;
13820                break;
13821        case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13822                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13823                               TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13824                break;
13825        case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13826                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13827                               TG3_RX_PTP_CTL_SYNC_EVNT;
13828                break;
13829        case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13830                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13831                               TG3_RX_PTP_CTL_DELAY_REQ;
13832                break;
13833        case HWTSTAMP_FILTER_PTP_V2_EVENT:
13834                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13835                               TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13836                break;
13837        case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13838                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13839                               TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13840                break;
13841        case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13842                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13843                               TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13844                break;
13845        case HWTSTAMP_FILTER_PTP_V2_SYNC:
13846                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13847                               TG3_RX_PTP_CTL_SYNC_EVNT;
13848                break;
13849        case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13850                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13851                               TG3_RX_PTP_CTL_SYNC_EVNT;
13852                break;
13853        case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13854                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13855                               TG3_RX_PTP_CTL_SYNC_EVNT;
13856                break;
13857        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13858                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13859                               TG3_RX_PTP_CTL_DELAY_REQ;
13860                break;
13861        case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13862                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13863                               TG3_RX_PTP_CTL_DELAY_REQ;
13864                break;
13865        case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13866                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13867                               TG3_RX_PTP_CTL_DELAY_REQ;
13868                break;
13869        default:
13870                return -ERANGE;
13871        }
13872
13873        if (netif_running(dev) && tp->rxptpctl)
13874                tw32(TG3_RX_PTP_CTL,
13875                     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13876
13877        if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13878                tg3_flag_set(tp, TX_TSTAMP_EN);
13879        else
13880                tg3_flag_clear(tp, TX_TSTAMP_EN);
13881
13882        return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13883                -EFAULT : 0;
13884}
13885
13886static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13887{
13888        struct tg3 *tp = netdev_priv(dev);
13889        struct hwtstamp_config stmpconf;
13890
13891        if (!tg3_flag(tp, PTP_CAPABLE))
13892                return -EOPNOTSUPP;
13893
13894        stmpconf.flags = 0;
13895        stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13896                            HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13897
13898        switch (tp->rxptpctl) {
13899        case 0:
13900                stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13901                break;
13902        case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13903                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13904                break;
13905        case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13906                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13907                break;
13908        case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13909                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13910                break;
13911        case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13912                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13913                break;
13914        case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13915                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13916                break;
13917        case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13918                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13919                break;
13920        case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13921                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13922                break;
13923        case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13924                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13925                break;
13926        case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13927                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13928                break;
13929        case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13930                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13931                break;
13932        case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13933                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13934                break;
13935        case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13936                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13937                break;
13938        default:
13939                WARN_ON_ONCE(1);
13940                return -ERANGE;
13941        }
13942
13943        return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13944                -EFAULT : 0;
13945}
13946
13947static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13948{
13949        struct mii_ioctl_data *data = if_mii(ifr);
13950        struct tg3 *tp = netdev_priv(dev);
13951        int err;
13952
13953        if (tg3_flag(tp, USE_PHYLIB)) {
13954                struct phy_device *phydev;
13955                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13956                        return -EAGAIN;
13957                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
13958                return phy_mii_ioctl(phydev, ifr, cmd);
13959        }
13960
13961        switch (cmd) {
13962        case SIOCGMIIPHY:
13963                data->phy_id = tp->phy_addr;
13964
13965                /* fallthru */
13966        case SIOCGMIIREG: {
13967                u32 mii_regval;
13968
13969                if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13970                        break;                  /* We have no PHY */
13971
13972                if (!netif_running(dev))
13973                        return -EAGAIN;
13974
13975                spin_lock_bh(&tp->lock);
13976                err = __tg3_readphy(tp, data->phy_id & 0x1f,
13977                                    data->reg_num & 0x1f, &mii_regval);
13978                spin_unlock_bh(&tp->lock);
13979
13980                data->val_out = mii_regval;
13981
13982                return err;
13983        }
13984
13985        case SIOCSMIIREG:
13986                if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13987                        break;                  /* We have no PHY */
13988
13989                if (!netif_running(dev))
13990                        return -EAGAIN;
13991
13992                spin_lock_bh(&tp->lock);
13993                err = __tg3_writephy(tp, data->phy_id & 0x1f,
13994                                     data->reg_num & 0x1f, data->val_in);
13995                spin_unlock_bh(&tp->lock);
13996
13997                return err;
13998
13999        case SIOCSHWTSTAMP:
14000                return tg3_hwtstamp_set(dev, ifr);
14001
14002        case SIOCGHWTSTAMP:
14003                return tg3_hwtstamp_get(dev, ifr);
14004
14005        default:
14006                /* do nothing */
14007                break;
14008        }
14009        return -EOPNOTSUPP;
14010}
14011
14012static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14013{
14014        struct tg3 *tp = netdev_priv(dev);
14015
14016        memcpy(ec, &tp->coal, sizeof(*ec));
14017        return 0;
14018}
14019
14020static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14021{
14022        struct tg3 *tp = netdev_priv(dev);
14023        u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14024        u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14025
14026        if (!tg3_flag(tp, 5705_PLUS)) {
14027                max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14028                max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14029                max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14030                min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14031        }
14032
14033        if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14034            (!ec->rx_coalesce_usecs) ||
14035            (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14036            (!ec->tx_coalesce_usecs) ||
14037            (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14038            (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14039            (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14040            (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14041            (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14042            (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14043            (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14044            (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14045                return -EINVAL;
14046
14047        /* Only copy relevant parameters, ignore all others. */
14048        tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14049        tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14050        tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14051        tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14052        tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14053        tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14054        tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14055        tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14056        tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14057
14058        if (netif_running(dev)) {
14059                tg3_full_lock(tp, 0);
14060                __tg3_set_coalesce(tp, &tp->coal);
14061                tg3_full_unlock(tp);
14062        }
14063        return 0;
14064}
14065
14066static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14067{
14068        struct tg3 *tp = netdev_priv(dev);
14069
14070        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14071                netdev_warn(tp->dev, "Board does not support EEE!\n");
14072                return -EOPNOTSUPP;
14073        }
14074
14075        if (edata->advertised != tp->eee.advertised) {
14076                netdev_warn(tp->dev,
14077                            "Direct manipulation of EEE advertisement is not supported\n");
14078                return -EINVAL;
14079        }
14080
14081        if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14082                netdev_warn(tp->dev,
14083                            "Maximal Tx Lpi timer supported is %#x(u)\n",
14084                            TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14085                return -EINVAL;
14086        }
14087
14088        tp->eee = *edata;
14089
14090        tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14091        tg3_warn_mgmt_link_flap(tp);
14092
14093        if (netif_running(tp->dev)) {
14094                tg3_full_lock(tp, 0);
14095                tg3_setup_eee(tp);
14096                tg3_phy_reset(tp);
14097                tg3_full_unlock(tp);
14098        }
14099
14100        return 0;
14101}
14102
14103static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14104{
14105        struct tg3 *tp = netdev_priv(dev);
14106
14107        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14108                netdev_warn(tp->dev,
14109                            "Board does not support EEE!\n");
14110                return -EOPNOTSUPP;
14111        }
14112
14113        *edata = tp->eee;
14114        return 0;
14115}
14116
14117static const struct ethtool_ops tg3_ethtool_ops = {
14118        .get_drvinfo            = tg3_get_drvinfo,
14119        .get_regs_len           = tg3_get_regs_len,
14120        .get_regs               = tg3_get_regs,
14121        .get_wol                = tg3_get_wol,
14122        .set_wol                = tg3_set_wol,
14123        .get_msglevel           = tg3_get_msglevel,
14124        .set_msglevel           = tg3_set_msglevel,
14125        .nway_reset             = tg3_nway_reset,
14126        .get_link               = ethtool_op_get_link,
14127        .get_eeprom_len         = tg3_get_eeprom_len,
14128        .get_eeprom             = tg3_get_eeprom,
14129        .set_eeprom             = tg3_set_eeprom,
14130        .get_ringparam          = tg3_get_ringparam,
14131        .set_ringparam          = tg3_set_ringparam,
14132        .get_pauseparam         = tg3_get_pauseparam,
14133        .set_pauseparam         = tg3_set_pauseparam,
14134        .self_test              = tg3_self_test,
14135        .get_strings            = tg3_get_strings,
14136        .set_phys_id            = tg3_set_phys_id,
14137        .get_ethtool_stats      = tg3_get_ethtool_stats,
14138        .get_coalesce           = tg3_get_coalesce,
14139        .set_coalesce           = tg3_set_coalesce,
14140        .get_sset_count         = tg3_get_sset_count,
14141        .get_rxnfc              = tg3_get_rxnfc,
14142        .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14143        .get_rxfh               = tg3_get_rxfh,
14144        .set_rxfh               = tg3_set_rxfh,
14145        .get_channels           = tg3_get_channels,
14146        .set_channels           = tg3_set_channels,
14147        .get_ts_info            = tg3_get_ts_info,
14148        .get_eee                = tg3_get_eee,
14149        .set_eee                = tg3_set_eee,
14150        .get_link_ksettings     = tg3_get_link_ksettings,
14151        .set_link_ksettings     = tg3_set_link_ksettings,
14152};
14153
14154static void tg3_get_stats64(struct net_device *dev,
14155                            struct rtnl_link_stats64 *stats)
14156{
14157        struct tg3 *tp = netdev_priv(dev);
14158
14159        spin_lock_bh(&tp->lock);
14160        if (!tp->hw_stats) {
14161                *stats = tp->net_stats_prev;
14162                spin_unlock_bh(&tp->lock);
14163                return;
14164        }
14165
14166        tg3_get_nstats(tp, stats);
14167        spin_unlock_bh(&tp->lock);
14168}
14169
14170static void tg3_set_rx_mode(struct net_device *dev)
14171{
14172        struct tg3 *tp = netdev_priv(dev);
14173
14174        if (!netif_running(dev))
14175                return;
14176
14177        tg3_full_lock(tp, 0);
14178        __tg3_set_rx_mode(dev);
14179        tg3_full_unlock(tp);
14180}
14181
14182static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14183                               int new_mtu)
14184{
14185        dev->mtu = new_mtu;
14186
14187        if (new_mtu > ETH_DATA_LEN) {
14188                if (tg3_flag(tp, 5780_CLASS)) {
14189                        netdev_update_features(dev);
14190                        tg3_flag_clear(tp, TSO_CAPABLE);
14191                } else {
14192                        tg3_flag_set(tp, JUMBO_RING_ENABLE);
14193                }
14194        } else {
14195                if (tg3_flag(tp, 5780_CLASS)) {
14196                        tg3_flag_set(tp, TSO_CAPABLE);
14197                        netdev_update_features(dev);
14198                }
14199                tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14200        }
14201}
14202
14203static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14204{
14205        struct tg3 *tp = netdev_priv(dev);
14206        int err;
14207        bool reset_phy = false;
14208
14209        if (!netif_running(dev)) {
14210                /* We'll just catch it later when the
14211                 * device is up'd.
14212                 */
14213                tg3_set_mtu(dev, tp, new_mtu);
14214                return 0;
14215        }
14216
14217        tg3_phy_stop(tp);
14218
14219        tg3_netif_stop(tp);
14220
14221        tg3_set_mtu(dev, tp, new_mtu);
14222
14223        tg3_full_lock(tp, 1);
14224
14225        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14226
14227        /* Reset PHY, otherwise the read DMA engine will be in a mode that
14228         * breaks all requests to 256 bytes.
14229         */
14230        if (tg3_asic_rev(tp) == ASIC_REV_57766)
14231                reset_phy = true;
14232
14233        err = tg3_restart_hw(tp, reset_phy);
14234
14235        if (!err)
14236                tg3_netif_start(tp);
14237
14238        tg3_full_unlock(tp);
14239
14240        if (!err)
14241                tg3_phy_start(tp);
14242
14243        return err;
14244}
14245
14246static const struct net_device_ops tg3_netdev_ops = {
14247        .ndo_open               = tg3_open,
14248        .ndo_stop               = tg3_close,
14249        .ndo_start_xmit         = tg3_start_xmit,
14250        .ndo_get_stats64        = tg3_get_stats64,
14251        .ndo_validate_addr      = eth_validate_addr,
14252        .ndo_set_rx_mode        = tg3_set_rx_mode,
14253        .ndo_set_mac_address    = tg3_set_mac_addr,
14254        .ndo_do_ioctl           = tg3_ioctl,
14255        .ndo_tx_timeout         = tg3_tx_timeout,
14256        .ndo_change_mtu         = tg3_change_mtu,
14257        .ndo_fix_features       = tg3_fix_features,
14258        .ndo_set_features       = tg3_set_features,
14259#ifdef CONFIG_NET_POLL_CONTROLLER
14260        .ndo_poll_controller    = tg3_poll_controller,
14261#endif
14262};
14263
14264static void tg3_get_eeprom_size(struct tg3 *tp)
14265{
14266        u32 cursize, val, magic;
14267
14268        tp->nvram_size = EEPROM_CHIP_SIZE;
14269
14270        if (tg3_nvram_read(tp, 0, &magic) != 0)
14271                return;
14272
14273        if ((magic != TG3_EEPROM_MAGIC) &&
14274            ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14275            ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14276                return;
14277
14278        /*
14279         * Size the chip by reading offsets at increasing powers of two.
14280         * When we encounter our validation signature, we know the addressing
14281         * has wrapped around, and thus have our chip size.
14282         */
14283        cursize = 0x10;
14284
14285        while (cursize < tp->nvram_size) {
14286                if (tg3_nvram_read(tp, cursize, &val) != 0)
14287                        return;
14288
14289                if (val == magic)
14290                        break;
14291
14292                cursize <<= 1;
14293        }
14294
14295        tp->nvram_size = cursize;
14296}
14297
14298static void tg3_get_nvram_size(struct tg3 *tp)
14299{
14300        u32 val;
14301
14302        if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14303                return;
14304
14305        /* Selfboot format */
14306        if (val != TG3_EEPROM_MAGIC) {
14307                tg3_get_eeprom_size(tp);
14308                return;
14309        }
14310
14311        if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14312                if (val != 0) {
14313                        /* This is confusing.  We want to operate on the
14314                         * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14315                         * call will read from NVRAM and byteswap the data
14316                         * according to the byteswapping settings for all
14317                         * other register accesses.  This ensures the data we
14318                         * want will always reside in the lower 16-bits.
14319                         * However, the data in NVRAM is in LE format, which
14320                         * means the data from the NVRAM read will always be
14321                         * opposite the endianness of the CPU.  The 16-bit
14322                         * byteswap then brings the data to CPU endianness.
14323                         */
14324                        tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14325                        return;
14326                }
14327        }
14328        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14329}
14330
14331static void tg3_get_nvram_info(struct tg3 *tp)
14332{
14333        u32 nvcfg1;
14334
14335        nvcfg1 = tr32(NVRAM_CFG1);
14336        if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14337                tg3_flag_set(tp, FLASH);
14338        } else {
14339                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14340                tw32(NVRAM_CFG1, nvcfg1);
14341        }
14342
14343        if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14344            tg3_flag(tp, 5780_CLASS)) {
14345                switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14346                case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14347                        tp->nvram_jedecnum = JEDEC_ATMEL;
14348                        tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14349                        tg3_flag_set(tp, NVRAM_BUFFERED);
14350                        break;
14351                case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14352                        tp->nvram_jedecnum = JEDEC_ATMEL;
14353                        tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14354                        break;
14355                case FLASH_VENDOR_ATMEL_EEPROM:
14356                        tp->nvram_jedecnum = JEDEC_ATMEL;
14357                        tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14358                        tg3_flag_set(tp, NVRAM_BUFFERED);
14359                        break;
14360                case FLASH_VENDOR_ST:
14361                        tp->nvram_jedecnum = JEDEC_ST;
14362                        tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14363                        tg3_flag_set(tp, NVRAM_BUFFERED);
14364                        break;
14365                case FLASH_VENDOR_SAIFUN:
14366                        tp->nvram_jedecnum = JEDEC_SAIFUN;
14367                        tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14368                        break;
14369                case FLASH_VENDOR_SST_SMALL:
14370                case FLASH_VENDOR_SST_LARGE:
14371                        tp->nvram_jedecnum = JEDEC_SST;
14372                        tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14373                        break;
14374                }
14375        } else {
14376                tp->nvram_jedecnum = JEDEC_ATMEL;
14377                tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14378                tg3_flag_set(tp, NVRAM_BUFFERED);
14379        }
14380}
14381
14382static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14383{
14384        switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14385        case FLASH_5752PAGE_SIZE_256:
14386                tp->nvram_pagesize = 256;
14387                break;
14388        case FLASH_5752PAGE_SIZE_512:
14389                tp->nvram_pagesize = 512;
14390                break;
14391        case FLASH_5752PAGE_SIZE_1K:
14392                tp->nvram_pagesize = 1024;
14393                break;
14394        case FLASH_5752PAGE_SIZE_2K:
14395                tp->nvram_pagesize = 2048;
14396                break;
14397        case FLASH_5752PAGE_SIZE_4K:
14398                tp->nvram_pagesize = 4096;
14399                break;
14400        case FLASH_5752PAGE_SIZE_264:
14401                tp->nvram_pagesize = 264;
14402                break;
14403        case FLASH_5752PAGE_SIZE_528:
14404                tp->nvram_pagesize = 528;
14405                break;
14406        }
14407}
14408
14409static void tg3_get_5752_nvram_info(struct tg3 *tp)
14410{
14411        u32 nvcfg1;
14412
14413        nvcfg1 = tr32(NVRAM_CFG1);
14414
14415        /* NVRAM protection for TPM */
14416        if (nvcfg1 & (1 << 27))
14417                tg3_flag_set(tp, PROTECTED_NVRAM);
14418
14419        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14420        case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14421        case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14422                tp->nvram_jedecnum = JEDEC_ATMEL;
14423                tg3_flag_set(tp, NVRAM_BUFFERED);
14424                break;
14425        case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14426                tp->nvram_jedecnum = JEDEC_ATMEL;
14427                tg3_flag_set(tp, NVRAM_BUFFERED);
14428                tg3_flag_set(tp, FLASH);
14429                break;
14430        case FLASH_5752VENDOR_ST_M45PE10:
14431        case FLASH_5752VENDOR_ST_M45PE20:
14432        case FLASH_5752VENDOR_ST_M45PE40:
14433                tp->nvram_jedecnum = JEDEC_ST;
14434                tg3_flag_set(tp, NVRAM_BUFFERED);
14435                tg3_flag_set(tp, FLASH);
14436                break;
14437        }
14438
14439        if (tg3_flag(tp, FLASH)) {
14440                tg3_nvram_get_pagesize(tp, nvcfg1);
14441        } else {
14442                /* For eeprom, set pagesize to maximum eeprom size */
14443                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14444
14445                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14446                tw32(NVRAM_CFG1, nvcfg1);
14447        }
14448}
14449
14450static void tg3_get_5755_nvram_info(struct tg3 *tp)
14451{
14452        u32 nvcfg1, protect = 0;
14453
14454        nvcfg1 = tr32(NVRAM_CFG1);
14455
14456        /* NVRAM protection for TPM */
14457        if (nvcfg1 & (1 << 27)) {
14458                tg3_flag_set(tp, PROTECTED_NVRAM);
14459                protect = 1;
14460        }
14461
14462        nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14463        switch (nvcfg1) {
14464        case FLASH_5755VENDOR_ATMEL_FLASH_1:
14465        case FLASH_5755VENDOR_ATMEL_FLASH_2:
14466        case FLASH_5755VENDOR_ATMEL_FLASH_3:
14467        case FLASH_5755VENDOR_ATMEL_FLASH_5:
14468                tp->nvram_jedecnum = JEDEC_ATMEL;
14469                tg3_flag_set(tp, NVRAM_BUFFERED);
14470                tg3_flag_set(tp, FLASH);
14471                tp->nvram_pagesize = 264;
14472                if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14473                    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14474                        tp->nvram_size = (protect ? 0x3e200 :
14475                                          TG3_NVRAM_SIZE_512KB);
14476                else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14477                        tp->nvram_size = (protect ? 0x1f200 :
14478                                          TG3_NVRAM_SIZE_256KB);
14479                else
14480                        tp->nvram_size = (protect ? 0x1f200 :
14481                                          TG3_NVRAM_SIZE_128KB);
14482                break;
14483        case FLASH_5752VENDOR_ST_M45PE10:
14484        case FLASH_5752VENDOR_ST_M45PE20:
14485        case FLASH_5752VENDOR_ST_M45PE40:
14486                tp->nvram_jedecnum = JEDEC_ST;
14487                tg3_flag_set(tp, NVRAM_BUFFERED);
14488                tg3_flag_set(tp, FLASH);
14489                tp->nvram_pagesize = 256;
14490                if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14491                        tp->nvram_size = (protect ?
14492                                          TG3_NVRAM_SIZE_64KB :
14493                                          TG3_NVRAM_SIZE_128KB);
14494                else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14495                        tp->nvram_size = (protect ?
14496                                          TG3_NVRAM_SIZE_64KB :
14497                                          TG3_NVRAM_SIZE_256KB);
14498                else
14499                        tp->nvram_size = (protect ?
14500                                          TG3_NVRAM_SIZE_128KB :
14501                                          TG3_NVRAM_SIZE_512KB);
14502                break;
14503        }
14504}
14505
14506static void tg3_get_5787_nvram_info(struct tg3 *tp)
14507{
14508        u32 nvcfg1;
14509
14510        nvcfg1 = tr32(NVRAM_CFG1);
14511
14512        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14513        case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14514        case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14515        case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14516        case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14517                tp->nvram_jedecnum = JEDEC_ATMEL;
14518                tg3_flag_set(tp, NVRAM_BUFFERED);
14519                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14520
14521                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14522                tw32(NVRAM_CFG1, nvcfg1);
14523                break;
14524        case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14525        case FLASH_5755VENDOR_ATMEL_FLASH_1:
14526        case FLASH_5755VENDOR_ATMEL_FLASH_2:
14527        case FLASH_5755VENDOR_ATMEL_FLASH_3:
14528                tp->nvram_jedecnum = JEDEC_ATMEL;
14529                tg3_flag_set(tp, NVRAM_BUFFERED);
14530                tg3_flag_set(tp, FLASH);
14531                tp->nvram_pagesize = 264;
14532                break;
14533        case FLASH_5752VENDOR_ST_M45PE10:
14534        case FLASH_5752VENDOR_ST_M45PE20:
14535        case FLASH_5752VENDOR_ST_M45PE40:
14536                tp->nvram_jedecnum = JEDEC_ST;
14537                tg3_flag_set(tp, NVRAM_BUFFERED);
14538                tg3_flag_set(tp, FLASH);
14539                tp->nvram_pagesize = 256;
14540                break;
14541        }
14542}
14543
14544static void tg3_get_5761_nvram_info(struct tg3 *tp)
14545{
14546        u32 nvcfg1, protect = 0;
14547
14548        nvcfg1 = tr32(NVRAM_CFG1);
14549
14550        /* NVRAM protection for TPM */
14551        if (nvcfg1 & (1 << 27)) {
14552                tg3_flag_set(tp, PROTECTED_NVRAM);
14553                protect = 1;
14554        }
14555
14556        nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14557        switch (nvcfg1) {
14558        case FLASH_5761VENDOR_ATMEL_ADB021D:
14559        case FLASH_5761VENDOR_ATMEL_ADB041D:
14560        case FLASH_5761VENDOR_ATMEL_ADB081D:
14561        case FLASH_5761VENDOR_ATMEL_ADB161D:
14562        case FLASH_5761VENDOR_ATMEL_MDB021D:
14563        case FLASH_5761VENDOR_ATMEL_MDB041D:
14564        case FLASH_5761VENDOR_ATMEL_MDB081D:
14565        case FLASH_5761VENDOR_ATMEL_MDB161D:
14566                tp->nvram_jedecnum = JEDEC_ATMEL;
14567                tg3_flag_set(tp, NVRAM_BUFFERED);
14568                tg3_flag_set(tp, FLASH);
14569                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14570                tp->nvram_pagesize = 256;
14571                break;
14572        case FLASH_5761VENDOR_ST_A_M45PE20:
14573        case FLASH_5761VENDOR_ST_A_M45PE40:
14574        case FLASH_5761VENDOR_ST_A_M45PE80:
14575        case FLASH_5761VENDOR_ST_A_M45PE16:
14576        case FLASH_5761VENDOR_ST_M_M45PE20:
14577        case FLASH_5761VENDOR_ST_M_M45PE40:
14578        case FLASH_5761VENDOR_ST_M_M45PE80:
14579        case FLASH_5761VENDOR_ST_M_M45PE16:
14580                tp->nvram_jedecnum = JEDEC_ST;
14581                tg3_flag_set(tp, NVRAM_BUFFERED);
14582                tg3_flag_set(tp, FLASH);
14583                tp->nvram_pagesize = 256;
14584                break;
14585        }
14586
14587        if (protect) {
14588                tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14589        } else {
14590                switch (nvcfg1) {
14591                case FLASH_5761VENDOR_ATMEL_ADB161D:
14592                case FLASH_5761VENDOR_ATMEL_MDB161D:
14593                case FLASH_5761VENDOR_ST_A_M45PE16:
14594                case FLASH_5761VENDOR_ST_M_M45PE16:
14595                        tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14596                        break;
14597                case FLASH_5761VENDOR_ATMEL_ADB081D:
14598                case FLASH_5761VENDOR_ATMEL_MDB081D:
14599                case FLASH_5761VENDOR_ST_A_M45PE80:
14600                case FLASH_5761VENDOR_ST_M_M45PE80:
14601                        tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14602                        break;
14603                case FLASH_5761VENDOR_ATMEL_ADB041D:
14604                case FLASH_5761VENDOR_ATMEL_MDB041D:
14605                case FLASH_5761VENDOR_ST_A_M45PE40:
14606                case FLASH_5761VENDOR_ST_M_M45PE40:
14607                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14608                        break;
14609                case FLASH_5761VENDOR_ATMEL_ADB021D:
14610                case FLASH_5761VENDOR_ATMEL_MDB021D:
14611                case FLASH_5761VENDOR_ST_A_M45PE20:
14612                case FLASH_5761VENDOR_ST_M_M45PE20:
14613                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14614                        break;
14615                }
14616        }
14617}
14618
14619static void tg3_get_5906_nvram_info(struct tg3 *tp)
14620{
14621        tp->nvram_jedecnum = JEDEC_ATMEL;
14622        tg3_flag_set(tp, NVRAM_BUFFERED);
14623        tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14624}
14625
14626static void tg3_get_57780_nvram_info(struct tg3 *tp)
14627{
14628        u32 nvcfg1;
14629
14630        nvcfg1 = tr32(NVRAM_CFG1);
14631
14632        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14633        case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14634        case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14635                tp->nvram_jedecnum = JEDEC_ATMEL;
14636                tg3_flag_set(tp, NVRAM_BUFFERED);
14637                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14638
14639                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14640                tw32(NVRAM_CFG1, nvcfg1);
14641                return;
14642        case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14643        case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14644        case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14645        case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14646        case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14647        case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14648        case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14649                tp->nvram_jedecnum = JEDEC_ATMEL;
14650                tg3_flag_set(tp, NVRAM_BUFFERED);
14651                tg3_flag_set(tp, FLASH);
14652
14653                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14654                case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14655                case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14656                case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14657                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14658                        break;
14659                case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14660                case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14661                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14662                        break;
14663                case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14664                case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14665                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14666                        break;
14667                }
14668                break;
14669        case FLASH_5752VENDOR_ST_M45PE10:
14670        case FLASH_5752VENDOR_ST_M45PE20:
14671        case FLASH_5752VENDOR_ST_M45PE40:
14672                tp->nvram_jedecnum = JEDEC_ST;
14673                tg3_flag_set(tp, NVRAM_BUFFERED);
14674                tg3_flag_set(tp, FLASH);
14675
14676                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14677                case FLASH_5752VENDOR_ST_M45PE10:
14678                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14679                        break;
14680                case FLASH_5752VENDOR_ST_M45PE20:
14681                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14682                        break;
14683                case FLASH_5752VENDOR_ST_M45PE40:
14684                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14685                        break;
14686                }
14687                break;
14688        default:
14689                tg3_flag_set(tp, NO_NVRAM);
14690                return;
14691        }
14692
14693        tg3_nvram_get_pagesize(tp, nvcfg1);
14694        if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14695                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14696}
14697
14698
14699static void tg3_get_5717_nvram_info(struct tg3 *tp)
14700{
14701        u32 nvcfg1;
14702
14703        nvcfg1 = tr32(NVRAM_CFG1);
14704
14705        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14706        case FLASH_5717VENDOR_ATMEL_EEPROM:
14707        case FLASH_5717VENDOR_MICRO_EEPROM:
14708                tp->nvram_jedecnum = JEDEC_ATMEL;
14709                tg3_flag_set(tp, NVRAM_BUFFERED);
14710                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14711
14712                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14713                tw32(NVRAM_CFG1, nvcfg1);
14714                return;
14715        case FLASH_5717VENDOR_ATMEL_MDB011D:
14716        case FLASH_5717VENDOR_ATMEL_ADB011B:
14717        case FLASH_5717VENDOR_ATMEL_ADB011D:
14718        case FLASH_5717VENDOR_ATMEL_MDB021D:
14719        case FLASH_5717VENDOR_ATMEL_ADB021B:
14720        case FLASH_5717VENDOR_ATMEL_ADB021D:
14721        case FLASH_5717VENDOR_ATMEL_45USPT:
14722                tp->nvram_jedecnum = JEDEC_ATMEL;
14723                tg3_flag_set(tp, NVRAM_BUFFERED);
14724                tg3_flag_set(tp, FLASH);
14725
14726                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14727                case FLASH_5717VENDOR_ATMEL_MDB021D:
14728                        /* Detect size with tg3_nvram_get_size() */
14729                        break;
14730                case FLASH_5717VENDOR_ATMEL_ADB021B:
14731                case FLASH_5717VENDOR_ATMEL_ADB021D:
14732                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14733                        break;
14734                default:
14735                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14736                        break;
14737                }
14738                break;
14739        case FLASH_5717VENDOR_ST_M_M25PE10:
14740        case FLASH_5717VENDOR_ST_A_M25PE10:
14741        case FLASH_5717VENDOR_ST_M_M45PE10:
14742        case FLASH_5717VENDOR_ST_A_M45PE10:
14743        case FLASH_5717VENDOR_ST_M_M25PE20:
14744        case FLASH_5717VENDOR_ST_A_M25PE20:
14745        case FLASH_5717VENDOR_ST_M_M45PE20:
14746        case FLASH_5717VENDOR_ST_A_M45PE20:
14747        case FLASH_5717VENDOR_ST_25USPT:
14748        case FLASH_5717VENDOR_ST_45USPT:
14749                tp->nvram_jedecnum = JEDEC_ST;
14750                tg3_flag_set(tp, NVRAM_BUFFERED);
14751                tg3_flag_set(tp, FLASH);
14752
14753                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14754                case FLASH_5717VENDOR_ST_M_M25PE20:
14755                case FLASH_5717VENDOR_ST_M_M45PE20:
14756                        /* Detect size with tg3_nvram_get_size() */
14757                        break;
14758                case FLASH_5717VENDOR_ST_A_M25PE20:
14759                case FLASH_5717VENDOR_ST_A_M45PE20:
14760                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14761                        break;
14762                default:
14763                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14764                        break;
14765                }
14766                break;
14767        default:
14768                tg3_flag_set(tp, NO_NVRAM);
14769                return;
14770        }
14771
14772        tg3_nvram_get_pagesize(tp, nvcfg1);
14773        if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14774                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14775}
14776
14777static void tg3_get_5720_nvram_info(struct tg3 *tp)
14778{
14779        u32 nvcfg1, nvmpinstrp;
14780
14781        nvcfg1 = tr32(NVRAM_CFG1);
14782        nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14783
14784        if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14785                if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14786                        tg3_flag_set(tp, NO_NVRAM);
14787                        return;
14788                }
14789
14790                switch (nvmpinstrp) {
14791                case FLASH_5762_EEPROM_HD:
14792                        nvmpinstrp = FLASH_5720_EEPROM_HD;
14793                        break;
14794                case FLASH_5762_EEPROM_LD:
14795                        nvmpinstrp = FLASH_5720_EEPROM_LD;
14796                        break;
14797                case FLASH_5720VENDOR_M_ST_M45PE20:
14798                        /* This pinstrap supports multiple sizes, so force it
14799                         * to read the actual size from location 0xf0.
14800                         */
14801                        nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14802                        break;
14803                }
14804        }
14805
14806        switch (nvmpinstrp) {
14807        case FLASH_5720_EEPROM_HD:
14808        case FLASH_5720_EEPROM_LD:
14809                tp->nvram_jedecnum = JEDEC_ATMEL;
14810                tg3_flag_set(tp, NVRAM_BUFFERED);
14811
14812                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14813                tw32(NVRAM_CFG1, nvcfg1);
14814                if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14815                        tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14816                else
14817                        tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14818                return;
14819        case FLASH_5720VENDOR_M_ATMEL_DB011D:
14820        case FLASH_5720VENDOR_A_ATMEL_DB011B:
14821        case FLASH_5720VENDOR_A_ATMEL_DB011D:
14822        case FLASH_5720VENDOR_M_ATMEL_DB021D:
14823        case FLASH_5720VENDOR_A_ATMEL_DB021B:
14824        case FLASH_5720VENDOR_A_ATMEL_DB021D:
14825        case FLASH_5720VENDOR_M_ATMEL_DB041D:
14826        case FLASH_5720VENDOR_A_ATMEL_DB041B:
14827        case FLASH_5720VENDOR_A_ATMEL_DB041D:
14828        case FLASH_5720VENDOR_M_ATMEL_DB081D:
14829        case FLASH_5720VENDOR_A_ATMEL_DB081D:
14830        case FLASH_5720VENDOR_ATMEL_45USPT:
14831                tp->nvram_jedecnum = JEDEC_ATMEL;
14832                tg3_flag_set(tp, NVRAM_BUFFERED);
14833                tg3_flag_set(tp, FLASH);
14834
14835                switch (nvmpinstrp) {
14836                case FLASH_5720VENDOR_M_ATMEL_DB021D:
14837                case FLASH_5720VENDOR_A_ATMEL_DB021B:
14838                case FLASH_5720VENDOR_A_ATMEL_DB021D:
14839                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14840                        break;
14841                case FLASH_5720VENDOR_M_ATMEL_DB041D:
14842                case FLASH_5720VENDOR_A_ATMEL_DB041B:
14843                case FLASH_5720VENDOR_A_ATMEL_DB041D:
14844                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14845                        break;
14846                case FLASH_5720VENDOR_M_ATMEL_DB081D:
14847                case FLASH_5720VENDOR_A_ATMEL_DB081D:
14848                        tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14849                        break;
14850                default:
14851                        if (tg3_asic_rev(tp) != ASIC_REV_5762)
14852                                tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14853                        break;
14854                }
14855                break;
14856        case FLASH_5720VENDOR_M_ST_M25PE10:
14857        case FLASH_5720VENDOR_M_ST_M45PE10:
14858        case FLASH_5720VENDOR_A_ST_M25PE10:
14859        case FLASH_5720VENDOR_A_ST_M45PE10:
14860        case FLASH_5720VENDOR_M_ST_M25PE20:
14861        case FLASH_5720VENDOR_M_ST_M45PE20:
14862        case FLASH_5720VENDOR_A_ST_M25PE20:
14863        case FLASH_5720VENDOR_A_ST_M45PE20:
14864        case FLASH_5720VENDOR_M_ST_M25PE40:
14865        case FLASH_5720VENDOR_M_ST_M45PE40:
14866        case FLASH_5720VENDOR_A_ST_M25PE40:
14867        case FLASH_5720VENDOR_A_ST_M45PE40:
14868        case FLASH_5720VENDOR_M_ST_M25PE80:
14869        case FLASH_5720VENDOR_M_ST_M45PE80:
14870        case FLASH_5720VENDOR_A_ST_M25PE80:
14871        case FLASH_5720VENDOR_A_ST_M45PE80:
14872        case FLASH_5720VENDOR_ST_25USPT:
14873        case FLASH_5720VENDOR_ST_45USPT:
14874                tp->nvram_jedecnum = JEDEC_ST;
14875                tg3_flag_set(tp, NVRAM_BUFFERED);
14876                tg3_flag_set(tp, FLASH);
14877
14878                switch (nvmpinstrp) {
14879                case FLASH_5720VENDOR_M_ST_M25PE20:
14880                case FLASH_5720VENDOR_M_ST_M45PE20:
14881                case FLASH_5720VENDOR_A_ST_M25PE20:
14882                case FLASH_5720VENDOR_A_ST_M45PE20:
14883                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14884                        break;
14885                case FLASH_5720VENDOR_M_ST_M25PE40:
14886                case FLASH_5720VENDOR_M_ST_M45PE40:
14887                case FLASH_5720VENDOR_A_ST_M25PE40:
14888                case FLASH_5720VENDOR_A_ST_M45PE40:
14889                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14890                        break;
14891                case FLASH_5720VENDOR_M_ST_M25PE80:
14892                case FLASH_5720VENDOR_M_ST_M45PE80:
14893                case FLASH_5720VENDOR_A_ST_M25PE80:
14894                case FLASH_5720VENDOR_A_ST_M45PE80:
14895                        tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14896                        break;
14897                default:
14898                        if (tg3_asic_rev(tp) != ASIC_REV_5762)
14899                                tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14900                        break;
14901                }
14902                break;
14903        default:
14904                tg3_flag_set(tp, NO_NVRAM);
14905                return;
14906        }
14907
14908        tg3_nvram_get_pagesize(tp, nvcfg1);
14909        if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14910                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14911
14912        if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14913                u32 val;
14914
14915                if (tg3_nvram_read(tp, 0, &val))
14916                        return;
14917
14918                if (val != TG3_EEPROM_MAGIC &&
14919                    (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14920                        tg3_flag_set(tp, NO_NVRAM);
14921        }
14922}
14923
14924/* Chips other than 5700/5701 use the NVRAM for fetching info. */
14925static void tg3_nvram_init(struct tg3 *tp)
14926{
14927        if (tg3_flag(tp, IS_SSB_CORE)) {
14928                /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14929                tg3_flag_clear(tp, NVRAM);
14930                tg3_flag_clear(tp, NVRAM_BUFFERED);
14931                tg3_flag_set(tp, NO_NVRAM);
14932                return;
14933        }
14934
14935        tw32_f(GRC_EEPROM_ADDR,
14936             (EEPROM_ADDR_FSM_RESET |
14937              (EEPROM_DEFAULT_CLOCK_PERIOD <<
14938               EEPROM_ADDR_CLKPERD_SHIFT)));
14939
14940        msleep(1);
14941
14942        /* Enable seeprom accesses. */
14943        tw32_f(GRC_LOCAL_CTRL,
14944             tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14945        udelay(100);
14946
14947        if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14948            tg3_asic_rev(tp) != ASIC_REV_5701) {
14949                tg3_flag_set(tp, NVRAM);
14950
14951                if (tg3_nvram_lock(tp)) {
14952                        netdev_warn(tp->dev,
14953                                    "Cannot get nvram lock, %s failed\n",
14954                                    __func__);
14955                        return;
14956                }
14957                tg3_enable_nvram_access(tp);
14958
14959                tp->nvram_size = 0;
14960
14961                if (tg3_asic_rev(tp) == ASIC_REV_5752)
14962                        tg3_get_5752_nvram_info(tp);
14963                else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14964                        tg3_get_5755_nvram_info(tp);
14965                else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14966                         tg3_asic_rev(tp) == ASIC_REV_5784 ||
14967                         tg3_asic_rev(tp) == ASIC_REV_5785)
14968                        tg3_get_5787_nvram_info(tp);
14969                else if (tg3_asic_rev(tp) == ASIC_REV_5761)
14970                        tg3_get_5761_nvram_info(tp);
14971                else if (tg3_asic_rev(tp) == ASIC_REV_5906)
14972                        tg3_get_5906_nvram_info(tp);
14973                else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
14974                         tg3_flag(tp, 57765_CLASS))
14975                        tg3_get_57780_nvram_info(tp);
14976                else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
14977                         tg3_asic_rev(tp) == ASIC_REV_5719)
14978                        tg3_get_5717_nvram_info(tp);
14979                else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
14980                         tg3_asic_rev(tp) == ASIC_REV_5762)
14981                        tg3_get_5720_nvram_info(tp);
14982                else
14983                        tg3_get_nvram_info(tp);
14984
14985                if (tp->nvram_size == 0)
14986                        tg3_get_nvram_size(tp);
14987
14988                tg3_disable_nvram_access(tp);
14989                tg3_nvram_unlock(tp);
14990
14991        } else {
14992                tg3_flag_clear(tp, NVRAM);
14993                tg3_flag_clear(tp, NVRAM_BUFFERED);
14994
14995                tg3_get_eeprom_size(tp);
14996        }
14997}
14998
14999struct subsys_tbl_ent {
15000        u16 subsys_vendor, subsys_devid;
15001        u32 phy_id;
15002};
15003
15004static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15005        /* Broadcom boards. */
15006        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15007          TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15008        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15009          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15010        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15011          TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15012        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15013          TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15014        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15015          TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15016        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15017          TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15018        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15019          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15020        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15021          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15022        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15023          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15024        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15025          TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15026        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15027          TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15028
15029        /* 3com boards. */
15030        { TG3PCI_SUBVENDOR_ID_3COM,
15031          TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15032        { TG3PCI_SUBVENDOR_ID_3COM,
15033          TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15034        { TG3PCI_SUBVENDOR_ID_3COM,
15035          TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15036        { TG3PCI_SUBVENDOR_ID_3COM,
15037          TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15038        { TG3PCI_SUBVENDOR_ID_3COM,
15039          TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15040
15041        /* DELL boards. */
15042        { TG3PCI_SUBVENDOR_ID_DELL,
15043          TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15044        { TG3PCI_SUBVENDOR_ID_DELL,
15045          TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15046        { TG3PCI_SUBVENDOR_ID_DELL,
15047          TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15048        { TG3PCI_SUBVENDOR_ID_DELL,
15049          TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15050
15051        /* Compaq boards. */
15052        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15053          TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15054        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15055          TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15056        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15057          TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15058        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15059          TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15060        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15061          TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15062
15063        /* IBM boards. */
15064        { TG3PCI_SUBVENDOR_ID_IBM,
15065          TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15066};
15067
15068static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15069{
15070        int i;
15071
15072        for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15073                if ((subsys_id_to_phy_id[i].subsys_vendor ==
15074                     tp->pdev->subsystem_vendor) &&
15075                    (subsys_id_to_phy_id[i].subsys_devid ==
15076                     tp->pdev->subsystem_device))
15077                        return &subsys_id_to_phy_id[i];
15078        }
15079        return NULL;
15080}
15081
15082static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15083{
15084        u32 val;
15085
15086        tp->phy_id = TG3_PHY_ID_INVALID;
15087        tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15088
15089        /* Assume an onboard device and WOL capable by default.  */
15090        tg3_flag_set(tp, EEPROM_WRITE_PROT);
15091        tg3_flag_set(tp, WOL_CAP);
15092
15093        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15094                if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15095                        tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15096                        tg3_flag_set(tp, IS_NIC);
15097                }
15098                val = tr32(VCPU_CFGSHDW);
15099                if (val & VCPU_CFGSHDW_ASPM_DBNC)
15100                        tg3_flag_set(tp, ASPM_WORKAROUND);
15101                if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15102                    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15103                        tg3_flag_set(tp, WOL_ENABLE);
15104                        device_set_wakeup_enable(&tp->pdev->dev, true);
15105                }
15106                goto done;
15107        }
15108
15109        tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15110        if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15111                u32 nic_cfg, led_cfg;
15112                u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15113                u32 nic_phy_id, ver, eeprom_phy_id;
15114                int eeprom_phy_serdes = 0;
15115
15116                tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15117                tp->nic_sram_data_cfg = nic_cfg;
15118
15119                tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15120                ver >>= NIC_SRAM_DATA_VER_SHIFT;
15121                if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15122                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
15123                    tg3_asic_rev(tp) != ASIC_REV_5703 &&
15124                    (ver > 0) && (ver < 0x100))
15125                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15126
15127                if (tg3_asic_rev(tp) == ASIC_REV_5785)
15128                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15129
15130                if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15131                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
15132                    tg3_asic_rev(tp) == ASIC_REV_5720)
15133                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15134
15135                if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15136                    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15137                        eeprom_phy_serdes = 1;
15138
15139                tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15140                if (nic_phy_id != 0) {
15141                        u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15142                        u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15143
15144                        eeprom_phy_id  = (id1 >> 16) << 10;
15145                        eeprom_phy_id |= (id2 & 0xfc00) << 16;
15146                        eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15147                } else
15148                        eeprom_phy_id = 0;
15149
15150                tp->phy_id = eeprom_phy_id;
15151                if (eeprom_phy_serdes) {
15152                        if (!tg3_flag(tp, 5705_PLUS))
15153                                tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15154                        else
15155                                tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15156                }
15157
15158                if (tg3_flag(tp, 5750_PLUS))
15159                        led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15160                                    SHASTA_EXT_LED_MODE_MASK);
15161                else
15162                        led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15163
15164                switch (led_cfg) {
15165                default:
15166                case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15167                        tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15168                        break;
15169
15170                case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15171                        tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15172                        break;
15173
15174                case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15175                        tp->led_ctrl = LED_CTRL_MODE_MAC;
15176
15177                        /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15178                         * read on some older 5700/5701 bootcode.
15179                         */
15180                        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15181                            tg3_asic_rev(tp) == ASIC_REV_5701)
15182                                tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15183
15184                        break;
15185
15186                case SHASTA_EXT_LED_SHARED:
15187                        tp->led_ctrl = LED_CTRL_MODE_SHARED;
15188                        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15189                            tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15190                                tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15191                                                 LED_CTRL_MODE_PHY_2);
15192
15193                        if (tg3_flag(tp, 5717_PLUS) ||
15194                            tg3_asic_rev(tp) == ASIC_REV_5762)
15195                                tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15196                                                LED_CTRL_BLINK_RATE_MASK;
15197
15198                        break;
15199
15200                case SHASTA_EXT_LED_MAC:
15201                        tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15202                        break;
15203
15204                case SHASTA_EXT_LED_COMBO:
15205                        tp->led_ctrl = LED_CTRL_MODE_COMBO;
15206                        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15207                                tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15208                                                 LED_CTRL_MODE_PHY_2);
15209                        break;
15210
15211                }
15212
15213                if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15214                     tg3_asic_rev(tp) == ASIC_REV_5701) &&
15215                    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15216                        tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15217
15218                if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15219                        tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15220
15221                if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15222                        tg3_flag_set(tp, EEPROM_WRITE_PROT);
15223                        if ((tp->pdev->subsystem_vendor ==
15224                             PCI_VENDOR_ID_ARIMA) &&
15225                            (tp->pdev->subsystem_device == 0x205a ||
15226                             tp->pdev->subsystem_device == 0x2063))
15227                                tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15228                } else {
15229                        tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15230                        tg3_flag_set(tp, IS_NIC);
15231                }
15232
15233                if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15234                        tg3_flag_set(tp, ENABLE_ASF);
15235                        if (tg3_flag(tp, 5750_PLUS))
15236                                tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15237                }
15238
15239                if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15240                    tg3_flag(tp, 5750_PLUS))
15241                        tg3_flag_set(tp, ENABLE_APE);
15242
15243                if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15244                    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15245                        tg3_flag_clear(tp, WOL_CAP);
15246
15247                if (tg3_flag(tp, WOL_CAP) &&
15248                    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15249                        tg3_flag_set(tp, WOL_ENABLE);
15250                        device_set_wakeup_enable(&tp->pdev->dev, true);
15251                }
15252
15253                if (cfg2 & (1 << 17))
15254                        tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15255
15256                /* serdes signal pre-emphasis in register 0x590 set by */
15257                /* bootcode if bit 18 is set */
15258                if (cfg2 & (1 << 18))
15259                        tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15260
15261                if ((tg3_flag(tp, 57765_PLUS) ||
15262                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15263                      tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15264                    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15265                        tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15266
15267                if (tg3_flag(tp, PCI_EXPRESS)) {
15268                        u32 cfg3;
15269
15270                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15271                        if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15272                            !tg3_flag(tp, 57765_PLUS) &&
15273                            (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15274                                tg3_flag_set(tp, ASPM_WORKAROUND);
15275                        if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15276                                tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15277                        if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15278                                tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15279                }
15280
15281                if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15282                        tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15283                if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15284                        tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15285                if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15286                        tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15287
15288                if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15289                        tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15290        }
15291done:
15292        if (tg3_flag(tp, WOL_CAP))
15293                device_set_wakeup_enable(&tp->pdev->dev,
15294                                         tg3_flag(tp, WOL_ENABLE));
15295        else
15296                device_set_wakeup_capable(&tp->pdev->dev, false);
15297}
15298
15299static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15300{
15301        int i, err;
15302        u32 val2, off = offset * 8;
15303
15304        err = tg3_nvram_lock(tp);
15305        if (err)
15306                return err;
15307
15308        tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15309        tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15310                        APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15311        tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15312        udelay(10);
15313
15314        for (i = 0; i < 100; i++) {
15315                val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15316                if (val2 & APE_OTP_STATUS_CMD_DONE) {
15317                        *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15318                        break;
15319                }
15320                udelay(10);
15321        }
15322
15323        tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15324
15325        tg3_nvram_unlock(tp);
15326        if (val2 & APE_OTP_STATUS_CMD_DONE)
15327                return 0;
15328
15329        return -EBUSY;
15330}
15331
15332static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15333{
15334        int i;
15335        u32 val;
15336
15337        tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15338        tw32(OTP_CTRL, cmd);
15339
15340        /* Wait for up to 1 ms for command to execute. */
15341        for (i = 0; i < 100; i++) {
15342                val = tr32(OTP_STATUS);
15343                if (val & OTP_STATUS_CMD_DONE)
15344                        break;
15345                udelay(10);
15346        }
15347
15348        return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15349}
15350
15351/* Read the gphy configuration from the OTP region of the chip.  The gphy
15352 * configuration is a 32-bit value that straddles the alignment boundary.
15353 * We do two 32-bit reads and then shift and merge the results.
15354 */
15355static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15356{
15357        u32 bhalf_otp, thalf_otp;
15358
15359        tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15360
15361        if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15362                return 0;
15363
15364        tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15365
15366        if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15367                return 0;
15368
15369        thalf_otp = tr32(OTP_READ_DATA);
15370
15371        tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15372
15373        if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15374                return 0;
15375
15376        bhalf_otp = tr32(OTP_READ_DATA);
15377
15378        return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15379}
15380
15381static void tg3_phy_init_link_config(struct tg3 *tp)
15382{
15383        u32 adv = ADVERTISED_Autoneg;
15384
15385        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15386                if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15387                        adv |= ADVERTISED_1000baseT_Half;
15388                adv |= ADVERTISED_1000baseT_Full;
15389        }
15390
15391        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15392                adv |= ADVERTISED_100baseT_Half |
15393                       ADVERTISED_100baseT_Full |
15394                       ADVERTISED_10baseT_Half |
15395                       ADVERTISED_10baseT_Full |
15396                       ADVERTISED_TP;
15397        else
15398                adv |= ADVERTISED_FIBRE;
15399
15400        tp->link_config.advertising = adv;
15401        tp->link_config.speed = SPEED_UNKNOWN;
15402        tp->link_config.duplex = DUPLEX_UNKNOWN;
15403        tp->link_config.autoneg = AUTONEG_ENABLE;
15404        tp->link_config.active_speed = SPEED_UNKNOWN;
15405        tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15406
15407        tp->old_link = -1;
15408}
15409
15410static int tg3_phy_probe(struct tg3 *tp)
15411{
15412        u32 hw_phy_id_1, hw_phy_id_2;
15413        u32 hw_phy_id, hw_phy_id_masked;
15414        int err;
15415
15416        /* flow control autonegotiation is default behavior */
15417        tg3_flag_set(tp, PAUSE_AUTONEG);
15418        tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15419
15420        if (tg3_flag(tp, ENABLE_APE)) {
15421                switch (tp->pci_fn) {
15422                case 0:
15423                        tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15424                        break;
15425                case 1:
15426                        tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15427                        break;
15428                case 2:
15429                        tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15430                        break;
15431                case 3:
15432                        tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15433                        break;
15434                }
15435        }
15436
15437        if (!tg3_flag(tp, ENABLE_ASF) &&
15438            !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15439            !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15440                tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15441                                   TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15442
15443        if (tg3_flag(tp, USE_PHYLIB))
15444                return tg3_phy_init(tp);
15445
15446        /* Reading the PHY ID register can conflict with ASF
15447         * firmware access to the PHY hardware.
15448         */
15449        err = 0;
15450        if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15451                hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15452        } else {
15453                /* Now read the physical PHY_ID from the chip and verify
15454                 * that it is sane.  If it doesn't look good, we fall back
15455                 * to either the hard-coded table based PHY_ID and failing
15456                 * that the value found in the eeprom area.
15457                 */
15458                err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15459                err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15460
15461                hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15462                hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15463                hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15464
15465                hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15466        }
15467
15468        if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15469                tp->phy_id = hw_phy_id;
15470                if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15471                        tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15472                else
15473                        tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15474        } else {
15475                if (tp->phy_id != TG3_PHY_ID_INVALID) {
15476                        /* Do nothing, phy ID already set up in
15477                         * tg3_get_eeprom_hw_cfg().
15478                         */
15479                } else {
15480                        struct subsys_tbl_ent *p;
15481
15482                        /* No eeprom signature?  Try the hardcoded
15483                         * subsys device table.
15484                         */
15485                        p = tg3_lookup_by_subsys(tp);
15486                        if (p) {
15487                                tp->phy_id = p->phy_id;
15488                        } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15489                                /* For now we saw the IDs 0xbc050cd0,
15490                                 * 0xbc050f80 and 0xbc050c30 on devices
15491                                 * connected to an BCM4785 and there are
15492                                 * probably more. Just assume that the phy is
15493                                 * supported when it is connected to a SSB core
15494                                 * for now.
15495                                 */
15496                                return -ENODEV;
15497                        }
15498
15499                        if (!tp->phy_id ||
15500                            tp->phy_id == TG3_PHY_ID_BCM8002)
15501                                tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15502                }
15503        }
15504
15505        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15506            (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15507             tg3_asic_rev(tp) == ASIC_REV_5720 ||
15508             tg3_asic_rev(tp) == ASIC_REV_57766 ||
15509             tg3_asic_rev(tp) == ASIC_REV_5762 ||
15510             (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15511              tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15512             (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15513              tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15514                tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15515
15516                tp->eee.supported = SUPPORTED_100baseT_Full |
15517                                    SUPPORTED_1000baseT_Full;
15518                tp->eee.advertised = ADVERTISED_100baseT_Full |
15519                                     ADVERTISED_1000baseT_Full;
15520                tp->eee.eee_enabled = 1;
15521                tp->eee.tx_lpi_enabled = 1;
15522                tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15523        }
15524
15525        tg3_phy_init_link_config(tp);
15526
15527        if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15528            !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15529            !tg3_flag(tp, ENABLE_APE) &&
15530            !tg3_flag(tp, ENABLE_ASF)) {
15531                u32 bmsr, dummy;
15532
15533                tg3_readphy(tp, MII_BMSR, &bmsr);
15534                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15535                    (bmsr & BMSR_LSTATUS))
15536                        goto skip_phy_reset;
15537
15538                err = tg3_phy_reset(tp);
15539                if (err)
15540                        return err;
15541
15542                tg3_phy_set_wirespeed(tp);
15543
15544                if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15545                        tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15546                                            tp->link_config.flowctrl);
15547
15548                        tg3_writephy(tp, MII_BMCR,
15549                                     BMCR_ANENABLE | BMCR_ANRESTART);
15550                }
15551        }
15552
15553skip_phy_reset:
15554        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15555                err = tg3_init_5401phy_dsp(tp);
15556                if (err)
15557                        return err;
15558
15559                err = tg3_init_5401phy_dsp(tp);
15560        }
15561
15562        return err;
15563}
15564
15565static void tg3_read_vpd(struct tg3 *tp)
15566{
15567        u8 *vpd_data;
15568        unsigned int block_end, rosize, len;
15569        u32 vpdlen;
15570        int j, i = 0;
15571
15572        vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15573        if (!vpd_data)
15574                goto out_no_vpd;
15575
15576        i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
15577        if (i < 0)
15578                goto out_not_found;
15579
15580        rosize = pci_vpd_lrdt_size(&vpd_data[i]);
15581        block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
15582        i += PCI_VPD_LRDT_TAG_SIZE;
15583
15584        if (block_end > vpdlen)
15585                goto out_not_found;
15586
15587        j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15588                                      PCI_VPD_RO_KEYWORD_MFR_ID);
15589        if (j > 0) {
15590                len = pci_vpd_info_field_size(&vpd_data[j]);
15591
15592                j += PCI_VPD_INFO_FLD_HDR_SIZE;
15593                if (j + len > block_end || len != 4 ||
15594                    memcmp(&vpd_data[j], "1028", 4))
15595                        goto partno;
15596
15597                j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15598                                              PCI_VPD_RO_KEYWORD_VENDOR0);
15599                if (j < 0)
15600                        goto partno;
15601
15602                len = pci_vpd_info_field_size(&vpd_data[j]);
15603
15604                j += PCI_VPD_INFO_FLD_HDR_SIZE;
15605                if (j + len > block_end)
15606                        goto partno;
15607
15608                if (len >= sizeof(tp->fw_ver))
15609                        len = sizeof(tp->fw_ver) - 1;
15610                memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15611                snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len,
15612                         &vpd_data[j]);
15613        }
15614
15615partno:
15616        i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15617                                      PCI_VPD_RO_KEYWORD_PARTNO);
15618        if (i < 0)
15619                goto out_not_found;
15620
15621        len = pci_vpd_info_field_size(&vpd_data[i]);
15622
15623        i += PCI_VPD_INFO_FLD_HDR_SIZE;
15624        if (len > TG3_BPN_SIZE ||
15625            (len + i) > vpdlen)
15626                goto out_not_found;
15627
15628        memcpy(tp->board_part_number, &vpd_data[i], len);
15629
15630out_not_found:
15631        kfree(vpd_data);
15632        if (tp->board_part_number[0])
15633                return;
15634
15635out_no_vpd:
15636        if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15637                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15638                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15639                        strcpy(tp->board_part_number, "BCM5717");
15640                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15641                        strcpy(tp->board_part_number, "BCM5718");
15642                else
15643                        goto nomatch;
15644        } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15645                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15646                        strcpy(tp->board_part_number, "BCM57780");
15647                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15648                        strcpy(tp->board_part_number, "BCM57760");
15649                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15650                        strcpy(tp->board_part_number, "BCM57790");
15651                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15652                        strcpy(tp->board_part_number, "BCM57788");
15653                else
15654                        goto nomatch;
15655        } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15656                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15657                        strcpy(tp->board_part_number, "BCM57761");
15658                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15659                        strcpy(tp->board_part_number, "BCM57765");
15660                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15661                        strcpy(tp->board_part_number, "BCM57781");
15662                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15663                        strcpy(tp->board_part_number, "BCM57785");
15664                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15665                        strcpy(tp->board_part_number, "BCM57791");
15666                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15667                        strcpy(tp->board_part_number, "BCM57795");
15668                else
15669                        goto nomatch;
15670        } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15671                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15672                        strcpy(tp->board_part_number, "BCM57762");
15673                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15674                        strcpy(tp->board_part_number, "BCM57766");
15675                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15676                        strcpy(tp->board_part_number, "BCM57782");
15677                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15678                        strcpy(tp->board_part_number, "BCM57786");
15679                else
15680                        goto nomatch;
15681        } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15682                strcpy(tp->board_part_number, "BCM95906");
15683        } else {
15684nomatch:
15685                strcpy(tp->board_part_number, "none");
15686        }
15687}
15688
15689static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15690{
15691        u32 val;
15692
15693        if (tg3_nvram_read(tp, offset, &val) ||
15694            (val & 0xfc000000) != 0x0c000000 ||
15695            tg3_nvram_read(tp, offset + 4, &val) ||
15696            val != 0)
15697                return 0;
15698
15699        return 1;
15700}
15701
15702static void tg3_read_bc_ver(struct tg3 *tp)
15703{
15704        u32 val, offset, start, ver_offset;
15705        int i, dst_off;
15706        bool newver = false;
15707
15708        if (tg3_nvram_read(tp, 0xc, &offset) ||
15709            tg3_nvram_read(tp, 0x4, &start))
15710                return;
15711
15712        offset = tg3_nvram_logical_addr(tp, offset);
15713
15714        if (tg3_nvram_read(tp, offset, &val))
15715                return;
15716
15717        if ((val & 0xfc000000) == 0x0c000000) {
15718                if (tg3_nvram_read(tp, offset + 4, &val))
15719                        return;
15720
15721                if (val == 0)
15722                        newver = true;
15723        }
15724
15725        dst_off = strlen(tp->fw_ver);
15726
15727        if (newver) {
15728                if (TG3_VER_SIZE - dst_off < 16 ||
15729                    tg3_nvram_read(tp, offset + 8, &ver_offset))
15730                        return;
15731
15732                offset = offset + ver_offset - start;
15733                for (i = 0; i < 16; i += 4) {
15734                        __be32 v;
15735                        if (tg3_nvram_read_be32(tp, offset + i, &v))
15736                                return;
15737
15738                        memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15739                }
15740        } else {
15741                u32 major, minor;
15742
15743                if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15744                        return;
15745
15746                major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15747                        TG3_NVM_BCVER_MAJSFT;
15748                minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15749                snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15750                         "v%d.%02d", major, minor);
15751        }
15752}
15753
15754static void tg3_read_hwsb_ver(struct tg3 *tp)
15755{
15756        u32 val, major, minor;
15757
15758        /* Use native endian representation */
15759        if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15760                return;
15761
15762        major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15763                TG3_NVM_HWSB_CFG1_MAJSFT;
15764        minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15765                TG3_NVM_HWSB_CFG1_MINSFT;
15766
15767        snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15768}
15769
15770static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15771{
15772        u32 offset, major, minor, build;
15773
15774        strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15775
15776        if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15777                return;
15778
15779        switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15780        case TG3_EEPROM_SB_REVISION_0:
15781                offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15782                break;
15783        case TG3_EEPROM_SB_REVISION_2:
15784                offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15785                break;
15786        case TG3_EEPROM_SB_REVISION_3:
15787                offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15788                break;
15789        case TG3_EEPROM_SB_REVISION_4:
15790                offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15791                break;
15792        case TG3_EEPROM_SB_REVISION_5:
15793                offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15794                break;
15795        case TG3_EEPROM_SB_REVISION_6:
15796                offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15797                break;
15798        default:
15799                return;
15800        }
15801
15802        if (tg3_nvram_read(tp, offset, &val))
15803                return;
15804
15805        build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15806                TG3_EEPROM_SB_EDH_BLD_SHFT;
15807        major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15808                TG3_EEPROM_SB_EDH_MAJ_SHFT;
15809        minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15810
15811        if (minor > 99 || build > 26)
15812                return;
15813
15814        offset = strlen(tp->fw_ver);
15815        snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15816                 " v%d.%02d", major, minor);
15817
15818        if (build > 0) {
15819                offset = strlen(tp->fw_ver);
15820                if (offset < TG3_VER_SIZE - 1)
15821                        tp->fw_ver[offset] = 'a' + build - 1;
15822        }
15823}
15824
15825static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15826{
15827        u32 val, offset, start;
15828        int i, vlen;
15829
15830        for (offset = TG3_NVM_DIR_START;
15831             offset < TG3_NVM_DIR_END;
15832             offset += TG3_NVM_DIRENT_SIZE) {
15833                if (tg3_nvram_read(tp, offset, &val))
15834                        return;
15835
15836                if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15837                        break;
15838        }
15839
15840        if (offset == TG3_NVM_DIR_END)
15841                return;
15842
15843        if (!tg3_flag(tp, 5705_PLUS))
15844                start = 0x08000000;
15845        else if (tg3_nvram_read(tp, offset - 4, &start))
15846                return;
15847
15848        if (tg3_nvram_read(tp, offset + 4, &offset) ||
15849            !tg3_fw_img_is_valid(tp, offset) ||
15850            tg3_nvram_read(tp, offset + 8, &val))
15851                return;
15852
15853        offset += val - start;
15854
15855        vlen = strlen(tp->fw_ver);
15856
15857        tp->fw_ver[vlen++] = ',';
15858        tp->fw_ver[vlen++] = ' ';
15859
15860        for (i = 0; i < 4; i++) {
15861                __be32 v;
15862                if (tg3_nvram_read_be32(tp, offset, &v))
15863                        return;
15864
15865                offset += sizeof(v);
15866
15867                if (vlen > TG3_VER_SIZE - sizeof(v)) {
15868                        memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15869                        break;
15870                }
15871
15872                memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15873                vlen += sizeof(v);
15874        }
15875}
15876
15877static void tg3_probe_ncsi(struct tg3 *tp)
15878{
15879        u32 apedata;
15880
15881        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15882        if (apedata != APE_SEG_SIG_MAGIC)
15883                return;
15884
15885        apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15886        if (!(apedata & APE_FW_STATUS_READY))
15887                return;
15888
15889        if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15890                tg3_flag_set(tp, APE_HAS_NCSI);
15891}
15892
15893static void tg3_read_dash_ver(struct tg3 *tp)
15894{
15895        int vlen;
15896        u32 apedata;
15897        char *fwtype;
15898
15899        apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15900
15901        if (tg3_flag(tp, APE_HAS_NCSI))
15902                fwtype = "NCSI";
15903        else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15904                fwtype = "SMASH";
15905        else
15906                fwtype = "DASH";
15907
15908        vlen = strlen(tp->fw_ver);
15909
15910        snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15911                 fwtype,
15912                 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15913                 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15914                 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15915                 (apedata & APE_FW_VERSION_BLDMSK));
15916}
15917
15918static void tg3_read_otp_ver(struct tg3 *tp)
15919{
15920        u32 val, val2;
15921
15922        if (tg3_asic_rev(tp) != ASIC_REV_5762)
15923                return;
15924
15925        if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15926            !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15927            TG3_OTP_MAGIC0_VALID(val)) {
15928                u64 val64 = (u64) val << 32 | val2;
15929                u32 ver = 0;
15930                int i, vlen;
15931
15932                for (i = 0; i < 7; i++) {
15933                        if ((val64 & 0xff) == 0)
15934                                break;
15935                        ver = val64 & 0xff;
15936                        val64 >>= 8;
15937                }
15938                vlen = strlen(tp->fw_ver);
15939                snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15940        }
15941}
15942
15943static void tg3_read_fw_ver(struct tg3 *tp)
15944{
15945        u32 val;
15946        bool vpd_vers = false;
15947
15948        if (tp->fw_ver[0] != 0)
15949                vpd_vers = true;
15950
15951        if (tg3_flag(tp, NO_NVRAM)) {
15952                strcat(tp->fw_ver, "sb");
15953                tg3_read_otp_ver(tp);
15954                return;
15955        }
15956
15957        if (tg3_nvram_read(tp, 0, &val))
15958                return;
15959
15960        if (val == TG3_EEPROM_MAGIC)
15961                tg3_read_bc_ver(tp);
15962        else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15963                tg3_read_sb_ver(tp, val);
15964        else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15965                tg3_read_hwsb_ver(tp);
15966
15967        if (tg3_flag(tp, ENABLE_ASF)) {
15968                if (tg3_flag(tp, ENABLE_APE)) {
15969                        tg3_probe_ncsi(tp);
15970                        if (!vpd_vers)
15971                                tg3_read_dash_ver(tp);
15972                } else if (!vpd_vers) {
15973                        tg3_read_mgmtfw_ver(tp);
15974                }
15975        }
15976
15977        tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15978}
15979
15980static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15981{
15982        if (tg3_flag(tp, LRG_PROD_RING_CAP))
15983                return TG3_RX_RET_MAX_SIZE_5717;
15984        else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15985                return TG3_RX_RET_MAX_SIZE_5700;
15986        else
15987                return TG3_RX_RET_MAX_SIZE_5705;
15988}
15989
15990static const struct pci_device_id tg3_write_reorder_chipsets[] = {
15991        { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15992        { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15993        { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15994        { },
15995};
15996
15997static struct pci_dev *tg3_find_peer(struct tg3 *tp)
15998{
15999        struct pci_dev *peer;
16000        unsigned int func, devnr = tp->pdev->devfn & ~7;
16001
16002        for (func = 0; func < 8; func++) {
16003                peer = pci_get_slot(tp->pdev->bus, devnr | func);
16004                if (peer && peer != tp->pdev)
16005                        break;
16006                pci_dev_put(peer);
16007        }
16008        /* 5704 can be configured in single-port mode, set peer to
16009         * tp->pdev in that case.
16010         */
16011        if (!peer) {
16012                peer = tp->pdev;
16013                return peer;
16014        }
16015
16016        /*
16017         * We don't need to keep the refcount elevated; there's no way
16018         * to remove one half of this device without removing the other
16019         */
16020        pci_dev_put(peer);
16021
16022        return peer;
16023}
16024
16025static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16026{
16027        tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16028        if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16029                u32 reg;
16030
16031                /* All devices that use the alternate
16032                 * ASIC REV location have a CPMU.
16033                 */
16034                tg3_flag_set(tp, CPMU_PRESENT);
16035
16036                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16037                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16038                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16039                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16040                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16041                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16042                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16043                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16044                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16045                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16046                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16047                        reg = TG3PCI_GEN2_PRODID_ASICREV;
16048                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16049                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16050                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16051                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16052                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16053                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16054                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16055                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16056                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16057                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16058                        reg = TG3PCI_GEN15_PRODID_ASICREV;
16059                else
16060                        reg = TG3PCI_PRODID_ASICREV;
16061
16062                pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16063        }
16064
16065        /* Wrong chip ID in 5752 A0. This code can be removed later
16066         * as A0 is not in production.
16067         */
16068        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16069                tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16070
16071        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16072                tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16073
16074        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16075            tg3_asic_rev(tp) == ASIC_REV_5719 ||
16076            tg3_asic_rev(tp) == ASIC_REV_5720)
16077                tg3_flag_set(tp, 5717_PLUS);
16078
16079        if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16080            tg3_asic_rev(tp) == ASIC_REV_57766)
16081                tg3_flag_set(tp, 57765_CLASS);
16082
16083        if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16084             tg3_asic_rev(tp) == ASIC_REV_5762)
16085                tg3_flag_set(tp, 57765_PLUS);
16086
16087        /* Intentionally exclude ASIC_REV_5906 */
16088        if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16089            tg3_asic_rev(tp) == ASIC_REV_5787 ||
16090            tg3_asic_rev(tp) == ASIC_REV_5784 ||
16091            tg3_asic_rev(tp) == ASIC_REV_5761 ||
16092            tg3_asic_rev(tp) == ASIC_REV_5785 ||
16093            tg3_asic_rev(tp) == ASIC_REV_57780 ||
16094            tg3_flag(tp, 57765_PLUS))
16095                tg3_flag_set(tp, 5755_PLUS);
16096
16097        if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16098            tg3_asic_rev(tp) == ASIC_REV_5714)
16099                tg3_flag_set(tp, 5780_CLASS);
16100
16101        if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16102            tg3_asic_rev(tp) == ASIC_REV_5752 ||
16103            tg3_asic_rev(tp) == ASIC_REV_5906 ||
16104            tg3_flag(tp, 5755_PLUS) ||
16105            tg3_flag(tp, 5780_CLASS))
16106                tg3_flag_set(tp, 5750_PLUS);
16107
16108        if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16109            tg3_flag(tp, 5750_PLUS))
16110                tg3_flag_set(tp, 5705_PLUS);
16111}
16112
16113static bool tg3_10_100_only_device(struct tg3 *tp,
16114                                   const struct pci_device_id *ent)
16115{
16116        u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16117
16118        if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16119             (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16120            (tp->phy_flags & TG3_PHYFLG_IS_FET))
16121                return true;
16122
16123        if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16124                if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16125                        if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16126                                return true;
16127                } else {
16128                        return true;
16129                }
16130        }
16131
16132        return false;
16133}
16134
16135static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16136{
16137        u32 misc_ctrl_reg;
16138        u32 pci_state_reg, grc_misc_cfg;
16139        u32 val;
16140        u16 pci_cmd;
16141        int err;
16142
16143        /* Force memory write invalidate off.  If we leave it on,
16144         * then on 5700_BX chips we have to enable a workaround.
16145         * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16146         * to match the cacheline size.  The Broadcom driver have this
16147         * workaround but turns MWI off all the times so never uses
16148         * it.  This seems to suggest that the workaround is insufficient.
16149         */
16150        pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16151        pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16152        pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16153
16154        /* Important! -- Make sure register accesses are byteswapped
16155         * correctly.  Also, for those chips that require it, make
16156         * sure that indirect register accesses are enabled before
16157         * the first operation.
16158         */
16159        pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16160                              &misc_ctrl_reg);
16161        tp->misc_host_ctrl |= (misc_ctrl_reg &
16162                               MISC_HOST_CTRL_CHIPREV);
16163        pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16164                               tp->misc_host_ctrl);
16165
16166        tg3_detect_asic_rev(tp, misc_ctrl_reg);
16167
16168        /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16169         * we need to disable memory and use config. cycles
16170         * only to access all registers. The 5702/03 chips
16171         * can mistakenly decode the special cycles from the
16172         * ICH chipsets as memory write cycles, causing corruption
16173         * of register and memory space. Only certain ICH bridges
16174         * will drive special cycles with non-zero data during the
16175         * address phase which can fall within the 5703's address
16176         * range. This is not an ICH bug as the PCI spec allows
16177         * non-zero address during special cycles. However, only
16178         * these ICH bridges are known to drive non-zero addresses
16179         * during special cycles.
16180         *
16181         * Since special cycles do not cross PCI bridges, we only
16182         * enable this workaround if the 5703 is on the secondary
16183         * bus of these ICH bridges.
16184         */
16185        if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16186            (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16187                static struct tg3_dev_id {
16188                        u32     vendor;
16189                        u32     device;
16190                        u32     rev;
16191                } ich_chipsets[] = {
16192                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16193                          PCI_ANY_ID },
16194                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16195                          PCI_ANY_ID },
16196                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16197                          0xa },
16198                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16199                          PCI_ANY_ID },
16200                        { },
16201                };
16202                struct tg3_dev_id *pci_id = &ich_chipsets[0];
16203                struct pci_dev *bridge = NULL;
16204
16205                while (pci_id->vendor != 0) {
16206                        bridge = pci_get_device(pci_id->vendor, pci_id->device,
16207                                                bridge);
16208                        if (!bridge) {
16209                                pci_id++;
16210                                continue;
16211                        }
16212                        if (pci_id->rev != PCI_ANY_ID) {
16213                                if (bridge->revision > pci_id->rev)
16214                                        continue;
16215                        }
16216                        if (bridge->subordinate &&
16217                            (bridge->subordinate->number ==
16218                             tp->pdev->bus->number)) {
16219                                tg3_flag_set(tp, ICH_WORKAROUND);
16220                                pci_dev_put(bridge);
16221                                break;
16222                        }
16223                }
16224        }
16225
16226        if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16227                static struct tg3_dev_id {
16228                        u32     vendor;
16229                        u32     device;
16230                } bridge_chipsets[] = {
16231                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16232                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16233                        { },
16234                };
16235                struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16236                struct pci_dev *bridge = NULL;
16237
16238                while (pci_id->vendor != 0) {
16239                        bridge = pci_get_device(pci_id->vendor,
16240                                                pci_id->device,
16241                                                bridge);
16242                        if (!bridge) {
16243                                pci_id++;
16244                                continue;
16245                        }
16246                        if (bridge->subordinate &&
16247                            (bridge->subordinate->number <=
16248                             tp->pdev->bus->number) &&
16249                            (bridge->subordinate->busn_res.end >=
16250                             tp->pdev->bus->number)) {
16251                                tg3_flag_set(tp, 5701_DMA_BUG);
16252                                pci_dev_put(bridge);
16253                                break;
16254                        }
16255                }
16256        }
16257
16258        /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16259         * DMA addresses > 40-bit. This bridge may have other additional
16260         * 57xx devices behind it in some 4-port NIC designs for example.
16261         * Any tg3 device found behind the bridge will also need the 40-bit
16262         * DMA workaround.
16263         */
16264        if (tg3_flag(tp, 5780_CLASS)) {
16265                tg3_flag_set(tp, 40BIT_DMA_BUG);
16266                tp->msi_cap = tp->pdev->msi_cap;
16267        } else {
16268                struct pci_dev *bridge = NULL;
16269
16270                do {
16271                        bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16272                                                PCI_DEVICE_ID_SERVERWORKS_EPB,
16273                                                bridge);
16274                        if (bridge && bridge->subordinate &&
16275                            (bridge->subordinate->number <=
16276                             tp->pdev->bus->number) &&
16277                            (bridge->subordinate->busn_res.end >=
16278                             tp->pdev->bus->number)) {
16279                                tg3_flag_set(tp, 40BIT_DMA_BUG);
16280                                pci_dev_put(bridge);
16281                                break;
16282                        }
16283                } while (bridge);
16284        }
16285
16286        if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16287            tg3_asic_rev(tp) == ASIC_REV_5714)
16288                tp->pdev_peer = tg3_find_peer(tp);
16289
16290        /* Determine TSO capabilities */
16291        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16292                ; /* Do nothing. HW bug. */
16293        else if (tg3_flag(tp, 57765_PLUS))
16294                tg3_flag_set(tp, HW_TSO_3);
16295        else if (tg3_flag(tp, 5755_PLUS) ||
16296                 tg3_asic_rev(tp) == ASIC_REV_5906)
16297                tg3_flag_set(tp, HW_TSO_2);
16298        else if (tg3_flag(tp, 5750_PLUS)) {
16299                tg3_flag_set(tp, HW_TSO_1);
16300                tg3_flag_set(tp, TSO_BUG);
16301                if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16302                    tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16303                        tg3_flag_clear(tp, TSO_BUG);
16304        } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16305                   tg3_asic_rev(tp) != ASIC_REV_5701 &&
16306                   tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16307                tg3_flag_set(tp, FW_TSO);
16308                tg3_flag_set(tp, TSO_BUG);
16309                if (tg3_asic_rev(tp) == ASIC_REV_5705)
16310                        tp->fw_needed = FIRMWARE_TG3TSO5;
16311                else
16312                        tp->fw_needed = FIRMWARE_TG3TSO;
16313        }
16314
16315        /* Selectively allow TSO based on operating conditions */
16316        if (tg3_flag(tp, HW_TSO_1) ||
16317            tg3_flag(tp, HW_TSO_2) ||
16318            tg3_flag(tp, HW_TSO_3) ||
16319            tg3_flag(tp, FW_TSO)) {
16320                /* For firmware TSO, assume ASF is disabled.
16321                 * We'll disable TSO later if we discover ASF
16322                 * is enabled in tg3_get_eeprom_hw_cfg().
16323                 */
16324                tg3_flag_set(tp, TSO_CAPABLE);
16325        } else {
16326                tg3_flag_clear(tp, TSO_CAPABLE);
16327                tg3_flag_clear(tp, TSO_BUG);
16328                tp->fw_needed = NULL;
16329        }
16330
16331        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16332                tp->fw_needed = FIRMWARE_TG3;
16333
16334        if (tg3_asic_rev(tp) == ASIC_REV_57766)
16335                tp->fw_needed = FIRMWARE_TG357766;
16336
16337        tp->irq_max = 1;
16338
16339        if (tg3_flag(tp, 5750_PLUS)) {
16340                tg3_flag_set(tp, SUPPORT_MSI);
16341                if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16342                    tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16343                    (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16344                     tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16345                     tp->pdev_peer == tp->pdev))
16346                        tg3_flag_clear(tp, SUPPORT_MSI);
16347
16348                if (tg3_flag(tp, 5755_PLUS) ||
16349                    tg3_asic_rev(tp) == ASIC_REV_5906) {
16350                        tg3_flag_set(tp, 1SHOT_MSI);
16351                }
16352
16353                if (tg3_flag(tp, 57765_PLUS)) {
16354                        tg3_flag_set(tp, SUPPORT_MSIX);
16355                        tp->irq_max = TG3_IRQ_MAX_VECS;
16356                }
16357        }
16358
16359        tp->txq_max = 1;
16360        tp->rxq_max = 1;
16361        if (tp->irq_max > 1) {
16362                tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16363                tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16364
16365                if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16366                    tg3_asic_rev(tp) == ASIC_REV_5720)
16367                        tp->txq_max = tp->irq_max - 1;
16368        }
16369
16370        if (tg3_flag(tp, 5755_PLUS) ||
16371            tg3_asic_rev(tp) == ASIC_REV_5906)
16372                tg3_flag_set(tp, SHORT_DMA_BUG);
16373
16374        if (tg3_asic_rev(tp) == ASIC_REV_5719)
16375                tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16376
16377        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16378            tg3_asic_rev(tp) == ASIC_REV_5719 ||
16379            tg3_asic_rev(tp) == ASIC_REV_5720 ||
16380            tg3_asic_rev(tp) == ASIC_REV_5762)
16381                tg3_flag_set(tp, LRG_PROD_RING_CAP);
16382
16383        if (tg3_flag(tp, 57765_PLUS) &&
16384            tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16385                tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16386
16387        if (!tg3_flag(tp, 5705_PLUS) ||
16388            tg3_flag(tp, 5780_CLASS) ||
16389            tg3_flag(tp, USE_JUMBO_BDFLAG))
16390                tg3_flag_set(tp, JUMBO_CAPABLE);
16391
16392        pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16393                              &pci_state_reg);
16394
16395        if (pci_is_pcie(tp->pdev)) {
16396                u16 lnkctl;
16397
16398                tg3_flag_set(tp, PCI_EXPRESS);
16399
16400                pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16401                if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16402                        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16403                                tg3_flag_clear(tp, HW_TSO_2);
16404                                tg3_flag_clear(tp, TSO_CAPABLE);
16405                        }
16406                        if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16407                            tg3_asic_rev(tp) == ASIC_REV_5761 ||
16408                            tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16409                            tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16410                                tg3_flag_set(tp, CLKREQ_BUG);
16411                } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16412                        tg3_flag_set(tp, L1PLLPD_EN);
16413                }
16414        } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16415                /* BCM5785 devices are effectively PCIe devices, and should
16416                 * follow PCIe codepaths, but do not have a PCIe capabilities
16417                 * section.
16418                 */
16419                tg3_flag_set(tp, PCI_EXPRESS);
16420        } else if (!tg3_flag(tp, 5705_PLUS) ||
16421                   tg3_flag(tp, 5780_CLASS)) {
16422                tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16423                if (!tp->pcix_cap) {
16424                        dev_err(&tp->pdev->dev,
16425                                "Cannot find PCI-X capability, aborting\n");
16426                        return -EIO;
16427                }
16428
16429                if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16430                        tg3_flag_set(tp, PCIX_MODE);
16431        }
16432
16433        /* If we have an AMD 762 or VIA K8T800 chipset, write
16434         * reordering to the mailbox registers done by the host
16435         * controller can cause major troubles.  We read back from
16436         * every mailbox register write to force the writes to be
16437         * posted to the chip in order.
16438         */
16439        if (pci_dev_present(tg3_write_reorder_chipsets) &&
16440            !tg3_flag(tp, PCI_EXPRESS))
16441                tg3_flag_set(tp, MBOX_WRITE_REORDER);
16442
16443        pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16444                             &tp->pci_cacheline_sz);
16445        pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16446                             &tp->pci_lat_timer);
16447        if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16448            tp->pci_lat_timer < 64) {
16449                tp->pci_lat_timer = 64;
16450                pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16451                                      tp->pci_lat_timer);
16452        }
16453
16454        /* Important! -- It is critical that the PCI-X hw workaround
16455         * situation is decided before the first MMIO register access.
16456         */
16457        if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16458                /* 5700 BX chips need to have their TX producer index
16459                 * mailboxes written twice to workaround a bug.
16460                 */
16461                tg3_flag_set(tp, TXD_MBOX_HWBUG);
16462
16463                /* If we are in PCI-X mode, enable register write workaround.
16464                 *
16465                 * The workaround is to use indirect register accesses
16466                 * for all chip writes not to mailbox registers.
16467                 */
16468                if (tg3_flag(tp, PCIX_MODE)) {
16469                        u32 pm_reg;
16470
16471                        tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16472
16473                        /* The chip can have it's power management PCI config
16474                         * space registers clobbered due to this bug.
16475                         * So explicitly force the chip into D0 here.
16476                         */
16477                        pci_read_config_dword(tp->pdev,
16478                                              tp->pdev->pm_cap + PCI_PM_CTRL,
16479                                              &pm_reg);
16480                        pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16481                        pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16482                        pci_write_config_dword(tp->pdev,
16483                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16484                                               pm_reg);
16485
16486                        /* Also, force SERR#/PERR# in PCI command. */
16487                        pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16488                        pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16489                        pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16490                }
16491        }
16492
16493        if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16494                tg3_flag_set(tp, PCI_HIGH_SPEED);
16495        if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16496                tg3_flag_set(tp, PCI_32BIT);
16497
16498        /* Chip-specific fixup from Broadcom driver */
16499        if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16500            (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16501                pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16502                pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16503        }
16504
16505        /* Default fast path register access methods */
16506        tp->read32 = tg3_read32;
16507        tp->write32 = tg3_write32;
16508        tp->read32_mbox = tg3_read32;
16509        tp->write32_mbox = tg3_write32;
16510        tp->write32_tx_mbox = tg3_write32;
16511        tp->write32_rx_mbox = tg3_write32;
16512
16513        /* Various workaround register access methods */
16514        if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16515                tp->write32 = tg3_write_indirect_reg32;
16516        else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16517                 (tg3_flag(tp, PCI_EXPRESS) &&
16518                  tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16519                /*
16520                 * Back to back register writes can cause problems on these
16521                 * chips, the workaround is to read back all reg writes
16522                 * except those to mailbox regs.
16523                 *
16524                 * See tg3_write_indirect_reg32().
16525                 */
16526                tp->write32 = tg3_write_flush_reg32;
16527        }
16528
16529        if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16530                tp->write32_tx_mbox = tg3_write32_tx_mbox;
16531                if (tg3_flag(tp, MBOX_WRITE_REORDER))
16532                        tp->write32_rx_mbox = tg3_write_flush_reg32;
16533        }
16534
16535        if (tg3_flag(tp, ICH_WORKAROUND)) {
16536                tp->read32 = tg3_read_indirect_reg32;
16537                tp->write32 = tg3_write_indirect_reg32;
16538                tp->read32_mbox = tg3_read_indirect_mbox;
16539                tp->write32_mbox = tg3_write_indirect_mbox;
16540                tp->write32_tx_mbox = tg3_write_indirect_mbox;
16541                tp->write32_rx_mbox = tg3_write_indirect_mbox;
16542
16543                iounmap(tp->regs);
16544                tp->regs = NULL;
16545
16546                pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16547                pci_cmd &= ~PCI_COMMAND_MEMORY;
16548                pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16549        }
16550        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16551                tp->read32_mbox = tg3_read32_mbox_5906;
16552                tp->write32_mbox = tg3_write32_mbox_5906;
16553                tp->write32_tx_mbox = tg3_write32_mbox_5906;
16554                tp->write32_rx_mbox = tg3_write32_mbox_5906;
16555        }
16556
16557        if (tp->write32 == tg3_write_indirect_reg32 ||
16558            (tg3_flag(tp, PCIX_MODE) &&
16559             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16560              tg3_asic_rev(tp) == ASIC_REV_5701)))
16561                tg3_flag_set(tp, SRAM_USE_CONFIG);
16562
16563        /* The memory arbiter has to be enabled in order for SRAM accesses
16564         * to succeed.  Normally on powerup the tg3 chip firmware will make
16565         * sure it is enabled, but other entities such as system netboot
16566         * code might disable it.
16567         */
16568        val = tr32(MEMARB_MODE);
16569        tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16570
16571        tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16572        if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16573            tg3_flag(tp, 5780_CLASS)) {
16574                if (tg3_flag(tp, PCIX_MODE)) {
16575                        pci_read_config_dword(tp->pdev,
16576                                              tp->pcix_cap + PCI_X_STATUS,
16577                                              &val);
16578                        tp->pci_fn = val & 0x7;
16579                }
16580        } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16581                   tg3_asic_rev(tp) == ASIC_REV_5719 ||
16582                   tg3_asic_rev(tp) == ASIC_REV_5720) {
16583                tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16584                if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16585                        val = tr32(TG3_CPMU_STATUS);
16586
16587                if (tg3_asic_rev(tp) == ASIC_REV_5717)
16588                        tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16589                else
16590                        tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16591                                     TG3_CPMU_STATUS_FSHFT_5719;
16592        }
16593
16594        if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16595                tp->write32_tx_mbox = tg3_write_flush_reg32;
16596                tp->write32_rx_mbox = tg3_write_flush_reg32;
16597        }
16598
16599        /* Get eeprom hw config before calling tg3_set_power_state().
16600         * In particular, the TG3_FLAG_IS_NIC flag must be
16601         * determined before calling tg3_set_power_state() so that
16602         * we know whether or not to switch out of Vaux power.
16603         * When the flag is set, it means that GPIO1 is used for eeprom
16604         * write protect and also implies that it is a LOM where GPIOs
16605         * are not used to switch power.
16606         */
16607        tg3_get_eeprom_hw_cfg(tp);
16608
16609        if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16610                tg3_flag_clear(tp, TSO_CAPABLE);
16611                tg3_flag_clear(tp, TSO_BUG);
16612                tp->fw_needed = NULL;
16613        }
16614
16615        if (tg3_flag(tp, ENABLE_APE)) {
16616                /* Allow reads and writes to the
16617                 * APE register and memory space.
16618                 */
16619                pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16620                                 PCISTATE_ALLOW_APE_SHMEM_WR |
16621                                 PCISTATE_ALLOW_APE_PSPACE_WR;
16622                pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16623                                       pci_state_reg);
16624
16625                tg3_ape_lock_init(tp);
16626        }
16627
16628        /* Set up tp->grc_local_ctrl before calling
16629         * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16630         * will bring 5700's external PHY out of reset.
16631         * It is also used as eeprom write protect on LOMs.
16632         */
16633        tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16634        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16635            tg3_flag(tp, EEPROM_WRITE_PROT))
16636                tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16637                                       GRC_LCLCTRL_GPIO_OUTPUT1);
16638        /* Unused GPIO3 must be driven as output on 5752 because there
16639         * are no pull-up resistors on unused GPIO pins.
16640         */
16641        else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16642                tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16643
16644        if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16645            tg3_asic_rev(tp) == ASIC_REV_57780 ||
16646            tg3_flag(tp, 57765_CLASS))
16647                tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16648
16649        if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16650            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16651                /* Turn off the debug UART. */
16652                tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16653                if (tg3_flag(tp, IS_NIC))
16654                        /* Keep VMain power. */
16655                        tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16656                                              GRC_LCLCTRL_GPIO_OUTPUT0;
16657        }
16658
16659        if (tg3_asic_rev(tp) == ASIC_REV_5762)
16660                tp->grc_local_ctrl |=
16661                        tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16662
16663        /* Switch out of Vaux if it is a NIC */
16664        tg3_pwrsrc_switch_to_vmain(tp);
16665
16666        /* Derive initial jumbo mode from MTU assigned in
16667         * ether_setup() via the alloc_etherdev() call
16668         */
16669        if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16670                tg3_flag_set(tp, JUMBO_RING_ENABLE);
16671
16672        /* Determine WakeOnLan speed to use. */
16673        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16674            tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16675            tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16676            tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16677                tg3_flag_clear(tp, WOL_SPEED_100MB);
16678        } else {
16679                tg3_flag_set(tp, WOL_SPEED_100MB);
16680        }
16681
16682        if (tg3_asic_rev(tp) == ASIC_REV_5906)
16683                tp->phy_flags |= TG3_PHYFLG_IS_FET;
16684
16685        /* A few boards don't want Ethernet@WireSpeed phy feature */
16686        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16687            (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16688             (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16689             (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16690            (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16691            (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16692                tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16693
16694        if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16695            tg3_chip_rev(tp) == CHIPREV_5704_AX)
16696                tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16697        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16698                tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16699
16700        if (tg3_flag(tp, 5705_PLUS) &&
16701            !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16702            tg3_asic_rev(tp) != ASIC_REV_5785 &&
16703            tg3_asic_rev(tp) != ASIC_REV_57780 &&
16704            !tg3_flag(tp, 57765_PLUS)) {
16705                if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16706                    tg3_asic_rev(tp) == ASIC_REV_5787 ||
16707                    tg3_asic_rev(tp) == ASIC_REV_5784 ||
16708                    tg3_asic_rev(tp) == ASIC_REV_5761) {
16709                        if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16710                            tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16711                                tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16712                        if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16713                                tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16714                } else
16715                        tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16716        }
16717
16718        if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16719            tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16720                tp->phy_otp = tg3_read_otp_phycfg(tp);
16721                if (tp->phy_otp == 0)
16722                        tp->phy_otp = TG3_OTP_DEFAULT;
16723        }
16724
16725        if (tg3_flag(tp, CPMU_PRESENT))
16726                tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16727        else
16728                tp->mi_mode = MAC_MI_MODE_BASE;
16729
16730        tp->coalesce_mode = 0;
16731        if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16732            tg3_chip_rev(tp) != CHIPREV_5700_BX)
16733                tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16734
16735        /* Set these bits to enable statistics workaround. */
16736        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16737            tg3_asic_rev(tp) == ASIC_REV_5762 ||
16738            tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16739            tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16740                tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16741                tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16742        }
16743
16744        if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16745            tg3_asic_rev(tp) == ASIC_REV_57780)
16746                tg3_flag_set(tp, USE_PHYLIB);
16747
16748        err = tg3_mdio_init(tp);
16749        if (err)
16750                return err;
16751
16752        /* Initialize data/descriptor byte/word swapping. */
16753        val = tr32(GRC_MODE);
16754        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16755            tg3_asic_rev(tp) == ASIC_REV_5762)
16756                val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16757                        GRC_MODE_WORD_SWAP_B2HRX_DATA |
16758                        GRC_MODE_B2HRX_ENABLE |
16759                        GRC_MODE_HTX2B_ENABLE |
16760                        GRC_MODE_HOST_STACKUP);
16761        else
16762                val &= GRC_MODE_HOST_STACKUP;
16763
16764        tw32(GRC_MODE, val | tp->grc_mode);
16765
16766        tg3_switch_clocks(tp);
16767
16768        /* Clear this out for sanity. */
16769        tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16770
16771        /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16772        tw32(TG3PCI_REG_BASE_ADDR, 0);
16773
16774        pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16775                              &pci_state_reg);
16776        if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16777            !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16778                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16779                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16780                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16781                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16782                        void __iomem *sram_base;
16783
16784                        /* Write some dummy words into the SRAM status block
16785                         * area, see if it reads back correctly.  If the return
16786                         * value is bad, force enable the PCIX workaround.
16787                         */
16788                        sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16789
16790                        writel(0x00000000, sram_base);
16791                        writel(0x00000000, sram_base + 4);
16792                        writel(0xffffffff, sram_base + 4);
16793                        if (readl(sram_base) != 0x00000000)
16794                                tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16795                }
16796        }
16797
16798        udelay(50);
16799        tg3_nvram_init(tp);
16800
16801        /* If the device has an NVRAM, no need to load patch firmware */
16802        if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16803            !tg3_flag(tp, NO_NVRAM))
16804                tp->fw_needed = NULL;
16805
16806        grc_misc_cfg = tr32(GRC_MISC_CFG);
16807        grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16808
16809        if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16810            (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16811             grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16812                tg3_flag_set(tp, IS_5788);
16813
16814        if (!tg3_flag(tp, IS_5788) &&
16815            tg3_asic_rev(tp) != ASIC_REV_5700)
16816                tg3_flag_set(tp, TAGGED_STATUS);
16817        if (tg3_flag(tp, TAGGED_STATUS)) {
16818                tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16819                                      HOSTCC_MODE_CLRTICK_TXBD);
16820
16821                tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16822                pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16823                                       tp->misc_host_ctrl);
16824        }
16825
16826        /* Preserve the APE MAC_MODE bits */
16827        if (tg3_flag(tp, ENABLE_APE))
16828                tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16829        else
16830                tp->mac_mode = 0;
16831
16832        if (tg3_10_100_only_device(tp, ent))
16833                tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16834
16835        err = tg3_phy_probe(tp);
16836        if (err) {
16837                dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16838                /* ... but do not return immediately ... */
16839                tg3_mdio_fini(tp);
16840        }
16841
16842        tg3_read_vpd(tp);
16843        tg3_read_fw_ver(tp);
16844
16845        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16846                tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16847        } else {
16848                if (tg3_asic_rev(tp) == ASIC_REV_5700)
16849                        tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16850                else
16851                        tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16852        }
16853
16854        /* 5700 {AX,BX} chips have a broken status block link
16855         * change bit implementation, so we must use the
16856         * status register in those cases.
16857         */
16858        if (tg3_asic_rev(tp) == ASIC_REV_5700)
16859                tg3_flag_set(tp, USE_LINKCHG_REG);
16860        else
16861                tg3_flag_clear(tp, USE_LINKCHG_REG);
16862
16863        /* The led_ctrl is set during tg3_phy_probe, here we might
16864         * have to force the link status polling mechanism based
16865         * upon subsystem IDs.
16866         */
16867        if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16868            tg3_asic_rev(tp) == ASIC_REV_5701 &&
16869            !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16870                tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16871                tg3_flag_set(tp, USE_LINKCHG_REG);
16872        }
16873
16874        /* For all SERDES we poll the MAC status register. */
16875        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16876                tg3_flag_set(tp, POLL_SERDES);
16877        else
16878                tg3_flag_clear(tp, POLL_SERDES);
16879
16880        if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16881                tg3_flag_set(tp, POLL_CPMU_LINK);
16882
16883        tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16884        tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16885        if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16886            tg3_flag(tp, PCIX_MODE)) {
16887                tp->rx_offset = NET_SKB_PAD;
16888#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16889                tp->rx_copy_thresh = ~(u16)0;
16890#endif
16891        }
16892
16893        tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16894        tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16895        tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16896
16897        tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16898
16899        /* Increment the rx prod index on the rx std ring by at most
16900         * 8 for these chips to workaround hw errata.
16901         */
16902        if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16903            tg3_asic_rev(tp) == ASIC_REV_5752 ||
16904            tg3_asic_rev(tp) == ASIC_REV_5755)
16905                tp->rx_std_max_post = 8;
16906
16907        if (tg3_flag(tp, ASPM_WORKAROUND))
16908                tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16909                                     PCIE_PWR_MGMT_L1_THRESH_MSK;
16910
16911        return err;
16912}
16913
16914#ifdef CONFIG_SPARC
16915static int tg3_get_macaddr_sparc(struct tg3 *tp)
16916{
16917        struct net_device *dev = tp->dev;
16918        struct pci_dev *pdev = tp->pdev;
16919        struct device_node *dp = pci_device_to_OF_node(pdev);
16920        const unsigned char *addr;
16921        int len;
16922
16923        addr = of_get_property(dp, "local-mac-address", &len);
16924        if (addr && len == ETH_ALEN) {
16925                memcpy(dev->dev_addr, addr, ETH_ALEN);
16926                return 0;
16927        }
16928        return -ENODEV;
16929}
16930
16931static int tg3_get_default_macaddr_sparc(struct tg3 *tp)
16932{
16933        struct net_device *dev = tp->dev;
16934
16935        memcpy(dev->dev_addr, idprom->id_ethaddr, ETH_ALEN);
16936        return 0;
16937}
16938#endif
16939
16940static int tg3_get_device_address(struct tg3 *tp)
16941{
16942        struct net_device *dev = tp->dev;
16943        u32 hi, lo, mac_offset;
16944        int addr_ok = 0;
16945        int err;
16946
16947#ifdef CONFIG_SPARC
16948        if (!tg3_get_macaddr_sparc(tp))
16949                return 0;
16950#endif
16951
16952        if (tg3_flag(tp, IS_SSB_CORE)) {
16953                err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
16954                if (!err && is_valid_ether_addr(&dev->dev_addr[0]))
16955                        return 0;
16956        }
16957
16958        mac_offset = 0x7c;
16959        if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16960            tg3_flag(tp, 5780_CLASS)) {
16961                if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16962                        mac_offset = 0xcc;
16963                if (tg3_nvram_lock(tp))
16964                        tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16965                else
16966                        tg3_nvram_unlock(tp);
16967        } else if (tg3_flag(tp, 5717_PLUS)) {
16968                if (tp->pci_fn & 1)
16969                        mac_offset = 0xcc;
16970                if (tp->pci_fn > 1)
16971                        mac_offset += 0x18c;
16972        } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16973                mac_offset = 0x10;
16974
16975        /* First try to get it from MAC address mailbox. */
16976        tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16977        if ((hi >> 16) == 0x484b) {
16978                dev->dev_addr[0] = (hi >>  8) & 0xff;
16979                dev->dev_addr[1] = (hi >>  0) & 0xff;
16980
16981                tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16982                dev->dev_addr[2] = (lo >> 24) & 0xff;
16983                dev->dev_addr[3] = (lo >> 16) & 0xff;
16984                dev->dev_addr[4] = (lo >>  8) & 0xff;
16985                dev->dev_addr[5] = (lo >>  0) & 0xff;
16986
16987                /* Some old bootcode may report a 0 MAC address in SRAM */
16988                addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
16989        }
16990        if (!addr_ok) {
16991                /* Next, try NVRAM. */
16992                if (!tg3_flag(tp, NO_NVRAM) &&
16993                    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16994                    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16995                        memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
16996                        memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
16997                }
16998                /* Finally just fetch it out of the MAC control regs. */
16999                else {
17000                        hi = tr32(MAC_ADDR_0_HIGH);
17001                        lo = tr32(MAC_ADDR_0_LOW);
17002
17003                        dev->dev_addr[5] = lo & 0xff;
17004                        dev->dev_addr[4] = (lo >> 8) & 0xff;
17005                        dev->dev_addr[3] = (lo >> 16) & 0xff;
17006                        dev->dev_addr[2] = (lo >> 24) & 0xff;
17007                        dev->dev_addr[1] = hi & 0xff;
17008                        dev->dev_addr[0] = (hi >> 8) & 0xff;
17009                }
17010        }
17011
17012        if (!is_valid_ether_addr(&dev->dev_addr[0])) {
17013#ifdef CONFIG_SPARC
17014                if (!tg3_get_default_macaddr_sparc(tp))
17015                        return 0;
17016#endif
17017                return -EINVAL;
17018        }
17019        return 0;
17020}
17021
17022#define BOUNDARY_SINGLE_CACHELINE       1
17023#define BOUNDARY_MULTI_CACHELINE        2
17024
17025static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
17026{
17027        int cacheline_size;
17028        u8 byte;
17029        int goal;
17030
17031        pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
17032        if (byte == 0)
17033                cacheline_size = 1024;
17034        else
17035                cacheline_size = (int) byte * 4;
17036
17037        /* On 5703 and later chips, the boundary bits have no
17038         * effect.
17039         */
17040        if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17041            tg3_asic_rev(tp) != ASIC_REV_5701 &&
17042            !tg3_flag(tp, PCI_EXPRESS))
17043                goto out;
17044
17045#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17046        goal = BOUNDARY_MULTI_CACHELINE;
17047#else
17048#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17049        goal = BOUNDARY_SINGLE_CACHELINE;
17050#else
17051        goal = 0;
17052#endif
17053#endif
17054
17055        if (tg3_flag(tp, 57765_PLUS)) {
17056                val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17057                goto out;
17058        }
17059
17060        if (!goal)
17061                goto out;
17062
17063        /* PCI controllers on most RISC systems tend to disconnect
17064         * when a device tries to burst across a cache-line boundary.
17065         * Therefore, letting tg3 do so just wastes PCI bandwidth.
17066         *
17067         * Unfortunately, for PCI-E there are only limited
17068         * write-side controls for this, and thus for reads
17069         * we will still get the disconnects.  We'll also waste
17070         * these PCI cycles for both read and write for chips
17071         * other than 5700 and 5701 which do not implement the
17072         * boundary bits.
17073         */
17074        if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17075                switch (cacheline_size) {
17076                case 16:
17077                case 32:
17078                case 64:
17079                case 128:
17080                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17081                                val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17082                                        DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17083                        } else {
17084                                val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17085                                        DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17086                        }
17087                        break;
17088
17089                case 256:
17090                        val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17091                                DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17092                        break;
17093
17094                default:
17095                        val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17096                                DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17097                        break;
17098                }
17099        } else if (tg3_flag(tp, PCI_EXPRESS)) {
17100                switch (cacheline_size) {
17101                case 16:
17102                case 32:
17103                case 64:
17104                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17105                                val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17106                                val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17107                                break;
17108                        }
17109                        /* fallthrough */
17110                case 128:
17111                default:
17112                        val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17113                        val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17114                        break;
17115                }
17116        } else {
17117                switch (cacheline_size) {
17118                case 16:
17119                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17120                                val |= (DMA_RWCTRL_READ_BNDRY_16 |
17121                                        DMA_RWCTRL_WRITE_BNDRY_16);
17122                                break;
17123                        }
17124                        /* fallthrough */
17125                case 32:
17126                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17127                                val |= (DMA_RWCTRL_READ_BNDRY_32 |
17128                                        DMA_RWCTRL_WRITE_BNDRY_32);
17129                                break;
17130                        }
17131                        /* fallthrough */
17132                case 64:
17133                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17134                                val |= (DMA_RWCTRL_READ_BNDRY_64 |
17135                                        DMA_RWCTRL_WRITE_BNDRY_64);
17136                                break;
17137                        }
17138                        /* fallthrough */
17139                case 128:
17140                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17141                                val |= (DMA_RWCTRL_READ_BNDRY_128 |
17142                                        DMA_RWCTRL_WRITE_BNDRY_128);
17143                                break;
17144                        }
17145                        /* fallthrough */
17146                case 256:
17147                        val |= (DMA_RWCTRL_READ_BNDRY_256 |
17148                                DMA_RWCTRL_WRITE_BNDRY_256);
17149                        break;
17150                case 512:
17151                        val |= (DMA_RWCTRL_READ_BNDRY_512 |
17152                                DMA_RWCTRL_WRITE_BNDRY_512);
17153                        break;
17154                case 1024:
17155                default:
17156                        val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17157                                DMA_RWCTRL_WRITE_BNDRY_1024);
17158                        break;
17159                }
17160        }
17161
17162out:
17163        return val;
17164}
17165
17166static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17167                           int size, bool to_device)
17168{
17169        struct tg3_internal_buffer_desc test_desc;
17170        u32 sram_dma_descs;
17171        int i, ret;
17172
17173        sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17174
17175        tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17176        tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17177        tw32(RDMAC_STATUS, 0);
17178        tw32(WDMAC_STATUS, 0);
17179
17180        tw32(BUFMGR_MODE, 0);
17181        tw32(FTQ_RESET, 0);
17182
17183        test_desc.addr_hi = ((u64) buf_dma) >> 32;
17184        test_desc.addr_lo = buf_dma & 0xffffffff;
17185        test_desc.nic_mbuf = 0x00002100;
17186        test_desc.len = size;
17187
17188        /*
17189         * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17190         * the *second* time the tg3 driver was getting loaded after an
17191         * initial scan.
17192         *
17193         * Broadcom tells me:
17194         *   ...the DMA engine is connected to the GRC block and a DMA
17195         *   reset may affect the GRC block in some unpredictable way...
17196         *   The behavior of resets to individual blocks has not been tested.
17197         *
17198         * Broadcom noted the GRC reset will also reset all sub-components.
17199         */
17200        if (to_device) {
17201                test_desc.cqid_sqid = (13 << 8) | 2;
17202
17203                tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17204                udelay(40);
17205        } else {
17206                test_desc.cqid_sqid = (16 << 8) | 7;
17207
17208                tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17209                udelay(40);
17210        }
17211        test_desc.flags = 0x00000005;
17212
17213        for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17214                u32 val;
17215
17216                val = *(((u32 *)&test_desc) + i);
17217                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17218                                       sram_dma_descs + (i * sizeof(u32)));
17219                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17220        }
17221        pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17222
17223        if (to_device)
17224                tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17225        else
17226                tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17227
17228        ret = -ENODEV;
17229        for (i = 0; i < 40; i++) {
17230                u32 val;
17231
17232                if (to_device)
17233                        val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17234                else
17235                        val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17236                if ((val & 0xffff) == sram_dma_descs) {
17237                        ret = 0;
17238                        break;
17239                }
17240
17241                udelay(100);
17242        }
17243
17244        return ret;
17245}
17246
17247#define TEST_BUFFER_SIZE        0x2000
17248
17249static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17250        { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17251        { },
17252};
17253
17254static int tg3_test_dma(struct tg3 *tp)
17255{
17256        dma_addr_t buf_dma;
17257        u32 *buf, saved_dma_rwctrl;
17258        int ret = 0;
17259
17260        buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17261                                 &buf_dma, GFP_KERNEL);
17262        if (!buf) {
17263                ret = -ENOMEM;
17264                goto out_nofree;
17265        }
17266
17267        tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17268                          (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17269
17270        tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17271
17272        if (tg3_flag(tp, 57765_PLUS))
17273                goto out;
17274
17275        if (tg3_flag(tp, PCI_EXPRESS)) {
17276                /* DMA read watermark not used on PCIE */
17277                tp->dma_rwctrl |= 0x00180000;
17278        } else if (!tg3_flag(tp, PCIX_MODE)) {
17279                if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17280                    tg3_asic_rev(tp) == ASIC_REV_5750)
17281                        tp->dma_rwctrl |= 0x003f0000;
17282                else
17283                        tp->dma_rwctrl |= 0x003f000f;
17284        } else {
17285                if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17286                    tg3_asic_rev(tp) == ASIC_REV_5704) {
17287                        u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17288                        u32 read_water = 0x7;
17289
17290                        /* If the 5704 is behind the EPB bridge, we can
17291                         * do the less restrictive ONE_DMA workaround for
17292                         * better performance.
17293                         */
17294                        if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17295                            tg3_asic_rev(tp) == ASIC_REV_5704)
17296                                tp->dma_rwctrl |= 0x8000;
17297                        else if (ccval == 0x6 || ccval == 0x7)
17298                                tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17299
17300                        if (tg3_asic_rev(tp) == ASIC_REV_5703)
17301                                read_water = 4;
17302                        /* Set bit 23 to enable PCIX hw bug fix */
17303                        tp->dma_rwctrl |=
17304                                (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17305                                (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17306                                (1 << 23);
17307                } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17308                        /* 5780 always in PCIX mode */
17309                        tp->dma_rwctrl |= 0x00144000;
17310                } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17311                        /* 5714 always in PCIX mode */
17312                        tp->dma_rwctrl |= 0x00148000;
17313                } else {
17314                        tp->dma_rwctrl |= 0x001b000f;
17315                }
17316        }
17317        if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17318                tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17319
17320        if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17321            tg3_asic_rev(tp) == ASIC_REV_5704)
17322                tp->dma_rwctrl &= 0xfffffff0;
17323
17324        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17325            tg3_asic_rev(tp) == ASIC_REV_5701) {
17326                /* Remove this if it causes problems for some boards. */
17327                tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17328
17329                /* On 5700/5701 chips, we need to set this bit.
17330                 * Otherwise the chip will issue cacheline transactions
17331                 * to streamable DMA memory with not all the byte
17332                 * enables turned on.  This is an error on several
17333                 * RISC PCI controllers, in particular sparc64.
17334                 *
17335                 * On 5703/5704 chips, this bit has been reassigned
17336                 * a different meaning.  In particular, it is used
17337                 * on those chips to enable a PCI-X workaround.
17338                 */
17339                tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17340        }
17341
17342        tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17343
17344
17345        if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17346            tg3_asic_rev(tp) != ASIC_REV_5701)
17347                goto out;
17348
17349        /* It is best to perform DMA test with maximum write burst size
17350         * to expose the 5700/5701 write DMA bug.
17351         */
17352        saved_dma_rwctrl = tp->dma_rwctrl;
17353        tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17354        tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17355
17356        while (1) {
17357                u32 *p = buf, i;
17358
17359                for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17360                        p[i] = i;
17361
17362                /* Send the buffer to the chip. */
17363                ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17364                if (ret) {
17365                        dev_err(&tp->pdev->dev,
17366                                "%s: Buffer write failed. err = %d\n",
17367                                __func__, ret);
17368                        break;
17369                }
17370
17371                /* Now read it back. */
17372                ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17373                if (ret) {
17374                        dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17375                                "err = %d\n", __func__, ret);
17376                        break;
17377                }
17378
17379                /* Verify it. */
17380                for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17381                        if (p[i] == i)
17382                                continue;
17383
17384                        if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17385                            DMA_RWCTRL_WRITE_BNDRY_16) {
17386                                tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17387                                tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17388                                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17389                                break;
17390                        } else {
17391                                dev_err(&tp->pdev->dev,
17392                                        "%s: Buffer corrupted on read back! "
17393                                        "(%d != %d)\n", __func__, p[i], i);
17394                                ret = -ENODEV;
17395                                goto out;
17396                        }
17397                }
17398
17399                if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17400                        /* Success. */
17401                        ret = 0;
17402                        break;
17403                }
17404        }
17405        if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17406            DMA_RWCTRL_WRITE_BNDRY_16) {
17407                /* DMA test passed without adjusting DMA boundary,
17408                 * now look for chipsets that are known to expose the
17409                 * DMA bug without failing the test.
17410                 */
17411                if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17412                        tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17413                        tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17414                } else {
17415                        /* Safe to use the calculated DMA boundary. */
17416                        tp->dma_rwctrl = saved_dma_rwctrl;
17417                }
17418
17419                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17420        }
17421
17422out:
17423        dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17424out_nofree:
17425        return ret;
17426}
17427
17428static void tg3_init_bufmgr_config(struct tg3 *tp)
17429{
17430        if (tg3_flag(tp, 57765_PLUS)) {
17431                tp->bufmgr_config.mbuf_read_dma_low_water =
17432                        DEFAULT_MB_RDMA_LOW_WATER_5705;
17433                tp->bufmgr_config.mbuf_mac_rx_low_water =
17434                        DEFAULT_MB_MACRX_LOW_WATER_57765;
17435                tp->bufmgr_config.mbuf_high_water =
17436                        DEFAULT_MB_HIGH_WATER_57765;
17437
17438                tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17439                        DEFAULT_MB_RDMA_LOW_WATER_5705;
17440                tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17441                        DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17442                tp->bufmgr_config.mbuf_high_water_jumbo =
17443                        DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17444        } else if (tg3_flag(tp, 5705_PLUS)) {
17445                tp->bufmgr_config.mbuf_read_dma_low_water =
17446                        DEFAULT_MB_RDMA_LOW_WATER_5705;
17447                tp->bufmgr_config.mbuf_mac_rx_low_water =
17448                        DEFAULT_MB_MACRX_LOW_WATER_5705;
17449                tp->bufmgr_config.mbuf_high_water =
17450                        DEFAULT_MB_HIGH_WATER_5705;
17451                if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17452                        tp->bufmgr_config.mbuf_mac_rx_low_water =
17453                                DEFAULT_MB_MACRX_LOW_WATER_5906;
17454                        tp->bufmgr_config.mbuf_high_water =
17455                                DEFAULT_MB_HIGH_WATER_5906;
17456                }
17457
17458                tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17459                        DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17460                tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17461                        DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17462                tp->bufmgr_config.mbuf_high_water_jumbo =
17463                        DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17464        } else {
17465                tp->bufmgr_config.mbuf_read_dma_low_water =
17466                        DEFAULT_MB_RDMA_LOW_WATER;
17467                tp->bufmgr_config.mbuf_mac_rx_low_water =
17468                        DEFAULT_MB_MACRX_LOW_WATER;
17469                tp->bufmgr_config.mbuf_high_water =
17470                        DEFAULT_MB_HIGH_WATER;
17471
17472                tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17473                        DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17474                tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17475                        DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17476                tp->bufmgr_config.mbuf_high_water_jumbo =
17477                        DEFAULT_MB_HIGH_WATER_JUMBO;
17478        }
17479
17480        tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17481        tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17482}
17483
17484static char *tg3_phy_string(struct tg3 *tp)
17485{
17486        switch (tp->phy_id & TG3_PHY_ID_MASK) {
17487        case TG3_PHY_ID_BCM5400:        return "5400";
17488        case TG3_PHY_ID_BCM5401:        return "5401";
17489        case TG3_PHY_ID_BCM5411:        return "5411";
17490        case TG3_PHY_ID_BCM5701:        return "5701";
17491        case TG3_PHY_ID_BCM5703:        return "5703";
17492        case TG3_PHY_ID_BCM5704:        return "5704";
17493        case TG3_PHY_ID_BCM5705:        return "5705";
17494        case TG3_PHY_ID_BCM5750:        return "5750";
17495        case TG3_PHY_ID_BCM5752:        return "5752";
17496        case TG3_PHY_ID_BCM5714:        return "5714";
17497        case TG3_PHY_ID_BCM5780:        return "5780";
17498        case TG3_PHY_ID_BCM5755:        return "5755";
17499        case TG3_PHY_ID_BCM5787:        return "5787";
17500        case TG3_PHY_ID_BCM5784:        return "5784";
17501        case TG3_PHY_ID_BCM5756:        return "5722/5756";
17502        case TG3_PHY_ID_BCM5906:        return "5906";
17503        case TG3_PHY_ID_BCM5761:        return "5761";
17504        case TG3_PHY_ID_BCM5718C:       return "5718C";
17505        case TG3_PHY_ID_BCM5718S:       return "5718S";
17506        case TG3_PHY_ID_BCM57765:       return "57765";
17507        case TG3_PHY_ID_BCM5719C:       return "5719C";
17508        case TG3_PHY_ID_BCM5720C:       return "5720C";
17509        case TG3_PHY_ID_BCM5762:        return "5762C";
17510        case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17511        case 0:                 return "serdes";
17512        default:                return "unknown";
17513        }
17514}
17515
17516static char *tg3_bus_string(struct tg3 *tp, char *str)
17517{
17518        if (tg3_flag(tp, PCI_EXPRESS)) {
17519                strcpy(str, "PCI Express");
17520                return str;
17521        } else if (tg3_flag(tp, PCIX_MODE)) {
17522                u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17523
17524                strcpy(str, "PCIX:");
17525
17526                if ((clock_ctrl == 7) ||
17527                    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17528                     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17529                        strcat(str, "133MHz");
17530                else if (clock_ctrl == 0)
17531                        strcat(str, "33MHz");
17532                else if (clock_ctrl == 2)
17533                        strcat(str, "50MHz");
17534                else if (clock_ctrl == 4)
17535                        strcat(str, "66MHz");
17536                else if (clock_ctrl == 6)
17537                        strcat(str, "100MHz");
17538        } else {
17539                strcpy(str, "PCI:");
17540                if (tg3_flag(tp, PCI_HIGH_SPEED))
17541                        strcat(str, "66MHz");
17542                else
17543                        strcat(str, "33MHz");
17544        }
17545        if (tg3_flag(tp, PCI_32BIT))
17546                strcat(str, ":32-bit");
17547        else
17548                strcat(str, ":64-bit");
17549        return str;
17550}
17551
17552static void tg3_init_coal(struct tg3 *tp)
17553{
17554        struct ethtool_coalesce *ec = &tp->coal;
17555
17556        memset(ec, 0, sizeof(*ec));
17557        ec->cmd = ETHTOOL_GCOALESCE;
17558        ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17559        ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17560        ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17561        ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17562        ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17563        ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17564        ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17565        ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17566        ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17567
17568        if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17569                                 HOSTCC_MODE_CLRTICK_TXBD)) {
17570                ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17571                ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17572                ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17573                ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17574        }
17575
17576        if (tg3_flag(tp, 5705_PLUS)) {
17577                ec->rx_coalesce_usecs_irq = 0;
17578                ec->tx_coalesce_usecs_irq = 0;
17579                ec->stats_block_coalesce_usecs = 0;
17580        }
17581}
17582
17583static int tg3_init_one(struct pci_dev *pdev,
17584                                  const struct pci_device_id *ent)
17585{
17586        struct net_device *dev;
17587        struct tg3 *tp;
17588        int i, err;
17589        u32 sndmbx, rcvmbx, intmbx;
17590        char str[40];
17591        u64 dma_mask, persist_dma_mask;
17592        netdev_features_t features = 0;
17593
17594        printk_once(KERN_INFO "%s\n", version);
17595
17596        err = pci_enable_device(pdev);
17597        if (err) {
17598                dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17599                return err;
17600        }
17601
17602        err = pci_request_regions(pdev, DRV_MODULE_NAME);
17603        if (err) {
17604                dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17605                goto err_out_disable_pdev;
17606        }
17607
17608        pci_set_master(pdev);
17609
17610        dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17611        if (!dev) {
17612                err = -ENOMEM;
17613                goto err_out_free_res;
17614        }
17615
17616        SET_NETDEV_DEV(dev, &pdev->dev);
17617
17618        tp = netdev_priv(dev);
17619        tp->pdev = pdev;
17620        tp->dev = dev;
17621        tp->rx_mode = TG3_DEF_RX_MODE;
17622        tp->tx_mode = TG3_DEF_TX_MODE;
17623        tp->irq_sync = 1;
17624        tp->pcierr_recovery = false;
17625
17626        if (tg3_debug > 0)
17627                tp->msg_enable = tg3_debug;
17628        else
17629                tp->msg_enable = TG3_DEF_MSG_ENABLE;
17630
17631        if (pdev_is_ssb_gige_core(pdev)) {
17632                tg3_flag_set(tp, IS_SSB_CORE);
17633                if (ssb_gige_must_flush_posted_writes(pdev))
17634                        tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17635                if (ssb_gige_one_dma_at_once(pdev))
17636                        tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17637                if (ssb_gige_have_roboswitch(pdev)) {
17638                        tg3_flag_set(tp, USE_PHYLIB);
17639                        tg3_flag_set(tp, ROBOSWITCH);
17640                }
17641                if (ssb_gige_is_rgmii(pdev))
17642                        tg3_flag_set(tp, RGMII_MODE);
17643        }
17644
17645        /* The word/byte swap controls here control register access byte
17646         * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17647         * setting below.
17648         */
17649        tp->misc_host_ctrl =
17650                MISC_HOST_CTRL_MASK_PCI_INT |
17651                MISC_HOST_CTRL_WORD_SWAP |
17652                MISC_HOST_CTRL_INDIR_ACCESS |
17653                MISC_HOST_CTRL_PCISTATE_RW;
17654
17655        /* The NONFRM (non-frame) byte/word swap controls take effect
17656         * on descriptor entries, anything which isn't packet data.
17657         *
17658         * The StrongARM chips on the board (one for tx, one for rx)
17659         * are running in big-endian mode.
17660         */
17661        tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17662                        GRC_MODE_WSWAP_NONFRM_DATA);
17663#ifdef __BIG_ENDIAN
17664        tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17665#endif
17666        spin_lock_init(&tp->lock);
17667        spin_lock_init(&tp->indirect_lock);
17668        INIT_WORK(&tp->reset_task, tg3_reset_task);
17669
17670        tp->regs = pci_ioremap_bar(pdev, BAR_0);
17671        if (!tp->regs) {
17672                dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17673                err = -ENOMEM;
17674                goto err_out_free_dev;
17675        }
17676
17677        if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17678            tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17679            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17680            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17681            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17682            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17683            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17684            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17685            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17686            tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17687            tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17688            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17689            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17690            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17691            tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17692                tg3_flag_set(tp, ENABLE_APE);
17693                tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17694                if (!tp->aperegs) {
17695                        dev_err(&pdev->dev,
17696                                "Cannot map APE registers, aborting\n");
17697                        err = -ENOMEM;
17698                        goto err_out_iounmap;
17699                }
17700        }
17701
17702        tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17703        tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17704
17705        dev->ethtool_ops = &tg3_ethtool_ops;
17706        dev->watchdog_timeo = TG3_TX_TIMEOUT;
17707        dev->netdev_ops = &tg3_netdev_ops;
17708        dev->irq = pdev->irq;
17709
17710        err = tg3_get_invariants(tp, ent);
17711        if (err) {
17712                dev_err(&pdev->dev,
17713                        "Problem fetching invariants of chip, aborting\n");
17714                goto err_out_apeunmap;
17715        }
17716
17717        /* The EPB bridge inside 5714, 5715, and 5780 and any
17718         * device behind the EPB cannot support DMA addresses > 40-bit.
17719         * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17720         * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17721         * do DMA address check in tg3_start_xmit().
17722         */
17723        if (tg3_flag(tp, IS_5788))
17724                persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17725        else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17726                persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17727#ifdef CONFIG_HIGHMEM
17728                dma_mask = DMA_BIT_MASK(64);
17729#endif
17730        } else
17731                persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17732
17733        /* Configure DMA attributes. */
17734        if (dma_mask > DMA_BIT_MASK(32)) {
17735                err = pci_set_dma_mask(pdev, dma_mask);
17736                if (!err) {
17737                        features |= NETIF_F_HIGHDMA;
17738                        err = pci_set_consistent_dma_mask(pdev,
17739                                                          persist_dma_mask);
17740                        if (err < 0) {
17741                                dev_err(&pdev->dev, "Unable to obtain 64 bit "
17742                                        "DMA for consistent allocations\n");
17743                                goto err_out_apeunmap;
17744                        }
17745                }
17746        }
17747        if (err || dma_mask == DMA_BIT_MASK(32)) {
17748                err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
17749                if (err) {
17750                        dev_err(&pdev->dev,
17751                                "No usable DMA configuration, aborting\n");
17752                        goto err_out_apeunmap;
17753                }
17754        }
17755
17756        tg3_init_bufmgr_config(tp);
17757
17758        /* 5700 B0 chips do not support checksumming correctly due
17759         * to hardware bugs.
17760         */
17761        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17762                features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17763
17764                if (tg3_flag(tp, 5755_PLUS))
17765                        features |= NETIF_F_IPV6_CSUM;
17766        }
17767
17768        /* TSO is on by default on chips that support hardware TSO.
17769         * Firmware TSO on older chips gives lower performance, so it
17770         * is off by default, but can be enabled using ethtool.
17771         */
17772        if ((tg3_flag(tp, HW_TSO_1) ||
17773             tg3_flag(tp, HW_TSO_2) ||
17774             tg3_flag(tp, HW_TSO_3)) &&
17775            (features & NETIF_F_IP_CSUM))
17776                features |= NETIF_F_TSO;
17777        if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17778                if (features & NETIF_F_IPV6_CSUM)
17779                        features |= NETIF_F_TSO6;
17780                if (tg3_flag(tp, HW_TSO_3) ||
17781                    tg3_asic_rev(tp) == ASIC_REV_5761 ||
17782                    (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17783                     tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17784                    tg3_asic_rev(tp) == ASIC_REV_5785 ||
17785                    tg3_asic_rev(tp) == ASIC_REV_57780)
17786                        features |= NETIF_F_TSO_ECN;
17787        }
17788
17789        dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17790                         NETIF_F_HW_VLAN_CTAG_RX;
17791        dev->vlan_features |= features;
17792
17793        /*
17794         * Add loopback capability only for a subset of devices that support
17795         * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17796         * loopback for the remaining devices.
17797         */
17798        if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17799            !tg3_flag(tp, CPMU_PRESENT))
17800                /* Add the loopback capability */
17801                features |= NETIF_F_LOOPBACK;
17802
17803        dev->hw_features |= features;
17804        dev->priv_flags |= IFF_UNICAST_FLT;
17805
17806        /* MTU range: 60 - 9000 or 1500, depending on hardware */
17807        dev->min_mtu = TG3_MIN_MTU;
17808        dev->max_mtu = TG3_MAX_MTU(tp);
17809
17810        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17811            !tg3_flag(tp, TSO_CAPABLE) &&
17812            !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17813                tg3_flag_set(tp, MAX_RXPEND_64);
17814                tp->rx_pending = 63;
17815        }
17816
17817        err = tg3_get_device_address(tp);
17818        if (err) {
17819                dev_err(&pdev->dev,
17820                        "Could not obtain valid ethernet address, aborting\n");
17821                goto err_out_apeunmap;
17822        }
17823
17824        intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17825        rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17826        sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17827        for (i = 0; i < tp->irq_max; i++) {
17828                struct tg3_napi *tnapi = &tp->napi[i];
17829
17830                tnapi->tp = tp;
17831                tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17832
17833                tnapi->int_mbox = intmbx;
17834                if (i <= 4)
17835                        intmbx += 0x8;
17836                else
17837                        intmbx += 0x4;
17838
17839                tnapi->consmbox = rcvmbx;
17840                tnapi->prodmbox = sndmbx;
17841
17842                if (i)
17843                        tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17844                else
17845                        tnapi->coal_now = HOSTCC_MODE_NOW;
17846
17847                if (!tg3_flag(tp, SUPPORT_MSIX))
17848                        break;
17849
17850                /*
17851                 * If we support MSIX, we'll be using RSS.  If we're using
17852                 * RSS, the first vector only handles link interrupts and the
17853                 * remaining vectors handle rx and tx interrupts.  Reuse the
17854                 * mailbox values for the next iteration.  The values we setup
17855                 * above are still useful for the single vectored mode.
17856                 */
17857                if (!i)
17858                        continue;
17859
17860                rcvmbx += 0x8;
17861
17862                if (sndmbx & 0x4)
17863                        sndmbx -= 0x4;
17864                else
17865                        sndmbx += 0xc;
17866        }
17867
17868        /*
17869         * Reset chip in case UNDI or EFI driver did not shutdown
17870         * DMA self test will enable WDMAC and we'll see (spurious)
17871         * pending DMA on the PCI bus at that point.
17872         */
17873        if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17874            (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17875                tg3_full_lock(tp, 0);
17876                tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17877                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17878                tg3_full_unlock(tp);
17879        }
17880
17881        err = tg3_test_dma(tp);
17882        if (err) {
17883                dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17884                goto err_out_apeunmap;
17885        }
17886
17887        tg3_init_coal(tp);
17888
17889        pci_set_drvdata(pdev, dev);
17890
17891        if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17892            tg3_asic_rev(tp) == ASIC_REV_5720 ||
17893            tg3_asic_rev(tp) == ASIC_REV_5762)
17894                tg3_flag_set(tp, PTP_CAPABLE);
17895
17896        tg3_timer_init(tp);
17897
17898        tg3_carrier_off(tp);
17899
17900        err = register_netdev(dev);
17901        if (err) {
17902                dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17903                goto err_out_apeunmap;
17904        }
17905
17906        if (tg3_flag(tp, PTP_CAPABLE)) {
17907                tg3_ptp_init(tp);
17908                tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17909                                                   &tp->pdev->dev);
17910                if (IS_ERR(tp->ptp_clock))
17911                        tp->ptp_clock = NULL;
17912        }
17913
17914        netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17915                    tp->board_part_number,
17916                    tg3_chip_rev_id(tp),
17917                    tg3_bus_string(tp, str),
17918                    dev->dev_addr);
17919
17920        if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17921                char *ethtype;
17922
17923                if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17924                        ethtype = "10/100Base-TX";
17925                else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17926                        ethtype = "1000Base-SX";
17927                else
17928                        ethtype = "10/100/1000Base-T";
17929
17930                netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17931                            "(WireSpeed[%d], EEE[%d])\n",
17932                            tg3_phy_string(tp), ethtype,
17933                            (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17934                            (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17935        }
17936
17937        netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17938                    (dev->features & NETIF_F_RXCSUM) != 0,
17939                    tg3_flag(tp, USE_LINKCHG_REG) != 0,
17940                    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17941                    tg3_flag(tp, ENABLE_ASF) != 0,
17942                    tg3_flag(tp, TSO_CAPABLE) != 0);
17943        netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17944                    tp->dma_rwctrl,
17945                    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17946                    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17947
17948        pci_save_state(pdev);
17949
17950        return 0;
17951
17952err_out_apeunmap:
17953        if (tp->aperegs) {
17954                iounmap(tp->aperegs);
17955                tp->aperegs = NULL;
17956        }
17957
17958err_out_iounmap:
17959        if (tp->regs) {
17960                iounmap(tp->regs);
17961                tp->regs = NULL;
17962        }
17963
17964err_out_free_dev:
17965        free_netdev(dev);
17966
17967err_out_free_res:
17968        pci_release_regions(pdev);
17969
17970err_out_disable_pdev:
17971        if (pci_is_enabled(pdev))
17972                pci_disable_device(pdev);
17973        return err;
17974}
17975
17976static void tg3_remove_one(struct pci_dev *pdev)
17977{
17978        struct net_device *dev = pci_get_drvdata(pdev);
17979
17980        if (dev) {
17981                struct tg3 *tp = netdev_priv(dev);
17982
17983                tg3_ptp_fini(tp);
17984
17985                release_firmware(tp->fw);
17986
17987                tg3_reset_task_cancel(tp);
17988
17989                if (tg3_flag(tp, USE_PHYLIB)) {
17990                        tg3_phy_fini(tp);
17991                        tg3_mdio_fini(tp);
17992                }
17993
17994                unregister_netdev(dev);
17995                if (tp->aperegs) {
17996                        iounmap(tp->aperegs);
17997                        tp->aperegs = NULL;
17998                }
17999                if (tp->regs) {
18000                        iounmap(tp->regs);
18001                        tp->regs = NULL;
18002                }
18003                free_netdev(dev);
18004                pci_release_regions(pdev);
18005                pci_disable_device(pdev);
18006        }
18007}
18008
18009#ifdef CONFIG_PM_SLEEP
18010static int tg3_suspend(struct device *device)
18011{
18012        struct pci_dev *pdev = to_pci_dev(device);
18013        struct net_device *dev = pci_get_drvdata(pdev);
18014        struct tg3 *tp = netdev_priv(dev);
18015        int err = 0;
18016
18017        rtnl_lock();
18018
18019        if (!netif_running(dev))
18020                goto unlock;
18021
18022        tg3_reset_task_cancel(tp);
18023        tg3_phy_stop(tp);
18024        tg3_netif_stop(tp);
18025
18026        tg3_timer_stop(tp);
18027
18028        tg3_full_lock(tp, 1);
18029        tg3_disable_ints(tp);
18030        tg3_full_unlock(tp);
18031
18032        netif_device_detach(dev);
18033
18034        tg3_full_lock(tp, 0);
18035        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
18036        tg3_flag_clear(tp, INIT_COMPLETE);
18037        tg3_full_unlock(tp);
18038
18039        err = tg3_power_down_prepare(tp);
18040        if (err) {
18041                int err2;
18042
18043                tg3_full_lock(tp, 0);
18044
18045                tg3_flag_set(tp, INIT_COMPLETE);
18046                err2 = tg3_restart_hw(tp, true);
18047                if (err2)
18048                        goto out;
18049
18050                tg3_timer_start(tp);
18051
18052                netif_device_attach(dev);
18053                tg3_netif_start(tp);
18054
18055out:
18056                tg3_full_unlock(tp);
18057
18058                if (!err2)
18059                        tg3_phy_start(tp);
18060        }
18061
18062unlock:
18063        rtnl_unlock();
18064        return err;
18065}
18066
18067static int tg3_resume(struct device *device)
18068{
18069        struct pci_dev *pdev = to_pci_dev(device);
18070        struct net_device *dev = pci_get_drvdata(pdev);
18071        struct tg3 *tp = netdev_priv(dev);
18072        int err = 0;
18073
18074        rtnl_lock();
18075
18076        if (!netif_running(dev))
18077                goto unlock;
18078
18079        netif_device_attach(dev);
18080
18081        tg3_full_lock(tp, 0);
18082
18083        tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18084
18085        tg3_flag_set(tp, INIT_COMPLETE);
18086        err = tg3_restart_hw(tp,
18087                             !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18088        if (err)
18089                goto out;
18090
18091        tg3_timer_start(tp);
18092
18093        tg3_netif_start(tp);
18094
18095out:
18096        tg3_full_unlock(tp);
18097
18098        if (!err)
18099                tg3_phy_start(tp);
18100
18101unlock:
18102        rtnl_unlock();
18103        return err;
18104}
18105#endif /* CONFIG_PM_SLEEP */
18106
18107static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18108
18109static void tg3_shutdown(struct pci_dev *pdev)
18110{
18111        struct net_device *dev = pci_get_drvdata(pdev);
18112        struct tg3 *tp = netdev_priv(dev);
18113
18114        rtnl_lock();
18115        netif_device_detach(dev);
18116
18117        if (netif_running(dev))
18118                dev_close(dev);
18119
18120        if (system_state == SYSTEM_POWER_OFF)
18121                tg3_power_down(tp);
18122
18123        rtnl_unlock();
18124}
18125
18126/**
18127 * tg3_io_error_detected - called when PCI error is detected
18128 * @pdev: Pointer to PCI device
18129 * @state: The current pci connection state
18130 *
18131 * This function is called after a PCI bus error affecting
18132 * this device has been detected.
18133 */
18134static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18135                                              pci_channel_state_t state)
18136{
18137        struct net_device *netdev = pci_get_drvdata(pdev);
18138        struct tg3 *tp = netdev_priv(netdev);
18139        pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18140
18141        netdev_info(netdev, "PCI I/O error detected\n");
18142
18143        rtnl_lock();
18144
18145        /* We probably don't have netdev yet */
18146        if (!netdev || !netif_running(netdev))
18147                goto done;
18148
18149        /* We needn't recover from permanent error */
18150        if (state == pci_channel_io_frozen)
18151                tp->pcierr_recovery = true;
18152
18153        tg3_phy_stop(tp);
18154
18155        tg3_netif_stop(tp);
18156
18157        tg3_timer_stop(tp);
18158
18159        /* Want to make sure that the reset task doesn't run */
18160        tg3_reset_task_cancel(tp);
18161
18162        netif_device_detach(netdev);
18163
18164        /* Clean up software state, even if MMIO is blocked */
18165        tg3_full_lock(tp, 0);
18166        tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18167        tg3_full_unlock(tp);
18168
18169done:
18170        if (state == pci_channel_io_perm_failure) {
18171                if (netdev) {
18172                        tg3_napi_enable(tp);
18173                        dev_close(netdev);
18174                }
18175                err = PCI_ERS_RESULT_DISCONNECT;
18176        } else {
18177                pci_disable_device(pdev);
18178        }
18179
18180        rtnl_unlock();
18181
18182        return err;
18183}
18184
18185/**
18186 * tg3_io_slot_reset - called after the pci bus has been reset.
18187 * @pdev: Pointer to PCI device
18188 *
18189 * Restart the card from scratch, as if from a cold-boot.
18190 * At this point, the card has exprienced a hard reset,
18191 * followed by fixups by BIOS, and has its config space
18192 * set up identically to what it was at cold boot.
18193 */
18194static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18195{
18196        struct net_device *netdev = pci_get_drvdata(pdev);
18197        struct tg3 *tp = netdev_priv(netdev);
18198        pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18199        int err;
18200
18201        rtnl_lock();
18202
18203        if (pci_enable_device(pdev)) {
18204                dev_err(&pdev->dev,
18205                        "Cannot re-enable PCI device after reset.\n");
18206                goto done;
18207        }
18208
18209        pci_set_master(pdev);
18210        pci_restore_state(pdev);
18211        pci_save_state(pdev);
18212
18213        if (!netdev || !netif_running(netdev)) {
18214                rc = PCI_ERS_RESULT_RECOVERED;
18215                goto done;
18216        }
18217
18218        err = tg3_power_up(tp);
18219        if (err)
18220                goto done;
18221
18222        rc = PCI_ERS_RESULT_RECOVERED;
18223
18224done:
18225        if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18226                tg3_napi_enable(tp);
18227                dev_close(netdev);
18228        }
18229        rtnl_unlock();
18230
18231        return rc;
18232}
18233
18234/**
18235 * tg3_io_resume - called when traffic can start flowing again.
18236 * @pdev: Pointer to PCI device
18237 *
18238 * This callback is called when the error recovery driver tells
18239 * us that its OK to resume normal operation.
18240 */
18241static void tg3_io_resume(struct pci_dev *pdev)
18242{
18243        struct net_device *netdev = pci_get_drvdata(pdev);
18244        struct tg3 *tp = netdev_priv(netdev);
18245        int err;
18246
18247        rtnl_lock();
18248
18249        if (!netdev || !netif_running(netdev))
18250                goto done;
18251
18252        tg3_full_lock(tp, 0);
18253        tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18254        tg3_flag_set(tp, INIT_COMPLETE);
18255        err = tg3_restart_hw(tp, true);
18256        if (err) {
18257                tg3_full_unlock(tp);
18258                netdev_err(netdev, "Cannot restart hardware after reset.\n");
18259                goto done;
18260        }
18261
18262        netif_device_attach(netdev);
18263
18264        tg3_timer_start(tp);
18265
18266        tg3_netif_start(tp);
18267
18268        tg3_full_unlock(tp);
18269
18270        tg3_phy_start(tp);
18271
18272done:
18273        tp->pcierr_recovery = false;
18274        rtnl_unlock();
18275}
18276
18277static const struct pci_error_handlers tg3_err_handler = {
18278        .error_detected = tg3_io_error_detected,
18279        .slot_reset     = tg3_io_slot_reset,
18280        .resume         = tg3_io_resume
18281};
18282
18283static struct pci_driver tg3_driver = {
18284        .name           = DRV_MODULE_NAME,
18285        .id_table       = tg3_pci_tbl,
18286        .probe          = tg3_init_one,
18287        .remove         = tg3_remove_one,
18288        .err_handler    = &tg3_err_handler,
18289        .driver.pm      = &tg3_pm_ops,
18290        .shutdown       = tg3_shutdown,
18291};
18292
18293module_pci_driver(tg3_driver);
18294