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-2016 Broadcom Corporation.
   8 * Copyright (C) 2016-2017 Broadcom Limited.
   9 * Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom"
  10 * refers to Broadcom Inc. and/or its subsidiaries.
  11 *
  12 * Firmware is:
  13 *      Derived from proprietary unpublished source code,
  14 *      Copyright (C) 2000-2016 Broadcom Corporation.
  15 *      Copyright (C) 2016-2017 Broadcom Ltd.
  16 *      Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom"
  17 *      refers to Broadcom Inc. and/or its subsidiaries.
  18 *
  19 *      Permission is hereby granted for the distribution of this firmware
  20 *      data in hexadecimal or equivalent format, provided this copyright
  21 *      notice is accompanying it.
  22 */
  23
  24
  25#include <linux/module.h>
  26#include <linux/moduleparam.h>
  27#include <linux/stringify.h>
  28#include <linux/kernel.h>
  29#include <linux/sched/signal.h>
  30#include <linux/types.h>
  31#include <linux/compiler.h>
  32#include <linux/slab.h>
  33#include <linux/delay.h>
  34#include <linux/in.h>
  35#include <linux/interrupt.h>
  36#include <linux/ioport.h>
  37#include <linux/pci.h>
  38#include <linux/netdevice.h>
  39#include <linux/etherdevice.h>
  40#include <linux/skbuff.h>
  41#include <linux/ethtool.h>
  42#include <linux/mdio.h>
  43#include <linux/mii.h>
  44#include <linux/phy.h>
  45#include <linux/brcmphy.h>
  46#include <linux/if.h>
  47#include <linux/if_vlan.h>
  48#include <linux/ip.h>
  49#include <linux/tcp.h>
  50#include <linux/workqueue.h>
  51#include <linux/prefetch.h>
  52#include <linux/dma-mapping.h>
  53#include <linux/firmware.h>
  54#include <linux/ssb/ssb_driver_gige.h>
  55#include <linux/hwmon.h>
  56#include <linux/hwmon-sysfs.h>
  57#include <linux/crc32poly.h>
  58
  59#include <net/checksum.h>
  60#include <net/ip.h>
  61
  62#include <linux/io.h>
  63#include <asm/byteorder.h>
  64#include <linux/uaccess.h>
  65
  66#include <uapi/linux/net_tstamp.h>
  67#include <linux/ptp_clock_kernel.h>
  68
  69#define BAR_0   0
  70#define BAR_2   2
  71
  72#include "tg3.h"
  73
  74/* Functions & macros to verify TG3_FLAGS types */
  75
  76static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
  77{
  78        return test_bit(flag, bits);
  79}
  80
  81static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
  82{
  83        set_bit(flag, bits);
  84}
  85
  86static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
  87{
  88        clear_bit(flag, bits);
  89}
  90
  91#define tg3_flag(tp, flag)                              \
  92        _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
  93#define tg3_flag_set(tp, flag)                          \
  94        _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
  95#define tg3_flag_clear(tp, flag)                        \
  96        _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
  97
  98#define DRV_MODULE_NAME         "tg3"
  99/* DO NOT UPDATE TG3_*_NUM defines */
 100#define TG3_MAJ_NUM                     3
 101#define TG3_MIN_NUM                     137
 102
 103#define RESET_KIND_SHUTDOWN     0
 104#define RESET_KIND_INIT         1
 105#define RESET_KIND_SUSPEND      2
 106
 107#define TG3_DEF_RX_MODE         0
 108#define TG3_DEF_TX_MODE         0
 109#define TG3_DEF_MSG_ENABLE        \
 110        (NETIF_MSG_DRV          | \
 111         NETIF_MSG_PROBE        | \
 112         NETIF_MSG_LINK         | \
 113         NETIF_MSG_TIMER        | \
 114         NETIF_MSG_IFDOWN       | \
 115         NETIF_MSG_IFUP         | \
 116         NETIF_MSG_RX_ERR       | \
 117         NETIF_MSG_TX_ERR)
 118
 119#define TG3_GRC_LCLCTL_PWRSW_DELAY      100
 120
 121/* length of time before we decide the hardware is borked,
 122 * and dev->tx_timeout() should be called to fix the problem
 123 */
 124
 125#define TG3_TX_TIMEOUT                  (5 * HZ)
 126
 127/* hardware minimum and maximum for a single frame's data payload */
 128#define TG3_MIN_MTU                     ETH_ZLEN
 129#define TG3_MAX_MTU(tp) \
 130        (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
 131
 132/* These numbers seem to be hard coded in the NIC firmware somehow.
 133 * You can't change the ring sizes, but you can change where you place
 134 * them in the NIC onboard memory.
 135 */
 136#define TG3_RX_STD_RING_SIZE(tp) \
 137        (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
 138         TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
 139#define TG3_DEF_RX_RING_PENDING         200
 140#define TG3_RX_JMB_RING_SIZE(tp) \
 141        (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
 142         TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
 143#define TG3_DEF_RX_JUMBO_RING_PENDING   100
 144
 145/* Do not place this n-ring entries value into the tp struct itself,
 146 * we really want to expose these constants to GCC so that modulo et
 147 * al.  operations are done with shifts and masks instead of with
 148 * hw multiply/modulo instructions.  Another solution would be to
 149 * replace things like '% foo' with '& (foo - 1)'.
 150 */
 151
 152#define TG3_TX_RING_SIZE                512
 153#define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
 154
 155#define TG3_RX_STD_RING_BYTES(tp) \
 156        (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
 157#define TG3_RX_JMB_RING_BYTES(tp) \
 158        (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
 159#define TG3_RX_RCB_RING_BYTES(tp) \
 160        (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
 161#define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
 162                                 TG3_TX_RING_SIZE)
 163#define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
 164
 165#define TG3_DMA_BYTE_ENAB               64
 166
 167#define TG3_RX_STD_DMA_SZ               1536
 168#define TG3_RX_JMB_DMA_SZ               9046
 169
 170#define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
 171
 172#define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
 173#define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
 174
 175#define TG3_RX_STD_BUFF_RING_SIZE(tp) \
 176        (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
 177
 178#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
 179        (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
 180
 181/* Due to a hardware bug, the 5701 can only DMA to memory addresses
 182 * that are at least dword aligned when used in PCIX mode.  The driver
 183 * works around this bug by double copying the packet.  This workaround
 184 * is built into the normal double copy length check for efficiency.
 185 *
 186 * However, the double copy is only necessary on those architectures
 187 * where unaligned memory accesses are inefficient.  For those architectures
 188 * where unaligned memory accesses incur little penalty, we can reintegrate
 189 * the 5701 in the normal rx path.  Doing so saves a device structure
 190 * dereference by hardcoding the double copy threshold in place.
 191 */
 192#define TG3_RX_COPY_THRESHOLD           256
 193#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
 194        #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
 195#else
 196        #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
 197#endif
 198
 199#if (NET_IP_ALIGN != 0)
 200#define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
 201#else
 202#define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
 203#endif
 204
 205/* minimum number of free TX descriptors required to wake up TX process */
 206#define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
 207#define TG3_TX_BD_DMA_MAX_2K            2048
 208#define TG3_TX_BD_DMA_MAX_4K            4096
 209
 210#define TG3_RAW_IP_ALIGN 2
 211
 212#define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
 213#define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
 214
 215#define TG3_FW_UPDATE_TIMEOUT_SEC       5
 216#define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
 217
 218#define FIRMWARE_TG3            "tigon/tg3.bin"
 219#define FIRMWARE_TG357766       "tigon/tg357766.bin"
 220#define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
 221#define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
 222
 223MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
 224MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
 225MODULE_LICENSE("GPL");
 226MODULE_FIRMWARE(FIRMWARE_TG3);
 227MODULE_FIRMWARE(FIRMWARE_TG3TSO);
 228MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
 229
 230static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
 231module_param(tg3_debug, int, 0);
 232MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
 233
 234#define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
 235#define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
 236
 237static const struct pci_device_id tg3_pci_tbl[] = {
 238        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
 239        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
 240        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
 241        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
 242        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
 243        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
 244        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
 245        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
 246        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
 247        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
 248        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
 249        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
 250        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
 251        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
 252        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
 253        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
 254        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
 255        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
 256        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
 257         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
 258                        TG3_DRV_DATA_FLAG_5705_10_100},
 259        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
 260         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
 261                        TG3_DRV_DATA_FLAG_5705_10_100},
 262        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
 263        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
 264         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
 265                        TG3_DRV_DATA_FLAG_5705_10_100},
 266        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
 267        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
 268        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
 269        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
 270        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
 271        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
 272         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 273        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
 274        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
 275        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
 276        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
 277        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
 278         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 279        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
 280        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
 281        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
 282        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
 283        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
 284        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
 285        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
 286        {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
 287                        PCI_VENDOR_ID_LENOVO,
 288                        TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
 289         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 290        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
 291        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
 292         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 293        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
 294        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
 295        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
 296        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
 297        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
 298        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
 299        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
 300        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
 301        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
 302        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
 303        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
 304        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
 305        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
 306        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
 307        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
 308        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
 309        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
 310        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
 311        {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
 312                        PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
 313         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 314        {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
 315                        PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
 316         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 317        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
 318        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
 319        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
 320         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 321        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
 322        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
 323        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
 324        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
 325        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
 326        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
 327        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
 328        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
 329        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
 330         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 331        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
 332         .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
 333        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
 334        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
 335        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
 336        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
 337        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
 338        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
 339        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
 340        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
 341        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
 342        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
 343        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
 344        {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
 345        {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
 346        {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
 347        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
 348        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
 349        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
 350        {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
 351        {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
 352        {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
 353        {}
 354};
 355
 356MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
 357
 358static const struct {
 359        const char string[ETH_GSTRING_LEN];
 360} ethtool_stats_keys[] = {
 361        { "rx_octets" },
 362        { "rx_fragments" },
 363        { "rx_ucast_packets" },
 364        { "rx_mcast_packets" },
 365        { "rx_bcast_packets" },
 366        { "rx_fcs_errors" },
 367        { "rx_align_errors" },
 368        { "rx_xon_pause_rcvd" },
 369        { "rx_xoff_pause_rcvd" },
 370        { "rx_mac_ctrl_rcvd" },
 371        { "rx_xoff_entered" },
 372        { "rx_frame_too_long_errors" },
 373        { "rx_jabbers" },
 374        { "rx_undersize_packets" },
 375        { "rx_in_length_errors" },
 376        { "rx_out_length_errors" },
 377        { "rx_64_or_less_octet_packets" },
 378        { "rx_65_to_127_octet_packets" },
 379        { "rx_128_to_255_octet_packets" },
 380        { "rx_256_to_511_octet_packets" },
 381        { "rx_512_to_1023_octet_packets" },
 382        { "rx_1024_to_1522_octet_packets" },
 383        { "rx_1523_to_2047_octet_packets" },
 384        { "rx_2048_to_4095_octet_packets" },
 385        { "rx_4096_to_8191_octet_packets" },
 386        { "rx_8192_to_9022_octet_packets" },
 387
 388        { "tx_octets" },
 389        { "tx_collisions" },
 390
 391        { "tx_xon_sent" },
 392        { "tx_xoff_sent" },
 393        { "tx_flow_control" },
 394        { "tx_mac_errors" },
 395        { "tx_single_collisions" },
 396        { "tx_mult_collisions" },
 397        { "tx_deferred" },
 398        { "tx_excessive_collisions" },
 399        { "tx_late_collisions" },
 400        { "tx_collide_2times" },
 401        { "tx_collide_3times" },
 402        { "tx_collide_4times" },
 403        { "tx_collide_5times" },
 404        { "tx_collide_6times" },
 405        { "tx_collide_7times" },
 406        { "tx_collide_8times" },
 407        { "tx_collide_9times" },
 408        { "tx_collide_10times" },
 409        { "tx_collide_11times" },
 410        { "tx_collide_12times" },
 411        { "tx_collide_13times" },
 412        { "tx_collide_14times" },
 413        { "tx_collide_15times" },
 414        { "tx_ucast_packets" },
 415        { "tx_mcast_packets" },
 416        { "tx_bcast_packets" },
 417        { "tx_carrier_sense_errors" },
 418        { "tx_discards" },
 419        { "tx_errors" },
 420
 421        { "dma_writeq_full" },
 422        { "dma_write_prioq_full" },
 423        { "rxbds_empty" },
 424        { "rx_discards" },
 425        { "rx_errors" },
 426        { "rx_threshold_hit" },
 427
 428        { "dma_readq_full" },
 429        { "dma_read_prioq_full" },
 430        { "tx_comp_queue_full" },
 431
 432        { "ring_set_send_prod_index" },
 433        { "ring_status_update" },
 434        { "nic_irqs" },
 435        { "nic_avoided_irqs" },
 436        { "nic_tx_threshold_hit" },
 437
 438        { "mbuf_lwm_thresh_hit" },
 439};
 440
 441#define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
 442#define TG3_NVRAM_TEST          0
 443#define TG3_LINK_TEST           1
 444#define TG3_REGISTER_TEST       2
 445#define TG3_MEMORY_TEST         3
 446#define TG3_MAC_LOOPB_TEST      4
 447#define TG3_PHY_LOOPB_TEST      5
 448#define TG3_EXT_LOOPB_TEST      6
 449#define TG3_INTERRUPT_TEST      7
 450
 451
 452static const struct {
 453        const char string[ETH_GSTRING_LEN];
 454} ethtool_test_keys[] = {
 455        [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
 456        [TG3_LINK_TEST]         = { "link test         (online) " },
 457        [TG3_REGISTER_TEST]     = { "register test     (offline)" },
 458        [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
 459        [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
 460        [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
 461        [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
 462        [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
 463};
 464
 465#define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
 466
 467
 468static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
 469{
 470        writel(val, tp->regs + off);
 471}
 472
 473static u32 tg3_read32(struct tg3 *tp, u32 off)
 474{
 475        return readl(tp->regs + off);
 476}
 477
 478static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
 479{
 480        writel(val, tp->aperegs + off);
 481}
 482
 483static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
 484{
 485        return readl(tp->aperegs + off);
 486}
 487
 488static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
 489{
 490        unsigned long flags;
 491
 492        spin_lock_irqsave(&tp->indirect_lock, flags);
 493        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
 494        pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
 495        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 496}
 497
 498static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
 499{
 500        writel(val, tp->regs + off);
 501        readl(tp->regs + off);
 502}
 503
 504static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
 505{
 506        unsigned long flags;
 507        u32 val;
 508
 509        spin_lock_irqsave(&tp->indirect_lock, flags);
 510        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
 511        pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
 512        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 513        return val;
 514}
 515
 516static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
 517{
 518        unsigned long flags;
 519
 520        if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
 521                pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
 522                                       TG3_64BIT_REG_LOW, val);
 523                return;
 524        }
 525        if (off == TG3_RX_STD_PROD_IDX_REG) {
 526                pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
 527                                       TG3_64BIT_REG_LOW, val);
 528                return;
 529        }
 530
 531        spin_lock_irqsave(&tp->indirect_lock, flags);
 532        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
 533        pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
 534        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 535
 536        /* In indirect mode when disabling interrupts, we also need
 537         * to clear the interrupt bit in the GRC local ctrl register.
 538         */
 539        if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
 540            (val == 0x1)) {
 541                pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
 542                                       tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
 543        }
 544}
 545
 546static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
 547{
 548        unsigned long flags;
 549        u32 val;
 550
 551        spin_lock_irqsave(&tp->indirect_lock, flags);
 552        pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
 553        pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
 554        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 555        return val;
 556}
 557
 558/* usec_wait specifies the wait time in usec when writing to certain registers
 559 * where it is unsafe to read back the register without some delay.
 560 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
 561 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
 562 */
 563static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
 564{
 565        if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
 566                /* Non-posted methods */
 567                tp->write32(tp, off, val);
 568        else {
 569                /* Posted method */
 570                tg3_write32(tp, off, val);
 571                if (usec_wait)
 572                        udelay(usec_wait);
 573                tp->read32(tp, off);
 574        }
 575        /* Wait again after the read for the posted method to guarantee that
 576         * the wait time is met.
 577         */
 578        if (usec_wait)
 579                udelay(usec_wait);
 580}
 581
 582static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
 583{
 584        tp->write32_mbox(tp, off, val);
 585        if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
 586            (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
 587             !tg3_flag(tp, ICH_WORKAROUND)))
 588                tp->read32_mbox(tp, off);
 589}
 590
 591static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
 592{
 593        void __iomem *mbox = tp->regs + off;
 594        writel(val, mbox);
 595        if (tg3_flag(tp, TXD_MBOX_HWBUG))
 596                writel(val, mbox);
 597        if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
 598            tg3_flag(tp, FLUSH_POSTED_WRITES))
 599                readl(mbox);
 600}
 601
 602static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
 603{
 604        return readl(tp->regs + off + GRCMBOX_BASE);
 605}
 606
 607static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
 608{
 609        writel(val, tp->regs + off + GRCMBOX_BASE);
 610}
 611
 612#define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
 613#define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
 614#define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
 615#define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
 616#define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
 617
 618#define tw32(reg, val)                  tp->write32(tp, reg, val)
 619#define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
 620#define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
 621#define tr32(reg)                       tp->read32(tp, reg)
 622
 623static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
 624{
 625        unsigned long flags;
 626
 627        if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
 628            (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
 629                return;
 630
 631        spin_lock_irqsave(&tp->indirect_lock, flags);
 632        if (tg3_flag(tp, SRAM_USE_CONFIG)) {
 633                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
 634                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
 635
 636                /* Always leave this as zero. */
 637                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
 638        } else {
 639                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
 640                tw32_f(TG3PCI_MEM_WIN_DATA, val);
 641
 642                /* Always leave this as zero. */
 643                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
 644        }
 645        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 646}
 647
 648static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
 649{
 650        unsigned long flags;
 651
 652        if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
 653            (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
 654                *val = 0;
 655                return;
 656        }
 657
 658        spin_lock_irqsave(&tp->indirect_lock, flags);
 659        if (tg3_flag(tp, SRAM_USE_CONFIG)) {
 660                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
 661                pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
 662
 663                /* Always leave this as zero. */
 664                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
 665        } else {
 666                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
 667                *val = tr32(TG3PCI_MEM_WIN_DATA);
 668
 669                /* Always leave this as zero. */
 670                tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
 671        }
 672        spin_unlock_irqrestore(&tp->indirect_lock, flags);
 673}
 674
 675static void tg3_ape_lock_init(struct tg3 *tp)
 676{
 677        int i;
 678        u32 regbase, bit;
 679
 680        if (tg3_asic_rev(tp) == ASIC_REV_5761)
 681                regbase = TG3_APE_LOCK_GRANT;
 682        else
 683                regbase = TG3_APE_PER_LOCK_GRANT;
 684
 685        /* Make sure the driver hasn't any stale locks. */
 686        for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
 687                switch (i) {
 688                case TG3_APE_LOCK_PHY0:
 689                case TG3_APE_LOCK_PHY1:
 690                case TG3_APE_LOCK_PHY2:
 691                case TG3_APE_LOCK_PHY3:
 692                        bit = APE_LOCK_GRANT_DRIVER;
 693                        break;
 694                default:
 695                        if (!tp->pci_fn)
 696                                bit = APE_LOCK_GRANT_DRIVER;
 697                        else
 698                                bit = 1 << tp->pci_fn;
 699                }
 700                tg3_ape_write32(tp, regbase + 4 * i, bit);
 701        }
 702
 703}
 704
 705static int tg3_ape_lock(struct tg3 *tp, int locknum)
 706{
 707        int i, off;
 708        int ret = 0;
 709        u32 status, req, gnt, bit;
 710
 711        if (!tg3_flag(tp, ENABLE_APE))
 712                return 0;
 713
 714        switch (locknum) {
 715        case TG3_APE_LOCK_GPIO:
 716                if (tg3_asic_rev(tp) == ASIC_REV_5761)
 717                        return 0;
 718                fallthrough;
 719        case TG3_APE_LOCK_GRC:
 720        case TG3_APE_LOCK_MEM:
 721                if (!tp->pci_fn)
 722                        bit = APE_LOCK_REQ_DRIVER;
 723                else
 724                        bit = 1 << tp->pci_fn;
 725                break;
 726        case TG3_APE_LOCK_PHY0:
 727        case TG3_APE_LOCK_PHY1:
 728        case TG3_APE_LOCK_PHY2:
 729        case TG3_APE_LOCK_PHY3:
 730                bit = APE_LOCK_REQ_DRIVER;
 731                break;
 732        default:
 733                return -EINVAL;
 734        }
 735
 736        if (tg3_asic_rev(tp) == ASIC_REV_5761) {
 737                req = TG3_APE_LOCK_REQ;
 738                gnt = TG3_APE_LOCK_GRANT;
 739        } else {
 740                req = TG3_APE_PER_LOCK_REQ;
 741                gnt = TG3_APE_PER_LOCK_GRANT;
 742        }
 743
 744        off = 4 * locknum;
 745
 746        tg3_ape_write32(tp, req + off, bit);
 747
 748        /* Wait for up to 1 millisecond to acquire lock. */
 749        for (i = 0; i < 100; i++) {
 750                status = tg3_ape_read32(tp, gnt + off);
 751                if (status == bit)
 752                        break;
 753                if (pci_channel_offline(tp->pdev))
 754                        break;
 755
 756                udelay(10);
 757        }
 758
 759        if (status != bit) {
 760                /* Revoke the lock request. */
 761                tg3_ape_write32(tp, gnt + off, bit);
 762                ret = -EBUSY;
 763        }
 764
 765        return ret;
 766}
 767
 768static void tg3_ape_unlock(struct tg3 *tp, int locknum)
 769{
 770        u32 gnt, bit;
 771
 772        if (!tg3_flag(tp, ENABLE_APE))
 773                return;
 774
 775        switch (locknum) {
 776        case TG3_APE_LOCK_GPIO:
 777                if (tg3_asic_rev(tp) == ASIC_REV_5761)
 778                        return;
 779                fallthrough;
 780        case TG3_APE_LOCK_GRC:
 781        case TG3_APE_LOCK_MEM:
 782                if (!tp->pci_fn)
 783                        bit = APE_LOCK_GRANT_DRIVER;
 784                else
 785                        bit = 1 << tp->pci_fn;
 786                break;
 787        case TG3_APE_LOCK_PHY0:
 788        case TG3_APE_LOCK_PHY1:
 789        case TG3_APE_LOCK_PHY2:
 790        case TG3_APE_LOCK_PHY3:
 791                bit = APE_LOCK_GRANT_DRIVER;
 792                break;
 793        default:
 794                return;
 795        }
 796
 797        if (tg3_asic_rev(tp) == ASIC_REV_5761)
 798                gnt = TG3_APE_LOCK_GRANT;
 799        else
 800                gnt = TG3_APE_PER_LOCK_GRANT;
 801
 802        tg3_ape_write32(tp, gnt + 4 * locknum, bit);
 803}
 804
 805static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
 806{
 807        u32 apedata;
 808
 809        while (timeout_us) {
 810                if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
 811                        return -EBUSY;
 812
 813                apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
 814                if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
 815                        break;
 816
 817                tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
 818
 819                udelay(10);
 820                timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
 821        }
 822
 823        return timeout_us ? 0 : -EBUSY;
 824}
 825
 826#ifdef CONFIG_TIGON3_HWMON
 827static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
 828{
 829        u32 i, apedata;
 830
 831        for (i = 0; i < timeout_us / 10; i++) {
 832                apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
 833
 834                if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
 835                        break;
 836
 837                udelay(10);
 838        }
 839
 840        return i == timeout_us / 10;
 841}
 842
 843static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
 844                                   u32 len)
 845{
 846        int err;
 847        u32 i, bufoff, msgoff, maxlen, apedata;
 848
 849        if (!tg3_flag(tp, APE_HAS_NCSI))
 850                return 0;
 851
 852        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
 853        if (apedata != APE_SEG_SIG_MAGIC)
 854                return -ENODEV;
 855
 856        apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
 857        if (!(apedata & APE_FW_STATUS_READY))
 858                return -EAGAIN;
 859
 860        bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
 861                 TG3_APE_SHMEM_BASE;
 862        msgoff = bufoff + 2 * sizeof(u32);
 863        maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
 864
 865        while (len) {
 866                u32 length;
 867
 868                /* Cap xfer sizes to scratchpad limits. */
 869                length = (len > maxlen) ? maxlen : len;
 870                len -= length;
 871
 872                apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
 873                if (!(apedata & APE_FW_STATUS_READY))
 874                        return -EAGAIN;
 875
 876                /* Wait for up to 1 msec for APE to service previous event. */
 877                err = tg3_ape_event_lock(tp, 1000);
 878                if (err)
 879                        return err;
 880
 881                apedata = APE_EVENT_STATUS_DRIVER_EVNT |
 882                          APE_EVENT_STATUS_SCRTCHPD_READ |
 883                          APE_EVENT_STATUS_EVENT_PENDING;
 884                tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
 885
 886                tg3_ape_write32(tp, bufoff, base_off);
 887                tg3_ape_write32(tp, bufoff + sizeof(u32), length);
 888
 889                tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
 890                tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
 891
 892                base_off += length;
 893
 894                if (tg3_ape_wait_for_event(tp, 30000))
 895                        return -EAGAIN;
 896
 897                for (i = 0; length; i += 4, length -= 4) {
 898                        u32 val = tg3_ape_read32(tp, msgoff + i);
 899                        memcpy(data, &val, sizeof(u32));
 900                        data++;
 901                }
 902        }
 903
 904        return 0;
 905}
 906#endif
 907
 908static int tg3_ape_send_event(struct tg3 *tp, u32 event)
 909{
 910        int err;
 911        u32 apedata;
 912
 913        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
 914        if (apedata != APE_SEG_SIG_MAGIC)
 915                return -EAGAIN;
 916
 917        apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
 918        if (!(apedata & APE_FW_STATUS_READY))
 919                return -EAGAIN;
 920
 921        /* Wait for up to 20 millisecond for APE to service previous event. */
 922        err = tg3_ape_event_lock(tp, 20000);
 923        if (err)
 924                return err;
 925
 926        tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
 927                        event | APE_EVENT_STATUS_EVENT_PENDING);
 928
 929        tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
 930        tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
 931
 932        return 0;
 933}
 934
 935static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
 936{
 937        u32 event;
 938        u32 apedata;
 939
 940        if (!tg3_flag(tp, ENABLE_APE))
 941                return;
 942
 943        switch (kind) {
 944        case RESET_KIND_INIT:
 945                tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
 946                tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
 947                                APE_HOST_SEG_SIG_MAGIC);
 948                tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
 949                                APE_HOST_SEG_LEN_MAGIC);
 950                apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
 951                tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
 952                tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
 953                        APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
 954                tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
 955                                APE_HOST_BEHAV_NO_PHYLOCK);
 956                tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
 957                                    TG3_APE_HOST_DRVR_STATE_START);
 958
 959                event = APE_EVENT_STATUS_STATE_START;
 960                break;
 961        case RESET_KIND_SHUTDOWN:
 962                if (device_may_wakeup(&tp->pdev->dev) &&
 963                    tg3_flag(tp, WOL_ENABLE)) {
 964                        tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
 965                                            TG3_APE_HOST_WOL_SPEED_AUTO);
 966                        apedata = TG3_APE_HOST_DRVR_STATE_WOL;
 967                } else
 968                        apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
 969
 970                tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
 971
 972                event = APE_EVENT_STATUS_STATE_UNLOAD;
 973                break;
 974        default:
 975                return;
 976        }
 977
 978        event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
 979
 980        tg3_ape_send_event(tp, event);
 981}
 982
 983static void tg3_send_ape_heartbeat(struct tg3 *tp,
 984                                   unsigned long interval)
 985{
 986        /* Check if hb interval has exceeded */
 987        if (!tg3_flag(tp, ENABLE_APE) ||
 988            time_before(jiffies, tp->ape_hb_jiffies + interval))
 989                return;
 990
 991        tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
 992        tp->ape_hb_jiffies = jiffies;
 993}
 994
 995static void tg3_disable_ints(struct tg3 *tp)
 996{
 997        int i;
 998
 999        tw32(TG3PCI_MISC_HOST_CTRL,
1000             (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
1001        for (i = 0; i < tp->irq_max; i++)
1002                tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
1003}
1004
1005static void tg3_enable_ints(struct tg3 *tp)
1006{
1007        int i;
1008
1009        tp->irq_sync = 0;
1010        wmb();
1011
1012        tw32(TG3PCI_MISC_HOST_CTRL,
1013             (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1014
1015        tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1016        for (i = 0; i < tp->irq_cnt; i++) {
1017                struct tg3_napi *tnapi = &tp->napi[i];
1018
1019                tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1020                if (tg3_flag(tp, 1SHOT_MSI))
1021                        tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1022
1023                tp->coal_now |= tnapi->coal_now;
1024        }
1025
1026        /* Force an initial interrupt */
1027        if (!tg3_flag(tp, TAGGED_STATUS) &&
1028            (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1029                tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1030        else
1031                tw32(HOSTCC_MODE, tp->coal_now);
1032
1033        tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1034}
1035
1036static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1037{
1038        struct tg3 *tp = tnapi->tp;
1039        struct tg3_hw_status *sblk = tnapi->hw_status;
1040        unsigned int work_exists = 0;
1041
1042        /* check for phy events */
1043        if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1044                if (sblk->status & SD_STATUS_LINK_CHG)
1045                        work_exists = 1;
1046        }
1047
1048        /* check for TX work to do */
1049        if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1050                work_exists = 1;
1051
1052        /* check for RX work to do */
1053        if (tnapi->rx_rcb_prod_idx &&
1054            *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1055                work_exists = 1;
1056
1057        return work_exists;
1058}
1059
1060/* tg3_int_reenable
1061 *  similar to tg3_enable_ints, but it accurately determines whether there
1062 *  is new work pending and can return without flushing the PIO write
1063 *  which reenables interrupts
1064 */
1065static void tg3_int_reenable(struct tg3_napi *tnapi)
1066{
1067        struct tg3 *tp = tnapi->tp;
1068
1069        tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1070
1071        /* When doing tagged status, this work check is unnecessary.
1072         * The last_tag we write above tells the chip which piece of
1073         * work we've completed.
1074         */
1075        if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1076                tw32(HOSTCC_MODE, tp->coalesce_mode |
1077                     HOSTCC_MODE_ENABLE | tnapi->coal_now);
1078}
1079
1080static void tg3_switch_clocks(struct tg3 *tp)
1081{
1082        u32 clock_ctrl;
1083        u32 orig_clock_ctrl;
1084
1085        if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1086                return;
1087
1088        clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1089
1090        orig_clock_ctrl = clock_ctrl;
1091        clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1092                       CLOCK_CTRL_CLKRUN_OENABLE |
1093                       0x1f);
1094        tp->pci_clock_ctrl = clock_ctrl;
1095
1096        if (tg3_flag(tp, 5705_PLUS)) {
1097                if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1098                        tw32_wait_f(TG3PCI_CLOCK_CTRL,
1099                                    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1100                }
1101        } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1102                tw32_wait_f(TG3PCI_CLOCK_CTRL,
1103                            clock_ctrl |
1104                            (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1105                            40);
1106                tw32_wait_f(TG3PCI_CLOCK_CTRL,
1107                            clock_ctrl | (CLOCK_CTRL_ALTCLK),
1108                            40);
1109        }
1110        tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1111}
1112
1113#define PHY_BUSY_LOOPS  5000
1114
1115static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1116                         u32 *val)
1117{
1118        u32 frame_val;
1119        unsigned int loops;
1120        int ret;
1121
1122        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1123                tw32_f(MAC_MI_MODE,
1124                     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1125                udelay(80);
1126        }
1127
1128        tg3_ape_lock(tp, tp->phy_ape_lock);
1129
1130        *val = 0x0;
1131
1132        frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1133                      MI_COM_PHY_ADDR_MASK);
1134        frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1135                      MI_COM_REG_ADDR_MASK);
1136        frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1137
1138        tw32_f(MAC_MI_COM, frame_val);
1139
1140        loops = PHY_BUSY_LOOPS;
1141        while (loops != 0) {
1142                udelay(10);
1143                frame_val = tr32(MAC_MI_COM);
1144
1145                if ((frame_val & MI_COM_BUSY) == 0) {
1146                        udelay(5);
1147                        frame_val = tr32(MAC_MI_COM);
1148                        break;
1149                }
1150                loops -= 1;
1151        }
1152
1153        ret = -EBUSY;
1154        if (loops != 0) {
1155                *val = frame_val & MI_COM_DATA_MASK;
1156                ret = 0;
1157        }
1158
1159        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1160                tw32_f(MAC_MI_MODE, tp->mi_mode);
1161                udelay(80);
1162        }
1163
1164        tg3_ape_unlock(tp, tp->phy_ape_lock);
1165
1166        return ret;
1167}
1168
1169static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1170{
1171        return __tg3_readphy(tp, tp->phy_addr, reg, val);
1172}
1173
1174static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1175                          u32 val)
1176{
1177        u32 frame_val;
1178        unsigned int loops;
1179        int ret;
1180
1181        if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1182            (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1183                return 0;
1184
1185        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1186                tw32_f(MAC_MI_MODE,
1187                     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1188                udelay(80);
1189        }
1190
1191        tg3_ape_lock(tp, tp->phy_ape_lock);
1192
1193        frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1194                      MI_COM_PHY_ADDR_MASK);
1195        frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1196                      MI_COM_REG_ADDR_MASK);
1197        frame_val |= (val & MI_COM_DATA_MASK);
1198        frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1199
1200        tw32_f(MAC_MI_COM, frame_val);
1201
1202        loops = PHY_BUSY_LOOPS;
1203        while (loops != 0) {
1204                udelay(10);
1205                frame_val = tr32(MAC_MI_COM);
1206                if ((frame_val & MI_COM_BUSY) == 0) {
1207                        udelay(5);
1208                        frame_val = tr32(MAC_MI_COM);
1209                        break;
1210                }
1211                loops -= 1;
1212        }
1213
1214        ret = -EBUSY;
1215        if (loops != 0)
1216                ret = 0;
1217
1218        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1219                tw32_f(MAC_MI_MODE, tp->mi_mode);
1220                udelay(80);
1221        }
1222
1223        tg3_ape_unlock(tp, tp->phy_ape_lock);
1224
1225        return ret;
1226}
1227
1228static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1229{
1230        return __tg3_writephy(tp, tp->phy_addr, reg, val);
1231}
1232
1233static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1234{
1235        int err;
1236
1237        err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1238        if (err)
1239                goto done;
1240
1241        err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1242        if (err)
1243                goto done;
1244
1245        err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1246                           MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1247        if (err)
1248                goto done;
1249
1250        err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1251
1252done:
1253        return err;
1254}
1255
1256static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1257{
1258        int err;
1259
1260        err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1261        if (err)
1262                goto done;
1263
1264        err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1265        if (err)
1266                goto done;
1267
1268        err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1269                           MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1270        if (err)
1271                goto done;
1272
1273        err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1274
1275done:
1276        return err;
1277}
1278
1279static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1280{
1281        int err;
1282
1283        err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1284        if (!err)
1285                err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1286
1287        return err;
1288}
1289
1290static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1291{
1292        int err;
1293
1294        err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1295        if (!err)
1296                err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1297
1298        return err;
1299}
1300
1301static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1302{
1303        int err;
1304
1305        err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1306                           (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1307                           MII_TG3_AUXCTL_SHDWSEL_MISC);
1308        if (!err)
1309                err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1310
1311        return err;
1312}
1313
1314static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1315{
1316        if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1317                set |= MII_TG3_AUXCTL_MISC_WREN;
1318
1319        return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1320}
1321
1322static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1323{
1324        u32 val;
1325        int err;
1326
1327        err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1328
1329        if (err)
1330                return err;
1331
1332        if (enable)
1333                val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1334        else
1335                val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1336
1337        err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1338                                   val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1339
1340        return err;
1341}
1342
1343static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1344{
1345        return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1346                            reg | val | MII_TG3_MISC_SHDW_WREN);
1347}
1348
1349static int tg3_bmcr_reset(struct tg3 *tp)
1350{
1351        u32 phy_control;
1352        int limit, err;
1353
1354        /* OK, reset it, and poll the BMCR_RESET bit until it
1355         * clears or we time out.
1356         */
1357        phy_control = BMCR_RESET;
1358        err = tg3_writephy(tp, MII_BMCR, phy_control);
1359        if (err != 0)
1360                return -EBUSY;
1361
1362        limit = 5000;
1363        while (limit--) {
1364                err = tg3_readphy(tp, MII_BMCR, &phy_control);
1365                if (err != 0)
1366                        return -EBUSY;
1367
1368                if ((phy_control & BMCR_RESET) == 0) {
1369                        udelay(40);
1370                        break;
1371                }
1372                udelay(10);
1373        }
1374        if (limit < 0)
1375                return -EBUSY;
1376
1377        return 0;
1378}
1379
1380static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1381{
1382        struct tg3 *tp = bp->priv;
1383        u32 val;
1384
1385        spin_lock_bh(&tp->lock);
1386
1387        if (__tg3_readphy(tp, mii_id, reg, &val))
1388                val = -EIO;
1389
1390        spin_unlock_bh(&tp->lock);
1391
1392        return val;
1393}
1394
1395static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1396{
1397        struct tg3 *tp = bp->priv;
1398        u32 ret = 0;
1399
1400        spin_lock_bh(&tp->lock);
1401
1402        if (__tg3_writephy(tp, mii_id, reg, val))
1403                ret = -EIO;
1404
1405        spin_unlock_bh(&tp->lock);
1406
1407        return ret;
1408}
1409
1410static void tg3_mdio_config_5785(struct tg3 *tp)
1411{
1412        u32 val;
1413        struct phy_device *phydev;
1414
1415        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1416        switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1417        case PHY_ID_BCM50610:
1418        case PHY_ID_BCM50610M:
1419                val = MAC_PHYCFG2_50610_LED_MODES;
1420                break;
1421        case PHY_ID_BCMAC131:
1422                val = MAC_PHYCFG2_AC131_LED_MODES;
1423                break;
1424        case PHY_ID_RTL8211C:
1425                val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1426                break;
1427        case PHY_ID_RTL8201E:
1428                val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1429                break;
1430        default:
1431                return;
1432        }
1433
1434        if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1435                tw32(MAC_PHYCFG2, val);
1436
1437                val = tr32(MAC_PHYCFG1);
1438                val &= ~(MAC_PHYCFG1_RGMII_INT |
1439                         MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1440                val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1441                tw32(MAC_PHYCFG1, val);
1442
1443                return;
1444        }
1445
1446        if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1447                val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1448                       MAC_PHYCFG2_FMODE_MASK_MASK |
1449                       MAC_PHYCFG2_GMODE_MASK_MASK |
1450                       MAC_PHYCFG2_ACT_MASK_MASK   |
1451                       MAC_PHYCFG2_QUAL_MASK_MASK |
1452                       MAC_PHYCFG2_INBAND_ENABLE;
1453
1454        tw32(MAC_PHYCFG2, val);
1455
1456        val = tr32(MAC_PHYCFG1);
1457        val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1458                 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1459        if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1460                if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1461                        val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1462                if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1463                        val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1464        }
1465        val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1466               MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1467        tw32(MAC_PHYCFG1, val);
1468
1469        val = tr32(MAC_EXT_RGMII_MODE);
1470        val &= ~(MAC_RGMII_MODE_RX_INT_B |
1471                 MAC_RGMII_MODE_RX_QUALITY |
1472                 MAC_RGMII_MODE_RX_ACTIVITY |
1473                 MAC_RGMII_MODE_RX_ENG_DET |
1474                 MAC_RGMII_MODE_TX_ENABLE |
1475                 MAC_RGMII_MODE_TX_LOWPWR |
1476                 MAC_RGMII_MODE_TX_RESET);
1477        if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1478                if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1479                        val |= MAC_RGMII_MODE_RX_INT_B |
1480                               MAC_RGMII_MODE_RX_QUALITY |
1481                               MAC_RGMII_MODE_RX_ACTIVITY |
1482                               MAC_RGMII_MODE_RX_ENG_DET;
1483                if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1484                        val |= MAC_RGMII_MODE_TX_ENABLE |
1485                               MAC_RGMII_MODE_TX_LOWPWR |
1486                               MAC_RGMII_MODE_TX_RESET;
1487        }
1488        tw32(MAC_EXT_RGMII_MODE, val);
1489}
1490
1491static void tg3_mdio_start(struct tg3 *tp)
1492{
1493        tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1494        tw32_f(MAC_MI_MODE, tp->mi_mode);
1495        udelay(80);
1496
1497        if (tg3_flag(tp, MDIOBUS_INITED) &&
1498            tg3_asic_rev(tp) == ASIC_REV_5785)
1499                tg3_mdio_config_5785(tp);
1500}
1501
1502static int tg3_mdio_init(struct tg3 *tp)
1503{
1504        int i;
1505        u32 reg;
1506        struct phy_device *phydev;
1507
1508        if (tg3_flag(tp, 5717_PLUS)) {
1509                u32 is_serdes;
1510
1511                tp->phy_addr = tp->pci_fn + 1;
1512
1513                if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1514                        is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1515                else
1516                        is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1517                                    TG3_CPMU_PHY_STRAP_IS_SERDES;
1518                if (is_serdes)
1519                        tp->phy_addr += 7;
1520        } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1521                int addr;
1522
1523                addr = ssb_gige_get_phyaddr(tp->pdev);
1524                if (addr < 0)
1525                        return addr;
1526                tp->phy_addr = addr;
1527        } else
1528                tp->phy_addr = TG3_PHY_MII_ADDR;
1529
1530        tg3_mdio_start(tp);
1531
1532        if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1533                return 0;
1534
1535        tp->mdio_bus = mdiobus_alloc();
1536        if (tp->mdio_bus == NULL)
1537                return -ENOMEM;
1538
1539        tp->mdio_bus->name     = "tg3 mdio bus";
1540        snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1541                 (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1542        tp->mdio_bus->priv     = tp;
1543        tp->mdio_bus->parent   = &tp->pdev->dev;
1544        tp->mdio_bus->read     = &tg3_mdio_read;
1545        tp->mdio_bus->write    = &tg3_mdio_write;
1546        tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1547
1548        /* The bus registration will look for all the PHYs on the mdio bus.
1549         * Unfortunately, it does not ensure the PHY is powered up before
1550         * accessing the PHY ID registers.  A chip reset is the
1551         * quickest way to bring the device back to an operational state..
1552         */
1553        if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1554                tg3_bmcr_reset(tp);
1555
1556        i = mdiobus_register(tp->mdio_bus);
1557        if (i) {
1558                dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1559                mdiobus_free(tp->mdio_bus);
1560                return i;
1561        }
1562
1563        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1564
1565        if (!phydev || !phydev->drv) {
1566                dev_warn(&tp->pdev->dev, "No PHY devices\n");
1567                mdiobus_unregister(tp->mdio_bus);
1568                mdiobus_free(tp->mdio_bus);
1569                return -ENODEV;
1570        }
1571
1572        switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1573        case PHY_ID_BCM57780:
1574                phydev->interface = PHY_INTERFACE_MODE_GMII;
1575                phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1576                break;
1577        case PHY_ID_BCM50610:
1578        case PHY_ID_BCM50610M:
1579                phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1580                                     PHY_BRCM_RX_REFCLK_UNUSED |
1581                                     PHY_BRCM_DIS_TXCRXC_NOENRGY |
1582                                     PHY_BRCM_AUTO_PWRDWN_ENABLE;
1583                fallthrough;
1584        case PHY_ID_RTL8211C:
1585                phydev->interface = PHY_INTERFACE_MODE_RGMII;
1586                break;
1587        case PHY_ID_RTL8201E:
1588        case PHY_ID_BCMAC131:
1589                phydev->interface = PHY_INTERFACE_MODE_MII;
1590                phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1591                tp->phy_flags |= TG3_PHYFLG_IS_FET;
1592                break;
1593        }
1594
1595        tg3_flag_set(tp, MDIOBUS_INITED);
1596
1597        if (tg3_asic_rev(tp) == ASIC_REV_5785)
1598                tg3_mdio_config_5785(tp);
1599
1600        return 0;
1601}
1602
1603static void tg3_mdio_fini(struct tg3 *tp)
1604{
1605        if (tg3_flag(tp, MDIOBUS_INITED)) {
1606                tg3_flag_clear(tp, MDIOBUS_INITED);
1607                mdiobus_unregister(tp->mdio_bus);
1608                mdiobus_free(tp->mdio_bus);
1609        }
1610}
1611
1612/* tp->lock is held. */
1613static inline void tg3_generate_fw_event(struct tg3 *tp)
1614{
1615        u32 val;
1616
1617        val = tr32(GRC_RX_CPU_EVENT);
1618        val |= GRC_RX_CPU_DRIVER_EVENT;
1619        tw32_f(GRC_RX_CPU_EVENT, val);
1620
1621        tp->last_event_jiffies = jiffies;
1622}
1623
1624#define TG3_FW_EVENT_TIMEOUT_USEC 2500
1625
1626/* tp->lock is held. */
1627static void tg3_wait_for_event_ack(struct tg3 *tp)
1628{
1629        int i;
1630        unsigned int delay_cnt;
1631        long time_remain;
1632
1633        /* If enough time has passed, no wait is necessary. */
1634        time_remain = (long)(tp->last_event_jiffies + 1 +
1635                      usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1636                      (long)jiffies;
1637        if (time_remain < 0)
1638                return;
1639
1640        /* Check if we can shorten the wait time. */
1641        delay_cnt = jiffies_to_usecs(time_remain);
1642        if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1643                delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1644        delay_cnt = (delay_cnt >> 3) + 1;
1645
1646        for (i = 0; i < delay_cnt; i++) {
1647                if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1648                        break;
1649                if (pci_channel_offline(tp->pdev))
1650                        break;
1651
1652                udelay(8);
1653        }
1654}
1655
1656/* tp->lock is held. */
1657static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1658{
1659        u32 reg, val;
1660
1661        val = 0;
1662        if (!tg3_readphy(tp, MII_BMCR, &reg))
1663                val = reg << 16;
1664        if (!tg3_readphy(tp, MII_BMSR, &reg))
1665                val |= (reg & 0xffff);
1666        *data++ = val;
1667
1668        val = 0;
1669        if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1670                val = reg << 16;
1671        if (!tg3_readphy(tp, MII_LPA, &reg))
1672                val |= (reg & 0xffff);
1673        *data++ = val;
1674
1675        val = 0;
1676        if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1677                if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1678                        val = reg << 16;
1679                if (!tg3_readphy(tp, MII_STAT1000, &reg))
1680                        val |= (reg & 0xffff);
1681        }
1682        *data++ = val;
1683
1684        if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1685                val = reg << 16;
1686        else
1687                val = 0;
1688        *data++ = val;
1689}
1690
1691/* tp->lock is held. */
1692static void tg3_ump_link_report(struct tg3 *tp)
1693{
1694        u32 data[4];
1695
1696        if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1697                return;
1698
1699        tg3_phy_gather_ump_data(tp, data);
1700
1701        tg3_wait_for_event_ack(tp);
1702
1703        tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1704        tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1705        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1706        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1707        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1708        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1709
1710        tg3_generate_fw_event(tp);
1711}
1712
1713/* tp->lock is held. */
1714static void tg3_stop_fw(struct tg3 *tp)
1715{
1716        if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1717                /* Wait for RX cpu to ACK the previous event. */
1718                tg3_wait_for_event_ack(tp);
1719
1720                tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1721
1722                tg3_generate_fw_event(tp);
1723
1724                /* Wait for RX cpu to ACK this event. */
1725                tg3_wait_for_event_ack(tp);
1726        }
1727}
1728
1729/* tp->lock is held. */
1730static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1731{
1732        tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1733                      NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1734
1735        if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1736                switch (kind) {
1737                case RESET_KIND_INIT:
1738                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1739                                      DRV_STATE_START);
1740                        break;
1741
1742                case RESET_KIND_SHUTDOWN:
1743                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1744                                      DRV_STATE_UNLOAD);
1745                        break;
1746
1747                case RESET_KIND_SUSPEND:
1748                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1749                                      DRV_STATE_SUSPEND);
1750                        break;
1751
1752                default:
1753                        break;
1754                }
1755        }
1756}
1757
1758/* tp->lock is held. */
1759static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1760{
1761        if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1762                switch (kind) {
1763                case RESET_KIND_INIT:
1764                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1765                                      DRV_STATE_START_DONE);
1766                        break;
1767
1768                case RESET_KIND_SHUTDOWN:
1769                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1770                                      DRV_STATE_UNLOAD_DONE);
1771                        break;
1772
1773                default:
1774                        break;
1775                }
1776        }
1777}
1778
1779/* tp->lock is held. */
1780static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1781{
1782        if (tg3_flag(tp, ENABLE_ASF)) {
1783                switch (kind) {
1784                case RESET_KIND_INIT:
1785                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1786                                      DRV_STATE_START);
1787                        break;
1788
1789                case RESET_KIND_SHUTDOWN:
1790                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1791                                      DRV_STATE_UNLOAD);
1792                        break;
1793
1794                case RESET_KIND_SUSPEND:
1795                        tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1796                                      DRV_STATE_SUSPEND);
1797                        break;
1798
1799                default:
1800                        break;
1801                }
1802        }
1803}
1804
1805static int tg3_poll_fw(struct tg3 *tp)
1806{
1807        int i;
1808        u32 val;
1809
1810        if (tg3_flag(tp, NO_FWARE_REPORTED))
1811                return 0;
1812
1813        if (tg3_flag(tp, IS_SSB_CORE)) {
1814                /* We don't use firmware. */
1815                return 0;
1816        }
1817
1818        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1819                /* Wait up to 20ms for init done. */
1820                for (i = 0; i < 200; i++) {
1821                        if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1822                                return 0;
1823                        if (pci_channel_offline(tp->pdev))
1824                                return -ENODEV;
1825
1826                        udelay(100);
1827                }
1828                return -ENODEV;
1829        }
1830
1831        /* Wait for firmware initialization to complete. */
1832        for (i = 0; i < 100000; i++) {
1833                tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1834                if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1835                        break;
1836                if (pci_channel_offline(tp->pdev)) {
1837                        if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1838                                tg3_flag_set(tp, NO_FWARE_REPORTED);
1839                                netdev_info(tp->dev, "No firmware running\n");
1840                        }
1841
1842                        break;
1843                }
1844
1845                udelay(10);
1846        }
1847
1848        /* Chip might not be fitted with firmware.  Some Sun onboard
1849         * parts are configured like that.  So don't signal the timeout
1850         * of the above loop as an error, but do report the lack of
1851         * running firmware once.
1852         */
1853        if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1854                tg3_flag_set(tp, NO_FWARE_REPORTED);
1855
1856                netdev_info(tp->dev, "No firmware running\n");
1857        }
1858
1859        if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1860                /* The 57765 A0 needs a little more
1861                 * time to do some important work.
1862                 */
1863                mdelay(10);
1864        }
1865
1866        return 0;
1867}
1868
1869static void tg3_link_report(struct tg3 *tp)
1870{
1871        if (!netif_carrier_ok(tp->dev)) {
1872                netif_info(tp, link, tp->dev, "Link is down\n");
1873                tg3_ump_link_report(tp);
1874        } else if (netif_msg_link(tp)) {
1875                netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1876                            (tp->link_config.active_speed == SPEED_1000 ?
1877                             1000 :
1878                             (tp->link_config.active_speed == SPEED_100 ?
1879                              100 : 10)),
1880                            (tp->link_config.active_duplex == DUPLEX_FULL ?
1881                             "full" : "half"));
1882
1883                netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1884                            (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1885                            "on" : "off",
1886                            (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1887                            "on" : "off");
1888
1889                if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1890                        netdev_info(tp->dev, "EEE is %s\n",
1891                                    tp->setlpicnt ? "enabled" : "disabled");
1892
1893                tg3_ump_link_report(tp);
1894        }
1895
1896        tp->link_up = netif_carrier_ok(tp->dev);
1897}
1898
1899static u32 tg3_decode_flowctrl_1000T(u32 adv)
1900{
1901        u32 flowctrl = 0;
1902
1903        if (adv & ADVERTISE_PAUSE_CAP) {
1904                flowctrl |= FLOW_CTRL_RX;
1905                if (!(adv & ADVERTISE_PAUSE_ASYM))
1906                        flowctrl |= FLOW_CTRL_TX;
1907        } else if (adv & ADVERTISE_PAUSE_ASYM)
1908                flowctrl |= FLOW_CTRL_TX;
1909
1910        return flowctrl;
1911}
1912
1913static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1914{
1915        u16 miireg;
1916
1917        if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1918                miireg = ADVERTISE_1000XPAUSE;
1919        else if (flow_ctrl & FLOW_CTRL_TX)
1920                miireg = ADVERTISE_1000XPSE_ASYM;
1921        else if (flow_ctrl & FLOW_CTRL_RX)
1922                miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1923        else
1924                miireg = 0;
1925
1926        return miireg;
1927}
1928
1929static u32 tg3_decode_flowctrl_1000X(u32 adv)
1930{
1931        u32 flowctrl = 0;
1932
1933        if (adv & ADVERTISE_1000XPAUSE) {
1934                flowctrl |= FLOW_CTRL_RX;
1935                if (!(adv & ADVERTISE_1000XPSE_ASYM))
1936                        flowctrl |= FLOW_CTRL_TX;
1937        } else if (adv & ADVERTISE_1000XPSE_ASYM)
1938                flowctrl |= FLOW_CTRL_TX;
1939
1940        return flowctrl;
1941}
1942
1943static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1944{
1945        u8 cap = 0;
1946
1947        if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1948                cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1949        } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1950                if (lcladv & ADVERTISE_1000XPAUSE)
1951                        cap = FLOW_CTRL_RX;
1952                if (rmtadv & ADVERTISE_1000XPAUSE)
1953                        cap = FLOW_CTRL_TX;
1954        }
1955
1956        return cap;
1957}
1958
1959static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1960{
1961        u8 autoneg;
1962        u8 flowctrl = 0;
1963        u32 old_rx_mode = tp->rx_mode;
1964        u32 old_tx_mode = tp->tx_mode;
1965
1966        if (tg3_flag(tp, USE_PHYLIB))
1967                autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1968        else
1969                autoneg = tp->link_config.autoneg;
1970
1971        if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1972                if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1973                        flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1974                else
1975                        flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1976        } else
1977                flowctrl = tp->link_config.flowctrl;
1978
1979        tp->link_config.active_flowctrl = flowctrl;
1980
1981        if (flowctrl & FLOW_CTRL_RX)
1982                tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1983        else
1984                tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1985
1986        if (old_rx_mode != tp->rx_mode)
1987                tw32_f(MAC_RX_MODE, tp->rx_mode);
1988
1989        if (flowctrl & FLOW_CTRL_TX)
1990                tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1991        else
1992                tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1993
1994        if (old_tx_mode != tp->tx_mode)
1995                tw32_f(MAC_TX_MODE, tp->tx_mode);
1996}
1997
1998static void tg3_adjust_link(struct net_device *dev)
1999{
2000        u8 oldflowctrl, linkmesg = 0;
2001        u32 mac_mode, lcl_adv, rmt_adv;
2002        struct tg3 *tp = netdev_priv(dev);
2003        struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2004
2005        spin_lock_bh(&tp->lock);
2006
2007        mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2008                                    MAC_MODE_HALF_DUPLEX);
2009
2010        oldflowctrl = tp->link_config.active_flowctrl;
2011
2012        if (phydev->link) {
2013                lcl_adv = 0;
2014                rmt_adv = 0;
2015
2016                if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2017                        mac_mode |= MAC_MODE_PORT_MODE_MII;
2018                else if (phydev->speed == SPEED_1000 ||
2019                         tg3_asic_rev(tp) != ASIC_REV_5785)
2020                        mac_mode |= MAC_MODE_PORT_MODE_GMII;
2021                else
2022                        mac_mode |= MAC_MODE_PORT_MODE_MII;
2023
2024                if (phydev->duplex == DUPLEX_HALF)
2025                        mac_mode |= MAC_MODE_HALF_DUPLEX;
2026                else {
2027                        lcl_adv = mii_advertise_flowctrl(
2028                                  tp->link_config.flowctrl);
2029
2030                        if (phydev->pause)
2031                                rmt_adv = LPA_PAUSE_CAP;
2032                        if (phydev->asym_pause)
2033                                rmt_adv |= LPA_PAUSE_ASYM;
2034                }
2035
2036                tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2037        } else
2038                mac_mode |= MAC_MODE_PORT_MODE_GMII;
2039
2040        if (mac_mode != tp->mac_mode) {
2041                tp->mac_mode = mac_mode;
2042                tw32_f(MAC_MODE, tp->mac_mode);
2043                udelay(40);
2044        }
2045
2046        if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2047                if (phydev->speed == SPEED_10)
2048                        tw32(MAC_MI_STAT,
2049                             MAC_MI_STAT_10MBPS_MODE |
2050                             MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2051                else
2052                        tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2053        }
2054
2055        if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2056                tw32(MAC_TX_LENGTHS,
2057                     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2058                      (6 << TX_LENGTHS_IPG_SHIFT) |
2059                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2060        else
2061                tw32(MAC_TX_LENGTHS,
2062                     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2063                      (6 << TX_LENGTHS_IPG_SHIFT) |
2064                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2065
2066        if (phydev->link != tp->old_link ||
2067            phydev->speed != tp->link_config.active_speed ||
2068            phydev->duplex != tp->link_config.active_duplex ||
2069            oldflowctrl != tp->link_config.active_flowctrl)
2070                linkmesg = 1;
2071
2072        tp->old_link = phydev->link;
2073        tp->link_config.active_speed = phydev->speed;
2074        tp->link_config.active_duplex = phydev->duplex;
2075
2076        spin_unlock_bh(&tp->lock);
2077
2078        if (linkmesg)
2079                tg3_link_report(tp);
2080}
2081
2082static int tg3_phy_init(struct tg3 *tp)
2083{
2084        struct phy_device *phydev;
2085
2086        if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2087                return 0;
2088
2089        /* Bring the PHY back to a known state. */
2090        tg3_bmcr_reset(tp);
2091
2092        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2093
2094        /* Attach the MAC to the PHY. */
2095        phydev = phy_connect(tp->dev, phydev_name(phydev),
2096                             tg3_adjust_link, phydev->interface);
2097        if (IS_ERR(phydev)) {
2098                dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2099                return PTR_ERR(phydev);
2100        }
2101
2102        /* Mask with MAC supported features. */
2103        switch (phydev->interface) {
2104        case PHY_INTERFACE_MODE_GMII:
2105        case PHY_INTERFACE_MODE_RGMII:
2106                if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2107                        phy_set_max_speed(phydev, SPEED_1000);
2108                        phy_support_asym_pause(phydev);
2109                        break;
2110                }
2111                fallthrough;
2112        case PHY_INTERFACE_MODE_MII:
2113                phy_set_max_speed(phydev, SPEED_100);
2114                phy_support_asym_pause(phydev);
2115                break;
2116        default:
2117                phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2118                return -EINVAL;
2119        }
2120
2121        tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2122
2123        phy_attached_info(phydev);
2124
2125        return 0;
2126}
2127
2128static void tg3_phy_start(struct tg3 *tp)
2129{
2130        struct phy_device *phydev;
2131
2132        if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2133                return;
2134
2135        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2136
2137        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2138                tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2139                phydev->speed = tp->link_config.speed;
2140                phydev->duplex = tp->link_config.duplex;
2141                phydev->autoneg = tp->link_config.autoneg;
2142                ethtool_convert_legacy_u32_to_link_mode(
2143                        phydev->advertising, tp->link_config.advertising);
2144        }
2145
2146        phy_start(phydev);
2147
2148        phy_start_aneg(phydev);
2149}
2150
2151static void tg3_phy_stop(struct tg3 *tp)
2152{
2153        if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2154                return;
2155
2156        phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2157}
2158
2159static void tg3_phy_fini(struct tg3 *tp)
2160{
2161        if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2162                phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2163                tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2164        }
2165}
2166
2167static int tg3_phy_set_extloopbk(struct tg3 *tp)
2168{
2169        int err;
2170        u32 val;
2171
2172        if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2173                return 0;
2174
2175        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2176                /* Cannot do read-modify-write on 5401 */
2177                err = tg3_phy_auxctl_write(tp,
2178                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2179                                           MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2180                                           0x4c20);
2181                goto done;
2182        }
2183
2184        err = tg3_phy_auxctl_read(tp,
2185                                  MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2186        if (err)
2187                return err;
2188
2189        val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2190        err = tg3_phy_auxctl_write(tp,
2191                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2192
2193done:
2194        return err;
2195}
2196
2197static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2198{
2199        u32 phytest;
2200
2201        if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2202                u32 phy;
2203
2204                tg3_writephy(tp, MII_TG3_FET_TEST,
2205                             phytest | MII_TG3_FET_SHADOW_EN);
2206                if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2207                        if (enable)
2208                                phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2209                        else
2210                                phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2211                        tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2212                }
2213                tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2214        }
2215}
2216
2217static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2218{
2219        u32 reg;
2220
2221        if (!tg3_flag(tp, 5705_PLUS) ||
2222            (tg3_flag(tp, 5717_PLUS) &&
2223             (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2224                return;
2225
2226        if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2227                tg3_phy_fet_toggle_apd(tp, enable);
2228                return;
2229        }
2230
2231        reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2232              MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2233              MII_TG3_MISC_SHDW_SCR5_SDTL |
2234              MII_TG3_MISC_SHDW_SCR5_C125OE;
2235        if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2236                reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2237
2238        tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2239
2240
2241        reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2242        if (enable)
2243                reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2244
2245        tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2246}
2247
2248static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2249{
2250        u32 phy;
2251
2252        if (!tg3_flag(tp, 5705_PLUS) ||
2253            (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2254                return;
2255
2256        if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2257                u32 ephy;
2258
2259                if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2260                        u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2261
2262                        tg3_writephy(tp, MII_TG3_FET_TEST,
2263                                     ephy | MII_TG3_FET_SHADOW_EN);
2264                        if (!tg3_readphy(tp, reg, &phy)) {
2265                                if (enable)
2266                                        phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2267                                else
2268                                        phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2269                                tg3_writephy(tp, reg, phy);
2270                        }
2271                        tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2272                }
2273        } else {
2274                int ret;
2275
2276                ret = tg3_phy_auxctl_read(tp,
2277                                          MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2278                if (!ret) {
2279                        if (enable)
2280                                phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2281                        else
2282                                phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2283                        tg3_phy_auxctl_write(tp,
2284                                             MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2285                }
2286        }
2287}
2288
2289static void tg3_phy_set_wirespeed(struct tg3 *tp)
2290{
2291        int ret;
2292        u32 val;
2293
2294        if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2295                return;
2296
2297        ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2298        if (!ret)
2299                tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2300                                     val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2301}
2302
2303static void tg3_phy_apply_otp(struct tg3 *tp)
2304{
2305        u32 otp, phy;
2306
2307        if (!tp->phy_otp)
2308                return;
2309
2310        otp = tp->phy_otp;
2311
2312        if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2313                return;
2314
2315        phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2316        phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2317        tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2318
2319        phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2320              ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2321        tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2322
2323        phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2324        phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2325        tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2326
2327        phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2328        tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2329
2330        phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2331        tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2332
2333        phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2334              ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2335        tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2336
2337        tg3_phy_toggle_auxctl_smdsp(tp, false);
2338}
2339
2340static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2341{
2342        u32 val;
2343        struct ethtool_eee *dest = &tp->eee;
2344
2345        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2346                return;
2347
2348        if (eee)
2349                dest = eee;
2350
2351        if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2352                return;
2353
2354        /* Pull eee_active */
2355        if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2356            val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2357                dest->eee_active = 1;
2358        } else
2359                dest->eee_active = 0;
2360
2361        /* Pull lp advertised settings */
2362        if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2363                return;
2364        dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2365
2366        /* Pull advertised and eee_enabled settings */
2367        if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2368                return;
2369        dest->eee_enabled = !!val;
2370        dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2371
2372        /* Pull tx_lpi_enabled */
2373        val = tr32(TG3_CPMU_EEE_MODE);
2374        dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2375
2376        /* Pull lpi timer value */
2377        dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2378}
2379
2380static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2381{
2382        u32 val;
2383
2384        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2385                return;
2386
2387        tp->setlpicnt = 0;
2388
2389        if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2390            current_link_up &&
2391            tp->link_config.active_duplex == DUPLEX_FULL &&
2392            (tp->link_config.active_speed == SPEED_100 ||
2393             tp->link_config.active_speed == SPEED_1000)) {
2394                u32 eeectl;
2395
2396                if (tp->link_config.active_speed == SPEED_1000)
2397                        eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2398                else
2399                        eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2400
2401                tw32(TG3_CPMU_EEE_CTRL, eeectl);
2402
2403                tg3_eee_pull_config(tp, NULL);
2404                if (tp->eee.eee_active)
2405                        tp->setlpicnt = 2;
2406        }
2407
2408        if (!tp->setlpicnt) {
2409                if (current_link_up &&
2410                   !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2411                        tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2412                        tg3_phy_toggle_auxctl_smdsp(tp, false);
2413                }
2414
2415                val = tr32(TG3_CPMU_EEE_MODE);
2416                tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2417        }
2418}
2419
2420static void tg3_phy_eee_enable(struct tg3 *tp)
2421{
2422        u32 val;
2423
2424        if (tp->link_config.active_speed == SPEED_1000 &&
2425            (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2426             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2427             tg3_flag(tp, 57765_CLASS)) &&
2428            !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2429                val = MII_TG3_DSP_TAP26_ALNOKO |
2430                      MII_TG3_DSP_TAP26_RMRXSTO;
2431                tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2432                tg3_phy_toggle_auxctl_smdsp(tp, false);
2433        }
2434
2435        val = tr32(TG3_CPMU_EEE_MODE);
2436        tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2437}
2438
2439static int tg3_wait_macro_done(struct tg3 *tp)
2440{
2441        int limit = 100;
2442
2443        while (limit--) {
2444                u32 tmp32;
2445
2446                if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2447                        if ((tmp32 & 0x1000) == 0)
2448                                break;
2449                }
2450        }
2451        if (limit < 0)
2452                return -EBUSY;
2453
2454        return 0;
2455}
2456
2457static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2458{
2459        static const u32 test_pat[4][6] = {
2460        { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2461        { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2462        { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2463        { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2464        };
2465        int chan;
2466
2467        for (chan = 0; chan < 4; chan++) {
2468                int i;
2469
2470                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2471                             (chan * 0x2000) | 0x0200);
2472                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2473
2474                for (i = 0; i < 6; i++)
2475                        tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2476                                     test_pat[chan][i]);
2477
2478                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2479                if (tg3_wait_macro_done(tp)) {
2480                        *resetp = 1;
2481                        return -EBUSY;
2482                }
2483
2484                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2485                             (chan * 0x2000) | 0x0200);
2486                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2487                if (tg3_wait_macro_done(tp)) {
2488                        *resetp = 1;
2489                        return -EBUSY;
2490                }
2491
2492                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2493                if (tg3_wait_macro_done(tp)) {
2494                        *resetp = 1;
2495                        return -EBUSY;
2496                }
2497
2498                for (i = 0; i < 6; i += 2) {
2499                        u32 low, high;
2500
2501                        if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2502                            tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2503                            tg3_wait_macro_done(tp)) {
2504                                *resetp = 1;
2505                                return -EBUSY;
2506                        }
2507                        low &= 0x7fff;
2508                        high &= 0x000f;
2509                        if (low != test_pat[chan][i] ||
2510                            high != test_pat[chan][i+1]) {
2511                                tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2512                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2513                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2514
2515                                return -EBUSY;
2516                        }
2517                }
2518        }
2519
2520        return 0;
2521}
2522
2523static int tg3_phy_reset_chanpat(struct tg3 *tp)
2524{
2525        int chan;
2526
2527        for (chan = 0; chan < 4; chan++) {
2528                int i;
2529
2530                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2531                             (chan * 0x2000) | 0x0200);
2532                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2533                for (i = 0; i < 6; i++)
2534                        tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2535                tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2536                if (tg3_wait_macro_done(tp))
2537                        return -EBUSY;
2538        }
2539
2540        return 0;
2541}
2542
2543static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2544{
2545        u32 reg32, phy9_orig;
2546        int retries, do_phy_reset, err;
2547
2548        retries = 10;
2549        do_phy_reset = 1;
2550        do {
2551                if (do_phy_reset) {
2552                        err = tg3_bmcr_reset(tp);
2553                        if (err)
2554                                return err;
2555                        do_phy_reset = 0;
2556                }
2557
2558                /* Disable transmitter and interrupt.  */
2559                if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2560                        continue;
2561
2562                reg32 |= 0x3000;
2563                tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2564
2565                /* Set full-duplex, 1000 mbps.  */
2566                tg3_writephy(tp, MII_BMCR,
2567                             BMCR_FULLDPLX | BMCR_SPEED1000);
2568
2569                /* Set to master mode.  */
2570                if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2571                        continue;
2572
2573                tg3_writephy(tp, MII_CTRL1000,
2574                             CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2575
2576                err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2577                if (err)
2578                        return err;
2579
2580                /* Block the PHY control access.  */
2581                tg3_phydsp_write(tp, 0x8005, 0x0800);
2582
2583                err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2584                if (!err)
2585                        break;
2586        } while (--retries);
2587
2588        err = tg3_phy_reset_chanpat(tp);
2589        if (err)
2590                return err;
2591
2592        tg3_phydsp_write(tp, 0x8005, 0x0000);
2593
2594        tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2595        tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2596
2597        tg3_phy_toggle_auxctl_smdsp(tp, false);
2598
2599        tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2600
2601        err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2602        if (err)
2603                return err;
2604
2605        reg32 &= ~0x3000;
2606        tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2607
2608        return 0;
2609}
2610
2611static void tg3_carrier_off(struct tg3 *tp)
2612{
2613        netif_carrier_off(tp->dev);
2614        tp->link_up = false;
2615}
2616
2617static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2618{
2619        if (tg3_flag(tp, ENABLE_ASF))
2620                netdev_warn(tp->dev,
2621                            "Management side-band traffic will be interrupted during phy settings change\n");
2622}
2623
2624/* This will reset the tigon3 PHY if there is no valid
2625 * link unless the FORCE argument is non-zero.
2626 */
2627static int tg3_phy_reset(struct tg3 *tp)
2628{
2629        u32 val, cpmuctrl;
2630        int err;
2631
2632        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2633                val = tr32(GRC_MISC_CFG);
2634                tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2635                udelay(40);
2636        }
2637        err  = tg3_readphy(tp, MII_BMSR, &val);
2638        err |= tg3_readphy(tp, MII_BMSR, &val);
2639        if (err != 0)
2640                return -EBUSY;
2641
2642        if (netif_running(tp->dev) && tp->link_up) {
2643                netif_carrier_off(tp->dev);
2644                tg3_link_report(tp);
2645        }
2646
2647        if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2648            tg3_asic_rev(tp) == ASIC_REV_5704 ||
2649            tg3_asic_rev(tp) == ASIC_REV_5705) {
2650                err = tg3_phy_reset_5703_4_5(tp);
2651                if (err)
2652                        return err;
2653                goto out;
2654        }
2655
2656        cpmuctrl = 0;
2657        if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2658            tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2659                cpmuctrl = tr32(TG3_CPMU_CTRL);
2660                if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2661                        tw32(TG3_CPMU_CTRL,
2662                             cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2663        }
2664
2665        err = tg3_bmcr_reset(tp);
2666        if (err)
2667                return err;
2668
2669        if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2670                val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2671                tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2672
2673                tw32(TG3_CPMU_CTRL, cpmuctrl);
2674        }
2675
2676        if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2677            tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2678                val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2679                if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2680                    CPMU_LSPD_1000MB_MACCLK_12_5) {
2681                        val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2682                        udelay(40);
2683                        tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2684                }
2685        }
2686
2687        if (tg3_flag(tp, 5717_PLUS) &&
2688            (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2689                return 0;
2690
2691        tg3_phy_apply_otp(tp);
2692
2693        if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2694                tg3_phy_toggle_apd(tp, true);
2695        else
2696                tg3_phy_toggle_apd(tp, false);
2697
2698out:
2699        if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2700            !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2701                tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2702                tg3_phydsp_write(tp, 0x000a, 0x0323);
2703                tg3_phy_toggle_auxctl_smdsp(tp, false);
2704        }
2705
2706        if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2707                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2708                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2709        }
2710
2711        if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2712                if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2713                        tg3_phydsp_write(tp, 0x000a, 0x310b);
2714                        tg3_phydsp_write(tp, 0x201f, 0x9506);
2715                        tg3_phydsp_write(tp, 0x401f, 0x14e2);
2716                        tg3_phy_toggle_auxctl_smdsp(tp, false);
2717                }
2718        } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2719                if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2720                        tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2721                        if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2722                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2723                                tg3_writephy(tp, MII_TG3_TEST1,
2724                                             MII_TG3_TEST1_TRIM_EN | 0x4);
2725                        } else
2726                                tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2727
2728                        tg3_phy_toggle_auxctl_smdsp(tp, false);
2729                }
2730        }
2731
2732        /* Set Extended packet length bit (bit 14) on all chips that */
2733        /* support jumbo frames */
2734        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2735                /* Cannot do read-modify-write on 5401 */
2736                tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2737        } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2738                /* Set bit 14 with read-modify-write to preserve other bits */
2739                err = tg3_phy_auxctl_read(tp,
2740                                          MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2741                if (!err)
2742                        tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2743                                           val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2744        }
2745
2746        /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2747         * jumbo frames transmission.
2748         */
2749        if (tg3_flag(tp, JUMBO_CAPABLE)) {
2750                if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2751                        tg3_writephy(tp, MII_TG3_EXT_CTRL,
2752                                     val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2753        }
2754
2755        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2756                /* adjust output voltage */
2757                tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2758        }
2759
2760        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2761                tg3_phydsp_write(tp, 0xffb, 0x4000);
2762
2763        tg3_phy_toggle_automdix(tp, true);
2764        tg3_phy_set_wirespeed(tp);
2765        return 0;
2766}
2767
2768#define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2769#define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2770#define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2771                                          TG3_GPIO_MSG_NEED_VAUX)
2772#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2773        ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2774         (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2775         (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2776         (TG3_GPIO_MSG_DRVR_PRES << 12))
2777
2778#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2779        ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2780         (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2781         (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2782         (TG3_GPIO_MSG_NEED_VAUX << 12))
2783
2784static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2785{
2786        u32 status, shift;
2787
2788        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2789            tg3_asic_rev(tp) == ASIC_REV_5719)
2790                status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2791        else
2792                status = tr32(TG3_CPMU_DRV_STATUS);
2793
2794        shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2795        status &= ~(TG3_GPIO_MSG_MASK << shift);
2796        status |= (newstat << shift);
2797
2798        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2799            tg3_asic_rev(tp) == ASIC_REV_5719)
2800                tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2801        else
2802                tw32(TG3_CPMU_DRV_STATUS, status);
2803
2804        return status >> TG3_APE_GPIO_MSG_SHIFT;
2805}
2806
2807static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2808{
2809        if (!tg3_flag(tp, IS_NIC))
2810                return 0;
2811
2812        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2813            tg3_asic_rev(tp) == ASIC_REV_5719 ||
2814            tg3_asic_rev(tp) == ASIC_REV_5720) {
2815                if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2816                        return -EIO;
2817
2818                tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2819
2820                tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2821                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2822
2823                tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2824        } else {
2825                tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2826                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2827        }
2828
2829        return 0;
2830}
2831
2832static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2833{
2834        u32 grc_local_ctrl;
2835
2836        if (!tg3_flag(tp, IS_NIC) ||
2837            tg3_asic_rev(tp) == ASIC_REV_5700 ||
2838            tg3_asic_rev(tp) == ASIC_REV_5701)
2839                return;
2840
2841        grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2842
2843        tw32_wait_f(GRC_LOCAL_CTRL,
2844                    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2845                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2846
2847        tw32_wait_f(GRC_LOCAL_CTRL,
2848                    grc_local_ctrl,
2849                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2850
2851        tw32_wait_f(GRC_LOCAL_CTRL,
2852                    grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2853                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2854}
2855
2856static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2857{
2858        if (!tg3_flag(tp, IS_NIC))
2859                return;
2860
2861        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2862            tg3_asic_rev(tp) == ASIC_REV_5701) {
2863                tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2864                            (GRC_LCLCTRL_GPIO_OE0 |
2865                             GRC_LCLCTRL_GPIO_OE1 |
2866                             GRC_LCLCTRL_GPIO_OE2 |
2867                             GRC_LCLCTRL_GPIO_OUTPUT0 |
2868                             GRC_LCLCTRL_GPIO_OUTPUT1),
2869                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2870        } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2871                   tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2872                /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2873                u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2874                                     GRC_LCLCTRL_GPIO_OE1 |
2875                                     GRC_LCLCTRL_GPIO_OE2 |
2876                                     GRC_LCLCTRL_GPIO_OUTPUT0 |
2877                                     GRC_LCLCTRL_GPIO_OUTPUT1 |
2878                                     tp->grc_local_ctrl;
2879                tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2880                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2881
2882                grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2883                tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2884                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2885
2886                grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2887                tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2888                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2889        } else {
2890                u32 no_gpio2;
2891                u32 grc_local_ctrl = 0;
2892
2893                /* Workaround to prevent overdrawing Amps. */
2894                if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2895                        grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2896                        tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2897                                    grc_local_ctrl,
2898                                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2899                }
2900
2901                /* On 5753 and variants, GPIO2 cannot be used. */
2902                no_gpio2 = tp->nic_sram_data_cfg &
2903                           NIC_SRAM_DATA_CFG_NO_GPIO2;
2904
2905                grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2906                                  GRC_LCLCTRL_GPIO_OE1 |
2907                                  GRC_LCLCTRL_GPIO_OE2 |
2908                                  GRC_LCLCTRL_GPIO_OUTPUT1 |
2909                                  GRC_LCLCTRL_GPIO_OUTPUT2;
2910                if (no_gpio2) {
2911                        grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2912                                            GRC_LCLCTRL_GPIO_OUTPUT2);
2913                }
2914                tw32_wait_f(GRC_LOCAL_CTRL,
2915                            tp->grc_local_ctrl | grc_local_ctrl,
2916                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2917
2918                grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2919
2920                tw32_wait_f(GRC_LOCAL_CTRL,
2921                            tp->grc_local_ctrl | grc_local_ctrl,
2922                            TG3_GRC_LCLCTL_PWRSW_DELAY);
2923
2924                if (!no_gpio2) {
2925                        grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2926                        tw32_wait_f(GRC_LOCAL_CTRL,
2927                                    tp->grc_local_ctrl | grc_local_ctrl,
2928                                    TG3_GRC_LCLCTL_PWRSW_DELAY);
2929                }
2930        }
2931}
2932
2933static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2934{
2935        u32 msg = 0;
2936
2937        /* Serialize power state transitions */
2938        if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2939                return;
2940
2941        if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2942                msg = TG3_GPIO_MSG_NEED_VAUX;
2943
2944        msg = tg3_set_function_status(tp, msg);
2945
2946        if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2947                goto done;
2948
2949        if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2950                tg3_pwrsrc_switch_to_vaux(tp);
2951        else
2952                tg3_pwrsrc_die_with_vmain(tp);
2953
2954done:
2955        tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2956}
2957
2958static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2959{
2960        bool need_vaux = false;
2961
2962        /* The GPIOs do something completely different on 57765. */
2963        if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2964                return;
2965
2966        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2967            tg3_asic_rev(tp) == ASIC_REV_5719 ||
2968            tg3_asic_rev(tp) == ASIC_REV_5720) {
2969                tg3_frob_aux_power_5717(tp, include_wol ?
2970                                        tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2971                return;
2972        }
2973
2974        if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2975                struct net_device *dev_peer;
2976
2977                dev_peer = pci_get_drvdata(tp->pdev_peer);
2978
2979                /* remove_one() may have been run on the peer. */
2980                if (dev_peer) {
2981                        struct tg3 *tp_peer = netdev_priv(dev_peer);
2982
2983                        if (tg3_flag(tp_peer, INIT_COMPLETE))
2984                                return;
2985
2986                        if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2987                            tg3_flag(tp_peer, ENABLE_ASF))
2988                                need_vaux = true;
2989                }
2990        }
2991
2992        if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2993            tg3_flag(tp, ENABLE_ASF))
2994                need_vaux = true;
2995
2996        if (need_vaux)
2997                tg3_pwrsrc_switch_to_vaux(tp);
2998        else
2999                tg3_pwrsrc_die_with_vmain(tp);
3000}
3001
3002static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3003{
3004        if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3005                return 1;
3006        else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3007                if (speed != SPEED_10)
3008                        return 1;
3009        } else if (speed == SPEED_10)
3010                return 1;
3011
3012        return 0;
3013}
3014
3015static bool tg3_phy_power_bug(struct tg3 *tp)
3016{
3017        switch (tg3_asic_rev(tp)) {
3018        case ASIC_REV_5700:
3019        case ASIC_REV_5704:
3020                return true;
3021        case ASIC_REV_5780:
3022                if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3023                        return true;
3024                return false;
3025        case ASIC_REV_5717:
3026                if (!tp->pci_fn)
3027                        return true;
3028                return false;
3029        case ASIC_REV_5719:
3030        case ASIC_REV_5720:
3031                if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3032                    !tp->pci_fn)
3033                        return true;
3034                return false;
3035        }
3036
3037        return false;
3038}
3039
3040static bool tg3_phy_led_bug(struct tg3 *tp)
3041{
3042        switch (tg3_asic_rev(tp)) {
3043        case ASIC_REV_5719:
3044        case ASIC_REV_5720:
3045                if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3046                    !tp->pci_fn)
3047                        return true;
3048                return false;
3049        }
3050
3051        return false;
3052}
3053
3054static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3055{
3056        u32 val;
3057
3058        if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3059                return;
3060
3061        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3062                if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3063                        u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3064                        u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3065
3066                        sg_dig_ctrl |=
3067                                SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3068                        tw32(SG_DIG_CTRL, sg_dig_ctrl);
3069                        tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3070                }
3071                return;
3072        }
3073
3074        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3075                tg3_bmcr_reset(tp);
3076                val = tr32(GRC_MISC_CFG);
3077                tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3078                udelay(40);
3079                return;
3080        } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3081                u32 phytest;
3082                if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3083                        u32 phy;
3084
3085                        tg3_writephy(tp, MII_ADVERTISE, 0);
3086                        tg3_writephy(tp, MII_BMCR,
3087                                     BMCR_ANENABLE | BMCR_ANRESTART);
3088
3089                        tg3_writephy(tp, MII_TG3_FET_TEST,
3090                                     phytest | MII_TG3_FET_SHADOW_EN);
3091                        if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3092                                phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3093                                tg3_writephy(tp,
3094                                             MII_TG3_FET_SHDW_AUXMODE4,
3095                                             phy);
3096                        }
3097                        tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3098                }
3099                return;
3100        } else if (do_low_power) {
3101                if (!tg3_phy_led_bug(tp))
3102                        tg3_writephy(tp, MII_TG3_EXT_CTRL,
3103                                     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3104
3105                val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3106                      MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3107                      MII_TG3_AUXCTL_PCTL_VREG_11V;
3108                tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3109        }
3110
3111        /* The PHY should not be powered down on some chips because
3112         * of bugs.
3113         */
3114        if (tg3_phy_power_bug(tp))
3115                return;
3116
3117        if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3118            tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3119                val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3120                val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3121                val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3122                tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3123        }
3124
3125        tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3126}
3127
3128/* tp->lock is held. */
3129static int tg3_nvram_lock(struct tg3 *tp)
3130{
3131        if (tg3_flag(tp, NVRAM)) {
3132                int i;
3133
3134                if (tp->nvram_lock_cnt == 0) {
3135                        tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3136                        for (i = 0; i < 8000; i++) {
3137                                if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3138                                        break;
3139                                udelay(20);
3140                        }
3141                        if (i == 8000) {
3142                                tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3143                                return -ENODEV;
3144                        }
3145                }
3146                tp->nvram_lock_cnt++;
3147        }
3148        return 0;
3149}
3150
3151/* tp->lock is held. */
3152static void tg3_nvram_unlock(struct tg3 *tp)
3153{
3154        if (tg3_flag(tp, NVRAM)) {
3155                if (tp->nvram_lock_cnt > 0)
3156                        tp->nvram_lock_cnt--;
3157                if (tp->nvram_lock_cnt == 0)
3158                        tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3159        }
3160}
3161
3162/* tp->lock is held. */
3163static void tg3_enable_nvram_access(struct tg3 *tp)
3164{
3165        if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3166                u32 nvaccess = tr32(NVRAM_ACCESS);
3167
3168                tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3169        }
3170}
3171
3172/* tp->lock is held. */
3173static void tg3_disable_nvram_access(struct tg3 *tp)
3174{
3175        if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3176                u32 nvaccess = tr32(NVRAM_ACCESS);
3177
3178                tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3179        }
3180}
3181
3182static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3183                                        u32 offset, u32 *val)
3184{
3185        u32 tmp;
3186        int i;
3187
3188        if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3189                return -EINVAL;
3190
3191        tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3192                                        EEPROM_ADDR_DEVID_MASK |
3193                                        EEPROM_ADDR_READ);
3194        tw32(GRC_EEPROM_ADDR,
3195             tmp |
3196             (0 << EEPROM_ADDR_DEVID_SHIFT) |
3197             ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3198              EEPROM_ADDR_ADDR_MASK) |
3199             EEPROM_ADDR_READ | EEPROM_ADDR_START);
3200
3201        for (i = 0; i < 1000; i++) {
3202                tmp = tr32(GRC_EEPROM_ADDR);
3203
3204                if (tmp & EEPROM_ADDR_COMPLETE)
3205                        break;
3206                msleep(1);
3207        }
3208        if (!(tmp & EEPROM_ADDR_COMPLETE))
3209                return -EBUSY;
3210
3211        tmp = tr32(GRC_EEPROM_DATA);
3212
3213        /*
3214         * The data will always be opposite the native endian
3215         * format.  Perform a blind byteswap to compensate.
3216         */
3217        *val = swab32(tmp);
3218
3219        return 0;
3220}
3221
3222#define NVRAM_CMD_TIMEOUT 10000
3223
3224static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3225{
3226        int i;
3227
3228        tw32(NVRAM_CMD, nvram_cmd);
3229        for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3230                usleep_range(10, 40);
3231                if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3232                        udelay(10);
3233                        break;
3234                }
3235        }
3236
3237        if (i == NVRAM_CMD_TIMEOUT)
3238                return -EBUSY;
3239
3240        return 0;
3241}
3242
3243static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3244{
3245        if (tg3_flag(tp, NVRAM) &&
3246            tg3_flag(tp, NVRAM_BUFFERED) &&
3247            tg3_flag(tp, FLASH) &&
3248            !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3249            (tp->nvram_jedecnum == JEDEC_ATMEL))
3250
3251                addr = ((addr / tp->nvram_pagesize) <<
3252                        ATMEL_AT45DB0X1B_PAGE_POS) +
3253                       (addr % tp->nvram_pagesize);
3254
3255        return addr;
3256}
3257
3258static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3259{
3260        if (tg3_flag(tp, NVRAM) &&
3261            tg3_flag(tp, NVRAM_BUFFERED) &&
3262            tg3_flag(tp, FLASH) &&
3263            !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3264            (tp->nvram_jedecnum == JEDEC_ATMEL))
3265
3266                addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3267                        tp->nvram_pagesize) +
3268                       (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3269
3270        return addr;
3271}
3272
3273/* NOTE: Data read in from NVRAM is byteswapped according to
3274 * the byteswapping settings for all other register accesses.
3275 * tg3 devices are BE devices, so on a BE machine, the data
3276 * returned will be exactly as it is seen in NVRAM.  On a LE
3277 * machine, the 32-bit value will be byteswapped.
3278 */
3279static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3280{
3281        int ret;
3282
3283        if (!tg3_flag(tp, NVRAM))
3284                return tg3_nvram_read_using_eeprom(tp, offset, val);
3285
3286        offset = tg3_nvram_phys_addr(tp, offset);
3287
3288        if (offset > NVRAM_ADDR_MSK)
3289                return -EINVAL;
3290
3291        ret = tg3_nvram_lock(tp);
3292        if (ret)
3293                return ret;
3294
3295        tg3_enable_nvram_access(tp);
3296
3297        tw32(NVRAM_ADDR, offset);
3298        ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3299                NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3300
3301        if (ret == 0)
3302                *val = tr32(NVRAM_RDDATA);
3303
3304        tg3_disable_nvram_access(tp);
3305
3306        tg3_nvram_unlock(tp);
3307
3308        return ret;
3309}
3310
3311/* Ensures NVRAM data is in bytestream format. */
3312static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3313{
3314        u32 v;
3315        int res = tg3_nvram_read(tp, offset, &v);
3316        if (!res)
3317                *val = cpu_to_be32(v);
3318        return res;
3319}
3320
3321static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3322                                    u32 offset, u32 len, u8 *buf)
3323{
3324        int i, j, rc = 0;
3325        u32 val;
3326
3327        for (i = 0; i < len; i += 4) {
3328                u32 addr;
3329                __be32 data;
3330
3331                addr = offset + i;
3332
3333                memcpy(&data, buf + i, 4);
3334
3335                /*
3336                 * The SEEPROM interface expects the data to always be opposite
3337                 * the native endian format.  We accomplish this by reversing
3338                 * all the operations that would have been performed on the
3339                 * data from a call to tg3_nvram_read_be32().
3340                 */
3341                tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3342
3343                val = tr32(GRC_EEPROM_ADDR);
3344                tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3345
3346                val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3347                        EEPROM_ADDR_READ);
3348                tw32(GRC_EEPROM_ADDR, val |
3349                        (0 << EEPROM_ADDR_DEVID_SHIFT) |
3350                        (addr & EEPROM_ADDR_ADDR_MASK) |
3351                        EEPROM_ADDR_START |
3352                        EEPROM_ADDR_WRITE);
3353
3354                for (j = 0; j < 1000; j++) {
3355                        val = tr32(GRC_EEPROM_ADDR);
3356
3357                        if (val & EEPROM_ADDR_COMPLETE)
3358                                break;
3359                        msleep(1);
3360                }
3361                if (!(val & EEPROM_ADDR_COMPLETE)) {
3362                        rc = -EBUSY;
3363                        break;
3364                }
3365        }
3366
3367        return rc;
3368}
3369
3370/* offset and length are dword aligned */
3371static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3372                u8 *buf)
3373{
3374        int ret = 0;
3375        u32 pagesize = tp->nvram_pagesize;
3376        u32 pagemask = pagesize - 1;
3377        u32 nvram_cmd;
3378        u8 *tmp;
3379
3380        tmp = kmalloc(pagesize, GFP_KERNEL);
3381        if (tmp == NULL)
3382                return -ENOMEM;
3383
3384        while (len) {
3385                int j;
3386                u32 phy_addr, page_off, size;
3387
3388                phy_addr = offset & ~pagemask;
3389
3390                for (j = 0; j < pagesize; j += 4) {
3391                        ret = tg3_nvram_read_be32(tp, phy_addr + j,
3392                                                  (__be32 *) (tmp + j));
3393                        if (ret)
3394                                break;
3395                }
3396                if (ret)
3397                        break;
3398
3399                page_off = offset & pagemask;
3400                size = pagesize;
3401                if (len < size)
3402                        size = len;
3403
3404                len -= size;
3405
3406                memcpy(tmp + page_off, buf, size);
3407
3408                offset = offset + (pagesize - page_off);
3409
3410                tg3_enable_nvram_access(tp);
3411
3412                /*
3413                 * Before we can erase the flash page, we need
3414                 * to issue a special "write enable" command.
3415                 */
3416                nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3417
3418                if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3419                        break;
3420
3421                /* Erase the target page */
3422                tw32(NVRAM_ADDR, phy_addr);
3423
3424                nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3425                        NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3426
3427                if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3428                        break;
3429
3430                /* Issue another write enable to start the write. */
3431                nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3432
3433                if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3434                        break;
3435
3436                for (j = 0; j < pagesize; j += 4) {
3437                        __be32 data;
3438
3439                        data = *((__be32 *) (tmp + j));
3440
3441                        tw32(NVRAM_WRDATA, be32_to_cpu(data));
3442
3443                        tw32(NVRAM_ADDR, phy_addr + j);
3444
3445                        nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3446                                NVRAM_CMD_WR;
3447
3448                        if (j == 0)
3449                                nvram_cmd |= NVRAM_CMD_FIRST;
3450                        else if (j == (pagesize - 4))
3451                                nvram_cmd |= NVRAM_CMD_LAST;
3452
3453                        ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3454                        if (ret)
3455                                break;
3456                }
3457                if (ret)
3458                        break;
3459        }
3460
3461        nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3462        tg3_nvram_exec_cmd(tp, nvram_cmd);
3463
3464        kfree(tmp);
3465
3466        return ret;
3467}
3468
3469/* offset and length are dword aligned */
3470static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3471                u8 *buf)
3472{
3473        int i, ret = 0;
3474
3475        for (i = 0; i < len; i += 4, offset += 4) {
3476                u32 page_off, phy_addr, nvram_cmd;
3477                __be32 data;
3478
3479                memcpy(&data, buf + i, 4);
3480                tw32(NVRAM_WRDATA, be32_to_cpu(data));
3481
3482                page_off = offset % tp->nvram_pagesize;
3483
3484                phy_addr = tg3_nvram_phys_addr(tp, offset);
3485
3486                nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3487
3488                if (page_off == 0 || i == 0)
3489                        nvram_cmd |= NVRAM_CMD_FIRST;
3490                if (page_off == (tp->nvram_pagesize - 4))
3491                        nvram_cmd |= NVRAM_CMD_LAST;
3492
3493                if (i == (len - 4))
3494                        nvram_cmd |= NVRAM_CMD_LAST;
3495
3496                if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3497                    !tg3_flag(tp, FLASH) ||
3498                    !tg3_flag(tp, 57765_PLUS))
3499                        tw32(NVRAM_ADDR, phy_addr);
3500
3501                if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3502                    !tg3_flag(tp, 5755_PLUS) &&
3503                    (tp->nvram_jedecnum == JEDEC_ST) &&
3504                    (nvram_cmd & NVRAM_CMD_FIRST)) {
3505                        u32 cmd;
3506
3507                        cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3508                        ret = tg3_nvram_exec_cmd(tp, cmd);
3509                        if (ret)
3510                                break;
3511                }
3512                if (!tg3_flag(tp, FLASH)) {
3513                        /* We always do complete word writes to eeprom. */
3514                        nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3515                }
3516
3517                ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3518                if (ret)
3519                        break;
3520        }
3521        return ret;
3522}
3523
3524/* offset and length are dword aligned */
3525static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3526{
3527        int ret;
3528
3529        if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3530                tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3531                       ~GRC_LCLCTRL_GPIO_OUTPUT1);
3532                udelay(40);
3533        }
3534
3535        if (!tg3_flag(tp, NVRAM)) {
3536                ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3537        } else {
3538                u32 grc_mode;
3539
3540                ret = tg3_nvram_lock(tp);
3541                if (ret)
3542                        return ret;
3543
3544                tg3_enable_nvram_access(tp);
3545                if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3546                        tw32(NVRAM_WRITE1, 0x406);
3547
3548                grc_mode = tr32(GRC_MODE);
3549                tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3550
3551                if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3552                        ret = tg3_nvram_write_block_buffered(tp, offset, len,
3553                                buf);
3554                } else {
3555                        ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3556                                buf);
3557                }
3558
3559                grc_mode = tr32(GRC_MODE);
3560                tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3561
3562                tg3_disable_nvram_access(tp);
3563                tg3_nvram_unlock(tp);
3564        }
3565
3566        if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3567                tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3568                udelay(40);
3569        }
3570
3571        return ret;
3572}
3573
3574#define RX_CPU_SCRATCH_BASE     0x30000
3575#define RX_CPU_SCRATCH_SIZE     0x04000
3576#define TX_CPU_SCRATCH_BASE     0x34000
3577#define TX_CPU_SCRATCH_SIZE     0x04000
3578
3579/* tp->lock is held. */
3580static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3581{
3582        int i;
3583        const int iters = 10000;
3584
3585        for (i = 0; i < iters; i++) {
3586                tw32(cpu_base + CPU_STATE, 0xffffffff);
3587                tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3588                if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3589                        break;
3590                if (pci_channel_offline(tp->pdev))
3591                        return -EBUSY;
3592        }
3593
3594        return (i == iters) ? -EBUSY : 0;
3595}
3596
3597/* tp->lock is held. */
3598static int tg3_rxcpu_pause(struct tg3 *tp)
3599{
3600        int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3601
3602        tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3603        tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3604        udelay(10);
3605
3606        return rc;
3607}
3608
3609/* tp->lock is held. */
3610static int tg3_txcpu_pause(struct tg3 *tp)
3611{
3612        return tg3_pause_cpu(tp, TX_CPU_BASE);
3613}
3614
3615/* tp->lock is held. */
3616static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3617{
3618        tw32(cpu_base + CPU_STATE, 0xffffffff);
3619        tw32_f(cpu_base + CPU_MODE,  0x00000000);
3620}
3621
3622/* tp->lock is held. */
3623static void tg3_rxcpu_resume(struct tg3 *tp)
3624{
3625        tg3_resume_cpu(tp, RX_CPU_BASE);
3626}
3627
3628/* tp->lock is held. */
3629static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3630{
3631        int rc;
3632
3633        BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3634
3635        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3636                u32 val = tr32(GRC_VCPU_EXT_CTRL);
3637
3638                tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3639                return 0;
3640        }
3641        if (cpu_base == RX_CPU_BASE) {
3642                rc = tg3_rxcpu_pause(tp);
3643        } else {
3644                /*
3645                 * There is only an Rx CPU for the 5750 derivative in the
3646                 * BCM4785.
3647                 */
3648                if (tg3_flag(tp, IS_SSB_CORE))
3649                        return 0;
3650
3651                rc = tg3_txcpu_pause(tp);
3652        }
3653
3654        if (rc) {
3655                netdev_err(tp->dev, "%s timed out, %s CPU\n",
3656                           __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3657                return -ENODEV;
3658        }
3659
3660        /* Clear firmware's nvram arbitration. */
3661        if (tg3_flag(tp, NVRAM))
3662                tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3663        return 0;
3664}
3665
3666static int tg3_fw_data_len(struct tg3 *tp,
3667                           const struct tg3_firmware_hdr *fw_hdr)
3668{
3669        int fw_len;
3670
3671        /* Non fragmented firmware have one firmware header followed by a
3672         * contiguous chunk of data to be written. The length field in that
3673         * header is not the length of data to be written but the complete
3674         * length of the bss. The data length is determined based on
3675         * tp->fw->size minus headers.
3676         *
3677         * Fragmented firmware have a main header followed by multiple
3678         * fragments. Each fragment is identical to non fragmented firmware
3679         * with a firmware header followed by a contiguous chunk of data. In
3680         * the main header, the length field is unused and set to 0xffffffff.
3681         * In each fragment header the length is the entire size of that
3682         * fragment i.e. fragment data + header length. Data length is
3683         * therefore length field in the header minus TG3_FW_HDR_LEN.
3684         */
3685        if (tp->fw_len == 0xffffffff)
3686                fw_len = be32_to_cpu(fw_hdr->len);
3687        else
3688                fw_len = tp->fw->size;
3689
3690        return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3691}
3692
3693/* tp->lock is held. */
3694static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3695                                 u32 cpu_scratch_base, int cpu_scratch_size,
3696                                 const struct tg3_firmware_hdr *fw_hdr)
3697{
3698        int err, i;
3699        void (*write_op)(struct tg3 *, u32, u32);
3700        int total_len = tp->fw->size;
3701
3702        if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3703                netdev_err(tp->dev,
3704                           "%s: Trying to load TX cpu firmware which is 5705\n",
3705                           __func__);
3706                return -EINVAL;
3707        }
3708
3709        if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3710                write_op = tg3_write_mem;
3711        else
3712                write_op = tg3_write_indirect_reg32;
3713
3714        if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3715                /* It is possible that bootcode is still loading at this point.
3716                 * Get the nvram lock first before halting the cpu.
3717                 */
3718                int lock_err = tg3_nvram_lock(tp);
3719                err = tg3_halt_cpu(tp, cpu_base);
3720                if (!lock_err)
3721                        tg3_nvram_unlock(tp);
3722                if (err)
3723                        goto out;
3724
3725                for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3726                        write_op(tp, cpu_scratch_base + i, 0);
3727                tw32(cpu_base + CPU_STATE, 0xffffffff);
3728                tw32(cpu_base + CPU_MODE,
3729                     tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3730        } else {
3731                /* Subtract additional main header for fragmented firmware and
3732                 * advance to the first fragment
3733                 */
3734                total_len -= TG3_FW_HDR_LEN;
3735                fw_hdr++;
3736        }
3737
3738        do {
3739                u32 *fw_data = (u32 *)(fw_hdr + 1);
3740                for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3741                        write_op(tp, cpu_scratch_base +
3742                                     (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3743                                     (i * sizeof(u32)),
3744                                 be32_to_cpu(fw_data[i]));
3745
3746                total_len -= be32_to_cpu(fw_hdr->len);
3747
3748                /* Advance to next fragment */
3749                fw_hdr = (struct tg3_firmware_hdr *)
3750                         ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3751        } while (total_len > 0);
3752
3753        err = 0;
3754
3755out:
3756        return err;
3757}
3758
3759/* tp->lock is held. */
3760static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3761{
3762        int i;
3763        const int iters = 5;
3764
3765        tw32(cpu_base + CPU_STATE, 0xffffffff);
3766        tw32_f(cpu_base + CPU_PC, pc);
3767
3768        for (i = 0; i < iters; i++) {
3769                if (tr32(cpu_base + CPU_PC) == pc)
3770                        break;
3771                tw32(cpu_base + CPU_STATE, 0xffffffff);
3772                tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3773                tw32_f(cpu_base + CPU_PC, pc);
3774                udelay(1000);
3775        }
3776
3777        return (i == iters) ? -EBUSY : 0;
3778}
3779
3780/* tp->lock is held. */
3781static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3782{
3783        const struct tg3_firmware_hdr *fw_hdr;
3784        int err;
3785
3786        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3787
3788        /* Firmware blob starts with version numbers, followed by
3789           start address and length. We are setting complete length.
3790           length = end_address_of_bss - start_address_of_text.
3791           Remainder is the blob to be loaded contiguously
3792           from start address. */
3793
3794        err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3795                                    RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3796                                    fw_hdr);
3797        if (err)
3798                return err;
3799
3800        err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3801                                    TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3802                                    fw_hdr);
3803        if (err)
3804                return err;
3805
3806        /* Now startup only the RX cpu. */
3807        err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3808                                       be32_to_cpu(fw_hdr->base_addr));
3809        if (err) {
3810                netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3811                           "should be %08x\n", __func__,
3812                           tr32(RX_CPU_BASE + CPU_PC),
3813                                be32_to_cpu(fw_hdr->base_addr));
3814                return -ENODEV;
3815        }
3816
3817        tg3_rxcpu_resume(tp);
3818
3819        return 0;
3820}
3821
3822static int tg3_validate_rxcpu_state(struct tg3 *tp)
3823{
3824        const int iters = 1000;
3825        int i;
3826        u32 val;
3827
3828        /* Wait for boot code to complete initialization and enter service
3829         * loop. It is then safe to download service patches
3830         */
3831        for (i = 0; i < iters; i++) {
3832                if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3833                        break;
3834
3835                udelay(10);
3836        }
3837
3838        if (i == iters) {
3839                netdev_err(tp->dev, "Boot code not ready for service patches\n");
3840                return -EBUSY;
3841        }
3842
3843        val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3844        if (val & 0xff) {
3845                netdev_warn(tp->dev,
3846                            "Other patches exist. Not downloading EEE patch\n");
3847                return -EEXIST;
3848        }
3849
3850        return 0;
3851}
3852
3853/* tp->lock is held. */
3854static void tg3_load_57766_firmware(struct tg3 *tp)
3855{
3856        struct tg3_firmware_hdr *fw_hdr;
3857
3858        if (!tg3_flag(tp, NO_NVRAM))
3859                return;
3860
3861        if (tg3_validate_rxcpu_state(tp))
3862                return;
3863
3864        if (!tp->fw)
3865                return;
3866
3867        /* This firmware blob has a different format than older firmware
3868         * releases as given below. The main difference is we have fragmented
3869         * data to be written to non-contiguous locations.
3870         *
3871         * In the beginning we have a firmware header identical to other
3872         * firmware which consists of version, base addr and length. The length
3873         * here is unused and set to 0xffffffff.
3874         *
3875         * This is followed by a series of firmware fragments which are
3876         * individually identical to previous firmware. i.e. they have the
3877         * firmware header and followed by data for that fragment. The version
3878         * field of the individual fragment header is unused.
3879         */
3880
3881        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3882        if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3883                return;
3884
3885        if (tg3_rxcpu_pause(tp))
3886                return;
3887
3888        /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3889        tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3890
3891        tg3_rxcpu_resume(tp);
3892}
3893
3894/* tp->lock is held. */
3895static int tg3_load_tso_firmware(struct tg3 *tp)
3896{
3897        const struct tg3_firmware_hdr *fw_hdr;
3898        unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3899        int err;
3900
3901        if (!tg3_flag(tp, FW_TSO))
3902                return 0;
3903
3904        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3905
3906        /* Firmware blob starts with version numbers, followed by
3907           start address and length. We are setting complete length.
3908           length = end_address_of_bss - start_address_of_text.
3909           Remainder is the blob to be loaded contiguously
3910           from start address. */
3911
3912        cpu_scratch_size = tp->fw_len;
3913
3914        if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3915                cpu_base = RX_CPU_BASE;
3916                cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3917        } else {
3918                cpu_base = TX_CPU_BASE;
3919                cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3920                cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3921        }
3922
3923        err = tg3_load_firmware_cpu(tp, cpu_base,
3924                                    cpu_scratch_base, cpu_scratch_size,
3925                                    fw_hdr);
3926        if (err)
3927                return err;
3928
3929        /* Now startup the cpu. */
3930        err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3931                                       be32_to_cpu(fw_hdr->base_addr));
3932        if (err) {
3933                netdev_err(tp->dev,
3934                           "%s fails to set CPU PC, is %08x should be %08x\n",
3935                           __func__, tr32(cpu_base + CPU_PC),
3936                           be32_to_cpu(fw_hdr->base_addr));
3937                return -ENODEV;
3938        }
3939
3940        tg3_resume_cpu(tp, cpu_base);
3941        return 0;
3942}
3943
3944/* tp->lock is held. */
3945static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index)
3946{
3947        u32 addr_high, addr_low;
3948
3949        addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3950        addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3951                    (mac_addr[4] <<  8) | mac_addr[5]);
3952
3953        if (index < 4) {
3954                tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3955                tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3956        } else {
3957                index -= 4;
3958                tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3959                tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3960        }
3961}
3962
3963/* tp->lock is held. */
3964static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3965{
3966        u32 addr_high;
3967        int i;
3968
3969        for (i = 0; i < 4; i++) {
3970                if (i == 1 && skip_mac_1)
3971                        continue;
3972                __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3973        }
3974
3975        if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3976            tg3_asic_rev(tp) == ASIC_REV_5704) {
3977                for (i = 4; i < 16; i++)
3978                        __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3979        }
3980
3981        addr_high = (tp->dev->dev_addr[0] +
3982                     tp->dev->dev_addr[1] +
3983                     tp->dev->dev_addr[2] +
3984                     tp->dev->dev_addr[3] +
3985                     tp->dev->dev_addr[4] +
3986                     tp->dev->dev_addr[5]) &
3987                TX_BACKOFF_SEED_MASK;
3988        tw32(MAC_TX_BACKOFF_SEED, addr_high);
3989}
3990
3991static void tg3_enable_register_access(struct tg3 *tp)
3992{
3993        /*
3994         * Make sure register accesses (indirect or otherwise) will function
3995         * correctly.
3996         */
3997        pci_write_config_dword(tp->pdev,
3998                               TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
3999}
4000
4001static int tg3_power_up(struct tg3 *tp)
4002{
4003        int err;
4004
4005        tg3_enable_register_access(tp);
4006
4007        err = pci_set_power_state(tp->pdev, PCI_D0);
4008        if (!err) {
4009                /* Switch out of Vaux if it is a NIC */
4010                tg3_pwrsrc_switch_to_vmain(tp);
4011        } else {
4012                netdev_err(tp->dev, "Transition to D0 failed\n");
4013        }
4014
4015        return err;
4016}
4017
4018static int tg3_setup_phy(struct tg3 *, bool);
4019
4020static int tg3_power_down_prepare(struct tg3 *tp)
4021{
4022        u32 misc_host_ctrl;
4023        bool device_should_wake, do_low_power;
4024
4025        tg3_enable_register_access(tp);
4026
4027        /* Restore the CLKREQ setting. */
4028        if (tg3_flag(tp, CLKREQ_BUG))
4029                pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4030                                         PCI_EXP_LNKCTL_CLKREQ_EN);
4031
4032        misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4033        tw32(TG3PCI_MISC_HOST_CTRL,
4034             misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4035
4036        device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4037                             tg3_flag(tp, WOL_ENABLE);
4038
4039        if (tg3_flag(tp, USE_PHYLIB)) {
4040                do_low_power = false;
4041                if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4042                    !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4043                        __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, };
4044                        struct phy_device *phydev;
4045                        u32 phyid;
4046
4047                        phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4048
4049                        tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4050
4051                        tp->link_config.speed = phydev->speed;
4052                        tp->link_config.duplex = phydev->duplex;
4053                        tp->link_config.autoneg = phydev->autoneg;
4054                        ethtool_convert_link_mode_to_legacy_u32(
4055                                &tp->link_config.advertising,
4056                                phydev->advertising);
4057
4058                        linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising);
4059                        linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
4060                                         advertising);
4061                        linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
4062                                         advertising);
4063                        linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
4064                                         advertising);
4065
4066                        if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4067                                if (tg3_flag(tp, WOL_SPEED_100MB)) {
4068                                        linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
4069                                                         advertising);
4070                                        linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
4071                                                         advertising);
4072                                        linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4073                                                         advertising);
4074                                } else {
4075                                        linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4076                                                         advertising);
4077                                }
4078                        }
4079
4080                        linkmode_copy(phydev->advertising, advertising);
4081                        phy_start_aneg(phydev);
4082
4083                        phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4084                        if (phyid != PHY_ID_BCMAC131) {
4085                                phyid &= PHY_BCM_OUI_MASK;
4086                                if (phyid == PHY_BCM_OUI_1 ||
4087                                    phyid == PHY_BCM_OUI_2 ||
4088                                    phyid == PHY_BCM_OUI_3)
4089                                        do_low_power = true;
4090                        }
4091                }
4092        } else {
4093                do_low_power = true;
4094
4095                if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4096                        tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4097
4098                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4099                        tg3_setup_phy(tp, false);
4100        }
4101
4102        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4103                u32 val;
4104
4105                val = tr32(GRC_VCPU_EXT_CTRL);
4106                tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4107        } else if (!tg3_flag(tp, ENABLE_ASF)) {
4108                int i;
4109                u32 val;
4110
4111                for (i = 0; i < 200; i++) {
4112                        tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4113                        if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4114                                break;
4115                        msleep(1);
4116                }
4117        }
4118        if (tg3_flag(tp, WOL_CAP))
4119                tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4120                                                     WOL_DRV_STATE_SHUTDOWN |
4121                                                     WOL_DRV_WOL |
4122                                                     WOL_SET_MAGIC_PKT);
4123
4124        if (device_should_wake) {
4125                u32 mac_mode;
4126
4127                if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4128                        if (do_low_power &&
4129                            !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4130                                tg3_phy_auxctl_write(tp,
4131                                               MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4132                                               MII_TG3_AUXCTL_PCTL_WOL_EN |
4133                                               MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4134                                               MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4135                                udelay(40);
4136                        }
4137
4138                        if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4139                                mac_mode = MAC_MODE_PORT_MODE_GMII;
4140                        else if (tp->phy_flags &
4141                                 TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4142                                if (tp->link_config.active_speed == SPEED_1000)
4143                                        mac_mode = MAC_MODE_PORT_MODE_GMII;
4144                                else
4145                                        mac_mode = MAC_MODE_PORT_MODE_MII;
4146                        } else
4147                                mac_mode = MAC_MODE_PORT_MODE_MII;
4148
4149                        mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4150                        if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4151                                u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4152                                             SPEED_100 : SPEED_10;
4153                                if (tg3_5700_link_polarity(tp, speed))
4154                                        mac_mode |= MAC_MODE_LINK_POLARITY;
4155                                else
4156                                        mac_mode &= ~MAC_MODE_LINK_POLARITY;
4157                        }
4158                } else {
4159                        mac_mode = MAC_MODE_PORT_MODE_TBI;
4160                }
4161
4162                if (!tg3_flag(tp, 5750_PLUS))
4163                        tw32(MAC_LED_CTRL, tp->led_ctrl);
4164
4165                mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4166                if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4167                    (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4168                        mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4169
4170                if (tg3_flag(tp, ENABLE_APE))
4171                        mac_mode |= MAC_MODE_APE_TX_EN |
4172                                    MAC_MODE_APE_RX_EN |
4173                                    MAC_MODE_TDE_ENABLE;
4174
4175                tw32_f(MAC_MODE, mac_mode);
4176                udelay(100);
4177
4178                tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4179                udelay(10);
4180        }
4181
4182        if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4183            (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4184             tg3_asic_rev(tp) == ASIC_REV_5701)) {
4185                u32 base_val;
4186
4187                base_val = tp->pci_clock_ctrl;
4188                base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4189                             CLOCK_CTRL_TXCLK_DISABLE);
4190
4191                tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4192                            CLOCK_CTRL_PWRDOWN_PLL133, 40);
4193        } else if (tg3_flag(tp, 5780_CLASS) ||
4194                   tg3_flag(tp, CPMU_PRESENT) ||
4195                   tg3_asic_rev(tp) == ASIC_REV_5906) {
4196                /* do nothing */
4197        } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4198                u32 newbits1, newbits2;
4199
4200                if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4201                    tg3_asic_rev(tp) == ASIC_REV_5701) {
4202                        newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4203                                    CLOCK_CTRL_TXCLK_DISABLE |
4204                                    CLOCK_CTRL_ALTCLK);
4205                        newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4206                } else if (tg3_flag(tp, 5705_PLUS)) {
4207                        newbits1 = CLOCK_CTRL_625_CORE;
4208                        newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4209                } else {
4210                        newbits1 = CLOCK_CTRL_ALTCLK;
4211                        newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4212                }
4213
4214                tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4215                            40);
4216
4217                tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4218                            40);
4219
4220                if (!tg3_flag(tp, 5705_PLUS)) {
4221                        u32 newbits3;
4222
4223                        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4224                            tg3_asic_rev(tp) == ASIC_REV_5701) {
4225                                newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4226                                            CLOCK_CTRL_TXCLK_DISABLE |
4227                                            CLOCK_CTRL_44MHZ_CORE);
4228                        } else {
4229                                newbits3 = CLOCK_CTRL_44MHZ_CORE;
4230                        }
4231
4232                        tw32_wait_f(TG3PCI_CLOCK_CTRL,
4233                                    tp->pci_clock_ctrl | newbits3, 40);
4234                }
4235        }
4236
4237        if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4238                tg3_power_down_phy(tp, do_low_power);
4239
4240        tg3_frob_aux_power(tp, true);
4241
4242        /* Workaround for unstable PLL clock */
4243        if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4244            ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4245             (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4246                u32 val = tr32(0x7d00);
4247
4248                val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4249                tw32(0x7d00, val);
4250                if (!tg3_flag(tp, ENABLE_ASF)) {
4251                        int err;
4252
4253                        err = tg3_nvram_lock(tp);
4254                        tg3_halt_cpu(tp, RX_CPU_BASE);
4255                        if (!err)
4256                                tg3_nvram_unlock(tp);
4257                }
4258        }
4259
4260        tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4261
4262        tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4263
4264        return 0;
4265}
4266
4267static void tg3_power_down(struct tg3 *tp)
4268{
4269        pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4270        pci_set_power_state(tp->pdev, PCI_D3hot);
4271}
4272
4273static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
4274{
4275        switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4276        case MII_TG3_AUX_STAT_10HALF:
4277                *speed = SPEED_10;
4278                *duplex = DUPLEX_HALF;
4279                break;
4280
4281        case MII_TG3_AUX_STAT_10FULL:
4282                *speed = SPEED_10;
4283                *duplex = DUPLEX_FULL;
4284                break;
4285
4286        case MII_TG3_AUX_STAT_100HALF:
4287                *speed = SPEED_100;
4288                *duplex = DUPLEX_HALF;
4289                break;
4290
4291        case MII_TG3_AUX_STAT_100FULL:
4292                *speed = SPEED_100;
4293                *duplex = DUPLEX_FULL;
4294                break;
4295
4296        case MII_TG3_AUX_STAT_1000HALF:
4297                *speed = SPEED_1000;
4298                *duplex = DUPLEX_HALF;
4299                break;
4300
4301        case MII_TG3_AUX_STAT_1000FULL:
4302                *speed = SPEED_1000;
4303                *duplex = DUPLEX_FULL;
4304                break;
4305
4306        default:
4307                if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4308                        *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4309                                 SPEED_10;
4310                        *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4311                                  DUPLEX_HALF;
4312                        break;
4313                }
4314                *speed = SPEED_UNKNOWN;
4315                *duplex = DUPLEX_UNKNOWN;
4316                break;
4317        }
4318}
4319
4320static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4321{
4322        int err = 0;
4323        u32 val, new_adv;
4324
4325        new_adv = ADVERTISE_CSMA;
4326        new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4327        new_adv |= mii_advertise_flowctrl(flowctrl);
4328
4329        err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4330        if (err)
4331                goto done;
4332
4333        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4334                new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4335
4336                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4337                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4338                        new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4339
4340                err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4341                if (err)
4342                        goto done;
4343        }
4344
4345        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4346                goto done;
4347
4348        tw32(TG3_CPMU_EEE_MODE,
4349             tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4350
4351        err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4352        if (!err) {
4353                u32 err2;
4354
4355                val = 0;
4356                /* Advertise 100-BaseTX EEE ability */
4357                if (advertise & ADVERTISED_100baseT_Full)
4358                        val |= MDIO_AN_EEE_ADV_100TX;
4359                /* Advertise 1000-BaseT EEE ability */
4360                if (advertise & ADVERTISED_1000baseT_Full)
4361                        val |= MDIO_AN_EEE_ADV_1000T;
4362
4363                if (!tp->eee.eee_enabled) {
4364                        val = 0;
4365                        tp->eee.advertised = 0;
4366                } else {
4367                        tp->eee.advertised = advertise &
4368                                             (ADVERTISED_100baseT_Full |
4369                                              ADVERTISED_1000baseT_Full);
4370                }
4371
4372                err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4373                if (err)
4374                        val = 0;
4375
4376                switch (tg3_asic_rev(tp)) {
4377                case ASIC_REV_5717:
4378                case ASIC_REV_57765:
4379                case ASIC_REV_57766:
4380                case ASIC_REV_5719:
4381                        /* If we advertised any eee advertisements above... */
4382                        if (val)
4383                                val = MII_TG3_DSP_TAP26_ALNOKO |
4384                                      MII_TG3_DSP_TAP26_RMRXSTO |
4385                                      MII_TG3_DSP_TAP26_OPCSINPT;
4386                        tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4387                        fallthrough;
4388                case ASIC_REV_5720:
4389                case ASIC_REV_5762:
4390                        if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4391                                tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4392                                                 MII_TG3_DSP_CH34TP2_HIBW01);
4393                }
4394
4395                err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4396                if (!err)
4397                        err = err2;
4398        }
4399
4400done:
4401        return err;
4402}
4403
4404static void tg3_phy_copper_begin(struct tg3 *tp)
4405{
4406        if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4407            (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4408                u32 adv, fc;
4409
4410                if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4411                    !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4412                        adv = ADVERTISED_10baseT_Half |
4413                              ADVERTISED_10baseT_Full;
4414                        if (tg3_flag(tp, WOL_SPEED_100MB))
4415                                adv |= ADVERTISED_100baseT_Half |
4416                                       ADVERTISED_100baseT_Full;
4417                        if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4418                                if (!(tp->phy_flags &
4419                                      TG3_PHYFLG_DISABLE_1G_HD_ADV))
4420                                        adv |= ADVERTISED_1000baseT_Half;
4421                                adv |= ADVERTISED_1000baseT_Full;
4422                        }
4423
4424                        fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4425                } else {
4426                        adv = tp->link_config.advertising;
4427                        if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4428                                adv &= ~(ADVERTISED_1000baseT_Half |
4429                                         ADVERTISED_1000baseT_Full);
4430
4431                        fc = tp->link_config.flowctrl;
4432                }
4433
4434                tg3_phy_autoneg_cfg(tp, adv, fc);
4435
4436                if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4437                    (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4438                        /* Normally during power down we want to autonegotiate
4439                         * the lowest possible speed for WOL. However, to avoid
4440                         * link flap, we leave it untouched.
4441                         */
4442                        return;
4443                }
4444
4445                tg3_writephy(tp, MII_BMCR,
4446                             BMCR_ANENABLE | BMCR_ANRESTART);
4447        } else {
4448                int i;
4449                u32 bmcr, orig_bmcr;
4450
4451                tp->link_config.active_speed = tp->link_config.speed;
4452                tp->link_config.active_duplex = tp->link_config.duplex;
4453
4454                if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4455                        /* With autoneg disabled, 5715 only links up when the
4456                         * advertisement register has the configured speed
4457                         * enabled.
4458                         */
4459                        tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4460                }
4461
4462                bmcr = 0;
4463                switch (tp->link_config.speed) {
4464                default:
4465                case SPEED_10:
4466                        break;
4467
4468                case SPEED_100:
4469                        bmcr |= BMCR_SPEED100;
4470                        break;
4471
4472                case SPEED_1000:
4473                        bmcr |= BMCR_SPEED1000;
4474                        break;
4475                }
4476
4477                if (tp->link_config.duplex == DUPLEX_FULL)
4478                        bmcr |= BMCR_FULLDPLX;
4479
4480                if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4481                    (bmcr != orig_bmcr)) {
4482                        tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4483                        for (i = 0; i < 1500; i++) {
4484                                u32 tmp;
4485
4486                                udelay(10);
4487                                if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4488                                    tg3_readphy(tp, MII_BMSR, &tmp))
4489                                        continue;
4490                                if (!(tmp & BMSR_LSTATUS)) {
4491                                        udelay(40);
4492                                        break;
4493                                }
4494                        }
4495                        tg3_writephy(tp, MII_BMCR, bmcr);
4496                        udelay(40);
4497                }
4498        }
4499}
4500
4501static int tg3_phy_pull_config(struct tg3 *tp)
4502{
4503        int err;
4504        u32 val;
4505
4506        err = tg3_readphy(tp, MII_BMCR, &val);
4507        if (err)
4508                goto done;
4509
4510        if (!(val & BMCR_ANENABLE)) {
4511                tp->link_config.autoneg = AUTONEG_DISABLE;
4512                tp->link_config.advertising = 0;
4513                tg3_flag_clear(tp, PAUSE_AUTONEG);
4514
4515                err = -EIO;
4516
4517                switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4518                case 0:
4519                        if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4520                                goto done;
4521
4522                        tp->link_config.speed = SPEED_10;
4523                        break;
4524                case BMCR_SPEED100:
4525                        if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4526                                goto done;
4527
4528                        tp->link_config.speed = SPEED_100;
4529                        break;
4530                case BMCR_SPEED1000:
4531                        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4532                                tp->link_config.speed = SPEED_1000;
4533                                break;
4534                        }
4535                        fallthrough;
4536                default:
4537                        goto done;
4538                }
4539
4540                if (val & BMCR_FULLDPLX)
4541                        tp->link_config.duplex = DUPLEX_FULL;
4542                else
4543                        tp->link_config.duplex = DUPLEX_HALF;
4544
4545                tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4546
4547                err = 0;
4548                goto done;
4549        }
4550
4551        tp->link_config.autoneg = AUTONEG_ENABLE;
4552        tp->link_config.advertising = ADVERTISED_Autoneg;
4553        tg3_flag_set(tp, PAUSE_AUTONEG);
4554
4555        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4556                u32 adv;
4557
4558                err = tg3_readphy(tp, MII_ADVERTISE, &val);
4559                if (err)
4560                        goto done;
4561
4562                adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4563                tp->link_config.advertising |= adv | ADVERTISED_TP;
4564
4565                tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4566        } else {
4567                tp->link_config.advertising |= ADVERTISED_FIBRE;
4568        }
4569
4570        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4571                u32 adv;
4572
4573                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4574                        err = tg3_readphy(tp, MII_CTRL1000, &val);
4575                        if (err)
4576                                goto done;
4577
4578                        adv = mii_ctrl1000_to_ethtool_adv_t(val);
4579                } else {
4580                        err = tg3_readphy(tp, MII_ADVERTISE, &val);
4581                        if (err)
4582                                goto done;
4583
4584                        adv = tg3_decode_flowctrl_1000X(val);
4585                        tp->link_config.flowctrl = adv;
4586
4587                        val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4588                        adv = mii_adv_to_ethtool_adv_x(val);
4589                }
4590
4591                tp->link_config.advertising |= adv;
4592        }
4593
4594done:
4595        return err;
4596}
4597
4598static int tg3_init_5401phy_dsp(struct tg3 *tp)
4599{
4600        int err;
4601
4602        /* Turn off tap power management. */
4603        /* Set Extended packet length bit */
4604        err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4605
4606        err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4607        err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4608        err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4609        err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4610        err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4611
4612        udelay(40);
4613
4614        return err;
4615}
4616
4617static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4618{
4619        struct ethtool_eee eee;
4620
4621        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4622                return true;
4623
4624        tg3_eee_pull_config(tp, &eee);
4625
4626        if (tp->eee.eee_enabled) {
4627                if (tp->eee.advertised != eee.advertised ||
4628                    tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4629                    tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4630                        return false;
4631        } else {
4632                /* EEE is disabled but we're advertising */
4633                if (eee.advertised)
4634                        return false;
4635        }
4636
4637        return true;
4638}
4639
4640static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4641{
4642        u32 advmsk, tgtadv, advertising;
4643
4644        advertising = tp->link_config.advertising;
4645        tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4646
4647        advmsk = ADVERTISE_ALL;
4648        if (tp->link_config.active_duplex == DUPLEX_FULL) {
4649                tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4650                advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4651        }
4652
4653        if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4654                return false;
4655
4656        if ((*lcladv & advmsk) != tgtadv)
4657                return false;
4658
4659        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4660                u32 tg3_ctrl;
4661
4662                tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4663
4664                if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4665                        return false;
4666
4667                if (tgtadv &&
4668                    (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4669                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4670                        tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4671                        tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4672                                     CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4673                } else {
4674                        tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4675                }
4676
4677                if (tg3_ctrl != tgtadv)
4678                        return false;
4679        }
4680
4681        return true;
4682}
4683
4684static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4685{
4686        u32 lpeth = 0;
4687
4688        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4689                u32 val;
4690
4691                if (tg3_readphy(tp, MII_STAT1000, &val))
4692                        return false;
4693
4694                lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4695        }
4696
4697        if (tg3_readphy(tp, MII_LPA, rmtadv))
4698                return false;
4699
4700        lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4701        tp->link_config.rmt_adv = lpeth;
4702
4703        return true;
4704}
4705
4706static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4707{
4708        if (curr_link_up != tp->link_up) {
4709                if (curr_link_up) {
4710                        netif_carrier_on(tp->dev);
4711                } else {
4712                        netif_carrier_off(tp->dev);
4713                        if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4714                                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4715                }
4716
4717                tg3_link_report(tp);
4718                return true;
4719        }
4720
4721        return false;
4722}
4723
4724static void tg3_clear_mac_status(struct tg3 *tp)
4725{
4726        tw32(MAC_EVENT, 0);
4727
4728        tw32_f(MAC_STATUS,
4729               MAC_STATUS_SYNC_CHANGED |
4730               MAC_STATUS_CFG_CHANGED |
4731               MAC_STATUS_MI_COMPLETION |
4732               MAC_STATUS_LNKSTATE_CHANGED);
4733        udelay(40);
4734}
4735
4736static void tg3_setup_eee(struct tg3 *tp)
4737{
4738        u32 val;
4739
4740        val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4741              TG3_CPMU_EEE_LNKIDL_UART_IDL;
4742        if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4743                val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4744
4745        tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4746
4747        tw32_f(TG3_CPMU_EEE_CTRL,
4748               TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4749
4750        val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4751              (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4752              TG3_CPMU_EEEMD_LPI_IN_RX |
4753              TG3_CPMU_EEEMD_EEE_ENABLE;
4754
4755        if (tg3_asic_rev(tp) != ASIC_REV_5717)
4756                val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4757
4758        if (tg3_flag(tp, ENABLE_APE))
4759                val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4760
4761        tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4762
4763        tw32_f(TG3_CPMU_EEE_DBTMR1,
4764               TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4765               (tp->eee.tx_lpi_timer & 0xffff));
4766
4767        tw32_f(TG3_CPMU_EEE_DBTMR2,
4768               TG3_CPMU_DBTMR2_APE_TX_2047US |
4769               TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4770}
4771
4772static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4773{
4774        bool current_link_up;
4775        u32 bmsr, val;
4776        u32 lcl_adv, rmt_adv;
4777        u32 current_speed;
4778        u8 current_duplex;
4779        int i, err;
4780
4781        tg3_clear_mac_status(tp);
4782
4783        if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4784                tw32_f(MAC_MI_MODE,
4785                     (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4786                udelay(80);
4787        }
4788
4789        tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4790
4791        /* Some third-party PHYs need to be reset on link going
4792         * down.
4793         */
4794        if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4795             tg3_asic_rev(tp) == ASIC_REV_5704 ||
4796             tg3_asic_rev(tp) == ASIC_REV_5705) &&
4797            tp->link_up) {
4798                tg3_readphy(tp, MII_BMSR, &bmsr);
4799                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4800                    !(bmsr & BMSR_LSTATUS))
4801                        force_reset = true;
4802        }
4803        if (force_reset)
4804                tg3_phy_reset(tp);
4805
4806        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4807                tg3_readphy(tp, MII_BMSR, &bmsr);
4808                if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4809                    !tg3_flag(tp, INIT_COMPLETE))
4810                        bmsr = 0;
4811
4812                if (!(bmsr & BMSR_LSTATUS)) {
4813                        err = tg3_init_5401phy_dsp(tp);
4814                        if (err)
4815                                return err;
4816
4817                        tg3_readphy(tp, MII_BMSR, &bmsr);
4818                        for (i = 0; i < 1000; i++) {
4819                                udelay(10);
4820                                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4821                                    (bmsr & BMSR_LSTATUS)) {
4822                                        udelay(40);
4823                                        break;
4824                                }
4825                        }
4826
4827                        if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4828                            TG3_PHY_REV_BCM5401_B0 &&
4829                            !(bmsr & BMSR_LSTATUS) &&
4830                            tp->link_config.active_speed == SPEED_1000) {
4831                                err = tg3_phy_reset(tp);
4832                                if (!err)
4833                                        err = tg3_init_5401phy_dsp(tp);
4834                                if (err)
4835                                        return err;
4836                        }
4837                }
4838        } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4839                   tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4840                /* 5701 {A0,B0} CRC bug workaround */
4841                tg3_writephy(tp, 0x15, 0x0a75);
4842                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4843                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4844                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4845        }
4846
4847        /* Clear pending interrupts... */
4848        tg3_readphy(tp, MII_TG3_ISTAT, &val);
4849        tg3_readphy(tp, MII_TG3_ISTAT, &val);
4850
4851        if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4852                tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4853        else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4854                tg3_writephy(tp, MII_TG3_IMASK, ~0);
4855
4856        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4857            tg3_asic_rev(tp) == ASIC_REV_5701) {
4858                if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4859                        tg3_writephy(tp, MII_TG3_EXT_CTRL,
4860                                     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4861                else
4862                        tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4863        }
4864
4865        current_link_up = false;
4866        current_speed = SPEED_UNKNOWN;
4867        current_duplex = DUPLEX_UNKNOWN;
4868        tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4869        tp->link_config.rmt_adv = 0;
4870
4871        if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4872                err = tg3_phy_auxctl_read(tp,
4873                                          MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4874                                          &val);
4875                if (!err && !(val & (1 << 10))) {
4876                        tg3_phy_auxctl_write(tp,
4877                                             MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4878                                             val | (1 << 10));
4879                        goto relink;
4880                }
4881        }
4882
4883        bmsr = 0;
4884        for (i = 0; i < 100; i++) {
4885                tg3_readphy(tp, MII_BMSR, &bmsr);
4886                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4887                    (bmsr & BMSR_LSTATUS))
4888                        break;
4889                udelay(40);
4890        }
4891
4892        if (bmsr & BMSR_LSTATUS) {
4893                u32 aux_stat, bmcr;
4894
4895                tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4896                for (i = 0; i < 2000; i++) {
4897                        udelay(10);
4898                        if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4899                            aux_stat)
4900                                break;
4901                }
4902
4903                tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4904                                             &current_speed,
4905                                             &current_duplex);
4906
4907                bmcr = 0;
4908                for (i = 0; i < 200; i++) {
4909                        tg3_readphy(tp, MII_BMCR, &bmcr);
4910                        if (tg3_readphy(tp, MII_BMCR, &bmcr))
4911                                continue;
4912                        if (bmcr && bmcr != 0x7fff)
4913                                break;
4914                        udelay(10);
4915                }
4916
4917                lcl_adv = 0;
4918                rmt_adv = 0;
4919
4920                tp->link_config.active_speed = current_speed;
4921                tp->link_config.active_duplex = current_duplex;
4922
4923                if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4924                        bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4925
4926                        if ((bmcr & BMCR_ANENABLE) &&
4927                            eee_config_ok &&
4928                            tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4929                            tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4930                                current_link_up = true;
4931
4932                        /* EEE settings changes take effect only after a phy
4933                         * reset.  If we have skipped a reset due to Link Flap
4934                         * Avoidance being enabled, do it now.
4935                         */
4936                        if (!eee_config_ok &&
4937                            (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4938                            !force_reset) {
4939                                tg3_setup_eee(tp);
4940                                tg3_phy_reset(tp);
4941                        }
4942                } else {
4943                        if (!(bmcr & BMCR_ANENABLE) &&
4944                            tp->link_config.speed == current_speed &&
4945                            tp->link_config.duplex == current_duplex) {
4946                                current_link_up = true;
4947                        }
4948                }
4949
4950                if (current_link_up &&
4951                    tp->link_config.active_duplex == DUPLEX_FULL) {
4952                        u32 reg, bit;
4953
4954                        if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4955                                reg = MII_TG3_FET_GEN_STAT;
4956                                bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4957                        } else {
4958                                reg = MII_TG3_EXT_STAT;
4959                                bit = MII_TG3_EXT_STAT_MDIX;
4960                        }
4961
4962                        if (!tg3_readphy(tp, reg, &val) && (val & bit))
4963                                tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4964
4965                        tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4966                }
4967        }
4968
4969relink:
4970        if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4971                tg3_phy_copper_begin(tp);
4972
4973                if (tg3_flag(tp, ROBOSWITCH)) {
4974                        current_link_up = true;
4975                        /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4976                        current_speed = SPEED_1000;
4977                        current_duplex = DUPLEX_FULL;
4978                        tp->link_config.active_speed = current_speed;
4979                        tp->link_config.active_duplex = current_duplex;
4980                }
4981
4982                tg3_readphy(tp, MII_BMSR, &bmsr);
4983                if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4984                    (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4985                        current_link_up = true;
4986        }
4987
4988        tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4989        if (current_link_up) {
4990                if (tp->link_config.active_speed == SPEED_100 ||
4991                    tp->link_config.active_speed == SPEED_10)
4992                        tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4993                else
4994                        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4995        } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4996                tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4997        else
4998                tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4999
5000        /* In order for the 5750 core in BCM4785 chip to work properly
5001         * in RGMII mode, the Led Control Register must be set up.
5002         */
5003        if (tg3_flag(tp, RGMII_MODE)) {
5004                u32 led_ctrl = tr32(MAC_LED_CTRL);
5005                led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5006
5007                if (tp->link_config.active_speed == SPEED_10)
5008                        led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5009                else if (tp->link_config.active_speed == SPEED_100)
5010                        led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5011                                     LED_CTRL_100MBPS_ON);
5012                else if (tp->link_config.active_speed == SPEED_1000)
5013                        led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5014                                     LED_CTRL_1000MBPS_ON);
5015
5016                tw32(MAC_LED_CTRL, led_ctrl);
5017                udelay(40);
5018        }
5019
5020        tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5021        if (tp->link_config.active_duplex == DUPLEX_HALF)
5022                tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5023
5024        if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5025                if (current_link_up &&
5026                    tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5027                        tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5028                else
5029                        tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5030        }
5031
5032        /* ??? Without this setting Netgear GA302T PHY does not
5033         * ??? send/receive packets...
5034         */
5035        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5036            tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5037                tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5038                tw32_f(MAC_MI_MODE, tp->mi_mode);
5039                udelay(80);
5040        }
5041
5042        tw32_f(MAC_MODE, tp->mac_mode);
5043        udelay(40);
5044
5045        tg3_phy_eee_adjust(tp, current_link_up);
5046
5047        if (tg3_flag(tp, USE_LINKCHG_REG)) {
5048                /* Polled via timer. */
5049                tw32_f(MAC_EVENT, 0);
5050        } else {
5051                tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5052        }
5053        udelay(40);
5054
5055        if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5056            current_link_up &&
5057            tp->link_config.active_speed == SPEED_1000 &&
5058            (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5059                udelay(120);
5060                tw32_f(MAC_STATUS,
5061                     (MAC_STATUS_SYNC_CHANGED |
5062                      MAC_STATUS_CFG_CHANGED));
5063                udelay(40);
5064                tg3_write_mem(tp,
5065                              NIC_SRAM_FIRMWARE_MBOX,
5066                              NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5067        }
5068
5069        /* Prevent send BD corruption. */
5070        if (tg3_flag(tp, CLKREQ_BUG)) {
5071                if (tp->link_config.active_speed == SPEED_100 ||
5072                    tp->link_config.active_speed == SPEED_10)
5073                        pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5074                                                   PCI_EXP_LNKCTL_CLKREQ_EN);
5075                else
5076                        pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5077                                                 PCI_EXP_LNKCTL_CLKREQ_EN);
5078        }
5079
5080        tg3_test_and_report_link_chg(tp, current_link_up);
5081
5082        return 0;
5083}
5084
5085struct tg3_fiber_aneginfo {
5086        int state;
5087#define ANEG_STATE_UNKNOWN              0
5088#define ANEG_STATE_AN_ENABLE            1
5089#define ANEG_STATE_RESTART_INIT         2
5090#define ANEG_STATE_RESTART              3
5091#define ANEG_STATE_DISABLE_LINK_OK      4
5092#define ANEG_STATE_ABILITY_DETECT_INIT  5
5093#define ANEG_STATE_ABILITY_DETECT       6
5094#define ANEG_STATE_ACK_DETECT_INIT      7
5095#define ANEG_STATE_ACK_DETECT           8
5096#define ANEG_STATE_COMPLETE_ACK_INIT    9
5097#define ANEG_STATE_COMPLETE_ACK         10
5098#define ANEG_STATE_IDLE_DETECT_INIT     11
5099#define ANEG_STATE_IDLE_DETECT          12
5100#define ANEG_STATE_LINK_OK              13
5101#define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5102#define ANEG_STATE_NEXT_PAGE_WAIT       15
5103
5104        u32 flags;
5105#define MR_AN_ENABLE            0x00000001
5106#define MR_RESTART_AN           0x00000002
5107#define MR_AN_COMPLETE          0x00000004
5108#define MR_PAGE_RX              0x00000008
5109#define MR_NP_LOADED            0x00000010
5110#define MR_TOGGLE_TX            0x00000020
5111#define MR_LP_ADV_FULL_DUPLEX   0x00000040
5112#define MR_LP_ADV_HALF_DUPLEX   0x00000080
5113#define MR_LP_ADV_SYM_PAUSE     0x00000100
5114#define MR_LP_ADV_ASYM_PAUSE    0x00000200
5115#define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5116#define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5117#define MR_LP_ADV_NEXT_PAGE     0x00001000
5118#define MR_TOGGLE_RX            0x00002000
5119#define MR_NP_RX                0x00004000
5120
5121#define MR_LINK_OK              0x80000000
5122
5123        unsigned long link_time, cur_time;
5124
5125        u32 ability_match_cfg;
5126        int ability_match_count;
5127
5128        char ability_match, idle_match, ack_match;
5129
5130        u32 txconfig, rxconfig;
5131#define ANEG_CFG_NP             0x00000080
5132#define ANEG_CFG_ACK            0x00000040
5133#define ANEG_CFG_RF2            0x00000020
5134#define ANEG_CFG_RF1            0x00000010
5135#define ANEG_CFG_PS2            0x00000001
5136#define ANEG_CFG_PS1            0x00008000
5137#define ANEG_CFG_HD             0x00004000
5138#define ANEG_CFG_FD             0x00002000
5139#define ANEG_CFG_INVAL          0x00001f06
5140
5141};
5142#define ANEG_OK         0
5143#define ANEG_DONE       1
5144#define ANEG_TIMER_ENAB 2
5145#define ANEG_FAILED     -1
5146
5147#define ANEG_STATE_SETTLE_TIME  10000
5148
5149static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5150                                   struct tg3_fiber_aneginfo *ap)
5151{
5152        u16 flowctrl;
5153        unsigned long delta;
5154        u32 rx_cfg_reg;
5155        int ret;
5156
5157        if (ap->state == ANEG_STATE_UNKNOWN) {
5158                ap->rxconfig = 0;
5159                ap->link_time = 0;
5160                ap->cur_time = 0;
5161                ap->ability_match_cfg = 0;
5162                ap->ability_match_count = 0;
5163                ap->ability_match = 0;
5164                ap->idle_match = 0;
5165                ap->ack_match = 0;
5166        }
5167        ap->cur_time++;
5168
5169        if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5170                rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5171
5172                if (rx_cfg_reg != ap->ability_match_cfg) {
5173                        ap->ability_match_cfg = rx_cfg_reg;
5174                        ap->ability_match = 0;
5175                        ap->ability_match_count = 0;
5176                } else {
5177                        if (++ap->ability_match_count > 1) {
5178                                ap->ability_match = 1;
5179                                ap->ability_match_cfg = rx_cfg_reg;
5180                        }
5181                }
5182                if (rx_cfg_reg & ANEG_CFG_ACK)
5183                        ap->ack_match = 1;
5184                else
5185                        ap->ack_match = 0;
5186
5187                ap->idle_match = 0;
5188        } else {
5189                ap->idle_match = 1;
5190                ap->ability_match_cfg = 0;
5191                ap->ability_match_count = 0;
5192                ap->ability_match = 0;
5193                ap->ack_match = 0;
5194
5195                rx_cfg_reg = 0;
5196        }
5197
5198        ap->rxconfig = rx_cfg_reg;
5199        ret = ANEG_OK;
5200
5201        switch (ap->state) {
5202        case ANEG_STATE_UNKNOWN:
5203                if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5204                        ap->state = ANEG_STATE_AN_ENABLE;
5205
5206                fallthrough;
5207        case ANEG_STATE_AN_ENABLE:
5208                ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5209                if (ap->flags & MR_AN_ENABLE) {
5210                        ap->link_time = 0;
5211                        ap->cur_time = 0;
5212                        ap->ability_match_cfg = 0;
5213                        ap->ability_match_count = 0;
5214                        ap->ability_match = 0;
5215                        ap->idle_match = 0;
5216                        ap->ack_match = 0;
5217
5218                        ap->state = ANEG_STATE_RESTART_INIT;
5219                } else {
5220                        ap->state = ANEG_STATE_DISABLE_LINK_OK;
5221                }
5222                break;
5223
5224        case ANEG_STATE_RESTART_INIT:
5225                ap->link_time = ap->cur_time;
5226                ap->flags &= ~(MR_NP_LOADED);
5227                ap->txconfig = 0;
5228                tw32(MAC_TX_AUTO_NEG, 0);
5229                tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5230                tw32_f(MAC_MODE, tp->mac_mode);
5231                udelay(40);
5232
5233                ret = ANEG_TIMER_ENAB;
5234                ap->state = ANEG_STATE_RESTART;
5235
5236                fallthrough;
5237        case ANEG_STATE_RESTART:
5238                delta = ap->cur_time - ap->link_time;
5239                if (delta > ANEG_STATE_SETTLE_TIME)
5240                        ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5241                else
5242                        ret = ANEG_TIMER_ENAB;
5243                break;
5244
5245        case ANEG_STATE_DISABLE_LINK_OK:
5246                ret = ANEG_DONE;
5247                break;
5248
5249        case ANEG_STATE_ABILITY_DETECT_INIT:
5250                ap->flags &= ~(MR_TOGGLE_TX);
5251                ap->txconfig = ANEG_CFG_FD;
5252                flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5253                if (flowctrl & ADVERTISE_1000XPAUSE)
5254                        ap->txconfig |= ANEG_CFG_PS1;
5255                if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5256                        ap->txconfig |= ANEG_CFG_PS2;
5257                tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5258                tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5259                tw32_f(MAC_MODE, tp->mac_mode);
5260                udelay(40);
5261
5262                ap->state = ANEG_STATE_ABILITY_DETECT;
5263                break;
5264
5265        case ANEG_STATE_ABILITY_DETECT:
5266                if (ap->ability_match != 0 && ap->rxconfig != 0)
5267                        ap->state = ANEG_STATE_ACK_DETECT_INIT;
5268                break;
5269
5270        case ANEG_STATE_ACK_DETECT_INIT:
5271                ap->txconfig |= ANEG_CFG_ACK;
5272                tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5273                tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5274                tw32_f(MAC_MODE, tp->mac_mode);
5275                udelay(40);
5276
5277                ap->state = ANEG_STATE_ACK_DETECT;
5278
5279                fallthrough;
5280        case ANEG_STATE_ACK_DETECT:
5281                if (ap->ack_match != 0) {
5282                        if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5283                            (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5284                                ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5285                        } else {
5286                                ap->state = ANEG_STATE_AN_ENABLE;
5287                        }
5288                } else if (ap->ability_match != 0 &&
5289                           ap->rxconfig == 0) {
5290                        ap->state = ANEG_STATE_AN_ENABLE;
5291                }
5292                break;
5293
5294        case ANEG_STATE_COMPLETE_ACK_INIT:
5295                if (ap->rxconfig & ANEG_CFG_INVAL) {
5296                        ret = ANEG_FAILED;
5297                        break;
5298                }
5299                ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5300                               MR_LP_ADV_HALF_DUPLEX |
5301                               MR_LP_ADV_SYM_PAUSE |
5302                               MR_LP_ADV_ASYM_PAUSE |
5303                               MR_LP_ADV_REMOTE_FAULT1 |
5304                               MR_LP_ADV_REMOTE_FAULT2 |
5305                               MR_LP_ADV_NEXT_PAGE |
5306                               MR_TOGGLE_RX |
5307                               MR_NP_RX);
5308                if (ap->rxconfig & ANEG_CFG_FD)
5309                        ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5310                if (ap->rxconfig & ANEG_CFG_HD)
5311                        ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5312                if (ap->rxconfig & ANEG_CFG_PS1)
5313                        ap->flags |= MR_LP_ADV_SYM_PAUSE;
5314                if (ap->rxconfig & ANEG_CFG_PS2)
5315                        ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5316                if (ap->rxconfig & ANEG_CFG_RF1)
5317                        ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5318                if (ap->rxconfig & ANEG_CFG_RF2)
5319                        ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5320                if (ap->rxconfig & ANEG_CFG_NP)
5321                        ap->flags |= MR_LP_ADV_NEXT_PAGE;
5322
5323                ap->link_time = ap->cur_time;
5324
5325                ap->flags ^= (MR_TOGGLE_TX);
5326                if (ap->rxconfig & 0x0008)
5327                        ap->flags |= MR_TOGGLE_RX;
5328                if (ap->rxconfig & ANEG_CFG_NP)
5329                        ap->flags |= MR_NP_RX;
5330                ap->flags |= MR_PAGE_RX;
5331
5332                ap->state = ANEG_STATE_COMPLETE_ACK;
5333                ret = ANEG_TIMER_ENAB;
5334                break;
5335
5336        case ANEG_STATE_COMPLETE_ACK:
5337                if (ap->ability_match != 0 &&
5338                    ap->rxconfig == 0) {
5339                        ap->state = ANEG_STATE_AN_ENABLE;
5340                        break;
5341                }
5342                delta = ap->cur_time - ap->link_time;
5343                if (delta > ANEG_STATE_SETTLE_TIME) {
5344                        if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5345                                ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5346                        } else {
5347                                if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5348                                    !(ap->flags & MR_NP_RX)) {
5349                                        ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5350                                } else {
5351                                        ret = ANEG_FAILED;
5352                                }
5353                        }
5354                }
5355                break;
5356
5357        case ANEG_STATE_IDLE_DETECT_INIT:
5358                ap->link_time = ap->cur_time;
5359                tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5360                tw32_f(MAC_MODE, tp->mac_mode);
5361                udelay(40);
5362
5363                ap->state = ANEG_STATE_IDLE_DETECT;
5364                ret = ANEG_TIMER_ENAB;
5365                break;
5366
5367        case ANEG_STATE_IDLE_DETECT:
5368                if (ap->ability_match != 0 &&
5369                    ap->rxconfig == 0) {
5370                        ap->state = ANEG_STATE_AN_ENABLE;
5371                        break;
5372                }
5373                delta = ap->cur_time - ap->link_time;
5374                if (delta > ANEG_STATE_SETTLE_TIME) {
5375                        /* XXX another gem from the Broadcom driver :( */
5376                        ap->state = ANEG_STATE_LINK_OK;
5377                }
5378                break;
5379
5380        case ANEG_STATE_LINK_OK:
5381                ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5382                ret = ANEG_DONE;
5383                break;
5384
5385        case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5386                /* ??? unimplemented */
5387                break;
5388
5389        case ANEG_STATE_NEXT_PAGE_WAIT:
5390                /* ??? unimplemented */
5391                break;
5392
5393        default:
5394                ret = ANEG_FAILED;
5395                break;
5396        }
5397
5398        return ret;
5399}
5400
5401static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5402{
5403        int res = 0;
5404        struct tg3_fiber_aneginfo aninfo;
5405        int status = ANEG_FAILED;
5406        unsigned int tick;
5407        u32 tmp;
5408
5409        tw32_f(MAC_TX_AUTO_NEG, 0);
5410
5411        tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5412        tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5413        udelay(40);
5414
5415        tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5416        udelay(40);
5417
5418        memset(&aninfo, 0, sizeof(aninfo));
5419        aninfo.flags |= MR_AN_ENABLE;
5420        aninfo.state = ANEG_STATE_UNKNOWN;
5421        aninfo.cur_time = 0;
5422        tick = 0;
5423        while (++tick < 195000) {
5424                status = tg3_fiber_aneg_smachine(tp, &aninfo);
5425                if (status == ANEG_DONE || status == ANEG_FAILED)
5426                        break;
5427
5428                udelay(1);
5429        }
5430
5431        tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5432        tw32_f(MAC_MODE, tp->mac_mode);
5433        udelay(40);
5434
5435        *txflags = aninfo.txconfig;
5436        *rxflags = aninfo.flags;
5437
5438        if (status == ANEG_DONE &&
5439            (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5440                             MR_LP_ADV_FULL_DUPLEX)))
5441                res = 1;
5442
5443        return res;
5444}
5445
5446static void tg3_init_bcm8002(struct tg3 *tp)
5447{
5448        u32 mac_status = tr32(MAC_STATUS);
5449        int i;
5450
5451        /* Reset when initting first time or we have a link. */
5452        if (tg3_flag(tp, INIT_COMPLETE) &&
5453            !(mac_status & MAC_STATUS_PCS_SYNCED))
5454                return;
5455
5456        /* Set PLL lock range. */
5457        tg3_writephy(tp, 0x16, 0x8007);
5458
5459        /* SW reset */
5460        tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5461
5462        /* Wait for reset to complete. */
5463        /* XXX schedule_timeout() ... */
5464        for (i = 0; i < 500; i++)
5465                udelay(10);
5466
5467        /* Config mode; select PMA/Ch 1 regs. */
5468        tg3_writephy(tp, 0x10, 0x8411);
5469
5470        /* Enable auto-lock and comdet, select txclk for tx. */
5471        tg3_writephy(tp, 0x11, 0x0a10);
5472
5473        tg3_writephy(tp, 0x18, 0x00a0);
5474        tg3_writephy(tp, 0x16, 0x41ff);
5475
5476        /* Assert and deassert POR. */
5477        tg3_writephy(tp, 0x13, 0x0400);
5478        udelay(40);
5479        tg3_writephy(tp, 0x13, 0x0000);
5480
5481        tg3_writephy(tp, 0x11, 0x0a50);
5482        udelay(40);
5483        tg3_writephy(tp, 0x11, 0x0a10);
5484
5485        /* Wait for signal to stabilize */
5486        /* XXX schedule_timeout() ... */
5487        for (i = 0; i < 15000; i++)
5488                udelay(10);
5489
5490        /* Deselect the channel register so we can read the PHYID
5491         * later.
5492         */
5493        tg3_writephy(tp, 0x10, 0x8011);
5494}
5495
5496static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5497{
5498        u16 flowctrl;
5499        bool current_link_up;
5500        u32 sg_dig_ctrl, sg_dig_status;
5501        u32 serdes_cfg, expected_sg_dig_ctrl;
5502        int workaround, port_a;
5503
5504        serdes_cfg = 0;
5505        expected_sg_dig_ctrl = 0;
5506        workaround = 0;
5507        port_a = 1;
5508        current_link_up = false;
5509
5510        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5511            tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5512                workaround = 1;
5513                if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5514                        port_a = 0;
5515
5516                /* preserve bits 0-11,13,14 for signal pre-emphasis */
5517                /* preserve bits 20-23 for voltage regulator */
5518                serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5519        }
5520
5521        sg_dig_ctrl = tr32(SG_DIG_CTRL);
5522
5523        if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5524                if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5525                        if (workaround) {
5526                                u32 val = serdes_cfg;
5527
5528                                if (port_a)
5529                                        val |= 0xc010000;
5530                                else
5531                                        val |= 0x4010000;
5532                                tw32_f(MAC_SERDES_CFG, val);
5533                        }
5534
5535                        tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5536                }
5537                if (mac_status & MAC_STATUS_PCS_SYNCED) {
5538                        tg3_setup_flow_control(tp, 0, 0);
5539                        current_link_up = true;
5540                }
5541                goto out;
5542        }
5543
5544        /* Want auto-negotiation.  */
5545        expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5546
5547        flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5548        if (flowctrl & ADVERTISE_1000XPAUSE)
5549                expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5550        if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5551                expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5552
5553        if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5554                if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5555                    tp->serdes_counter &&
5556                    ((mac_status & (MAC_STATUS_PCS_SYNCED |
5557                                    MAC_STATUS_RCVD_CFG)) ==
5558                     MAC_STATUS_PCS_SYNCED)) {
5559                        tp->serdes_counter--;
5560                        current_link_up = true;
5561                        goto out;
5562                }
5563restart_autoneg:
5564                if (workaround)
5565                        tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5566                tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5567                udelay(5);
5568                tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5569
5570                tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5571                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5572        } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5573                                 MAC_STATUS_SIGNAL_DET)) {
5574                sg_dig_status = tr32(SG_DIG_STATUS);
5575                mac_status = tr32(MAC_STATUS);
5576
5577                if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5578                    (mac_status & MAC_STATUS_PCS_SYNCED)) {
5579                        u32 local_adv = 0, remote_adv = 0;
5580
5581                        if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5582                                local_adv |= ADVERTISE_1000XPAUSE;
5583                        if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5584                                local_adv |= ADVERTISE_1000XPSE_ASYM;
5585
5586                        if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5587                                remote_adv |= LPA_1000XPAUSE;
5588                        if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5589                                remote_adv |= LPA_1000XPAUSE_ASYM;
5590
5591                        tp->link_config.rmt_adv =
5592                                           mii_adv_to_ethtool_adv_x(remote_adv);
5593
5594                        tg3_setup_flow_control(tp, local_adv, remote_adv);
5595                        current_link_up = true;
5596                        tp->serdes_counter = 0;
5597                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5598                } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5599                        if (tp->serdes_counter)
5600                                tp->serdes_counter--;
5601                        else {
5602                                if (workaround) {
5603                                        u32 val = serdes_cfg;
5604
5605                                        if (port_a)
5606                                                val |= 0xc010000;
5607                                        else
5608                                                val |= 0x4010000;
5609
5610                                        tw32_f(MAC_SERDES_CFG, val);
5611                                }
5612
5613                                tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5614                                udelay(40);
5615
5616                                /* Link parallel detection - link is up */
5617                                /* only if we have PCS_SYNC and not */
5618                                /* receiving config code words */
5619                                mac_status = tr32(MAC_STATUS);
5620                                if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5621                                    !(mac_status & MAC_STATUS_RCVD_CFG)) {
5622                                        tg3_setup_flow_control(tp, 0, 0);
5623                                        current_link_up = true;
5624                                        tp->phy_flags |=
5625                                                TG3_PHYFLG_PARALLEL_DETECT;
5626                                        tp->serdes_counter =
5627                                                SERDES_PARALLEL_DET_TIMEOUT;
5628                                } else
5629                                        goto restart_autoneg;
5630                        }
5631                }
5632        } else {
5633                tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5634                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5635        }
5636
5637out:
5638        return current_link_up;
5639}
5640
5641static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5642{
5643        bool current_link_up = false;
5644
5645        if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5646                goto out;
5647
5648        if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5649                u32 txflags, rxflags;
5650                int i;
5651
5652                if (fiber_autoneg(tp, &txflags, &rxflags)) {
5653                        u32 local_adv = 0, remote_adv = 0;
5654
5655                        if (txflags & ANEG_CFG_PS1)
5656                                local_adv |= ADVERTISE_1000XPAUSE;
5657                        if (txflags & ANEG_CFG_PS2)
5658                                local_adv |= ADVERTISE_1000XPSE_ASYM;
5659
5660                        if (rxflags & MR_LP_ADV_SYM_PAUSE)
5661                                remote_adv |= LPA_1000XPAUSE;
5662                        if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5663                                remote_adv |= LPA_1000XPAUSE_ASYM;
5664
5665                        tp->link_config.rmt_adv =
5666                                           mii_adv_to_ethtool_adv_x(remote_adv);
5667
5668                        tg3_setup_flow_control(tp, local_adv, remote_adv);
5669
5670                        current_link_up = true;
5671                }
5672                for (i = 0; i < 30; i++) {
5673                        udelay(20);
5674                        tw32_f(MAC_STATUS,
5675                               (MAC_STATUS_SYNC_CHANGED |
5676                                MAC_STATUS_CFG_CHANGED));
5677                        udelay(40);
5678                        if ((tr32(MAC_STATUS) &
5679                             (MAC_STATUS_SYNC_CHANGED |
5680                              MAC_STATUS_CFG_CHANGED)) == 0)
5681                                break;
5682                }
5683
5684                mac_status = tr32(MAC_STATUS);
5685                if (!current_link_up &&
5686                    (mac_status & MAC_STATUS_PCS_SYNCED) &&
5687                    !(mac_status & MAC_STATUS_RCVD_CFG))
5688                        current_link_up = true;
5689        } else {
5690                tg3_setup_flow_control(tp, 0, 0);
5691
5692                /* Forcing 1000FD link up. */
5693                current_link_up = true;
5694
5695                tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5696                udelay(40);
5697
5698                tw32_f(MAC_MODE, tp->mac_mode);
5699                udelay(40);
5700        }
5701
5702out:
5703        return current_link_up;
5704}
5705
5706static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5707{
5708        u32 orig_pause_cfg;
5709        u32 orig_active_speed;
5710        u8 orig_active_duplex;
5711        u32 mac_status;
5712        bool current_link_up;
5713        int i;
5714
5715        orig_pause_cfg = tp->link_config.active_flowctrl;
5716        orig_active_speed = tp->link_config.active_speed;
5717        orig_active_duplex = tp->link_config.active_duplex;
5718
5719        if (!tg3_flag(tp, HW_AUTONEG) &&
5720            tp->link_up &&
5721            tg3_flag(tp, INIT_COMPLETE)) {
5722                mac_status = tr32(MAC_STATUS);
5723                mac_status &= (MAC_STATUS_PCS_SYNCED |
5724                               MAC_STATUS_SIGNAL_DET |
5725                               MAC_STATUS_CFG_CHANGED |
5726                               MAC_STATUS_RCVD_CFG);
5727                if (mac_status == (MAC_STATUS_PCS_SYNCED |
5728                                   MAC_STATUS_SIGNAL_DET)) {
5729                        tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5730                                            MAC_STATUS_CFG_CHANGED));
5731                        return 0;
5732                }
5733        }
5734
5735        tw32_f(MAC_TX_AUTO_NEG, 0);
5736
5737        tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5738        tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5739        tw32_f(MAC_MODE, tp->mac_mode);
5740        udelay(40);
5741
5742        if (tp->phy_id == TG3_PHY_ID_BCM8002)
5743                tg3_init_bcm8002(tp);
5744
5745        /* Enable link change event even when serdes polling.  */
5746        tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5747        udelay(40);
5748
5749        current_link_up = false;
5750        tp->link_config.rmt_adv = 0;
5751        mac_status = tr32(MAC_STATUS);
5752
5753        if (tg3_flag(tp, HW_AUTONEG))
5754                current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5755        else
5756                current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5757
5758        tp->napi[0].hw_status->status =
5759                (SD_STATUS_UPDATED |
5760                 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5761
5762        for (i = 0; i < 100; i++) {
5763                tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5764                                    MAC_STATUS_CFG_CHANGED));
5765                udelay(5);
5766                if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5767                                         MAC_STATUS_CFG_CHANGED |
5768                                         MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5769                        break;
5770        }
5771
5772        mac_status = tr32(MAC_STATUS);
5773        if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5774                current_link_up = false;
5775                if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5776                    tp->serdes_counter == 0) {
5777                        tw32_f(MAC_MODE, (tp->mac_mode |
5778                                          MAC_MODE_SEND_CONFIGS));
5779                        udelay(1);
5780                        tw32_f(MAC_MODE, tp->mac_mode);
5781                }
5782        }
5783
5784        if (current_link_up) {
5785                tp->link_config.active_speed = SPEED_1000;
5786                tp->link_config.active_duplex = DUPLEX_FULL;
5787                tw32(MAC_LED_CTRL, (tp->led_ctrl |
5788                                    LED_CTRL_LNKLED_OVERRIDE |
5789                                    LED_CTRL_1000MBPS_ON));
5790        } else {
5791                tp->link_config.active_speed = SPEED_UNKNOWN;
5792                tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5793                tw32(MAC_LED_CTRL, (tp->led_ctrl |
5794                                    LED_CTRL_LNKLED_OVERRIDE |
5795                                    LED_CTRL_TRAFFIC_OVERRIDE));
5796        }
5797
5798        if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5799                u32 now_pause_cfg = tp->link_config.active_flowctrl;
5800                if (orig_pause_cfg != now_pause_cfg ||
5801                    orig_active_speed != tp->link_config.active_speed ||
5802                    orig_active_duplex != tp->link_config.active_duplex)
5803                        tg3_link_report(tp);
5804        }
5805
5806        return 0;
5807}
5808
5809static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5810{
5811        int err = 0;
5812        u32 bmsr, bmcr;
5813        u32 current_speed = SPEED_UNKNOWN;
5814        u8 current_duplex = DUPLEX_UNKNOWN;
5815        bool current_link_up = false;
5816        u32 local_adv, remote_adv, sgsr;
5817
5818        if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5819             tg3_asic_rev(tp) == ASIC_REV_5720) &&
5820             !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5821             (sgsr & SERDES_TG3_SGMII_MODE)) {
5822
5823                if (force_reset)
5824                        tg3_phy_reset(tp);
5825
5826                tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5827
5828                if (!(sgsr & SERDES_TG3_LINK_UP)) {
5829                        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5830                } else {
5831                        current_link_up = true;
5832                        if (sgsr & SERDES_TG3_SPEED_1000) {
5833                                current_speed = SPEED_1000;
5834                                tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5835                        } else if (sgsr & SERDES_TG3_SPEED_100) {
5836                                current_speed = SPEED_100;
5837                                tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5838                        } else {
5839                                current_speed = SPEED_10;
5840                                tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5841                        }
5842
5843                        if (sgsr & SERDES_TG3_FULL_DUPLEX)
5844                                current_duplex = DUPLEX_FULL;
5845                        else
5846                                current_duplex = DUPLEX_HALF;
5847                }
5848
5849                tw32_f(MAC_MODE, tp->mac_mode);
5850                udelay(40);
5851
5852                tg3_clear_mac_status(tp);
5853
5854                goto fiber_setup_done;
5855        }
5856
5857        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5858        tw32_f(MAC_MODE, tp->mac_mode);
5859        udelay(40);
5860
5861        tg3_clear_mac_status(tp);
5862
5863        if (force_reset)
5864                tg3_phy_reset(tp);
5865
5866        tp->link_config.rmt_adv = 0;
5867
5868        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5869        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5870        if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5871                if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5872                        bmsr |= BMSR_LSTATUS;
5873                else
5874                        bmsr &= ~BMSR_LSTATUS;
5875        }
5876
5877        err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5878
5879        if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5880            (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5881                /* do nothing, just check for link up at the end */
5882        } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5883                u32 adv, newadv;
5884
5885                err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5886                newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5887                                 ADVERTISE_1000XPAUSE |
5888                                 ADVERTISE_1000XPSE_ASYM |
5889                                 ADVERTISE_SLCT);
5890
5891                newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5892                newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5893
5894                if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5895                        tg3_writephy(tp, MII_ADVERTISE, newadv);
5896                        bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5897                        tg3_writephy(tp, MII_BMCR, bmcr);
5898
5899                        tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5900                        tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5901                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5902
5903                        return err;
5904                }
5905        } else {
5906                u32 new_bmcr;
5907
5908                bmcr &= ~BMCR_SPEED1000;
5909                new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5910
5911                if (tp->link_config.duplex == DUPLEX_FULL)
5912                        new_bmcr |= BMCR_FULLDPLX;
5913
5914                if (new_bmcr != bmcr) {
5915                        /* BMCR_SPEED1000 is a reserved bit that needs
5916                         * to be set on write.
5917                         */
5918                        new_bmcr |= BMCR_SPEED1000;
5919
5920                        /* Force a linkdown */
5921                        if (tp->link_up) {
5922                                u32 adv;
5923
5924                                err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5925                                adv &= ~(ADVERTISE_1000XFULL |
5926                                         ADVERTISE_1000XHALF |
5927                                         ADVERTISE_SLCT);
5928                                tg3_writephy(tp, MII_ADVERTISE, adv);
5929                                tg3_writephy(tp, MII_BMCR, bmcr |
5930                                                           BMCR_ANRESTART |
5931                                                           BMCR_ANENABLE);
5932                                udelay(10);
5933                                tg3_carrier_off(tp);
5934                        }
5935                        tg3_writephy(tp, MII_BMCR, new_bmcr);
5936                        bmcr = new_bmcr;
5937                        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5938                        err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5939                        if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5940                                if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5941                                        bmsr |= BMSR_LSTATUS;
5942                                else
5943                                        bmsr &= ~BMSR_LSTATUS;
5944                        }
5945                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5946                }
5947        }
5948
5949        if (bmsr & BMSR_LSTATUS) {
5950                current_speed = SPEED_1000;
5951                current_link_up = true;
5952                if (bmcr & BMCR_FULLDPLX)
5953                        current_duplex = DUPLEX_FULL;
5954                else
5955                        current_duplex = DUPLEX_HALF;
5956
5957                local_adv = 0;
5958                remote_adv = 0;
5959
5960                if (bmcr & BMCR_ANENABLE) {
5961                        u32 common;
5962
5963                        err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5964                        err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5965                        common = local_adv & remote_adv;
5966                        if (common & (ADVERTISE_1000XHALF |
5967                                      ADVERTISE_1000XFULL)) {
5968                                if (common & ADVERTISE_1000XFULL)
5969                                        current_duplex = DUPLEX_FULL;
5970                                else
5971                                        current_duplex = DUPLEX_HALF;
5972
5973                                tp->link_config.rmt_adv =
5974                                           mii_adv_to_ethtool_adv_x(remote_adv);
5975                        } else if (!tg3_flag(tp, 5780_CLASS)) {
5976                                /* Link is up via parallel detect */
5977                        } else {
5978                                current_link_up = false;
5979                        }
5980                }
5981        }
5982
5983fiber_setup_done:
5984        if (current_link_up && current_duplex == DUPLEX_FULL)
5985                tg3_setup_flow_control(tp, local_adv, remote_adv);
5986
5987        tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5988        if (tp->link_config.active_duplex == DUPLEX_HALF)
5989                tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5990
5991        tw32_f(MAC_MODE, tp->mac_mode);
5992        udelay(40);
5993
5994        tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5995
5996        tp->link_config.active_speed = current_speed;
5997        tp->link_config.active_duplex = current_duplex;
5998
5999        tg3_test_and_report_link_chg(tp, current_link_up);
6000        return err;
6001}
6002
6003static void tg3_serdes_parallel_detect(struct tg3 *tp)
6004{
6005        if (tp->serdes_counter) {
6006                /* Give autoneg time to complete. */
6007                tp->serdes_counter--;
6008                return;
6009        }
6010
6011        if (!tp->link_up &&
6012            (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6013                u32 bmcr;
6014
6015                tg3_readphy(tp, MII_BMCR, &bmcr);
6016                if (bmcr & BMCR_ANENABLE) {
6017                        u32 phy1, phy2;
6018
6019                        /* Select shadow register 0x1f */
6020                        tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6021                        tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6022
6023                        /* Select expansion interrupt status register */
6024                        tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6025                                         MII_TG3_DSP_EXP1_INT_STAT);
6026                        tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6027                        tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6028
6029                        if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6030                                /* We have signal detect and not receiving
6031                                 * config code words, link is up by parallel
6032                                 * detection.
6033                                 */
6034
6035                                bmcr &= ~BMCR_ANENABLE;
6036                                bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6037                                tg3_writephy(tp, MII_BMCR, bmcr);
6038                                tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6039                        }
6040                }
6041        } else if (tp->link_up &&
6042                   (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6043                   (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6044                u32 phy2;
6045
6046                /* Select expansion interrupt status register */
6047                tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6048                                 MII_TG3_DSP_EXP1_INT_STAT);
6049                tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6050                if (phy2 & 0x20) {
6051                        u32 bmcr;
6052
6053                        /* Config code words received, turn on autoneg. */
6054                        tg3_readphy(tp, MII_BMCR, &bmcr);
6055                        tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6056
6057                        tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6058
6059                }
6060        }
6061}
6062
6063static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6064{
6065        u32 val;
6066        int err;
6067
6068        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6069                err = tg3_setup_fiber_phy(tp, force_reset);
6070        else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6071                err = tg3_setup_fiber_mii_phy(tp, force_reset);
6072        else
6073                err = tg3_setup_copper_phy(tp, force_reset);
6074
6075        if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6076                u32 scale;
6077
6078                val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6079                if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6080                        scale = 65;
6081                else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6082                        scale = 6;
6083                else
6084                        scale = 12;
6085
6086                val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6087                val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6088                tw32(GRC_MISC_CFG, val);
6089        }
6090
6091        val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6092              (6 << TX_LENGTHS_IPG_SHIFT);
6093        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6094            tg3_asic_rev(tp) == ASIC_REV_5762)
6095                val |= tr32(MAC_TX_LENGTHS) &
6096                       (TX_LENGTHS_JMB_FRM_LEN_MSK |
6097                        TX_LENGTHS_CNT_DWN_VAL_MSK);
6098
6099        if (tp->link_config.active_speed == SPEED_1000 &&
6100            tp->link_config.active_duplex == DUPLEX_HALF)
6101                tw32(MAC_TX_LENGTHS, val |
6102                     (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6103        else
6104                tw32(MAC_TX_LENGTHS, val |
6105                     (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6106
6107        if (!tg3_flag(tp, 5705_PLUS)) {
6108                if (tp->link_up) {
6109                        tw32(HOSTCC_STAT_COAL_TICKS,
6110                             tp->coal.stats_block_coalesce_usecs);
6111                } else {
6112                        tw32(HOSTCC_STAT_COAL_TICKS, 0);
6113                }
6114        }
6115
6116        if (tg3_flag(tp, ASPM_WORKAROUND)) {
6117                val = tr32(PCIE_PWR_MGMT_THRESH);
6118                if (!tp->link_up)
6119                        val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6120                              tp->pwrmgmt_thresh;
6121                else
6122                        val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6123                tw32(PCIE_PWR_MGMT_THRESH, val);
6124        }
6125
6126        return err;
6127}
6128
6129/* tp->lock must be held */
6130static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts)
6131{
6132        u64 stamp;
6133
6134        ptp_read_system_prets(sts);
6135        stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6136        ptp_read_system_postts(sts);
6137        stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6138
6139        return stamp;
6140}
6141
6142/* tp->lock must be held */
6143static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6144{
6145        u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6146
6147        tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6148        tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6149        tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6150        tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6151}
6152
6153static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6154static inline void tg3_full_unlock(struct tg3 *tp);
6155static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6156{
6157        struct tg3 *tp = netdev_priv(dev);
6158
6159        info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6160                                SOF_TIMESTAMPING_RX_SOFTWARE |
6161                                SOF_TIMESTAMPING_SOFTWARE;
6162
6163        if (tg3_flag(tp, PTP_CAPABLE)) {
6164                info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6165                                        SOF_TIMESTAMPING_RX_HARDWARE |
6166                                        SOF_TIMESTAMPING_RAW_HARDWARE;
6167        }
6168
6169        if (tp->ptp_clock)
6170                info->phc_index = ptp_clock_index(tp->ptp_clock);
6171        else
6172                info->phc_index = -1;
6173
6174        info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6175
6176        info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6177                           (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6178                           (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6179                           (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6180        return 0;
6181}
6182
6183static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6184{
6185        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6186        bool neg_adj = false;
6187        u32 correction = 0;
6188
6189        if (ppb < 0) {
6190                neg_adj = true;
6191                ppb = -ppb;
6192        }
6193
6194        /* Frequency adjustment is performed using hardware with a 24 bit
6195         * accumulator and a programmable correction value. On each clk, the
6196         * correction value gets added to the accumulator and when it
6197         * overflows, the time counter is incremented/decremented.
6198         *
6199         * So conversion from ppb to correction value is
6200         *              ppb * (1 << 24) / 1000000000
6201         */
6202        correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6203                     TG3_EAV_REF_CLK_CORRECT_MASK;
6204
6205        tg3_full_lock(tp, 0);
6206
6207        if (correction)
6208                tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6209                     TG3_EAV_REF_CLK_CORRECT_EN |
6210                     (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6211        else
6212                tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6213
6214        tg3_full_unlock(tp);
6215
6216        return 0;
6217}
6218
6219static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6220{
6221        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6222
6223        tg3_full_lock(tp, 0);
6224        tp->ptp_adjust += delta;
6225        tg3_full_unlock(tp);
6226
6227        return 0;
6228}
6229
6230static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
6231                            struct ptp_system_timestamp *sts)
6232{
6233        u64 ns;
6234        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6235
6236        tg3_full_lock(tp, 0);
6237        ns = tg3_refclk_read(tp, sts);
6238        ns += tp->ptp_adjust;
6239        tg3_full_unlock(tp);
6240
6241        *ts = ns_to_timespec64(ns);
6242
6243        return 0;
6244}
6245
6246static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6247                           const struct timespec64 *ts)
6248{
6249        u64 ns;
6250        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6251
6252        ns = timespec64_to_ns(ts);
6253
6254        tg3_full_lock(tp, 0);
6255        tg3_refclk_write(tp, ns);
6256        tp->ptp_adjust = 0;
6257        tg3_full_unlock(tp);
6258
6259        return 0;
6260}
6261
6262static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6263                          struct ptp_clock_request *rq, int on)
6264{
6265        struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6266        u32 clock_ctl;
6267        int rval = 0;
6268
6269        switch (rq->type) {
6270        case PTP_CLK_REQ_PEROUT:
6271                /* Reject requests with unsupported flags */
6272                if (rq->perout.flags)
6273                        return -EOPNOTSUPP;
6274
6275                if (rq->perout.index != 0)
6276                        return -EINVAL;
6277
6278                tg3_full_lock(tp, 0);
6279                clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6280                clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6281
6282                if (on) {
6283                        u64 nsec;
6284
6285                        nsec = rq->perout.start.sec * 1000000000ULL +
6286                               rq->perout.start.nsec;
6287
6288                        if (rq->perout.period.sec || rq->perout.period.nsec) {
6289                                netdev_warn(tp->dev,
6290                                            "Device supports only a one-shot timesync output, period must be 0\n");
6291                                rval = -EINVAL;
6292                                goto err_out;
6293                        }
6294
6295                        if (nsec & (1ULL << 63)) {
6296                                netdev_warn(tp->dev,
6297                                            "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6298                                rval = -EINVAL;
6299                                goto err_out;
6300                        }
6301
6302                        tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6303                        tw32(TG3_EAV_WATCHDOG0_MSB,
6304                             TG3_EAV_WATCHDOG0_EN |
6305                             ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6306
6307                        tw32(TG3_EAV_REF_CLCK_CTL,
6308                             clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6309                } else {
6310                        tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6311                        tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6312                }
6313
6314err_out:
6315                tg3_full_unlock(tp);
6316                return rval;
6317
6318        default:
6319                break;
6320        }
6321
6322        return -EOPNOTSUPP;
6323}
6324
6325static const struct ptp_clock_info tg3_ptp_caps = {
6326        .owner          = THIS_MODULE,
6327        .name           = "tg3 clock",
6328        .max_adj        = 250000000,
6329        .n_alarm        = 0,
6330        .n_ext_ts       = 0,
6331        .n_per_out      = 1,
6332        .n_pins         = 0,
6333        .pps            = 0,
6334        .adjfreq        = tg3_ptp_adjfreq,
6335        .adjtime        = tg3_ptp_adjtime,
6336        .gettimex64     = tg3_ptp_gettimex,
6337        .settime64      = tg3_ptp_settime,
6338        .enable         = tg3_ptp_enable,
6339};
6340
6341static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6342                                     struct skb_shared_hwtstamps *timestamp)
6343{
6344        memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6345        timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6346                                           tp->ptp_adjust);
6347}
6348
6349/* tp->lock must be held */
6350static void tg3_ptp_init(struct tg3 *tp)
6351{
6352        if (!tg3_flag(tp, PTP_CAPABLE))
6353                return;
6354
6355        /* Initialize the hardware clock to the system time. */
6356        tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6357        tp->ptp_adjust = 0;
6358        tp->ptp_info = tg3_ptp_caps;
6359}
6360
6361/* tp->lock must be held */
6362static void tg3_ptp_resume(struct tg3 *tp)
6363{
6364        if (!tg3_flag(tp, PTP_CAPABLE))
6365                return;
6366
6367        tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6368        tp->ptp_adjust = 0;
6369}
6370
6371static void tg3_ptp_fini(struct tg3 *tp)
6372{
6373        if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6374                return;
6375
6376        ptp_clock_unregister(tp->ptp_clock);
6377        tp->ptp_clock = NULL;
6378        tp->ptp_adjust = 0;
6379}
6380
6381static inline int tg3_irq_sync(struct tg3 *tp)
6382{
6383        return tp->irq_sync;
6384}
6385
6386static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6387{
6388        int i;
6389
6390        dst = (u32 *)((u8 *)dst + off);
6391        for (i = 0; i < len; i += sizeof(u32))
6392                *dst++ = tr32(off + i);
6393}
6394
6395static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6396{
6397        tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6398        tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6399        tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6400        tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6401        tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6402        tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6403        tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6404        tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6405        tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6406        tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6407        tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6408        tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6409        tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6410        tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6411        tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6412        tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6413        tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6414        tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6415        tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6416
6417        if (tg3_flag(tp, SUPPORT_MSIX))
6418                tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6419
6420        tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6421        tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6422        tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6423        tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6424        tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6425        tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6426        tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6427        tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6428
6429        if (!tg3_flag(tp, 5705_PLUS)) {
6430                tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6431                tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6432                tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6433        }
6434
6435        tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6436        tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6437        tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6438        tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6439        tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6440
6441        if (tg3_flag(tp, NVRAM))
6442                tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6443}
6444
6445static void tg3_dump_state(struct tg3 *tp)
6446{
6447        int i;
6448        u32 *regs;
6449
6450        regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6451        if (!regs)
6452                return;
6453
6454        if (tg3_flag(tp, PCI_EXPRESS)) {
6455                /* Read up to but not including private PCI registers */
6456                for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6457                        regs[i / sizeof(u32)] = tr32(i);
6458        } else
6459                tg3_dump_legacy_regs(tp, regs);
6460
6461        for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6462                if (!regs[i + 0] && !regs[i + 1] &&
6463                    !regs[i + 2] && !regs[i + 3])
6464                        continue;
6465
6466                netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6467                           i * 4,
6468                           regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6469        }
6470
6471        kfree(regs);
6472
6473        for (i = 0; i < tp->irq_cnt; i++) {
6474                struct tg3_napi *tnapi = &tp->napi[i];
6475
6476                /* SW status block */
6477                netdev_err(tp->dev,
6478                         "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6479                           i,
6480                           tnapi->hw_status->status,
6481                           tnapi->hw_status->status_tag,
6482                           tnapi->hw_status->rx_jumbo_consumer,
6483                           tnapi->hw_status->rx_consumer,
6484                           tnapi->hw_status->rx_mini_consumer,
6485                           tnapi->hw_status->idx[0].rx_producer,
6486                           tnapi->hw_status->idx[0].tx_consumer);
6487
6488                netdev_err(tp->dev,
6489                "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6490                           i,
6491                           tnapi->last_tag, tnapi->last_irq_tag,
6492                           tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6493                           tnapi->rx_rcb_ptr,
6494                           tnapi->prodring.rx_std_prod_idx,
6495                           tnapi->prodring.rx_std_cons_idx,
6496                           tnapi->prodring.rx_jmb_prod_idx,
6497                           tnapi->prodring.rx_jmb_cons_idx);
6498        }
6499}
6500
6501/* This is called whenever we suspect that the system chipset is re-
6502 * ordering the sequence of MMIO to the tx send mailbox. The symptom
6503 * is bogus tx completions. We try to recover by setting the
6504 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6505 * in the workqueue.
6506 */
6507static void tg3_tx_recover(struct tg3 *tp)
6508{
6509        BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6510               tp->write32_tx_mbox == tg3_write_indirect_mbox);
6511
6512        netdev_warn(tp->dev,
6513                    "The system may be re-ordering memory-mapped I/O "
6514                    "cycles to the network device, attempting to recover. "
6515                    "Please report the problem to the driver maintainer "
6516                    "and include system chipset information.\n");
6517
6518        tg3_flag_set(tp, TX_RECOVERY_PENDING);
6519}
6520
6521static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6522{
6523        /* Tell compiler to fetch tx indices from memory. */
6524        barrier();
6525        return tnapi->tx_pending -
6526               ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6527}
6528
6529/* Tigon3 never reports partial packet sends.  So we do not
6530 * need special logic to handle SKBs that have not had all
6531 * of their frags sent yet, like SunGEM does.
6532 */
6533static void tg3_tx(struct tg3_napi *tnapi)
6534{
6535        struct tg3 *tp = tnapi->tp;
6536        u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6537        u32 sw_idx = tnapi->tx_cons;
6538        struct netdev_queue *txq;
6539        int index = tnapi - tp->napi;
6540        unsigned int pkts_compl = 0, bytes_compl = 0;
6541
6542        if (tg3_flag(tp, ENABLE_TSS))
6543                index--;
6544
6545        txq = netdev_get_tx_queue(tp->dev, index);
6546
6547        while (sw_idx != hw_idx) {
6548                struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6549                struct sk_buff *skb = ri->skb;
6550                int i, tx_bug = 0;
6551
6552                if (unlikely(skb == NULL)) {
6553                        tg3_tx_recover(tp);
6554                        return;
6555                }
6556
6557                if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6558                        struct skb_shared_hwtstamps timestamp;
6559                        u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6560                        hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6561
6562                        tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6563
6564                        skb_tstamp_tx(skb, &timestamp);
6565                }
6566
6567                dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping),
6568                                 skb_headlen(skb), DMA_TO_DEVICE);
6569
6570                ri->skb = NULL;
6571
6572                while (ri->fragmented) {
6573                        ri->fragmented = false;
6574                        sw_idx = NEXT_TX(sw_idx);
6575                        ri = &tnapi->tx_buffers[sw_idx];
6576                }
6577
6578                sw_idx = NEXT_TX(sw_idx);
6579
6580                for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6581                        ri = &tnapi->tx_buffers[sw_idx];
6582                        if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6583                                tx_bug = 1;
6584
6585                        dma_unmap_page(&tp->pdev->dev,
6586                                       dma_unmap_addr(ri, mapping),
6587                                       skb_frag_size(&skb_shinfo(skb)->frags[i]),
6588                                       DMA_TO_DEVICE);
6589
6590                        while (ri->fragmented) {
6591                                ri->fragmented = false;
6592                                sw_idx = NEXT_TX(sw_idx);
6593                                ri = &tnapi->tx_buffers[sw_idx];
6594                        }
6595
6596                        sw_idx = NEXT_TX(sw_idx);
6597                }
6598
6599                pkts_compl++;
6600                bytes_compl += skb->len;
6601
6602                dev_consume_skb_any(skb);
6603
6604                if (unlikely(tx_bug)) {
6605                        tg3_tx_recover(tp);
6606                        return;
6607                }
6608        }
6609
6610        netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6611
6612        tnapi->tx_cons = sw_idx;
6613
6614        /* Need to make the tx_cons update visible to tg3_start_xmit()
6615         * before checking for netif_queue_stopped().  Without the
6616         * memory barrier, there is a small possibility that tg3_start_xmit()
6617         * will miss it and cause the queue to be stopped forever.
6618         */
6619        smp_mb();
6620
6621        if (unlikely(netif_tx_queue_stopped(txq) &&
6622                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6623                __netif_tx_lock(txq, smp_processor_id());
6624                if (netif_tx_queue_stopped(txq) &&
6625                    (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6626                        netif_tx_wake_queue(txq);
6627                __netif_tx_unlock(txq);
6628        }
6629}
6630
6631static void tg3_frag_free(bool is_frag, void *data)
6632{
6633        if (is_frag)
6634                skb_free_frag(data);
6635        else
6636                kfree(data);
6637}
6638
6639static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6640{
6641        unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6642                   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6643
6644        if (!ri->data)
6645                return;
6646
6647        dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz,
6648                         DMA_FROM_DEVICE);
6649        tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6650        ri->data = NULL;
6651}
6652
6653
6654/* Returns size of skb allocated or < 0 on error.
6655 *
6656 * We only need to fill in the address because the other members
6657 * of the RX descriptor are invariant, see tg3_init_rings.
6658 *
6659 * Note the purposeful assymetry of cpu vs. chip accesses.  For
6660 * posting buffers we only dirty the first cache line of the RX
6661 * descriptor (containing the address).  Whereas for the RX status
6662 * buffers the cpu only reads the last cacheline of the RX descriptor
6663 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6664 */
6665static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6666                             u32 opaque_key, u32 dest_idx_unmasked,
6667                             unsigned int *frag_size)
6668{
6669        struct tg3_rx_buffer_desc *desc;
6670        struct ring_info *map;
6671        u8 *data;
6672        dma_addr_t mapping;
6673        int skb_size, data_size, dest_idx;
6674
6675        switch (opaque_key) {
6676        case RXD_OPAQUE_RING_STD:
6677                dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6678                desc = &tpr->rx_std[dest_idx];
6679                map = &tpr->rx_std_buffers[dest_idx];
6680                data_size = tp->rx_pkt_map_sz;
6681                break;
6682
6683        case RXD_OPAQUE_RING_JUMBO:
6684                dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6685                desc = &tpr->rx_jmb[dest_idx].std;
6686                map = &tpr->rx_jmb_buffers[dest_idx];
6687                data_size = TG3_RX_JMB_MAP_SZ;
6688                break;
6689
6690        default:
6691                return -EINVAL;
6692        }
6693
6694        /* Do not overwrite any of the map or rp information
6695         * until we are sure we can commit to a new buffer.
6696         *
6697         * Callers depend upon this behavior and assume that
6698         * we leave everything unchanged if we fail.
6699         */
6700        skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6701                   SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6702        if (skb_size <= PAGE_SIZE) {
6703                data = napi_alloc_frag(skb_size);
6704                *frag_size = skb_size;
6705        } else {
6706                data = kmalloc(skb_size, GFP_ATOMIC);
6707                *frag_size = 0;
6708        }
6709        if (!data)
6710                return -ENOMEM;
6711
6712        mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp),
6713                                 data_size, DMA_FROM_DEVICE);
6714        if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
6715                tg3_frag_free(skb_size <= PAGE_SIZE, data);
6716                return -EIO;
6717        }
6718
6719        map->data = data;
6720        dma_unmap_addr_set(map, mapping, mapping);
6721
6722        desc->addr_hi = ((u64)mapping >> 32);
6723        desc->addr_lo = ((u64)mapping & 0xffffffff);
6724
6725        return data_size;
6726}
6727
6728/* We only need to move over in the address because the other
6729 * members of the RX descriptor are invariant.  See notes above
6730 * tg3_alloc_rx_data for full details.
6731 */
6732static void tg3_recycle_rx(struct tg3_napi *tnapi,
6733                           struct tg3_rx_prodring_set *dpr,
6734                           u32 opaque_key, int src_idx,
6735                           u32 dest_idx_unmasked)
6736{
6737        struct tg3 *tp = tnapi->tp;
6738        struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6739        struct ring_info *src_map, *dest_map;
6740        struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6741        int dest_idx;
6742
6743        switch (opaque_key) {
6744        case RXD_OPAQUE_RING_STD:
6745                dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6746                dest_desc = &dpr->rx_std[dest_idx];
6747                dest_map = &dpr->rx_std_buffers[dest_idx];
6748                src_desc = &spr->rx_std[src_idx];
6749                src_map = &spr->rx_std_buffers[src_idx];
6750                break;
6751
6752        case RXD_OPAQUE_RING_JUMBO:
6753                dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6754                dest_desc = &dpr->rx_jmb[dest_idx].std;
6755                dest_map = &dpr->rx_jmb_buffers[dest_idx];
6756                src_desc = &spr->rx_jmb[src_idx].std;
6757                src_map = &spr->rx_jmb_buffers[src_idx];
6758                break;
6759
6760        default:
6761                return;
6762        }
6763
6764        dest_map->data = src_map->data;
6765        dma_unmap_addr_set(dest_map, mapping,
6766                           dma_unmap_addr(src_map, mapping));
6767        dest_desc->addr_hi = src_desc->addr_hi;
6768        dest_desc->addr_lo = src_desc->addr_lo;
6769
6770        /* Ensure that the update to the skb happens after the physical
6771         * addresses have been transferred to the new BD location.
6772         */
6773        smp_wmb();
6774
6775        src_map->data = NULL;
6776}
6777
6778/* The RX ring scheme is composed of multiple rings which post fresh
6779 * buffers to the chip, and one special ring the chip uses to report
6780 * status back to the host.
6781 *
6782 * The special ring reports the status of received packets to the
6783 * host.  The chip does not write into the original descriptor the
6784 * RX buffer was obtained from.  The chip simply takes the original
6785 * descriptor as provided by the host, updates the status and length
6786 * field, then writes this into the next status ring entry.
6787 *
6788 * Each ring the host uses to post buffers to the chip is described
6789 * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6790 * it is first placed into the on-chip ram.  When the packet's length
6791 * is known, it walks down the TG3_BDINFO entries to select the ring.
6792 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6793 * which is within the range of the new packet's length is chosen.
6794 *
6795 * The "separate ring for rx status" scheme may sound queer, but it makes
6796 * sense from a cache coherency perspective.  If only the host writes
6797 * to the buffer post rings, and only the chip writes to the rx status
6798 * rings, then cache lines never move beyond shared-modified state.
6799 * If both the host and chip were to write into the same ring, cache line
6800 * eviction could occur since both entities want it in an exclusive state.
6801 */
6802static int tg3_rx(struct tg3_napi *tnapi, int budget)
6803{
6804        struct tg3 *tp = tnapi->tp;
6805        u32 work_mask, rx_std_posted = 0;
6806        u32 std_prod_idx, jmb_prod_idx;
6807        u32 sw_idx = tnapi->rx_rcb_ptr;
6808        u16 hw_idx;
6809        int received;
6810        struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6811
6812        hw_idx = *(tnapi->rx_rcb_prod_idx);
6813        /*
6814         * We need to order the read of hw_idx and the read of
6815         * the opaque cookie.
6816         */
6817        rmb();
6818        work_mask = 0;
6819        received = 0;
6820        std_prod_idx = tpr->rx_std_prod_idx;
6821        jmb_prod_idx = tpr->rx_jmb_prod_idx;
6822        while (sw_idx != hw_idx && budget > 0) {
6823                struct ring_info *ri;
6824                struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6825                unsigned int len;
6826                struct sk_buff *skb;
6827                dma_addr_t dma_addr;
6828                u32 opaque_key, desc_idx, *post_ptr;
6829                u8 *data;
6830                u64 tstamp = 0;
6831
6832                desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6833                opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6834                if (opaque_key == RXD_OPAQUE_RING_STD) {
6835                        ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6836                        dma_addr = dma_unmap_addr(ri, mapping);
6837                        data = ri->data;
6838                        post_ptr = &std_prod_idx;
6839                        rx_std_posted++;
6840                } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6841                        ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6842                        dma_addr = dma_unmap_addr(ri, mapping);
6843                        data = ri->data;
6844                        post_ptr = &jmb_prod_idx;
6845                } else
6846                        goto next_pkt_nopost;
6847
6848                work_mask |= opaque_key;
6849
6850                if (desc->err_vlan & RXD_ERR_MASK) {
6851                drop_it:
6852                        tg3_recycle_rx(tnapi, tpr, opaque_key,
6853                                       desc_idx, *post_ptr);
6854                drop_it_no_recycle:
6855                        /* Other statistics kept track of by card. */
6856                        tp->rx_dropped++;
6857                        goto next_pkt;
6858                }
6859
6860                prefetch(data + TG3_RX_OFFSET(tp));
6861                len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6862                      ETH_FCS_LEN;
6863
6864                if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6865                     RXD_FLAG_PTPSTAT_PTPV1 ||
6866                    (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6867                     RXD_FLAG_PTPSTAT_PTPV2) {
6868                        tstamp = tr32(TG3_RX_TSTAMP_LSB);
6869                        tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6870                }
6871
6872                if (len > TG3_RX_COPY_THRESH(tp)) {
6873                        int skb_size;
6874                        unsigned int frag_size;
6875
6876                        skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6877                                                    *post_ptr, &frag_size);
6878                        if (skb_size < 0)
6879                                goto drop_it;
6880
6881                        dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size,
6882                                         DMA_FROM_DEVICE);
6883
6884                        /* Ensure that the update to the data happens
6885                         * after the usage of the old DMA mapping.
6886                         */
6887                        smp_wmb();
6888
6889                        ri->data = NULL;
6890
6891                        skb = build_skb(data, frag_size);
6892                        if (!skb) {
6893                                tg3_frag_free(frag_size != 0, data);
6894                                goto drop_it_no_recycle;
6895                        }
6896                        skb_reserve(skb, TG3_RX_OFFSET(tp));
6897                } else {
6898                        tg3_recycle_rx(tnapi, tpr, opaque_key,
6899                                       desc_idx, *post_ptr);
6900
6901                        skb = netdev_alloc_skb(tp->dev,
6902                                               len + TG3_RAW_IP_ALIGN);
6903                        if (skb == NULL)
6904                                goto drop_it_no_recycle;
6905
6906                        skb_reserve(skb, TG3_RAW_IP_ALIGN);
6907                        dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len,
6908                                                DMA_FROM_DEVICE);
6909                        memcpy(skb->data,
6910                               data + TG3_RX_OFFSET(tp),
6911                               len);
6912                        dma_sync_single_for_device(&tp->pdev->dev, dma_addr,
6913                                                   len, DMA_FROM_DEVICE);
6914                }
6915
6916                skb_put(skb, len);
6917                if (tstamp)
6918                        tg3_hwclock_to_timestamp(tp, tstamp,
6919                                                 skb_hwtstamps(skb));
6920
6921                if ((tp->dev->features & NETIF_F_RXCSUM) &&
6922                    (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6923                    (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6924                      >> RXD_TCPCSUM_SHIFT) == 0xffff))
6925                        skb->ip_summed = CHECKSUM_UNNECESSARY;
6926                else
6927                        skb_checksum_none_assert(skb);
6928
6929                skb->protocol = eth_type_trans(skb, tp->dev);
6930
6931                if (len > (tp->dev->mtu + ETH_HLEN) &&
6932                    skb->protocol != htons(ETH_P_8021Q) &&
6933                    skb->protocol != htons(ETH_P_8021AD)) {
6934                        dev_kfree_skb_any(skb);
6935                        goto drop_it_no_recycle;
6936                }
6937
6938                if (desc->type_flags & RXD_FLAG_VLAN &&
6939                    !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6940                        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6941                                               desc->err_vlan & RXD_VLAN_MASK);
6942
6943                napi_gro_receive(&tnapi->napi, skb);
6944
6945                received++;
6946                budget--;
6947
6948next_pkt:
6949                (*post_ptr)++;
6950
6951                if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6952                        tpr->rx_std_prod_idx = std_prod_idx &
6953                                               tp->rx_std_ring_mask;
6954                        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6955                                     tpr->rx_std_prod_idx);
6956                        work_mask &= ~RXD_OPAQUE_RING_STD;
6957                        rx_std_posted = 0;
6958                }
6959next_pkt_nopost:
6960                sw_idx++;
6961                sw_idx &= tp->rx_ret_ring_mask;
6962
6963                /* Refresh hw_idx to see if there is new work */
6964                if (sw_idx == hw_idx) {
6965                        hw_idx = *(tnapi->rx_rcb_prod_idx);
6966                        rmb();
6967                }
6968        }
6969
6970        /* ACK the status ring. */
6971        tnapi->rx_rcb_ptr = sw_idx;
6972        tw32_rx_mbox(tnapi->consmbox, sw_idx);
6973
6974        /* Refill RX ring(s). */
6975        if (!tg3_flag(tp, ENABLE_RSS)) {
6976                /* Sync BD data before updating mailbox */
6977                wmb();
6978
6979                if (work_mask & RXD_OPAQUE_RING_STD) {
6980                        tpr->rx_std_prod_idx = std_prod_idx &
6981                                               tp->rx_std_ring_mask;
6982                        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6983                                     tpr->rx_std_prod_idx);
6984                }
6985                if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6986                        tpr->rx_jmb_prod_idx = jmb_prod_idx &
6987                                               tp->rx_jmb_ring_mask;
6988                        tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6989                                     tpr->rx_jmb_prod_idx);
6990                }
6991        } else if (work_mask) {
6992                /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6993                 * updated before the producer indices can be updated.
6994                 */
6995                smp_wmb();
6996
6997                tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6998                tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6999
7000                if (tnapi != &tp->napi[1]) {
7001                        tp->rx_refill = true;
7002                        napi_schedule(&tp->napi[1].napi);
7003                }
7004        }
7005
7006        return received;
7007}
7008
7009static void tg3_poll_link(struct tg3 *tp)
7010{
7011        /* handle link change and other phy events */
7012        if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7013                struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7014
7015                if (sblk->status & SD_STATUS_LINK_CHG) {
7016                        sblk->status = SD_STATUS_UPDATED |
7017                                       (sblk->status & ~SD_STATUS_LINK_CHG);
7018                        spin_lock(&tp->lock);
7019                        if (tg3_flag(tp, USE_PHYLIB)) {
7020                                tw32_f(MAC_STATUS,
7021                                     (MAC_STATUS_SYNC_CHANGED |
7022                                      MAC_STATUS_CFG_CHANGED |
7023                                      MAC_STATUS_MI_COMPLETION |
7024                                      MAC_STATUS_LNKSTATE_CHANGED));
7025                                udelay(40);
7026                        } else
7027                                tg3_setup_phy(tp, false);
7028                        spin_unlock(&tp->lock);
7029                }
7030        }
7031}
7032
7033static int tg3_rx_prodring_xfer(struct tg3 *tp,
7034                                struct tg3_rx_prodring_set *dpr,
7035                                struct tg3_rx_prodring_set *spr)
7036{
7037        u32 si, di, cpycnt, src_prod_idx;
7038        int i, err = 0;
7039
7040        while (1) {
7041                src_prod_idx = spr->rx_std_prod_idx;
7042
7043                /* Make sure updates to the rx_std_buffers[] entries and the
7044                 * standard producer index are seen in the correct order.
7045                 */
7046                smp_rmb();
7047
7048                if (spr->rx_std_cons_idx == src_prod_idx)
7049                        break;
7050
7051                if (spr->rx_std_cons_idx < src_prod_idx)
7052                        cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7053                else
7054                        cpycnt = tp->rx_std_ring_mask + 1 -
7055                                 spr->rx_std_cons_idx;
7056
7057                cpycnt = min(cpycnt,
7058                             tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7059
7060                si = spr->rx_std_cons_idx;
7061                di = dpr->rx_std_prod_idx;
7062
7063                for (i = di; i < di + cpycnt; i++) {
7064                        if (dpr->rx_std_buffers[i].data) {
7065                                cpycnt = i - di;
7066                                err = -ENOSPC;
7067                                break;
7068                        }
7069                }
7070
7071                if (!cpycnt)
7072                        break;
7073
7074                /* Ensure that updates to the rx_std_buffers ring and the
7075                 * shadowed hardware producer ring from tg3_recycle_skb() are
7076                 * ordered correctly WRT the skb check above.
7077                 */
7078                smp_rmb();
7079
7080                memcpy(&dpr->rx_std_buffers[di],
7081                       &spr->rx_std_buffers[si],
7082                       cpycnt * sizeof(struct ring_info));
7083
7084                for (i = 0; i < cpycnt; i++, di++, si++) {
7085                        struct tg3_rx_buffer_desc *sbd, *dbd;
7086                        sbd = &spr->rx_std[si];
7087                        dbd = &dpr->rx_std[di];
7088                        dbd->addr_hi = sbd->addr_hi;
7089                        dbd->addr_lo = sbd->addr_lo;
7090                }
7091
7092                spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7093                                       tp->rx_std_ring_mask;
7094                dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7095                                       tp->rx_std_ring_mask;
7096        }
7097
7098        while (1) {
7099                src_prod_idx = spr->rx_jmb_prod_idx;
7100
7101                /* Make sure updates to the rx_jmb_buffers[] entries and
7102                 * the jumbo producer index are seen in the correct order.
7103                 */
7104                smp_rmb();
7105
7106                if (spr->rx_jmb_cons_idx == src_prod_idx)
7107                        break;
7108
7109                if (spr->rx_jmb_cons_idx < src_prod_idx)
7110                        cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7111                else
7112                        cpycnt = tp->rx_jmb_ring_mask + 1 -
7113                                 spr->rx_jmb_cons_idx;
7114
7115                cpycnt = min(cpycnt,
7116                             tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7117
7118                si = spr->rx_jmb_cons_idx;
7119                di = dpr->rx_jmb_prod_idx;
7120
7121                for (i = di; i < di + cpycnt; i++) {
7122                        if (dpr->rx_jmb_buffers[i].data) {
7123                                cpycnt = i - di;
7124                                err = -ENOSPC;
7125                                break;
7126                        }
7127                }
7128
7129                if (!cpycnt)
7130                        break;
7131
7132                /* Ensure that updates to the rx_jmb_buffers ring and the
7133                 * shadowed hardware producer ring from tg3_recycle_skb() are
7134                 * ordered correctly WRT the skb check above.
7135                 */
7136                smp_rmb();
7137
7138                memcpy(&dpr->rx_jmb_buffers[di],
7139                       &spr->rx_jmb_buffers[si],
7140                       cpycnt * sizeof(struct ring_info));
7141
7142                for (i = 0; i < cpycnt; i++, di++, si++) {
7143                        struct tg3_rx_buffer_desc *sbd, *dbd;
7144                        sbd = &spr->rx_jmb[si].std;
7145                        dbd = &dpr->rx_jmb[di].std;
7146                        dbd->addr_hi = sbd->addr_hi;
7147                        dbd->addr_lo = sbd->addr_lo;
7148                }
7149
7150                spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7151                                       tp->rx_jmb_ring_mask;
7152                dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7153                                       tp->rx_jmb_ring_mask;
7154        }
7155
7156        return err;
7157}
7158
7159static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7160{
7161        struct tg3 *tp = tnapi->tp;
7162
7163        /* run TX completion thread */
7164        if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7165                tg3_tx(tnapi);
7166                if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7167                        return work_done;
7168        }
7169
7170        if (!tnapi->rx_rcb_prod_idx)
7171                return work_done;
7172
7173        /* run RX thread, within the bounds set by NAPI.
7174         * All RX "locking" is done by ensuring outside
7175         * code synchronizes with tg3->napi.poll()
7176         */
7177        if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7178                work_done += tg3_rx(tnapi, budget - work_done);
7179
7180        if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7181                struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7182                int i, err = 0;
7183                u32 std_prod_idx = dpr->rx_std_prod_idx;
7184                u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7185
7186                tp->rx_refill = false;
7187                for (i = 1; i <= tp->rxq_cnt; i++)
7188                        err |= tg3_rx_prodring_xfer(tp, dpr,
7189                                                    &tp->napi[i].prodring);
7190
7191                wmb();
7192
7193                if (std_prod_idx != dpr->rx_std_prod_idx)
7194                        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7195                                     dpr->rx_std_prod_idx);
7196
7197                if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7198                        tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7199                                     dpr->rx_jmb_prod_idx);
7200
7201                if (err)
7202                        tw32_f(HOSTCC_MODE, tp->coal_now);
7203        }
7204
7205        return work_done;
7206}
7207
7208static inline void tg3_reset_task_schedule(struct tg3 *tp)
7209{
7210        if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7211                schedule_work(&tp->reset_task);
7212}
7213
7214static inline void tg3_reset_task_cancel(struct tg3 *tp)
7215{
7216        if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7217                cancel_work_sync(&tp->reset_task);
7218        tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7219}
7220
7221static int tg3_poll_msix(struct napi_struct *napi, int budget)
7222{
7223        struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7224        struct tg3 *tp = tnapi->tp;
7225        int work_done = 0;
7226        struct tg3_hw_status *sblk = tnapi->hw_status;
7227
7228        while (1) {
7229                work_done = tg3_poll_work(tnapi, work_done, budget);
7230
7231                if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7232                        goto tx_recovery;
7233
7234                if (unlikely(work_done >= budget))
7235                        break;
7236
7237                /* tp->last_tag is used in tg3_int_reenable() below
7238                 * to tell the hw how much work has been processed,
7239                 * so we must read it before checking for more work.
7240                 */
7241                tnapi->last_tag = sblk->status_tag;
7242                tnapi->last_irq_tag = tnapi->last_tag;
7243                rmb();
7244
7245                /* check for RX/TX work to do */
7246                if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7247                           *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7248
7249                        /* This test here is not race free, but will reduce
7250                         * the number of interrupts by looping again.
7251                         */
7252                        if (tnapi == &tp->napi[1] && tp->rx_refill)
7253                                continue;
7254
7255                        napi_complete_done(napi, work_done);
7256                        /* Reenable interrupts. */
7257                        tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7258
7259                        /* This test here is synchronized by napi_schedule()
7260                         * and napi_complete() to close the race condition.
7261                         */
7262                        if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7263                                tw32(HOSTCC_MODE, tp->coalesce_mode |
7264                                                  HOSTCC_MODE_ENABLE |
7265                                                  tnapi->coal_now);
7266                        }
7267                        break;
7268                }
7269        }
7270
7271        tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7272        return work_done;
7273
7274tx_recovery:
7275        /* work_done is guaranteed to be less than budget. */
7276        napi_complete(napi);
7277        tg3_reset_task_schedule(tp);
7278        return work_done;
7279}
7280
7281static void tg3_process_error(struct tg3 *tp)
7282{
7283        u32 val;
7284        bool real_error = false;
7285
7286        if (tg3_flag(tp, ERROR_PROCESSED))
7287                return;
7288
7289        /* Check Flow Attention register */
7290        val = tr32(HOSTCC_FLOW_ATTN);
7291        if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7292                netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7293                real_error = true;
7294        }
7295
7296        if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7297                netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7298                real_error = true;
7299        }
7300
7301        if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7302                netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7303                real_error = true;
7304        }
7305
7306        if (!real_error)
7307                return;
7308
7309        tg3_dump_state(tp);
7310
7311        tg3_flag_set(tp, ERROR_PROCESSED);
7312        tg3_reset_task_schedule(tp);
7313}
7314
7315static int tg3_poll(struct napi_struct *napi, int budget)
7316{
7317        struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7318        struct tg3 *tp = tnapi->tp;
7319        int work_done = 0;
7320        struct tg3_hw_status *sblk = tnapi->hw_status;
7321
7322        while (1) {
7323                if (sblk->status & SD_STATUS_ERROR)
7324                        tg3_process_error(tp);
7325
7326                tg3_poll_link(tp);
7327
7328                work_done = tg3_poll_work(tnapi, work_done, budget);
7329
7330                if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7331                        goto tx_recovery;
7332
7333                if (unlikely(work_done >= budget))
7334                        break;
7335
7336                if (tg3_flag(tp, TAGGED_STATUS)) {
7337                        /* tp->last_tag is used in tg3_int_reenable() below
7338                         * to tell the hw how much work has been processed,
7339                         * so we must read it before checking for more work.
7340                         */
7341                        tnapi->last_tag = sblk->status_tag;
7342                        tnapi->last_irq_tag = tnapi->last_tag;
7343                        rmb();
7344                } else
7345                        sblk->status &= ~SD_STATUS_UPDATED;
7346
7347                if (likely(!tg3_has_work(tnapi))) {
7348                        napi_complete_done(napi, work_done);
7349                        tg3_int_reenable(tnapi);
7350                        break;
7351                }
7352        }
7353
7354        tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7355        return work_done;
7356
7357tx_recovery:
7358        /* work_done is guaranteed to be less than budget. */
7359        napi_complete(napi);
7360        tg3_reset_task_schedule(tp);
7361        return work_done;
7362}
7363
7364static void tg3_napi_disable(struct tg3 *tp)
7365{
7366        int i;
7367
7368        for (i = tp->irq_cnt - 1; i >= 0; i--)
7369                napi_disable(&tp->napi[i].napi);
7370}
7371
7372static void tg3_napi_enable(struct tg3 *tp)
7373{
7374        int i;
7375
7376        for (i = 0; i < tp->irq_cnt; i++)
7377                napi_enable(&tp->napi[i].napi);
7378}
7379
7380static void tg3_napi_init(struct tg3 *tp)
7381{
7382        int i;
7383
7384        netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7385        for (i = 1; i < tp->irq_cnt; i++)
7386                netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7387}
7388
7389static void tg3_napi_fini(struct tg3 *tp)
7390{
7391        int i;
7392
7393        for (i = 0; i < tp->irq_cnt; i++)
7394                netif_napi_del(&tp->napi[i].napi);
7395}
7396
7397static inline void tg3_netif_stop(struct tg3 *tp)
7398{
7399        netif_trans_update(tp->dev);    /* prevent tx timeout */
7400        tg3_napi_disable(tp);
7401        netif_carrier_off(tp->dev);
7402        netif_tx_disable(tp->dev);
7403}
7404
7405/* tp->lock must be held */
7406static inline void tg3_netif_start(struct tg3 *tp)
7407{
7408        tg3_ptp_resume(tp);
7409
7410        /* NOTE: unconditional netif_tx_wake_all_queues is only
7411         * appropriate so long as all callers are assured to
7412         * have free tx slots (such as after tg3_init_hw)
7413         */
7414        netif_tx_wake_all_queues(tp->dev);
7415
7416        if (tp->link_up)
7417                netif_carrier_on(tp->dev);
7418
7419        tg3_napi_enable(tp);
7420        tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7421        tg3_enable_ints(tp);
7422}
7423
7424static void tg3_irq_quiesce(struct tg3 *tp)
7425        __releases(tp->lock)
7426        __acquires(tp->lock)
7427{
7428        int i;
7429
7430        BUG_ON(tp->irq_sync);
7431
7432        tp->irq_sync = 1;
7433        smp_mb();
7434
7435        spin_unlock_bh(&tp->lock);
7436
7437        for (i = 0; i < tp->irq_cnt; i++)
7438                synchronize_irq(tp->napi[i].irq_vec);
7439
7440        spin_lock_bh(&tp->lock);
7441}
7442
7443/* Fully shutdown all tg3 driver activity elsewhere in the system.
7444 * If irq_sync is non-zero, then the IRQ handler must be synchronized
7445 * with as well.  Most of the time, this is not necessary except when
7446 * shutting down the device.
7447 */
7448static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7449{
7450        spin_lock_bh(&tp->lock);
7451        if (irq_sync)
7452                tg3_irq_quiesce(tp);
7453}
7454
7455static inline void tg3_full_unlock(struct tg3 *tp)
7456{
7457        spin_unlock_bh(&tp->lock);
7458}
7459
7460/* One-shot MSI handler - Chip automatically disables interrupt
7461 * after sending MSI so driver doesn't have to do it.
7462 */
7463static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7464{
7465        struct tg3_napi *tnapi = dev_id;
7466        struct tg3 *tp = tnapi->tp;
7467
7468        prefetch(tnapi->hw_status);
7469        if (tnapi->rx_rcb)
7470                prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7471
7472        if (likely(!tg3_irq_sync(tp)))
7473                napi_schedule(&tnapi->napi);
7474
7475        return IRQ_HANDLED;
7476}
7477
7478/* MSI ISR - No need to check for interrupt sharing and no need to
7479 * flush status block and interrupt mailbox. PCI ordering rules
7480 * guarantee that MSI will arrive after the status block.
7481 */
7482static irqreturn_t tg3_msi(int irq, void *dev_id)
7483{
7484        struct tg3_napi *tnapi = dev_id;
7485        struct tg3 *tp = tnapi->tp;
7486
7487        prefetch(tnapi->hw_status);
7488        if (tnapi->rx_rcb)
7489                prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7490        /*
7491         * Writing any value to intr-mbox-0 clears PCI INTA# and
7492         * chip-internal interrupt pending events.
7493         * Writing non-zero to intr-mbox-0 additional tells the
7494         * NIC to stop sending us irqs, engaging "in-intr-handler"
7495         * event coalescing.
7496         */
7497        tw32_mailbox(tnapi->int_mbox, 0x00000001);
7498        if (likely(!tg3_irq_sync(tp)))
7499                napi_schedule(&tnapi->napi);
7500
7501        return IRQ_RETVAL(1);
7502}
7503
7504static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7505{
7506        struct tg3_napi *tnapi = dev_id;
7507        struct tg3 *tp = tnapi->tp;
7508        struct tg3_hw_status *sblk = tnapi->hw_status;
7509        unsigned int handled = 1;
7510
7511        /* In INTx mode, it is possible for the interrupt to arrive at
7512         * the CPU before the status block posted prior to the interrupt.
7513         * Reading the PCI State register will confirm whether the
7514         * interrupt is ours and will flush the status block.
7515         */
7516        if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7517                if (tg3_flag(tp, CHIP_RESETTING) ||
7518                    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7519                        handled = 0;
7520                        goto out;
7521                }
7522        }
7523
7524        /*
7525         * Writing any value to intr-mbox-0 clears PCI INTA# and
7526         * chip-internal interrupt pending events.
7527         * Writing non-zero to intr-mbox-0 additional tells the
7528         * NIC to stop sending us irqs, engaging "in-intr-handler"
7529         * event coalescing.
7530         *
7531         * Flush the mailbox to de-assert the IRQ immediately to prevent
7532         * spurious interrupts.  The flush impacts performance but
7533         * excessive spurious interrupts can be worse in some cases.
7534         */
7535        tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7536        if (tg3_irq_sync(tp))
7537                goto out;
7538        sblk->status &= ~SD_STATUS_UPDATED;
7539        if (likely(tg3_has_work(tnapi))) {
7540                prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7541                napi_schedule(&tnapi->napi);
7542        } else {
7543                /* No work, shared interrupt perhaps?  re-enable
7544                 * interrupts, and flush that PCI write
7545                 */
7546                tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7547                               0x00000000);
7548        }
7549out:
7550        return IRQ_RETVAL(handled);
7551}
7552
7553static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7554{
7555        struct tg3_napi *tnapi = dev_id;
7556        struct tg3 *tp = tnapi->tp;
7557        struct tg3_hw_status *sblk = tnapi->hw_status;
7558        unsigned int handled = 1;
7559
7560        /* In INTx mode, it is possible for the interrupt to arrive at
7561         * the CPU before the status block posted prior to the interrupt.
7562         * Reading the PCI State register will confirm whether the
7563         * interrupt is ours and will flush the status block.
7564         */
7565        if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7566                if (tg3_flag(tp, CHIP_RESETTING) ||
7567                    (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7568                        handled = 0;
7569                        goto out;
7570                }
7571        }
7572
7573        /*
7574         * writing any value to intr-mbox-0 clears PCI INTA# and
7575         * chip-internal interrupt pending events.
7576         * writing non-zero to intr-mbox-0 additional tells the
7577         * NIC to stop sending us irqs, engaging "in-intr-handler"
7578         * event coalescing.
7579         *
7580         * Flush the mailbox to de-assert the IRQ immediately to prevent
7581         * spurious interrupts.  The flush impacts performance but
7582         * excessive spurious interrupts can be worse in some cases.
7583         */
7584        tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7585
7586        /*
7587         * In a shared interrupt configuration, sometimes other devices'
7588         * interrupts will scream.  We record the current status tag here
7589         * so that the above check can report that the screaming interrupts
7590         * are unhandled.  Eventually they will be silenced.
7591         */
7592        tnapi->last_irq_tag = sblk->status_tag;
7593
7594        if (tg3_irq_sync(tp))
7595                goto out;
7596
7597        prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7598
7599        napi_schedule(&tnapi->napi);
7600
7601out:
7602        return IRQ_RETVAL(handled);
7603}
7604
7605/* ISR for interrupt test */
7606static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7607{
7608        struct tg3_napi *tnapi = dev_id;
7609        struct tg3 *tp = tnapi->tp;
7610        struct tg3_hw_status *sblk = tnapi->hw_status;
7611
7612        if ((sblk->status & SD_STATUS_UPDATED) ||
7613            !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7614                tg3_disable_ints(tp);
7615                return IRQ_RETVAL(1);
7616        }
7617        return IRQ_RETVAL(0);
7618}
7619
7620#ifdef CONFIG_NET_POLL_CONTROLLER
7621static void tg3_poll_controller(struct net_device *dev)
7622{
7623        int i;
7624        struct tg3 *tp = netdev_priv(dev);
7625
7626        if (tg3_irq_sync(tp))
7627                return;
7628
7629        for (i = 0; i < tp->irq_cnt; i++)
7630                tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7631}
7632#endif
7633
7634static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue)
7635{
7636        struct tg3 *tp = netdev_priv(dev);
7637
7638        if (netif_msg_tx_err(tp)) {
7639                netdev_err(dev, "transmit timed out, resetting\n");
7640                tg3_dump_state(tp);
7641        }
7642
7643        tg3_reset_task_schedule(tp);
7644}
7645
7646/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7647static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7648{
7649        u32 base = (u32) mapping & 0xffffffff;
7650
7651        return base + len + 8 < base;
7652}
7653
7654/* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7655 * of any 4GB boundaries: 4G, 8G, etc
7656 */
7657static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7658                                           u32 len, u32 mss)
7659{
7660        if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7661                u32 base = (u32) mapping & 0xffffffff;
7662
7663                return ((base + len + (mss & 0x3fff)) < base);
7664        }
7665        return 0;
7666}
7667
7668/* Test for DMA addresses > 40-bit */
7669static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7670                                          int len)
7671{
7672#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7673        if (tg3_flag(tp, 40BIT_DMA_BUG))
7674                return ((u64) mapping + len) > DMA_BIT_MASK(40);
7675        return 0;
7676#else
7677        return 0;
7678#endif
7679}
7680
7681static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7682                                 dma_addr_t mapping, u32 len, u32 flags,
7683                                 u32 mss, u32 vlan)
7684{
7685        txbd->addr_hi = ((u64) mapping >> 32);
7686        txbd->addr_lo = ((u64) mapping & 0xffffffff);
7687        txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7688        txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7689}
7690
7691static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7692                            dma_addr_t map, u32 len, u32 flags,
7693                            u32 mss, u32 vlan)
7694{
7695        struct tg3 *tp = tnapi->tp;
7696        bool hwbug = false;
7697
7698        if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7699                hwbug = true;
7700
7701        if (tg3_4g_overflow_test(map, len))
7702                hwbug = true;
7703
7704        if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7705                hwbug = true;
7706
7707        if (tg3_40bit_overflow_test(tp, map, len))
7708                hwbug = true;
7709
7710        if (tp->dma_limit) {
7711                u32 prvidx = *entry;
7712                u32 tmp_flag = flags & ~TXD_FLAG_END;
7713                while (len > tp->dma_limit && *budget) {
7714                        u32 frag_len = tp->dma_limit;
7715                        len -= tp->dma_limit;
7716
7717                        /* Avoid the 8byte DMA problem */
7718                        if (len <= 8) {
7719                                len += tp->dma_limit / 2;
7720                                frag_len = tp->dma_limit / 2;
7721                        }
7722
7723                        tnapi->tx_buffers[*entry].fragmented = true;
7724
7725                        tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7726                                      frag_len, tmp_flag, mss, vlan);
7727                        *budget -= 1;
7728                        prvidx = *entry;
7729                        *entry = NEXT_TX(*entry);
7730
7731                        map += frag_len;
7732                }
7733
7734                if (len) {
7735                        if (*budget) {
7736                                tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7737                                              len, flags, mss, vlan);
7738                                *budget -= 1;
7739                                *entry = NEXT_TX(*entry);
7740                        } else {
7741                                hwbug = true;
7742                                tnapi->tx_buffers[prvidx].fragmented = false;
7743                        }
7744                }
7745        } else {
7746                tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7747                              len, flags, mss, vlan);
7748                *entry = NEXT_TX(*entry);
7749        }
7750
7751        return hwbug;
7752}
7753
7754static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7755{
7756        int i;
7757        struct sk_buff *skb;
7758        struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7759
7760        skb = txb->skb;
7761        txb->skb = NULL;
7762
7763        dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping),
7764                         skb_headlen(skb), DMA_TO_DEVICE);
7765
7766        while (txb->fragmented) {
7767                txb->fragmented = false;
7768                entry = NEXT_TX(entry);
7769                txb = &tnapi->tx_buffers[entry];
7770        }
7771
7772        for (i = 0; i <= last; i++) {
7773                const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7774
7775                entry = NEXT_TX(entry);
7776                txb = &tnapi->tx_buffers[entry];
7777
7778                dma_unmap_page(&tnapi->tp->pdev->dev,
7779                               dma_unmap_addr(txb, mapping),
7780                               skb_frag_size(frag), DMA_TO_DEVICE);
7781
7782                while (txb->fragmented) {
7783                        txb->fragmented = false;
7784                        entry = NEXT_TX(entry);
7785                        txb = &tnapi->tx_buffers[entry];
7786                }
7787        }
7788}
7789
7790/* Workaround 4GB and 40-bit hardware DMA bugs. */
7791static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7792                                       struct sk_buff **pskb,
7793                                       u32 *entry, u32 *budget,
7794                                       u32 base_flags, u32 mss, u32 vlan)
7795{
7796        struct tg3 *tp = tnapi->tp;
7797        struct sk_buff *new_skb, *skb = *pskb;
7798        dma_addr_t new_addr = 0;
7799        int ret = 0;
7800
7801        if (tg3_asic_rev(tp) != ASIC_REV_5701)
7802                new_skb = skb_copy(skb, GFP_ATOMIC);
7803        else {
7804                int more_headroom = 4 - ((unsigned long)skb->data & 3);
7805
7806                new_skb = skb_copy_expand(skb,
7807                                          skb_headroom(skb) + more_headroom,
7808                                          skb_tailroom(skb), GFP_ATOMIC);
7809        }
7810
7811        if (!new_skb) {
7812                ret = -1;
7813        } else {
7814                /* New SKB is guaranteed to be linear. */
7815                new_addr = dma_map_single(&tp->pdev->dev, new_skb->data,
7816                                          new_skb->len, DMA_TO_DEVICE);
7817                /* Make sure the mapping succeeded */
7818                if (dma_mapping_error(&tp->pdev->dev, new_addr)) {
7819                        dev_kfree_skb_any(new_skb);
7820                        ret = -1;
7821                } else {
7822                        u32 save_entry = *entry;
7823
7824                        base_flags |= TXD_FLAG_END;
7825
7826                        tnapi->tx_buffers[*entry].skb = new_skb;
7827                        dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7828                                           mapping, new_addr);
7829
7830                        if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7831                                            new_skb->len, base_flags,
7832                                            mss, vlan)) {
7833                                tg3_tx_skb_unmap(tnapi, save_entry, -1);
7834                                dev_kfree_skb_any(new_skb);
7835                                ret = -1;
7836                        }
7837                }
7838        }
7839
7840        dev_consume_skb_any(skb);
7841        *pskb = new_skb;
7842        return ret;
7843}
7844
7845static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7846{
7847        /* Check if we will never have enough descriptors,
7848         * as gso_segs can be more than current ring size
7849         */
7850        return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7851}
7852
7853static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7854
7855/* Use GSO to workaround all TSO packets that meet HW bug conditions
7856 * indicated in tg3_tx_frag_set()
7857 */
7858static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7859                       struct netdev_queue *txq, struct sk_buff *skb)
7860{
7861        u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7862        struct sk_buff *segs, *seg, *next;
7863
7864        /* Estimate the number of fragments in the worst case */
7865        if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7866                netif_tx_stop_queue(txq);
7867
7868                /* netif_tx_stop_queue() must be done before checking
7869                 * checking tx index in tg3_tx_avail() below, because in
7870                 * tg3_tx(), we update tx index before checking for
7871                 * netif_tx_queue_stopped().
7872                 */
7873                smp_mb();
7874                if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7875                        return NETDEV_TX_BUSY;
7876
7877                netif_tx_wake_queue(txq);
7878        }
7879
7880        segs = skb_gso_segment(skb, tp->dev->features &
7881                                    ~(NETIF_F_TSO | NETIF_F_TSO6));
7882        if (IS_ERR(segs) || !segs)
7883                goto tg3_tso_bug_end;
7884
7885        skb_list_walk_safe(segs, seg, next) {
7886                skb_mark_not_on_list(seg);
7887                tg3_start_xmit(seg, tp->dev);
7888        }
7889
7890tg3_tso_bug_end:
7891        dev_consume_skb_any(skb);
7892
7893        return NETDEV_TX_OK;
7894}
7895
7896/* hard_start_xmit for all devices */
7897static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7898{
7899        struct tg3 *tp = netdev_priv(dev);
7900        u32 len, entry, base_flags, mss, vlan = 0;
7901        u32 budget;
7902        int i = -1, would_hit_hwbug;
7903        dma_addr_t mapping;
7904        struct tg3_napi *tnapi;
7905        struct netdev_queue *txq;
7906        unsigned int last;
7907        struct iphdr *iph = NULL;
7908        struct tcphdr *tcph = NULL;
7909        __sum16 tcp_csum = 0, ip_csum = 0;
7910        __be16 ip_tot_len = 0;
7911
7912        txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7913        tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7914        if (tg3_flag(tp, ENABLE_TSS))
7915                tnapi++;
7916
7917        budget = tg3_tx_avail(tnapi);
7918
7919        /* We are running in BH disabled context with netif_tx_lock
7920         * and TX reclaim runs via tp->napi.poll inside of a software
7921         * interrupt.  Furthermore, IRQ processing runs lockless so we have
7922         * no IRQ context deadlocks to worry about either.  Rejoice!
7923         */
7924        if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7925                if (!netif_tx_queue_stopped(txq)) {
7926                        netif_tx_stop_queue(txq);
7927
7928                        /* This is a hard error, log it. */
7929                        netdev_err(dev,
7930                                   "BUG! Tx Ring full when queue awake!\n");
7931                }
7932                return NETDEV_TX_BUSY;
7933        }
7934
7935        entry = tnapi->tx_prod;
7936        base_flags = 0;
7937
7938        mss = skb_shinfo(skb)->gso_size;
7939        if (mss) {
7940                u32 tcp_opt_len, hdr_len;
7941
7942                if (skb_cow_head(skb, 0))
7943                        goto drop;
7944
7945                iph = ip_hdr(skb);
7946                tcp_opt_len = tcp_optlen(skb);
7947
7948                hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7949
7950                /* HW/FW can not correctly segment packets that have been
7951                 * vlan encapsulated.
7952                 */
7953                if (skb->protocol == htons(ETH_P_8021Q) ||
7954                    skb->protocol == htons(ETH_P_8021AD)) {
7955                        if (tg3_tso_bug_gso_check(tnapi, skb))
7956                                return tg3_tso_bug(tp, tnapi, txq, skb);
7957                        goto drop;
7958                }
7959
7960                if (!skb_is_gso_v6(skb)) {
7961                        if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7962                            tg3_flag(tp, TSO_BUG)) {
7963                                if (tg3_tso_bug_gso_check(tnapi, skb))
7964                                        return tg3_tso_bug(tp, tnapi, txq, skb);
7965                                goto drop;
7966                        }
7967                        ip_csum = iph->check;
7968                        ip_tot_len = iph->tot_len;
7969                        iph->check = 0;
7970                        iph->tot_len = htons(mss + hdr_len);
7971                }
7972
7973                base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7974                               TXD_FLAG_CPU_POST_DMA);
7975
7976                tcph = tcp_hdr(skb);
7977                tcp_csum = tcph->check;
7978
7979                if (tg3_flag(tp, HW_TSO_1) ||
7980                    tg3_flag(tp, HW_TSO_2) ||
7981                    tg3_flag(tp, HW_TSO_3)) {
7982                        tcph->check = 0;
7983                        base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7984                } else {
7985                        tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
7986                                                         0, IPPROTO_TCP, 0);
7987                }
7988
7989                if (tg3_flag(tp, HW_TSO_3)) {
7990                        mss |= (hdr_len & 0xc) << 12;
7991                        if (hdr_len & 0x10)
7992                                base_flags |= 0x00000010;
7993                        base_flags |= (hdr_len & 0x3e0) << 5;
7994                } else if (tg3_flag(tp, HW_TSO_2))
7995                        mss |= hdr_len << 9;
7996                else if (tg3_flag(tp, HW_TSO_1) ||
7997                         tg3_asic_rev(tp) == ASIC_REV_5705) {
7998                        if (tcp_opt_len || iph->ihl > 5) {
7999                                int tsflags;
8000
8001                                tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8002                                mss |= (tsflags << 11);
8003                        }
8004                } else {
8005                        if (tcp_opt_len || iph->ihl > 5) {
8006                                int tsflags;
8007
8008                                tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8009                                base_flags |= tsflags << 12;
8010                        }
8011                }
8012        } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8013                /* HW/FW can not correctly checksum packets that have been
8014                 * vlan encapsulated.
8015                 */
8016                if (skb->protocol == htons(ETH_P_8021Q) ||
8017                    skb->protocol == htons(ETH_P_8021AD)) {
8018                        if (skb_checksum_help(skb))
8019                                goto drop;
8020                } else  {
8021                        base_flags |= TXD_FLAG_TCPUDP_CSUM;
8022                }
8023        }
8024
8025        if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8026            !mss && skb->len > VLAN_ETH_FRAME_LEN)
8027                base_flags |= TXD_FLAG_JMB_PKT;
8028
8029        if (skb_vlan_tag_present(skb)) {
8030                base_flags |= TXD_FLAG_VLAN;
8031                vlan = skb_vlan_tag_get(skb);
8032        }
8033
8034        if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8035            tg3_flag(tp, TX_TSTAMP_EN)) {
8036                skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8037                base_flags |= TXD_FLAG_HWTSTAMP;
8038        }
8039
8040        len = skb_headlen(skb);
8041
8042        mapping = dma_map_single(&tp->pdev->dev, skb->data, len,
8043                                 DMA_TO_DEVICE);
8044        if (dma_mapping_error(&tp->pdev->dev, mapping))
8045                goto drop;
8046
8047
8048        tnapi->tx_buffers[entry].skb = skb;
8049        dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8050
8051        would_hit_hwbug = 0;
8052
8053        if (tg3_flag(tp, 5701_DMA_BUG))
8054                would_hit_hwbug = 1;
8055
8056        if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8057                          ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8058                            mss, vlan)) {
8059                would_hit_hwbug = 1;
8060        } else if (skb_shinfo(skb)->nr_frags > 0) {
8061                u32 tmp_mss = mss;
8062
8063                if (!tg3_flag(tp, HW_TSO_1) &&
8064                    !tg3_flag(tp, HW_TSO_2) &&
8065                    !tg3_flag(tp, HW_TSO_3))
8066                        tmp_mss = 0;
8067
8068                /* Now loop through additional data
8069                 * fragments, and queue them.
8070                 */
8071                last = skb_shinfo(skb)->nr_frags - 1;
8072                for (i = 0; i <= last; i++) {
8073                        skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8074
8075                        len = skb_frag_size(frag);
8076                        mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8077                                                   len, DMA_TO_DEVICE);
8078
8079                        tnapi->tx_buffers[entry].skb = NULL;
8080                        dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8081                                           mapping);
8082                        if (dma_mapping_error(&tp->pdev->dev, mapping))
8083                                goto dma_error;
8084
8085                        if (!budget ||
8086                            tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8087                                            len, base_flags |
8088                                            ((i == last) ? TXD_FLAG_END : 0),
8089                                            tmp_mss, vlan)) {
8090                                would_hit_hwbug = 1;
8091                                break;
8092                        }
8093                }
8094        }
8095
8096        if (would_hit_hwbug) {
8097                tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8098
8099                if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8100                        /* If it's a TSO packet, do GSO instead of
8101                         * allocating and copying to a large linear SKB
8102                         */
8103                        if (ip_tot_len) {
8104                                iph->check = ip_csum;
8105                                iph->tot_len = ip_tot_len;
8106                        }
8107                        tcph->check = tcp_csum;
8108                        return tg3_tso_bug(tp, tnapi, txq, skb);
8109                }
8110
8111                /* If the workaround fails due to memory/mapping
8112                 * failure, silently drop this packet.
8113                 */
8114                entry = tnapi->tx_prod;
8115                budget = tg3_tx_avail(tnapi);
8116                if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8117                                                base_flags, mss, vlan))
8118                        goto drop_nofree;
8119        }
8120
8121        skb_tx_timestamp(skb);
8122        netdev_tx_sent_queue(txq, skb->len);
8123
8124        /* Sync BD data before updating mailbox */
8125        wmb();
8126
8127        tnapi->tx_prod = entry;
8128        if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8129                netif_tx_stop_queue(txq);
8130
8131                /* netif_tx_stop_queue() must be done before checking
8132                 * checking tx index in tg3_tx_avail() below, because in
8133                 * tg3_tx(), we update tx index before checking for
8134                 * netif_tx_queue_stopped().
8135                 */
8136                smp_mb();
8137                if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8138                        netif_tx_wake_queue(txq);
8139        }
8140
8141        if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8142                /* Packets are ready, update Tx producer idx on card. */
8143                tw32_tx_mbox(tnapi->prodmbox, entry);
8144        }
8145
8146        return NETDEV_TX_OK;
8147
8148dma_error:
8149        tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8150        tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8151drop:
8152        dev_kfree_skb_any(skb);
8153drop_nofree:
8154        tp->tx_dropped++;
8155        return NETDEV_TX_OK;
8156}
8157
8158static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8159{
8160        if (enable) {
8161                tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8162                                  MAC_MODE_PORT_MODE_MASK);
8163
8164                tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8165
8166                if (!tg3_flag(tp, 5705_PLUS))
8167                        tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8168
8169                if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8170                        tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8171                else
8172                        tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8173        } else {
8174                tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8175
8176                if (tg3_flag(tp, 5705_PLUS) ||
8177                    (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8178                    tg3_asic_rev(tp) == ASIC_REV_5700)
8179                        tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8180        }
8181
8182        tw32(MAC_MODE, tp->mac_mode);
8183        udelay(40);
8184}
8185
8186static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8187{
8188        u32 val, bmcr, mac_mode, ptest = 0;
8189
8190        tg3_phy_toggle_apd(tp, false);
8191        tg3_phy_toggle_automdix(tp, false);
8192
8193        if (extlpbk && tg3_phy_set_extloopbk(tp))
8194                return -EIO;
8195
8196        bmcr = BMCR_FULLDPLX;
8197        switch (speed) {
8198        case SPEED_10:
8199                break;
8200        case SPEED_100:
8201                bmcr |= BMCR_SPEED100;
8202                break;
8203        case SPEED_1000:
8204        default:
8205                if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8206                        speed = SPEED_100;
8207                        bmcr |= BMCR_SPEED100;
8208                } else {
8209                        speed = SPEED_1000;
8210                        bmcr |= BMCR_SPEED1000;
8211                }
8212        }
8213
8214        if (extlpbk) {
8215                if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8216                        tg3_readphy(tp, MII_CTRL1000, &val);
8217                        val |= CTL1000_AS_MASTER |
8218                               CTL1000_ENABLE_MASTER;
8219                        tg3_writephy(tp, MII_CTRL1000, val);
8220                } else {
8221                        ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8222                                MII_TG3_FET_PTEST_TRIM_2;
8223                        tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8224                }
8225        } else
8226                bmcr |= BMCR_LOOPBACK;
8227
8228        tg3_writephy(tp, MII_BMCR, bmcr);
8229
8230        /* The write needs to be flushed for the FETs */
8231        if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8232                tg3_readphy(tp, MII_BMCR, &bmcr);
8233
8234        udelay(40);
8235
8236        if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8237            tg3_asic_rev(tp) == ASIC_REV_5785) {
8238                tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8239                             MII_TG3_FET_PTEST_FRC_TX_LINK |
8240                             MII_TG3_FET_PTEST_FRC_TX_LOCK);
8241
8242                /* The write needs to be flushed for the AC131 */
8243                tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8244        }
8245
8246        /* Reset to prevent losing 1st rx packet intermittently */
8247        if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8248            tg3_flag(tp, 5780_CLASS)) {
8249                tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8250                udelay(10);
8251                tw32_f(MAC_RX_MODE, tp->rx_mode);
8252        }
8253
8254        mac_mode = tp->mac_mode &
8255                   ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8256        if (speed == SPEED_1000)
8257                mac_mode |= MAC_MODE_PORT_MODE_GMII;
8258        else
8259                mac_mode |= MAC_MODE_PORT_MODE_MII;
8260
8261        if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8262                u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8263
8264                if (masked_phy_id == TG3_PHY_ID_BCM5401)
8265                        mac_mode &= ~MAC_MODE_LINK_POLARITY;
8266                else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8267                        mac_mode |= MAC_MODE_LINK_POLARITY;
8268
8269                tg3_writephy(tp, MII_TG3_EXT_CTRL,
8270                             MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8271        }
8272
8273        tw32(MAC_MODE, mac_mode);
8274        udelay(40);
8275
8276        return 0;
8277}
8278
8279static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8280{
8281        struct tg3 *tp = netdev_priv(dev);
8282
8283        if (features & NETIF_F_LOOPBACK) {
8284                if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8285                        return;
8286
8287                spin_lock_bh(&tp->lock);
8288                tg3_mac_loopback(tp, true);
8289                netif_carrier_on(tp->dev);
8290                spin_unlock_bh(&tp->lock);
8291                netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8292        } else {
8293                if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8294                        return;
8295
8296                spin_lock_bh(&tp->lock);
8297                tg3_mac_loopback(tp, false);
8298                /* Force link status check */
8299                tg3_setup_phy(tp, true);
8300                spin_unlock_bh(&tp->lock);
8301                netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8302        }
8303}
8304
8305static netdev_features_t tg3_fix_features(struct net_device *dev,
8306        netdev_features_t features)
8307{
8308        struct tg3 *tp = netdev_priv(dev);
8309
8310        if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8311                features &= ~NETIF_F_ALL_TSO;
8312
8313        return features;
8314}
8315
8316static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8317{
8318        netdev_features_t changed = dev->features ^ features;
8319
8320        if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8321                tg3_set_loopback(dev, features);
8322
8323        return 0;
8324}
8325
8326static void tg3_rx_prodring_free(struct tg3 *tp,
8327                                 struct tg3_rx_prodring_set *tpr)
8328{
8329        int i;
8330
8331        if (tpr != &tp->napi[0].prodring) {
8332                for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8333                     i = (i + 1) & tp->rx_std_ring_mask)
8334                        tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8335                                        tp->rx_pkt_map_sz);
8336
8337                if (tg3_flag(tp, JUMBO_CAPABLE)) {
8338                        for (i = tpr->rx_jmb_cons_idx;
8339                             i != tpr->rx_jmb_prod_idx;
8340                             i = (i + 1) & tp->rx_jmb_ring_mask) {
8341                                tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8342                                                TG3_RX_JMB_MAP_SZ);
8343                        }
8344                }
8345
8346                return;
8347        }
8348
8349        for (i = 0; i <= tp->rx_std_ring_mask; i++)
8350                tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8351                                tp->rx_pkt_map_sz);
8352
8353        if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8354                for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8355                        tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8356                                        TG3_RX_JMB_MAP_SZ);
8357        }
8358}
8359
8360/* Initialize rx rings for packet processing.
8361 *
8362 * The chip has been shut down and the driver detached from
8363 * the networking, so no interrupts or new tx packets will
8364 * end up in the driver.  tp->{tx,}lock are held and thus
8365 * we may not sleep.
8366 */
8367static int tg3_rx_prodring_alloc(struct tg3 *tp,
8368                                 struct tg3_rx_prodring_set *tpr)
8369{
8370        u32 i, rx_pkt_dma_sz;
8371
8372        tpr->rx_std_cons_idx = 0;
8373        tpr->rx_std_prod_idx = 0;
8374        tpr->rx_jmb_cons_idx = 0;
8375        tpr->rx_jmb_prod_idx = 0;
8376
8377        if (tpr != &tp->napi[0].prodring) {
8378                memset(&tpr->rx_std_buffers[0], 0,
8379                       TG3_RX_STD_BUFF_RING_SIZE(tp));
8380                if (tpr->rx_jmb_buffers)
8381                        memset(&tpr->rx_jmb_buffers[0], 0,
8382                               TG3_RX_JMB_BUFF_RING_SIZE(tp));
8383                goto done;
8384        }
8385
8386        /* Zero out all descriptors. */
8387        memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8388
8389        rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8390        if (tg3_flag(tp, 5780_CLASS) &&
8391            tp->dev->mtu > ETH_DATA_LEN)
8392                rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8393        tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8394
8395        /* Initialize invariants of the rings, we only set this
8396         * stuff once.  This works because the card does not
8397         * write into the rx buffer posting rings.
8398         */
8399        for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8400                struct tg3_rx_buffer_desc *rxd;
8401
8402                rxd = &tpr->rx_std[i];
8403                rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8404                rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8405                rxd->opaque = (RXD_OPAQUE_RING_STD |
8406                               (i << RXD_OPAQUE_INDEX_SHIFT));
8407        }
8408
8409        /* Now allocate fresh SKBs for each rx ring. */
8410        for (i = 0; i < tp->rx_pending; i++) {
8411                unsigned int frag_size;
8412
8413                if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8414                                      &frag_size) < 0) {
8415                        netdev_warn(tp->dev,
8416                                    "Using a smaller RX standard ring. Only "
8417                                    "%d out of %d buffers were allocated "
8418                                    "successfully\n", i, tp->rx_pending);
8419                        if (i == 0)
8420                                goto initfail;
8421                        tp->rx_pending = i;
8422                        break;
8423                }
8424        }
8425
8426        if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8427                goto done;
8428
8429        memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8430
8431        if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8432                goto done;
8433
8434        for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8435                struct tg3_rx_buffer_desc *rxd;
8436
8437                rxd = &tpr->rx_jmb[i].std;
8438                rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8439                rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8440                                  RXD_FLAG_JUMBO;
8441                rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8442                       (i << RXD_OPAQUE_INDEX_SHIFT));
8443        }
8444
8445        for (i = 0; i < tp->rx_jumbo_pending; i++) {
8446                unsigned int frag_size;
8447
8448                if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8449                                      &frag_size) < 0) {
8450                        netdev_warn(tp->dev,
8451                                    "Using a smaller RX jumbo ring. Only %d "
8452                                    "out of %d buffers were allocated "
8453                                    "successfully\n", i, tp->rx_jumbo_pending);
8454                        if (i == 0)
8455                                goto initfail;
8456                        tp->rx_jumbo_pending = i;
8457                        break;
8458                }
8459        }
8460
8461done:
8462        return 0;
8463
8464initfail:
8465        tg3_rx_prodring_free(tp, tpr);
8466        return -ENOMEM;
8467}
8468
8469static void tg3_rx_prodring_fini(struct tg3 *tp,
8470                                 struct tg3_rx_prodring_set *tpr)
8471{
8472        kfree(tpr->rx_std_buffers);
8473        tpr->rx_std_buffers = NULL;
8474        kfree(tpr->rx_jmb_buffers);
8475        tpr->rx_jmb_buffers = NULL;
8476        if (tpr->rx_std) {
8477                dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8478                                  tpr->rx_std, tpr->rx_std_mapping);
8479                tpr->rx_std = NULL;
8480        }
8481        if (tpr->rx_jmb) {
8482                dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8483                                  tpr->rx_jmb, tpr->rx_jmb_mapping);
8484                tpr->rx_jmb = NULL;
8485        }
8486}
8487
8488static int tg3_rx_prodring_init(struct tg3 *tp,
8489                                struct tg3_rx_prodring_set *tpr)
8490{
8491        tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8492                                      GFP_KERNEL);
8493        if (!tpr->rx_std_buffers)
8494                return -ENOMEM;
8495
8496        tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8497                                         TG3_RX_STD_RING_BYTES(tp),
8498                                         &tpr->rx_std_mapping,
8499                                         GFP_KERNEL);
8500        if (!tpr->rx_std)
8501                goto err_out;
8502
8503        if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8504                tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8505                                              GFP_KERNEL);
8506                if (!tpr->rx_jmb_buffers)
8507                        goto err_out;
8508
8509                tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8510                                                 TG3_RX_JMB_RING_BYTES(tp),
8511                                                 &tpr->rx_jmb_mapping,
8512                                                 GFP_KERNEL);
8513                if (!tpr->rx_jmb)
8514                        goto err_out;
8515        }
8516
8517        return 0;
8518
8519err_out:
8520        tg3_rx_prodring_fini(tp, tpr);
8521        return -ENOMEM;
8522}
8523
8524/* Free up pending packets in all rx/tx rings.
8525 *
8526 * The chip has been shut down and the driver detached from
8527 * the networking, so no interrupts or new tx packets will
8528 * end up in the driver.  tp->{tx,}lock is not held and we are not
8529 * in an interrupt context and thus may sleep.
8530 */
8531static void tg3_free_rings(struct tg3 *tp)
8532{
8533        int i, j;
8534
8535        for (j = 0; j < tp->irq_cnt; j++) {
8536                struct tg3_napi *tnapi = &tp->napi[j];
8537
8538                tg3_rx_prodring_free(tp, &tnapi->prodring);
8539
8540                if (!tnapi->tx_buffers)
8541                        continue;
8542
8543                for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8544                        struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8545
8546                        if (!skb)
8547                                continue;
8548
8549                        tg3_tx_skb_unmap(tnapi, i,
8550                                         skb_shinfo(skb)->nr_frags - 1);
8551
8552                        dev_consume_skb_any(skb);
8553                }
8554                netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8555        }
8556}
8557
8558/* Initialize tx/rx rings for packet processing.
8559 *
8560 * The chip has been shut down and the driver detached from
8561 * the networking, so no interrupts or new tx packets will
8562 * end up in the driver.  tp->{tx,}lock are held and thus
8563 * we may not sleep.
8564 */
8565static int tg3_init_rings(struct tg3 *tp)
8566{
8567        int i;
8568
8569        /* Free up all the SKBs. */
8570        tg3_free_rings(tp);
8571
8572        for (i = 0; i < tp->irq_cnt; i++) {
8573                struct tg3_napi *tnapi = &tp->napi[i];
8574
8575                tnapi->last_tag = 0;
8576                tnapi->last_irq_tag = 0;
8577                tnapi->hw_status->status = 0;
8578                tnapi->hw_status->status_tag = 0;
8579                memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8580
8581                tnapi->tx_prod = 0;
8582                tnapi->tx_cons = 0;
8583                if (tnapi->tx_ring)
8584                        memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8585
8586                tnapi->rx_rcb_ptr = 0;
8587                if (tnapi->rx_rcb)
8588                        memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8589
8590                if (tnapi->prodring.rx_std &&
8591                    tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8592                        tg3_free_rings(tp);
8593                        return -ENOMEM;
8594                }
8595        }
8596
8597        return 0;
8598}
8599
8600static void tg3_mem_tx_release(struct tg3 *tp)
8601{
8602        int i;
8603
8604        for (i = 0; i < tp->irq_max; i++) {
8605                struct tg3_napi *tnapi = &tp->napi[i];
8606
8607                if (tnapi->tx_ring) {
8608                        dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8609                                tnapi->tx_ring, tnapi->tx_desc_mapping);
8610                        tnapi->tx_ring = NULL;
8611                }
8612
8613                kfree(tnapi->tx_buffers);
8614                tnapi->tx_buffers = NULL;
8615        }
8616}
8617
8618static int tg3_mem_tx_acquire(struct tg3 *tp)
8619{
8620        int i;
8621        struct tg3_napi *tnapi = &tp->napi[0];
8622
8623        /* If multivector TSS is enabled, vector 0 does not handle
8624         * tx interrupts.  Don't allocate any resources for it.
8625         */
8626        if (tg3_flag(tp, ENABLE_TSS))
8627                tnapi++;
8628
8629        for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8630                tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
8631                                            sizeof(struct tg3_tx_ring_info),
8632                                            GFP_KERNEL);
8633                if (!tnapi->tx_buffers)
8634                        goto err_out;
8635
8636                tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8637                                                    TG3_TX_RING_BYTES,
8638                                                    &tnapi->tx_desc_mapping,
8639                                                    GFP_KERNEL);
8640                if (!tnapi->tx_ring)
8641                        goto err_out;
8642        }
8643
8644        return 0;
8645
8646err_out:
8647        tg3_mem_tx_release(tp);
8648        return -ENOMEM;
8649}
8650
8651static void tg3_mem_rx_release(struct tg3 *tp)
8652{
8653        int i;
8654
8655        for (i = 0; i < tp->irq_max; i++) {
8656                struct tg3_napi *tnapi = &tp->napi[i];
8657
8658                tg3_rx_prodring_fini(tp, &tnapi->prodring);
8659
8660                if (!tnapi->rx_rcb)
8661                        continue;
8662
8663                dma_free_coherent(&tp->pdev->dev,
8664                                  TG3_RX_RCB_RING_BYTES(tp),
8665                                  tnapi->rx_rcb,
8666                                  tnapi->rx_rcb_mapping);
8667                tnapi->rx_rcb = NULL;
8668        }
8669}
8670
8671static int tg3_mem_rx_acquire(struct tg3 *tp)
8672{
8673        unsigned int i, limit;
8674
8675        limit = tp->rxq_cnt;
8676
8677        /* If RSS is enabled, we need a (dummy) producer ring
8678         * set on vector zero.  This is the true hw prodring.
8679         */
8680        if (tg3_flag(tp, ENABLE_RSS))
8681                limit++;
8682
8683        for (i = 0; i < limit; i++) {
8684                struct tg3_napi *tnapi = &tp->napi[i];
8685
8686                if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8687                        goto err_out;
8688
8689                /* If multivector RSS is enabled, vector 0
8690                 * does not handle rx or tx interrupts.
8691                 * Don't allocate any resources for it.
8692                 */
8693                if (!i && tg3_flag(tp, ENABLE_RSS))
8694                        continue;
8695
8696                tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
8697                                                   TG3_RX_RCB_RING_BYTES(tp),
8698                                                   &tnapi->rx_rcb_mapping,
8699                                                   GFP_KERNEL);
8700                if (!tnapi->rx_rcb)
8701                        goto err_out;
8702        }
8703
8704        return 0;
8705
8706err_out:
8707        tg3_mem_rx_release(tp);
8708        return -ENOMEM;
8709}
8710
8711/*
8712 * Must not be invoked with interrupt sources disabled and
8713 * the hardware shutdown down.
8714 */
8715static void tg3_free_consistent(struct tg3 *tp)
8716{
8717        int i;
8718
8719        for (i = 0; i < tp->irq_cnt; i++) {
8720                struct tg3_napi *tnapi = &tp->napi[i];
8721
8722                if (tnapi->hw_status) {
8723                        dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8724                                          tnapi->hw_status,
8725                                          tnapi->status_mapping);
8726                        tnapi->hw_status = NULL;
8727                }
8728        }
8729
8730        tg3_mem_rx_release(tp);
8731        tg3_mem_tx_release(tp);
8732
8733        /* tp->hw_stats can be referenced safely:
8734         *     1. under rtnl_lock
8735         *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8736         */
8737        if (tp->hw_stats) {
8738                dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8739                                  tp->hw_stats, tp->stats_mapping);
8740                tp->hw_stats = NULL;
8741        }
8742}
8743
8744/*
8745 * Must not be invoked with interrupt sources disabled and
8746 * the hardware shutdown down.  Can sleep.
8747 */
8748static int tg3_alloc_consistent(struct tg3 *tp)
8749{
8750        int i;
8751
8752        tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8753                                          sizeof(struct tg3_hw_stats),
8754                                          &tp->stats_mapping, GFP_KERNEL);
8755        if (!tp->hw_stats)
8756                goto err_out;
8757
8758        for (i = 0; i < tp->irq_cnt; i++) {
8759                struct tg3_napi *tnapi = &tp->napi[i];
8760                struct tg3_hw_status *sblk;
8761
8762                tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8763                                                      TG3_HW_STATUS_SIZE,
8764                                                      &tnapi->status_mapping,
8765                                                      GFP_KERNEL);
8766                if (!tnapi->hw_status)
8767                        goto err_out;
8768
8769                sblk = tnapi->hw_status;
8770
8771                if (tg3_flag(tp, ENABLE_RSS)) {
8772                        u16 *prodptr = NULL;
8773
8774                        /*
8775                         * When RSS is enabled, the status block format changes
8776                         * slightly.  The "rx_jumbo_consumer", "reserved",
8777                         * and "rx_mini_consumer" members get mapped to the
8778                         * other three rx return ring producer indexes.
8779                         */
8780                        switch (i) {
8781                        case 1:
8782                                prodptr = &sblk->idx[0].rx_producer;
8783                                break;
8784                        case 2:
8785                                prodptr = &sblk->rx_jumbo_consumer;
8786                                break;
8787                        case 3:
8788                                prodptr = &sblk->reserved;
8789                                break;
8790                        case 4:
8791                                prodptr = &sblk->rx_mini_consumer;
8792                                break;
8793                        }
8794                        tnapi->rx_rcb_prod_idx = prodptr;
8795                } else {
8796                        tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8797                }
8798        }
8799
8800        if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8801                goto err_out;
8802
8803        return 0;
8804
8805err_out:
8806        tg3_free_consistent(tp);
8807        return -ENOMEM;
8808}
8809
8810#define MAX_WAIT_CNT 1000
8811
8812/* To stop a block, clear the enable bit and poll till it
8813 * clears.  tp->lock is held.
8814 */
8815static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8816{
8817        unsigned int i;
8818        u32 val;
8819
8820        if (tg3_flag(tp, 5705_PLUS)) {
8821                switch (ofs) {
8822                case RCVLSC_MODE:
8823                case DMAC_MODE:
8824                case MBFREE_MODE:
8825                case BUFMGR_MODE:
8826                case MEMARB_MODE:
8827                        /* We can't enable/disable these bits of the
8828                         * 5705/5750, just say success.
8829                         */
8830                        return 0;
8831
8832                default:
8833                        break;
8834                }
8835        }
8836
8837        val = tr32(ofs);
8838        val &= ~enable_bit;
8839        tw32_f(ofs, val);
8840
8841        for (i = 0; i < MAX_WAIT_CNT; i++) {
8842                if (pci_channel_offline(tp->pdev)) {
8843                        dev_err(&tp->pdev->dev,
8844                                "tg3_stop_block device offline, "
8845                                "ofs=%lx enable_bit=%x\n",
8846                                ofs, enable_bit);
8847                        return -ENODEV;
8848                }
8849
8850                udelay(100);
8851                val = tr32(ofs);
8852                if ((val & enable_bit) == 0)
8853                        break;
8854        }
8855
8856        if (i == MAX_WAIT_CNT && !silent) {
8857                dev_err(&tp->pdev->dev,
8858                        "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8859                        ofs, enable_bit);
8860                return -ENODEV;
8861        }
8862
8863        return 0;
8864}
8865
8866/* tp->lock is held. */
8867static int tg3_abort_hw(struct tg3 *tp, bool silent)
8868{
8869        int i, err;
8870
8871        tg3_disable_ints(tp);
8872
8873        if (pci_channel_offline(tp->pdev)) {
8874                tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8875                tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8876                err = -ENODEV;
8877                goto err_no_dev;
8878        }
8879
8880        tp->rx_mode &= ~RX_MODE_ENABLE;
8881        tw32_f(MAC_RX_MODE, tp->rx_mode);
8882        udelay(10);
8883
8884        err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8885        err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8886        err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8887        err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8888        err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8889        err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8890
8891        err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8892        err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8893        err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8894        err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8895        err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8896        err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8897        err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8898
8899        tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8900        tw32_f(MAC_MODE, tp->mac_mode);
8901        udelay(40);
8902
8903        tp->tx_mode &= ~TX_MODE_ENABLE;
8904        tw32_f(MAC_TX_MODE, tp->tx_mode);
8905
8906        for (i = 0; i < MAX_WAIT_CNT; i++) {
8907                udelay(100);
8908                if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8909                        break;
8910        }
8911        if (i >= MAX_WAIT_CNT) {
8912                dev_err(&tp->pdev->dev,
8913                        "%s timed out, TX_MODE_ENABLE will not clear "
8914                        "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8915                err |= -ENODEV;
8916        }
8917
8918        err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8919        err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8920        err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8921
8922        tw32(FTQ_RESET, 0xffffffff);
8923        tw32(FTQ_RESET, 0x00000000);
8924
8925        err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8926        err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8927
8928err_no_dev:
8929        for (i = 0; i < tp->irq_cnt; i++) {
8930                struct tg3_napi *tnapi = &tp->napi[i];
8931                if (tnapi->hw_status)
8932                        memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8933        }
8934
8935        return err;
8936}
8937
8938/* Save PCI command register before chip reset */
8939static void tg3_save_pci_state(struct tg3 *tp)
8940{
8941        pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8942}
8943
8944/* Restore PCI state after chip reset */
8945static void tg3_restore_pci_state(struct tg3 *tp)
8946{
8947        u32 val;
8948
8949        /* Re-enable indirect register accesses. */
8950        pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8951                               tp->misc_host_ctrl);
8952
8953        /* Set MAX PCI retry to zero. */
8954        val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8955        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8956            tg3_flag(tp, PCIX_MODE))
8957                val |= PCISTATE_RETRY_SAME_DMA;
8958        /* Allow reads and writes to the APE register and memory space. */
8959        if (tg3_flag(tp, ENABLE_APE))
8960                val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8961                       PCISTATE_ALLOW_APE_SHMEM_WR |
8962                       PCISTATE_ALLOW_APE_PSPACE_WR;
8963        pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8964
8965        pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8966
8967        if (!tg3_flag(tp, PCI_EXPRESS)) {
8968                pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8969                                      tp->pci_cacheline_sz);
8970                pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8971                                      tp->pci_lat_timer);
8972        }
8973
8974        /* Make sure PCI-X relaxed ordering bit is clear. */
8975        if (tg3_flag(tp, PCIX_MODE)) {
8976                u16 pcix_cmd;
8977
8978                pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8979                                     &pcix_cmd);
8980                pcix_cmd &= ~PCI_X_CMD_ERO;
8981                pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8982                                      pcix_cmd);
8983        }
8984
8985        if (tg3_flag(tp, 5780_CLASS)) {
8986
8987                /* Chip reset on 5780 will reset MSI enable bit,
8988                 * so need to restore it.
8989                 */
8990                if (tg3_flag(tp, USING_MSI)) {
8991                        u16 ctrl;
8992
8993                        pci_read_config_word(tp->pdev,
8994                                             tp->msi_cap + PCI_MSI_FLAGS,
8995                                             &ctrl);
8996                        pci_write_config_word(tp->pdev,
8997                                              tp->msi_cap + PCI_MSI_FLAGS,
8998                                              ctrl | PCI_MSI_FLAGS_ENABLE);
8999                        val = tr32(MSGINT_MODE);
9000                        tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
9001                }
9002        }
9003}
9004
9005static void tg3_override_clk(struct tg3 *tp)
9006{
9007        u32 val;
9008
9009        switch (tg3_asic_rev(tp)) {
9010        case ASIC_REV_5717:
9011                val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9012                tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9013                     TG3_CPMU_MAC_ORIDE_ENABLE);
9014                break;
9015
9016        case ASIC_REV_5719:
9017        case ASIC_REV_5720:
9018                tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9019                break;
9020
9021        default:
9022                return;
9023        }
9024}
9025
9026static void tg3_restore_clk(struct tg3 *tp)
9027{
9028        u32 val;
9029
9030        switch (tg3_asic_rev(tp)) {
9031        case ASIC_REV_5717:
9032                val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9033                tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9034                     val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9035                break;
9036
9037        case ASIC_REV_5719:
9038        case ASIC_REV_5720:
9039                val = tr32(TG3_CPMU_CLCK_ORIDE);
9040                tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9041                break;
9042
9043        default:
9044                return;
9045        }
9046}
9047
9048/* tp->lock is held. */
9049static int tg3_chip_reset(struct tg3 *tp)
9050        __releases(tp->lock)
9051        __acquires(tp->lock)
9052{
9053        u32 val;
9054        void (*write_op)(struct tg3 *, u32, u32);
9055        int i, err;
9056
9057        if (!pci_device_is_present(tp->pdev))
9058                return -ENODEV;
9059
9060        tg3_nvram_lock(tp);
9061
9062        tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9063
9064        /* No matching tg3_nvram_unlock() after this because
9065         * chip reset below will undo the nvram lock.
9066         */
9067        tp->nvram_lock_cnt = 0;
9068
9069        /* GRC_MISC_CFG core clock reset will clear the memory
9070         * enable bit in PCI register 4 and the MSI enable bit
9071         * on some chips, so we save relevant registers here.
9072         */
9073        tg3_save_pci_state(tp);
9074
9075        if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9076            tg3_flag(tp, 5755_PLUS))
9077                tw32(GRC_FASTBOOT_PC, 0);
9078
9079        /*
9080         * We must avoid the readl() that normally takes place.
9081         * It locks machines, causes machine checks, and other
9082         * fun things.  So, temporarily disable the 5701
9083         * hardware workaround, while we do the reset.
9084         */
9085        write_op = tp->write32;
9086        if (write_op == tg3_write_flush_reg32)
9087                tp->write32 = tg3_write32;
9088
9089        /* Prevent the irq handler from reading or writing PCI registers
9090         * during chip reset when the memory enable bit in the PCI command
9091         * register may be cleared.  The chip does not generate interrupt
9092         * at this time, but the irq handler may still be called due to irq
9093         * sharing or irqpoll.
9094         */
9095        tg3_flag_set(tp, CHIP_RESETTING);
9096        for (i = 0; i < tp->irq_cnt; i++) {
9097                struct tg3_napi *tnapi = &tp->napi[i];
9098                if (tnapi->hw_status) {
9099                        tnapi->hw_status->status = 0;
9100                        tnapi->hw_status->status_tag = 0;
9101                }
9102                tnapi->last_tag = 0;
9103                tnapi->last_irq_tag = 0;
9104        }
9105        smp_mb();
9106
9107        tg3_full_unlock(tp);
9108
9109        for (i = 0; i < tp->irq_cnt; i++)
9110                synchronize_irq(tp->napi[i].irq_vec);
9111
9112        tg3_full_lock(tp, 0);
9113
9114        if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9115                val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9116                tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9117        }
9118
9119        /* do the reset */
9120        val = GRC_MISC_CFG_CORECLK_RESET;
9121
9122        if (tg3_flag(tp, PCI_EXPRESS)) {
9123                /* Force PCIe 1.0a mode */
9124                if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9125                    !tg3_flag(tp, 57765_PLUS) &&
9126                    tr32(TG3_PCIE_PHY_TSTCTL) ==
9127                    (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9128                        tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9129
9130                if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9131                        tw32(GRC_MISC_CFG, (1 << 29));
9132                        val |= (1 << 29);
9133                }
9134        }
9135
9136        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9137                tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9138                tw32(GRC_VCPU_EXT_CTRL,
9139                     tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9140        }
9141
9142        /* Set the clock to the highest frequency to avoid timeouts. With link
9143         * aware mode, the clock speed could be slow and bootcode does not
9144         * complete within the expected time. Override the clock to allow the
9145         * bootcode to finish sooner and then restore it.
9146         */
9147        tg3_override_clk(tp);
9148
9149        /* Manage gphy power for all CPMU absent PCIe devices. */
9150        if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9151                val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9152
9153        tw32(GRC_MISC_CFG, val);
9154
9155        /* restore 5701 hardware bug workaround write method */
9156        tp->write32 = write_op;
9157
9158        /* Unfortunately, we have to delay before the PCI read back.
9159         * Some 575X chips even will not respond to a PCI cfg access
9160         * when the reset command is given to the chip.
9161         *
9162         * How do these hardware designers expect things to work
9163         * properly if the PCI write is posted for a long period
9164         * of time?  It is always necessary to have some method by
9165         * which a register read back can occur to push the write
9166         * out which does the reset.
9167         *
9168         * For most tg3 variants the trick below was working.
9169         * Ho hum...
9170         */
9171        udelay(120);
9172
9173        /* Flush PCI posted writes.  The normal MMIO registers
9174         * are inaccessible at this time so this is the only
9175         * way to make this reliably (actually, this is no longer
9176         * the case, see above).  I tried to use indirect
9177         * register read/write but this upset some 5701 variants.
9178         */
9179        pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9180
9181        udelay(120);
9182
9183        if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9184                u16 val16;
9185
9186                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9187                        int j;
9188                        u32 cfg_val;
9189
9190                        /* Wait for link training to complete.  */
9191                        for (j = 0; j < 5000; j++)
9192                                udelay(100);
9193
9194                        pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9195                        pci_write_config_dword(tp->pdev, 0xc4,
9196                                               cfg_val | (1 << 15));
9197                }
9198
9199                /* Clear the "no snoop" and "relaxed ordering" bits. */
9200                val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9201                /*
9202                 * Older PCIe devices only support the 128 byte
9203                 * MPS setting.  Enforce the restriction.
9204                 */
9205                if (!tg3_flag(tp, CPMU_PRESENT))
9206                        val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9207                pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9208
9209                /* Clear error status */
9210                pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9211                                      PCI_EXP_DEVSTA_CED |
9212                                      PCI_EXP_DEVSTA_NFED |
9213                                      PCI_EXP_DEVSTA_FED |
9214                                      PCI_EXP_DEVSTA_URD);
9215        }
9216
9217        tg3_restore_pci_state(tp);
9218
9219        tg3_flag_clear(tp, CHIP_RESETTING);
9220        tg3_flag_clear(tp, ERROR_PROCESSED);
9221
9222        val = 0;
9223        if (tg3_flag(tp, 5780_CLASS))
9224                val = tr32(MEMARB_MODE);
9225        tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9226
9227        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9228                tg3_stop_fw(tp);
9229                tw32(0x5000, 0x400);
9230        }
9231
9232        if (tg3_flag(tp, IS_SSB_CORE)) {
9233                /*
9234                 * BCM4785: In order to avoid repercussions from using
9235                 * potentially defective internal ROM, stop the Rx RISC CPU,
9236                 * which is not required.
9237                 */
9238                tg3_stop_fw(tp);
9239                tg3_halt_cpu(tp, RX_CPU_BASE);
9240        }
9241
9242        err = tg3_poll_fw(tp);
9243        if (err)
9244                return err;
9245
9246        tw32(GRC_MODE, tp->grc_mode);
9247
9248        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9249                val = tr32(0xc4);
9250
9251                tw32(0xc4, val | (1 << 15));
9252        }
9253
9254        if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9255            tg3_asic_rev(tp) == ASIC_REV_5705) {
9256                tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9257                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9258                        tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9259                tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9260        }
9261
9262        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9263                tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9264                val = tp->mac_mode;
9265        } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9266                tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9267                val = tp->mac_mode;
9268        } else
9269                val = 0;
9270
9271        tw32_f(MAC_MODE, val);
9272        udelay(40);
9273
9274        tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9275
9276        tg3_mdio_start(tp);
9277
9278        if (tg3_flag(tp, PCI_EXPRESS) &&
9279            tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9280            tg3_asic_rev(tp) != ASIC_REV_5785 &&
9281            !tg3_flag(tp, 57765_PLUS)) {
9282                val = tr32(0x7c00);
9283
9284                tw32(0x7c00, val | (1 << 25));
9285        }
9286
9287        tg3_restore_clk(tp);
9288
9289        /* Increase the core clock speed to fix tx timeout issue for 5762
9290         * with 100Mbps link speed.
9291         */
9292        if (tg3_asic_rev(tp) == ASIC_REV_5762) {
9293                val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9294                tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9295                     TG3_CPMU_MAC_ORIDE_ENABLE);
9296        }
9297
9298        /* Reprobe ASF enable state.  */
9299        tg3_flag_clear(tp, ENABLE_ASF);
9300        tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9301                           TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9302
9303        tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9304        tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9305        if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9306                u32 nic_cfg;
9307
9308                tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9309                if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9310                        tg3_flag_set(tp, ENABLE_ASF);
9311                        tp->last_event_jiffies = jiffies;
9312                        if (tg3_flag(tp, 5750_PLUS))
9313                                tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9314
9315                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9316                        if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9317                                tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9318                        if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9319                                tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9320                }
9321        }
9322
9323        return 0;
9324}
9325
9326static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9327static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9328static void __tg3_set_rx_mode(struct net_device *);
9329
9330/* tp->lock is held. */
9331static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9332{
9333        int err;
9334
9335        tg3_stop_fw(tp);
9336
9337        tg3_write_sig_pre_reset(tp, kind);
9338
9339        tg3_abort_hw(tp, silent);
9340        err = tg3_chip_reset(tp);
9341
9342        __tg3_set_mac_addr(tp, false);
9343
9344        tg3_write_sig_legacy(tp, kind);
9345        tg3_write_sig_post_reset(tp, kind);
9346
9347        if (tp->hw_stats) {
9348                /* Save the stats across chip resets... */
9349                tg3_get_nstats(tp, &tp->net_stats_prev);
9350                tg3_get_estats(tp, &tp->estats_prev);
9351
9352                /* And make sure the next sample is new data */
9353                memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9354        }
9355
9356        return err;
9357}
9358
9359static int tg3_set_mac_addr(struct net_device *dev, void *p)
9360{
9361        struct tg3 *tp = netdev_priv(dev);
9362        struct sockaddr *addr = p;
9363        int err = 0;
9364        bool skip_mac_1 = false;
9365
9366        if (!is_valid_ether_addr(addr->sa_data))
9367                return -EADDRNOTAVAIL;
9368
9369        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
9370
9371        if (!netif_running(dev))
9372                return 0;
9373
9374        if (tg3_flag(tp, ENABLE_ASF)) {
9375                u32 addr0_high, addr0_low, addr1_high, addr1_low;
9376
9377                addr0_high = tr32(MAC_ADDR_0_HIGH);
9378                addr0_low = tr32(MAC_ADDR_0_LOW);
9379                addr1_high = tr32(MAC_ADDR_1_HIGH);
9380                addr1_low = tr32(MAC_ADDR_1_LOW);
9381
9382                /* Skip MAC addr 1 if ASF is using it. */
9383                if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9384                    !(addr1_high == 0 && addr1_low == 0))
9385                        skip_mac_1 = true;
9386        }
9387        spin_lock_bh(&tp->lock);
9388        __tg3_set_mac_addr(tp, skip_mac_1);
9389        __tg3_set_rx_mode(dev);
9390        spin_unlock_bh(&tp->lock);
9391
9392        return err;
9393}
9394
9395/* tp->lock is held. */
9396static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9397                           dma_addr_t mapping, u32 maxlen_flags,
9398                           u32 nic_addr)
9399{
9400        tg3_write_mem(tp,
9401                      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9402                      ((u64) mapping >> 32));
9403        tg3_write_mem(tp,
9404                      (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9405                      ((u64) mapping & 0xffffffff));
9406        tg3_write_mem(tp,
9407                      (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9408                       maxlen_flags);
9409
9410        if (!tg3_flag(tp, 5705_PLUS))
9411                tg3_write_mem(tp,
9412                              (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9413                              nic_addr);
9414}
9415
9416
9417static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9418{
9419        int i = 0;
9420
9421        if (!tg3_flag(tp, ENABLE_TSS)) {
9422                tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9423                tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9424                tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9425        } else {
9426                tw32(HOSTCC_TXCOL_TICKS, 0);
9427                tw32(HOSTCC_TXMAX_FRAMES, 0);
9428                tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9429
9430                for (; i < tp->txq_cnt; i++) {
9431                        u32 reg;
9432
9433                        reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9434                        tw32(reg, ec->tx_coalesce_usecs);
9435                        reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9436                        tw32(reg, ec->tx_max_coalesced_frames);
9437                        reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9438                        tw32(reg, ec->tx_max_coalesced_frames_irq);
9439                }
9440        }
9441
9442        for (; i < tp->irq_max - 1; i++) {
9443                tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9444                tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9445                tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9446        }
9447}
9448
9449static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9450{
9451        int i = 0;
9452        u32 limit = tp->rxq_cnt;
9453
9454        if (!tg3_flag(tp, ENABLE_RSS)) {
9455                tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9456                tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9457                tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9458                limit--;
9459        } else {
9460                tw32(HOSTCC_RXCOL_TICKS, 0);
9461                tw32(HOSTCC_RXMAX_FRAMES, 0);
9462                tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9463        }
9464
9465        for (; i < limit; i++) {
9466                u32 reg;
9467
9468                reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9469                tw32(reg, ec->rx_coalesce_usecs);
9470                reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9471                tw32(reg, ec->rx_max_coalesced_frames);
9472                reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9473                tw32(reg, ec->rx_max_coalesced_frames_irq);
9474        }
9475
9476        for (; i < tp->irq_max - 1; i++) {
9477                tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9478                tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9479                tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9480        }
9481}
9482
9483static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9484{
9485        tg3_coal_tx_init(tp, ec);
9486        tg3_coal_rx_init(tp, ec);
9487
9488        if (!tg3_flag(tp, 5705_PLUS)) {
9489                u32 val = ec->stats_block_coalesce_usecs;
9490
9491                tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9492                tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9493
9494                if (!tp->link_up)
9495                        val = 0;
9496
9497                tw32(HOSTCC_STAT_COAL_TICKS, val);
9498        }
9499}
9500
9501/* tp->lock is held. */
9502static void tg3_tx_rcbs_disable(struct tg3 *tp)
9503{
9504        u32 txrcb, limit;
9505
9506        /* Disable all transmit rings but the first. */
9507        if (!tg3_flag(tp, 5705_PLUS))
9508                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9509        else if (tg3_flag(tp, 5717_PLUS))
9510                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9511        else if (tg3_flag(tp, 57765_CLASS) ||
9512                 tg3_asic_rev(tp) == ASIC_REV_5762)
9513                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9514        else
9515                limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9516
9517        for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9518             txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9519                tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9520                              BDINFO_FLAGS_DISABLED);
9521}
9522
9523/* tp->lock is held. */
9524static void tg3_tx_rcbs_init(struct tg3 *tp)
9525{
9526        int i = 0;
9527        u32 txrcb = NIC_SRAM_SEND_RCB;
9528
9529        if (tg3_flag(tp, ENABLE_TSS))
9530                i++;
9531
9532        for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9533                struct tg3_napi *tnapi = &tp->napi[i];
9534
9535                if (!tnapi->tx_ring)
9536                        continue;
9537
9538                tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9539                               (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9540                               NIC_SRAM_TX_BUFFER_DESC);
9541        }
9542}
9543
9544/* tp->lock is held. */
9545static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9546{
9547        u32 rxrcb, limit;
9548
9549        /* Disable all receive return rings but the first. */
9550        if (tg3_flag(tp, 5717_PLUS))
9551                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9552        else if (!tg3_flag(tp, 5705_PLUS))
9553                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9554        else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9555                 tg3_asic_rev(tp) == ASIC_REV_5762 ||
9556                 tg3_flag(tp, 57765_CLASS))
9557                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9558        else
9559                limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9560
9561        for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9562             rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9563                tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9564                              BDINFO_FLAGS_DISABLED);
9565}
9566
9567/* tp->lock is held. */
9568static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9569{
9570        int i = 0;
9571        u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9572
9573        if (tg3_flag(tp, ENABLE_RSS))
9574                i++;
9575
9576        for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9577                struct tg3_napi *tnapi = &tp->napi[i];
9578
9579                if (!tnapi->rx_rcb)
9580                        continue;
9581
9582                tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9583                               (tp->rx_ret_ring_mask + 1) <<
9584                                BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9585        }
9586}
9587
9588/* tp->lock is held. */
9589static void tg3_rings_reset(struct tg3 *tp)
9590{
9591        int i;
9592        u32 stblk;
9593        struct tg3_napi *tnapi = &tp->napi[0];
9594
9595        tg3_tx_rcbs_disable(tp);
9596
9597        tg3_rx_ret_rcbs_disable(tp);
9598
9599        /* Disable interrupts */
9600        tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9601        tp->napi[0].chk_msi_cnt = 0;
9602        tp->napi[0].last_rx_cons = 0;
9603        tp->napi[0].last_tx_cons = 0;
9604
9605        /* Zero mailbox registers. */
9606        if (tg3_flag(tp, SUPPORT_MSIX)) {
9607                for (i = 1; i < tp->irq_max; i++) {
9608                        tp->napi[i].tx_prod = 0;
9609                        tp->napi[i].tx_cons = 0;
9610                        if (tg3_flag(tp, ENABLE_TSS))
9611                                tw32_mailbox(tp->napi[i].prodmbox, 0);
9612                        tw32_rx_mbox(tp->napi[i].consmbox, 0);
9613                        tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9614                        tp->napi[i].chk_msi_cnt = 0;
9615                        tp->napi[i].last_rx_cons = 0;
9616                        tp->napi[i].last_tx_cons = 0;
9617                }
9618                if (!tg3_flag(tp, ENABLE_TSS))
9619                        tw32_mailbox(tp->napi[0].prodmbox, 0);
9620        } else {
9621                tp->napi[0].tx_prod = 0;
9622                tp->napi[0].tx_cons = 0;
9623                tw32_mailbox(tp->napi[0].prodmbox, 0);
9624                tw32_rx_mbox(tp->napi[0].consmbox, 0);
9625        }
9626
9627        /* Make sure the NIC-based send BD rings are disabled. */
9628        if (!tg3_flag(tp, 5705_PLUS)) {
9629                u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9630                for (i = 0; i < 16; i++)
9631                        tw32_tx_mbox(mbox + i * 8, 0);
9632        }
9633
9634        /* Clear status block in ram. */
9635        memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9636
9637        /* Set status block DMA address */
9638        tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9639             ((u64) tnapi->status_mapping >> 32));
9640        tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9641             ((u64) tnapi->status_mapping & 0xffffffff));
9642
9643        stblk = HOSTCC_STATBLCK_RING1;
9644
9645        for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9646                u64 mapping = (u64)tnapi->status_mapping;
9647                tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9648                tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9649                stblk += 8;
9650
9651                /* Clear status block in ram. */
9652                memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9653        }
9654
9655        tg3_tx_rcbs_init(tp);
9656        tg3_rx_ret_rcbs_init(tp);
9657}
9658
9659static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9660{
9661        u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9662
9663        if (!tg3_flag(tp, 5750_PLUS) ||
9664            tg3_flag(tp, 5780_CLASS) ||
9665            tg3_asic_rev(tp) == ASIC_REV_5750 ||
9666            tg3_asic_rev(tp) == ASIC_REV_5752 ||
9667            tg3_flag(tp, 57765_PLUS))
9668                bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9669        else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9670                 tg3_asic_rev(tp) == ASIC_REV_5787)
9671                bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9672        else
9673                bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9674
9675        nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9676        host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9677
9678        val = min(nic_rep_thresh, host_rep_thresh);
9679        tw32(RCVBDI_STD_THRESH, val);
9680
9681        if (tg3_flag(tp, 57765_PLUS))
9682                tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9683
9684        if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9685                return;
9686
9687        bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9688
9689        host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9690
9691        val = min(bdcache_maxcnt / 2, host_rep_thresh);
9692        tw32(RCVBDI_JUMBO_THRESH, val);
9693
9694        if (tg3_flag(tp, 57765_PLUS))
9695                tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9696}
9697
9698static inline u32 calc_crc(unsigned char *buf, int len)
9699{
9700        u32 reg;
9701        u32 tmp;
9702        int j, k;
9703
9704        reg = 0xffffffff;
9705
9706        for (j = 0; j < len; j++) {
9707                reg ^= buf[j];
9708
9709                for (k = 0; k < 8; k++) {
9710                        tmp = reg & 0x01;
9711
9712                        reg >>= 1;
9713
9714                        if (tmp)
9715                                reg ^= CRC32_POLY_LE;
9716                }
9717        }
9718
9719        return ~reg;
9720}
9721
9722static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9723{
9724        /* accept or reject all multicast frames */
9725        tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9726        tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9727        tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9728        tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9729}
9730
9731static void __tg3_set_rx_mode(struct net_device *dev)
9732{
9733        struct tg3 *tp = netdev_priv(dev);
9734        u32 rx_mode;
9735
9736        rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9737                                  RX_MODE_KEEP_VLAN_TAG);
9738
9739#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9740        /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9741         * flag clear.
9742         */
9743        if (!tg3_flag(tp, ENABLE_ASF))
9744                rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9745#endif
9746
9747        if (dev->flags & IFF_PROMISC) {
9748                /* Promiscuous mode. */
9749                rx_mode |= RX_MODE_PROMISC;
9750        } else if (dev->flags & IFF_ALLMULTI) {
9751                /* Accept all multicast. */
9752                tg3_set_multi(tp, 1);
9753        } else if (netdev_mc_empty(dev)) {
9754                /* Reject all multicast. */
9755                tg3_set_multi(tp, 0);
9756        } else {
9757                /* Accept one or more multicast(s). */
9758                struct netdev_hw_addr *ha;
9759                u32 mc_filter[4] = { 0, };
9760                u32 regidx;
9761                u32 bit;
9762                u32 crc;
9763
9764                netdev_for_each_mc_addr(ha, dev) {
9765                        crc = calc_crc(ha->addr, ETH_ALEN);
9766                        bit = ~crc & 0x7f;
9767                        regidx = (bit & 0x60) >> 5;
9768                        bit &= 0x1f;
9769                        mc_filter[regidx] |= (1 << bit);
9770                }
9771
9772                tw32(MAC_HASH_REG_0, mc_filter[0]);
9773                tw32(MAC_HASH_REG_1, mc_filter[1]);
9774                tw32(MAC_HASH_REG_2, mc_filter[2]);
9775                tw32(MAC_HASH_REG_3, mc_filter[3]);
9776        }
9777
9778        if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9779                rx_mode |= RX_MODE_PROMISC;
9780        } else if (!(dev->flags & IFF_PROMISC)) {
9781                /* Add all entries into to the mac addr filter list */
9782                int i = 0;
9783                struct netdev_hw_addr *ha;
9784
9785                netdev_for_each_uc_addr(ha, dev) {
9786                        __tg3_set_one_mac_addr(tp, ha->addr,
9787                                               i + TG3_UCAST_ADDR_IDX(tp));
9788                        i++;
9789                }
9790        }
9791
9792        if (rx_mode != tp->rx_mode) {
9793                tp->rx_mode = rx_mode;
9794                tw32_f(MAC_RX_MODE, rx_mode);
9795                udelay(10);
9796        }
9797}
9798
9799static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9800{
9801        int i;
9802
9803        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9804                tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9805}
9806
9807static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9808{
9809        int i;
9810
9811        if (!tg3_flag(tp, SUPPORT_MSIX))
9812                return;
9813
9814        if (tp->rxq_cnt == 1) {
9815                memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9816                return;
9817        }
9818
9819        /* Validate table against current IRQ count */
9820        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9821                if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9822                        break;
9823        }
9824
9825        if (i != TG3_RSS_INDIR_TBL_SIZE)
9826                tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9827}
9828
9829static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9830{
9831        int i = 0;
9832        u32 reg = MAC_RSS_INDIR_TBL_0;
9833
9834        while (i < TG3_RSS_INDIR_TBL_SIZE) {
9835                u32 val = tp->rss_ind_tbl[i];
9836                i++;
9837                for (; i % 8; i++) {
9838                        val <<= 4;
9839                        val |= tp->rss_ind_tbl[i];
9840                }
9841                tw32(reg, val);
9842                reg += 4;
9843        }
9844}
9845
9846static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9847{
9848        if (tg3_asic_rev(tp) == ASIC_REV_5719)
9849                return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9850        else
9851                return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9852}
9853
9854/* tp->lock is held. */
9855static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9856{
9857        u32 val, rdmac_mode;
9858        int i, err, limit;
9859        struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9860
9861        tg3_disable_ints(tp);
9862
9863        tg3_stop_fw(tp);
9864
9865        tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9866
9867        if (tg3_flag(tp, INIT_COMPLETE))
9868                tg3_abort_hw(tp, 1);
9869
9870        if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9871            !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9872                tg3_phy_pull_config(tp);
9873                tg3_eee_pull_config(tp, NULL);
9874                tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9875        }
9876
9877        /* Enable MAC control of LPI */
9878        if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9879                tg3_setup_eee(tp);
9880
9881        if (reset_phy)
9882                tg3_phy_reset(tp);
9883
9884        err = tg3_chip_reset(tp);
9885        if (err)
9886                return err;
9887
9888        tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9889
9890        if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9891                val = tr32(TG3_CPMU_CTRL);
9892                val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9893                tw32(TG3_CPMU_CTRL, val);
9894
9895                val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9896                val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9897                val |= CPMU_LSPD_10MB_MACCLK_6_25;
9898                tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9899
9900                val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9901                val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9902                val |= CPMU_LNK_AWARE_MACCLK_6_25;
9903                tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9904
9905                val = tr32(TG3_CPMU_HST_ACC);
9906                val &= ~CPMU_HST_ACC_MACCLK_MASK;
9907                val |= CPMU_HST_ACC_MACCLK_6_25;
9908                tw32(TG3_CPMU_HST_ACC, val);
9909        }
9910
9911        if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9912                val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9913                val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9914                       PCIE_PWR_MGMT_L1_THRESH_4MS;
9915                tw32(PCIE_PWR_MGMT_THRESH, val);
9916
9917                val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9918                tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9919
9920                tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9921
9922                val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9923                tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9924        }
9925
9926        if (tg3_flag(tp, L1PLLPD_EN)) {
9927                u32 grc_mode = tr32(GRC_MODE);
9928
9929                /* Access the lower 1K of PL PCIE block registers. */
9930                val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9931                tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9932
9933                val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9934                tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9935                     val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9936
9937                tw32(GRC_MODE, grc_mode);
9938        }
9939
9940        if (tg3_flag(tp, 57765_CLASS)) {
9941                if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9942                        u32 grc_mode = tr32(GRC_MODE);
9943
9944                        /* Access the lower 1K of PL PCIE block registers. */
9945                        val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9946                        tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9947
9948                        val = tr32(TG3_PCIE_TLDLPL_PORT +
9949                                   TG3_PCIE_PL_LO_PHYCTL5);
9950                        tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9951                             val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9952
9953                        tw32(GRC_MODE, grc_mode);
9954                }
9955
9956                if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9957                        u32 grc_mode;
9958
9959                        /* Fix transmit hangs */
9960                        val = tr32(TG3_CPMU_PADRNG_CTL);
9961                        val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9962                        tw32(TG3_CPMU_PADRNG_CTL, val);
9963
9964                        grc_mode = tr32(GRC_MODE);
9965
9966                        /* Access the lower 1K of DL PCIE block registers. */
9967                        val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9968                        tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9969
9970                        val = tr32(TG3_PCIE_TLDLPL_PORT +
9971                                   TG3_PCIE_DL_LO_FTSMAX);
9972                        val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9973                        tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9974                             val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9975
9976                        tw32(GRC_MODE, grc_mode);
9977                }
9978
9979                val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9980                val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9981                val |= CPMU_LSPD_10MB_MACCLK_6_25;
9982                tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9983        }
9984
9985        /* This works around an issue with Athlon chipsets on
9986         * B3 tigon3 silicon.  This bit has no effect on any
9987         * other revision.  But do not set this on PCI Express
9988         * chips and don't even touch the clocks if the CPMU is present.
9989         */
9990        if (!tg3_flag(tp, CPMU_PRESENT)) {
9991                if (!tg3_flag(tp, PCI_EXPRESS))
9992                        tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9993                tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9994        }
9995
9996        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9997            tg3_flag(tp, PCIX_MODE)) {
9998                val = tr32(TG3PCI_PCISTATE);
9999                val |= PCISTATE_RETRY_SAME_DMA;
10000                tw32(TG3PCI_PCISTATE, val);
10001        }
10002
10003        if (tg3_flag(tp, ENABLE_APE)) {
10004                /* Allow reads and writes to the
10005                 * APE register and memory space.
10006                 */
10007                val = tr32(TG3PCI_PCISTATE);
10008                val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
10009                       PCISTATE_ALLOW_APE_SHMEM_WR |
10010                       PCISTATE_ALLOW_APE_PSPACE_WR;
10011                tw32(TG3PCI_PCISTATE, val);
10012        }
10013
10014        if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
10015                /* Enable some hw fixes.  */
10016                val = tr32(TG3PCI_MSI_DATA);
10017                val |= (1 << 26) | (1 << 28) | (1 << 29);
10018                tw32(TG3PCI_MSI_DATA, val);
10019        }
10020
10021        /* Descriptor ring init may make accesses to the
10022         * NIC SRAM area to setup the TX descriptors, so we
10023         * can only do this after the hardware has been
10024         * successfully reset.
10025         */
10026        err = tg3_init_rings(tp);
10027        if (err)
10028                return err;
10029
10030        if (tg3_flag(tp, 57765_PLUS)) {
10031                val = tr32(TG3PCI_DMA_RW_CTRL) &
10032                      ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10033                if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10034                        val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10035                if (!tg3_flag(tp, 57765_CLASS) &&
10036                    tg3_asic_rev(tp) != ASIC_REV_5717 &&
10037                    tg3_asic_rev(tp) != ASIC_REV_5762)
10038                        val |= DMA_RWCTRL_TAGGED_STAT_WA;
10039                tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10040        } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10041                   tg3_asic_rev(tp) != ASIC_REV_5761) {
10042                /* This value is determined during the probe time DMA
10043                 * engine test, tg3_test_dma.
10044                 */
10045                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10046        }
10047
10048        tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10049                          GRC_MODE_4X_NIC_SEND_RINGS |
10050                          GRC_MODE_NO_TX_PHDR_CSUM |
10051                          GRC_MODE_NO_RX_PHDR_CSUM);
10052        tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10053
10054        /* Pseudo-header checksum is done by hardware logic and not
10055         * the offload processers, so make the chip do the pseudo-
10056         * header checksums on receive.  For transmit it is more
10057         * convenient to do the pseudo-header checksum in software
10058         * as Linux does that on transmit for us in all cases.
10059         */
10060        tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10061
10062        val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10063        if (tp->rxptpctl)
10064                tw32(TG3_RX_PTP_CTL,
10065                     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10066
10067        if (tg3_flag(tp, PTP_CAPABLE))
10068                val |= GRC_MODE_TIME_SYNC_ENABLE;
10069
10070        tw32(GRC_MODE, tp->grc_mode | val);
10071
10072        /* On one of the AMD platform, MRRS is restricted to 4000 because of
10073         * south bridge limitation. As a workaround, Driver is setting MRRS
10074         * to 2048 instead of default 4096.
10075         */
10076        if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10077            tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
10078                val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
10079                tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
10080        }
10081
10082        /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10083        val = tr32(GRC_MISC_CFG);
10084        val &= ~0xff;
10085        val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10086        tw32(GRC_MISC_CFG, val);
10087
10088        /* Initialize MBUF/DESC pool. */
10089        if (tg3_flag(tp, 5750_PLUS)) {
10090                /* Do nothing.  */
10091        } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10092                tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10093                if (tg3_asic_rev(tp) == ASIC_REV_5704)
10094                        tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10095                else
10096                        tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10097                tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10098                tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10099        } else if (tg3_flag(tp, TSO_CAPABLE)) {
10100                int fw_len;
10101
10102                fw_len = tp->fw_len;
10103                fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10104                tw32(BUFMGR_MB_POOL_ADDR,
10105                     NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10106                tw32(BUFMGR_MB_POOL_SIZE,
10107                     NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10108        }
10109
10110        if (tp->dev->mtu <= ETH_DATA_LEN) {
10111                tw32(BUFMGR_MB_RDMA_LOW_WATER,
10112                     tp->bufmgr_config.mbuf_read_dma_low_water);
10113                tw32(BUFMGR_MB_MACRX_LOW_WATER,
10114                     tp->bufmgr_config.mbuf_mac_rx_low_water);
10115                tw32(BUFMGR_MB_HIGH_WATER,
10116                     tp->bufmgr_config.mbuf_high_water);
10117        } else {
10118                tw32(BUFMGR_MB_RDMA_LOW_WATER,
10119                     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10120                tw32(BUFMGR_MB_MACRX_LOW_WATER,
10121                     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10122                tw32(BUFMGR_MB_HIGH_WATER,
10123                     tp->bufmgr_config.mbuf_high_water_jumbo);
10124        }
10125        tw32(BUFMGR_DMA_LOW_WATER,
10126             tp->bufmgr_config.dma_low_water);
10127        tw32(BUFMGR_DMA_HIGH_WATER,
10128             tp->bufmgr_config.dma_high_water);
10129
10130        val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10131        if (tg3_asic_rev(tp) == ASIC_REV_5719)
10132                val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10133        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10134            tg3_asic_rev(tp) == ASIC_REV_5762 ||
10135            tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10136            tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10137                val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10138        tw32(BUFMGR_MODE, val);
10139        for (i = 0; i < 2000; i++) {
10140                if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10141                        break;
10142                udelay(10);
10143        }
10144        if (i >= 2000) {
10145                netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10146                return -ENODEV;
10147        }
10148
10149        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10150                tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10151
10152        tg3_setup_rxbd_thresholds(tp);
10153
10154        /* Initialize TG3_BDINFO's at:
10155         *  RCVDBDI_STD_BD:     standard eth size rx ring
10156         *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10157         *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10158         *
10159         * like so:
10160         *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10161         *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10162         *                              ring attribute flags
10163         *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10164         *
10165         * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10166         * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10167         *
10168         * The size of each ring is fixed in the firmware, but the location is
10169         * configurable.
10170         */
10171        tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10172             ((u64) tpr->rx_std_mapping >> 32));
10173        tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10174             ((u64) tpr->rx_std_mapping & 0xffffffff));
10175        if (!tg3_flag(tp, 5717_PLUS))
10176                tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10177                     NIC_SRAM_RX_BUFFER_DESC);
10178
10179        /* Disable the mini ring */
10180        if (!tg3_flag(tp, 5705_PLUS))
10181                tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10182                     BDINFO_FLAGS_DISABLED);
10183
10184        /* Program the jumbo buffer descriptor ring control
10185         * blocks on those devices that have them.
10186         */
10187        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10188            (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10189
10190                if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10191                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10192                             ((u64) tpr->rx_jmb_mapping >> 32));
10193                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10194                             ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10195                        val = TG3_RX_JMB_RING_SIZE(tp) <<
10196                              BDINFO_FLAGS_MAXLEN_SHIFT;
10197                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10198                             val | BDINFO_FLAGS_USE_EXT_RECV);
10199                        if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10200                            tg3_flag(tp, 57765_CLASS) ||
10201                            tg3_asic_rev(tp) == ASIC_REV_5762)
10202                                tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10203                                     NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10204                } else {
10205                        tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10206                             BDINFO_FLAGS_DISABLED);
10207                }
10208
10209                if (tg3_flag(tp, 57765_PLUS)) {
10210                        val = TG3_RX_STD_RING_SIZE(tp);
10211                        val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10212                        val |= (TG3_RX_STD_DMA_SZ << 2);
10213                } else
10214                        val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10215        } else
10216                val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10217
10218        tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10219
10220        tpr->rx_std_prod_idx = tp->rx_pending;
10221        tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10222
10223        tpr->rx_jmb_prod_idx =
10224                tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10225        tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10226
10227        tg3_rings_reset(tp);
10228
10229        /* Initialize MAC address and backoff seed. */
10230        __tg3_set_mac_addr(tp, false);
10231
10232        /* MTU + ethernet header + FCS + optional VLAN tag */
10233        tw32(MAC_RX_MTU_SIZE,
10234             tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10235
10236        /* The slot time is changed by tg3_setup_phy if we
10237         * run at gigabit with half duplex.
10238         */
10239        val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10240              (6 << TX_LENGTHS_IPG_SHIFT) |
10241              (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10242
10243        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10244            tg3_asic_rev(tp) == ASIC_REV_5762)
10245                val |= tr32(MAC_TX_LENGTHS) &
10246                       (TX_LENGTHS_JMB_FRM_LEN_MSK |
10247                        TX_LENGTHS_CNT_DWN_VAL_MSK);
10248
10249        tw32(MAC_TX_LENGTHS, val);
10250
10251        /* Receive rules. */
10252        tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10253        tw32(RCVLPC_CONFIG, 0x0181);
10254
10255        /* Calculate RDMAC_MODE setting early, we need it to determine
10256         * the RCVLPC_STATE_ENABLE mask.
10257         */
10258        rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10259                      RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10260                      RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10261                      RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10262                      RDMAC_MODE_LNGREAD_ENAB);
10263
10264        if (tg3_asic_rev(tp) == ASIC_REV_5717)
10265                rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10266
10267        if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10268            tg3_asic_rev(tp) == ASIC_REV_5785 ||
10269            tg3_asic_rev(tp) == ASIC_REV_57780)
10270                rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10271                              RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10272                              RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10273
10274        if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10275            tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10276                if (tg3_flag(tp, TSO_CAPABLE) &&
10277                    tg3_asic_rev(tp) == ASIC_REV_5705) {
10278                        rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10279                } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10280                           !tg3_flag(tp, IS_5788)) {
10281                        rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10282                }
10283        }
10284
10285        if (tg3_flag(tp, PCI_EXPRESS))
10286                rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10287
10288        if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10289                tp->dma_limit = 0;
10290                if (tp->dev->mtu <= ETH_DATA_LEN) {
10291                        rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10292                        tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10293                }
10294        }
10295
10296        if (tg3_flag(tp, HW_TSO_1) ||
10297            tg3_flag(tp, HW_TSO_2) ||
10298            tg3_flag(tp, HW_TSO_3))
10299                rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10300
10301        if (tg3_flag(tp, 57765_PLUS) ||
10302            tg3_asic_rev(tp) == ASIC_REV_5785 ||
10303            tg3_asic_rev(tp) == ASIC_REV_57780)
10304                rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10305
10306        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10307            tg3_asic_rev(tp) == ASIC_REV_5762)
10308                rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10309
10310        if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10311            tg3_asic_rev(tp) == ASIC_REV_5784 ||
10312            tg3_asic_rev(tp) == ASIC_REV_5785 ||
10313            tg3_asic_rev(tp) == ASIC_REV_57780 ||
10314            tg3_flag(tp, 57765_PLUS)) {
10315                u32 tgtreg;
10316
10317                if (tg3_asic_rev(tp) == ASIC_REV_5762)
10318                        tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10319                else
10320                        tgtreg = TG3_RDMA_RSRVCTRL_REG;
10321
10322                val = tr32(tgtreg);
10323                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10324                    tg3_asic_rev(tp) == ASIC_REV_5762) {
10325                        val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10326                                 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10327                                 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10328                        val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10329                               TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10330                               TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10331                }
10332                tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10333        }
10334
10335        if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10336            tg3_asic_rev(tp) == ASIC_REV_5720 ||
10337            tg3_asic_rev(tp) == ASIC_REV_5762) {
10338                u32 tgtreg;
10339
10340                if (tg3_asic_rev(tp) == ASIC_REV_5762)
10341                        tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10342                else
10343                        tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10344
10345                val = tr32(tgtreg);
10346                tw32(tgtreg, val |
10347                     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10348                     TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10349        }
10350
10351        /* Receive/send statistics. */
10352        if (tg3_flag(tp, 5750_PLUS)) {
10353                val = tr32(RCVLPC_STATS_ENABLE);
10354                val &= ~RCVLPC_STATSENAB_DACK_FIX;
10355                tw32(RCVLPC_STATS_ENABLE, val);
10356        } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10357                   tg3_flag(tp, TSO_CAPABLE)) {
10358                val = tr32(RCVLPC_STATS_ENABLE);
10359                val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10360                tw32(RCVLPC_STATS_ENABLE, val);
10361        } else {
10362                tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10363        }
10364        tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10365        tw32(SNDDATAI_STATSENAB, 0xffffff);
10366        tw32(SNDDATAI_STATSCTRL,
10367             (SNDDATAI_SCTRL_ENABLE |
10368              SNDDATAI_SCTRL_FASTUPD));
10369
10370        /* Setup host coalescing engine. */
10371        tw32(HOSTCC_MODE, 0);
10372        for (i = 0; i < 2000; i++) {
10373                if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10374                        break;
10375                udelay(10);
10376        }
10377
10378        __tg3_set_coalesce(tp, &tp->coal);
10379
10380        if (!tg3_flag(tp, 5705_PLUS)) {
10381                /* Status/statistics block address.  See tg3_timer,
10382                 * the tg3_periodic_fetch_stats call there, and
10383                 * tg3_get_stats to see how this works for 5705/5750 chips.
10384                 */
10385                tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10386                     ((u64) tp->stats_mapping >> 32));
10387                tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10388                     ((u64) tp->stats_mapping & 0xffffffff));
10389                tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10390
10391                tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10392
10393                /* Clear statistics and status block memory areas */
10394                for (i = NIC_SRAM_STATS_BLK;
10395                     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10396                     i += sizeof(u32)) {
10397                        tg3_write_mem(tp, i, 0);
10398                        udelay(40);
10399                }
10400        }
10401
10402        tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10403
10404        tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10405        tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10406        if (!tg3_flag(tp, 5705_PLUS))
10407                tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10408
10409        if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10410                tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10411                /* reset to prevent losing 1st rx packet intermittently */
10412                tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10413                udelay(10);
10414        }
10415
10416        tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10417                        MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10418                        MAC_MODE_FHDE_ENABLE;
10419        if (tg3_flag(tp, ENABLE_APE))
10420                tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10421        if (!tg3_flag(tp, 5705_PLUS) &&
10422            !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10423            tg3_asic_rev(tp) != ASIC_REV_5700)
10424                tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10425        tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10426        udelay(40);
10427
10428        /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10429         * If TG3_FLAG_IS_NIC is zero, we should read the
10430         * register to preserve the GPIO settings for LOMs. The GPIOs,
10431         * whether used as inputs or outputs, are set by boot code after
10432         * reset.
10433         */
10434        if (!tg3_flag(tp, IS_NIC)) {
10435                u32 gpio_mask;
10436
10437                gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10438                            GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10439                            GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10440
10441                if (tg3_asic_rev(tp) == ASIC_REV_5752)
10442                        gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10443                                     GRC_LCLCTRL_GPIO_OUTPUT3;
10444
10445                if (tg3_asic_rev(tp) == ASIC_REV_5755)
10446                        gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10447
10448                tp->grc_local_ctrl &= ~gpio_mask;
10449                tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10450
10451                /* GPIO1 must be driven high for eeprom write protect */
10452                if (tg3_flag(tp, EEPROM_WRITE_PROT))
10453                        tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10454                                               GRC_LCLCTRL_GPIO_OUTPUT1);
10455        }
10456        tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10457        udelay(100);
10458
10459        if (tg3_flag(tp, USING_MSIX)) {
10460                val = tr32(MSGINT_MODE);
10461                val |= MSGINT_MODE_ENABLE;
10462                if (tp->irq_cnt > 1)
10463                        val |= MSGINT_MODE_MULTIVEC_EN;
10464                if (!tg3_flag(tp, 1SHOT_MSI))
10465                        val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10466                tw32(MSGINT_MODE, val);
10467        }
10468
10469        if (!tg3_flag(tp, 5705_PLUS)) {
10470                tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10471                udelay(40);
10472        }
10473
10474        val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10475               WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10476               WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10477               WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10478               WDMAC_MODE_LNGREAD_ENAB);
10479
10480        if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10481            tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10482                if (tg3_flag(tp, TSO_CAPABLE) &&
10483                    (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10484                     tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10485                        /* nothing */
10486                } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10487                           !tg3_flag(tp, IS_5788)) {
10488                        val |= WDMAC_MODE_RX_ACCEL;
10489                }
10490        }
10491
10492        /* Enable host coalescing bug fix */
10493        if (tg3_flag(tp, 5755_PLUS))
10494                val |= WDMAC_MODE_STATUS_TAG_FIX;
10495
10496        if (tg3_asic_rev(tp) == ASIC_REV_5785)
10497                val |= WDMAC_MODE_BURST_ALL_DATA;
10498
10499        tw32_f(WDMAC_MODE, val);
10500        udelay(40);
10501
10502        if (tg3_flag(tp, PCIX_MODE)) {
10503                u16 pcix_cmd;
10504
10505                pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10506                                     &pcix_cmd);
10507                if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10508                        pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10509                        pcix_cmd |= PCI_X_CMD_READ_2K;
10510                } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10511                        pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10512                        pcix_cmd |= PCI_X_CMD_READ_2K;
10513                }
10514                pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10515                                      pcix_cmd);
10516        }
10517
10518        tw32_f(RDMAC_MODE, rdmac_mode);
10519        udelay(40);
10520
10521        if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10522            tg3_asic_rev(tp) == ASIC_REV_5720) {
10523                for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10524                        if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10525                                break;
10526                }
10527                if (i < TG3_NUM_RDMA_CHANNELS) {
10528                        val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10529                        val |= tg3_lso_rd_dma_workaround_bit(tp);
10530                        tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10531                        tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10532                }
10533        }
10534
10535        tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10536        if (!tg3_flag(tp, 5705_PLUS))
10537                tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10538
10539        if (tg3_asic_rev(tp) == ASIC_REV_5761)
10540                tw32(SNDDATAC_MODE,
10541                     SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10542        else
10543                tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10544
10545        tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10546        tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10547        val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10548        if (tg3_flag(tp, LRG_PROD_RING_CAP))
10549                val |= RCVDBDI_MODE_LRG_RING_SZ;
10550        tw32(RCVDBDI_MODE, val);
10551        tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10552        if (tg3_flag(tp, HW_TSO_1) ||
10553            tg3_flag(tp, HW_TSO_2) ||
10554            tg3_flag(tp, HW_TSO_3))
10555                tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10556        val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10557        if (tg3_flag(tp, ENABLE_TSS))
10558                val |= SNDBDI_MODE_MULTI_TXQ_EN;
10559        tw32(SNDBDI_MODE, val);
10560        tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10561
10562        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10563                err = tg3_load_5701_a0_firmware_fix(tp);
10564                if (err)
10565                        return err;
10566        }
10567
10568        if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10569                /* Ignore any errors for the firmware download. If download
10570                 * fails, the device will operate with EEE disabled
10571                 */
10572                tg3_load_57766_firmware(tp);
10573        }
10574
10575        if (tg3_flag(tp, TSO_CAPABLE)) {
10576                err = tg3_load_tso_firmware(tp);
10577                if (err)
10578                        return err;
10579        }
10580
10581        tp->tx_mode = TX_MODE_ENABLE;
10582
10583        if (tg3_flag(tp, 5755_PLUS) ||
10584            tg3_asic_rev(tp) == ASIC_REV_5906)
10585                tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10586
10587        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10588            tg3_asic_rev(tp) == ASIC_REV_5762) {
10589                val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10590                tp->tx_mode &= ~val;
10591                tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10592        }
10593
10594        tw32_f(MAC_TX_MODE, tp->tx_mode);
10595        udelay(100);
10596
10597        if (tg3_flag(tp, ENABLE_RSS)) {
10598                u32 rss_key[10];
10599
10600                tg3_rss_write_indir_tbl(tp);
10601
10602                netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10603
10604                for (i = 0; i < 10 ; i++)
10605                        tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10606        }
10607
10608        tp->rx_mode = RX_MODE_ENABLE;
10609        if (tg3_flag(tp, 5755_PLUS))
10610                tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10611
10612        if (tg3_asic_rev(tp) == ASIC_REV_5762)
10613                tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10614
10615        if (tg3_flag(tp, ENABLE_RSS))
10616                tp->rx_mode |= RX_MODE_RSS_ENABLE |
10617                               RX_MODE_RSS_ITBL_HASH_BITS_7 |
10618                               RX_MODE_RSS_IPV6_HASH_EN |
10619                               RX_MODE_RSS_TCP_IPV6_HASH_EN |
10620                               RX_MODE_RSS_IPV4_HASH_EN |
10621                               RX_MODE_RSS_TCP_IPV4_HASH_EN;
10622
10623        tw32_f(MAC_RX_MODE, tp->rx_mode);
10624        udelay(10);
10625
10626        tw32(MAC_LED_CTRL, tp->led_ctrl);
10627
10628        tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10629        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10630                tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10631                udelay(10);
10632        }
10633        tw32_f(MAC_RX_MODE, tp->rx_mode);
10634        udelay(10);
10635
10636        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10637                if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10638                    !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10639                        /* Set drive transmission level to 1.2V  */
10640                        /* only if the signal pre-emphasis bit is not set  */
10641                        val = tr32(MAC_SERDES_CFG);
10642                        val &= 0xfffff000;
10643                        val |= 0x880;
10644                        tw32(MAC_SERDES_CFG, val);
10645                }
10646                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10647                        tw32(MAC_SERDES_CFG, 0x616000);
10648        }
10649
10650        /* Prevent chip from dropping frames when flow control
10651         * is enabled.
10652         */
10653        if (tg3_flag(tp, 57765_CLASS))
10654                val = 1;
10655        else
10656                val = 2;
10657        tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10658
10659        if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10660            (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10661                /* Use hardware link auto-negotiation */
10662                tg3_flag_set(tp, HW_AUTONEG);
10663        }
10664
10665        if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10666            tg3_asic_rev(tp) == ASIC_REV_5714) {
10667                u32 tmp;
10668
10669                tmp = tr32(SERDES_RX_CTRL);
10670                tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10671                tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10672                tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10673                tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10674        }
10675
10676        if (!tg3_flag(tp, USE_PHYLIB)) {
10677                if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10678                        tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10679
10680                err = tg3_setup_phy(tp, false);
10681                if (err)
10682                        return err;
10683
10684                if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10685                    !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10686                        u32 tmp;
10687
10688                        /* Clear CRC stats. */
10689                        if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10690                                tg3_writephy(tp, MII_TG3_TEST1,
10691                                             tmp | MII_TG3_TEST1_CRC_EN);
10692                                tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10693                        }
10694                }
10695        }
10696
10697        __tg3_set_rx_mode(tp->dev);
10698
10699        /* Initialize receive rules. */
10700        tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10701        tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10702        tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10703        tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10704
10705        if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10706                limit = 8;
10707        else
10708                limit = 16;
10709        if (tg3_flag(tp, ENABLE_ASF))
10710                limit -= 4;
10711        switch (limit) {
10712        case 16:
10713                tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10714                fallthrough;
10715        case 15:
10716                tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10717                fallthrough;
10718        case 14:
10719                tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10720                fallthrough;
10721        case 13:
10722                tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10723                fallthrough;
10724        case 12:
10725                tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10726                fallthrough;
10727        case 11:
10728                tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10729                fallthrough;
10730        case 10:
10731                tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10732                fallthrough;
10733        case 9:
10734                tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10735                fallthrough;
10736        case 8:
10737                tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10738                fallthrough;
10739        case 7:
10740                tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10741                fallthrough;
10742        case 6:
10743                tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10744                fallthrough;
10745        case 5:
10746                tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10747                fallthrough;
10748        case 4:
10749                /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10750        case 3:
10751                /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10752        case 2:
10753        case 1:
10754
10755        default:
10756                break;
10757        }
10758
10759        if (tg3_flag(tp, ENABLE_APE))
10760                /* Write our heartbeat update interval to APE. */
10761                tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10762                                APE_HOST_HEARTBEAT_INT_5SEC);
10763
10764        tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10765
10766        return 0;
10767}
10768
10769/* Called at device open time to get the chip ready for
10770 * packet processing.  Invoked with tp->lock held.
10771 */
10772static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10773{
10774        /* Chip may have been just powered on. If so, the boot code may still
10775         * be running initialization. Wait for it to finish to avoid races in
10776         * accessing the hardware.
10777         */
10778        tg3_enable_register_access(tp);
10779        tg3_poll_fw(tp);
10780
10781        tg3_switch_clocks(tp);
10782
10783        tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10784
10785        return tg3_reset_hw(tp, reset_phy);
10786}
10787
10788#ifdef CONFIG_TIGON3_HWMON
10789static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10790{
10791        u32 off, len = TG3_OCIR_LEN;
10792        int i;
10793
10794        for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) {
10795                tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10796
10797                if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10798                    !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10799                        memset(ocir, 0, len);
10800        }
10801}
10802
10803/* sysfs attributes for hwmon */
10804static ssize_t tg3_show_temp(struct device *dev,
10805                             struct device_attribute *devattr, char *buf)
10806{
10807        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10808        struct tg3 *tp = dev_get_drvdata(dev);
10809        u32 temperature;
10810
10811        spin_lock_bh(&tp->lock);
10812        tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10813                                sizeof(temperature));
10814        spin_unlock_bh(&tp->lock);
10815        return sprintf(buf, "%u\n", temperature * 1000);
10816}
10817
10818
10819static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL,
10820                          TG3_TEMP_SENSOR_OFFSET);
10821static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL,
10822                          TG3_TEMP_CAUTION_OFFSET);
10823static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL,
10824                          TG3_TEMP_MAX_OFFSET);
10825
10826static struct attribute *tg3_attrs[] = {
10827        &sensor_dev_attr_temp1_input.dev_attr.attr,
10828        &sensor_dev_attr_temp1_crit.dev_attr.attr,
10829        &sensor_dev_attr_temp1_max.dev_attr.attr,
10830        NULL
10831};
10832ATTRIBUTE_GROUPS(tg3);
10833
10834static void tg3_hwmon_close(struct tg3 *tp)
10835{
10836        if (tp->hwmon_dev) {
10837                hwmon_device_unregister(tp->hwmon_dev);
10838                tp->hwmon_dev = NULL;
10839        }
10840}
10841
10842static void tg3_hwmon_open(struct tg3 *tp)
10843{
10844        int i;
10845        u32 size = 0;
10846        struct pci_dev *pdev = tp->pdev;
10847        struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10848
10849        tg3_sd_scan_scratchpad(tp, ocirs);
10850
10851        for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10852                if (!ocirs[i].src_data_length)
10853                        continue;
10854
10855                size += ocirs[i].src_hdr_length;
10856                size += ocirs[i].src_data_length;
10857        }
10858
10859        if (!size)
10860                return;
10861
10862        tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10863                                                          tp, tg3_groups);
10864        if (IS_ERR(tp->hwmon_dev)) {
10865                tp->hwmon_dev = NULL;
10866                dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10867        }
10868}
10869#else
10870static inline void tg3_hwmon_close(struct tg3 *tp) { }
10871static inline void tg3_hwmon_open(struct tg3 *tp) { }
10872#endif /* CONFIG_TIGON3_HWMON */
10873
10874
10875#define TG3_STAT_ADD32(PSTAT, REG) \
10876do {    u32 __val = tr32(REG); \
10877        (PSTAT)->low += __val; \
10878        if ((PSTAT)->low < __val) \
10879                (PSTAT)->high += 1; \
10880} while (0)
10881
10882static void tg3_periodic_fetch_stats(struct tg3 *tp)
10883{
10884        struct tg3_hw_stats *sp = tp->hw_stats;
10885
10886        if (!tp->link_up)
10887                return;
10888
10889        TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10890        TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10891        TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10892        TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10893        TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10894        TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10895        TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10896        TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10897        TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10898        TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10899        TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10900        TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10901        TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10902        if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10903                     (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10904                      sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10905                u32 val;
10906
10907                val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10908                val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10909                tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10910                tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10911        }
10912
10913        TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10914        TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10915        TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10916        TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10917        TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10918        TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10919        TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10920        TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10921        TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10922        TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10923        TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10924        TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10925        TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10926        TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10927
10928        TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10929        if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10930            tg3_asic_rev(tp) != ASIC_REV_5762 &&
10931            tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10932            tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10933                TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10934        } else {
10935                u32 val = tr32(HOSTCC_FLOW_ATTN);
10936                val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10937                if (val) {
10938                        tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10939                        sp->rx_discards.low += val;
10940                        if (sp->rx_discards.low < val)
10941                                sp->rx_discards.high += 1;
10942                }
10943                sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10944        }
10945        TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10946}
10947
10948static void tg3_chk_missed_msi(struct tg3 *tp)
10949{
10950        u32 i;
10951
10952        for (i = 0; i < tp->irq_cnt; i++) {
10953                struct tg3_napi *tnapi = &tp->napi[i];
10954
10955                if (tg3_has_work(tnapi)) {
10956                        if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10957                            tnapi->last_tx_cons == tnapi->tx_cons) {
10958                                if (tnapi->chk_msi_cnt < 1) {
10959                                        tnapi->chk_msi_cnt++;
10960                                        return;
10961                                }
10962                                tg3_msi(0, tnapi);
10963                        }
10964                }
10965                tnapi->chk_msi_cnt = 0;
10966                tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10967                tnapi->last_tx_cons = tnapi->tx_cons;
10968        }
10969}
10970
10971static void tg3_timer(struct timer_list *t)
10972{
10973        struct tg3 *tp = from_timer(tp, t, timer);
10974
10975        spin_lock(&tp->lock);
10976
10977        if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10978                spin_unlock(&tp->lock);
10979                goto restart_timer;
10980        }
10981
10982        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10983            tg3_flag(tp, 57765_CLASS))
10984                tg3_chk_missed_msi(tp);
10985
10986        if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10987                /* BCM4785: Flush posted writes from GbE to host memory. */
10988                tr32(HOSTCC_MODE);
10989        }
10990
10991        if (!tg3_flag(tp, TAGGED_STATUS)) {
10992                /* All of this garbage is because when using non-tagged
10993                 * IRQ status the mailbox/status_block protocol the chip
10994                 * uses with the cpu is race prone.
10995                 */
10996                if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10997                        tw32(GRC_LOCAL_CTRL,
10998                             tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10999                } else {
11000                        tw32(HOSTCC_MODE, tp->coalesce_mode |
11001                             HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
11002                }
11003
11004                if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
11005                        spin_unlock(&tp->lock);
11006                        tg3_reset_task_schedule(tp);
11007                        goto restart_timer;
11008                }
11009        }
11010
11011        /* This part only runs once per second. */
11012        if (!--tp->timer_counter) {
11013                if (tg3_flag(tp, 5705_PLUS))
11014                        tg3_periodic_fetch_stats(tp);
11015
11016                if (tp->setlpicnt && !--tp->setlpicnt)
11017                        tg3_phy_eee_enable(tp);
11018
11019                if (tg3_flag(tp, USE_LINKCHG_REG)) {
11020                        u32 mac_stat;
11021                        int phy_event;
11022
11023                        mac_stat = tr32(MAC_STATUS);
11024
11025                        phy_event = 0;
11026                        if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
11027                                if (mac_stat & MAC_STATUS_MI_INTERRUPT)
11028                                        phy_event = 1;
11029                        } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
11030                                phy_event = 1;
11031
11032                        if (phy_event)
11033                                tg3_setup_phy(tp, false);
11034                } else if (tg3_flag(tp, POLL_SERDES)) {
11035                        u32 mac_stat = tr32(MAC_STATUS);
11036                        int need_setup = 0;
11037
11038                        if (tp->link_up &&
11039                            (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11040                                need_setup = 1;
11041                        }
11042                        if (!tp->link_up &&
11043                            (mac_stat & (MAC_STATUS_PCS_SYNCED |
11044                                         MAC_STATUS_SIGNAL_DET))) {
11045                                need_setup = 1;
11046                        }
11047                        if (need_setup) {
11048                                if (!tp->serdes_counter) {
11049                                        tw32_f(MAC_MODE,
11050                                             (tp->mac_mode &
11051                                              ~MAC_MODE_PORT_MODE_MASK));
11052                                        udelay(40);
11053                                        tw32_f(MAC_MODE, tp->mac_mode);
11054                                        udelay(40);
11055                                }
11056                                tg3_setup_phy(tp, false);
11057                        }
11058                } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11059                           tg3_flag(tp, 5780_CLASS)) {
11060                        tg3_serdes_parallel_detect(tp);
11061                } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11062                        u32 cpmu = tr32(TG3_CPMU_STATUS);
11063                        bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11064                                         TG3_CPMU_STATUS_LINK_MASK);
11065
11066                        if (link_up != tp->link_up)
11067                                tg3_setup_phy(tp, false);
11068                }
11069
11070                tp->timer_counter = tp->timer_multiplier;
11071        }
11072
11073        /* Heartbeat is only sent once every 2 seconds.
11074         *
11075         * The heartbeat is to tell the ASF firmware that the host
11076         * driver is still alive.  In the event that the OS crashes,
11077         * ASF needs to reset the hardware to free up the FIFO space
11078         * that may be filled with rx packets destined for the host.
11079         * If the FIFO is full, ASF will no longer function properly.
11080         *
11081         * Unintended resets have been reported on real time kernels
11082         * where the timer doesn't run on time.  Netpoll will also have
11083         * same problem.
11084         *
11085         * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11086         * to check the ring condition when the heartbeat is expiring
11087         * before doing the reset.  This will prevent most unintended
11088         * resets.
11089         */
11090        if (!--tp->asf_counter) {
11091                if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11092                        tg3_wait_for_event_ack(tp);
11093
11094                        tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11095                                      FWCMD_NICDRV_ALIVE3);
11096                        tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11097                        tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11098                                      TG3_FW_UPDATE_TIMEOUT_SEC);
11099
11100                        tg3_generate_fw_event(tp);
11101                }
11102                tp->asf_counter = tp->asf_multiplier;
11103        }
11104
11105        /* Update the APE heartbeat every 5 seconds.*/
11106        tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL);
11107
11108        spin_unlock(&tp->lock);
11109
11110restart_timer:
11111        tp->timer.expires = jiffies + tp->timer_offset;
11112        add_timer(&tp->timer);
11113}
11114
11115static void tg3_timer_init(struct tg3 *tp)
11116{
11117        if (tg3_flag(tp, TAGGED_STATUS) &&
11118            tg3_asic_rev(tp) != ASIC_REV_5717 &&
11119            !tg3_flag(tp, 57765_CLASS))
11120                tp->timer_offset = HZ;
11121        else
11122                tp->timer_offset = HZ / 10;
11123
11124        BUG_ON(tp->timer_offset > HZ);
11125
11126        tp->timer_multiplier = (HZ / tp->timer_offset);
11127        tp->asf_multiplier = (HZ / tp->timer_offset) *
11128                             TG3_FW_UPDATE_FREQ_SEC;
11129
11130        timer_setup(&tp->timer, tg3_timer, 0);
11131}
11132
11133static void tg3_timer_start(struct tg3 *tp)
11134{
11135        tp->asf_counter   = tp->asf_multiplier;
11136        tp->timer_counter = tp->timer_multiplier;
11137
11138        tp->timer.expires = jiffies + tp->timer_offset;
11139        add_timer(&tp->timer);
11140}
11141
11142static void tg3_timer_stop(struct tg3 *tp)
11143{
11144        del_timer_sync(&tp->timer);
11145}
11146
11147/* Restart hardware after configuration changes, self-test, etc.
11148 * Invoked with tp->lock held.
11149 */
11150static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11151        __releases(tp->lock)
11152        __acquires(tp->lock)
11153{
11154        int err;
11155
11156        err = tg3_init_hw(tp, reset_phy);
11157        if (err) {
11158                netdev_err(tp->dev,
11159                           "Failed to re-initialize device, aborting\n");
11160                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11161                tg3_full_unlock(tp);
11162                tg3_timer_stop(tp);
11163                tp->irq_sync = 0;
11164                tg3_napi_enable(tp);
11165                dev_close(tp->dev);
11166                tg3_full_lock(tp, 0);
11167        }
11168        return err;
11169}
11170
11171static void tg3_reset_task(struct work_struct *work)
11172{
11173        struct tg3 *tp = container_of(work, struct tg3, reset_task);
11174        int err;
11175
11176        rtnl_lock();
11177        tg3_full_lock(tp, 0);
11178
11179        if (!netif_running(tp->dev)) {
11180                tg3_flag_clear(tp, RESET_TASK_PENDING);
11181                tg3_full_unlock(tp);
11182                rtnl_unlock();
11183                return;
11184        }
11185
11186        tg3_full_unlock(tp);
11187
11188        tg3_phy_stop(tp);
11189
11190        tg3_netif_stop(tp);
11191
11192        tg3_full_lock(tp, 1);
11193
11194        if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11195                tp->write32_tx_mbox = tg3_write32_tx_mbox;
11196                tp->write32_rx_mbox = tg3_write_flush_reg32;
11197                tg3_flag_set(tp, MBOX_WRITE_REORDER);
11198                tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11199        }
11200
11201        tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11202        err = tg3_init_hw(tp, true);
11203        if (err) {
11204                tg3_full_unlock(tp);
11205                tp->irq_sync = 0;
11206                tg3_napi_enable(tp);
11207                /* Clear this flag so that tg3_reset_task_cancel() will not
11208                 * call cancel_work_sync() and wait forever.
11209                 */
11210                tg3_flag_clear(tp, RESET_TASK_PENDING);
11211                dev_close(tp->dev);
11212                goto out;
11213        }
11214
11215        tg3_netif_start(tp);
11216
11217        tg3_full_unlock(tp);
11218
11219        if (!err)
11220                tg3_phy_start(tp);
11221
11222        tg3_flag_clear(tp, RESET_TASK_PENDING);
11223out:
11224        rtnl_unlock();
11225}
11226
11227static int tg3_request_irq(struct tg3 *tp, int irq_num)
11228{
11229        irq_handler_t fn;
11230        unsigned long flags;
11231        char *name;
11232        struct tg3_napi *tnapi = &tp->napi[irq_num];
11233
11234        if (tp->irq_cnt == 1)
11235                name = tp->dev->name;
11236        else {
11237                name = &tnapi->irq_lbl[0];
11238                if (tnapi->tx_buffers && tnapi->rx_rcb)
11239                        snprintf(name, IFNAMSIZ,
11240                                 "%s-txrx-%d", tp->dev->name, irq_num);
11241                else if (tnapi->tx_buffers)
11242                        snprintf(name, IFNAMSIZ,
11243                                 "%s-tx-%d", tp->dev->name, irq_num);
11244                else if (tnapi->rx_rcb)
11245                        snprintf(name, IFNAMSIZ,
11246                                 "%s-rx-%d", tp->dev->name, irq_num);
11247                else
11248                        snprintf(name, IFNAMSIZ,
11249                                 "%s-%d", tp->dev->name, irq_num);
11250                name[IFNAMSIZ-1] = 0;
11251        }
11252
11253        if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11254                fn = tg3_msi;
11255                if (tg3_flag(tp, 1SHOT_MSI))
11256                        fn = tg3_msi_1shot;
11257                flags = 0;
11258        } else {
11259                fn = tg3_interrupt;
11260                if (tg3_flag(tp, TAGGED_STATUS))
11261                        fn = tg3_interrupt_tagged;
11262                flags = IRQF_SHARED;
11263        }
11264
11265        return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11266}
11267
11268static int tg3_test_interrupt(struct tg3 *tp)
11269{
11270        struct tg3_napi *tnapi = &tp->napi[0];
11271        struct net_device *dev = tp->dev;
11272        int err, i, intr_ok = 0;
11273        u32 val;
11274
11275        if (!netif_running(dev))
11276                return -ENODEV;
11277
11278        tg3_disable_ints(tp);
11279
11280        free_irq(tnapi->irq_vec, tnapi);
11281
11282        /*
11283         * Turn off MSI one shot mode.  Otherwise this test has no
11284         * observable way to know whether the interrupt was delivered.
11285         */
11286        if (tg3_flag(tp, 57765_PLUS)) {
11287                val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11288                tw32(MSGINT_MODE, val);
11289        }
11290
11291        err = request_irq(tnapi->irq_vec, tg3_test_isr,
11292                          IRQF_SHARED, dev->name, tnapi);
11293        if (err)
11294                return err;
11295
11296        tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11297        tg3_enable_ints(tp);
11298
11299        tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11300               tnapi->coal_now);
11301
11302        for (i = 0; i < 5; i++) {
11303                u32 int_mbox, misc_host_ctrl;
11304
11305                int_mbox = tr32_mailbox(tnapi->int_mbox);
11306                misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11307
11308                if ((int_mbox != 0) ||
11309                    (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11310                        intr_ok = 1;
11311                        break;
11312                }
11313
11314                if (tg3_flag(tp, 57765_PLUS) &&
11315                    tnapi->hw_status->status_tag != tnapi->last_tag)
11316                        tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11317
11318                msleep(10);
11319        }
11320
11321        tg3_disable_ints(tp);
11322
11323        free_irq(tnapi->irq_vec, tnapi);
11324
11325        err = tg3_request_irq(tp, 0);
11326
11327        if (err)
11328                return err;
11329
11330        if (intr_ok) {
11331                /* Reenable MSI one shot mode. */
11332                if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11333                        val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11334                        tw32(MSGINT_MODE, val);
11335                }
11336                return 0;
11337        }
11338
11339        return -EIO;
11340}
11341
11342/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11343 * successfully restored
11344 */
11345static int tg3_test_msi(struct tg3 *tp)
11346{
11347        int err;
11348        u16 pci_cmd;
11349
11350        if (!tg3_flag(tp, USING_MSI))
11351                return 0;
11352
11353        /* Turn off SERR reporting in case MSI terminates with Master
11354         * Abort.
11355         */
11356        pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11357        pci_write_config_word(tp->pdev, PCI_COMMAND,
11358                              pci_cmd & ~PCI_COMMAND_SERR);
11359
11360        err = tg3_test_interrupt(tp);
11361
11362        pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11363
11364        if (!err)
11365                return 0;
11366
11367        /* other failures */
11368        if (err != -EIO)
11369                return err;
11370
11371        /* MSI test failed, go back to INTx mode */
11372        netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11373                    "to INTx mode. Please report this failure to the PCI "
11374                    "maintainer and include system chipset information\n");
11375
11376        free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11377
11378        pci_disable_msi(tp->pdev);
11379
11380        tg3_flag_clear(tp, USING_MSI);
11381        tp->napi[0].irq_vec = tp->pdev->irq;
11382
11383        err = tg3_request_irq(tp, 0);
11384        if (err)
11385                return err;
11386
11387        /* Need to reset the chip because the MSI cycle may have terminated
11388         * with Master Abort.
11389         */
11390        tg3_full_lock(tp, 1);
11391
11392        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11393        err = tg3_init_hw(tp, true);
11394
11395        tg3_full_unlock(tp);
11396
11397        if (err)
11398                free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11399
11400        return err;
11401}
11402
11403static int tg3_request_firmware(struct tg3 *tp)
11404{
11405        const struct tg3_firmware_hdr *fw_hdr;
11406
11407        if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11408                netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11409                           tp->fw_needed);
11410                return -ENOENT;
11411        }
11412
11413        fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11414
11415        /* Firmware blob starts with version numbers, followed by
11416         * start address and _full_ length including BSS sections
11417         * (which must be longer than the actual data, of course
11418         */
11419
11420        tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11421        if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11422                netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11423                           tp->fw_len, tp->fw_needed);
11424                release_firmware(tp->fw);
11425                tp->fw = NULL;
11426                return -EINVAL;
11427        }
11428
11429        /* We no longer need firmware; we have it. */
11430        tp->fw_needed = NULL;
11431        return 0;
11432}
11433
11434static u32 tg3_irq_count(struct tg3 *tp)
11435{
11436        u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11437
11438        if (irq_cnt > 1) {
11439                /* We want as many rx rings enabled as there are cpus.
11440                 * In multiqueue MSI-X mode, the first MSI-X vector
11441                 * only deals with link interrupts, etc, so we add
11442                 * one to the number of vectors we are requesting.
11443                 */
11444                irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11445        }
11446
11447        return irq_cnt;
11448}
11449
11450static bool tg3_enable_msix(struct tg3 *tp)
11451{
11452        int i, rc;
11453        struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11454
11455        tp->txq_cnt = tp->txq_req;
11456        tp->rxq_cnt = tp->rxq_req;
11457        if (!tp->rxq_cnt)
11458                tp->rxq_cnt = netif_get_num_default_rss_queues();
11459        if (tp->rxq_cnt > tp->rxq_max)
11460                tp->rxq_cnt = tp->rxq_max;
11461
11462        /* Disable multiple TX rings by default.  Simple round-robin hardware
11463         * scheduling of the TX rings can cause starvation of rings with
11464         * small packets when other rings have TSO or jumbo packets.
11465         */
11466        if (!tp->txq_req)
11467                tp->txq_cnt = 1;
11468
11469        tp->irq_cnt = tg3_irq_count(tp);
11470
11471        for (i = 0; i < tp->irq_max; i++) {
11472                msix_ent[i].entry  = i;
11473                msix_ent[i].vector = 0;
11474        }
11475
11476        rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11477        if (rc < 0) {
11478                return false;
11479        } else if (rc < tp->irq_cnt) {
11480                netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11481                              tp->irq_cnt, rc);
11482                tp->irq_cnt = rc;
11483                tp->rxq_cnt = max(rc - 1, 1);
11484                if (tp->txq_cnt)
11485                        tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11486        }
11487
11488        for (i = 0; i < tp->irq_max; i++)
11489                tp->napi[i].irq_vec = msix_ent[i].vector;
11490
11491        if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11492                pci_disable_msix(tp->pdev);
11493                return false;
11494        }
11495
11496        if (tp->irq_cnt == 1)
11497                return true;
11498
11499        tg3_flag_set(tp, ENABLE_RSS);
11500
11501        if (tp->txq_cnt > 1)
11502                tg3_flag_set(tp, ENABLE_TSS);
11503
11504        netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11505
11506        return true;
11507}
11508
11509static void tg3_ints_init(struct tg3 *tp)
11510{
11511        if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11512            !tg3_flag(tp, TAGGED_STATUS)) {
11513                /* All MSI supporting chips should support tagged
11514                 * status.  Assert that this is the case.
11515                 */
11516                netdev_warn(tp->dev,
11517                            "MSI without TAGGED_STATUS? Not using MSI\n");
11518                goto defcfg;
11519        }
11520
11521        if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11522                tg3_flag_set(tp, USING_MSIX);
11523        else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11524                tg3_flag_set(tp, USING_MSI);
11525
11526        if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11527                u32 msi_mode = tr32(MSGINT_MODE);
11528                if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11529                        msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11530                if (!tg3_flag(tp, 1SHOT_MSI))
11531                        msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11532                tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11533        }
11534defcfg:
11535        if (!tg3_flag(tp, USING_MSIX)) {
11536                tp->irq_cnt = 1;
11537                tp->napi[0].irq_vec = tp->pdev->irq;
11538        }
11539
11540        if (tp->irq_cnt == 1) {
11541                tp->txq_cnt = 1;
11542                tp->rxq_cnt = 1;
11543                netif_set_real_num_tx_queues(tp->dev, 1);
11544                netif_set_real_num_rx_queues(tp->dev, 1);
11545        }
11546}
11547
11548static void tg3_ints_fini(struct tg3 *tp)
11549{
11550        if (tg3_flag(tp, USING_MSIX))
11551                pci_disable_msix(tp->pdev);
11552        else if (tg3_flag(tp, USING_MSI))
11553                pci_disable_msi(tp->pdev);
11554        tg3_flag_clear(tp, USING_MSI);
11555        tg3_flag_clear(tp, USING_MSIX);
11556        tg3_flag_clear(tp, ENABLE_RSS);
11557        tg3_flag_clear(tp, ENABLE_TSS);
11558}
11559
11560static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11561                     bool init)
11562{
11563        struct net_device *dev = tp->dev;
11564        int i, err;
11565
11566        /*
11567         * Setup interrupts first so we know how
11568         * many NAPI resources to allocate
11569         */
11570        tg3_ints_init(tp);
11571
11572        tg3_rss_check_indir_tbl(tp);
11573
11574        /* The placement of this call is tied
11575         * to the setup and use of Host TX descriptors.
11576         */
11577        err = tg3_alloc_consistent(tp);
11578        if (err)
11579                goto out_ints_fini;
11580
11581        tg3_napi_init(tp);
11582
11583        tg3_napi_enable(tp);
11584
11585        for (i = 0; i < tp->irq_cnt; i++) {
11586                err = tg3_request_irq(tp, i);
11587                if (err) {
11588                        for (i--; i >= 0; i--) {
11589                                struct tg3_napi *tnapi = &tp->napi[i];
11590
11591                                free_irq(tnapi->irq_vec, tnapi);
11592                        }
11593                        goto out_napi_fini;
11594                }
11595        }
11596
11597        tg3_full_lock(tp, 0);
11598
11599        if (init)
11600                tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11601
11602        err = tg3_init_hw(tp, reset_phy);
11603        if (err) {
11604                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11605                tg3_free_rings(tp);
11606        }
11607
11608        tg3_full_unlock(tp);
11609
11610        if (err)
11611                goto out_free_irq;
11612
11613        if (test_irq && tg3_flag(tp, USING_MSI)) {
11614                err = tg3_test_msi(tp);
11615
11616                if (err) {
11617                        tg3_full_lock(tp, 0);
11618                        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11619                        tg3_free_rings(tp);
11620                        tg3_full_unlock(tp);
11621
11622                        goto out_napi_fini;
11623                }
11624
11625                if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11626                        u32 val = tr32(PCIE_TRANSACTION_CFG);
11627
11628                        tw32(PCIE_TRANSACTION_CFG,
11629                             val | PCIE_TRANS_CFG_1SHOT_MSI);
11630                }
11631        }
11632
11633        tg3_phy_start(tp);
11634
11635        tg3_hwmon_open(tp);
11636
11637        tg3_full_lock(tp, 0);
11638
11639        tg3_timer_start(tp);
11640        tg3_flag_set(tp, INIT_COMPLETE);
11641        tg3_enable_ints(tp);
11642
11643        tg3_ptp_resume(tp);
11644
11645        tg3_full_unlock(tp);
11646
11647        netif_tx_start_all_queues(dev);
11648
11649        /*
11650         * Reset loopback feature if it was turned on while the device was down
11651         * make sure that it's installed properly now.
11652         */
11653        if (dev->features & NETIF_F_LOOPBACK)
11654                tg3_set_loopback(dev, dev->features);
11655
11656        return 0;
11657
11658out_free_irq:
11659        for (i = tp->irq_cnt - 1; i >= 0; i--) {
11660                struct tg3_napi *tnapi = &tp->napi[i];
11661                free_irq(tnapi->irq_vec, tnapi);
11662        }
11663
11664out_napi_fini:
11665        tg3_napi_disable(tp);
11666        tg3_napi_fini(tp);
11667        tg3_free_consistent(tp);
11668
11669out_ints_fini:
11670        tg3_ints_fini(tp);
11671
11672        return err;
11673}
11674
11675static void tg3_stop(struct tg3 *tp)
11676{
11677        int i;
11678
11679        tg3_reset_task_cancel(tp);
11680        tg3_netif_stop(tp);
11681
11682        tg3_timer_stop(tp);
11683
11684        tg3_hwmon_close(tp);
11685
11686        tg3_phy_stop(tp);
11687
11688        tg3_full_lock(tp, 1);
11689
11690        tg3_disable_ints(tp);
11691
11692        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11693        tg3_free_rings(tp);
11694        tg3_flag_clear(tp, INIT_COMPLETE);
11695
11696        tg3_full_unlock(tp);
11697
11698        for (i = tp->irq_cnt - 1; i >= 0; i--) {
11699                struct tg3_napi *tnapi = &tp->napi[i];
11700                free_irq(tnapi->irq_vec, tnapi);
11701        }
11702
11703        tg3_ints_fini(tp);
11704
11705        tg3_napi_fini(tp);
11706
11707        tg3_free_consistent(tp);
11708}
11709
11710static int tg3_open(struct net_device *dev)
11711{
11712        struct tg3 *tp = netdev_priv(dev);
11713        int err;
11714
11715        if (tp->pcierr_recovery) {
11716                netdev_err(dev, "Failed to open device. PCI error recovery "
11717                           "in progress\n");
11718                return -EAGAIN;
11719        }
11720
11721        if (tp->fw_needed) {
11722                err = tg3_request_firmware(tp);
11723                if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11724                        if (err) {
11725                                netdev_warn(tp->dev, "EEE capability disabled\n");
11726                                tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11727                        } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11728                                netdev_warn(tp->dev, "EEE capability restored\n");
11729                                tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11730                        }
11731                } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11732                        if (err)
11733                                return err;
11734                } else if (err) {
11735                        netdev_warn(tp->dev, "TSO capability disabled\n");
11736                        tg3_flag_clear(tp, TSO_CAPABLE);
11737                } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11738                        netdev_notice(tp->dev, "TSO capability restored\n");
11739                        tg3_flag_set(tp, TSO_CAPABLE);
11740                }
11741        }
11742
11743        tg3_carrier_off(tp);
11744
11745        err = tg3_power_up(tp);
11746        if (err)
11747                return err;
11748
11749        tg3_full_lock(tp, 0);
11750
11751        tg3_disable_ints(tp);
11752        tg3_flag_clear(tp, INIT_COMPLETE);
11753
11754        tg3_full_unlock(tp);
11755
11756        err = tg3_start(tp,
11757                        !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11758                        true, true);
11759        if (err) {
11760                tg3_frob_aux_power(tp, false);
11761                pci_set_power_state(tp->pdev, PCI_D3hot);
11762        }
11763
11764        return err;
11765}
11766
11767static int tg3_close(struct net_device *dev)
11768{
11769        struct tg3 *tp = netdev_priv(dev);
11770
11771        if (tp->pcierr_recovery) {
11772                netdev_err(dev, "Failed to close device. PCI error recovery "
11773                           "in progress\n");
11774                return -EAGAIN;
11775        }
11776
11777        tg3_stop(tp);
11778
11779        if (pci_device_is_present(tp->pdev)) {
11780                tg3_power_down_prepare(tp);
11781
11782                tg3_carrier_off(tp);
11783        }
11784        return 0;
11785}
11786
11787static inline u64 get_stat64(tg3_stat64_t *val)
11788{
11789       return ((u64)val->high << 32) | ((u64)val->low);
11790}
11791
11792static u64 tg3_calc_crc_errors(struct tg3 *tp)
11793{
11794        struct tg3_hw_stats *hw_stats = tp->hw_stats;
11795
11796        if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11797            (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11798             tg3_asic_rev(tp) == ASIC_REV_5701)) {
11799                u32 val;
11800
11801                if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11802                        tg3_writephy(tp, MII_TG3_TEST1,
11803                                     val | MII_TG3_TEST1_CRC_EN);
11804                        tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11805                } else
11806                        val = 0;
11807
11808                tp->phy_crc_errors += val;
11809
11810                return tp->phy_crc_errors;
11811        }
11812
11813        return get_stat64(&hw_stats->rx_fcs_errors);
11814}
11815
11816#define ESTAT_ADD(member) \
11817        estats->member =        old_estats->member + \
11818                                get_stat64(&hw_stats->member)
11819
11820static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11821{
11822        struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11823        struct tg3_hw_stats *hw_stats = tp->hw_stats;
11824
11825        ESTAT_ADD(rx_octets);
11826        ESTAT_ADD(rx_fragments);
11827        ESTAT_ADD(rx_ucast_packets);
11828        ESTAT_ADD(rx_mcast_packets);
11829        ESTAT_ADD(rx_bcast_packets);
11830        ESTAT_ADD(rx_fcs_errors);
11831        ESTAT_ADD(rx_align_errors);
11832        ESTAT_ADD(rx_xon_pause_rcvd);
11833        ESTAT_ADD(rx_xoff_pause_rcvd);
11834        ESTAT_ADD(rx_mac_ctrl_rcvd);
11835        ESTAT_ADD(rx_xoff_entered);
11836        ESTAT_ADD(rx_frame_too_long_errors);
11837        ESTAT_ADD(rx_jabbers);
11838        ESTAT_ADD(rx_undersize_packets);
11839        ESTAT_ADD(rx_in_length_errors);
11840        ESTAT_ADD(rx_out_length_errors);
11841        ESTAT_ADD(rx_64_or_less_octet_packets);
11842        ESTAT_ADD(rx_65_to_127_octet_packets);
11843        ESTAT_ADD(rx_128_to_255_octet_packets);
11844        ESTAT_ADD(rx_256_to_511_octet_packets);
11845        ESTAT_ADD(rx_512_to_1023_octet_packets);
11846        ESTAT_ADD(rx_1024_to_1522_octet_packets);
11847        ESTAT_ADD(rx_1523_to_2047_octet_packets);
11848        ESTAT_ADD(rx_2048_to_4095_octet_packets);
11849        ESTAT_ADD(rx_4096_to_8191_octet_packets);
11850        ESTAT_ADD(rx_8192_to_9022_octet_packets);
11851
11852        ESTAT_ADD(tx_octets);
11853        ESTAT_ADD(tx_collisions);
11854        ESTAT_ADD(tx_xon_sent);
11855        ESTAT_ADD(tx_xoff_sent);
11856        ESTAT_ADD(tx_flow_control);
11857        ESTAT_ADD(tx_mac_errors);
11858        ESTAT_ADD(tx_single_collisions);
11859        ESTAT_ADD(tx_mult_collisions);
11860        ESTAT_ADD(tx_deferred);
11861        ESTAT_ADD(tx_excessive_collisions);
11862        ESTAT_ADD(tx_late_collisions);
11863        ESTAT_ADD(tx_collide_2times);
11864        ESTAT_ADD(tx_collide_3times);
11865        ESTAT_ADD(tx_collide_4times);
11866        ESTAT_ADD(tx_collide_5times);
11867        ESTAT_ADD(tx_collide_6times);
11868        ESTAT_ADD(tx_collide_7times);
11869        ESTAT_ADD(tx_collide_8times);
11870        ESTAT_ADD(tx_collide_9times);
11871        ESTAT_ADD(tx_collide_10times);
11872        ESTAT_ADD(tx_collide_11times);
11873        ESTAT_ADD(tx_collide_12times);
11874        ESTAT_ADD(tx_collide_13times);
11875        ESTAT_ADD(tx_collide_14times);
11876        ESTAT_ADD(tx_collide_15times);
11877        ESTAT_ADD(tx_ucast_packets);
11878        ESTAT_ADD(tx_mcast_packets);
11879        ESTAT_ADD(tx_bcast_packets);
11880        ESTAT_ADD(tx_carrier_sense_errors);
11881        ESTAT_ADD(tx_discards);
11882        ESTAT_ADD(tx_errors);
11883
11884        ESTAT_ADD(dma_writeq_full);
11885        ESTAT_ADD(dma_write_prioq_full);
11886        ESTAT_ADD(rxbds_empty);
11887        ESTAT_ADD(rx_discards);
11888        ESTAT_ADD(rx_errors);
11889        ESTAT_ADD(rx_threshold_hit);
11890
11891        ESTAT_ADD(dma_readq_full);
11892        ESTAT_ADD(dma_read_prioq_full);
11893        ESTAT_ADD(tx_comp_queue_full);
11894
11895        ESTAT_ADD(ring_set_send_prod_index);
11896        ESTAT_ADD(ring_status_update);
11897        ESTAT_ADD(nic_irqs);
11898        ESTAT_ADD(nic_avoided_irqs);
11899        ESTAT_ADD(nic_tx_threshold_hit);
11900
11901        ESTAT_ADD(mbuf_lwm_thresh_hit);
11902}
11903
11904static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11905{
11906        struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11907        struct tg3_hw_stats *hw_stats = tp->hw_stats;
11908
11909        stats->rx_packets = old_stats->rx_packets +
11910                get_stat64(&hw_stats->rx_ucast_packets) +
11911                get_stat64(&hw_stats->rx_mcast_packets) +
11912                get_stat64(&hw_stats->rx_bcast_packets);
11913
11914        stats->tx_packets = old_stats->tx_packets +
11915                get_stat64(&hw_stats->tx_ucast_packets) +
11916                get_stat64(&hw_stats->tx_mcast_packets) +
11917                get_stat64(&hw_stats->tx_bcast_packets);
11918
11919        stats->rx_bytes = old_stats->rx_bytes +
11920                get_stat64(&hw_stats->rx_octets);
11921        stats->tx_bytes = old_stats->tx_bytes +
11922                get_stat64(&hw_stats->tx_octets);
11923
11924        stats->rx_errors = old_stats->rx_errors +
11925                get_stat64(&hw_stats->rx_errors);
11926        stats->tx_errors = old_stats->tx_errors +
11927                get_stat64(&hw_stats->tx_errors) +
11928                get_stat64(&hw_stats->tx_mac_errors) +
11929                get_stat64(&hw_stats->tx_carrier_sense_errors) +
11930                get_stat64(&hw_stats->tx_discards);
11931
11932        stats->multicast = old_stats->multicast +
11933                get_stat64(&hw_stats->rx_mcast_packets);
11934        stats->collisions = old_stats->collisions +
11935                get_stat64(&hw_stats->tx_collisions);
11936
11937        stats->rx_length_errors = old_stats->rx_length_errors +
11938                get_stat64(&hw_stats->rx_frame_too_long_errors) +
11939                get_stat64(&hw_stats->rx_undersize_packets);
11940
11941        stats->rx_frame_errors = old_stats->rx_frame_errors +
11942                get_stat64(&hw_stats->rx_align_errors);
11943        stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11944                get_stat64(&hw_stats->tx_discards);
11945        stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11946                get_stat64(&hw_stats->tx_carrier_sense_errors);
11947
11948        stats->rx_crc_errors = old_stats->rx_crc_errors +
11949                tg3_calc_crc_errors(tp);
11950
11951        stats->rx_missed_errors = old_stats->rx_missed_errors +
11952                get_stat64(&hw_stats->rx_discards);
11953
11954        stats->rx_dropped = tp->rx_dropped;
11955        stats->tx_dropped = tp->tx_dropped;
11956}
11957
11958static int tg3_get_regs_len(struct net_device *dev)
11959{
11960        return TG3_REG_BLK_SIZE;
11961}
11962
11963static void tg3_get_regs(struct net_device *dev,
11964                struct ethtool_regs *regs, void *_p)
11965{
11966        struct tg3 *tp = netdev_priv(dev);
11967
11968        regs->version = 0;
11969
11970        memset(_p, 0, TG3_REG_BLK_SIZE);
11971
11972        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11973                return;
11974
11975        tg3_full_lock(tp, 0);
11976
11977        tg3_dump_legacy_regs(tp, (u32 *)_p);
11978
11979        tg3_full_unlock(tp);
11980}
11981
11982static int tg3_get_eeprom_len(struct net_device *dev)
11983{
11984        struct tg3 *tp = netdev_priv(dev);
11985
11986        return tp->nvram_size;
11987}
11988
11989static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11990{
11991        struct tg3 *tp = netdev_priv(dev);
11992        int ret, cpmu_restore = 0;
11993        u8  *pd;
11994        u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
11995        __be32 val;
11996
11997        if (tg3_flag(tp, NO_NVRAM))
11998                return -EINVAL;
11999
12000        offset = eeprom->offset;
12001        len = eeprom->len;
12002        eeprom->len = 0;
12003
12004        eeprom->magic = TG3_EEPROM_MAGIC;
12005
12006        /* Override clock, link aware and link idle modes */
12007        if (tg3_flag(tp, CPMU_PRESENT)) {
12008                cpmu_val = tr32(TG3_CPMU_CTRL);
12009                if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
12010                                CPMU_CTRL_LINK_IDLE_MODE)) {
12011                        tw32(TG3_CPMU_CTRL, cpmu_val &
12012                                            ~(CPMU_CTRL_LINK_AWARE_MODE |
12013                                             CPMU_CTRL_LINK_IDLE_MODE));
12014                        cpmu_restore = 1;
12015                }
12016        }
12017        tg3_override_clk(tp);
12018
12019        if (offset & 3) {
12020                /* adjustments to start on required 4 byte boundary */
12021                b_offset = offset & 3;
12022                b_count = 4 - b_offset;
12023                if (b_count > len) {
12024                        /* i.e. offset=1 len=2 */
12025                        b_count = len;
12026                }
12027                ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
12028                if (ret)
12029                        goto eeprom_done;
12030                memcpy(data, ((char *)&val) + b_offset, b_count);
12031                len -= b_count;
12032                offset += b_count;
12033                eeprom->len += b_count;
12034        }
12035
12036        /* read bytes up to the last 4 byte boundary */
12037        pd = &data[eeprom->len];
12038        for (i = 0; i < (len - (len & 3)); i += 4) {
12039                ret = tg3_nvram_read_be32(tp, offset + i, &val);
12040                if (ret) {
12041                        if (i)
12042                                i -= 4;
12043                        eeprom->len += i;
12044                        goto eeprom_done;
12045                }
12046                memcpy(pd + i, &val, 4);
12047                if (need_resched()) {
12048                        if (signal_pending(current)) {
12049                                eeprom->len += i;
12050                                ret = -EINTR;
12051                                goto eeprom_done;
12052                        }
12053                        cond_resched();
12054                }
12055        }
12056        eeprom->len += i;
12057
12058        if (len & 3) {
12059                /* read last bytes not ending on 4 byte boundary */
12060                pd = &data[eeprom->len];
12061                b_count = len & 3;
12062                b_offset = offset + len - b_count;
12063                ret = tg3_nvram_read_be32(tp, b_offset, &val);
12064                if (ret)
12065                        goto eeprom_done;
12066                memcpy(pd, &val, b_count);
12067                eeprom->len += b_count;
12068        }
12069        ret = 0;
12070
12071eeprom_done:
12072        /* Restore clock, link aware and link idle modes */
12073        tg3_restore_clk(tp);
12074        if (cpmu_restore)
12075                tw32(TG3_CPMU_CTRL, cpmu_val);
12076
12077        return ret;
12078}
12079
12080static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12081{
12082        struct tg3 *tp = netdev_priv(dev);
12083        int ret;
12084        u32 offset, len, b_offset, odd_len;
12085        u8 *buf;
12086        __be32 start = 0, end;
12087
12088        if (tg3_flag(tp, NO_NVRAM) ||
12089            eeprom->magic != TG3_EEPROM_MAGIC)
12090                return -EINVAL;
12091
12092        offset = eeprom->offset;
12093        len = eeprom->len;
12094
12095        if ((b_offset = (offset & 3))) {
12096                /* adjustments to start on required 4 byte boundary */
12097                ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12098                if (ret)
12099                        return ret;
12100                len += b_offset;
12101                offset &= ~3;
12102                if (len < 4)
12103                        len = 4;
12104        }
12105
12106        odd_len = 0;
12107        if (len & 3) {
12108                /* adjustments to end on required 4 byte boundary */
12109                odd_len = 1;
12110                len = (len + 3) & ~3;
12111                ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12112                if (ret)
12113                        return ret;
12114        }
12115
12116        buf = data;
12117        if (b_offset || odd_len) {
12118                buf = kmalloc(len, GFP_KERNEL);
12119                if (!buf)
12120                        return -ENOMEM;
12121                if (b_offset)
12122                        memcpy(buf, &start, 4);
12123                if (odd_len)
12124                        memcpy(buf+len-4, &end, 4);
12125                memcpy(buf + b_offset, data, eeprom->len);
12126        }
12127
12128        ret = tg3_nvram_write_block(tp, offset, len, buf);
12129
12130        if (buf != data)
12131                kfree(buf);
12132
12133        return ret;
12134}
12135
12136static int tg3_get_link_ksettings(struct net_device *dev,
12137                                  struct ethtool_link_ksettings *cmd)
12138{
12139        struct tg3 *tp = netdev_priv(dev);
12140        u32 supported, advertising;
12141
12142        if (tg3_flag(tp, USE_PHYLIB)) {
12143                struct phy_device *phydev;
12144                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12145                        return -EAGAIN;
12146                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12147                phy_ethtool_ksettings_get(phydev, cmd);
12148
12149                return 0;
12150        }
12151
12152        supported = (SUPPORTED_Autoneg);
12153
12154        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12155                supported |= (SUPPORTED_1000baseT_Half |
12156                              SUPPORTED_1000baseT_Full);
12157
12158        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12159                supported |= (SUPPORTED_100baseT_Half |
12160                              SUPPORTED_100baseT_Full |
12161                              SUPPORTED_10baseT_Half |
12162                              SUPPORTED_10baseT_Full |
12163                              SUPPORTED_TP);
12164                cmd->base.port = PORT_TP;
12165        } else {
12166                supported |= SUPPORTED_FIBRE;
12167                cmd->base.port = PORT_FIBRE;
12168        }
12169        ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12170                                                supported);
12171
12172        advertising = tp->link_config.advertising;
12173        if (tg3_flag(tp, PAUSE_AUTONEG)) {
12174                if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12175                        if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12176                                advertising |= ADVERTISED_Pause;
12177                        } else {
12178                                advertising |= ADVERTISED_Pause |
12179                                        ADVERTISED_Asym_Pause;
12180                        }
12181                } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12182                        advertising |= ADVERTISED_Asym_Pause;
12183                }
12184        }
12185        ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12186                                                advertising);
12187
12188        if (netif_running(dev) && tp->link_up) {
12189                cmd->base.speed = tp->link_config.active_speed;
12190                cmd->base.duplex = tp->link_config.active_duplex;
12191                ethtool_convert_legacy_u32_to_link_mode(
12192                        cmd->link_modes.lp_advertising,
12193                        tp->link_config.rmt_adv);
12194
12195                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12196                        if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12197                                cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12198                        else
12199                                cmd->base.eth_tp_mdix = ETH_TP_MDI;
12200                }
12201        } else {
12202                cmd->base.speed = SPEED_UNKNOWN;
12203                cmd->base.duplex = DUPLEX_UNKNOWN;
12204                cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12205        }
12206        cmd->base.phy_address = tp->phy_addr;
12207        cmd->base.autoneg = tp->link_config.autoneg;
12208        return 0;
12209}
12210
12211static int tg3_set_link_ksettings(struct net_device *dev,
12212                                  const struct ethtool_link_ksettings *cmd)
12213{
12214        struct tg3 *tp = netdev_priv(dev);
12215        u32 speed = cmd->base.speed;
12216        u32 advertising;
12217
12218        if (tg3_flag(tp, USE_PHYLIB)) {
12219                struct phy_device *phydev;
12220                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12221                        return -EAGAIN;
12222                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12223                return phy_ethtool_ksettings_set(phydev, cmd);
12224        }
12225
12226        if (cmd->base.autoneg != AUTONEG_ENABLE &&
12227            cmd->base.autoneg != AUTONEG_DISABLE)
12228                return -EINVAL;
12229
12230        if (cmd->base.autoneg == AUTONEG_DISABLE &&
12231            cmd->base.duplex != DUPLEX_FULL &&
12232            cmd->base.duplex != DUPLEX_HALF)
12233                return -EINVAL;
12234
12235        ethtool_convert_link_mode_to_legacy_u32(&advertising,
12236                                                cmd->link_modes.advertising);
12237
12238        if (cmd->base.autoneg == AUTONEG_ENABLE) {
12239                u32 mask = ADVERTISED_Autoneg |
12240                           ADVERTISED_Pause |
12241                           ADVERTISED_Asym_Pause;
12242
12243                if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12244                        mask |= ADVERTISED_1000baseT_Half |
12245                                ADVERTISED_1000baseT_Full;
12246
12247                if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12248                        mask |= ADVERTISED_100baseT_Half |
12249                                ADVERTISED_100baseT_Full |
12250                                ADVERTISED_10baseT_Half |
12251                                ADVERTISED_10baseT_Full |
12252                                ADVERTISED_TP;
12253                else
12254                        mask |= ADVERTISED_FIBRE;
12255
12256                if (advertising & ~mask)
12257                        return -EINVAL;
12258
12259                mask &= (ADVERTISED_1000baseT_Half |
12260                         ADVERTISED_1000baseT_Full |
12261                         ADVERTISED_100baseT_Half |
12262                         ADVERTISED_100baseT_Full |
12263                         ADVERTISED_10baseT_Half |
12264                         ADVERTISED_10baseT_Full);
12265
12266                advertising &= mask;
12267        } else {
12268                if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12269                        if (speed != SPEED_1000)
12270                                return -EINVAL;
12271
12272                        if (cmd->base.duplex != DUPLEX_FULL)
12273                                return -EINVAL;
12274                } else {
12275                        if (speed != SPEED_100 &&
12276                            speed != SPEED_10)
12277                                return -EINVAL;
12278                }
12279        }
12280
12281        tg3_full_lock(tp, 0);
12282
12283        tp->link_config.autoneg = cmd->base.autoneg;
12284        if (cmd->base.autoneg == AUTONEG_ENABLE) {
12285                tp->link_config.advertising = (advertising |
12286                                              ADVERTISED_Autoneg);
12287                tp->link_config.speed = SPEED_UNKNOWN;
12288                tp->link_config.duplex = DUPLEX_UNKNOWN;
12289        } else {
12290                tp->link_config.advertising = 0;
12291                tp->link_config.speed = speed;
12292                tp->link_config.duplex = cmd->base.duplex;
12293        }
12294
12295        tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12296
12297        tg3_warn_mgmt_link_flap(tp);
12298
12299        if (netif_running(dev))
12300                tg3_setup_phy(tp, true);
12301
12302        tg3_full_unlock(tp);
12303
12304        return 0;
12305}
12306
12307static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12308{
12309        struct tg3 *tp = netdev_priv(dev);
12310
12311        strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12312        strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12313        strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12314}
12315
12316static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12317{
12318        struct tg3 *tp = netdev_priv(dev);
12319
12320        if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12321                wol->supported = WAKE_MAGIC;
12322        else
12323                wol->supported = 0;
12324        wol->wolopts = 0;
12325        if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12326                wol->wolopts = WAKE_MAGIC;
12327        memset(&wol->sopass, 0, sizeof(wol->sopass));
12328}
12329
12330static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12331{
12332        struct tg3 *tp = netdev_priv(dev);
12333        struct device *dp = &tp->pdev->dev;
12334
12335        if (wol->wolopts & ~WAKE_MAGIC)
12336                return -EINVAL;
12337        if ((wol->wolopts & WAKE_MAGIC) &&
12338            !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12339                return -EINVAL;
12340
12341        device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12342
12343        if (device_may_wakeup(dp))
12344                tg3_flag_set(tp, WOL_ENABLE);
12345        else
12346                tg3_flag_clear(tp, WOL_ENABLE);
12347
12348        return 0;
12349}
12350
12351static u32 tg3_get_msglevel(struct net_device *dev)
12352{
12353        struct tg3 *tp = netdev_priv(dev);
12354        return tp->msg_enable;
12355}
12356
12357static void tg3_set_msglevel(struct net_device *dev, u32 value)
12358{
12359        struct tg3 *tp = netdev_priv(dev);
12360        tp->msg_enable = value;
12361}
12362
12363static int tg3_nway_reset(struct net_device *dev)
12364{
12365        struct tg3 *tp = netdev_priv(dev);
12366        int r;
12367
12368        if (!netif_running(dev))
12369                return -EAGAIN;
12370
12371        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12372                return -EINVAL;
12373
12374        tg3_warn_mgmt_link_flap(tp);
12375
12376        if (tg3_flag(tp, USE_PHYLIB)) {
12377                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12378                        return -EAGAIN;
12379                r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12380        } else {
12381                u32 bmcr;
12382
12383                spin_lock_bh(&tp->lock);
12384                r = -EINVAL;
12385                tg3_readphy(tp, MII_BMCR, &bmcr);
12386                if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12387                    ((bmcr & BMCR_ANENABLE) ||
12388                     (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12389                        tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12390                                                   BMCR_ANENABLE);
12391                        r = 0;
12392                }
12393                spin_unlock_bh(&tp->lock);
12394        }
12395
12396        return r;
12397}
12398
12399static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12400{
12401        struct tg3 *tp = netdev_priv(dev);
12402
12403        ering->rx_max_pending = tp->rx_std_ring_mask;
12404        if (tg3_flag(tp, JUMBO_RING_ENABLE))
12405                ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12406        else
12407                ering->rx_jumbo_max_pending = 0;
12408
12409        ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12410
12411        ering->rx_pending = tp->rx_pending;
12412        if (tg3_flag(tp, JUMBO_RING_ENABLE))
12413                ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12414        else
12415                ering->rx_jumbo_pending = 0;
12416
12417        ering->tx_pending = tp->napi[0].tx_pending;
12418}
12419
12420static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12421{
12422        struct tg3 *tp = netdev_priv(dev);
12423        int i, irq_sync = 0, err = 0;
12424        bool reset_phy = false;
12425
12426        if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12427            (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12428            (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12429            (ering->tx_pending <= MAX_SKB_FRAGS) ||
12430            (tg3_flag(tp, TSO_BUG) &&
12431             (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12432                return -EINVAL;
12433
12434        if (netif_running(dev)) {
12435                tg3_phy_stop(tp);
12436                tg3_netif_stop(tp);
12437                irq_sync = 1;
12438        }
12439
12440        tg3_full_lock(tp, irq_sync);
12441
12442        tp->rx_pending = ering->rx_pending;
12443
12444        if (tg3_flag(tp, MAX_RXPEND_64) &&
12445            tp->rx_pending > 63)
12446                tp->rx_pending = 63;
12447
12448        if (tg3_flag(tp, JUMBO_RING_ENABLE))
12449                tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12450
12451        for (i = 0; i < tp->irq_max; i++)
12452                tp->napi[i].tx_pending = ering->tx_pending;
12453
12454        if (netif_running(dev)) {
12455                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12456                /* Reset PHY to avoid PHY lock up */
12457                if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12458                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
12459                    tg3_asic_rev(tp) == ASIC_REV_5720)
12460                        reset_phy = true;
12461
12462                err = tg3_restart_hw(tp, reset_phy);
12463                if (!err)
12464                        tg3_netif_start(tp);
12465        }
12466
12467        tg3_full_unlock(tp);
12468
12469        if (irq_sync && !err)
12470                tg3_phy_start(tp);
12471
12472        return err;
12473}
12474
12475static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12476{
12477        struct tg3 *tp = netdev_priv(dev);
12478
12479        epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12480
12481        if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12482                epause->rx_pause = 1;
12483        else
12484                epause->rx_pause = 0;
12485
12486        if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12487                epause->tx_pause = 1;
12488        else
12489                epause->tx_pause = 0;
12490}
12491
12492static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12493{
12494        struct tg3 *tp = netdev_priv(dev);
12495        int err = 0;
12496        bool reset_phy = false;
12497
12498        if (tp->link_config.autoneg == AUTONEG_ENABLE)
12499                tg3_warn_mgmt_link_flap(tp);
12500
12501        if (tg3_flag(tp, USE_PHYLIB)) {
12502                struct phy_device *phydev;
12503
12504                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12505
12506                if (!phy_validate_pause(phydev, epause))
12507                        return -EINVAL;
12508
12509                tp->link_config.flowctrl = 0;
12510                phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause);
12511                if (epause->rx_pause) {
12512                        tp->link_config.flowctrl |= FLOW_CTRL_RX;
12513
12514                        if (epause->tx_pause) {
12515                                tp->link_config.flowctrl |= FLOW_CTRL_TX;
12516                        }
12517                } else if (epause->tx_pause) {
12518                        tp->link_config.flowctrl |= FLOW_CTRL_TX;
12519                }
12520
12521                if (epause->autoneg)
12522                        tg3_flag_set(tp, PAUSE_AUTONEG);
12523                else
12524                        tg3_flag_clear(tp, PAUSE_AUTONEG);
12525
12526                if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12527                        if (phydev->autoneg) {
12528                                /* phy_set_asym_pause() will
12529                                 * renegotiate the link to inform our
12530                                 * link partner of our flow control
12531                                 * settings, even if the flow control
12532                                 * is forced.  Let tg3_adjust_link()
12533                                 * do the final flow control setup.
12534                                 */
12535                                return 0;
12536                        }
12537
12538                        if (!epause->autoneg)
12539                                tg3_setup_flow_control(tp, 0, 0);
12540                }
12541        } else {
12542                int irq_sync = 0;
12543
12544                if (netif_running(dev)) {
12545                        tg3_netif_stop(tp);
12546                        irq_sync = 1;
12547                }
12548
12549                tg3_full_lock(tp, irq_sync);
12550
12551                if (epause->autoneg)
12552                        tg3_flag_set(tp, PAUSE_AUTONEG);
12553                else
12554                        tg3_flag_clear(tp, PAUSE_AUTONEG);
12555                if (epause->rx_pause)
12556                        tp->link_config.flowctrl |= FLOW_CTRL_RX;
12557                else
12558                        tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12559                if (epause->tx_pause)
12560                        tp->link_config.flowctrl |= FLOW_CTRL_TX;
12561                else
12562                        tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12563
12564                if (netif_running(dev)) {
12565                        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12566                        /* Reset PHY to avoid PHY lock up */
12567                        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12568                            tg3_asic_rev(tp) == ASIC_REV_5719 ||
12569                            tg3_asic_rev(tp) == ASIC_REV_5720)
12570                                reset_phy = true;
12571
12572                        err = tg3_restart_hw(tp, reset_phy);
12573                        if (!err)
12574                                tg3_netif_start(tp);
12575                }
12576
12577                tg3_full_unlock(tp);
12578        }
12579
12580        tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12581
12582        return err;
12583}
12584
12585static int tg3_get_sset_count(struct net_device *dev, int sset)
12586{
12587        switch (sset) {
12588        case ETH_SS_TEST:
12589                return TG3_NUM_TEST;
12590        case ETH_SS_STATS:
12591                return TG3_NUM_STATS;
12592        default:
12593                return -EOPNOTSUPP;
12594        }
12595}
12596
12597static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12598                         u32 *rules __always_unused)
12599{
12600        struct tg3 *tp = netdev_priv(dev);
12601
12602        if (!tg3_flag(tp, SUPPORT_MSIX))
12603                return -EOPNOTSUPP;
12604
12605        switch (info->cmd) {
12606        case ETHTOOL_GRXRINGS:
12607                if (netif_running(tp->dev))
12608                        info->data = tp->rxq_cnt;
12609                else {
12610                        info->data = num_online_cpus();
12611                        if (info->data > TG3_RSS_MAX_NUM_QS)
12612                                info->data = TG3_RSS_MAX_NUM_QS;
12613                }
12614
12615                return 0;
12616
12617        default:
12618                return -EOPNOTSUPP;
12619        }
12620}
12621
12622static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12623{
12624        u32 size = 0;
12625        struct tg3 *tp = netdev_priv(dev);
12626
12627        if (tg3_flag(tp, SUPPORT_MSIX))
12628                size = TG3_RSS_INDIR_TBL_SIZE;
12629
12630        return size;
12631}
12632
12633static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12634{
12635        struct tg3 *tp = netdev_priv(dev);
12636        int i;
12637
12638        if (hfunc)
12639                *hfunc = ETH_RSS_HASH_TOP;
12640        if (!indir)
12641                return 0;
12642
12643        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12644                indir[i] = tp->rss_ind_tbl[i];
12645
12646        return 0;
12647}
12648
12649static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12650                        const u8 hfunc)
12651{
12652        struct tg3 *tp = netdev_priv(dev);
12653        size_t i;
12654
12655        /* We require at least one supported parameter to be changed and no
12656         * change in any of the unsupported parameters
12657         */
12658        if (key ||
12659            (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12660                return -EOPNOTSUPP;
12661
12662        if (!indir)
12663                return 0;
12664
12665        for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12666                tp->rss_ind_tbl[i] = indir[i];
12667
12668        if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12669                return 0;
12670
12671        /* It is legal to write the indirection
12672         * table while the device is running.
12673         */
12674        tg3_full_lock(tp, 0);
12675        tg3_rss_write_indir_tbl(tp);
12676        tg3_full_unlock(tp);
12677
12678        return 0;
12679}
12680
12681static void tg3_get_channels(struct net_device *dev,
12682                             struct ethtool_channels *channel)
12683{
12684        struct tg3 *tp = netdev_priv(dev);
12685        u32 deflt_qs = netif_get_num_default_rss_queues();
12686
12687        channel->max_rx = tp->rxq_max;
12688        channel->max_tx = tp->txq_max;
12689
12690        if (netif_running(dev)) {
12691                channel->rx_count = tp->rxq_cnt;
12692                channel->tx_count = tp->txq_cnt;
12693        } else {
12694                if (tp->rxq_req)
12695                        channel->rx_count = tp->rxq_req;
12696                else
12697                        channel->rx_count = min(deflt_qs, tp->rxq_max);
12698
12699                if (tp->txq_req)
12700                        channel->tx_count = tp->txq_req;
12701                else
12702                        channel->tx_count = min(deflt_qs, tp->txq_max);
12703        }
12704}
12705
12706static int tg3_set_channels(struct net_device *dev,
12707                            struct ethtool_channels *channel)
12708{
12709        struct tg3 *tp = netdev_priv(dev);
12710
12711        if (!tg3_flag(tp, SUPPORT_MSIX))
12712                return -EOPNOTSUPP;
12713
12714        if (channel->rx_count > tp->rxq_max ||
12715            channel->tx_count > tp->txq_max)
12716                return -EINVAL;
12717
12718        tp->rxq_req = channel->rx_count;
12719        tp->txq_req = channel->tx_count;
12720
12721        if (!netif_running(dev))
12722                return 0;
12723
12724        tg3_stop(tp);
12725
12726        tg3_carrier_off(tp);
12727
12728        tg3_start(tp, true, false, false);
12729
12730        return 0;
12731}
12732
12733static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12734{
12735        switch (stringset) {
12736        case ETH_SS_STATS:
12737                memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12738                break;
12739        case ETH_SS_TEST:
12740                memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12741                break;
12742        default:
12743                WARN_ON(1);     /* we need a WARN() */
12744                break;
12745        }
12746}
12747
12748static int tg3_set_phys_id(struct net_device *dev,
12749                            enum ethtool_phys_id_state state)
12750{
12751        struct tg3 *tp = netdev_priv(dev);
12752
12753        switch (state) {
12754        case ETHTOOL_ID_ACTIVE:
12755                return 1;       /* cycle on/off once per second */
12756
12757        case ETHTOOL_ID_ON:
12758                tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12759                     LED_CTRL_1000MBPS_ON |
12760                     LED_CTRL_100MBPS_ON |
12761                     LED_CTRL_10MBPS_ON |
12762                     LED_CTRL_TRAFFIC_OVERRIDE |
12763                     LED_CTRL_TRAFFIC_BLINK |
12764                     LED_CTRL_TRAFFIC_LED);
12765                break;
12766
12767        case ETHTOOL_ID_OFF:
12768                tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12769                     LED_CTRL_TRAFFIC_OVERRIDE);
12770                break;
12771
12772        case ETHTOOL_ID_INACTIVE:
12773                tw32(MAC_LED_CTRL, tp->led_ctrl);
12774                break;
12775        }
12776
12777        return 0;
12778}
12779
12780static void tg3_get_ethtool_stats(struct net_device *dev,
12781                                   struct ethtool_stats *estats, u64 *tmp_stats)
12782{
12783        struct tg3 *tp = netdev_priv(dev);
12784
12785        if (tp->hw_stats)
12786                tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12787        else
12788                memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12789}
12790
12791static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen)
12792{
12793        int i;
12794        __be32 *buf;
12795        u32 offset = 0, len = 0;
12796        u32 magic, val;
12797
12798        if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12799                return NULL;
12800
12801        if (magic == TG3_EEPROM_MAGIC) {
12802                for (offset = TG3_NVM_DIR_START;
12803                     offset < TG3_NVM_DIR_END;
12804                     offset += TG3_NVM_DIRENT_SIZE) {
12805                        if (tg3_nvram_read(tp, offset, &val))
12806                                return NULL;
12807
12808                        if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12809                            TG3_NVM_DIRTYPE_EXTVPD)
12810                                break;
12811                }
12812
12813                if (offset != TG3_NVM_DIR_END) {
12814                        len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12815                        if (tg3_nvram_read(tp, offset + 4, &offset))
12816                                return NULL;
12817
12818                        offset = tg3_nvram_logical_addr(tp, offset);
12819                }
12820
12821                if (!offset || !len) {
12822                        offset = TG3_NVM_VPD_OFF;
12823                        len = TG3_NVM_VPD_LEN;
12824                }
12825
12826                buf = kmalloc(len, GFP_KERNEL);
12827                if (!buf)
12828                        return NULL;
12829
12830                for (i = 0; i < len; i += 4) {
12831                        /* The data is in little-endian format in NVRAM.
12832                         * Use the big-endian read routines to preserve
12833                         * the byte order as it exists in NVRAM.
12834                         */
12835                        if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12836                                goto error;
12837                }
12838                *vpdlen = len;
12839        } else {
12840                buf = pci_vpd_alloc(tp->pdev, vpdlen);
12841                if (IS_ERR(buf))
12842                        return NULL;
12843        }
12844
12845        return buf;
12846
12847error:
12848        kfree(buf);
12849        return NULL;
12850}
12851
12852#define NVRAM_TEST_SIZE 0x100
12853#define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12854#define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12855#define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12856#define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12857#define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12858#define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12859#define NVRAM_SELFBOOT_HW_SIZE 0x20
12860#define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12861
12862static int tg3_test_nvram(struct tg3 *tp)
12863{
12864        u32 csum, magic;
12865        __be32 *buf;
12866        int i, j, k, err = 0, size;
12867        unsigned int len;
12868
12869        if (tg3_flag(tp, NO_NVRAM))
12870                return 0;
12871
12872        if (tg3_nvram_read(tp, 0, &magic) != 0)
12873                return -EIO;
12874
12875        if (magic == TG3_EEPROM_MAGIC)
12876                size = NVRAM_TEST_SIZE;
12877        else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12878                if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12879                    TG3_EEPROM_SB_FORMAT_1) {
12880                        switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12881                        case TG3_EEPROM_SB_REVISION_0:
12882                                size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12883                                break;
12884                        case TG3_EEPROM_SB_REVISION_2:
12885                                size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12886                                break;
12887                        case TG3_EEPROM_SB_REVISION_3:
12888                                size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12889                                break;
12890                        case TG3_EEPROM_SB_REVISION_4:
12891                                size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12892                                break;
12893                        case TG3_EEPROM_SB_REVISION_5:
12894                                size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12895                                break;
12896                        case TG3_EEPROM_SB_REVISION_6:
12897                                size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12898                                break;
12899                        default:
12900                                return -EIO;
12901                        }
12902                } else
12903                        return 0;
12904        } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12905                size = NVRAM_SELFBOOT_HW_SIZE;
12906        else
12907                return -EIO;
12908
12909        buf = kmalloc(size, GFP_KERNEL);
12910        if (buf == NULL)
12911                return -ENOMEM;
12912
12913        err = -EIO;
12914        for (i = 0, j = 0; i < size; i += 4, j++) {
12915                err = tg3_nvram_read_be32(tp, i, &buf[j]);
12916                if (err)
12917                        break;
12918        }
12919        if (i < size)
12920                goto out;
12921
12922        /* Selfboot format */
12923        magic = be32_to_cpu(buf[0]);
12924        if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12925            TG3_EEPROM_MAGIC_FW) {
12926                u8 *buf8 = (u8 *) buf, csum8 = 0;
12927
12928                if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12929                    TG3_EEPROM_SB_REVISION_2) {
12930                        /* For rev 2, the csum doesn't include the MBA. */
12931                        for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12932                                csum8 += buf8[i];
12933                        for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12934                                csum8 += buf8[i];
12935                } else {
12936                        for (i = 0; i < size; i++)
12937                                csum8 += buf8[i];
12938                }
12939
12940                if (csum8 == 0) {
12941                        err = 0;
12942                        goto out;
12943                }
12944
12945                err = -EIO;
12946                goto out;
12947        }
12948
12949        if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12950            TG3_EEPROM_MAGIC_HW) {
12951                u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12952                u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12953                u8 *buf8 = (u8 *) buf;
12954
12955                /* Separate the parity bits and the data bytes.  */
12956                for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12957                        if ((i == 0) || (i == 8)) {
12958                                int l;
12959                                u8 msk;
12960
12961                                for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12962                                        parity[k++] = buf8[i] & msk;
12963                                i++;
12964                        } else if (i == 16) {
12965                                int l;
12966                                u8 msk;
12967
12968                                for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12969                                        parity[k++] = buf8[i] & msk;
12970                                i++;
12971
12972                                for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12973                                        parity[k++] = buf8[i] & msk;
12974                                i++;
12975                        }
12976                        data[j++] = buf8[i];
12977                }
12978
12979                err = -EIO;
12980                for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12981                        u8 hw8 = hweight8(data[i]);
12982
12983                        if ((hw8 & 0x1) && parity[i])
12984                                goto out;
12985                        else if (!(hw8 & 0x1) && !parity[i])
12986                                goto out;
12987                }
12988                err = 0;
12989                goto out;
12990        }
12991
12992        err = -EIO;
12993
12994        /* Bootstrap checksum at offset 0x10 */
12995        csum = calc_crc((unsigned char *) buf, 0x10);
12996        if (csum != le32_to_cpu(buf[0x10/4]))
12997                goto out;
12998
12999        /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
13000        csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
13001        if (csum != le32_to_cpu(buf[0xfc/4]))
13002                goto out;
13003
13004        kfree(buf);
13005
13006        buf = tg3_vpd_readblock(tp, &len);
13007        if (!buf)
13008                return -ENOMEM;
13009
13010        err = pci_vpd_check_csum(buf, len);
13011        /* go on if no checksum found */
13012        if (err == 1)
13013                err = 0;
13014out:
13015        kfree(buf);
13016        return err;
13017}
13018
13019#define TG3_SERDES_TIMEOUT_SEC  2
13020#define TG3_COPPER_TIMEOUT_SEC  6
13021
13022static int tg3_test_link(struct tg3 *tp)
13023{
13024        int i, max;
13025
13026        if (!netif_running(tp->dev))
13027                return -ENODEV;
13028
13029        if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13030                max = TG3_SERDES_TIMEOUT_SEC;
13031        else
13032                max = TG3_COPPER_TIMEOUT_SEC;
13033
13034        for (i = 0; i < max; i++) {
13035                if (tp->link_up)
13036                        return 0;
13037
13038                if (msleep_interruptible(1000))
13039                        break;
13040        }
13041
13042        return -EIO;
13043}
13044
13045/* Only test the commonly used registers */
13046static int tg3_test_registers(struct tg3 *tp)
13047{
13048        int i, is_5705, is_5750;
13049        u32 offset, read_mask, write_mask, val, save_val, read_val;
13050        static struct {
13051                u16 offset;
13052                u16 flags;
13053#define TG3_FL_5705     0x1
13054#define TG3_FL_NOT_5705 0x2
13055#define TG3_FL_NOT_5788 0x4
13056#define TG3_FL_NOT_5750 0x8
13057                u32 read_mask;
13058                u32 write_mask;
13059        } reg_tbl[] = {
13060                /* MAC Control Registers */
13061                { MAC_MODE, TG3_FL_NOT_5705,
13062                        0x00000000, 0x00ef6f8c },
13063                { MAC_MODE, TG3_FL_5705,
13064                        0x00000000, 0x01ef6b8c },
13065                { MAC_STATUS, TG3_FL_NOT_5705,
13066                        0x03800107, 0x00000000 },
13067                { MAC_STATUS, TG3_FL_5705,
13068                        0x03800100, 0x00000000 },
13069                { MAC_ADDR_0_HIGH, 0x0000,
13070                        0x00000000, 0x0000ffff },
13071                { MAC_ADDR_0_LOW, 0x0000,
13072                        0x00000000, 0xffffffff },
13073                { MAC_RX_MTU_SIZE, 0x0000,
13074                        0x00000000, 0x0000ffff },
13075                { MAC_TX_MODE, 0x0000,
13076                        0x00000000, 0x00000070 },
13077                { MAC_TX_LENGTHS, 0x0000,
13078                        0x00000000, 0x00003fff },
13079                { MAC_RX_MODE, TG3_FL_NOT_5705,
13080                        0x00000000, 0x000007fc },
13081                { MAC_RX_MODE, TG3_FL_5705,
13082                        0x00000000, 0x000007dc },
13083                { MAC_HASH_REG_0, 0x0000,
13084                        0x00000000, 0xffffffff },
13085                { MAC_HASH_REG_1, 0x0000,
13086                        0x00000000, 0xffffffff },
13087                { MAC_HASH_REG_2, 0x0000,
13088                        0x00000000, 0xffffffff },
13089                { MAC_HASH_REG_3, 0x0000,
13090                        0x00000000, 0xffffffff },
13091
13092                /* Receive Data and Receive BD Initiator Control Registers. */
13093                { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13094                        0x00000000, 0xffffffff },
13095                { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13096                        0x00000000, 0xffffffff },
13097                { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13098                        0x00000000, 0x00000003 },
13099                { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13100                        0x00000000, 0xffffffff },
13101                { RCVDBDI_STD_BD+0, 0x0000,
13102                        0x00000000, 0xffffffff },
13103                { RCVDBDI_STD_BD+4, 0x0000,
13104                        0x00000000, 0xffffffff },
13105                { RCVDBDI_STD_BD+8, 0x0000,
13106                        0x00000000, 0xffff0002 },
13107                { RCVDBDI_STD_BD+0xc, 0x0000,
13108                        0x00000000, 0xffffffff },
13109
13110                /* Receive BD Initiator Control Registers. */
13111                { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13112                        0x00000000, 0xffffffff },
13113                { RCVBDI_STD_THRESH, TG3_FL_5705,
13114                        0x00000000, 0x000003ff },
13115                { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13116                        0x00000000, 0xffffffff },
13117
13118                /* Host Coalescing Control Registers. */
13119                { HOSTCC_MODE, TG3_FL_NOT_5705,
13120                        0x00000000, 0x00000004 },
13121                { HOSTCC_MODE, TG3_FL_5705,
13122                        0x00000000, 0x000000f6 },
13123                { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13124                        0x00000000, 0xffffffff },
13125                { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13126                        0x00000000, 0x000003ff },
13127                { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13128                        0x00000000, 0xffffffff },
13129                { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13130                        0x00000000, 0x000003ff },
13131                { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13132                        0x00000000, 0xffffffff },
13133                { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13134                        0x00000000, 0x000000ff },
13135                { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13136                        0x00000000, 0xffffffff },
13137                { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13138                        0x00000000, 0x000000ff },
13139                { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13140                        0x00000000, 0xffffffff },
13141                { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13142                        0x00000000, 0xffffffff },
13143                { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13144                        0x00000000, 0xffffffff },
13145                { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13146                        0x00000000, 0x000000ff },
13147                { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13148                        0x00000000, 0xffffffff },
13149                { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13150                        0x00000000, 0x000000ff },
13151                { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13152                        0x00000000, 0xffffffff },
13153                { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13154                        0x00000000, 0xffffffff },
13155                { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13156                        0x00000000, 0xffffffff },
13157                { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13158                        0x00000000, 0xffffffff },
13159                { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13160                        0x00000000, 0xffffffff },
13161                { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13162                        0xffffffff, 0x00000000 },
13163                { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13164                        0xffffffff, 0x00000000 },
13165
13166                /* Buffer Manager Control Registers. */
13167                { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13168                        0x00000000, 0x007fff80 },
13169                { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13170                        0x00000000, 0x007fffff },
13171                { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13172                        0x00000000, 0x0000003f },
13173                { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13174                        0x00000000, 0x000001ff },
13175                { BUFMGR_MB_HIGH_WATER, 0x0000,
13176                        0x00000000, 0x000001ff },
13177                { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13178                        0xffffffff, 0x00000000 },
13179                { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13180                        0xffffffff, 0x00000000 },
13181
13182                /* Mailbox Registers */
13183                { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13184                        0x00000000, 0x000001ff },
13185                { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13186                        0x00000000, 0x000001ff },
13187                { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13188                        0x00000000, 0x000007ff },
13189                { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13190                        0x00000000, 0x000001ff },
13191
13192                { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13193        };
13194
13195        is_5705 = is_5750 = 0;
13196        if (tg3_flag(tp, 5705_PLUS)) {
13197                is_5705 = 1;
13198                if (tg3_flag(tp, 5750_PLUS))
13199                        is_5750 = 1;
13200        }
13201
13202        for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13203                if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13204                        continue;
13205
13206                if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13207                        continue;
13208
13209                if (tg3_flag(tp, IS_5788) &&
13210                    (reg_tbl[i].flags & TG3_FL_NOT_5788))
13211                        continue;
13212
13213                if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13214                        continue;
13215
13216                offset = (u32) reg_tbl[i].offset;
13217                read_mask = reg_tbl[i].read_mask;
13218                write_mask = reg_tbl[i].write_mask;
13219
13220                /* Save the original register content */
13221                save_val = tr32(offset);
13222
13223                /* Determine the read-only value. */
13224                read_val = save_val & read_mask;
13225
13226                /* Write zero to the register, then make sure the read-only bits
13227                 * are not changed and the read/write bits are all zeros.
13228                 */
13229                tw32(offset, 0);
13230
13231                val = tr32(offset);
13232
13233                /* Test the read-only and read/write bits. */
13234                if (((val & read_mask) != read_val) || (val & write_mask))
13235                        goto out;
13236
13237                /* Write ones to all the bits defined by RdMask and WrMask, then
13238                 * make sure the read-only bits are not changed and the
13239                 * read/write bits are all ones.
13240                 */
13241                tw32(offset, read_mask | write_mask);
13242
13243                val = tr32(offset);
13244
13245                /* Test the read-only bits. */
13246                if ((val & read_mask) != read_val)
13247                        goto out;
13248
13249                /* Test the read/write bits. */
13250                if ((val & write_mask) != write_mask)
13251                        goto out;
13252
13253                tw32(offset, save_val);
13254        }
13255
13256        return 0;
13257
13258out:
13259        if (netif_msg_hw(tp))
13260                netdev_err(tp->dev,
13261                           "Register test failed at offset %x\n", offset);
13262        tw32(offset, save_val);
13263        return -EIO;
13264}
13265
13266static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13267{
13268        static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13269        int i;
13270        u32 j;
13271
13272        for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13273                for (j = 0; j < len; j += 4) {
13274                        u32 val;
13275
13276                        tg3_write_mem(tp, offset + j, test_pattern[i]);
13277                        tg3_read_mem(tp, offset + j, &val);
13278                        if (val != test_pattern[i])
13279                                return -EIO;
13280                }
13281        }
13282        return 0;
13283}
13284
13285static int tg3_test_memory(struct tg3 *tp)
13286{
13287        static struct mem_entry {
13288                u32 offset;
13289                u32 len;
13290        } mem_tbl_570x[] = {
13291                { 0x00000000, 0x00b50},
13292                { 0x00002000, 0x1c000},
13293                { 0xffffffff, 0x00000}
13294        }, mem_tbl_5705[] = {
13295                { 0x00000100, 0x0000c},
13296                { 0x00000200, 0x00008},
13297                { 0x00004000, 0x00800},
13298                { 0x00006000, 0x01000},
13299                { 0x00008000, 0x02000},
13300                { 0x00010000, 0x0e000},
13301                { 0xffffffff, 0x00000}
13302        }, mem_tbl_5755[] = {
13303                { 0x00000200, 0x00008},
13304                { 0x00004000, 0x00800},
13305                { 0x00006000, 0x00800},
13306                { 0x00008000, 0x02000},
13307                { 0x00010000, 0x0c000},
13308                { 0xffffffff, 0x00000}
13309        }, mem_tbl_5906[] = {
13310                { 0x00000200, 0x00008},
13311                { 0x00004000, 0x00400},
13312                { 0x00006000, 0x00400},
13313                { 0x00008000, 0x01000},
13314                { 0x00010000, 0x01000},
13315                { 0xffffffff, 0x00000}
13316        }, mem_tbl_5717[] = {
13317                { 0x00000200, 0x00008},
13318                { 0x00010000, 0x0a000},
13319                { 0x00020000, 0x13c00},
13320                { 0xffffffff, 0x00000}
13321        }, mem_tbl_57765[] = {
13322                { 0x00000200, 0x00008},
13323                { 0x00004000, 0x00800},
13324                { 0x00006000, 0x09800},
13325                { 0x00010000, 0x0a000},
13326                { 0xffffffff, 0x00000}
13327        };
13328        struct mem_entry *mem_tbl;
13329        int err = 0;
13330        int i;
13331
13332        if (tg3_flag(tp, 5717_PLUS))
13333                mem_tbl = mem_tbl_5717;
13334        else if (tg3_flag(tp, 57765_CLASS) ||
13335                 tg3_asic_rev(tp) == ASIC_REV_5762)
13336                mem_tbl = mem_tbl_57765;
13337        else if (tg3_flag(tp, 5755_PLUS))
13338                mem_tbl = mem_tbl_5755;
13339        else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13340                mem_tbl = mem_tbl_5906;
13341        else if (tg3_flag(tp, 5705_PLUS))
13342                mem_tbl = mem_tbl_5705;
13343        else
13344                mem_tbl = mem_tbl_570x;
13345
13346        for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13347                err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13348                if (err)
13349                        break;
13350        }
13351
13352        return err;
13353}
13354
13355#define TG3_TSO_MSS             500
13356
13357#define TG3_TSO_IP_HDR_LEN      20
13358#define TG3_TSO_TCP_HDR_LEN     20
13359#define TG3_TSO_TCP_OPT_LEN     12
13360
13361static const u8 tg3_tso_header[] = {
133620x08, 0x00,
133630x45, 0x00, 0x00, 0x00,
133640x00, 0x00, 0x40, 0x00,
133650x40, 0x06, 0x00, 0x00,
133660x0a, 0x00, 0x00, 0x01,
133670x0a, 0x00, 0x00, 0x02,
133680x0d, 0x00, 0xe0, 0x00,
133690x00, 0x00, 0x01, 0x00,
133700x00, 0x00, 0x02, 0x00,
133710x80, 0x10, 0x10, 0x00,
133720x14, 0x09, 0x00, 0x00,
133730x01, 0x01, 0x08, 0x0a,
133740x11, 0x11, 0x11, 0x11,
133750x11, 0x11, 0x11, 0x11,
13376};
13377
13378static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13379{
13380        u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13381        u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13382        u32 budget;
13383        struct sk_buff *skb;
13384        u8 *tx_data, *rx_data;
13385        dma_addr_t map;
13386        int num_pkts, tx_len, rx_len, i, err;
13387        struct tg3_rx_buffer_desc *desc;
13388        struct tg3_napi *tnapi, *rnapi;
13389        struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13390
13391        tnapi = &tp->napi[0];
13392        rnapi = &tp->napi[0];
13393        if (tp->irq_cnt > 1) {
13394                if (tg3_flag(tp, ENABLE_RSS))
13395                        rnapi = &tp->napi[1];
13396                if (tg3_flag(tp, ENABLE_TSS))
13397                        tnapi = &tp->napi[1];
13398        }
13399        coal_now = tnapi->coal_now | rnapi->coal_now;
13400
13401        err = -EIO;
13402
13403        tx_len = pktsz;
13404        skb = netdev_alloc_skb(tp->dev, tx_len);
13405        if (!skb)
13406                return -ENOMEM;
13407
13408        tx_data = skb_put(skb, tx_len);
13409        memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13410        memset(tx_data + ETH_ALEN, 0x0, 8);
13411
13412        tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13413
13414        if (tso_loopback) {
13415                struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13416
13417                u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13418                              TG3_TSO_TCP_OPT_LEN;
13419
13420                memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13421                       sizeof(tg3_tso_header));
13422                mss = TG3_TSO_MSS;
13423
13424                val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13425                num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13426
13427                /* Set the total length field in the IP header */
13428                iph->tot_len = htons((u16)(mss + hdr_len));
13429
13430                base_flags = (TXD_FLAG_CPU_PRE_DMA |
13431                              TXD_FLAG_CPU_POST_DMA);
13432
13433                if (tg3_flag(tp, HW_TSO_1) ||
13434                    tg3_flag(tp, HW_TSO_2) ||
13435                    tg3_flag(tp, HW_TSO_3)) {
13436                        struct tcphdr *th;
13437                        val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13438                        th = (struct tcphdr *)&tx_data[val];
13439                        th->check = 0;
13440                } else
13441                        base_flags |= TXD_FLAG_TCPUDP_CSUM;
13442
13443                if (tg3_flag(tp, HW_TSO_3)) {
13444                        mss |= (hdr_len & 0xc) << 12;
13445                        if (hdr_len & 0x10)
13446                                base_flags |= 0x00000010;
13447                        base_flags |= (hdr_len & 0x3e0) << 5;
13448                } else if (tg3_flag(tp, HW_TSO_2))
13449                        mss |= hdr_len << 9;
13450                else if (tg3_flag(tp, HW_TSO_1) ||
13451                         tg3_asic_rev(tp) == ASIC_REV_5705) {
13452                        mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13453                } else {
13454                        base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13455                }
13456
13457                data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13458        } else {
13459                num_pkts = 1;
13460                data_off = ETH_HLEN;
13461
13462                if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13463                    tx_len > VLAN_ETH_FRAME_LEN)
13464                        base_flags |= TXD_FLAG_JMB_PKT;
13465        }
13466
13467        for (i = data_off; i < tx_len; i++)
13468                tx_data[i] = (u8) (i & 0xff);
13469
13470        map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE);
13471        if (dma_mapping_error(&tp->pdev->dev, map)) {
13472                dev_kfree_skb(skb);
13473                return -EIO;
13474        }
13475
13476        val = tnapi->tx_prod;
13477        tnapi->tx_buffers[val].skb = skb;
13478        dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13479
13480        tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13481               rnapi->coal_now);
13482
13483        udelay(10);
13484
13485        rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13486
13487        budget = tg3_tx_avail(tnapi);
13488        if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13489                            base_flags | TXD_FLAG_END, mss, 0)) {
13490                tnapi->tx_buffers[val].skb = NULL;
13491                dev_kfree_skb(skb);
13492                return -EIO;
13493        }
13494
13495        tnapi->tx_prod++;
13496
13497        /* Sync BD data before updating mailbox */
13498        wmb();
13499
13500        tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13501        tr32_mailbox(tnapi->prodmbox);
13502
13503        udelay(10);
13504
13505        /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13506        for (i = 0; i < 35; i++) {
13507                tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13508                       coal_now);
13509
13510                udelay(10);
13511
13512                tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13513                rx_idx = rnapi->hw_status->idx[0].rx_producer;
13514                if ((tx_idx == tnapi->tx_prod) &&
13515                    (rx_idx == (rx_start_idx + num_pkts)))
13516                        break;
13517        }
13518
13519        tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13520        dev_kfree_skb(skb);
13521
13522        if (tx_idx != tnapi->tx_prod)
13523                goto out;
13524
13525        if (rx_idx != rx_start_idx + num_pkts)
13526                goto out;
13527
13528        val = data_off;
13529        while (rx_idx != rx_start_idx) {
13530                desc = &rnapi->rx_rcb[rx_start_idx++];
13531                desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13532                opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13533
13534                if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13535                    (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13536                        goto out;
13537
13538                rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13539                         - ETH_FCS_LEN;
13540
13541                if (!tso_loopback) {
13542                        if (rx_len != tx_len)
13543                                goto out;
13544
13545                        if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13546                                if (opaque_key != RXD_OPAQUE_RING_STD)
13547                                        goto out;
13548                        } else {
13549                                if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13550                                        goto out;
13551                        }
13552                } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13553                           (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13554                            >> RXD_TCPCSUM_SHIFT != 0xffff) {
13555                        goto out;
13556                }
13557
13558                if (opaque_key == RXD_OPAQUE_RING_STD) {
13559                        rx_data = tpr->rx_std_buffers[desc_idx].data;
13560                        map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13561                                             mapping);
13562                } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13563                        rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13564                        map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13565                                             mapping);
13566                } else
13567                        goto out;
13568
13569                dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len,
13570                                        DMA_FROM_DEVICE);
13571
13572                rx_data += TG3_RX_OFFSET(tp);
13573                for (i = data_off; i < rx_len; i++, val++) {
13574                        if (*(rx_data + i) != (u8) (val & 0xff))
13575                                goto out;
13576                }
13577        }
13578
13579        err = 0;
13580
13581        /* tg3_free_rings will unmap and free the rx_data */
13582out:
13583        return err;
13584}
13585
13586#define TG3_STD_LOOPBACK_FAILED         1
13587#define TG3_JMB_LOOPBACK_FAILED         2
13588#define TG3_TSO_LOOPBACK_FAILED         4
13589#define TG3_LOOPBACK_FAILED \
13590        (TG3_STD_LOOPBACK_FAILED | \
13591         TG3_JMB_LOOPBACK_FAILED | \
13592         TG3_TSO_LOOPBACK_FAILED)
13593
13594static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13595{
13596        int err = -EIO;
13597        u32 eee_cap;
13598        u32 jmb_pkt_sz = 9000;
13599
13600        if (tp->dma_limit)
13601                jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13602
13603        eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13604        tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13605
13606        if (!netif_running(tp->dev)) {
13607                data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13608                data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13609                if (do_extlpbk)
13610                        data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13611                goto done;
13612        }
13613
13614        err = tg3_reset_hw(tp, true);
13615        if (err) {
13616                data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13617                data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13618                if (do_extlpbk)
13619                        data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13620                goto done;
13621        }
13622
13623        if (tg3_flag(tp, ENABLE_RSS)) {
13624                int i;
13625
13626                /* Reroute all rx packets to the 1st queue */
13627                for (i = MAC_RSS_INDIR_TBL_0;
13628                     i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13629                        tw32(i, 0x0);
13630        }
13631
13632        /* HW errata - mac loopback fails in some cases on 5780.
13633         * Normal traffic and PHY loopback are not affected by
13634         * errata.  Also, the MAC loopback test is deprecated for
13635         * all newer ASIC revisions.
13636         */
13637        if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13638            !tg3_flag(tp, CPMU_PRESENT)) {
13639                tg3_mac_loopback(tp, true);
13640
13641                if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13642                        data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13643
13644                if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13645                    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13646                        data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13647
13648                tg3_mac_loopback(tp, false);
13649        }
13650
13651        if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13652            !tg3_flag(tp, USE_PHYLIB)) {
13653                int i;
13654
13655                tg3_phy_lpbk_set(tp, 0, false);
13656
13657                /* Wait for link */
13658                for (i = 0; i < 100; i++) {
13659                        if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13660                                break;
13661                        mdelay(1);
13662                }
13663
13664                if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13665                        data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13666                if (tg3_flag(tp, TSO_CAPABLE) &&
13667                    tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13668                        data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13669                if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13670                    tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13671                        data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13672
13673                if (do_extlpbk) {
13674                        tg3_phy_lpbk_set(tp, 0, true);
13675
13676                        /* All link indications report up, but the hardware
13677                         * isn't really ready for about 20 msec.  Double it
13678                         * to be sure.
13679                         */
13680                        mdelay(40);
13681
13682                        if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13683                                data[TG3_EXT_LOOPB_TEST] |=
13684                                                        TG3_STD_LOOPBACK_FAILED;
13685                        if (tg3_flag(tp, TSO_CAPABLE) &&
13686                            tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13687                                data[TG3_EXT_LOOPB_TEST] |=
13688                                                        TG3_TSO_LOOPBACK_FAILED;
13689                        if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13690                            tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13691                                data[TG3_EXT_LOOPB_TEST] |=
13692                                                        TG3_JMB_LOOPBACK_FAILED;
13693                }
13694
13695                /* Re-enable gphy autopowerdown. */
13696                if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13697                        tg3_phy_toggle_apd(tp, true);
13698        }
13699
13700        err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13701               data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13702
13703done:
13704        tp->phy_flags |= eee_cap;
13705
13706        return err;
13707}
13708
13709static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13710                          u64 *data)
13711{
13712        struct tg3 *tp = netdev_priv(dev);
13713        bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13714
13715        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13716                if (tg3_power_up(tp)) {
13717                        etest->flags |= ETH_TEST_FL_FAILED;
13718                        memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13719                        return;
13720                }
13721                tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13722        }
13723
13724        memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13725
13726        if (tg3_test_nvram(tp) != 0) {
13727                etest->flags |= ETH_TEST_FL_FAILED;
13728                data[TG3_NVRAM_TEST] = 1;
13729        }
13730        if (!doextlpbk && tg3_test_link(tp)) {
13731                etest->flags |= ETH_TEST_FL_FAILED;
13732                data[TG3_LINK_TEST] = 1;
13733        }
13734        if (etest->flags & ETH_TEST_FL_OFFLINE) {
13735                int err, err2 = 0, irq_sync = 0;
13736
13737                if (netif_running(dev)) {
13738                        tg3_phy_stop(tp);
13739                        tg3_netif_stop(tp);
13740                        irq_sync = 1;
13741                }
13742
13743                tg3_full_lock(tp, irq_sync);
13744                tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13745                err = tg3_nvram_lock(tp);
13746                tg3_halt_cpu(tp, RX_CPU_BASE);
13747                if (!tg3_flag(tp, 5705_PLUS))
13748                        tg3_halt_cpu(tp, TX_CPU_BASE);
13749                if (!err)
13750                        tg3_nvram_unlock(tp);
13751
13752                if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13753                        tg3_phy_reset(tp);
13754
13755                if (tg3_test_registers(tp) != 0) {
13756                        etest->flags |= ETH_TEST_FL_FAILED;
13757                        data[TG3_REGISTER_TEST] = 1;
13758                }
13759
13760                if (tg3_test_memory(tp) != 0) {
13761                        etest->flags |= ETH_TEST_FL_FAILED;
13762                        data[TG3_MEMORY_TEST] = 1;
13763                }
13764
13765                if (doextlpbk)
13766                        etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13767
13768                if (tg3_test_loopback(tp, data, doextlpbk))
13769                        etest->flags |= ETH_TEST_FL_FAILED;
13770
13771                tg3_full_unlock(tp);
13772
13773                if (tg3_test_interrupt(tp) != 0) {
13774                        etest->flags |= ETH_TEST_FL_FAILED;
13775                        data[TG3_INTERRUPT_TEST] = 1;
13776                }
13777
13778                tg3_full_lock(tp, 0);
13779
13780                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13781                if (netif_running(dev)) {
13782                        tg3_flag_set(tp, INIT_COMPLETE);
13783                        err2 = tg3_restart_hw(tp, true);
13784                        if (!err2)
13785                                tg3_netif_start(tp);
13786                }
13787
13788                tg3_full_unlock(tp);
13789
13790                if (irq_sync && !err2)
13791                        tg3_phy_start(tp);
13792        }
13793        if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13794                tg3_power_down_prepare(tp);
13795
13796}
13797
13798static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13799{
13800        struct tg3 *tp = netdev_priv(dev);
13801        struct hwtstamp_config stmpconf;
13802
13803        if (!tg3_flag(tp, PTP_CAPABLE))
13804                return -EOPNOTSUPP;
13805
13806        if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13807                return -EFAULT;
13808
13809        if (stmpconf.flags)
13810                return -EINVAL;
13811
13812        if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13813            stmpconf.tx_type != HWTSTAMP_TX_OFF)
13814                return -ERANGE;
13815
13816        switch (stmpconf.rx_filter) {
13817        case HWTSTAMP_FILTER_NONE:
13818                tp->rxptpctl = 0;
13819                break;
13820        case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13821                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13822                               TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13823                break;
13824        case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13825                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13826                               TG3_RX_PTP_CTL_SYNC_EVNT;
13827                break;
13828        case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13829                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13830                               TG3_RX_PTP_CTL_DELAY_REQ;
13831                break;
13832        case HWTSTAMP_FILTER_PTP_V2_EVENT:
13833                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13834                               TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13835                break;
13836        case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13837                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13838                               TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13839                break;
13840        case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13841                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13842                               TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13843                break;
13844        case HWTSTAMP_FILTER_PTP_V2_SYNC:
13845                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13846                               TG3_RX_PTP_CTL_SYNC_EVNT;
13847                break;
13848        case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13849                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13850                               TG3_RX_PTP_CTL_SYNC_EVNT;
13851                break;
13852        case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13853                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13854                               TG3_RX_PTP_CTL_SYNC_EVNT;
13855                break;
13856        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13857                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13858                               TG3_RX_PTP_CTL_DELAY_REQ;
13859                break;
13860        case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13861                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13862                               TG3_RX_PTP_CTL_DELAY_REQ;
13863                break;
13864        case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13865                tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13866                               TG3_RX_PTP_CTL_DELAY_REQ;
13867                break;
13868        default:
13869                return -ERANGE;
13870        }
13871
13872        if (netif_running(dev) && tp->rxptpctl)
13873                tw32(TG3_RX_PTP_CTL,
13874                     tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13875
13876        if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13877                tg3_flag_set(tp, TX_TSTAMP_EN);
13878        else
13879                tg3_flag_clear(tp, TX_TSTAMP_EN);
13880
13881        return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13882                -EFAULT : 0;
13883}
13884
13885static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13886{
13887        struct tg3 *tp = netdev_priv(dev);
13888        struct hwtstamp_config stmpconf;
13889
13890        if (!tg3_flag(tp, PTP_CAPABLE))
13891                return -EOPNOTSUPP;
13892
13893        stmpconf.flags = 0;
13894        stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13895                            HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13896
13897        switch (tp->rxptpctl) {
13898        case 0:
13899                stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13900                break;
13901        case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13902                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13903                break;
13904        case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13905                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13906                break;
13907        case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13908                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13909                break;
13910        case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13911                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13912                break;
13913        case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13914                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13915                break;
13916        case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13917                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13918                break;
13919        case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13920                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13921                break;
13922        case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13923                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13924                break;
13925        case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13926                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13927                break;
13928        case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13929                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13930                break;
13931        case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13932                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13933                break;
13934        case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13935                stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13936                break;
13937        default:
13938                WARN_ON_ONCE(1);
13939                return -ERANGE;
13940        }
13941
13942        return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13943                -EFAULT : 0;
13944}
13945
13946static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13947{
13948        struct mii_ioctl_data *data = if_mii(ifr);
13949        struct tg3 *tp = netdev_priv(dev);
13950        int err;
13951
13952        if (tg3_flag(tp, USE_PHYLIB)) {
13953                struct phy_device *phydev;
13954                if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13955                        return -EAGAIN;
13956                phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
13957                return phy_mii_ioctl(phydev, ifr, cmd);
13958        }
13959
13960        switch (cmd) {
13961        case SIOCGMIIPHY:
13962                data->phy_id = tp->phy_addr;
13963
13964                fallthrough;
13965        case SIOCGMIIREG: {
13966                u32 mii_regval;
13967
13968                if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13969                        break;                  /* We have no PHY */
13970
13971                if (!netif_running(dev))
13972                        return -EAGAIN;
13973
13974                spin_lock_bh(&tp->lock);
13975                err = __tg3_readphy(tp, data->phy_id & 0x1f,
13976                                    data->reg_num & 0x1f, &mii_regval);
13977                spin_unlock_bh(&tp->lock);
13978
13979                data->val_out = mii_regval;
13980
13981                return err;
13982        }
13983
13984        case SIOCSMIIREG:
13985                if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13986                        break;                  /* We have no PHY */
13987
13988                if (!netif_running(dev))
13989                        return -EAGAIN;
13990
13991                spin_lock_bh(&tp->lock);
13992                err = __tg3_writephy(tp, data->phy_id & 0x1f,
13993                                     data->reg_num & 0x1f, data->val_in);
13994                spin_unlock_bh(&tp->lock);
13995
13996                return err;
13997
13998        case SIOCSHWTSTAMP:
13999                return tg3_hwtstamp_set(dev, ifr);
14000
14001        case SIOCGHWTSTAMP:
14002                return tg3_hwtstamp_get(dev, ifr);
14003
14004        default:
14005                /* do nothing */
14006                break;
14007        }
14008        return -EOPNOTSUPP;
14009}
14010
14011static int tg3_get_coalesce(struct net_device *dev,
14012                            struct ethtool_coalesce *ec,
14013                            struct kernel_ethtool_coalesce *kernel_coal,
14014                            struct netlink_ext_ack *extack)
14015{
14016        struct tg3 *tp = netdev_priv(dev);
14017
14018        memcpy(ec, &tp->coal, sizeof(*ec));
14019        return 0;
14020}
14021
14022static int tg3_set_coalesce(struct net_device *dev,
14023                            struct ethtool_coalesce *ec,
14024                            struct kernel_ethtool_coalesce *kernel_coal,
14025                            struct netlink_ext_ack *extack)
14026{
14027        struct tg3 *tp = netdev_priv(dev);
14028        u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14029        u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14030
14031        if (!tg3_flag(tp, 5705_PLUS)) {
14032                max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14033                max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14034                max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14035                min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14036        }
14037
14038        if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14039            (!ec->rx_coalesce_usecs) ||
14040            (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14041            (!ec->tx_coalesce_usecs) ||
14042            (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14043            (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14044            (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14045            (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14046            (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14047            (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14048            (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14049            (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14050                return -EINVAL;
14051
14052        /* Only copy relevant parameters, ignore all others. */
14053        tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14054        tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14055        tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14056        tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14057        tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14058        tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14059        tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14060        tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14061        tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14062
14063        if (netif_running(dev)) {
14064                tg3_full_lock(tp, 0);
14065                __tg3_set_coalesce(tp, &tp->coal);
14066                tg3_full_unlock(tp);
14067        }
14068        return 0;
14069}
14070
14071static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14072{
14073        struct tg3 *tp = netdev_priv(dev);
14074
14075        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14076                netdev_warn(tp->dev, "Board does not support EEE!\n");
14077                return -EOPNOTSUPP;
14078        }
14079
14080        if (edata->advertised != tp->eee.advertised) {
14081                netdev_warn(tp->dev,
14082                            "Direct manipulation of EEE advertisement is not supported\n");
14083                return -EINVAL;
14084        }
14085
14086        if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14087                netdev_warn(tp->dev,
14088                            "Maximal Tx Lpi timer supported is %#x(u)\n",
14089                            TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14090                return -EINVAL;
14091        }
14092
14093        tp->eee = *edata;
14094
14095        tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14096        tg3_warn_mgmt_link_flap(tp);
14097
14098        if (netif_running(tp->dev)) {
14099                tg3_full_lock(tp, 0);
14100                tg3_setup_eee(tp);
14101                tg3_phy_reset(tp);
14102                tg3_full_unlock(tp);
14103        }
14104
14105        return 0;
14106}
14107
14108static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14109{
14110        struct tg3 *tp = netdev_priv(dev);
14111
14112        if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14113                netdev_warn(tp->dev,
14114                            "Board does not support EEE!\n");
14115                return -EOPNOTSUPP;
14116        }
14117
14118        *edata = tp->eee;
14119        return 0;
14120}
14121
14122static const struct ethtool_ops tg3_ethtool_ops = {
14123        .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
14124                                     ETHTOOL_COALESCE_MAX_FRAMES |
14125                                     ETHTOOL_COALESCE_USECS_IRQ |
14126                                     ETHTOOL_COALESCE_MAX_FRAMES_IRQ |
14127                                     ETHTOOL_COALESCE_STATS_BLOCK_USECS,
14128        .get_drvinfo            = tg3_get_drvinfo,
14129        .get_regs_len           = tg3_get_regs_len,
14130        .get_regs               = tg3_get_regs,
14131        .get_wol                = tg3_get_wol,
14132        .set_wol                = tg3_set_wol,
14133        .get_msglevel           = tg3_get_msglevel,
14134        .set_msglevel           = tg3_set_msglevel,
14135        .nway_reset             = tg3_nway_reset,
14136        .get_link               = ethtool_op_get_link,
14137        .get_eeprom_len         = tg3_get_eeprom_len,
14138        .get_eeprom             = tg3_get_eeprom,
14139        .set_eeprom             = tg3_set_eeprom,
14140        .get_ringparam          = tg3_get_ringparam,
14141        .set_ringparam          = tg3_set_ringparam,
14142        .get_pauseparam         = tg3_get_pauseparam,
14143        .set_pauseparam         = tg3_set_pauseparam,
14144        .self_test              = tg3_self_test,
14145        .get_strings            = tg3_get_strings,
14146        .set_phys_id            = tg3_set_phys_id,
14147        .get_ethtool_stats      = tg3_get_ethtool_stats,
14148        .get_coalesce           = tg3_get_coalesce,
14149        .set_coalesce           = tg3_set_coalesce,
14150        .get_sset_count         = tg3_get_sset_count,
14151        .get_rxnfc              = tg3_get_rxnfc,
14152        .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14153        .get_rxfh               = tg3_get_rxfh,
14154        .set_rxfh               = tg3_set_rxfh,
14155        .get_channels           = tg3_get_channels,
14156        .set_channels           = tg3_set_channels,
14157        .get_ts_info            = tg3_get_ts_info,
14158        .get_eee                = tg3_get_eee,
14159        .set_eee                = tg3_set_eee,
14160        .get_link_ksettings     = tg3_get_link_ksettings,
14161        .set_link_ksettings     = tg3_set_link_ksettings,
14162};
14163
14164static void tg3_get_stats64(struct net_device *dev,
14165                            struct rtnl_link_stats64 *stats)
14166{
14167        struct tg3 *tp = netdev_priv(dev);
14168
14169        spin_lock_bh(&tp->lock);
14170        if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14171                *stats = tp->net_stats_prev;
14172                spin_unlock_bh(&tp->lock);
14173                return;
14174        }
14175
14176        tg3_get_nstats(tp, stats);
14177        spin_unlock_bh(&tp->lock);
14178}
14179
14180static void tg3_set_rx_mode(struct net_device *dev)
14181{
14182        struct tg3 *tp = netdev_priv(dev);
14183
14184        if (!netif_running(dev))
14185                return;
14186
14187        tg3_full_lock(tp, 0);
14188        __tg3_set_rx_mode(dev);
14189        tg3_full_unlock(tp);
14190}
14191
14192static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14193                               int new_mtu)
14194{
14195        dev->mtu = new_mtu;
14196
14197        if (new_mtu > ETH_DATA_LEN) {
14198                if (tg3_flag(tp, 5780_CLASS)) {
14199                        netdev_update_features(dev);
14200                        tg3_flag_clear(tp, TSO_CAPABLE);
14201                } else {
14202                        tg3_flag_set(tp, JUMBO_RING_ENABLE);
14203                }
14204        } else {
14205                if (tg3_flag(tp, 5780_CLASS)) {
14206                        tg3_flag_set(tp, TSO_CAPABLE);
14207                        netdev_update_features(dev);
14208                }
14209                tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14210        }
14211}
14212
14213static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14214{
14215        struct tg3 *tp = netdev_priv(dev);
14216        int err;
14217        bool reset_phy = false;
14218
14219        if (!netif_running(dev)) {
14220                /* We'll just catch it later when the
14221                 * device is up'd.
14222                 */
14223                tg3_set_mtu(dev, tp, new_mtu);
14224                return 0;
14225        }
14226
14227        tg3_phy_stop(tp);
14228
14229        tg3_netif_stop(tp);
14230
14231        tg3_set_mtu(dev, tp, new_mtu);
14232
14233        tg3_full_lock(tp, 1);
14234
14235        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14236
14237        /* Reset PHY, otherwise the read DMA engine will be in a mode that
14238         * breaks all requests to 256 bytes.
14239         */
14240        if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
14241            tg3_asic_rev(tp) == ASIC_REV_5717 ||
14242            tg3_asic_rev(tp) == ASIC_REV_5719 ||
14243            tg3_asic_rev(tp) == ASIC_REV_5720)
14244                reset_phy = true;
14245
14246        err = tg3_restart_hw(tp, reset_phy);
14247
14248        if (!err)
14249                tg3_netif_start(tp);
14250
14251        tg3_full_unlock(tp);
14252
14253        if (!err)
14254                tg3_phy_start(tp);
14255
14256        return err;
14257}
14258
14259static const struct net_device_ops tg3_netdev_ops = {
14260        .ndo_open               = tg3_open,
14261        .ndo_stop               = tg3_close,
14262        .ndo_start_xmit         = tg3_start_xmit,
14263        .ndo_get_stats64        = tg3_get_stats64,
14264        .ndo_validate_addr      = eth_validate_addr,
14265        .ndo_set_rx_mode        = tg3_set_rx_mode,
14266        .ndo_set_mac_address    = tg3_set_mac_addr,
14267        .ndo_eth_ioctl          = tg3_ioctl,
14268        .ndo_tx_timeout         = tg3_tx_timeout,
14269        .ndo_change_mtu         = tg3_change_mtu,
14270        .ndo_fix_features       = tg3_fix_features,
14271        .ndo_set_features       = tg3_set_features,
14272#ifdef CONFIG_NET_POLL_CONTROLLER
14273        .ndo_poll_controller    = tg3_poll_controller,
14274#endif
14275};
14276
14277static void tg3_get_eeprom_size(struct tg3 *tp)
14278{
14279        u32 cursize, val, magic;
14280
14281        tp->nvram_size = EEPROM_CHIP_SIZE;
14282
14283        if (tg3_nvram_read(tp, 0, &magic) != 0)
14284                return;
14285
14286        if ((magic != TG3_EEPROM_MAGIC) &&
14287            ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14288            ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14289                return;
14290
14291        /*
14292         * Size the chip by reading offsets at increasing powers of two.
14293         * When we encounter our validation signature, we know the addressing
14294         * has wrapped around, and thus have our chip size.
14295         */
14296        cursize = 0x10;
14297
14298        while (cursize < tp->nvram_size) {
14299                if (tg3_nvram_read(tp, cursize, &val) != 0)
14300                        return;
14301
14302                if (val == magic)
14303                        break;
14304
14305                cursize <<= 1;
14306        }
14307
14308        tp->nvram_size = cursize;
14309}
14310
14311static void tg3_get_nvram_size(struct tg3 *tp)
14312{
14313        u32 val;
14314
14315        if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14316                return;
14317
14318        /* Selfboot format */
14319        if (val != TG3_EEPROM_MAGIC) {
14320                tg3_get_eeprom_size(tp);
14321                return;
14322        }
14323
14324        if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14325                if (val != 0) {
14326                        /* This is confusing.  We want to operate on the
14327                         * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14328                         * call will read from NVRAM and byteswap the data
14329                         * according to the byteswapping settings for all
14330                         * other register accesses.  This ensures the data we
14331                         * want will always reside in the lower 16-bits.
14332                         * However, the data in NVRAM is in LE format, which
14333                         * means the data from the NVRAM read will always be
14334                         * opposite the endianness of the CPU.  The 16-bit
14335                         * byteswap then brings the data to CPU endianness.
14336                         */
14337                        tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14338                        return;
14339                }
14340        }
14341        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14342}
14343
14344static void tg3_get_nvram_info(struct tg3 *tp)
14345{
14346        u32 nvcfg1;
14347
14348        nvcfg1 = tr32(NVRAM_CFG1);
14349        if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14350                tg3_flag_set(tp, FLASH);
14351        } else {
14352                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14353                tw32(NVRAM_CFG1, nvcfg1);
14354        }
14355
14356        if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14357            tg3_flag(tp, 5780_CLASS)) {
14358                switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14359                case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14360                        tp->nvram_jedecnum = JEDEC_ATMEL;
14361                        tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14362                        tg3_flag_set(tp, NVRAM_BUFFERED);
14363                        break;
14364                case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14365                        tp->nvram_jedecnum = JEDEC_ATMEL;
14366                        tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14367                        break;
14368                case FLASH_VENDOR_ATMEL_EEPROM:
14369                        tp->nvram_jedecnum = JEDEC_ATMEL;
14370                        tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14371                        tg3_flag_set(tp, NVRAM_BUFFERED);
14372                        break;
14373                case FLASH_VENDOR_ST:
14374                        tp->nvram_jedecnum = JEDEC_ST;
14375                        tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14376                        tg3_flag_set(tp, NVRAM_BUFFERED);
14377                        break;
14378                case FLASH_VENDOR_SAIFUN:
14379                        tp->nvram_jedecnum = JEDEC_SAIFUN;
14380                        tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14381                        break;
14382                case FLASH_VENDOR_SST_SMALL:
14383                case FLASH_VENDOR_SST_LARGE:
14384                        tp->nvram_jedecnum = JEDEC_SST;
14385                        tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14386                        break;
14387                }
14388        } else {
14389                tp->nvram_jedecnum = JEDEC_ATMEL;
14390                tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14391                tg3_flag_set(tp, NVRAM_BUFFERED);
14392        }
14393}
14394
14395static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14396{
14397        switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14398        case FLASH_5752PAGE_SIZE_256:
14399                tp->nvram_pagesize = 256;
14400                break;
14401        case FLASH_5752PAGE_SIZE_512:
14402                tp->nvram_pagesize = 512;
14403                break;
14404        case FLASH_5752PAGE_SIZE_1K:
14405                tp->nvram_pagesize = 1024;
14406                break;
14407        case FLASH_5752PAGE_SIZE_2K:
14408                tp->nvram_pagesize = 2048;
14409                break;
14410        case FLASH_5752PAGE_SIZE_4K:
14411                tp->nvram_pagesize = 4096;
14412                break;
14413        case FLASH_5752PAGE_SIZE_264:
14414                tp->nvram_pagesize = 264;
14415                break;
14416        case FLASH_5752PAGE_SIZE_528:
14417                tp->nvram_pagesize = 528;
14418                break;
14419        }
14420}
14421
14422static void tg3_get_5752_nvram_info(struct tg3 *tp)
14423{
14424        u32 nvcfg1;
14425
14426        nvcfg1 = tr32(NVRAM_CFG1);
14427
14428        /* NVRAM protection for TPM */
14429        if (nvcfg1 & (1 << 27))
14430                tg3_flag_set(tp, PROTECTED_NVRAM);
14431
14432        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14433        case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14434        case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14435                tp->nvram_jedecnum = JEDEC_ATMEL;
14436                tg3_flag_set(tp, NVRAM_BUFFERED);
14437                break;
14438        case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14439                tp->nvram_jedecnum = JEDEC_ATMEL;
14440                tg3_flag_set(tp, NVRAM_BUFFERED);
14441                tg3_flag_set(tp, FLASH);
14442                break;
14443        case FLASH_5752VENDOR_ST_M45PE10:
14444        case FLASH_5752VENDOR_ST_M45PE20:
14445        case FLASH_5752VENDOR_ST_M45PE40:
14446                tp->nvram_jedecnum = JEDEC_ST;
14447                tg3_flag_set(tp, NVRAM_BUFFERED);
14448                tg3_flag_set(tp, FLASH);
14449                break;
14450        }
14451
14452        if (tg3_flag(tp, FLASH)) {
14453                tg3_nvram_get_pagesize(tp, nvcfg1);
14454        } else {
14455                /* For eeprom, set pagesize to maximum eeprom size */
14456                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14457
14458                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14459                tw32(NVRAM_CFG1, nvcfg1);
14460        }
14461}
14462
14463static void tg3_get_5755_nvram_info(struct tg3 *tp)
14464{
14465        u32 nvcfg1, protect = 0;
14466
14467        nvcfg1 = tr32(NVRAM_CFG1);
14468
14469        /* NVRAM protection for TPM */
14470        if (nvcfg1 & (1 << 27)) {
14471                tg3_flag_set(tp, PROTECTED_NVRAM);
14472                protect = 1;
14473        }
14474
14475        nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14476        switch (nvcfg1) {
14477        case FLASH_5755VENDOR_ATMEL_FLASH_1:
14478        case FLASH_5755VENDOR_ATMEL_FLASH_2:
14479        case FLASH_5755VENDOR_ATMEL_FLASH_3:
14480        case FLASH_5755VENDOR_ATMEL_FLASH_5:
14481                tp->nvram_jedecnum = JEDEC_ATMEL;
14482                tg3_flag_set(tp, NVRAM_BUFFERED);
14483                tg3_flag_set(tp, FLASH);
14484                tp->nvram_pagesize = 264;
14485                if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14486                    nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14487                        tp->nvram_size = (protect ? 0x3e200 :
14488                                          TG3_NVRAM_SIZE_512KB);
14489                else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14490                        tp->nvram_size = (protect ? 0x1f200 :
14491                                          TG3_NVRAM_SIZE_256KB);
14492                else
14493                        tp->nvram_size = (protect ? 0x1f200 :
14494                                          TG3_NVRAM_SIZE_128KB);
14495                break;
14496        case FLASH_5752VENDOR_ST_M45PE10:
14497        case FLASH_5752VENDOR_ST_M45PE20:
14498        case FLASH_5752VENDOR_ST_M45PE40:
14499                tp->nvram_jedecnum = JEDEC_ST;
14500                tg3_flag_set(tp, NVRAM_BUFFERED);
14501                tg3_flag_set(tp, FLASH);
14502                tp->nvram_pagesize = 256;
14503                if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14504                        tp->nvram_size = (protect ?
14505                                          TG3_NVRAM_SIZE_64KB :
14506                                          TG3_NVRAM_SIZE_128KB);
14507                else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14508                        tp->nvram_size = (protect ?
14509                                          TG3_NVRAM_SIZE_64KB :
14510                                          TG3_NVRAM_SIZE_256KB);
14511                else
14512                        tp->nvram_size = (protect ?
14513                                          TG3_NVRAM_SIZE_128KB :
14514                                          TG3_NVRAM_SIZE_512KB);
14515                break;
14516        }
14517}
14518
14519static void tg3_get_5787_nvram_info(struct tg3 *tp)
14520{
14521        u32 nvcfg1;
14522
14523        nvcfg1 = tr32(NVRAM_CFG1);
14524
14525        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14526        case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14527        case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14528        case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14529        case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14530                tp->nvram_jedecnum = JEDEC_ATMEL;
14531                tg3_flag_set(tp, NVRAM_BUFFERED);
14532                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14533
14534                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14535                tw32(NVRAM_CFG1, nvcfg1);
14536                break;
14537        case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14538        case FLASH_5755VENDOR_ATMEL_FLASH_1:
14539        case FLASH_5755VENDOR_ATMEL_FLASH_2:
14540        case FLASH_5755VENDOR_ATMEL_FLASH_3:
14541                tp->nvram_jedecnum = JEDEC_ATMEL;
14542                tg3_flag_set(tp, NVRAM_BUFFERED);
14543                tg3_flag_set(tp, FLASH);
14544                tp->nvram_pagesize = 264;
14545                break;
14546        case FLASH_5752VENDOR_ST_M45PE10:
14547        case FLASH_5752VENDOR_ST_M45PE20:
14548        case FLASH_5752VENDOR_ST_M45PE40:
14549                tp->nvram_jedecnum = JEDEC_ST;
14550                tg3_flag_set(tp, NVRAM_BUFFERED);
14551                tg3_flag_set(tp, FLASH);
14552                tp->nvram_pagesize = 256;
14553                break;
14554        }
14555}
14556
14557static void tg3_get_5761_nvram_info(struct tg3 *tp)
14558{
14559        u32 nvcfg1, protect = 0;
14560
14561        nvcfg1 = tr32(NVRAM_CFG1);
14562
14563        /* NVRAM protection for TPM */
14564        if (nvcfg1 & (1 << 27)) {
14565                tg3_flag_set(tp, PROTECTED_NVRAM);
14566                protect = 1;
14567        }
14568
14569        nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14570        switch (nvcfg1) {
14571        case FLASH_5761VENDOR_ATMEL_ADB021D:
14572        case FLASH_5761VENDOR_ATMEL_ADB041D:
14573        case FLASH_5761VENDOR_ATMEL_ADB081D:
14574        case FLASH_5761VENDOR_ATMEL_ADB161D:
14575        case FLASH_5761VENDOR_ATMEL_MDB021D:
14576        case FLASH_5761VENDOR_ATMEL_MDB041D:
14577        case FLASH_5761VENDOR_ATMEL_MDB081D:
14578        case FLASH_5761VENDOR_ATMEL_MDB161D:
14579                tp->nvram_jedecnum = JEDEC_ATMEL;
14580                tg3_flag_set(tp, NVRAM_BUFFERED);
14581                tg3_flag_set(tp, FLASH);
14582                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14583                tp->nvram_pagesize = 256;
14584                break;
14585        case FLASH_5761VENDOR_ST_A_M45PE20:
14586        case FLASH_5761VENDOR_ST_A_M45PE40:
14587        case FLASH_5761VENDOR_ST_A_M45PE80:
14588        case FLASH_5761VENDOR_ST_A_M45PE16:
14589        case FLASH_5761VENDOR_ST_M_M45PE20:
14590        case FLASH_5761VENDOR_ST_M_M45PE40:
14591        case FLASH_5761VENDOR_ST_M_M45PE80:
14592        case FLASH_5761VENDOR_ST_M_M45PE16:
14593                tp->nvram_jedecnum = JEDEC_ST;
14594                tg3_flag_set(tp, NVRAM_BUFFERED);
14595                tg3_flag_set(tp, FLASH);
14596                tp->nvram_pagesize = 256;
14597                break;
14598        }
14599
14600        if (protect) {
14601                tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14602        } else {
14603                switch (nvcfg1) {
14604                case FLASH_5761VENDOR_ATMEL_ADB161D:
14605                case FLASH_5761VENDOR_ATMEL_MDB161D:
14606                case FLASH_5761VENDOR_ST_A_M45PE16:
14607                case FLASH_5761VENDOR_ST_M_M45PE16:
14608                        tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14609                        break;
14610                case FLASH_5761VENDOR_ATMEL_ADB081D:
14611                case FLASH_5761VENDOR_ATMEL_MDB081D:
14612                case FLASH_5761VENDOR_ST_A_M45PE80:
14613                case FLASH_5761VENDOR_ST_M_M45PE80:
14614                        tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14615                        break;
14616                case FLASH_5761VENDOR_ATMEL_ADB041D:
14617                case FLASH_5761VENDOR_ATMEL_MDB041D:
14618                case FLASH_5761VENDOR_ST_A_M45PE40:
14619                case FLASH_5761VENDOR_ST_M_M45PE40:
14620                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14621                        break;
14622                case FLASH_5761VENDOR_ATMEL_ADB021D:
14623                case FLASH_5761VENDOR_ATMEL_MDB021D:
14624                case FLASH_5761VENDOR_ST_A_M45PE20:
14625                case FLASH_5761VENDOR_ST_M_M45PE20:
14626                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14627                        break;
14628                }
14629        }
14630}
14631
14632static void tg3_get_5906_nvram_info(struct tg3 *tp)
14633{
14634        tp->nvram_jedecnum = JEDEC_ATMEL;
14635        tg3_flag_set(tp, NVRAM_BUFFERED);
14636        tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14637}
14638
14639static void tg3_get_57780_nvram_info(struct tg3 *tp)
14640{
14641        u32 nvcfg1;
14642
14643        nvcfg1 = tr32(NVRAM_CFG1);
14644
14645        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14646        case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14647        case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14648                tp->nvram_jedecnum = JEDEC_ATMEL;
14649                tg3_flag_set(tp, NVRAM_BUFFERED);
14650                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14651
14652                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14653                tw32(NVRAM_CFG1, nvcfg1);
14654                return;
14655        case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14656        case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14657        case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14658        case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14659        case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14660        case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14661        case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14662                tp->nvram_jedecnum = JEDEC_ATMEL;
14663                tg3_flag_set(tp, NVRAM_BUFFERED);
14664                tg3_flag_set(tp, FLASH);
14665
14666                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14667                case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14668                case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14669                case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14670                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14671                        break;
14672                case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14673                case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14674                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14675                        break;
14676                case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14677                case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14678                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14679                        break;
14680                }
14681                break;
14682        case FLASH_5752VENDOR_ST_M45PE10:
14683        case FLASH_5752VENDOR_ST_M45PE20:
14684        case FLASH_5752VENDOR_ST_M45PE40:
14685                tp->nvram_jedecnum = JEDEC_ST;
14686                tg3_flag_set(tp, NVRAM_BUFFERED);
14687                tg3_flag_set(tp, FLASH);
14688
14689                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14690                case FLASH_5752VENDOR_ST_M45PE10:
14691                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14692                        break;
14693                case FLASH_5752VENDOR_ST_M45PE20:
14694                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14695                        break;
14696                case FLASH_5752VENDOR_ST_M45PE40:
14697                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14698                        break;
14699                }
14700                break;
14701        default:
14702                tg3_flag_set(tp, NO_NVRAM);
14703                return;
14704        }
14705
14706        tg3_nvram_get_pagesize(tp, nvcfg1);
14707        if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14708                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14709}
14710
14711
14712static void tg3_get_5717_nvram_info(struct tg3 *tp)
14713{
14714        u32 nvcfg1;
14715
14716        nvcfg1 = tr32(NVRAM_CFG1);
14717
14718        switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14719        case FLASH_5717VENDOR_ATMEL_EEPROM:
14720        case FLASH_5717VENDOR_MICRO_EEPROM:
14721                tp->nvram_jedecnum = JEDEC_ATMEL;
14722                tg3_flag_set(tp, NVRAM_BUFFERED);
14723                tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14724
14725                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14726                tw32(NVRAM_CFG1, nvcfg1);
14727                return;
14728        case FLASH_5717VENDOR_ATMEL_MDB011D:
14729        case FLASH_5717VENDOR_ATMEL_ADB011B:
14730        case FLASH_5717VENDOR_ATMEL_ADB011D:
14731        case FLASH_5717VENDOR_ATMEL_MDB021D:
14732        case FLASH_5717VENDOR_ATMEL_ADB021B:
14733        case FLASH_5717VENDOR_ATMEL_ADB021D:
14734        case FLASH_5717VENDOR_ATMEL_45USPT:
14735                tp->nvram_jedecnum = JEDEC_ATMEL;
14736                tg3_flag_set(tp, NVRAM_BUFFERED);
14737                tg3_flag_set(tp, FLASH);
14738
14739                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14740                case FLASH_5717VENDOR_ATMEL_MDB021D:
14741                        /* Detect size with tg3_nvram_get_size() */
14742                        break;
14743                case FLASH_5717VENDOR_ATMEL_ADB021B:
14744                case FLASH_5717VENDOR_ATMEL_ADB021D:
14745                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14746                        break;
14747                default:
14748                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14749                        break;
14750                }
14751                break;
14752        case FLASH_5717VENDOR_ST_M_M25PE10:
14753        case FLASH_5717VENDOR_ST_A_M25PE10:
14754        case FLASH_5717VENDOR_ST_M_M45PE10:
14755        case FLASH_5717VENDOR_ST_A_M45PE10:
14756        case FLASH_5717VENDOR_ST_M_M25PE20:
14757        case FLASH_5717VENDOR_ST_A_M25PE20:
14758        case FLASH_5717VENDOR_ST_M_M45PE20:
14759        case FLASH_5717VENDOR_ST_A_M45PE20:
14760        case FLASH_5717VENDOR_ST_25USPT:
14761        case FLASH_5717VENDOR_ST_45USPT:
14762                tp->nvram_jedecnum = JEDEC_ST;
14763                tg3_flag_set(tp, NVRAM_BUFFERED);
14764                tg3_flag_set(tp, FLASH);
14765
14766                switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14767                case FLASH_5717VENDOR_ST_M_M25PE20:
14768                case FLASH_5717VENDOR_ST_M_M45PE20:
14769                        /* Detect size with tg3_nvram_get_size() */
14770                        break;
14771                case FLASH_5717VENDOR_ST_A_M25PE20:
14772                case FLASH_5717VENDOR_ST_A_M45PE20:
14773                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14774                        break;
14775                default:
14776                        tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14777                        break;
14778                }
14779                break;
14780        default:
14781                tg3_flag_set(tp, NO_NVRAM);
14782                return;
14783        }
14784
14785        tg3_nvram_get_pagesize(tp, nvcfg1);
14786        if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14787                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14788}
14789
14790static void tg3_get_5720_nvram_info(struct tg3 *tp)
14791{
14792        u32 nvcfg1, nvmpinstrp, nv_status;
14793
14794        nvcfg1 = tr32(NVRAM_CFG1);
14795        nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14796
14797        if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14798                if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14799                        tg3_flag_set(tp, NO_NVRAM);
14800                        return;
14801                }
14802
14803                switch (nvmpinstrp) {
14804                case FLASH_5762_MX25L_100:
14805                case FLASH_5762_MX25L_200:
14806                case FLASH_5762_MX25L_400:
14807                case FLASH_5762_MX25L_800:
14808                case FLASH_5762_MX25L_160_320:
14809                        tp->nvram_pagesize = 4096;
14810                        tp->nvram_jedecnum = JEDEC_MACRONIX;
14811                        tg3_flag_set(tp, NVRAM_BUFFERED);
14812                        tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14813                        tg3_flag_set(tp, FLASH);
14814                        nv_status = tr32(NVRAM_AUTOSENSE_STATUS);
14815                        tp->nvram_size =
14816                                (1 << (nv_status >> AUTOSENSE_DEVID &
14817                                                AUTOSENSE_DEVID_MASK)
14818                                        << AUTOSENSE_SIZE_IN_MB);
14819                        return;
14820
14821                case FLASH_5762_EEPROM_HD:
14822                        nvmpinstrp = FLASH_5720_EEPROM_HD;
14823                        break;
14824                case FLASH_5762_EEPROM_LD:
14825                        nvmpinstrp = FLASH_5720_EEPROM_LD;
14826                        break;
14827                case FLASH_5720VENDOR_M_ST_M45PE20:
14828                        /* This pinstrap supports multiple sizes, so force it
14829                         * to read the actual size from location 0xf0.
14830                         */
14831                        nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14832                        break;
14833                }
14834        }
14835
14836        switch (nvmpinstrp) {
14837        case FLASH_5720_EEPROM_HD:
14838        case FLASH_5720_EEPROM_LD:
14839                tp->nvram_jedecnum = JEDEC_ATMEL;
14840                tg3_flag_set(tp, NVRAM_BUFFERED);
14841
14842                nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14843                tw32(NVRAM_CFG1, nvcfg1);
14844                if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14845                        tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14846                else
14847                        tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14848                return;
14849        case FLASH_5720VENDOR_M_ATMEL_DB011D:
14850        case FLASH_5720VENDOR_A_ATMEL_DB011B:
14851        case FLASH_5720VENDOR_A_ATMEL_DB011D:
14852        case FLASH_5720VENDOR_M_ATMEL_DB021D:
14853        case FLASH_5720VENDOR_A_ATMEL_DB021B:
14854        case FLASH_5720VENDOR_A_ATMEL_DB021D:
14855        case FLASH_5720VENDOR_M_ATMEL_DB041D:
14856        case FLASH_5720VENDOR_A_ATMEL_DB041B:
14857        case FLASH_5720VENDOR_A_ATMEL_DB041D:
14858        case FLASH_5720VENDOR_M_ATMEL_DB081D:
14859        case FLASH_5720VENDOR_A_ATMEL_DB081D:
14860        case FLASH_5720VENDOR_ATMEL_45USPT:
14861                tp->nvram_jedecnum = JEDEC_ATMEL;
14862                tg3_flag_set(tp, NVRAM_BUFFERED);
14863                tg3_flag_set(tp, FLASH);
14864
14865                switch (nvmpinstrp) {
14866                case FLASH_5720VENDOR_M_ATMEL_DB021D:
14867                case FLASH_5720VENDOR_A_ATMEL_DB021B:
14868                case FLASH_5720VENDOR_A_ATMEL_DB021D:
14869                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14870                        break;
14871                case FLASH_5720VENDOR_M_ATMEL_DB041D:
14872                case FLASH_5720VENDOR_A_ATMEL_DB041B:
14873                case FLASH_5720VENDOR_A_ATMEL_DB041D:
14874                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14875                        break;
14876                case FLASH_5720VENDOR_M_ATMEL_DB081D:
14877                case FLASH_5720VENDOR_A_ATMEL_DB081D:
14878                        tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14879                        break;
14880                default:
14881                        if (tg3_asic_rev(tp) != ASIC_REV_5762)
14882                                tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14883                        break;
14884                }
14885                break;
14886        case FLASH_5720VENDOR_M_ST_M25PE10:
14887        case FLASH_5720VENDOR_M_ST_M45PE10:
14888        case FLASH_5720VENDOR_A_ST_M25PE10:
14889        case FLASH_5720VENDOR_A_ST_M45PE10:
14890        case FLASH_5720VENDOR_M_ST_M25PE20:
14891        case FLASH_5720VENDOR_M_ST_M45PE20:
14892        case FLASH_5720VENDOR_A_ST_M25PE20:
14893        case FLASH_5720VENDOR_A_ST_M45PE20:
14894        case FLASH_5720VENDOR_M_ST_M25PE40:
14895        case FLASH_5720VENDOR_M_ST_M45PE40:
14896        case FLASH_5720VENDOR_A_ST_M25PE40:
14897        case FLASH_5720VENDOR_A_ST_M45PE40:
14898        case FLASH_5720VENDOR_M_ST_M25PE80:
14899        case FLASH_5720VENDOR_M_ST_M45PE80:
14900        case FLASH_5720VENDOR_A_ST_M25PE80:
14901        case FLASH_5720VENDOR_A_ST_M45PE80:
14902        case FLASH_5720VENDOR_ST_25USPT:
14903        case FLASH_5720VENDOR_ST_45USPT:
14904                tp->nvram_jedecnum = JEDEC_ST;
14905                tg3_flag_set(tp, NVRAM_BUFFERED);
14906                tg3_flag_set(tp, FLASH);
14907
14908                switch (nvmpinstrp) {
14909                case FLASH_5720VENDOR_M_ST_M25PE20:
14910                case FLASH_5720VENDOR_M_ST_M45PE20:
14911                case FLASH_5720VENDOR_A_ST_M25PE20:
14912                case FLASH_5720VENDOR_A_ST_M45PE20:
14913                        tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14914                        break;
14915                case FLASH_5720VENDOR_M_ST_M25PE40:
14916                case FLASH_5720VENDOR_M_ST_M45PE40:
14917                case FLASH_5720VENDOR_A_ST_M25PE40:
14918                case FLASH_5720VENDOR_A_ST_M45PE40:
14919                        tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14920                        break;
14921                case FLASH_5720VENDOR_M_ST_M25PE80:
14922                case FLASH_5720VENDOR_M_ST_M45PE80:
14923                case FLASH_5720VENDOR_A_ST_M25PE80:
14924                case FLASH_5720VENDOR_A_ST_M45PE80:
14925                        tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14926                        break;
14927                default:
14928                        if (tg3_asic_rev(tp) != ASIC_REV_5762)
14929                                tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14930                        break;
14931                }
14932                break;
14933        default:
14934                tg3_flag_set(tp, NO_NVRAM);
14935                return;
14936        }
14937
14938        tg3_nvram_get_pagesize(tp, nvcfg1);
14939        if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14940                tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14941
14942        if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14943                u32 val;
14944
14945                if (tg3_nvram_read(tp, 0, &val))
14946                        return;
14947
14948                if (val != TG3_EEPROM_MAGIC &&
14949                    (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14950                        tg3_flag_set(tp, NO_NVRAM);
14951        }
14952}
14953
14954/* Chips other than 5700/5701 use the NVRAM for fetching info. */
14955static void tg3_nvram_init(struct tg3 *tp)
14956{
14957        if (tg3_flag(tp, IS_SSB_CORE)) {
14958                /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14959                tg3_flag_clear(tp, NVRAM);
14960                tg3_flag_clear(tp, NVRAM_BUFFERED);
14961                tg3_flag_set(tp, NO_NVRAM);
14962                return;
14963        }
14964
14965        tw32_f(GRC_EEPROM_ADDR,
14966             (EEPROM_ADDR_FSM_RESET |
14967              (EEPROM_DEFAULT_CLOCK_PERIOD <<
14968               EEPROM_ADDR_CLKPERD_SHIFT)));
14969
14970        msleep(1);
14971
14972        /* Enable seeprom accesses. */
14973        tw32_f(GRC_LOCAL_CTRL,
14974             tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14975        udelay(100);
14976
14977        if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14978            tg3_asic_rev(tp) != ASIC_REV_5701) {
14979                tg3_flag_set(tp, NVRAM);
14980
14981                if (tg3_nvram_lock(tp)) {
14982                        netdev_warn(tp->dev,
14983                                    "Cannot get nvram lock, %s failed\n",
14984                                    __func__);
14985                        return;
14986                }
14987                tg3_enable_nvram_access(tp);
14988
14989                tp->nvram_size = 0;
14990
14991                if (tg3_asic_rev(tp) == ASIC_REV_5752)
14992                        tg3_get_5752_nvram_info(tp);
14993                else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14994                        tg3_get_5755_nvram_info(tp);
14995                else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14996                         tg3_asic_rev(tp) == ASIC_REV_5784 ||
14997                         tg3_asic_rev(tp) == ASIC_REV_5785)
14998                        tg3_get_5787_nvram_info(tp);
14999                else if (tg3_asic_rev(tp) == ASIC_REV_5761)
15000                        tg3_get_5761_nvram_info(tp);
15001                else if (tg3_asic_rev(tp) == ASIC_REV_5906)
15002                        tg3_get_5906_nvram_info(tp);
15003                else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
15004                         tg3_flag(tp, 57765_CLASS))
15005                        tg3_get_57780_nvram_info(tp);
15006                else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15007                         tg3_asic_rev(tp) == ASIC_REV_5719)
15008                        tg3_get_5717_nvram_info(tp);
15009                else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
15010                         tg3_asic_rev(tp) == ASIC_REV_5762)
15011                        tg3_get_5720_nvram_info(tp);
15012                else
15013                        tg3_get_nvram_info(tp);
15014
15015                if (tp->nvram_size == 0)
15016                        tg3_get_nvram_size(tp);
15017
15018                tg3_disable_nvram_access(tp);
15019                tg3_nvram_unlock(tp);
15020
15021        } else {
15022                tg3_flag_clear(tp, NVRAM);
15023                tg3_flag_clear(tp, NVRAM_BUFFERED);
15024
15025                tg3_get_eeprom_size(tp);
15026        }
15027}
15028
15029struct subsys_tbl_ent {
15030        u16 subsys_vendor, subsys_devid;
15031        u32 phy_id;
15032};
15033
15034static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15035        /* Broadcom boards. */
15036        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15037          TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15038        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15039          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15040        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15041          TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15042        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15043          TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15044        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15045          TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15046        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15047          TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15048        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15049          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15050        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15051          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15052        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15053          TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15054        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15055          TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15056        { TG3PCI_SUBVENDOR_ID_BROADCOM,
15057          TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15058
15059        /* 3com boards. */
15060        { TG3PCI_SUBVENDOR_ID_3COM,
15061          TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15062        { TG3PCI_SUBVENDOR_ID_3COM,
15063          TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15064        { TG3PCI_SUBVENDOR_ID_3COM,
15065          TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15066        { TG3PCI_SUBVENDOR_ID_3COM,
15067          TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15068        { TG3PCI_SUBVENDOR_ID_3COM,
15069          TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15070
15071        /* DELL boards. */
15072        { TG3PCI_SUBVENDOR_ID_DELL,
15073          TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15074        { TG3PCI_SUBVENDOR_ID_DELL,
15075          TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15076        { TG3PCI_SUBVENDOR_ID_DELL,
15077          TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15078        { TG3PCI_SUBVENDOR_ID_DELL,
15079          TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15080
15081        /* Compaq boards. */
15082        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15083          TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15084        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15085          TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15086        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15087          TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15088        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15089          TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15090        { TG3PCI_SUBVENDOR_ID_COMPAQ,
15091          TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15092
15093        /* IBM boards. */
15094        { TG3PCI_SUBVENDOR_ID_IBM,
15095          TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15096};
15097
15098static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15099{
15100        int i;
15101
15102        for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15103                if ((subsys_id_to_phy_id[i].subsys_vendor ==
15104                     tp->pdev->subsystem_vendor) &&
15105                    (subsys_id_to_phy_id[i].subsys_devid ==
15106                     tp->pdev->subsystem_device))
15107                        return &subsys_id_to_phy_id[i];
15108        }
15109        return NULL;
15110}
15111
15112static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15113{
15114        u32 val;
15115
15116        tp->phy_id = TG3_PHY_ID_INVALID;
15117        tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15118
15119        /* Assume an onboard device and WOL capable by default.  */
15120        tg3_flag_set(tp, EEPROM_WRITE_PROT);
15121        tg3_flag_set(tp, WOL_CAP);
15122
15123        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15124                if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15125                        tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15126                        tg3_flag_set(tp, IS_NIC);
15127                }
15128                val = tr32(VCPU_CFGSHDW);
15129                if (val & VCPU_CFGSHDW_ASPM_DBNC)
15130                        tg3_flag_set(tp, ASPM_WORKAROUND);
15131                if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15132                    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15133                        tg3_flag_set(tp, WOL_ENABLE);
15134                        device_set_wakeup_enable(&tp->pdev->dev, true);
15135                }
15136                goto done;
15137        }
15138
15139        tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15140        if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15141                u32 nic_cfg, led_cfg;
15142                u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15143                u32 nic_phy_id, ver, eeprom_phy_id;
15144                int eeprom_phy_serdes = 0;
15145
15146                tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15147                tp->nic_sram_data_cfg = nic_cfg;
15148
15149                tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15150                ver >>= NIC_SRAM_DATA_VER_SHIFT;
15151                if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15152                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
15153                    tg3_asic_rev(tp) != ASIC_REV_5703 &&
15154                    (ver > 0) && (ver < 0x100))
15155                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15156
15157                if (tg3_asic_rev(tp) == ASIC_REV_5785)
15158                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15159
15160                if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15161                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
15162                    tg3_asic_rev(tp) == ASIC_REV_5720)
15163                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15164
15165                if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15166                    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15167                        eeprom_phy_serdes = 1;
15168
15169                tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15170                if (nic_phy_id != 0) {
15171                        u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15172                        u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15173
15174                        eeprom_phy_id  = (id1 >> 16) << 10;
15175                        eeprom_phy_id |= (id2 & 0xfc00) << 16;
15176                        eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15177                } else
15178                        eeprom_phy_id = 0;
15179
15180                tp->phy_id = eeprom_phy_id;
15181                if (eeprom_phy_serdes) {
15182                        if (!tg3_flag(tp, 5705_PLUS))
15183                                tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15184                        else
15185                                tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15186                }
15187
15188                if (tg3_flag(tp, 5750_PLUS))
15189                        led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15190                                    SHASTA_EXT_LED_MODE_MASK);
15191                else
15192                        led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15193
15194                switch (led_cfg) {
15195                default:
15196                case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15197                        tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15198                        break;
15199
15200                case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15201                        tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15202                        break;
15203
15204                case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15205                        tp->led_ctrl = LED_CTRL_MODE_MAC;
15206
15207                        /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15208                         * read on some older 5700/5701 bootcode.
15209                         */
15210                        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15211                            tg3_asic_rev(tp) == ASIC_REV_5701)
15212                                tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15213
15214                        break;
15215
15216                case SHASTA_EXT_LED_SHARED:
15217                        tp->led_ctrl = LED_CTRL_MODE_SHARED;
15218                        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15219                            tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15220                                tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15221                                                 LED_CTRL_MODE_PHY_2);
15222
15223                        if (tg3_flag(tp, 5717_PLUS) ||
15224                            tg3_asic_rev(tp) == ASIC_REV_5762)
15225                                tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15226                                                LED_CTRL_BLINK_RATE_MASK;
15227
15228                        break;
15229
15230                case SHASTA_EXT_LED_MAC:
15231                        tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15232                        break;
15233
15234                case SHASTA_EXT_LED_COMBO:
15235                        tp->led_ctrl = LED_CTRL_MODE_COMBO;
15236                        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15237                                tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15238                                                 LED_CTRL_MODE_PHY_2);
15239                        break;
15240
15241                }
15242
15243                if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15244                     tg3_asic_rev(tp) == ASIC_REV_5701) &&
15245                    tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15246                        tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15247
15248                if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15249                        tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15250
15251                if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15252                        tg3_flag_set(tp, EEPROM_WRITE_PROT);
15253                        if ((tp->pdev->subsystem_vendor ==
15254                             PCI_VENDOR_ID_ARIMA) &&
15255                            (tp->pdev->subsystem_device == 0x205a ||
15256                             tp->pdev->subsystem_device == 0x2063))
15257                                tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15258                } else {
15259                        tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15260                        tg3_flag_set(tp, IS_NIC);
15261                }
15262
15263                if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15264                        tg3_flag_set(tp, ENABLE_ASF);
15265                        if (tg3_flag(tp, 5750_PLUS))
15266                                tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15267                }
15268
15269                if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15270                    tg3_flag(tp, 5750_PLUS))
15271                        tg3_flag_set(tp, ENABLE_APE);
15272
15273                if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15274                    !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15275                        tg3_flag_clear(tp, WOL_CAP);
15276
15277                if (tg3_flag(tp, WOL_CAP) &&
15278                    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15279                        tg3_flag_set(tp, WOL_ENABLE);
15280                        device_set_wakeup_enable(&tp->pdev->dev, true);
15281                }
15282
15283                if (cfg2 & (1 << 17))
15284                        tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15285
15286                /* serdes signal pre-emphasis in register 0x590 set by */
15287                /* bootcode if bit 18 is set */
15288                if (cfg2 & (1 << 18))
15289                        tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15290
15291                if ((tg3_flag(tp, 57765_PLUS) ||
15292                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15293                      tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15294                    (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15295                        tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15296
15297                if (tg3_flag(tp, PCI_EXPRESS)) {
15298                        u32 cfg3;
15299
15300                        tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15301                        if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15302                            !tg3_flag(tp, 57765_PLUS) &&
15303                            (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15304                                tg3_flag_set(tp, ASPM_WORKAROUND);
15305                        if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15306                                tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15307                        if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15308                                tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15309                }
15310
15311                if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15312                        tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15313                if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15314                        tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15315                if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15316                        tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15317
15318                if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15319                        tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15320        }
15321done:
15322        if (tg3_flag(tp, WOL_CAP))
15323                device_set_wakeup_enable(&tp->pdev->dev,
15324                                         tg3_flag(tp, WOL_ENABLE));
15325        else
15326                device_set_wakeup_capable(&tp->pdev->dev, false);
15327}
15328
15329static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15330{
15331        int i, err;
15332        u32 val2, off = offset * 8;
15333
15334        err = tg3_nvram_lock(tp);
15335        if (err)
15336                return err;
15337
15338        tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15339        tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15340                        APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15341        tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15342        udelay(10);
15343
15344        for (i = 0; i < 100; i++) {
15345                val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15346                if (val2 & APE_OTP_STATUS_CMD_DONE) {
15347                        *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15348                        break;
15349                }
15350                udelay(10);
15351        }
15352
15353        tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15354
15355        tg3_nvram_unlock(tp);
15356        if (val2 & APE_OTP_STATUS_CMD_DONE)
15357                return 0;
15358
15359        return -EBUSY;
15360}
15361
15362static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15363{
15364        int i;
15365        u32 val;
15366
15367        tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15368        tw32(OTP_CTRL, cmd);
15369
15370        /* Wait for up to 1 ms for command to execute. */
15371        for (i = 0; i < 100; i++) {
15372                val = tr32(OTP_STATUS);
15373                if (val & OTP_STATUS_CMD_DONE)
15374                        break;
15375                udelay(10);
15376        }
15377
15378        return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15379}
15380
15381/* Read the gphy configuration from the OTP region of the chip.  The gphy
15382 * configuration is a 32-bit value that straddles the alignment boundary.
15383 * We do two 32-bit reads and then shift and merge the results.
15384 */
15385static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15386{
15387        u32 bhalf_otp, thalf_otp;
15388
15389        tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15390
15391        if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15392                return 0;
15393
15394        tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15395
15396        if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15397                return 0;
15398
15399        thalf_otp = tr32(OTP_READ_DATA);
15400
15401        tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15402
15403        if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15404                return 0;
15405
15406        bhalf_otp = tr32(OTP_READ_DATA);
15407
15408        return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15409}
15410
15411static void tg3_phy_init_link_config(struct tg3 *tp)
15412{
15413        u32 adv = ADVERTISED_Autoneg;
15414
15415        if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15416                if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15417                        adv |= ADVERTISED_1000baseT_Half;
15418                adv |= ADVERTISED_1000baseT_Full;
15419        }
15420
15421        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15422                adv |= ADVERTISED_100baseT_Half |
15423                       ADVERTISED_100baseT_Full |
15424                       ADVERTISED_10baseT_Half |
15425                       ADVERTISED_10baseT_Full |
15426                       ADVERTISED_TP;
15427        else
15428                adv |= ADVERTISED_FIBRE;
15429
15430        tp->link_config.advertising = adv;
15431        tp->link_config.speed = SPEED_UNKNOWN;
15432        tp->link_config.duplex = DUPLEX_UNKNOWN;
15433        tp->link_config.autoneg = AUTONEG_ENABLE;
15434        tp->link_config.active_speed = SPEED_UNKNOWN;
15435        tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15436
15437        tp->old_link = -1;
15438}
15439
15440static int tg3_phy_probe(struct tg3 *tp)
15441{
15442        u32 hw_phy_id_1, hw_phy_id_2;
15443        u32 hw_phy_id, hw_phy_id_masked;
15444        int err;
15445
15446        /* flow control autonegotiation is default behavior */
15447        tg3_flag_set(tp, PAUSE_AUTONEG);
15448        tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15449
15450        if (tg3_flag(tp, ENABLE_APE)) {
15451                switch (tp->pci_fn) {
15452                case 0:
15453                        tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15454                        break;
15455                case 1:
15456                        tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15457                        break;
15458                case 2:
15459                        tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15460                        break;
15461                case 3:
15462                        tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15463                        break;
15464                }
15465        }
15466
15467        if (!tg3_flag(tp, ENABLE_ASF) &&
15468            !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15469            !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15470                tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15471                                   TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15472
15473        if (tg3_flag(tp, USE_PHYLIB))
15474                return tg3_phy_init(tp);
15475
15476        /* Reading the PHY ID register can conflict with ASF
15477         * firmware access to the PHY hardware.
15478         */
15479        err = 0;
15480        if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15481                hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15482        } else {
15483                /* Now read the physical PHY_ID from the chip and verify
15484                 * that it is sane.  If it doesn't look good, we fall back
15485                 * to either the hard-coded table based PHY_ID and failing
15486                 * that the value found in the eeprom area.
15487                 */
15488                err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15489                err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15490
15491                hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15492                hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15493                hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15494
15495                hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15496        }
15497
15498        if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15499                tp->phy_id = hw_phy_id;
15500                if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15501                        tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15502                else
15503                        tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15504        } else {
15505                if (tp->phy_id != TG3_PHY_ID_INVALID) {
15506                        /* Do nothing, phy ID already set up in
15507                         * tg3_get_eeprom_hw_cfg().
15508                         */
15509                } else {
15510                        struct subsys_tbl_ent *p;
15511
15512                        /* No eeprom signature?  Try the hardcoded
15513                         * subsys device table.
15514                         */
15515                        p = tg3_lookup_by_subsys(tp);
15516                        if (p) {
15517                                tp->phy_id = p->phy_id;
15518                        } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15519                                /* For now we saw the IDs 0xbc050cd0,
15520                                 * 0xbc050f80 and 0xbc050c30 on devices
15521                                 * connected to an BCM4785 and there are
15522                                 * probably more. Just assume that the phy is
15523                                 * supported when it is connected to a SSB core
15524                                 * for now.
15525                                 */
15526                                return -ENODEV;
15527                        }
15528
15529                        if (!tp->phy_id ||
15530                            tp->phy_id == TG3_PHY_ID_BCM8002)
15531                                tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15532                }
15533        }
15534
15535        if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15536            (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15537             tg3_asic_rev(tp) == ASIC_REV_5720 ||
15538             tg3_asic_rev(tp) == ASIC_REV_57766 ||
15539             tg3_asic_rev(tp) == ASIC_REV_5762 ||
15540             (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15541              tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15542             (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15543              tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15544                tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15545
15546                tp->eee.supported = SUPPORTED_100baseT_Full |
15547                                    SUPPORTED_1000baseT_Full;
15548                tp->eee.advertised = ADVERTISED_100baseT_Full |
15549                                     ADVERTISED_1000baseT_Full;
15550                tp->eee.eee_enabled = 1;
15551                tp->eee.tx_lpi_enabled = 1;
15552                tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15553        }
15554
15555        tg3_phy_init_link_config(tp);
15556
15557        if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15558            !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15559            !tg3_flag(tp, ENABLE_APE) &&
15560            !tg3_flag(tp, ENABLE_ASF)) {
15561                u32 bmsr, dummy;
15562
15563                tg3_readphy(tp, MII_BMSR, &bmsr);
15564                if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15565                    (bmsr & BMSR_LSTATUS))
15566                        goto skip_phy_reset;
15567
15568                err = tg3_phy_reset(tp);
15569                if (err)
15570                        return err;
15571
15572                tg3_phy_set_wirespeed(tp);
15573
15574                if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15575                        tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15576                                            tp->link_config.flowctrl);
15577
15578                        tg3_writephy(tp, MII_BMCR,
15579                                     BMCR_ANENABLE | BMCR_ANRESTART);
15580                }
15581        }
15582
15583skip_phy_reset:
15584        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15585                err = tg3_init_5401phy_dsp(tp);
15586                if (err)
15587                        return err;
15588
15589                err = tg3_init_5401phy_dsp(tp);
15590        }
15591
15592        return err;
15593}
15594
15595static void tg3_read_vpd(struct tg3 *tp)
15596{
15597        u8 *vpd_data;
15598        unsigned int len, vpdlen;
15599        int i;
15600
15601        vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15602        if (!vpd_data)
15603                goto out_no_vpd;
15604
15605        i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15606                                         PCI_VPD_RO_KEYWORD_MFR_ID, &len);
15607        if (i < 0)
15608                goto partno;
15609
15610        if (len != 4 || memcmp(vpd_data + i, "1028", 4))
15611                goto partno;
15612
15613        i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15614                                         PCI_VPD_RO_KEYWORD_VENDOR0, &len);
15615        if (i < 0)
15616                goto partno;
15617
15618        memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15619        snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i);
15620
15621partno:
15622        i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15623                                         PCI_VPD_RO_KEYWORD_PARTNO, &len);
15624        if (i < 0)
15625                goto out_not_found;
15626
15627        if (len > TG3_BPN_SIZE)
15628                goto out_not_found;
15629
15630        memcpy(tp->board_part_number, &vpd_data[i], len);
15631
15632out_not_found:
15633        kfree(vpd_data);
15634        if (tp->board_part_number[0])
15635                return;
15636
15637out_no_vpd:
15638        if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15639                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15640                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15641                        strcpy(tp->board_part_number, "BCM5717");
15642                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15643                        strcpy(tp->board_part_number, "BCM5718");
15644                else
15645                        goto nomatch;
15646        } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15647                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15648                        strcpy(tp->board_part_number, "BCM57780");
15649                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15650                        strcpy(tp->board_part_number, "BCM57760");
15651                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15652                        strcpy(tp->board_part_number, "BCM57790");
15653                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15654                        strcpy(tp->board_part_number, "BCM57788");
15655                else
15656                        goto nomatch;
15657        } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15658                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15659                        strcpy(tp->board_part_number, "BCM57761");
15660                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15661                        strcpy(tp->board_part_number, "BCM57765");
15662                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15663                        strcpy(tp->board_part_number, "BCM57781");
15664                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15665                        strcpy(tp->board_part_number, "BCM57785");
15666                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15667                        strcpy(tp->board_part_number, "BCM57791");
15668                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15669                        strcpy(tp->board_part_number, "BCM57795");
15670                else
15671                        goto nomatch;
15672        } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15673                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15674                        strcpy(tp->board_part_number, "BCM57762");
15675                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15676                        strcpy(tp->board_part_number, "BCM57766");
15677                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15678                        strcpy(tp->board_part_number, "BCM57782");
15679                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15680                        strcpy(tp->board_part_number, "BCM57786");
15681                else
15682                        goto nomatch;
15683        } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15684                strcpy(tp->board_part_number, "BCM95906");
15685        } else {
15686nomatch:
15687                strcpy(tp->board_part_number, "none");
15688        }
15689}
15690
15691static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15692{
15693        u32 val;
15694
15695        if (tg3_nvram_read(tp, offset, &val) ||
15696            (val & 0xfc000000) != 0x0c000000 ||
15697            tg3_nvram_read(tp, offset + 4, &val) ||
15698            val != 0)
15699                return 0;
15700
15701        return 1;
15702}
15703
15704static void tg3_read_bc_ver(struct tg3 *tp)
15705{
15706        u32 val, offset, start, ver_offset;
15707        int i, dst_off;
15708        bool newver = false;
15709
15710        if (tg3_nvram_read(tp, 0xc, &offset) ||
15711            tg3_nvram_read(tp, 0x4, &start))
15712                return;
15713
15714        offset = tg3_nvram_logical_addr(tp, offset);
15715
15716        if (tg3_nvram_read(tp, offset, &val))
15717                return;
15718
15719        if ((val & 0xfc000000) == 0x0c000000) {
15720                if (tg3_nvram_read(tp, offset + 4, &val))
15721                        return;
15722
15723                if (val == 0)
15724                        newver = true;
15725        }
15726
15727        dst_off = strlen(tp->fw_ver);
15728
15729        if (newver) {
15730                if (TG3_VER_SIZE - dst_off < 16 ||
15731                    tg3_nvram_read(tp, offset + 8, &ver_offset))
15732                        return;
15733
15734                offset = offset + ver_offset - start;
15735                for (i = 0; i < 16; i += 4) {
15736                        __be32 v;
15737                        if (tg3_nvram_read_be32(tp, offset + i, &v))
15738                                return;
15739
15740                        memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15741                }
15742        } else {
15743                u32 major, minor;
15744
15745                if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15746                        return;
15747
15748                major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15749                        TG3_NVM_BCVER_MAJSFT;
15750                minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15751                snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15752                         "v%d.%02d", major, minor);
15753        }
15754}
15755
15756static void tg3_read_hwsb_ver(struct tg3 *tp)
15757{
15758        u32 val, major, minor;
15759
15760        /* Use native endian representation */
15761        if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15762                return;
15763
15764        major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15765                TG3_NVM_HWSB_CFG1_MAJSFT;
15766        minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15767                TG3_NVM_HWSB_CFG1_MINSFT;
15768
15769        snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15770}
15771
15772static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15773{
15774        u32 offset, major, minor, build;
15775
15776        strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15777
15778        if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15779                return;
15780
15781        switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15782        case TG3_EEPROM_SB_REVISION_0:
15783                offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15784                break;
15785        case TG3_EEPROM_SB_REVISION_2:
15786                offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15787                break;
15788        case TG3_EEPROM_SB_REVISION_3:
15789                offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15790                break;
15791        case TG3_EEPROM_SB_REVISION_4:
15792                offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15793                break;
15794        case TG3_EEPROM_SB_REVISION_5:
15795                offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15796                break;
15797        case TG3_EEPROM_SB_REVISION_6:
15798                offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15799                break;
15800        default:
15801                return;
15802        }
15803
15804        if (tg3_nvram_read(tp, offset, &val))
15805                return;
15806
15807        build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15808                TG3_EEPROM_SB_EDH_BLD_SHFT;
15809        major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15810                TG3_EEPROM_SB_EDH_MAJ_SHFT;
15811        minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15812
15813        if (minor > 99 || build > 26)
15814                return;
15815
15816        offset = strlen(tp->fw_ver);
15817        snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15818                 " v%d.%02d", major, minor);
15819
15820        if (build > 0) {
15821                offset = strlen(tp->fw_ver);
15822                if (offset < TG3_VER_SIZE - 1)
15823                        tp->fw_ver[offset] = 'a' + build - 1;
15824        }
15825}
15826
15827static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15828{
15829        u32 val, offset, start;
15830        int i, vlen;
15831
15832        for (offset = TG3_NVM_DIR_START;
15833             offset < TG3_NVM_DIR_END;
15834             offset += TG3_NVM_DIRENT_SIZE) {
15835                if (tg3_nvram_read(tp, offset, &val))
15836                        return;
15837
15838                if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15839                        break;
15840        }
15841
15842        if (offset == TG3_NVM_DIR_END)
15843                return;
15844
15845        if (!tg3_flag(tp, 5705_PLUS))
15846                start = 0x08000000;
15847        else if (tg3_nvram_read(tp, offset - 4, &start))
15848                return;
15849
15850        if (tg3_nvram_read(tp, offset + 4, &offset) ||
15851            !tg3_fw_img_is_valid(tp, offset) ||
15852            tg3_nvram_read(tp, offset + 8, &val))
15853                return;
15854
15855        offset += val - start;
15856
15857        vlen = strlen(tp->fw_ver);
15858
15859        tp->fw_ver[vlen++] = ',';
15860        tp->fw_ver[vlen++] = ' ';
15861
15862        for (i = 0; i < 4; i++) {
15863                __be32 v;
15864                if (tg3_nvram_read_be32(tp, offset, &v))
15865                        return;
15866
15867                offset += sizeof(v);
15868
15869                if (vlen > TG3_VER_SIZE - sizeof(v)) {
15870                        memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15871                        break;
15872                }
15873
15874                memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15875                vlen += sizeof(v);
15876        }
15877}
15878
15879static void tg3_probe_ncsi(struct tg3 *tp)
15880{
15881        u32 apedata;
15882
15883        apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15884        if (apedata != APE_SEG_SIG_MAGIC)
15885                return;
15886
15887        apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15888        if (!(apedata & APE_FW_STATUS_READY))
15889                return;
15890
15891        if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15892                tg3_flag_set(tp, APE_HAS_NCSI);
15893}
15894
15895static void tg3_read_dash_ver(struct tg3 *tp)
15896{
15897        int vlen;
15898        u32 apedata;
15899        char *fwtype;
15900
15901        apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15902
15903        if (tg3_flag(tp, APE_HAS_NCSI))
15904                fwtype = "NCSI";
15905        else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15906                fwtype = "SMASH";
15907        else
15908                fwtype = "DASH";
15909
15910        vlen = strlen(tp->fw_ver);
15911
15912        snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15913                 fwtype,
15914                 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15915                 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15916                 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15917                 (apedata & APE_FW_VERSION_BLDMSK));
15918}
15919
15920static void tg3_read_otp_ver(struct tg3 *tp)
15921{
15922        u32 val, val2;
15923
15924        if (tg3_asic_rev(tp) != ASIC_REV_5762)
15925                return;
15926
15927        if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15928            !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15929            TG3_OTP_MAGIC0_VALID(val)) {
15930                u64 val64 = (u64) val << 32 | val2;
15931                u32 ver = 0;
15932                int i, vlen;
15933
15934                for (i = 0; i < 7; i++) {
15935                        if ((val64 & 0xff) == 0)
15936                                break;
15937                        ver = val64 & 0xff;
15938                        val64 >>= 8;
15939                }
15940                vlen = strlen(tp->fw_ver);
15941                snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15942        }
15943}
15944
15945static void tg3_read_fw_ver(struct tg3 *tp)
15946{
15947        u32 val;
15948        bool vpd_vers = false;
15949
15950        if (tp->fw_ver[0] != 0)
15951                vpd_vers = true;
15952
15953        if (tg3_flag(tp, NO_NVRAM)) {
15954                strcat(tp->fw_ver, "sb");
15955                tg3_read_otp_ver(tp);
15956                return;
15957        }
15958
15959        if (tg3_nvram_read(tp, 0, &val))
15960                return;
15961
15962        if (val == TG3_EEPROM_MAGIC)
15963                tg3_read_bc_ver(tp);
15964        else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15965                tg3_read_sb_ver(tp, val);
15966        else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15967                tg3_read_hwsb_ver(tp);
15968
15969        if (tg3_flag(tp, ENABLE_ASF)) {
15970                if (tg3_flag(tp, ENABLE_APE)) {
15971                        tg3_probe_ncsi(tp);
15972                        if (!vpd_vers)
15973                                tg3_read_dash_ver(tp);
15974                } else if (!vpd_vers) {
15975                        tg3_read_mgmtfw_ver(tp);
15976                }
15977        }
15978
15979        tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15980}
15981
15982static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15983{
15984        if (tg3_flag(tp, LRG_PROD_RING_CAP))
15985                return TG3_RX_RET_MAX_SIZE_5717;
15986        else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15987                return TG3_RX_RET_MAX_SIZE_5700;
15988        else
15989                return TG3_RX_RET_MAX_SIZE_5705;
15990}
15991
15992static const struct pci_device_id tg3_write_reorder_chipsets[] = {
15993        { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15994        { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15995        { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15996        { },
15997};
15998
15999static struct pci_dev *tg3_find_peer(struct tg3 *tp)
16000{
16001        struct pci_dev *peer;
16002        unsigned int func, devnr = tp->pdev->devfn & ~7;
16003
16004        for (func = 0; func < 8; func++) {
16005                peer = pci_get_slot(tp->pdev->bus, devnr | func);
16006                if (peer && peer != tp->pdev)
16007                        break;
16008                pci_dev_put(peer);
16009        }
16010        /* 5704 can be configured in single-port mode, set peer to
16011         * tp->pdev in that case.
16012         */
16013        if (!peer) {
16014                peer = tp->pdev;
16015                return peer;
16016        }
16017
16018        /*
16019         * We don't need to keep the refcount elevated; there's no way
16020         * to remove one half of this device without removing the other
16021         */
16022        pci_dev_put(peer);
16023
16024        return peer;
16025}
16026
16027static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16028{
16029        tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16030        if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16031                u32 reg;
16032
16033                /* All devices that use the alternate
16034                 * ASIC REV location have a CPMU.
16035                 */
16036                tg3_flag_set(tp, CPMU_PRESENT);
16037
16038                if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16039                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16040                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16041                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16042                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16043                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16044                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16045                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16046                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16047                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16048                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16049                        reg = TG3PCI_GEN2_PRODID_ASICREV;
16050                else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16051                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16052                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16053                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16054                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16055                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16056                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16057                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16058                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16059                         tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16060                        reg = TG3PCI_GEN15_PRODID_ASICREV;
16061                else
16062                        reg = TG3PCI_PRODID_ASICREV;
16063
16064                pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16065        }
16066
16067        /* Wrong chip ID in 5752 A0. This code can be removed later
16068         * as A0 is not in production.
16069         */
16070        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16071                tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16072
16073        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16074                tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16075
16076        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16077            tg3_asic_rev(tp) == ASIC_REV_5719 ||
16078            tg3_asic_rev(tp) == ASIC_REV_5720)
16079                tg3_flag_set(tp, 5717_PLUS);
16080
16081        if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16082            tg3_asic_rev(tp) == ASIC_REV_57766)
16083                tg3_flag_set(tp, 57765_CLASS);
16084
16085        if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16086             tg3_asic_rev(tp) == ASIC_REV_5762)
16087                tg3_flag_set(tp, 57765_PLUS);
16088
16089        /* Intentionally exclude ASIC_REV_5906 */
16090        if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16091            tg3_asic_rev(tp) == ASIC_REV_5787 ||
16092            tg3_asic_rev(tp) == ASIC_REV_5784 ||
16093            tg3_asic_rev(tp) == ASIC_REV_5761 ||
16094            tg3_asic_rev(tp) == ASIC_REV_5785 ||
16095            tg3_asic_rev(tp) == ASIC_REV_57780 ||
16096            tg3_flag(tp, 57765_PLUS))
16097                tg3_flag_set(tp, 5755_PLUS);
16098
16099        if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16100            tg3_asic_rev(tp) == ASIC_REV_5714)
16101                tg3_flag_set(tp, 5780_CLASS);
16102
16103        if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16104            tg3_asic_rev(tp) == ASIC_REV_5752 ||
16105            tg3_asic_rev(tp) == ASIC_REV_5906 ||
16106            tg3_flag(tp, 5755_PLUS) ||
16107            tg3_flag(tp, 5780_CLASS))
16108                tg3_flag_set(tp, 5750_PLUS);
16109
16110        if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16111            tg3_flag(tp, 5750_PLUS))
16112                tg3_flag_set(tp, 5705_PLUS);
16113}
16114
16115static bool tg3_10_100_only_device(struct tg3 *tp,
16116                                   const struct pci_device_id *ent)
16117{
16118        u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16119
16120        if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16121             (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16122            (tp->phy_flags & TG3_PHYFLG_IS_FET))
16123                return true;
16124
16125        if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16126                if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16127                        if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16128                                return true;
16129                } else {
16130                        return true;
16131                }
16132        }
16133
16134        return false;
16135}
16136
16137static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16138{
16139        u32 misc_ctrl_reg;
16140        u32 pci_state_reg, grc_misc_cfg;
16141        u32 val;
16142        u16 pci_cmd;
16143        int err;
16144
16145        /* Force memory write invalidate off.  If we leave it on,
16146         * then on 5700_BX chips we have to enable a workaround.
16147         * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16148         * to match the cacheline size.  The Broadcom driver have this
16149         * workaround but turns MWI off all the times so never uses
16150         * it.  This seems to suggest that the workaround is insufficient.
16151         */
16152        pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16153        pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16154        pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16155
16156        /* Important! -- Make sure register accesses are byteswapped
16157         * correctly.  Also, for those chips that require it, make
16158         * sure that indirect register accesses are enabled before
16159         * the first operation.
16160         */
16161        pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16162                              &misc_ctrl_reg);
16163        tp->misc_host_ctrl |= (misc_ctrl_reg &
16164                               MISC_HOST_CTRL_CHIPREV);
16165        pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16166                               tp->misc_host_ctrl);
16167
16168        tg3_detect_asic_rev(tp, misc_ctrl_reg);
16169
16170        /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16171         * we need to disable memory and use config. cycles
16172         * only to access all registers. The 5702/03 chips
16173         * can mistakenly decode the special cycles from the
16174         * ICH chipsets as memory write cycles, causing corruption
16175         * of register and memory space. Only certain ICH bridges
16176         * will drive special cycles with non-zero data during the
16177         * address phase which can fall within the 5703's address
16178         * range. This is not an ICH bug as the PCI spec allows
16179         * non-zero address during special cycles. However, only
16180         * these ICH bridges are known to drive non-zero addresses
16181         * during special cycles.
16182         *
16183         * Since special cycles do not cross PCI bridges, we only
16184         * enable this workaround if the 5703 is on the secondary
16185         * bus of these ICH bridges.
16186         */
16187        if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16188            (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16189                static struct tg3_dev_id {
16190                        u32     vendor;
16191                        u32     device;
16192                        u32     rev;
16193                } ich_chipsets[] = {
16194                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16195                          PCI_ANY_ID },
16196                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16197                          PCI_ANY_ID },
16198                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16199                          0xa },
16200                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16201                          PCI_ANY_ID },
16202                        { },
16203                };
16204                struct tg3_dev_id *pci_id = &ich_chipsets[0];
16205                struct pci_dev *bridge = NULL;
16206
16207                while (pci_id->vendor != 0) {
16208                        bridge = pci_get_device(pci_id->vendor, pci_id->device,
16209                                                bridge);
16210                        if (!bridge) {
16211                                pci_id++;
16212                                continue;
16213                        }
16214                        if (pci_id->rev != PCI_ANY_ID) {
16215                                if (bridge->revision > pci_id->rev)
16216                                        continue;
16217                        }
16218                        if (bridge->subordinate &&
16219                            (bridge->subordinate->number ==
16220                             tp->pdev->bus->number)) {
16221                                tg3_flag_set(tp, ICH_WORKAROUND);
16222                                pci_dev_put(bridge);
16223                                break;
16224                        }
16225                }
16226        }
16227
16228        if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16229                static struct tg3_dev_id {
16230                        u32     vendor;
16231                        u32     device;
16232                } bridge_chipsets[] = {
16233                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16234                        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16235                        { },
16236                };
16237                struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16238                struct pci_dev *bridge = NULL;
16239
16240                while (pci_id->vendor != 0) {
16241                        bridge = pci_get_device(pci_id->vendor,
16242                                                pci_id->device,
16243                                                bridge);
16244                        if (!bridge) {
16245                                pci_id++;
16246                                continue;
16247                        }
16248                        if (bridge->subordinate &&
16249                            (bridge->subordinate->number <=
16250                             tp->pdev->bus->number) &&
16251                            (bridge->subordinate->busn_res.end >=
16252                             tp->pdev->bus->number)) {
16253                                tg3_flag_set(tp, 5701_DMA_BUG);
16254                                pci_dev_put(bridge);
16255                                break;
16256                        }
16257                }
16258        }
16259
16260        /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16261         * DMA addresses > 40-bit. This bridge may have other additional
16262         * 57xx devices behind it in some 4-port NIC designs for example.
16263         * Any tg3 device found behind the bridge will also need the 40-bit
16264         * DMA workaround.
16265         */
16266        if (tg3_flag(tp, 5780_CLASS)) {
16267                tg3_flag_set(tp, 40BIT_DMA_BUG);
16268                tp->msi_cap = tp->pdev->msi_cap;
16269        } else {
16270                struct pci_dev *bridge = NULL;
16271
16272                do {
16273                        bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16274                                                PCI_DEVICE_ID_SERVERWORKS_EPB,
16275                                                bridge);
16276                        if (bridge && bridge->subordinate &&
16277                            (bridge->subordinate->number <=
16278                             tp->pdev->bus->number) &&
16279                            (bridge->subordinate->busn_res.end >=
16280                             tp->pdev->bus->number)) {
16281                                tg3_flag_set(tp, 40BIT_DMA_BUG);
16282                                pci_dev_put(bridge);
16283                                break;
16284                        }
16285                } while (bridge);
16286        }
16287
16288        if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16289            tg3_asic_rev(tp) == ASIC_REV_5714)
16290                tp->pdev_peer = tg3_find_peer(tp);
16291
16292        /* Determine TSO capabilities */
16293        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16294                ; /* Do nothing. HW bug. */
16295        else if (tg3_flag(tp, 57765_PLUS))
16296                tg3_flag_set(tp, HW_TSO_3);
16297        else if (tg3_flag(tp, 5755_PLUS) ||
16298                 tg3_asic_rev(tp) == ASIC_REV_5906)
16299                tg3_flag_set(tp, HW_TSO_2);
16300        else if (tg3_flag(tp, 5750_PLUS)) {
16301                tg3_flag_set(tp, HW_TSO_1);
16302                tg3_flag_set(tp, TSO_BUG);
16303                if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16304                    tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16305                        tg3_flag_clear(tp, TSO_BUG);
16306        } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16307                   tg3_asic_rev(tp) != ASIC_REV_5701 &&
16308                   tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16309                tg3_flag_set(tp, FW_TSO);
16310                tg3_flag_set(tp, TSO_BUG);
16311                if (tg3_asic_rev(tp) == ASIC_REV_5705)
16312                        tp->fw_needed = FIRMWARE_TG3TSO5;
16313                else
16314                        tp->fw_needed = FIRMWARE_TG3TSO;
16315        }
16316
16317        /* Selectively allow TSO based on operating conditions */
16318        if (tg3_flag(tp, HW_TSO_1) ||
16319            tg3_flag(tp, HW_TSO_2) ||
16320            tg3_flag(tp, HW_TSO_3) ||
16321            tg3_flag(tp, FW_TSO)) {
16322                /* For firmware TSO, assume ASF is disabled.
16323                 * We'll disable TSO later if we discover ASF
16324                 * is enabled in tg3_get_eeprom_hw_cfg().
16325                 */
16326                tg3_flag_set(tp, TSO_CAPABLE);
16327        } else {
16328                tg3_flag_clear(tp, TSO_CAPABLE);
16329                tg3_flag_clear(tp, TSO_BUG);
16330                tp->fw_needed = NULL;
16331        }
16332
16333        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16334                tp->fw_needed = FIRMWARE_TG3;
16335
16336        if (tg3_asic_rev(tp) == ASIC_REV_57766)
16337                tp->fw_needed = FIRMWARE_TG357766;
16338
16339        tp->irq_max = 1;
16340
16341        if (tg3_flag(tp, 5750_PLUS)) {
16342                tg3_flag_set(tp, SUPPORT_MSI);
16343                if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16344                    tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16345                    (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16346                     tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16347                     tp->pdev_peer == tp->pdev))
16348                        tg3_flag_clear(tp, SUPPORT_MSI);
16349
16350                if (tg3_flag(tp, 5755_PLUS) ||
16351                    tg3_asic_rev(tp) == ASIC_REV_5906) {
16352                        tg3_flag_set(tp, 1SHOT_MSI);
16353                }
16354
16355                if (tg3_flag(tp, 57765_PLUS)) {
16356                        tg3_flag_set(tp, SUPPORT_MSIX);
16357                        tp->irq_max = TG3_IRQ_MAX_VECS;
16358                }
16359        }
16360
16361        tp->txq_max = 1;
16362        tp->rxq_max = 1;
16363        if (tp->irq_max > 1) {
16364                tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16365                tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16366
16367                if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16368                    tg3_asic_rev(tp) == ASIC_REV_5720)
16369                        tp->txq_max = tp->irq_max - 1;
16370        }
16371
16372        if (tg3_flag(tp, 5755_PLUS) ||
16373            tg3_asic_rev(tp) == ASIC_REV_5906)
16374                tg3_flag_set(tp, SHORT_DMA_BUG);
16375
16376        if (tg3_asic_rev(tp) == ASIC_REV_5719)
16377                tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16378
16379        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16380            tg3_asic_rev(tp) == ASIC_REV_5719 ||
16381            tg3_asic_rev(tp) == ASIC_REV_5720 ||
16382            tg3_asic_rev(tp) == ASIC_REV_5762)
16383                tg3_flag_set(tp, LRG_PROD_RING_CAP);
16384
16385        if (tg3_flag(tp, 57765_PLUS) &&
16386            tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16387                tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16388
16389        if (!tg3_flag(tp, 5705_PLUS) ||
16390            tg3_flag(tp, 5780_CLASS) ||
16391            tg3_flag(tp, USE_JUMBO_BDFLAG))
16392                tg3_flag_set(tp, JUMBO_CAPABLE);
16393
16394        pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16395                              &pci_state_reg);
16396
16397        if (pci_is_pcie(tp->pdev)) {
16398                u16 lnkctl;
16399
16400                tg3_flag_set(tp, PCI_EXPRESS);
16401
16402                pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16403                if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16404                        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16405                                tg3_flag_clear(tp, HW_TSO_2);
16406                                tg3_flag_clear(tp, TSO_CAPABLE);
16407                        }
16408                        if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16409                            tg3_asic_rev(tp) == ASIC_REV_5761 ||
16410                            tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16411                            tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16412                                tg3_flag_set(tp, CLKREQ_BUG);
16413                } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16414                        tg3_flag_set(tp, L1PLLPD_EN);
16415                }
16416        } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16417                /* BCM5785 devices are effectively PCIe devices, and should
16418                 * follow PCIe codepaths, but do not have a PCIe capabilities
16419                 * section.
16420                 */
16421                tg3_flag_set(tp, PCI_EXPRESS);
16422        } else if (!tg3_flag(tp, 5705_PLUS) ||
16423                   tg3_flag(tp, 5780_CLASS)) {
16424                tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16425                if (!tp->pcix_cap) {
16426                        dev_err(&tp->pdev->dev,
16427                                "Cannot find PCI-X capability, aborting\n");
16428                        return -EIO;
16429                }
16430
16431                if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16432                        tg3_flag_set(tp, PCIX_MODE);
16433        }
16434
16435        /* If we have an AMD 762 or VIA K8T800 chipset, write
16436         * reordering to the mailbox registers done by the host
16437         * controller can cause major troubles.  We read back from
16438         * every mailbox register write to force the writes to be
16439         * posted to the chip in order.
16440         */
16441        if (pci_dev_present(tg3_write_reorder_chipsets) &&
16442            !tg3_flag(tp, PCI_EXPRESS))
16443                tg3_flag_set(tp, MBOX_WRITE_REORDER);
16444
16445        pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16446                             &tp->pci_cacheline_sz);
16447        pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16448                             &tp->pci_lat_timer);
16449        if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16450            tp->pci_lat_timer < 64) {
16451                tp->pci_lat_timer = 64;
16452                pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16453                                      tp->pci_lat_timer);
16454        }
16455
16456        /* Important! -- It is critical that the PCI-X hw workaround
16457         * situation is decided before the first MMIO register access.
16458         */
16459        if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16460                /* 5700 BX chips need to have their TX producer index
16461                 * mailboxes written twice to workaround a bug.
16462                 */
16463                tg3_flag_set(tp, TXD_MBOX_HWBUG);
16464
16465                /* If we are in PCI-X mode, enable register write workaround.
16466                 *
16467                 * The workaround is to use indirect register accesses
16468                 * for all chip writes not to mailbox registers.
16469                 */
16470                if (tg3_flag(tp, PCIX_MODE)) {
16471                        u32 pm_reg;
16472
16473                        tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16474
16475                        /* The chip can have it's power management PCI config
16476                         * space registers clobbered due to this bug.
16477                         * So explicitly force the chip into D0 here.
16478                         */
16479                        pci_read_config_dword(tp->pdev,
16480                                              tp->pdev->pm_cap + PCI_PM_CTRL,
16481                                              &pm_reg);
16482                        pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16483                        pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16484                        pci_write_config_dword(tp->pdev,
16485                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16486                                               pm_reg);
16487
16488                        /* Also, force SERR#/PERR# in PCI command. */
16489                        pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16490                        pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16491                        pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16492                }
16493        }
16494
16495        if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16496                tg3_flag_set(tp, PCI_HIGH_SPEED);
16497        if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16498                tg3_flag_set(tp, PCI_32BIT);
16499
16500        /* Chip-specific fixup from Broadcom driver */
16501        if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16502            (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16503                pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16504                pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16505        }
16506
16507        /* Default fast path register access methods */
16508        tp->read32 = tg3_read32;
16509        tp->write32 = tg3_write32;
16510        tp->read32_mbox = tg3_read32;
16511        tp->write32_mbox = tg3_write32;
16512        tp->write32_tx_mbox = tg3_write32;
16513        tp->write32_rx_mbox = tg3_write32;
16514
16515        /* Various workaround register access methods */
16516        if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16517                tp->write32 = tg3_write_indirect_reg32;
16518        else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16519                 (tg3_flag(tp, PCI_EXPRESS) &&
16520                  tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16521                /*
16522                 * Back to back register writes can cause problems on these
16523                 * chips, the workaround is to read back all reg writes
16524                 * except those to mailbox regs.
16525                 *
16526                 * See tg3_write_indirect_reg32().
16527                 */
16528                tp->write32 = tg3_write_flush_reg32;
16529        }
16530
16531        if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16532                tp->write32_tx_mbox = tg3_write32_tx_mbox;
16533                if (tg3_flag(tp, MBOX_WRITE_REORDER))
16534                        tp->write32_rx_mbox = tg3_write_flush_reg32;
16535        }
16536
16537        if (tg3_flag(tp, ICH_WORKAROUND)) {
16538                tp->read32 = tg3_read_indirect_reg32;
16539                tp->write32 = tg3_write_indirect_reg32;
16540                tp->read32_mbox = tg3_read_indirect_mbox;
16541                tp->write32_mbox = tg3_write_indirect_mbox;
16542                tp->write32_tx_mbox = tg3_write_indirect_mbox;
16543                tp->write32_rx_mbox = tg3_write_indirect_mbox;
16544
16545                iounmap(tp->regs);
16546                tp->regs = NULL;
16547
16548                pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16549                pci_cmd &= ~PCI_COMMAND_MEMORY;
16550                pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16551        }
16552        if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16553                tp->read32_mbox = tg3_read32_mbox_5906;
16554                tp->write32_mbox = tg3_write32_mbox_5906;
16555                tp->write32_tx_mbox = tg3_write32_mbox_5906;
16556                tp->write32_rx_mbox = tg3_write32_mbox_5906;
16557        }
16558
16559        if (tp->write32 == tg3_write_indirect_reg32 ||
16560            (tg3_flag(tp, PCIX_MODE) &&
16561             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16562              tg3_asic_rev(tp) == ASIC_REV_5701)))
16563                tg3_flag_set(tp, SRAM_USE_CONFIG);
16564
16565        /* The memory arbiter has to be enabled in order for SRAM accesses
16566         * to succeed.  Normally on powerup the tg3 chip firmware will make
16567         * sure it is enabled, but other entities such as system netboot
16568         * code might disable it.
16569         */
16570        val = tr32(MEMARB_MODE);
16571        tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16572
16573        tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16574        if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16575            tg3_flag(tp, 5780_CLASS)) {
16576                if (tg3_flag(tp, PCIX_MODE)) {
16577                        pci_read_config_dword(tp->pdev,
16578                                              tp->pcix_cap + PCI_X_STATUS,
16579                                              &val);
16580                        tp->pci_fn = val & 0x7;
16581                }
16582        } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16583                   tg3_asic_rev(tp) == ASIC_REV_5719 ||
16584                   tg3_asic_rev(tp) == ASIC_REV_5720) {
16585                tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16586                if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16587                        val = tr32(TG3_CPMU_STATUS);
16588
16589                if (tg3_asic_rev(tp) == ASIC_REV_5717)
16590                        tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16591                else
16592                        tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16593                                     TG3_CPMU_STATUS_FSHFT_5719;
16594        }
16595
16596        if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16597                tp->write32_tx_mbox = tg3_write_flush_reg32;
16598                tp->write32_rx_mbox = tg3_write_flush_reg32;
16599        }
16600
16601        /* Get eeprom hw config before calling tg3_set_power_state().
16602         * In particular, the TG3_FLAG_IS_NIC flag must be
16603         * determined before calling tg3_set_power_state() so that
16604         * we know whether or not to switch out of Vaux power.
16605         * When the flag is set, it means that GPIO1 is used for eeprom
16606         * write protect and also implies that it is a LOM where GPIOs
16607         * are not used to switch power.
16608         */
16609        tg3_get_eeprom_hw_cfg(tp);
16610
16611        if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16612                tg3_flag_clear(tp, TSO_CAPABLE);
16613                tg3_flag_clear(tp, TSO_BUG);
16614                tp->fw_needed = NULL;
16615        }
16616
16617        if (tg3_flag(tp, ENABLE_APE)) {
16618                /* Allow reads and writes to the
16619                 * APE register and memory space.
16620                 */
16621                pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16622                                 PCISTATE_ALLOW_APE_SHMEM_WR |
16623                                 PCISTATE_ALLOW_APE_PSPACE_WR;
16624                pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16625                                       pci_state_reg);
16626
16627                tg3_ape_lock_init(tp);
16628                tp->ape_hb_interval =
16629                        msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC);
16630        }
16631
16632        /* Set up tp->grc_local_ctrl before calling
16633         * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16634         * will bring 5700's external PHY out of reset.
16635         * It is also used as eeprom write protect on LOMs.
16636         */
16637        tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16638        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16639            tg3_flag(tp, EEPROM_WRITE_PROT))
16640                tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16641                                       GRC_LCLCTRL_GPIO_OUTPUT1);
16642        /* Unused GPIO3 must be driven as output on 5752 because there
16643         * are no pull-up resistors on unused GPIO pins.
16644         */
16645        else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16646                tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16647
16648        if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16649            tg3_asic_rev(tp) == ASIC_REV_57780 ||
16650            tg3_flag(tp, 57765_CLASS))
16651                tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16652
16653        if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16654            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16655                /* Turn off the debug UART. */
16656                tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16657                if (tg3_flag(tp, IS_NIC))
16658                        /* Keep VMain power. */
16659                        tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16660                                              GRC_LCLCTRL_GPIO_OUTPUT0;
16661        }
16662
16663        if (tg3_asic_rev(tp) == ASIC_REV_5762)
16664                tp->grc_local_ctrl |=
16665                        tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16666
16667        /* Switch out of Vaux if it is a NIC */
16668        tg3_pwrsrc_switch_to_vmain(tp);
16669
16670        /* Derive initial jumbo mode from MTU assigned in
16671         * ether_setup() via the alloc_etherdev() call
16672         */
16673        if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16674                tg3_flag_set(tp, JUMBO_RING_ENABLE);
16675
16676        /* Determine WakeOnLan speed to use. */
16677        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16678            tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16679            tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16680            tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16681                tg3_flag_clear(tp, WOL_SPEED_100MB);
16682        } else {
16683                tg3_flag_set(tp, WOL_SPEED_100MB);
16684        }
16685
16686        if (tg3_asic_rev(tp) == ASIC_REV_5906)
16687                tp->phy_flags |= TG3_PHYFLG_IS_FET;
16688
16689        /* A few boards don't want Ethernet@WireSpeed phy feature */
16690        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16691            (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16692             (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16693             (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16694            (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16695            (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16696                tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16697
16698        if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16699            tg3_chip_rev(tp) == CHIPREV_5704_AX)
16700                tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16701        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16702                tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16703
16704        if (tg3_flag(tp, 5705_PLUS) &&
16705            !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16706            tg3_asic_rev(tp) != ASIC_REV_5785 &&
16707            tg3_asic_rev(tp) != ASIC_REV_57780 &&
16708            !tg3_flag(tp, 57765_PLUS)) {
16709                if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16710                    tg3_asic_rev(tp) == ASIC_REV_5787 ||
16711                    tg3_asic_rev(tp) == ASIC_REV_5784 ||
16712                    tg3_asic_rev(tp) == ASIC_REV_5761) {
16713                        if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16714                            tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16715                                tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16716                        if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16717                                tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16718                } else
16719                        tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16720        }
16721
16722        if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16723            tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16724                tp->phy_otp = tg3_read_otp_phycfg(tp);
16725                if (tp->phy_otp == 0)
16726                        tp->phy_otp = TG3_OTP_DEFAULT;
16727        }
16728
16729        if (tg3_flag(tp, CPMU_PRESENT))
16730                tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16731        else
16732                tp->mi_mode = MAC_MI_MODE_BASE;
16733
16734        tp->coalesce_mode = 0;
16735        if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16736            tg3_chip_rev(tp) != CHIPREV_5700_BX)
16737                tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16738
16739        /* Set these bits to enable statistics workaround. */
16740        if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16741            tg3_asic_rev(tp) == ASIC_REV_5762 ||
16742            tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16743            tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16744                tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16745                tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16746        }
16747
16748        if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16749            tg3_asic_rev(tp) == ASIC_REV_57780)
16750                tg3_flag_set(tp, USE_PHYLIB);
16751
16752        err = tg3_mdio_init(tp);
16753        if (err)
16754                return err;
16755
16756        /* Initialize data/descriptor byte/word swapping. */
16757        val = tr32(GRC_MODE);
16758        if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16759            tg3_asic_rev(tp) == ASIC_REV_5762)
16760                val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16761                        GRC_MODE_WORD_SWAP_B2HRX_DATA |
16762                        GRC_MODE_B2HRX_ENABLE |
16763                        GRC_MODE_HTX2B_ENABLE |
16764                        GRC_MODE_HOST_STACKUP);
16765        else
16766                val &= GRC_MODE_HOST_STACKUP;
16767
16768        tw32(GRC_MODE, val | tp->grc_mode);
16769
16770        tg3_switch_clocks(tp);
16771
16772        /* Clear this out for sanity. */
16773        tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16774
16775        /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16776        tw32(TG3PCI_REG_BASE_ADDR, 0);
16777
16778        pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16779                              &pci_state_reg);
16780        if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16781            !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16782                if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16783                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16784                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16785                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16786                        void __iomem *sram_base;
16787
16788                        /* Write some dummy words into the SRAM status block
16789                         * area, see if it reads back correctly.  If the return
16790                         * value is bad, force enable the PCIX workaround.
16791                         */
16792                        sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16793
16794                        writel(0x00000000, sram_base);
16795                        writel(0x00000000, sram_base + 4);
16796                        writel(0xffffffff, sram_base + 4);
16797                        if (readl(sram_base) != 0x00000000)
16798                                tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16799                }
16800        }
16801
16802        udelay(50);
16803        tg3_nvram_init(tp);
16804
16805        /* If the device has an NVRAM, no need to load patch firmware */
16806        if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16807            !tg3_flag(tp, NO_NVRAM))
16808                tp->fw_needed = NULL;
16809
16810        grc_misc_cfg = tr32(GRC_MISC_CFG);
16811        grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16812
16813        if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16814            (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16815             grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16816                tg3_flag_set(tp, IS_5788);
16817
16818        if (!tg3_flag(tp, IS_5788) &&
16819            tg3_asic_rev(tp) != ASIC_REV_5700)
16820                tg3_flag_set(tp, TAGGED_STATUS);
16821        if (tg3_flag(tp, TAGGED_STATUS)) {
16822                tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16823                                      HOSTCC_MODE_CLRTICK_TXBD);
16824
16825                tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16826                pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16827                                       tp->misc_host_ctrl);
16828        }
16829
16830        /* Preserve the APE MAC_MODE bits */
16831        if (tg3_flag(tp, ENABLE_APE))
16832                tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16833        else
16834                tp->mac_mode = 0;
16835
16836        if (tg3_10_100_only_device(tp, ent))
16837                tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16838
16839        err = tg3_phy_probe(tp);
16840        if (err) {
16841                dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16842                /* ... but do not return immediately ... */
16843                tg3_mdio_fini(tp);
16844        }
16845
16846        tg3_read_vpd(tp);
16847        tg3_read_fw_ver(tp);
16848
16849        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16850                tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16851        } else {
16852                if (tg3_asic_rev(tp) == ASIC_REV_5700)
16853                        tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16854                else
16855                        tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16856        }
16857
16858        /* 5700 {AX,BX} chips have a broken status block link
16859         * change bit implementation, so we must use the
16860         * status register in those cases.
16861         */
16862        if (tg3_asic_rev(tp) == ASIC_REV_5700)
16863                tg3_flag_set(tp, USE_LINKCHG_REG);
16864        else
16865                tg3_flag_clear(tp, USE_LINKCHG_REG);
16866
16867        /* The led_ctrl is set during tg3_phy_probe, here we might
16868         * have to force the link status polling mechanism based
16869         * upon subsystem IDs.
16870         */
16871        if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16872            tg3_asic_rev(tp) == ASIC_REV_5701 &&
16873            !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16874                tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16875                tg3_flag_set(tp, USE_LINKCHG_REG);
16876        }
16877
16878        /* For all SERDES we poll the MAC status register. */
16879        if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16880                tg3_flag_set(tp, POLL_SERDES);
16881        else
16882                tg3_flag_clear(tp, POLL_SERDES);
16883
16884        if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16885                tg3_flag_set(tp, POLL_CPMU_LINK);
16886
16887        tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16888        tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16889        if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16890            tg3_flag(tp, PCIX_MODE)) {
16891                tp->rx_offset = NET_SKB_PAD;
16892#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16893                tp->rx_copy_thresh = ~(u16)0;
16894#endif
16895        }
16896
16897        tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16898        tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16899        tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16900
16901        tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16902
16903        /* Increment the rx prod index on the rx std ring by at most
16904         * 8 for these chips to workaround hw errata.
16905         */
16906        if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16907            tg3_asic_rev(tp) == ASIC_REV_5752 ||
16908            tg3_asic_rev(tp) == ASIC_REV_5755)
16909                tp->rx_std_max_post = 8;
16910
16911        if (tg3_flag(tp, ASPM_WORKAROUND))
16912                tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16913                                     PCIE_PWR_MGMT_L1_THRESH_MSK;
16914
16915        return err;
16916}
16917
16918static int tg3_get_device_address(struct tg3 *tp)
16919{
16920        struct net_device *dev = tp->dev;
16921        u32 hi, lo, mac_offset;
16922        int addr_ok = 0;
16923        int err;
16924
16925        if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr))
16926                return 0;
16927
16928        if (tg3_flag(tp, IS_SSB_CORE)) {
16929                err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
16930                if (!err && is_valid_ether_addr(&dev->dev_addr[0]))
16931                        return 0;
16932        }
16933
16934        mac_offset = 0x7c;
16935        if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16936            tg3_flag(tp, 5780_CLASS)) {
16937                if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16938                        mac_offset = 0xcc;
16939                if (tg3_nvram_lock(tp))
16940                        tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16941                else
16942                        tg3_nvram_unlock(tp);
16943        } else if (tg3_flag(tp, 5717_PLUS)) {
16944                if (tp->pci_fn & 1)
16945                        mac_offset = 0xcc;
16946                if (tp->pci_fn > 1)
16947                        mac_offset += 0x18c;
16948        } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16949                mac_offset = 0x10;
16950
16951        /* First try to get it from MAC address mailbox. */
16952        tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16953        if ((hi >> 16) == 0x484b) {
16954                dev->dev_addr[0] = (hi >>  8) & 0xff;
16955                dev->dev_addr[1] = (hi >>  0) & 0xff;
16956
16957                tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16958                dev->dev_addr[2] = (lo >> 24) & 0xff;
16959                dev->dev_addr[3] = (lo >> 16) & 0xff;
16960                dev->dev_addr[4] = (lo >>  8) & 0xff;
16961                dev->dev_addr[5] = (lo >>  0) & 0xff;
16962
16963                /* Some old bootcode may report a 0 MAC address in SRAM */
16964                addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
16965        }
16966        if (!addr_ok) {
16967                /* Next, try NVRAM. */
16968                if (!tg3_flag(tp, NO_NVRAM) &&
16969                    !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16970                    !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16971                        memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
16972                        memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
16973                }
16974                /* Finally just fetch it out of the MAC control regs. */
16975                else {
16976                        hi = tr32(MAC_ADDR_0_HIGH);
16977                        lo = tr32(MAC_ADDR_0_LOW);
16978
16979                        dev->dev_addr[5] = lo & 0xff;
16980                        dev->dev_addr[4] = (lo >> 8) & 0xff;
16981                        dev->dev_addr[3] = (lo >> 16) & 0xff;
16982                        dev->dev_addr[2] = (lo >> 24) & 0xff;
16983                        dev->dev_addr[1] = hi & 0xff;
16984                        dev->dev_addr[0] = (hi >> 8) & 0xff;
16985                }
16986        }
16987
16988        if (!is_valid_ether_addr(&dev->dev_addr[0]))
16989                return -EINVAL;
16990        return 0;
16991}
16992
16993#define BOUNDARY_SINGLE_CACHELINE       1
16994#define BOUNDARY_MULTI_CACHELINE        2
16995
16996static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
16997{
16998        int cacheline_size;
16999        u8 byte;
17000        int goal;
17001
17002        pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
17003        if (byte == 0)
17004                cacheline_size = 1024;
17005        else
17006                cacheline_size = (int) byte * 4;
17007
17008        /* On 5703 and later chips, the boundary bits have no
17009         * effect.
17010         */
17011        if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17012            tg3_asic_rev(tp) != ASIC_REV_5701 &&
17013            !tg3_flag(tp, PCI_EXPRESS))
17014                goto out;
17015
17016#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17017        goal = BOUNDARY_MULTI_CACHELINE;
17018#else
17019#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17020        goal = BOUNDARY_SINGLE_CACHELINE;
17021#else
17022        goal = 0;
17023#endif
17024#endif
17025
17026        if (tg3_flag(tp, 57765_PLUS)) {
17027                val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17028                goto out;
17029        }
17030
17031        if (!goal)
17032                goto out;
17033
17034        /* PCI controllers on most RISC systems tend to disconnect
17035         * when a device tries to burst across a cache-line boundary.
17036         * Therefore, letting tg3 do so just wastes PCI bandwidth.
17037         *
17038         * Unfortunately, for PCI-E there are only limited
17039         * write-side controls for this, and thus for reads
17040         * we will still get the disconnects.  We'll also waste
17041         * these PCI cycles for both read and write for chips
17042         * other than 5700 and 5701 which do not implement the
17043         * boundary bits.
17044         */
17045        if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17046                switch (cacheline_size) {
17047                case 16:
17048                case 32:
17049                case 64:
17050                case 128:
17051                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17052                                val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17053                                        DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17054                        } else {
17055                                val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17056                                        DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17057                        }
17058                        break;
17059
17060                case 256:
17061                        val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17062                                DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17063                        break;
17064
17065                default:
17066                        val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17067                                DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17068                        break;
17069                }
17070        } else if (tg3_flag(tp, PCI_EXPRESS)) {
17071                switch (cacheline_size) {
17072                case 16:
17073                case 32:
17074                case 64:
17075                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17076                                val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17077                                val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17078                                break;
17079                        }
17080                        fallthrough;
17081                case 128:
17082                default:
17083                        val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17084                        val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17085                        break;
17086                }
17087        } else {
17088                switch (cacheline_size) {
17089                case 16:
17090                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17091                                val |= (DMA_RWCTRL_READ_BNDRY_16 |
17092                                        DMA_RWCTRL_WRITE_BNDRY_16);
17093                                break;
17094                        }
17095                        fallthrough;
17096                case 32:
17097                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17098                                val |= (DMA_RWCTRL_READ_BNDRY_32 |
17099                                        DMA_RWCTRL_WRITE_BNDRY_32);
17100                                break;
17101                        }
17102                        fallthrough;
17103                case 64:
17104                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17105                                val |= (DMA_RWCTRL_READ_BNDRY_64 |
17106                                        DMA_RWCTRL_WRITE_BNDRY_64);
17107                                break;
17108                        }
17109                        fallthrough;
17110                case 128:
17111                        if (goal == BOUNDARY_SINGLE_CACHELINE) {
17112                                val |= (DMA_RWCTRL_READ_BNDRY_128 |
17113                                        DMA_RWCTRL_WRITE_BNDRY_128);
17114                                break;
17115                        }
17116                        fallthrough;
17117                case 256:
17118                        val |= (DMA_RWCTRL_READ_BNDRY_256 |
17119                                DMA_RWCTRL_WRITE_BNDRY_256);
17120                        break;
17121                case 512:
17122                        val |= (DMA_RWCTRL_READ_BNDRY_512 |
17123                                DMA_RWCTRL_WRITE_BNDRY_512);
17124                        break;
17125                case 1024:
17126                default:
17127                        val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17128                                DMA_RWCTRL_WRITE_BNDRY_1024);
17129                        break;
17130                }
17131        }
17132
17133out:
17134        return val;
17135}
17136
17137static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17138                           int size, bool to_device)
17139{
17140        struct tg3_internal_buffer_desc test_desc;
17141        u32 sram_dma_descs;
17142        int i, ret;
17143
17144        sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17145
17146        tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17147        tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17148        tw32(RDMAC_STATUS, 0);
17149        tw32(WDMAC_STATUS, 0);
17150
17151        tw32(BUFMGR_MODE, 0);
17152        tw32(FTQ_RESET, 0);
17153
17154        test_desc.addr_hi = ((u64) buf_dma) >> 32;
17155        test_desc.addr_lo = buf_dma & 0xffffffff;
17156        test_desc.nic_mbuf = 0x00002100;
17157        test_desc.len = size;
17158
17159        /*
17160         * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17161         * the *second* time the tg3 driver was getting loaded after an
17162         * initial scan.
17163         *
17164         * Broadcom tells me:
17165         *   ...the DMA engine is connected to the GRC block and a DMA
17166         *   reset may affect the GRC block in some unpredictable way...
17167         *   The behavior of resets to individual blocks has not been tested.
17168         *
17169         * Broadcom noted the GRC reset will also reset all sub-components.
17170         */
17171        if (to_device) {
17172                test_desc.cqid_sqid = (13 << 8) | 2;
17173
17174                tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17175                udelay(40);
17176        } else {
17177                test_desc.cqid_sqid = (16 << 8) | 7;
17178
17179                tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17180                udelay(40);
17181        }
17182        test_desc.flags = 0x00000005;
17183
17184        for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17185                u32 val;
17186
17187                val = *(((u32 *)&test_desc) + i);
17188                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17189                                       sram_dma_descs + (i * sizeof(u32)));
17190                pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17191        }
17192        pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17193
17194        if (to_device)
17195                tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17196        else
17197                tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17198
17199        ret = -ENODEV;
17200        for (i = 0; i < 40; i++) {
17201                u32 val;
17202
17203                if (to_device)
17204                        val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17205                else
17206                        val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17207                if ((val & 0xffff) == sram_dma_descs) {
17208                        ret = 0;
17209                        break;
17210                }
17211
17212                udelay(100);
17213        }
17214
17215        return ret;
17216}
17217
17218#define TEST_BUFFER_SIZE        0x2000
17219
17220static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17221        { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17222        { },
17223};
17224
17225static int tg3_test_dma(struct tg3 *tp)
17226{
17227        dma_addr_t buf_dma;
17228        u32 *buf, saved_dma_rwctrl;
17229        int ret = 0;
17230
17231        buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17232                                 &buf_dma, GFP_KERNEL);
17233        if (!buf) {
17234                ret = -ENOMEM;
17235                goto out_nofree;
17236        }
17237
17238        tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17239                          (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17240
17241        tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17242
17243        if (tg3_flag(tp, 57765_PLUS))
17244                goto out;
17245
17246        if (tg3_flag(tp, PCI_EXPRESS)) {
17247                /* DMA read watermark not used on PCIE */
17248                tp->dma_rwctrl |= 0x00180000;
17249        } else if (!tg3_flag(tp, PCIX_MODE)) {
17250                if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17251                    tg3_asic_rev(tp) == ASIC_REV_5750)
17252                        tp->dma_rwctrl |= 0x003f0000;
17253                else
17254                        tp->dma_rwctrl |= 0x003f000f;
17255        } else {
17256                if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17257                    tg3_asic_rev(tp) == ASIC_REV_5704) {
17258                        u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17259                        u32 read_water = 0x7;
17260
17261                        /* If the 5704 is behind the EPB bridge, we can
17262                         * do the less restrictive ONE_DMA workaround for
17263                         * better performance.
17264                         */
17265                        if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17266                            tg3_asic_rev(tp) == ASIC_REV_5704)
17267                                tp->dma_rwctrl |= 0x8000;
17268                        else if (ccval == 0x6 || ccval == 0x7)
17269                                tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17270
17271                        if (tg3_asic_rev(tp) == ASIC_REV_5703)
17272                                read_water = 4;
17273                        /* Set bit 23 to enable PCIX hw bug fix */
17274                        tp->dma_rwctrl |=
17275                                (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17276                                (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17277                                (1 << 23);
17278                } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17279                        /* 5780 always in PCIX mode */
17280                        tp->dma_rwctrl |= 0x00144000;
17281                } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17282                        /* 5714 always in PCIX mode */
17283                        tp->dma_rwctrl |= 0x00148000;
17284                } else {
17285                        tp->dma_rwctrl |= 0x001b000f;
17286                }
17287        }
17288        if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17289                tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17290
17291        if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17292            tg3_asic_rev(tp) == ASIC_REV_5704)
17293                tp->dma_rwctrl &= 0xfffffff0;
17294
17295        if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17296            tg3_asic_rev(tp) == ASIC_REV_5701) {
17297                /* Remove this if it causes problems for some boards. */
17298                tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17299
17300                /* On 5700/5701 chips, we need to set this bit.
17301                 * Otherwise the chip will issue cacheline transactions
17302                 * to streamable DMA memory with not all the byte
17303                 * enables turned on.  This is an error on several
17304                 * RISC PCI controllers, in particular sparc64.
17305                 *
17306                 * On 5703/5704 chips, this bit has been reassigned
17307                 * a different meaning.  In particular, it is used
17308                 * on those chips to enable a PCI-X workaround.
17309                 */
17310                tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17311        }
17312
17313        tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17314
17315
17316        if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17317            tg3_asic_rev(tp) != ASIC_REV_5701)
17318                goto out;
17319
17320        /* It is best to perform DMA test with maximum write burst size
17321         * to expose the 5700/5701 write DMA bug.
17322         */
17323        saved_dma_rwctrl = tp->dma_rwctrl;
17324        tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17325        tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17326
17327        while (1) {
17328                u32 *p = buf, i;
17329
17330                for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17331                        p[i] = i;
17332
17333                /* Send the buffer to the chip. */
17334                ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17335                if (ret) {
17336                        dev_err(&tp->pdev->dev,
17337                                "%s: Buffer write failed. err = %d\n",
17338                                __func__, ret);
17339                        break;
17340                }
17341
17342                /* Now read it back. */
17343                ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17344                if (ret) {
17345                        dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17346                                "err = %d\n", __func__, ret);
17347                        break;
17348                }
17349
17350                /* Verify it. */
17351                for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17352                        if (p[i] == i)
17353                                continue;
17354
17355                        if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17356                            DMA_RWCTRL_WRITE_BNDRY_16) {
17357                                tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17358                                tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17359                                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17360                                break;
17361                        } else {
17362                                dev_err(&tp->pdev->dev,
17363                                        "%s: Buffer corrupted on read back! "
17364                                        "(%d != %d)\n", __func__, p[i], i);
17365                                ret = -ENODEV;
17366                                goto out;
17367                        }
17368                }
17369
17370                if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17371                        /* Success. */
17372                        ret = 0;
17373                        break;
17374                }
17375        }
17376        if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17377            DMA_RWCTRL_WRITE_BNDRY_16) {
17378                /* DMA test passed without adjusting DMA boundary,
17379                 * now look for chipsets that are known to expose the
17380                 * DMA bug without failing the test.
17381                 */
17382                if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17383                        tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17384                        tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17385                } else {
17386                        /* Safe to use the calculated DMA boundary. */
17387                        tp->dma_rwctrl = saved_dma_rwctrl;
17388                }
17389
17390                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17391        }
17392
17393out:
17394        dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17395out_nofree:
17396        return ret;
17397}
17398
17399static void tg3_init_bufmgr_config(struct tg3 *tp)
17400{
17401        if (tg3_flag(tp, 57765_PLUS)) {
17402                tp->bufmgr_config.mbuf_read_dma_low_water =
17403                        DEFAULT_MB_RDMA_LOW_WATER_5705;
17404                tp->bufmgr_config.mbuf_mac_rx_low_water =
17405                        DEFAULT_MB_MACRX_LOW_WATER_57765;
17406                tp->bufmgr_config.mbuf_high_water =
17407                        DEFAULT_MB_HIGH_WATER_57765;
17408
17409                tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17410                        DEFAULT_MB_RDMA_LOW_WATER_5705;
17411                tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17412                        DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17413                tp->bufmgr_config.mbuf_high_water_jumbo =
17414                        DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17415        } else if (tg3_flag(tp, 5705_PLUS)) {
17416                tp->bufmgr_config.mbuf_read_dma_low_water =
17417                        DEFAULT_MB_RDMA_LOW_WATER_5705;
17418                tp->bufmgr_config.mbuf_mac_rx_low_water =
17419                        DEFAULT_MB_MACRX_LOW_WATER_5705;
17420                tp->bufmgr_config.mbuf_high_water =
17421                        DEFAULT_MB_HIGH_WATER_5705;
17422                if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17423                        tp->bufmgr_config.mbuf_mac_rx_low_water =
17424                                DEFAULT_MB_MACRX_LOW_WATER_5906;
17425                        tp->bufmgr_config.mbuf_high_water =
17426                                DEFAULT_MB_HIGH_WATER_5906;
17427                }
17428
17429                tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17430                        DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17431                tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17432                        DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17433                tp->bufmgr_config.mbuf_high_water_jumbo =
17434                        DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17435        } else {
17436                tp->bufmgr_config.mbuf_read_dma_low_water =
17437                        DEFAULT_MB_RDMA_LOW_WATER;
17438                tp->bufmgr_config.mbuf_mac_rx_low_water =
17439                        DEFAULT_MB_MACRX_LOW_WATER;
17440                tp->bufmgr_config.mbuf_high_water =
17441                        DEFAULT_MB_HIGH_WATER;
17442
17443                tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17444                        DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17445                tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17446                        DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17447                tp->bufmgr_config.mbuf_high_water_jumbo =
17448                        DEFAULT_MB_HIGH_WATER_JUMBO;
17449        }
17450
17451        tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17452        tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17453}
17454
17455static char *tg3_phy_string(struct tg3 *tp)
17456{
17457        switch (tp->phy_id & TG3_PHY_ID_MASK) {
17458        case TG3_PHY_ID_BCM5400:        return "5400";
17459        case TG3_PHY_ID_BCM5401:        return "5401";
17460        case TG3_PHY_ID_BCM5411:        return "5411";
17461        case TG3_PHY_ID_BCM5701:        return "5701";
17462        case TG3_PHY_ID_BCM5703:        return "5703";
17463        case TG3_PHY_ID_BCM5704:        return "5704";
17464        case TG3_PHY_ID_BCM5705:        return "5705";
17465        case TG3_PHY_ID_BCM5750:        return "5750";
17466        case TG3_PHY_ID_BCM5752:        return "5752";
17467        case TG3_PHY_ID_BCM5714:        return "5714";
17468        case TG3_PHY_ID_BCM5780:        return "5780";
17469        case TG3_PHY_ID_BCM5755:        return "5755";
17470        case TG3_PHY_ID_BCM5787:        return "5787";
17471        case TG3_PHY_ID_BCM5784:        return "5784";
17472        case TG3_PHY_ID_BCM5756:        return "5722/5756";
17473        case TG3_PHY_ID_BCM5906:        return "5906";
17474        case TG3_PHY_ID_BCM5761:        return "5761";
17475        case TG3_PHY_ID_BCM5718C:       return "5718C";
17476        case TG3_PHY_ID_BCM5718S:       return "5718S";
17477        case TG3_PHY_ID_BCM57765:       return "57765";
17478        case TG3_PHY_ID_BCM5719C:       return "5719C";
17479        case TG3_PHY_ID_BCM5720C:       return "5720C";
17480        case TG3_PHY_ID_BCM5762:        return "5762C";
17481        case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17482        case 0:                 return "serdes";
17483        default:                return "unknown";
17484        }
17485}
17486
17487static char *tg3_bus_string(struct tg3 *tp, char *str)
17488{
17489        if (tg3_flag(tp, PCI_EXPRESS)) {
17490                strcpy(str, "PCI Express");
17491                return str;
17492        } else if (tg3_flag(tp, PCIX_MODE)) {
17493                u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17494
17495                strcpy(str, "PCIX:");
17496
17497                if ((clock_ctrl == 7) ||
17498                    ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17499                     GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17500                        strcat(str, "133MHz");
17501                else if (clock_ctrl == 0)
17502                        strcat(str, "33MHz");
17503                else if (clock_ctrl == 2)
17504                        strcat(str, "50MHz");
17505                else if (clock_ctrl == 4)
17506                        strcat(str, "66MHz");
17507                else if (clock_ctrl == 6)
17508                        strcat(str, "100MHz");
17509        } else {
17510                strcpy(str, "PCI:");
17511                if (tg3_flag(tp, PCI_HIGH_SPEED))
17512                        strcat(str, "66MHz");
17513                else
17514                        strcat(str, "33MHz");
17515        }
17516        if (tg3_flag(tp, PCI_32BIT))
17517                strcat(str, ":32-bit");
17518        else
17519                strcat(str, ":64-bit");
17520        return str;
17521}
17522
17523static void tg3_init_coal(struct tg3 *tp)
17524{
17525        struct ethtool_coalesce *ec = &tp->coal;
17526
17527        memset(ec, 0, sizeof(*ec));
17528        ec->cmd = ETHTOOL_GCOALESCE;
17529        ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17530        ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17531        ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17532        ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17533        ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17534        ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17535        ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17536        ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17537        ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17538
17539        if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17540                                 HOSTCC_MODE_CLRTICK_TXBD)) {
17541                ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17542                ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17543                ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17544                ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17545        }
17546
17547        if (tg3_flag(tp, 5705_PLUS)) {
17548                ec->rx_coalesce_usecs_irq = 0;
17549                ec->tx_coalesce_usecs_irq = 0;
17550                ec->stats_block_coalesce_usecs = 0;
17551        }
17552}
17553
17554static int tg3_init_one(struct pci_dev *pdev,
17555                                  const struct pci_device_id *ent)
17556{
17557        struct net_device *dev;
17558        struct tg3 *tp;
17559        int i, err;
17560        u32 sndmbx, rcvmbx, intmbx;
17561        char str[40];
17562        u64 dma_mask, persist_dma_mask;
17563        netdev_features_t features = 0;
17564
17565        err = pci_enable_device(pdev);
17566        if (err) {
17567                dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17568                return err;
17569        }
17570
17571        err = pci_request_regions(pdev, DRV_MODULE_NAME);
17572        if (err) {
17573                dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17574                goto err_out_disable_pdev;
17575        }
17576
17577        pci_set_master(pdev);
17578
17579        dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17580        if (!dev) {
17581                err = -ENOMEM;
17582                goto err_out_free_res;
17583        }
17584
17585        SET_NETDEV_DEV(dev, &pdev->dev);
17586
17587        tp = netdev_priv(dev);
17588        tp->pdev = pdev;
17589        tp->dev = dev;
17590        tp->rx_mode = TG3_DEF_RX_MODE;
17591        tp->tx_mode = TG3_DEF_TX_MODE;
17592        tp->irq_sync = 1;
17593        tp->pcierr_recovery = false;
17594
17595        if (tg3_debug > 0)
17596                tp->msg_enable = tg3_debug;
17597        else
17598                tp->msg_enable = TG3_DEF_MSG_ENABLE;
17599
17600        if (pdev_is_ssb_gige_core(pdev)) {
17601                tg3_flag_set(tp, IS_SSB_CORE);
17602                if (ssb_gige_must_flush_posted_writes(pdev))
17603                        tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17604                if (ssb_gige_one_dma_at_once(pdev))
17605                        tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17606                if (ssb_gige_have_roboswitch(pdev)) {
17607                        tg3_flag_set(tp, USE_PHYLIB);
17608                        tg3_flag_set(tp, ROBOSWITCH);
17609                }
17610                if (ssb_gige_is_rgmii(pdev))
17611                        tg3_flag_set(tp, RGMII_MODE);
17612        }
17613
17614        /* The word/byte swap controls here control register access byte
17615         * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17616         * setting below.
17617         */
17618        tp->misc_host_ctrl =
17619                MISC_HOST_CTRL_MASK_PCI_INT |
17620                MISC_HOST_CTRL_WORD_SWAP |
17621                MISC_HOST_CTRL_INDIR_ACCESS |
17622                MISC_HOST_CTRL_PCISTATE_RW;
17623
17624        /* The NONFRM (non-frame) byte/word swap controls take effect
17625         * on descriptor entries, anything which isn't packet data.
17626         *
17627         * The StrongARM chips on the board (one for tx, one for rx)
17628         * are running in big-endian mode.
17629         */
17630        tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17631                        GRC_MODE_WSWAP_NONFRM_DATA);
17632#ifdef __BIG_ENDIAN
17633        tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17634#endif
17635        spin_lock_init(&tp->lock);
17636        spin_lock_init(&tp->indirect_lock);
17637        INIT_WORK(&tp->reset_task, tg3_reset_task);
17638
17639        tp->regs = pci_ioremap_bar(pdev, BAR_0);
17640        if (!tp->regs) {
17641                dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17642                err = -ENOMEM;
17643                goto err_out_free_dev;
17644        }
17645
17646        if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17647            tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17648            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17649            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17650            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17651            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17652            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17653            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17654            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17655            tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17656            tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17657            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17658            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17659            tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17660            tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17661                tg3_flag_set(tp, ENABLE_APE);
17662                tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17663                if (!tp->aperegs) {
17664                        dev_err(&pdev->dev,
17665                                "Cannot map APE registers, aborting\n");
17666                        err = -ENOMEM;
17667                        goto err_out_iounmap;
17668                }
17669        }
17670
17671        tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17672        tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17673
17674        dev->ethtool_ops = &tg3_ethtool_ops;
17675        dev->watchdog_timeo = TG3_TX_TIMEOUT;
17676        dev->netdev_ops = &tg3_netdev_ops;
17677        dev->irq = pdev->irq;
17678
17679        err = tg3_get_invariants(tp, ent);
17680        if (err) {
17681                dev_err(&pdev->dev,
17682                        "Problem fetching invariants of chip, aborting\n");
17683                goto err_out_apeunmap;
17684        }
17685
17686        /* The EPB bridge inside 5714, 5715, and 5780 and any
17687         * device behind the EPB cannot support DMA addresses > 40-bit.
17688         * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17689         * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17690         * do DMA address check in tg3_start_xmit().
17691         */
17692        if (tg3_flag(tp, IS_5788))
17693                persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17694        else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17695                persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17696#ifdef CONFIG_HIGHMEM
17697                dma_mask = DMA_BIT_MASK(64);
17698#endif
17699        } else
17700                persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17701
17702        /* Configure DMA attributes. */
17703        if (dma_mask > DMA_BIT_MASK(32)) {
17704                err = dma_set_mask(&pdev->dev, dma_mask);
17705                if (!err) {
17706                        features |= NETIF_F_HIGHDMA;
17707                        err = dma_set_coherent_mask(&pdev->dev,
17708                                                    persist_dma_mask);
17709                        if (err < 0) {
17710                                dev_err(&pdev->dev, "Unable to obtain 64 bit "
17711                                        "DMA for consistent allocations\n");
17712                                goto err_out_apeunmap;
17713                        }
17714                }
17715        }
17716        if (err || dma_mask == DMA_BIT_MASK(32)) {
17717                err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
17718                if (err) {
17719                        dev_err(&pdev->dev,
17720                                "No usable DMA configuration, aborting\n");
17721                        goto err_out_apeunmap;
17722                }
17723        }
17724
17725        tg3_init_bufmgr_config(tp);
17726
17727        /* 5700 B0 chips do not support checksumming correctly due
17728         * to hardware bugs.
17729         */
17730        if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17731                features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17732
17733                if (tg3_flag(tp, 5755_PLUS))
17734                        features |= NETIF_F_IPV6_CSUM;
17735        }
17736
17737        /* TSO is on by default on chips that support hardware TSO.
17738         * Firmware TSO on older chips gives lower performance, so it
17739         * is off by default, but can be enabled using ethtool.
17740         */
17741        if ((tg3_flag(tp, HW_TSO_1) ||
17742             tg3_flag(tp, HW_TSO_2) ||
17743             tg3_flag(tp, HW_TSO_3)) &&
17744            (features & NETIF_F_IP_CSUM))
17745                features |= NETIF_F_TSO;
17746        if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17747                if (features & NETIF_F_IPV6_CSUM)
17748                        features |= NETIF_F_TSO6;
17749                if (tg3_flag(tp, HW_TSO_3) ||
17750                    tg3_asic_rev(tp) == ASIC_REV_5761 ||
17751                    (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17752                     tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17753                    tg3_asic_rev(tp) == ASIC_REV_5785 ||
17754                    tg3_asic_rev(tp) == ASIC_REV_57780)
17755                        features |= NETIF_F_TSO_ECN;
17756        }
17757
17758        dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17759                         NETIF_F_HW_VLAN_CTAG_RX;
17760        dev->vlan_features |= features;
17761
17762        /*
17763         * Add loopback capability only for a subset of devices that support
17764         * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17765         * loopback for the remaining devices.
17766         */
17767        if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17768            !tg3_flag(tp, CPMU_PRESENT))
17769                /* Add the loopback capability */
17770                features |= NETIF_F_LOOPBACK;
17771
17772        dev->hw_features |= features;
17773        dev->priv_flags |= IFF_UNICAST_FLT;
17774
17775        /* MTU range: 60 - 9000 or 1500, depending on hardware */
17776        dev->min_mtu = TG3_MIN_MTU;
17777        dev->max_mtu = TG3_MAX_MTU(tp);
17778
17779        if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17780            !tg3_flag(tp, TSO_CAPABLE) &&
17781            !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17782                tg3_flag_set(tp, MAX_RXPEND_64);
17783                tp->rx_pending = 63;
17784        }
17785
17786        err = tg3_get_device_address(tp);
17787        if (err) {
17788                dev_err(&pdev->dev,
17789                        "Could not obtain valid ethernet address, aborting\n");
17790                goto err_out_apeunmap;
17791        }
17792
17793        intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17794        rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17795        sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17796        for (i = 0; i < tp->irq_max; i++) {
17797                struct tg3_napi *tnapi = &tp->napi[i];
17798
17799                tnapi->tp = tp;
17800                tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17801
17802                tnapi->int_mbox = intmbx;
17803                if (i <= 4)
17804                        intmbx += 0x8;
17805                else
17806                        intmbx += 0x4;
17807
17808                tnapi->consmbox = rcvmbx;
17809                tnapi->prodmbox = sndmbx;
17810
17811                if (i)
17812                        tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17813                else
17814                        tnapi->coal_now = HOSTCC_MODE_NOW;
17815
17816                if (!tg3_flag(tp, SUPPORT_MSIX))
17817                        break;
17818
17819                /*
17820                 * If we support MSIX, we'll be using RSS.  If we're using
17821                 * RSS, the first vector only handles link interrupts and the
17822                 * remaining vectors handle rx and tx interrupts.  Reuse the
17823                 * mailbox values for the next iteration.  The values we setup
17824                 * above are still useful for the single vectored mode.
17825                 */
17826                if (!i)
17827                        continue;
17828
17829                rcvmbx += 0x8;
17830
17831                if (sndmbx & 0x4)
17832                        sndmbx -= 0x4;
17833                else
17834                        sndmbx += 0xc;
17835        }
17836
17837        /*
17838         * Reset chip in case UNDI or EFI driver did not shutdown
17839         * DMA self test will enable WDMAC and we'll see (spurious)
17840         * pending DMA on the PCI bus at that point.
17841         */
17842        if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17843            (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17844                tg3_full_lock(tp, 0);
17845                tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17846                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17847                tg3_full_unlock(tp);
17848        }
17849
17850        err = tg3_test_dma(tp);
17851        if (err) {
17852                dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17853                goto err_out_apeunmap;
17854        }
17855
17856        tg3_init_coal(tp);
17857
17858        pci_set_drvdata(pdev, dev);
17859
17860        if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17861            tg3_asic_rev(tp) == ASIC_REV_5720 ||
17862            tg3_asic_rev(tp) == ASIC_REV_5762)
17863                tg3_flag_set(tp, PTP_CAPABLE);
17864
17865        tg3_timer_init(tp);
17866
17867        tg3_carrier_off(tp);
17868
17869        err = register_netdev(dev);
17870        if (err) {
17871                dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17872                goto err_out_apeunmap;
17873        }
17874
17875        if (tg3_flag(tp, PTP_CAPABLE)) {
17876                tg3_ptp_init(tp);
17877                tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17878                                                   &tp->pdev->dev);
17879                if (IS_ERR(tp->ptp_clock))
17880                        tp->ptp_clock = NULL;
17881        }
17882
17883        netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17884                    tp->board_part_number,
17885                    tg3_chip_rev_id(tp),
17886                    tg3_bus_string(tp, str),
17887                    dev->dev_addr);
17888
17889        if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17890                char *ethtype;
17891
17892                if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17893                        ethtype = "10/100Base-TX";
17894                else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17895                        ethtype = "1000Base-SX";
17896                else
17897                        ethtype = "10/100/1000Base-T";
17898
17899                netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17900                            "(WireSpeed[%d], EEE[%d])\n",
17901                            tg3_phy_string(tp), ethtype,
17902                            (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17903                            (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17904        }
17905
17906        netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17907                    (dev->features & NETIF_F_RXCSUM) != 0,
17908                    tg3_flag(tp, USE_LINKCHG_REG) != 0,
17909                    (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17910                    tg3_flag(tp, ENABLE_ASF) != 0,
17911                    tg3_flag(tp, TSO_CAPABLE) != 0);
17912        netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17913                    tp->dma_rwctrl,
17914                    pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17915                    ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17916
17917        pci_save_state(pdev);
17918
17919        return 0;
17920
17921err_out_apeunmap:
17922        if (tp->aperegs) {
17923                iounmap(tp->aperegs);
17924                tp->aperegs = NULL;
17925        }
17926
17927err_out_iounmap:
17928        if (tp->regs) {
17929                iounmap(tp->regs);
17930                tp->regs = NULL;
17931        }
17932
17933err_out_free_dev:
17934        free_netdev(dev);
17935
17936err_out_free_res:
17937        pci_release_regions(pdev);
17938
17939err_out_disable_pdev:
17940        if (pci_is_enabled(pdev))
17941                pci_disable_device(pdev);
17942        return err;
17943}
17944
17945static void tg3_remove_one(struct pci_dev *pdev)
17946{
17947        struct net_device *dev = pci_get_drvdata(pdev);
17948
17949        if (dev) {
17950                struct tg3 *tp = netdev_priv(dev);
17951
17952                tg3_ptp_fini(tp);
17953
17954                release_firmware(tp->fw);
17955
17956                tg3_reset_task_cancel(tp);
17957
17958                if (tg3_flag(tp, USE_PHYLIB)) {
17959                        tg3_phy_fini(tp);
17960                        tg3_mdio_fini(tp);
17961                }
17962
17963                unregister_netdev(dev);
17964                if (tp->aperegs) {
17965                        iounmap(tp->aperegs);
17966                        tp->aperegs = NULL;
17967                }
17968                if (tp->regs) {
17969                        iounmap(tp->regs);
17970                        tp->regs = NULL;
17971                }
17972                free_netdev(dev);
17973                pci_release_regions(pdev);
17974                pci_disable_device(pdev);
17975        }
17976}
17977
17978#ifdef CONFIG_PM_SLEEP
17979static int tg3_suspend(struct device *device)
17980{
17981        struct net_device *dev = dev_get_drvdata(device);
17982        struct tg3 *tp = netdev_priv(dev);
17983        int err = 0;
17984
17985        rtnl_lock();
17986
17987        if (!netif_running(dev))
17988                goto unlock;
17989
17990        tg3_reset_task_cancel(tp);
17991        tg3_phy_stop(tp);
17992        tg3_netif_stop(tp);
17993
17994        tg3_timer_stop(tp);
17995
17996        tg3_full_lock(tp, 1);
17997        tg3_disable_ints(tp);
17998        tg3_full_unlock(tp);
17999
18000        netif_device_detach(dev);
18001
18002        tg3_full_lock(tp, 0);
18003        tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
18004        tg3_flag_clear(tp, INIT_COMPLETE);
18005        tg3_full_unlock(tp);
18006
18007        err = tg3_power_down_prepare(tp);
18008        if (err) {
18009                int err2;
18010
18011                tg3_full_lock(tp, 0);
18012
18013                tg3_flag_set(tp, INIT_COMPLETE);
18014                err2 = tg3_restart_hw(tp, true);
18015                if (err2)
18016                        goto out;
18017
18018                tg3_timer_start(tp);
18019
18020                netif_device_attach(dev);
18021                tg3_netif_start(tp);
18022
18023out:
18024                tg3_full_unlock(tp);
18025
18026                if (!err2)
18027                        tg3_phy_start(tp);
18028        }
18029
18030unlock:
18031        rtnl_unlock();
18032        return err;
18033}
18034
18035static int tg3_resume(struct device *device)
18036{
18037        struct net_device *dev = dev_get_drvdata(device);
18038        struct tg3 *tp = netdev_priv(dev);
18039        int err = 0;
18040
18041        rtnl_lock();
18042
18043        if (!netif_running(dev))
18044                goto unlock;
18045
18046        netif_device_attach(dev);
18047
18048        tg3_full_lock(tp, 0);
18049
18050        tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18051
18052        tg3_flag_set(tp, INIT_COMPLETE);
18053        err = tg3_restart_hw(tp,
18054                             !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18055        if (err)
18056                goto out;
18057
18058        tg3_timer_start(tp);
18059
18060        tg3_netif_start(tp);
18061
18062out:
18063        tg3_full_unlock(tp);
18064
18065        if (!err)
18066                tg3_phy_start(tp);
18067
18068unlock:
18069        rtnl_unlock();
18070        return err;
18071}
18072#endif /* CONFIG_PM_SLEEP */
18073
18074static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18075
18076static void tg3_shutdown(struct pci_dev *pdev)
18077{
18078        struct net_device *dev = pci_get_drvdata(pdev);
18079        struct tg3 *tp = netdev_priv(dev);
18080
18081        rtnl_lock();
18082        netif_device_detach(dev);
18083
18084        if (netif_running(dev))
18085                dev_close(dev);
18086
18087        if (system_state == SYSTEM_POWER_OFF)
18088                tg3_power_down(tp);
18089
18090        rtnl_unlock();
18091}
18092
18093/**
18094 * tg3_io_error_detected - called when PCI error is detected
18095 * @pdev: Pointer to PCI device
18096 * @state: The current pci connection state
18097 *
18098 * This function is called after a PCI bus error affecting
18099 * this device has been detected.
18100 */
18101static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18102                                              pci_channel_state_t state)
18103{
18104        struct net_device *netdev = pci_get_drvdata(pdev);
18105        struct tg3 *tp = netdev_priv(netdev);
18106        pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18107
18108        netdev_info(netdev, "PCI I/O error detected\n");
18109
18110        rtnl_lock();
18111
18112        /* Could be second call or maybe we don't have netdev yet */
18113        if (!netdev || tp->pcierr_recovery || !netif_running(netdev))
18114                goto done;
18115
18116        /* We needn't recover from permanent error */
18117        if (state == pci_channel_io_frozen)
18118                tp->pcierr_recovery = true;
18119
18120        tg3_phy_stop(tp);
18121
18122        tg3_netif_stop(tp);
18123
18124        tg3_timer_stop(tp);
18125
18126        /* Want to make sure that the reset task doesn't run */
18127        tg3_reset_task_cancel(tp);
18128
18129        netif_device_detach(netdev);
18130
18131        /* Clean up software state, even if MMIO is blocked */
18132        tg3_full_lock(tp, 0);
18133        tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18134        tg3_full_unlock(tp);
18135
18136done:
18137        if (state == pci_channel_io_perm_failure) {
18138                if (netdev) {
18139                        tg3_napi_enable(tp);
18140                        dev_close(netdev);
18141                }
18142                err = PCI_ERS_RESULT_DISCONNECT;
18143        } else {
18144                pci_disable_device(pdev);
18145        }
18146
18147        rtnl_unlock();
18148
18149        return err;
18150}
18151
18152/**
18153 * tg3_io_slot_reset - called after the pci bus has been reset.
18154 * @pdev: Pointer to PCI device
18155 *
18156 * Restart the card from scratch, as if from a cold-boot.
18157 * At this point, the card has exprienced a hard reset,
18158 * followed by fixups by BIOS, and has its config space
18159 * set up identically to what it was at cold boot.
18160 */
18161static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18162{
18163        struct net_device *netdev = pci_get_drvdata(pdev);
18164        struct tg3 *tp = netdev_priv(netdev);
18165        pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18166        int err;
18167
18168        rtnl_lock();
18169
18170        if (pci_enable_device(pdev)) {
18171                dev_err(&pdev->dev,
18172                        "Cannot re-enable PCI device after reset.\n");
18173                goto done;
18174        }
18175
18176        pci_set_master(pdev);
18177        pci_restore_state(pdev);
18178        pci_save_state(pdev);
18179
18180        if (!netdev || !netif_running(netdev)) {
18181                rc = PCI_ERS_RESULT_RECOVERED;
18182                goto done;
18183        }
18184
18185        err = tg3_power_up(tp);
18186        if (err)
18187                goto done;
18188
18189        rc = PCI_ERS_RESULT_RECOVERED;
18190
18191done:
18192        if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18193                tg3_napi_enable(tp);
18194                dev_close(netdev);
18195        }
18196        rtnl_unlock();
18197
18198        return rc;
18199}
18200
18201/**
18202 * tg3_io_resume - called when traffic can start flowing again.
18203 * @pdev: Pointer to PCI device
18204 *
18205 * This callback is called when the error recovery driver tells
18206 * us that its OK to resume normal operation.
18207 */
18208static void tg3_io_resume(struct pci_dev *pdev)
18209{
18210        struct net_device *netdev = pci_get_drvdata(pdev);
18211        struct tg3 *tp = netdev_priv(netdev);
18212        int err;
18213
18214        rtnl_lock();
18215
18216        if (!netdev || !netif_running(netdev))
18217                goto done;
18218
18219        tg3_full_lock(tp, 0);
18220        tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18221        tg3_flag_set(tp, INIT_COMPLETE);
18222        err = tg3_restart_hw(tp, true);
18223        if (err) {
18224                tg3_full_unlock(tp);
18225                netdev_err(netdev, "Cannot restart hardware after reset.\n");
18226                goto done;
18227        }
18228
18229        netif_device_attach(netdev);
18230
18231        tg3_timer_start(tp);
18232
18233        tg3_netif_start(tp);
18234
18235        tg3_full_unlock(tp);
18236
18237        tg3_phy_start(tp);
18238
18239done:
18240        tp->pcierr_recovery = false;
18241        rtnl_unlock();
18242}
18243
18244static const struct pci_error_handlers tg3_err_handler = {
18245        .error_detected = tg3_io_error_detected,
18246        .slot_reset     = tg3_io_slot_reset,
18247        .resume         = tg3_io_resume
18248};
18249
18250static struct pci_driver tg3_driver = {
18251        .name           = DRV_MODULE_NAME,
18252        .id_table       = tg3_pci_tbl,
18253        .probe          = tg3_init_one,
18254        .remove         = tg3_remove_one,
18255        .err_handler    = &tg3_err_handler,
18256        .driver.pm      = &tg3_pm_ops,
18257        .shutdown       = tg3_shutdown,
18258};
18259
18260module_pci_driver(tg3_driver);
18261