cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

bnx2x_main.c (429195B)


      1/* bnx2x_main.c: QLogic Everest network driver.
      2 *
      3 * Copyright (c) 2007-2013 Broadcom Corporation
      4 * Copyright (c) 2014 QLogic Corporation
      5 * All rights reserved
      6 *
      7 * This program is free software; you can redistribute it and/or modify
      8 * it under the terms of the GNU General Public License as published by
      9 * the Free Software Foundation.
     10 *
     11 * Maintained by: Ariel Elior <ariel.elior@qlogic.com>
     12 * Written by: Eliezer Tamir
     13 * Based on code from Michael Chan's bnx2 driver
     14 * UDP CSUM errata workaround by Arik Gendelman
     15 * Slowpath and fastpath rework by Vladislav Zolotarov
     16 * Statistics and Link management by Yitchak Gertner
     17 *
     18 */
     19
     20#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
     21
     22#include <linux/module.h>
     23#include <linux/moduleparam.h>
     24#include <linux/kernel.h>
     25#include <linux/device.h>  /* for dev_info() */
     26#include <linux/timer.h>
     27#include <linux/errno.h>
     28#include <linux/ioport.h>
     29#include <linux/slab.h>
     30#include <linux/interrupt.h>
     31#include <linux/pci.h>
     32#include <linux/aer.h>
     33#include <linux/init.h>
     34#include <linux/netdevice.h>
     35#include <linux/etherdevice.h>
     36#include <linux/skbuff.h>
     37#include <linux/dma-mapping.h>
     38#include <linux/bitops.h>
     39#include <linux/irq.h>
     40#include <linux/delay.h>
     41#include <asm/byteorder.h>
     42#include <linux/time.h>
     43#include <linux/ethtool.h>
     44#include <linux/mii.h>
     45#include <linux/if_vlan.h>
     46#include <linux/crash_dump.h>
     47#include <net/ip.h>
     48#include <net/ipv6.h>
     49#include <net/tcp.h>
     50#include <net/vxlan.h>
     51#include <net/checksum.h>
     52#include <net/ip6_checksum.h>
     53#include <linux/workqueue.h>
     54#include <linux/crc32.h>
     55#include <linux/crc32c.h>
     56#include <linux/prefetch.h>
     57#include <linux/zlib.h>
     58#include <linux/io.h>
     59#include <linux/semaphore.h>
     60#include <linux/stringify.h>
     61#include <linux/vmalloc.h>
     62#include "bnx2x.h"
     63#include "bnx2x_init.h"
     64#include "bnx2x_init_ops.h"
     65#include "bnx2x_cmn.h"
     66#include "bnx2x_vfpf.h"
     67#include "bnx2x_dcb.h"
     68#include "bnx2x_sp.h"
     69#include <linux/firmware.h>
     70#include "bnx2x_fw_file_hdr.h"
     71/* FW files */
     72#define FW_FILE_VERSION					\
     73	__stringify(BCM_5710_FW_MAJOR_VERSION) "."	\
     74	__stringify(BCM_5710_FW_MINOR_VERSION) "."	\
     75	__stringify(BCM_5710_FW_REVISION_VERSION) "."	\
     76	__stringify(BCM_5710_FW_ENGINEERING_VERSION)
     77
     78#define FW_FILE_VERSION_V15				\
     79	__stringify(BCM_5710_FW_MAJOR_VERSION) "."      \
     80	__stringify(BCM_5710_FW_MINOR_VERSION) "."	\
     81	__stringify(BCM_5710_FW_REVISION_VERSION_V15) "."	\
     82	__stringify(BCM_5710_FW_ENGINEERING_VERSION)
     83
     84#define FW_FILE_NAME_E1		"bnx2x/bnx2x-e1-" FW_FILE_VERSION ".fw"
     85#define FW_FILE_NAME_E1H	"bnx2x/bnx2x-e1h-" FW_FILE_VERSION ".fw"
     86#define FW_FILE_NAME_E2		"bnx2x/bnx2x-e2-" FW_FILE_VERSION ".fw"
     87#define FW_FILE_NAME_E1_V15	"bnx2x/bnx2x-e1-" FW_FILE_VERSION_V15 ".fw"
     88#define FW_FILE_NAME_E1H_V15	"bnx2x/bnx2x-e1h-" FW_FILE_VERSION_V15 ".fw"
     89#define FW_FILE_NAME_E2_V15	"bnx2x/bnx2x-e2-" FW_FILE_VERSION_V15 ".fw"
     90
     91/* Time in jiffies before concluding the transmitter is hung */
     92#define TX_TIMEOUT		(5*HZ)
     93
     94MODULE_AUTHOR("Eliezer Tamir");
     95MODULE_DESCRIPTION("QLogic "
     96		   "BCM57710/57711/57711E/"
     97		   "57712/57712_MF/57800/57800_MF/57810/57810_MF/"
     98		   "57840/57840_MF Driver");
     99MODULE_LICENSE("GPL");
    100MODULE_FIRMWARE(FW_FILE_NAME_E1);
    101MODULE_FIRMWARE(FW_FILE_NAME_E1H);
    102MODULE_FIRMWARE(FW_FILE_NAME_E2);
    103MODULE_FIRMWARE(FW_FILE_NAME_E1_V15);
    104MODULE_FIRMWARE(FW_FILE_NAME_E1H_V15);
    105MODULE_FIRMWARE(FW_FILE_NAME_E2_V15);
    106
    107int bnx2x_num_queues;
    108module_param_named(num_queues, bnx2x_num_queues, int, 0444);
    109MODULE_PARM_DESC(num_queues,
    110		 " Set number of queues (default is as a number of CPUs)");
    111
    112static int disable_tpa;
    113module_param(disable_tpa, int, 0444);
    114MODULE_PARM_DESC(disable_tpa, " Disable the TPA (LRO) feature");
    115
    116static int int_mode;
    117module_param(int_mode, int, 0444);
    118MODULE_PARM_DESC(int_mode, " Force interrupt mode other than MSI-X "
    119				"(1 INT#x; 2 MSI)");
    120
    121static int dropless_fc;
    122module_param(dropless_fc, int, 0444);
    123MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring");
    124
    125static int mrrs = -1;
    126module_param(mrrs, int, 0444);
    127MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)");
    128
    129static int debug;
    130module_param(debug, int, 0444);
    131MODULE_PARM_DESC(debug, " Default debug msglevel");
    132
    133static struct workqueue_struct *bnx2x_wq;
    134struct workqueue_struct *bnx2x_iov_wq;
    135
    136struct bnx2x_mac_vals {
    137	u32 xmac_addr;
    138	u32 xmac_val;
    139	u32 emac_addr;
    140	u32 emac_val;
    141	u32 umac_addr[2];
    142	u32 umac_val[2];
    143	u32 bmac_addr;
    144	u32 bmac_val[2];
    145};
    146
    147enum bnx2x_board_type {
    148	BCM57710 = 0,
    149	BCM57711,
    150	BCM57711E,
    151	BCM57712,
    152	BCM57712_MF,
    153	BCM57712_VF,
    154	BCM57800,
    155	BCM57800_MF,
    156	BCM57800_VF,
    157	BCM57810,
    158	BCM57810_MF,
    159	BCM57810_VF,
    160	BCM57840_4_10,
    161	BCM57840_2_20,
    162	BCM57840_MF,
    163	BCM57840_VF,
    164	BCM57811,
    165	BCM57811_MF,
    166	BCM57840_O,
    167	BCM57840_MFO,
    168	BCM57811_VF
    169};
    170
    171/* indexed by board_type, above */
    172static struct {
    173	char *name;
    174} board_info[] = {
    175	[BCM57710]	= { "QLogic BCM57710 10 Gigabit PCIe [Everest]" },
    176	[BCM57711]	= { "QLogic BCM57711 10 Gigabit PCIe" },
    177	[BCM57711E]	= { "QLogic BCM57711E 10 Gigabit PCIe" },
    178	[BCM57712]	= { "QLogic BCM57712 10 Gigabit Ethernet" },
    179	[BCM57712_MF]	= { "QLogic BCM57712 10 Gigabit Ethernet Multi Function" },
    180	[BCM57712_VF]	= { "QLogic BCM57712 10 Gigabit Ethernet Virtual Function" },
    181	[BCM57800]	= { "QLogic BCM57800 10 Gigabit Ethernet" },
    182	[BCM57800_MF]	= { "QLogic BCM57800 10 Gigabit Ethernet Multi Function" },
    183	[BCM57800_VF]	= { "QLogic BCM57800 10 Gigabit Ethernet Virtual Function" },
    184	[BCM57810]	= { "QLogic BCM57810 10 Gigabit Ethernet" },
    185	[BCM57810_MF]	= { "QLogic BCM57810 10 Gigabit Ethernet Multi Function" },
    186	[BCM57810_VF]	= { "QLogic BCM57810 10 Gigabit Ethernet Virtual Function" },
    187	[BCM57840_4_10]	= { "QLogic BCM57840 10 Gigabit Ethernet" },
    188	[BCM57840_2_20]	= { "QLogic BCM57840 20 Gigabit Ethernet" },
    189	[BCM57840_MF]	= { "QLogic BCM57840 10/20 Gigabit Ethernet Multi Function" },
    190	[BCM57840_VF]	= { "QLogic BCM57840 10/20 Gigabit Ethernet Virtual Function" },
    191	[BCM57811]	= { "QLogic BCM57811 10 Gigabit Ethernet" },
    192	[BCM57811_MF]	= { "QLogic BCM57811 10 Gigabit Ethernet Multi Function" },
    193	[BCM57840_O]	= { "QLogic BCM57840 10/20 Gigabit Ethernet" },
    194	[BCM57840_MFO]	= { "QLogic BCM57840 10/20 Gigabit Ethernet Multi Function" },
    195	[BCM57811_VF]	= { "QLogic BCM57840 10/20 Gigabit Ethernet Virtual Function" }
    196};
    197
    198#ifndef PCI_DEVICE_ID_NX2_57710
    199#define PCI_DEVICE_ID_NX2_57710		CHIP_NUM_57710
    200#endif
    201#ifndef PCI_DEVICE_ID_NX2_57711
    202#define PCI_DEVICE_ID_NX2_57711		CHIP_NUM_57711
    203#endif
    204#ifndef PCI_DEVICE_ID_NX2_57711E
    205#define PCI_DEVICE_ID_NX2_57711E	CHIP_NUM_57711E
    206#endif
    207#ifndef PCI_DEVICE_ID_NX2_57712
    208#define PCI_DEVICE_ID_NX2_57712		CHIP_NUM_57712
    209#endif
    210#ifndef PCI_DEVICE_ID_NX2_57712_MF
    211#define PCI_DEVICE_ID_NX2_57712_MF	CHIP_NUM_57712_MF
    212#endif
    213#ifndef PCI_DEVICE_ID_NX2_57712_VF
    214#define PCI_DEVICE_ID_NX2_57712_VF	CHIP_NUM_57712_VF
    215#endif
    216#ifndef PCI_DEVICE_ID_NX2_57800
    217#define PCI_DEVICE_ID_NX2_57800		CHIP_NUM_57800
    218#endif
    219#ifndef PCI_DEVICE_ID_NX2_57800_MF
    220#define PCI_DEVICE_ID_NX2_57800_MF	CHIP_NUM_57800_MF
    221#endif
    222#ifndef PCI_DEVICE_ID_NX2_57800_VF
    223#define PCI_DEVICE_ID_NX2_57800_VF	CHIP_NUM_57800_VF
    224#endif
    225#ifndef PCI_DEVICE_ID_NX2_57810
    226#define PCI_DEVICE_ID_NX2_57810		CHIP_NUM_57810
    227#endif
    228#ifndef PCI_DEVICE_ID_NX2_57810_MF
    229#define PCI_DEVICE_ID_NX2_57810_MF	CHIP_NUM_57810_MF
    230#endif
    231#ifndef PCI_DEVICE_ID_NX2_57840_O
    232#define PCI_DEVICE_ID_NX2_57840_O	CHIP_NUM_57840_OBSOLETE
    233#endif
    234#ifndef PCI_DEVICE_ID_NX2_57810_VF
    235#define PCI_DEVICE_ID_NX2_57810_VF	CHIP_NUM_57810_VF
    236#endif
    237#ifndef PCI_DEVICE_ID_NX2_57840_4_10
    238#define PCI_DEVICE_ID_NX2_57840_4_10	CHIP_NUM_57840_4_10
    239#endif
    240#ifndef PCI_DEVICE_ID_NX2_57840_2_20
    241#define PCI_DEVICE_ID_NX2_57840_2_20	CHIP_NUM_57840_2_20
    242#endif
    243#ifndef PCI_DEVICE_ID_NX2_57840_MFO
    244#define PCI_DEVICE_ID_NX2_57840_MFO	CHIP_NUM_57840_MF_OBSOLETE
    245#endif
    246#ifndef PCI_DEVICE_ID_NX2_57840_MF
    247#define PCI_DEVICE_ID_NX2_57840_MF	CHIP_NUM_57840_MF
    248#endif
    249#ifndef PCI_DEVICE_ID_NX2_57840_VF
    250#define PCI_DEVICE_ID_NX2_57840_VF	CHIP_NUM_57840_VF
    251#endif
    252#ifndef PCI_DEVICE_ID_NX2_57811
    253#define PCI_DEVICE_ID_NX2_57811		CHIP_NUM_57811
    254#endif
    255#ifndef PCI_DEVICE_ID_NX2_57811_MF
    256#define PCI_DEVICE_ID_NX2_57811_MF	CHIP_NUM_57811_MF
    257#endif
    258#ifndef PCI_DEVICE_ID_NX2_57811_VF
    259#define PCI_DEVICE_ID_NX2_57811_VF	CHIP_NUM_57811_VF
    260#endif
    261
    262static const struct pci_device_id bnx2x_pci_tbl[] = {
    263	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57710), BCM57710 },
    264	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57711), BCM57711 },
    265	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57711E), BCM57711E },
    266	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57712), BCM57712 },
    267	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57712_MF), BCM57712_MF },
    268	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57712_VF), BCM57712_VF },
    269	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57800), BCM57800 },
    270	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57800_MF), BCM57800_MF },
    271	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57800_VF), BCM57800_VF },
    272	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57810), BCM57810 },
    273	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57810_MF), BCM57810_MF },
    274	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57840_O), BCM57840_O },
    275	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57840_4_10), BCM57840_4_10 },
    276	{ PCI_VDEVICE(QLOGIC,	PCI_DEVICE_ID_NX2_57840_4_10), BCM57840_4_10 },
    277	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57840_2_20), BCM57840_2_20 },
    278	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57810_VF), BCM57810_VF },
    279	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57840_MFO), BCM57840_MFO },
    280	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57840_MF), BCM57840_MF },
    281	{ PCI_VDEVICE(QLOGIC,	PCI_DEVICE_ID_NX2_57840_MF), BCM57840_MF },
    282	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57840_VF), BCM57840_VF },
    283	{ PCI_VDEVICE(QLOGIC,	PCI_DEVICE_ID_NX2_57840_VF), BCM57840_VF },
    284	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57811), BCM57811 },
    285	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57811_MF), BCM57811_MF },
    286	{ PCI_VDEVICE(BROADCOM, PCI_DEVICE_ID_NX2_57811_VF), BCM57811_VF },
    287	{ 0 }
    288};
    289
    290MODULE_DEVICE_TABLE(pci, bnx2x_pci_tbl);
    291
    292const u32 dmae_reg_go_c[] = {
    293	DMAE_REG_GO_C0, DMAE_REG_GO_C1, DMAE_REG_GO_C2, DMAE_REG_GO_C3,
    294	DMAE_REG_GO_C4, DMAE_REG_GO_C5, DMAE_REG_GO_C6, DMAE_REG_GO_C7,
    295	DMAE_REG_GO_C8, DMAE_REG_GO_C9, DMAE_REG_GO_C10, DMAE_REG_GO_C11,
    296	DMAE_REG_GO_C12, DMAE_REG_GO_C13, DMAE_REG_GO_C14, DMAE_REG_GO_C15
    297};
    298
    299/* Global resources for unloading a previously loaded device */
    300#define BNX2X_PREV_WAIT_NEEDED 1
    301static DEFINE_SEMAPHORE(bnx2x_prev_sem);
    302static LIST_HEAD(bnx2x_prev_list);
    303
    304/* Forward declaration */
    305static struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev);
    306static u32 bnx2x_rx_ustorm_prods_offset(struct bnx2x_fastpath *fp);
    307static int bnx2x_set_storm_rx_mode(struct bnx2x *bp);
    308
    309/****************************************************************************
    310* General service functions
    311****************************************************************************/
    312
    313static int bnx2x_hwtstamp_ioctl(struct bnx2x *bp, struct ifreq *ifr);
    314
    315static void __storm_memset_dma_mapping(struct bnx2x *bp,
    316				       u32 addr, dma_addr_t mapping)
    317{
    318	REG_WR(bp,  addr, U64_LO(mapping));
    319	REG_WR(bp,  addr + 4, U64_HI(mapping));
    320}
    321
    322static void storm_memset_spq_addr(struct bnx2x *bp,
    323				  dma_addr_t mapping, u16 abs_fid)
    324{
    325	u32 addr = XSEM_REG_FAST_MEMORY +
    326			XSTORM_SPQ_PAGE_BASE_OFFSET(abs_fid);
    327
    328	__storm_memset_dma_mapping(bp, addr, mapping);
    329}
    330
    331static void storm_memset_vf_to_pf(struct bnx2x *bp, u16 abs_fid,
    332				  u16 pf_id)
    333{
    334	REG_WR8(bp, BAR_XSTRORM_INTMEM + XSTORM_VF_TO_PF_OFFSET(abs_fid),
    335		pf_id);
    336	REG_WR8(bp, BAR_CSTRORM_INTMEM + CSTORM_VF_TO_PF_OFFSET(abs_fid),
    337		pf_id);
    338	REG_WR8(bp, BAR_TSTRORM_INTMEM + TSTORM_VF_TO_PF_OFFSET(abs_fid),
    339		pf_id);
    340	REG_WR8(bp, BAR_USTRORM_INTMEM + USTORM_VF_TO_PF_OFFSET(abs_fid),
    341		pf_id);
    342}
    343
    344static void storm_memset_func_en(struct bnx2x *bp, u16 abs_fid,
    345				 u8 enable)
    346{
    347	REG_WR8(bp, BAR_XSTRORM_INTMEM + XSTORM_FUNC_EN_OFFSET(abs_fid),
    348		enable);
    349	REG_WR8(bp, BAR_CSTRORM_INTMEM + CSTORM_FUNC_EN_OFFSET(abs_fid),
    350		enable);
    351	REG_WR8(bp, BAR_TSTRORM_INTMEM + TSTORM_FUNC_EN_OFFSET(abs_fid),
    352		enable);
    353	REG_WR8(bp, BAR_USTRORM_INTMEM + USTORM_FUNC_EN_OFFSET(abs_fid),
    354		enable);
    355}
    356
    357static void storm_memset_eq_data(struct bnx2x *bp,
    358				 struct event_ring_data *eq_data,
    359				u16 pfid)
    360{
    361	size_t size = sizeof(struct event_ring_data);
    362
    363	u32 addr = BAR_CSTRORM_INTMEM + CSTORM_EVENT_RING_DATA_OFFSET(pfid);
    364
    365	__storm_memset_struct(bp, addr, size, (u32 *)eq_data);
    366}
    367
    368static void storm_memset_eq_prod(struct bnx2x *bp, u16 eq_prod,
    369				 u16 pfid)
    370{
    371	u32 addr = BAR_CSTRORM_INTMEM + CSTORM_EVENT_RING_PROD_OFFSET(pfid);
    372	REG_WR16(bp, addr, eq_prod);
    373}
    374
    375/* used only at init
    376 * locking is done by mcp
    377 */
    378static void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val)
    379{
    380	pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, addr);
    381	pci_write_config_dword(bp->pdev, PCICFG_GRC_DATA, val);
    382	pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS,
    383			       PCICFG_VENDOR_ID_OFFSET);
    384}
    385
    386static u32 bnx2x_reg_rd_ind(struct bnx2x *bp, u32 addr)
    387{
    388	u32 val;
    389
    390	pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, addr);
    391	pci_read_config_dword(bp->pdev, PCICFG_GRC_DATA, &val);
    392	pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS,
    393			       PCICFG_VENDOR_ID_OFFSET);
    394
    395	return val;
    396}
    397
    398#define DMAE_DP_SRC_GRC		"grc src_addr [%08x]"
    399#define DMAE_DP_SRC_PCI		"pci src_addr [%x:%08x]"
    400#define DMAE_DP_DST_GRC		"grc dst_addr [%08x]"
    401#define DMAE_DP_DST_PCI		"pci dst_addr [%x:%08x]"
    402#define DMAE_DP_DST_NONE	"dst_addr [none]"
    403
    404static void bnx2x_dp_dmae(struct bnx2x *bp,
    405			  struct dmae_command *dmae, int msglvl)
    406{
    407	u32 src_type = dmae->opcode & DMAE_COMMAND_SRC;
    408	int i;
    409
    410	switch (dmae->opcode & DMAE_COMMAND_DST) {
    411	case DMAE_CMD_DST_PCI:
    412		if (src_type == DMAE_CMD_SRC_PCI)
    413			DP(msglvl, "DMAE: opcode 0x%08x\n"
    414			   "src [%x:%08x], len [%d*4], dst [%x:%08x]\n"
    415			   "comp_addr [%x:%08x], comp_val 0x%08x\n",
    416			   dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo,
    417			   dmae->len, dmae->dst_addr_hi, dmae->dst_addr_lo,
    418			   dmae->comp_addr_hi, dmae->comp_addr_lo,
    419			   dmae->comp_val);
    420		else
    421			DP(msglvl, "DMAE: opcode 0x%08x\n"
    422			   "src [%08x], len [%d*4], dst [%x:%08x]\n"
    423			   "comp_addr [%x:%08x], comp_val 0x%08x\n",
    424			   dmae->opcode, dmae->src_addr_lo >> 2,
    425			   dmae->len, dmae->dst_addr_hi, dmae->dst_addr_lo,
    426			   dmae->comp_addr_hi, dmae->comp_addr_lo,
    427			   dmae->comp_val);
    428		break;
    429	case DMAE_CMD_DST_GRC:
    430		if (src_type == DMAE_CMD_SRC_PCI)
    431			DP(msglvl, "DMAE: opcode 0x%08x\n"
    432			   "src [%x:%08x], len [%d*4], dst_addr [%08x]\n"
    433			   "comp_addr [%x:%08x], comp_val 0x%08x\n",
    434			   dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo,
    435			   dmae->len, dmae->dst_addr_lo >> 2,
    436			   dmae->comp_addr_hi, dmae->comp_addr_lo,
    437			   dmae->comp_val);
    438		else
    439			DP(msglvl, "DMAE: opcode 0x%08x\n"
    440			   "src [%08x], len [%d*4], dst [%08x]\n"
    441			   "comp_addr [%x:%08x], comp_val 0x%08x\n",
    442			   dmae->opcode, dmae->src_addr_lo >> 2,
    443			   dmae->len, dmae->dst_addr_lo >> 2,
    444			   dmae->comp_addr_hi, dmae->comp_addr_lo,
    445			   dmae->comp_val);
    446		break;
    447	default:
    448		if (src_type == DMAE_CMD_SRC_PCI)
    449			DP(msglvl, "DMAE: opcode 0x%08x\n"
    450			   "src_addr [%x:%08x]  len [%d * 4]  dst_addr [none]\n"
    451			   "comp_addr [%x:%08x]  comp_val 0x%08x\n",
    452			   dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo,
    453			   dmae->len, dmae->comp_addr_hi, dmae->comp_addr_lo,
    454			   dmae->comp_val);
    455		else
    456			DP(msglvl, "DMAE: opcode 0x%08x\n"
    457			   "src_addr [%08x]  len [%d * 4]  dst_addr [none]\n"
    458			   "comp_addr [%x:%08x]  comp_val 0x%08x\n",
    459			   dmae->opcode, dmae->src_addr_lo >> 2,
    460			   dmae->len, dmae->comp_addr_hi, dmae->comp_addr_lo,
    461			   dmae->comp_val);
    462		break;
    463	}
    464
    465	for (i = 0; i < (sizeof(struct dmae_command)/4); i++)
    466		DP(msglvl, "DMAE RAW [%02d]: 0x%08x\n",
    467		   i, *(((u32 *)dmae) + i));
    468}
    469
    470/* copy command into DMAE command memory and set DMAE command go */
    471void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx)
    472{
    473	u32 cmd_offset;
    474	int i;
    475
    476	cmd_offset = (DMAE_REG_CMD_MEM + sizeof(struct dmae_command) * idx);
    477	for (i = 0; i < (sizeof(struct dmae_command)/4); i++) {
    478		REG_WR(bp, cmd_offset + i*4, *(((u32 *)dmae) + i));
    479	}
    480	REG_WR(bp, dmae_reg_go_c[idx], 1);
    481}
    482
    483u32 bnx2x_dmae_opcode_add_comp(u32 opcode, u8 comp_type)
    484{
    485	return opcode | ((comp_type << DMAE_COMMAND_C_DST_SHIFT) |
    486			   DMAE_CMD_C_ENABLE);
    487}
    488
    489u32 bnx2x_dmae_opcode_clr_src_reset(u32 opcode)
    490{
    491	return opcode & ~DMAE_CMD_SRC_RESET;
    492}
    493
    494u32 bnx2x_dmae_opcode(struct bnx2x *bp, u8 src_type, u8 dst_type,
    495			     bool with_comp, u8 comp_type)
    496{
    497	u32 opcode = 0;
    498
    499	opcode |= ((src_type << DMAE_COMMAND_SRC_SHIFT) |
    500		   (dst_type << DMAE_COMMAND_DST_SHIFT));
    501
    502	opcode |= (DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET);
    503
    504	opcode |= (BP_PORT(bp) ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0);
    505	opcode |= ((BP_VN(bp) << DMAE_CMD_E1HVN_SHIFT) |
    506		   (BP_VN(bp) << DMAE_COMMAND_DST_VN_SHIFT));
    507	opcode |= (DMAE_COM_SET_ERR << DMAE_COMMAND_ERR_POLICY_SHIFT);
    508
    509#ifdef __BIG_ENDIAN
    510	opcode |= DMAE_CMD_ENDIANITY_B_DW_SWAP;
    511#else
    512	opcode |= DMAE_CMD_ENDIANITY_DW_SWAP;
    513#endif
    514	if (with_comp)
    515		opcode = bnx2x_dmae_opcode_add_comp(opcode, comp_type);
    516	return opcode;
    517}
    518
    519void bnx2x_prep_dmae_with_comp(struct bnx2x *bp,
    520				      struct dmae_command *dmae,
    521				      u8 src_type, u8 dst_type)
    522{
    523	memset(dmae, 0, sizeof(struct dmae_command));
    524
    525	/* set the opcode */
    526	dmae->opcode = bnx2x_dmae_opcode(bp, src_type, dst_type,
    527					 true, DMAE_COMP_PCI);
    528
    529	/* fill in the completion parameters */
    530	dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_comp));
    531	dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_comp));
    532	dmae->comp_val = DMAE_COMP_VAL;
    533}
    534
    535/* issue a dmae command over the init-channel and wait for completion */
    536int bnx2x_issue_dmae_with_comp(struct bnx2x *bp, struct dmae_command *dmae,
    537			       u32 *comp)
    538{
    539	int cnt = CHIP_REV_IS_SLOW(bp) ? (400000) : 4000;
    540	int rc = 0;
    541
    542	bnx2x_dp_dmae(bp, dmae, BNX2X_MSG_DMAE);
    543
    544	/* Lock the dmae channel. Disable BHs to prevent a dead-lock
    545	 * as long as this code is called both from syscall context and
    546	 * from ndo_set_rx_mode() flow that may be called from BH.
    547	 */
    548
    549	spin_lock_bh(&bp->dmae_lock);
    550
    551	/* reset completion */
    552	*comp = 0;
    553
    554	/* post the command on the channel used for initializations */
    555	bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp));
    556
    557	/* wait for completion */
    558	udelay(5);
    559	while ((*comp & ~DMAE_PCI_ERR_FLAG) != DMAE_COMP_VAL) {
    560
    561		if (!cnt ||
    562		    (bp->recovery_state != BNX2X_RECOVERY_DONE &&
    563		     bp->recovery_state != BNX2X_RECOVERY_NIC_LOADING)) {
    564			BNX2X_ERR("DMAE timeout!\n");
    565			rc = DMAE_TIMEOUT;
    566			goto unlock;
    567		}
    568		cnt--;
    569		udelay(50);
    570	}
    571	if (*comp & DMAE_PCI_ERR_FLAG) {
    572		BNX2X_ERR("DMAE PCI error!\n");
    573		rc = DMAE_PCI_ERROR;
    574	}
    575
    576unlock:
    577
    578	spin_unlock_bh(&bp->dmae_lock);
    579
    580	return rc;
    581}
    582
    583void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr,
    584		      u32 len32)
    585{
    586	int rc;
    587	struct dmae_command dmae;
    588
    589	if (!bp->dmae_ready) {
    590		u32 *data = bnx2x_sp(bp, wb_data[0]);
    591
    592		if (CHIP_IS_E1(bp))
    593			bnx2x_init_ind_wr(bp, dst_addr, data, len32);
    594		else
    595			bnx2x_init_str_wr(bp, dst_addr, data, len32);
    596		return;
    597	}
    598
    599	/* set opcode and fixed command fields */
    600	bnx2x_prep_dmae_with_comp(bp, &dmae, DMAE_SRC_PCI, DMAE_DST_GRC);
    601
    602	/* fill in addresses and len */
    603	dmae.src_addr_lo = U64_LO(dma_addr);
    604	dmae.src_addr_hi = U64_HI(dma_addr);
    605	dmae.dst_addr_lo = dst_addr >> 2;
    606	dmae.dst_addr_hi = 0;
    607	dmae.len = len32;
    608
    609	/* issue the command and wait for completion */
    610	rc = bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
    611	if (rc) {
    612		BNX2X_ERR("DMAE returned failure %d\n", rc);
    613#ifdef BNX2X_STOP_ON_ERROR
    614		bnx2x_panic();
    615#endif
    616	}
    617}
    618
    619void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32)
    620{
    621	int rc;
    622	struct dmae_command dmae;
    623
    624	if (!bp->dmae_ready) {
    625		u32 *data = bnx2x_sp(bp, wb_data[0]);
    626		int i;
    627
    628		if (CHIP_IS_E1(bp))
    629			for (i = 0; i < len32; i++)
    630				data[i] = bnx2x_reg_rd_ind(bp, src_addr + i*4);
    631		else
    632			for (i = 0; i < len32; i++)
    633				data[i] = REG_RD(bp, src_addr + i*4);
    634
    635		return;
    636	}
    637
    638	/* set opcode and fixed command fields */
    639	bnx2x_prep_dmae_with_comp(bp, &dmae, DMAE_SRC_GRC, DMAE_DST_PCI);
    640
    641	/* fill in addresses and len */
    642	dmae.src_addr_lo = src_addr >> 2;
    643	dmae.src_addr_hi = 0;
    644	dmae.dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_data));
    645	dmae.dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_data));
    646	dmae.len = len32;
    647
    648	/* issue the command and wait for completion */
    649	rc = bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
    650	if (rc) {
    651		BNX2X_ERR("DMAE returned failure %d\n", rc);
    652#ifdef BNX2X_STOP_ON_ERROR
    653		bnx2x_panic();
    654#endif
    655	}
    656}
    657
    658static void bnx2x_write_dmae_phys_len(struct bnx2x *bp, dma_addr_t phys_addr,
    659				      u32 addr, u32 len)
    660{
    661	int dmae_wr_max = DMAE_LEN32_WR_MAX(bp);
    662	int offset = 0;
    663
    664	while (len > dmae_wr_max) {
    665		bnx2x_write_dmae(bp, phys_addr + offset,
    666				 addr + offset, dmae_wr_max);
    667		offset += dmae_wr_max * 4;
    668		len -= dmae_wr_max;
    669	}
    670
    671	bnx2x_write_dmae(bp, phys_addr + offset, addr + offset, len);
    672}
    673
    674enum storms {
    675	   XSTORM,
    676	   TSTORM,
    677	   CSTORM,
    678	   USTORM,
    679	   MAX_STORMS
    680};
    681
    682#define STORMS_NUM 4
    683#define REGS_IN_ENTRY 4
    684
    685static inline int bnx2x_get_assert_list_entry(struct bnx2x *bp,
    686					      enum storms storm,
    687					      int entry)
    688{
    689	switch (storm) {
    690	case XSTORM:
    691		return XSTORM_ASSERT_LIST_OFFSET(entry);
    692	case TSTORM:
    693		return TSTORM_ASSERT_LIST_OFFSET(entry);
    694	case CSTORM:
    695		return CSTORM_ASSERT_LIST_OFFSET(entry);
    696	case USTORM:
    697		return USTORM_ASSERT_LIST_OFFSET(entry);
    698	case MAX_STORMS:
    699	default:
    700		BNX2X_ERR("unknown storm\n");
    701	}
    702	return -EINVAL;
    703}
    704
    705static int bnx2x_mc_assert(struct bnx2x *bp)
    706{
    707	char last_idx;
    708	int i, j, rc = 0;
    709	enum storms storm;
    710	u32 regs[REGS_IN_ENTRY];
    711	u32 bar_storm_intmem[STORMS_NUM] = {
    712		BAR_XSTRORM_INTMEM,
    713		BAR_TSTRORM_INTMEM,
    714		BAR_CSTRORM_INTMEM,
    715		BAR_USTRORM_INTMEM
    716	};
    717	u32 storm_assert_list_index[STORMS_NUM] = {
    718		XSTORM_ASSERT_LIST_INDEX_OFFSET,
    719		TSTORM_ASSERT_LIST_INDEX_OFFSET,
    720		CSTORM_ASSERT_LIST_INDEX_OFFSET,
    721		USTORM_ASSERT_LIST_INDEX_OFFSET
    722	};
    723	char *storms_string[STORMS_NUM] = {
    724		"XSTORM",
    725		"TSTORM",
    726		"CSTORM",
    727		"USTORM"
    728	};
    729
    730	for (storm = XSTORM; storm < MAX_STORMS; storm++) {
    731		last_idx = REG_RD8(bp, bar_storm_intmem[storm] +
    732				   storm_assert_list_index[storm]);
    733		if (last_idx)
    734			BNX2X_ERR("%s_ASSERT_LIST_INDEX 0x%x\n",
    735				  storms_string[storm], last_idx);
    736
    737		/* print the asserts */
    738		for (i = 0; i < STROM_ASSERT_ARRAY_SIZE; i++) {
    739			/* read a single assert entry */
    740			for (j = 0; j < REGS_IN_ENTRY; j++)
    741				regs[j] = REG_RD(bp, bar_storm_intmem[storm] +
    742					  bnx2x_get_assert_list_entry(bp,
    743								      storm,
    744								      i) +
    745					  sizeof(u32) * j);
    746
    747			/* log entry if it contains a valid assert */
    748			if (regs[0] != COMMON_ASM_INVALID_ASSERT_OPCODE) {
    749				BNX2X_ERR("%s_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x\n",
    750					  storms_string[storm], i, regs[3],
    751					  regs[2], regs[1], regs[0]);
    752				rc++;
    753			} else {
    754				break;
    755			}
    756		}
    757	}
    758
    759	BNX2X_ERR("Chip Revision: %s, FW Version: %d_%d_%d\n",
    760		  CHIP_IS_E1(bp) ? "everest1" :
    761		  CHIP_IS_E1H(bp) ? "everest1h" :
    762		  CHIP_IS_E2(bp) ? "everest2" : "everest3",
    763		  bp->fw_major, bp->fw_minor, bp->fw_rev);
    764
    765	return rc;
    766}
    767
    768#define MCPR_TRACE_BUFFER_SIZE	(0x800)
    769#define SCRATCH_BUFFER_SIZE(bp)	\
    770	(CHIP_IS_E1(bp) ? 0x10000 : (CHIP_IS_E1H(bp) ? 0x20000 : 0x28000))
    771
    772void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl)
    773{
    774	u32 addr, val;
    775	u32 mark, offset;
    776	__be32 data[9];
    777	int word;
    778	u32 trace_shmem_base;
    779	if (BP_NOMCP(bp)) {
    780		BNX2X_ERR("NO MCP - can not dump\n");
    781		return;
    782	}
    783	netdev_printk(lvl, bp->dev, "bc %d.%d.%d\n",
    784		(bp->common.bc_ver & 0xff0000) >> 16,
    785		(bp->common.bc_ver & 0xff00) >> 8,
    786		(bp->common.bc_ver & 0xff));
    787
    788	if (pci_channel_offline(bp->pdev)) {
    789		BNX2X_ERR("Cannot dump MCP info while in PCI error\n");
    790		return;
    791	}
    792
    793	val = REG_RD(bp, MCP_REG_MCPR_CPU_PROGRAM_COUNTER);
    794	if (val == REG_RD(bp, MCP_REG_MCPR_CPU_PROGRAM_COUNTER))
    795		BNX2X_ERR("%s" "MCP PC at 0x%x\n", lvl, val);
    796
    797	if (BP_PATH(bp) == 0)
    798		trace_shmem_base = bp->common.shmem_base;
    799	else
    800		trace_shmem_base = SHMEM2_RD(bp, other_shmem_base_addr);
    801
    802	/* sanity */
    803	if (trace_shmem_base < MCPR_SCRATCH_BASE(bp) + MCPR_TRACE_BUFFER_SIZE ||
    804	    trace_shmem_base >= MCPR_SCRATCH_BASE(bp) +
    805				SCRATCH_BUFFER_SIZE(bp)) {
    806		BNX2X_ERR("Unable to dump trace buffer (mark %x)\n",
    807			  trace_shmem_base);
    808		return;
    809	}
    810
    811	addr = trace_shmem_base - MCPR_TRACE_BUFFER_SIZE;
    812
    813	/* validate TRCB signature */
    814	mark = REG_RD(bp, addr);
    815	if (mark != MFW_TRACE_SIGNATURE) {
    816		BNX2X_ERR("Trace buffer signature is missing.");
    817		return ;
    818	}
    819
    820	/* read cyclic buffer pointer */
    821	addr += 4;
    822	mark = REG_RD(bp, addr);
    823	mark = MCPR_SCRATCH_BASE(bp) + ((mark + 0x3) & ~0x3) - 0x08000000;
    824	if (mark >= trace_shmem_base || mark < addr + 4) {
    825		BNX2X_ERR("Mark doesn't fall inside Trace Buffer\n");
    826		return;
    827	}
    828	printk("%s" "begin fw dump (mark 0x%x)\n", lvl, mark);
    829
    830	printk("%s", lvl);
    831
    832	/* dump buffer after the mark */
    833	for (offset = mark; offset < trace_shmem_base; offset += 0x8*4) {
    834		for (word = 0; word < 8; word++)
    835			data[word] = htonl(REG_RD(bp, offset + 4*word));
    836		data[8] = 0x0;
    837		pr_cont("%s", (char *)data);
    838	}
    839
    840	/* dump buffer before the mark */
    841	for (offset = addr + 4; offset <= mark; offset += 0x8*4) {
    842		for (word = 0; word < 8; word++)
    843			data[word] = htonl(REG_RD(bp, offset + 4*word));
    844		data[8] = 0x0;
    845		pr_cont("%s", (char *)data);
    846	}
    847	printk("%s" "end of fw dump\n", lvl);
    848}
    849
    850static void bnx2x_fw_dump(struct bnx2x *bp)
    851{
    852	bnx2x_fw_dump_lvl(bp, KERN_ERR);
    853}
    854
    855static void bnx2x_hc_int_disable(struct bnx2x *bp)
    856{
    857	int port = BP_PORT(bp);
    858	u32 addr = port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0;
    859	u32 val = REG_RD(bp, addr);
    860
    861	/* in E1 we must use only PCI configuration space to disable
    862	 * MSI/MSIX capability
    863	 * It's forbidden to disable IGU_PF_CONF_MSI_MSIX_EN in HC block
    864	 */
    865	if (CHIP_IS_E1(bp)) {
    866		/* Since IGU_PF_CONF_MSI_MSIX_EN still always on
    867		 * Use mask register to prevent from HC sending interrupts
    868		 * after we exit the function
    869		 */
    870		REG_WR(bp, HC_REG_INT_MASK + port*4, 0);
    871
    872		val &= ~(HC_CONFIG_0_REG_SINGLE_ISR_EN_0 |
    873			 HC_CONFIG_0_REG_INT_LINE_EN_0 |
    874			 HC_CONFIG_0_REG_ATTN_BIT_EN_0);
    875	} else
    876		val &= ~(HC_CONFIG_0_REG_SINGLE_ISR_EN_0 |
    877			 HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 |
    878			 HC_CONFIG_0_REG_INT_LINE_EN_0 |
    879			 HC_CONFIG_0_REG_ATTN_BIT_EN_0);
    880
    881	DP(NETIF_MSG_IFDOWN,
    882	   "write %x to HC %d (addr 0x%x)\n",
    883	   val, port, addr);
    884
    885	REG_WR(bp, addr, val);
    886	if (REG_RD(bp, addr) != val)
    887		BNX2X_ERR("BUG! Proper val not read from IGU!\n");
    888}
    889
    890static void bnx2x_igu_int_disable(struct bnx2x *bp)
    891{
    892	u32 val = REG_RD(bp, IGU_REG_PF_CONFIGURATION);
    893
    894	val &= ~(IGU_PF_CONF_MSI_MSIX_EN |
    895		 IGU_PF_CONF_INT_LINE_EN |
    896		 IGU_PF_CONF_ATTN_BIT_EN);
    897
    898	DP(NETIF_MSG_IFDOWN, "write %x to IGU\n", val);
    899
    900	REG_WR(bp, IGU_REG_PF_CONFIGURATION, val);
    901	if (REG_RD(bp, IGU_REG_PF_CONFIGURATION) != val)
    902		BNX2X_ERR("BUG! Proper val not read from IGU!\n");
    903}
    904
    905static void bnx2x_int_disable(struct bnx2x *bp)
    906{
    907	if (bp->common.int_block == INT_BLOCK_HC)
    908		bnx2x_hc_int_disable(bp);
    909	else
    910		bnx2x_igu_int_disable(bp);
    911}
    912
    913void bnx2x_panic_dump(struct bnx2x *bp, bool disable_int)
    914{
    915	int i;
    916	u16 j;
    917	struct hc_sp_status_block_data sp_sb_data;
    918	int func = BP_FUNC(bp);
    919#ifdef BNX2X_STOP_ON_ERROR
    920	u16 start = 0, end = 0;
    921	u8 cos;
    922#endif
    923	if (IS_PF(bp) && disable_int)
    924		bnx2x_int_disable(bp);
    925
    926	bp->stats_state = STATS_STATE_DISABLED;
    927	bp->eth_stats.unrecoverable_error++;
    928	DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n");
    929
    930	BNX2X_ERR("begin crash dump -----------------\n");
    931
    932	/* Indices */
    933	/* Common */
    934	if (IS_PF(bp)) {
    935		struct host_sp_status_block *def_sb = bp->def_status_blk;
    936		int data_size, cstorm_offset;
    937
    938		BNX2X_ERR("def_idx(0x%x)  def_att_idx(0x%x)  attn_state(0x%x)  spq_prod_idx(0x%x) next_stats_cnt(0x%x)\n",
    939			  bp->def_idx, bp->def_att_idx, bp->attn_state,
    940			  bp->spq_prod_idx, bp->stats_counter);
    941		BNX2X_ERR("DSB: attn bits(0x%x)  ack(0x%x)  id(0x%x)  idx(0x%x)\n",
    942			  def_sb->atten_status_block.attn_bits,
    943			  def_sb->atten_status_block.attn_bits_ack,
    944			  def_sb->atten_status_block.status_block_id,
    945			  def_sb->atten_status_block.attn_bits_index);
    946		BNX2X_ERR("     def (");
    947		for (i = 0; i < HC_SP_SB_MAX_INDICES; i++)
    948			pr_cont("0x%x%s",
    949				def_sb->sp_sb.index_values[i],
    950				(i == HC_SP_SB_MAX_INDICES - 1) ? ")  " : " ");
    951
    952		data_size = sizeof(struct hc_sp_status_block_data) /
    953			    sizeof(u32);
    954		cstorm_offset = CSTORM_SP_STATUS_BLOCK_DATA_OFFSET(func);
    955		for (i = 0; i < data_size; i++)
    956			*((u32 *)&sp_sb_data + i) =
    957				REG_RD(bp, BAR_CSTRORM_INTMEM + cstorm_offset +
    958					   i * sizeof(u32));
    959
    960		pr_cont("igu_sb_id(0x%x)  igu_seg_id(0x%x) pf_id(0x%x)  vnic_id(0x%x)  vf_id(0x%x)  vf_valid (0x%x) state(0x%x)\n",
    961			sp_sb_data.igu_sb_id,
    962			sp_sb_data.igu_seg_id,
    963			sp_sb_data.p_func.pf_id,
    964			sp_sb_data.p_func.vnic_id,
    965			sp_sb_data.p_func.vf_id,
    966			sp_sb_data.p_func.vf_valid,
    967			sp_sb_data.state);
    968	}
    969
    970	for_each_eth_queue(bp, i) {
    971		struct bnx2x_fastpath *fp = &bp->fp[i];
    972		int loop;
    973		struct hc_status_block_data_e2 sb_data_e2;
    974		struct hc_status_block_data_e1x sb_data_e1x;
    975		struct hc_status_block_sm  *hc_sm_p =
    976			CHIP_IS_E1x(bp) ?
    977			sb_data_e1x.common.state_machine :
    978			sb_data_e2.common.state_machine;
    979		struct hc_index_data *hc_index_p =
    980			CHIP_IS_E1x(bp) ?
    981			sb_data_e1x.index_data :
    982			sb_data_e2.index_data;
    983		u8 data_size, cos;
    984		u32 *sb_data_p;
    985		struct bnx2x_fp_txdata txdata;
    986
    987		if (!bp->fp)
    988			break;
    989
    990		if (!fp->rx_cons_sb)
    991			continue;
    992
    993		/* Rx */
    994		BNX2X_ERR("fp%d: rx_bd_prod(0x%x)  rx_bd_cons(0x%x)  rx_comp_prod(0x%x)  rx_comp_cons(0x%x)  *rx_cons_sb(0x%x)\n",
    995			  i, fp->rx_bd_prod, fp->rx_bd_cons,
    996			  fp->rx_comp_prod,
    997			  fp->rx_comp_cons, le16_to_cpu(*fp->rx_cons_sb));
    998		BNX2X_ERR("     rx_sge_prod(0x%x)  last_max_sge(0x%x)  fp_hc_idx(0x%x)\n",
    999			  fp->rx_sge_prod, fp->last_max_sge,
   1000			  le16_to_cpu(fp->fp_hc_idx));
   1001
   1002		/* Tx */
   1003		for_each_cos_in_tx_queue(fp, cos)
   1004		{
   1005			if (!fp->txdata_ptr[cos])
   1006				break;
   1007
   1008			txdata = *fp->txdata_ptr[cos];
   1009
   1010			if (!txdata.tx_cons_sb)
   1011				continue;
   1012
   1013			BNX2X_ERR("fp%d: tx_pkt_prod(0x%x)  tx_pkt_cons(0x%x)  tx_bd_prod(0x%x)  tx_bd_cons(0x%x)  *tx_cons_sb(0x%x)\n",
   1014				  i, txdata.tx_pkt_prod,
   1015				  txdata.tx_pkt_cons, txdata.tx_bd_prod,
   1016				  txdata.tx_bd_cons,
   1017				  le16_to_cpu(*txdata.tx_cons_sb));
   1018		}
   1019
   1020		loop = CHIP_IS_E1x(bp) ?
   1021			HC_SB_MAX_INDICES_E1X : HC_SB_MAX_INDICES_E2;
   1022
   1023		/* host sb data */
   1024
   1025		if (IS_FCOE_FP(fp))
   1026			continue;
   1027
   1028		BNX2X_ERR("     run indexes (");
   1029		for (j = 0; j < HC_SB_MAX_SM; j++)
   1030			pr_cont("0x%x%s",
   1031			       fp->sb_running_index[j],
   1032			       (j == HC_SB_MAX_SM - 1) ? ")" : " ");
   1033
   1034		BNX2X_ERR("     indexes (");
   1035		for (j = 0; j < loop; j++)
   1036			pr_cont("0x%x%s",
   1037			       fp->sb_index_values[j],
   1038			       (j == loop - 1) ? ")" : " ");
   1039
   1040		/* VF cannot access FW refelection for status block */
   1041		if (IS_VF(bp))
   1042			continue;
   1043
   1044		/* fw sb data */
   1045		data_size = CHIP_IS_E1x(bp) ?
   1046			sizeof(struct hc_status_block_data_e1x) :
   1047			sizeof(struct hc_status_block_data_e2);
   1048		data_size /= sizeof(u32);
   1049		sb_data_p = CHIP_IS_E1x(bp) ?
   1050			(u32 *)&sb_data_e1x :
   1051			(u32 *)&sb_data_e2;
   1052		/* copy sb data in here */
   1053		for (j = 0; j < data_size; j++)
   1054			*(sb_data_p + j) = REG_RD(bp, BAR_CSTRORM_INTMEM +
   1055				CSTORM_STATUS_BLOCK_DATA_OFFSET(fp->fw_sb_id) +
   1056				j * sizeof(u32));
   1057
   1058		if (!CHIP_IS_E1x(bp)) {
   1059			pr_cont("pf_id(0x%x)  vf_id(0x%x)  vf_valid(0x%x) vnic_id(0x%x)  same_igu_sb_1b(0x%x) state(0x%x)\n",
   1060				sb_data_e2.common.p_func.pf_id,
   1061				sb_data_e2.common.p_func.vf_id,
   1062				sb_data_e2.common.p_func.vf_valid,
   1063				sb_data_e2.common.p_func.vnic_id,
   1064				sb_data_e2.common.same_igu_sb_1b,
   1065				sb_data_e2.common.state);
   1066		} else {
   1067			pr_cont("pf_id(0x%x)  vf_id(0x%x)  vf_valid(0x%x) vnic_id(0x%x)  same_igu_sb_1b(0x%x) state(0x%x)\n",
   1068				sb_data_e1x.common.p_func.pf_id,
   1069				sb_data_e1x.common.p_func.vf_id,
   1070				sb_data_e1x.common.p_func.vf_valid,
   1071				sb_data_e1x.common.p_func.vnic_id,
   1072				sb_data_e1x.common.same_igu_sb_1b,
   1073				sb_data_e1x.common.state);
   1074		}
   1075
   1076		/* SB_SMs data */
   1077		for (j = 0; j < HC_SB_MAX_SM; j++) {
   1078			pr_cont("SM[%d] __flags (0x%x) igu_sb_id (0x%x)  igu_seg_id(0x%x) time_to_expire (0x%x) timer_value(0x%x)\n",
   1079				j, hc_sm_p[j].__flags,
   1080				hc_sm_p[j].igu_sb_id,
   1081				hc_sm_p[j].igu_seg_id,
   1082				hc_sm_p[j].time_to_expire,
   1083				hc_sm_p[j].timer_value);
   1084		}
   1085
   1086		/* Indices data */
   1087		for (j = 0; j < loop; j++) {
   1088			pr_cont("INDEX[%d] flags (0x%x) timeout (0x%x)\n", j,
   1089			       hc_index_p[j].flags,
   1090			       hc_index_p[j].timeout);
   1091		}
   1092	}
   1093
   1094#ifdef BNX2X_STOP_ON_ERROR
   1095	if (IS_PF(bp)) {
   1096		/* event queue */
   1097		BNX2X_ERR("eq cons %x prod %x\n", bp->eq_cons, bp->eq_prod);
   1098		for (i = 0; i < NUM_EQ_DESC; i++) {
   1099			u32 *data = (u32 *)&bp->eq_ring[i].message.data;
   1100
   1101			BNX2X_ERR("event queue [%d]: header: opcode %d, error %d\n",
   1102				  i, bp->eq_ring[i].message.opcode,
   1103				  bp->eq_ring[i].message.error);
   1104			BNX2X_ERR("data: %x %x %x\n",
   1105				  data[0], data[1], data[2]);
   1106		}
   1107	}
   1108
   1109	/* Rings */
   1110	/* Rx */
   1111	for_each_valid_rx_queue(bp, i) {
   1112		struct bnx2x_fastpath *fp = &bp->fp[i];
   1113
   1114		if (!bp->fp)
   1115			break;
   1116
   1117		if (!fp->rx_cons_sb)
   1118			continue;
   1119
   1120		start = RX_BD(le16_to_cpu(*fp->rx_cons_sb) - 10);
   1121		end = RX_BD(le16_to_cpu(*fp->rx_cons_sb) + 503);
   1122		for (j = start; j != end; j = RX_BD(j + 1)) {
   1123			u32 *rx_bd = (u32 *)&fp->rx_desc_ring[j];
   1124			struct sw_rx_bd *sw_bd = &fp->rx_buf_ring[j];
   1125
   1126			BNX2X_ERR("fp%d: rx_bd[%x]=[%x:%x]  sw_bd=[%p]\n",
   1127				  i, j, rx_bd[1], rx_bd[0], sw_bd->data);
   1128		}
   1129
   1130		start = RX_SGE(fp->rx_sge_prod);
   1131		end = RX_SGE(fp->last_max_sge);
   1132		for (j = start; j != end; j = RX_SGE(j + 1)) {
   1133			u32 *rx_sge = (u32 *)&fp->rx_sge_ring[j];
   1134			struct sw_rx_page *sw_page = &fp->rx_page_ring[j];
   1135
   1136			BNX2X_ERR("fp%d: rx_sge[%x]=[%x:%x]  sw_page=[%p]\n",
   1137				  i, j, rx_sge[1], rx_sge[0], sw_page->page);
   1138		}
   1139
   1140		start = RCQ_BD(fp->rx_comp_cons - 10);
   1141		end = RCQ_BD(fp->rx_comp_cons + 503);
   1142		for (j = start; j != end; j = RCQ_BD(j + 1)) {
   1143			u32 *cqe = (u32 *)&fp->rx_comp_ring[j];
   1144
   1145			BNX2X_ERR("fp%d: cqe[%x]=[%x:%x:%x:%x]\n",
   1146				  i, j, cqe[0], cqe[1], cqe[2], cqe[3]);
   1147		}
   1148	}
   1149
   1150	/* Tx */
   1151	for_each_valid_tx_queue(bp, i) {
   1152		struct bnx2x_fastpath *fp = &bp->fp[i];
   1153
   1154		if (!bp->fp)
   1155			break;
   1156
   1157		for_each_cos_in_tx_queue(fp, cos) {
   1158			struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
   1159
   1160			if (!fp->txdata_ptr[cos])
   1161				break;
   1162
   1163			if (!txdata->tx_cons_sb)
   1164				continue;
   1165
   1166			start = TX_BD(le16_to_cpu(*txdata->tx_cons_sb) - 10);
   1167			end = TX_BD(le16_to_cpu(*txdata->tx_cons_sb) + 245);
   1168			for (j = start; j != end; j = TX_BD(j + 1)) {
   1169				struct sw_tx_bd *sw_bd =
   1170					&txdata->tx_buf_ring[j];
   1171
   1172				BNX2X_ERR("fp%d: txdata %d, packet[%x]=[%p,%x]\n",
   1173					  i, cos, j, sw_bd->skb,
   1174					  sw_bd->first_bd);
   1175			}
   1176
   1177			start = TX_BD(txdata->tx_bd_cons - 10);
   1178			end = TX_BD(txdata->tx_bd_cons + 254);
   1179			for (j = start; j != end; j = TX_BD(j + 1)) {
   1180				u32 *tx_bd = (u32 *)&txdata->tx_desc_ring[j];
   1181
   1182				BNX2X_ERR("fp%d: txdata %d, tx_bd[%x]=[%x:%x:%x:%x]\n",
   1183					  i, cos, j, tx_bd[0], tx_bd[1],
   1184					  tx_bd[2], tx_bd[3]);
   1185			}
   1186		}
   1187	}
   1188#endif
   1189	if (IS_PF(bp)) {
   1190		int tmp_msg_en = bp->msg_enable;
   1191
   1192		bnx2x_fw_dump(bp);
   1193		bp->msg_enable |= NETIF_MSG_HW;
   1194		BNX2X_ERR("Idle check (1st round) ----------\n");
   1195		bnx2x_idle_chk(bp);
   1196		BNX2X_ERR("Idle check (2nd round) ----------\n");
   1197		bnx2x_idle_chk(bp);
   1198		bp->msg_enable = tmp_msg_en;
   1199		bnx2x_mc_assert(bp);
   1200	}
   1201
   1202	BNX2X_ERR("end crash dump -----------------\n");
   1203}
   1204
   1205/*
   1206 * FLR Support for E2
   1207 *
   1208 * bnx2x_pf_flr_clnup() is called during nic_load in the per function HW
   1209 * initialization.
   1210 */
   1211#define FLR_WAIT_USEC		10000	/* 10 milliseconds */
   1212#define FLR_WAIT_INTERVAL	50	/* usec */
   1213#define	FLR_POLL_CNT		(FLR_WAIT_USEC/FLR_WAIT_INTERVAL) /* 200 */
   1214
   1215struct pbf_pN_buf_regs {
   1216	int pN;
   1217	u32 init_crd;
   1218	u32 crd;
   1219	u32 crd_freed;
   1220};
   1221
   1222struct pbf_pN_cmd_regs {
   1223	int pN;
   1224	u32 lines_occup;
   1225	u32 lines_freed;
   1226};
   1227
   1228static void bnx2x_pbf_pN_buf_flushed(struct bnx2x *bp,
   1229				     struct pbf_pN_buf_regs *regs,
   1230				     u32 poll_count)
   1231{
   1232	u32 init_crd, crd, crd_start, crd_freed, crd_freed_start;
   1233	u32 cur_cnt = poll_count;
   1234
   1235	crd_freed = crd_freed_start = REG_RD(bp, regs->crd_freed);
   1236	crd = crd_start = REG_RD(bp, regs->crd);
   1237	init_crd = REG_RD(bp, regs->init_crd);
   1238
   1239	DP(BNX2X_MSG_SP, "INIT CREDIT[%d] : %x\n", regs->pN, init_crd);
   1240	DP(BNX2X_MSG_SP, "CREDIT[%d]      : s:%x\n", regs->pN, crd);
   1241	DP(BNX2X_MSG_SP, "CREDIT_FREED[%d]: s:%x\n", regs->pN, crd_freed);
   1242
   1243	while ((crd != init_crd) && ((u32)SUB_S32(crd_freed, crd_freed_start) <
   1244	       (init_crd - crd_start))) {
   1245		if (cur_cnt--) {
   1246			udelay(FLR_WAIT_INTERVAL);
   1247			crd = REG_RD(bp, regs->crd);
   1248			crd_freed = REG_RD(bp, regs->crd_freed);
   1249		} else {
   1250			DP(BNX2X_MSG_SP, "PBF tx buffer[%d] timed out\n",
   1251			   regs->pN);
   1252			DP(BNX2X_MSG_SP, "CREDIT[%d]      : c:%x\n",
   1253			   regs->pN, crd);
   1254			DP(BNX2X_MSG_SP, "CREDIT_FREED[%d]: c:%x\n",
   1255			   regs->pN, crd_freed);
   1256			break;
   1257		}
   1258	}
   1259	DP(BNX2X_MSG_SP, "Waited %d*%d usec for PBF tx buffer[%d]\n",
   1260	   poll_count-cur_cnt, FLR_WAIT_INTERVAL, regs->pN);
   1261}
   1262
   1263static void bnx2x_pbf_pN_cmd_flushed(struct bnx2x *bp,
   1264				     struct pbf_pN_cmd_regs *regs,
   1265				     u32 poll_count)
   1266{
   1267	u32 occup, to_free, freed, freed_start;
   1268	u32 cur_cnt = poll_count;
   1269
   1270	occup = to_free = REG_RD(bp, regs->lines_occup);
   1271	freed = freed_start = REG_RD(bp, regs->lines_freed);
   1272
   1273	DP(BNX2X_MSG_SP, "OCCUPANCY[%d]   : s:%x\n", regs->pN, occup);
   1274	DP(BNX2X_MSG_SP, "LINES_FREED[%d] : s:%x\n", regs->pN, freed);
   1275
   1276	while (occup && ((u32)SUB_S32(freed, freed_start) < to_free)) {
   1277		if (cur_cnt--) {
   1278			udelay(FLR_WAIT_INTERVAL);
   1279			occup = REG_RD(bp, regs->lines_occup);
   1280			freed = REG_RD(bp, regs->lines_freed);
   1281		} else {
   1282			DP(BNX2X_MSG_SP, "PBF cmd queue[%d] timed out\n",
   1283			   regs->pN);
   1284			DP(BNX2X_MSG_SP, "OCCUPANCY[%d]   : s:%x\n",
   1285			   regs->pN, occup);
   1286			DP(BNX2X_MSG_SP, "LINES_FREED[%d] : s:%x\n",
   1287			   regs->pN, freed);
   1288			break;
   1289		}
   1290	}
   1291	DP(BNX2X_MSG_SP, "Waited %d*%d usec for PBF cmd queue[%d]\n",
   1292	   poll_count-cur_cnt, FLR_WAIT_INTERVAL, regs->pN);
   1293}
   1294
   1295static u32 bnx2x_flr_clnup_reg_poll(struct bnx2x *bp, u32 reg,
   1296				    u32 expected, u32 poll_count)
   1297{
   1298	u32 cur_cnt = poll_count;
   1299	u32 val;
   1300
   1301	while ((val = REG_RD(bp, reg)) != expected && cur_cnt--)
   1302		udelay(FLR_WAIT_INTERVAL);
   1303
   1304	return val;
   1305}
   1306
   1307int bnx2x_flr_clnup_poll_hw_counter(struct bnx2x *bp, u32 reg,
   1308				    char *msg, u32 poll_cnt)
   1309{
   1310	u32 val = bnx2x_flr_clnup_reg_poll(bp, reg, 0, poll_cnt);
   1311	if (val != 0) {
   1312		BNX2X_ERR("%s usage count=%d\n", msg, val);
   1313		return 1;
   1314	}
   1315	return 0;
   1316}
   1317
   1318/* Common routines with VF FLR cleanup */
   1319u32 bnx2x_flr_clnup_poll_count(struct bnx2x *bp)
   1320{
   1321	/* adjust polling timeout */
   1322	if (CHIP_REV_IS_EMUL(bp))
   1323		return FLR_POLL_CNT * 2000;
   1324
   1325	if (CHIP_REV_IS_FPGA(bp))
   1326		return FLR_POLL_CNT * 120;
   1327
   1328	return FLR_POLL_CNT;
   1329}
   1330
   1331void bnx2x_tx_hw_flushed(struct bnx2x *bp, u32 poll_count)
   1332{
   1333	struct pbf_pN_cmd_regs cmd_regs[] = {
   1334		{0, (CHIP_IS_E3B0(bp)) ?
   1335			PBF_REG_TQ_OCCUPANCY_Q0 :
   1336			PBF_REG_P0_TQ_OCCUPANCY,
   1337		    (CHIP_IS_E3B0(bp)) ?
   1338			PBF_REG_TQ_LINES_FREED_CNT_Q0 :
   1339			PBF_REG_P0_TQ_LINES_FREED_CNT},
   1340		{1, (CHIP_IS_E3B0(bp)) ?
   1341			PBF_REG_TQ_OCCUPANCY_Q1 :
   1342			PBF_REG_P1_TQ_OCCUPANCY,
   1343		    (CHIP_IS_E3B0(bp)) ?
   1344			PBF_REG_TQ_LINES_FREED_CNT_Q1 :
   1345			PBF_REG_P1_TQ_LINES_FREED_CNT},
   1346		{4, (CHIP_IS_E3B0(bp)) ?
   1347			PBF_REG_TQ_OCCUPANCY_LB_Q :
   1348			PBF_REG_P4_TQ_OCCUPANCY,
   1349		    (CHIP_IS_E3B0(bp)) ?
   1350			PBF_REG_TQ_LINES_FREED_CNT_LB_Q :
   1351			PBF_REG_P4_TQ_LINES_FREED_CNT}
   1352	};
   1353
   1354	struct pbf_pN_buf_regs buf_regs[] = {
   1355		{0, (CHIP_IS_E3B0(bp)) ?
   1356			PBF_REG_INIT_CRD_Q0 :
   1357			PBF_REG_P0_INIT_CRD ,
   1358		    (CHIP_IS_E3B0(bp)) ?
   1359			PBF_REG_CREDIT_Q0 :
   1360			PBF_REG_P0_CREDIT,
   1361		    (CHIP_IS_E3B0(bp)) ?
   1362			PBF_REG_INTERNAL_CRD_FREED_CNT_Q0 :
   1363			PBF_REG_P0_INTERNAL_CRD_FREED_CNT},
   1364		{1, (CHIP_IS_E3B0(bp)) ?
   1365			PBF_REG_INIT_CRD_Q1 :
   1366			PBF_REG_P1_INIT_CRD,
   1367		    (CHIP_IS_E3B0(bp)) ?
   1368			PBF_REG_CREDIT_Q1 :
   1369			PBF_REG_P1_CREDIT,
   1370		    (CHIP_IS_E3B0(bp)) ?
   1371			PBF_REG_INTERNAL_CRD_FREED_CNT_Q1 :
   1372			PBF_REG_P1_INTERNAL_CRD_FREED_CNT},
   1373		{4, (CHIP_IS_E3B0(bp)) ?
   1374			PBF_REG_INIT_CRD_LB_Q :
   1375			PBF_REG_P4_INIT_CRD,
   1376		    (CHIP_IS_E3B0(bp)) ?
   1377			PBF_REG_CREDIT_LB_Q :
   1378			PBF_REG_P4_CREDIT,
   1379		    (CHIP_IS_E3B0(bp)) ?
   1380			PBF_REG_INTERNAL_CRD_FREED_CNT_LB_Q :
   1381			PBF_REG_P4_INTERNAL_CRD_FREED_CNT},
   1382	};
   1383
   1384	int i;
   1385
   1386	/* Verify the command queues are flushed P0, P1, P4 */
   1387	for (i = 0; i < ARRAY_SIZE(cmd_regs); i++)
   1388		bnx2x_pbf_pN_cmd_flushed(bp, &cmd_regs[i], poll_count);
   1389
   1390	/* Verify the transmission buffers are flushed P0, P1, P4 */
   1391	for (i = 0; i < ARRAY_SIZE(buf_regs); i++)
   1392		bnx2x_pbf_pN_buf_flushed(bp, &buf_regs[i], poll_count);
   1393}
   1394
   1395#define OP_GEN_PARAM(param) \
   1396	(((param) << SDM_OP_GEN_COMP_PARAM_SHIFT) & SDM_OP_GEN_COMP_PARAM)
   1397
   1398#define OP_GEN_TYPE(type) \
   1399	(((type) << SDM_OP_GEN_COMP_TYPE_SHIFT) & SDM_OP_GEN_COMP_TYPE)
   1400
   1401#define OP_GEN_AGG_VECT(index) \
   1402	(((index) << SDM_OP_GEN_AGG_VECT_IDX_SHIFT) & SDM_OP_GEN_AGG_VECT_IDX)
   1403
   1404int bnx2x_send_final_clnup(struct bnx2x *bp, u8 clnup_func, u32 poll_cnt)
   1405{
   1406	u32 op_gen_command = 0;
   1407	u32 comp_addr = BAR_CSTRORM_INTMEM +
   1408			CSTORM_FINAL_CLEANUP_COMPLETE_OFFSET(clnup_func);
   1409
   1410	if (REG_RD(bp, comp_addr)) {
   1411		BNX2X_ERR("Cleanup complete was not 0 before sending\n");
   1412		return 1;
   1413	}
   1414
   1415	op_gen_command |= OP_GEN_PARAM(XSTORM_AGG_INT_FINAL_CLEANUP_INDEX);
   1416	op_gen_command |= OP_GEN_TYPE(XSTORM_AGG_INT_FINAL_CLEANUP_COMP_TYPE);
   1417	op_gen_command |= OP_GEN_AGG_VECT(clnup_func);
   1418	op_gen_command |= 1 << SDM_OP_GEN_AGG_VECT_IDX_VALID_SHIFT;
   1419
   1420	DP(BNX2X_MSG_SP, "sending FW Final cleanup\n");
   1421	REG_WR(bp, XSDM_REG_OPERATION_GEN, op_gen_command);
   1422
   1423	if (bnx2x_flr_clnup_reg_poll(bp, comp_addr, 1, poll_cnt) != 1) {
   1424		BNX2X_ERR("FW final cleanup did not succeed\n");
   1425		DP(BNX2X_MSG_SP, "At timeout completion address contained %x\n",
   1426		   (REG_RD(bp, comp_addr)));
   1427		bnx2x_panic();
   1428		return 1;
   1429	}
   1430	/* Zero completion for next FLR */
   1431	REG_WR(bp, comp_addr, 0);
   1432
   1433	return 0;
   1434}
   1435
   1436u8 bnx2x_is_pcie_pending(struct pci_dev *dev)
   1437{
   1438	u16 status;
   1439
   1440	pcie_capability_read_word(dev, PCI_EXP_DEVSTA, &status);
   1441	return status & PCI_EXP_DEVSTA_TRPND;
   1442}
   1443
   1444/* PF FLR specific routines
   1445*/
   1446static int bnx2x_poll_hw_usage_counters(struct bnx2x *bp, u32 poll_cnt)
   1447{
   1448	/* wait for CFC PF usage-counter to zero (includes all the VFs) */
   1449	if (bnx2x_flr_clnup_poll_hw_counter(bp,
   1450			CFC_REG_NUM_LCIDS_INSIDE_PF,
   1451			"CFC PF usage counter timed out",
   1452			poll_cnt))
   1453		return 1;
   1454
   1455	/* Wait for DQ PF usage-counter to zero (until DQ cleanup) */
   1456	if (bnx2x_flr_clnup_poll_hw_counter(bp,
   1457			DORQ_REG_PF_USAGE_CNT,
   1458			"DQ PF usage counter timed out",
   1459			poll_cnt))
   1460		return 1;
   1461
   1462	/* Wait for QM PF usage-counter to zero (until DQ cleanup) */
   1463	if (bnx2x_flr_clnup_poll_hw_counter(bp,
   1464			QM_REG_PF_USG_CNT_0 + 4*BP_FUNC(bp),
   1465			"QM PF usage counter timed out",
   1466			poll_cnt))
   1467		return 1;
   1468
   1469	/* Wait for Timer PF usage-counters to zero (until DQ cleanup) */
   1470	if (bnx2x_flr_clnup_poll_hw_counter(bp,
   1471			TM_REG_LIN0_VNIC_UC + 4*BP_PORT(bp),
   1472			"Timers VNIC usage counter timed out",
   1473			poll_cnt))
   1474		return 1;
   1475	if (bnx2x_flr_clnup_poll_hw_counter(bp,
   1476			TM_REG_LIN0_NUM_SCANS + 4*BP_PORT(bp),
   1477			"Timers NUM_SCANS usage counter timed out",
   1478			poll_cnt))
   1479		return 1;
   1480
   1481	/* Wait DMAE PF usage counter to zero */
   1482	if (bnx2x_flr_clnup_poll_hw_counter(bp,
   1483			dmae_reg_go_c[INIT_DMAE_C(bp)],
   1484			"DMAE command register timed out",
   1485			poll_cnt))
   1486		return 1;
   1487
   1488	return 0;
   1489}
   1490
   1491static void bnx2x_hw_enable_status(struct bnx2x *bp)
   1492{
   1493	u32 val;
   1494
   1495	val = REG_RD(bp, CFC_REG_WEAK_ENABLE_PF);
   1496	DP(BNX2X_MSG_SP, "CFC_REG_WEAK_ENABLE_PF is 0x%x\n", val);
   1497
   1498	val = REG_RD(bp, PBF_REG_DISABLE_PF);
   1499	DP(BNX2X_MSG_SP, "PBF_REG_DISABLE_PF is 0x%x\n", val);
   1500
   1501	val = REG_RD(bp, IGU_REG_PCI_PF_MSI_EN);
   1502	DP(BNX2X_MSG_SP, "IGU_REG_PCI_PF_MSI_EN is 0x%x\n", val);
   1503
   1504	val = REG_RD(bp, IGU_REG_PCI_PF_MSIX_EN);
   1505	DP(BNX2X_MSG_SP, "IGU_REG_PCI_PF_MSIX_EN is 0x%x\n", val);
   1506
   1507	val = REG_RD(bp, IGU_REG_PCI_PF_MSIX_FUNC_MASK);
   1508	DP(BNX2X_MSG_SP, "IGU_REG_PCI_PF_MSIX_FUNC_MASK is 0x%x\n", val);
   1509
   1510	val = REG_RD(bp, PGLUE_B_REG_SHADOW_BME_PF_7_0_CLR);
   1511	DP(BNX2X_MSG_SP, "PGLUE_B_REG_SHADOW_BME_PF_7_0_CLR is 0x%x\n", val);
   1512
   1513	val = REG_RD(bp, PGLUE_B_REG_FLR_REQUEST_PF_7_0_CLR);
   1514	DP(BNX2X_MSG_SP, "PGLUE_B_REG_FLR_REQUEST_PF_7_0_CLR is 0x%x\n", val);
   1515
   1516	val = REG_RD(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER);
   1517	DP(BNX2X_MSG_SP, "PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER is 0x%x\n",
   1518	   val);
   1519}
   1520
   1521static int bnx2x_pf_flr_clnup(struct bnx2x *bp)
   1522{
   1523	u32 poll_cnt = bnx2x_flr_clnup_poll_count(bp);
   1524
   1525	DP(BNX2X_MSG_SP, "Cleanup after FLR PF[%d]\n", BP_ABS_FUNC(bp));
   1526
   1527	/* Re-enable PF target read access */
   1528	REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_TARGET_READ, 1);
   1529
   1530	/* Poll HW usage counters */
   1531	DP(BNX2X_MSG_SP, "Polling usage counters\n");
   1532	if (bnx2x_poll_hw_usage_counters(bp, poll_cnt))
   1533		return -EBUSY;
   1534
   1535	/* Zero the igu 'trailing edge' and 'leading edge' */
   1536
   1537	/* Send the FW cleanup command */
   1538	if (bnx2x_send_final_clnup(bp, (u8)BP_FUNC(bp), poll_cnt))
   1539		return -EBUSY;
   1540
   1541	/* ATC cleanup */
   1542
   1543	/* Verify TX hw is flushed */
   1544	bnx2x_tx_hw_flushed(bp, poll_cnt);
   1545
   1546	/* Wait 100ms (not adjusted according to platform) */
   1547	msleep(100);
   1548
   1549	/* Verify no pending pci transactions */
   1550	if (bnx2x_is_pcie_pending(bp->pdev))
   1551		BNX2X_ERR("PCIE Transactions still pending\n");
   1552
   1553	/* Debug */
   1554	bnx2x_hw_enable_status(bp);
   1555
   1556	/*
   1557	 * Master enable - Due to WB DMAE writes performed before this
   1558	 * register is re-initialized as part of the regular function init
   1559	 */
   1560	REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 1);
   1561
   1562	return 0;
   1563}
   1564
   1565static void bnx2x_hc_int_enable(struct bnx2x *bp)
   1566{
   1567	int port = BP_PORT(bp);
   1568	u32 addr = port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0;
   1569	u32 val = REG_RD(bp, addr);
   1570	bool msix = (bp->flags & USING_MSIX_FLAG) ? true : false;
   1571	bool single_msix = (bp->flags & USING_SINGLE_MSIX_FLAG) ? true : false;
   1572	bool msi = (bp->flags & USING_MSI_FLAG) ? true : false;
   1573
   1574	if (msix) {
   1575		val &= ~(HC_CONFIG_0_REG_SINGLE_ISR_EN_0 |
   1576			 HC_CONFIG_0_REG_INT_LINE_EN_0);
   1577		val |= (HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 |
   1578			HC_CONFIG_0_REG_ATTN_BIT_EN_0);
   1579		if (single_msix)
   1580			val |= HC_CONFIG_0_REG_SINGLE_ISR_EN_0;
   1581	} else if (msi) {
   1582		val &= ~HC_CONFIG_0_REG_INT_LINE_EN_0;
   1583		val |= (HC_CONFIG_0_REG_SINGLE_ISR_EN_0 |
   1584			HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 |
   1585			HC_CONFIG_0_REG_ATTN_BIT_EN_0);
   1586	} else {
   1587		val |= (HC_CONFIG_0_REG_SINGLE_ISR_EN_0 |
   1588			HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 |
   1589			HC_CONFIG_0_REG_INT_LINE_EN_0 |
   1590			HC_CONFIG_0_REG_ATTN_BIT_EN_0);
   1591
   1592		if (!CHIP_IS_E1(bp)) {
   1593			DP(NETIF_MSG_IFUP,
   1594			   "write %x to HC %d (addr 0x%x)\n", val, port, addr);
   1595
   1596			REG_WR(bp, addr, val);
   1597
   1598			val &= ~HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0;
   1599		}
   1600	}
   1601
   1602	if (CHIP_IS_E1(bp))
   1603		REG_WR(bp, HC_REG_INT_MASK + port*4, 0x1FFFF);
   1604
   1605	DP(NETIF_MSG_IFUP,
   1606	   "write %x to HC %d (addr 0x%x) mode %s\n", val, port, addr,
   1607	   (msix ? "MSI-X" : (msi ? "MSI" : "INTx")));
   1608
   1609	REG_WR(bp, addr, val);
   1610	/*
   1611	 * Ensure that HC_CONFIG is written before leading/trailing edge config
   1612	 */
   1613	barrier();
   1614
   1615	if (!CHIP_IS_E1(bp)) {
   1616		/* init leading/trailing edge */
   1617		if (IS_MF(bp)) {
   1618			val = (0xee0f | (1 << (BP_VN(bp) + 4)));
   1619			if (bp->port.pmf)
   1620				/* enable nig and gpio3 attention */
   1621				val |= 0x1100;
   1622		} else
   1623			val = 0xffff;
   1624
   1625		REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, val);
   1626		REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, val);
   1627	}
   1628}
   1629
   1630static void bnx2x_igu_int_enable(struct bnx2x *bp)
   1631{
   1632	u32 val;
   1633	bool msix = (bp->flags & USING_MSIX_FLAG) ? true : false;
   1634	bool single_msix = (bp->flags & USING_SINGLE_MSIX_FLAG) ? true : false;
   1635	bool msi = (bp->flags & USING_MSI_FLAG) ? true : false;
   1636
   1637	val = REG_RD(bp, IGU_REG_PF_CONFIGURATION);
   1638
   1639	if (msix) {
   1640		val &= ~(IGU_PF_CONF_INT_LINE_EN |
   1641			 IGU_PF_CONF_SINGLE_ISR_EN);
   1642		val |= (IGU_PF_CONF_MSI_MSIX_EN |
   1643			IGU_PF_CONF_ATTN_BIT_EN);
   1644
   1645		if (single_msix)
   1646			val |= IGU_PF_CONF_SINGLE_ISR_EN;
   1647	} else if (msi) {
   1648		val &= ~IGU_PF_CONF_INT_LINE_EN;
   1649		val |= (IGU_PF_CONF_MSI_MSIX_EN |
   1650			IGU_PF_CONF_ATTN_BIT_EN |
   1651			IGU_PF_CONF_SINGLE_ISR_EN);
   1652	} else {
   1653		val &= ~IGU_PF_CONF_MSI_MSIX_EN;
   1654		val |= (IGU_PF_CONF_INT_LINE_EN |
   1655			IGU_PF_CONF_ATTN_BIT_EN |
   1656			IGU_PF_CONF_SINGLE_ISR_EN);
   1657	}
   1658
   1659	/* Clean previous status - need to configure igu prior to ack*/
   1660	if ((!msix) || single_msix) {
   1661		REG_WR(bp, IGU_REG_PF_CONFIGURATION, val);
   1662		bnx2x_ack_int(bp);
   1663	}
   1664
   1665	val |= IGU_PF_CONF_FUNC_EN;
   1666
   1667	DP(NETIF_MSG_IFUP, "write 0x%x to IGU  mode %s\n",
   1668	   val, (msix ? "MSI-X" : (msi ? "MSI" : "INTx")));
   1669
   1670	REG_WR(bp, IGU_REG_PF_CONFIGURATION, val);
   1671
   1672	if (val & IGU_PF_CONF_INT_LINE_EN)
   1673		pci_intx(bp->pdev, true);
   1674
   1675	barrier();
   1676
   1677	/* init leading/trailing edge */
   1678	if (IS_MF(bp)) {
   1679		val = (0xee0f | (1 << (BP_VN(bp) + 4)));
   1680		if (bp->port.pmf)
   1681			/* enable nig and gpio3 attention */
   1682			val |= 0x1100;
   1683	} else
   1684		val = 0xffff;
   1685
   1686	REG_WR(bp, IGU_REG_TRAILING_EDGE_LATCH, val);
   1687	REG_WR(bp, IGU_REG_LEADING_EDGE_LATCH, val);
   1688}
   1689
   1690void bnx2x_int_enable(struct bnx2x *bp)
   1691{
   1692	if (bp->common.int_block == INT_BLOCK_HC)
   1693		bnx2x_hc_int_enable(bp);
   1694	else
   1695		bnx2x_igu_int_enable(bp);
   1696}
   1697
   1698void bnx2x_int_disable_sync(struct bnx2x *bp, int disable_hw)
   1699{
   1700	int msix = (bp->flags & USING_MSIX_FLAG) ? 1 : 0;
   1701	int i, offset;
   1702
   1703	if (disable_hw)
   1704		/* prevent the HW from sending interrupts */
   1705		bnx2x_int_disable(bp);
   1706
   1707	/* make sure all ISRs are done */
   1708	if (msix) {
   1709		synchronize_irq(bp->msix_table[0].vector);
   1710		offset = 1;
   1711		if (CNIC_SUPPORT(bp))
   1712			offset++;
   1713		for_each_eth_queue(bp, i)
   1714			synchronize_irq(bp->msix_table[offset++].vector);
   1715	} else
   1716		synchronize_irq(bp->pdev->irq);
   1717
   1718	/* make sure sp_task is not running */
   1719	cancel_delayed_work(&bp->sp_task);
   1720	cancel_delayed_work(&bp->period_task);
   1721	flush_workqueue(bnx2x_wq);
   1722}
   1723
   1724/* fast path */
   1725
   1726/*
   1727 * General service functions
   1728 */
   1729
   1730/* Return true if succeeded to acquire the lock */
   1731static bool bnx2x_trylock_hw_lock(struct bnx2x *bp, u32 resource)
   1732{
   1733	u32 lock_status;
   1734	u32 resource_bit = (1 << resource);
   1735	int func = BP_FUNC(bp);
   1736	u32 hw_lock_control_reg;
   1737
   1738	DP(NETIF_MSG_HW | NETIF_MSG_IFUP,
   1739	   "Trying to take a lock on resource %d\n", resource);
   1740
   1741	/* Validating that the resource is within range */
   1742	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
   1743		DP(NETIF_MSG_HW | NETIF_MSG_IFUP,
   1744		   "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n",
   1745		   resource, HW_LOCK_MAX_RESOURCE_VALUE);
   1746		return false;
   1747	}
   1748
   1749	if (func <= 5)
   1750		hw_lock_control_reg = (MISC_REG_DRIVER_CONTROL_1 + func*8);
   1751	else
   1752		hw_lock_control_reg =
   1753				(MISC_REG_DRIVER_CONTROL_7 + (func - 6)*8);
   1754
   1755	/* Try to acquire the lock */
   1756	REG_WR(bp, hw_lock_control_reg + 4, resource_bit);
   1757	lock_status = REG_RD(bp, hw_lock_control_reg);
   1758	if (lock_status & resource_bit)
   1759		return true;
   1760
   1761	DP(NETIF_MSG_HW | NETIF_MSG_IFUP,
   1762	   "Failed to get a lock on resource %d\n", resource);
   1763	return false;
   1764}
   1765
   1766/**
   1767 * bnx2x_get_leader_lock_resource - get the recovery leader resource id
   1768 *
   1769 * @bp:	driver handle
   1770 *
   1771 * Returns the recovery leader resource id according to the engine this function
   1772 * belongs to. Currently only only 2 engines is supported.
   1773 */
   1774static int bnx2x_get_leader_lock_resource(struct bnx2x *bp)
   1775{
   1776	if (BP_PATH(bp))
   1777		return HW_LOCK_RESOURCE_RECOVERY_LEADER_1;
   1778	else
   1779		return HW_LOCK_RESOURCE_RECOVERY_LEADER_0;
   1780}
   1781
   1782/**
   1783 * bnx2x_trylock_leader_lock- try to acquire a leader lock.
   1784 *
   1785 * @bp: driver handle
   1786 *
   1787 * Tries to acquire a leader lock for current engine.
   1788 */
   1789static bool bnx2x_trylock_leader_lock(struct bnx2x *bp)
   1790{
   1791	return bnx2x_trylock_hw_lock(bp, bnx2x_get_leader_lock_resource(bp));
   1792}
   1793
   1794static void bnx2x_cnic_cfc_comp(struct bnx2x *bp, int cid, u8 err);
   1795
   1796/* schedule the sp task and mark that interrupt occurred (runs from ISR) */
   1797static int bnx2x_schedule_sp_task(struct bnx2x *bp)
   1798{
   1799	/* Set the interrupt occurred bit for the sp-task to recognize it
   1800	 * must ack the interrupt and transition according to the IGU
   1801	 * state machine.
   1802	 */
   1803	atomic_set(&bp->interrupt_occurred, 1);
   1804
   1805	/* The sp_task must execute only after this bit
   1806	 * is set, otherwise we will get out of sync and miss all
   1807	 * further interrupts. Hence, the barrier.
   1808	 */
   1809	smp_wmb();
   1810
   1811	/* schedule sp_task to workqueue */
   1812	return queue_delayed_work(bnx2x_wq, &bp->sp_task, 0);
   1813}
   1814
   1815void bnx2x_sp_event(struct bnx2x_fastpath *fp, union eth_rx_cqe *rr_cqe)
   1816{
   1817	struct bnx2x *bp = fp->bp;
   1818	int cid = SW_CID(rr_cqe->ramrod_cqe.conn_and_cmd_data);
   1819	int command = CQE_CMD(rr_cqe->ramrod_cqe.conn_and_cmd_data);
   1820	enum bnx2x_queue_cmd drv_cmd = BNX2X_Q_CMD_MAX;
   1821	struct bnx2x_queue_sp_obj *q_obj = &bnx2x_sp_obj(bp, fp).q_obj;
   1822
   1823	DP(BNX2X_MSG_SP,
   1824	   "fp %d  cid %d  got ramrod #%d  state is %x  type is %d\n",
   1825	   fp->index, cid, command, bp->state,
   1826	   rr_cqe->ramrod_cqe.ramrod_type);
   1827
   1828	/* If cid is within VF range, replace the slowpath object with the
   1829	 * one corresponding to this VF
   1830	 */
   1831	if (cid >= BNX2X_FIRST_VF_CID  &&
   1832	    cid < BNX2X_FIRST_VF_CID + BNX2X_VF_CIDS)
   1833		bnx2x_iov_set_queue_sp_obj(bp, cid, &q_obj);
   1834
   1835	switch (command) {
   1836	case (RAMROD_CMD_ID_ETH_CLIENT_UPDATE):
   1837		DP(BNX2X_MSG_SP, "got UPDATE ramrod. CID %d\n", cid);
   1838		drv_cmd = BNX2X_Q_CMD_UPDATE;
   1839		break;
   1840
   1841	case (RAMROD_CMD_ID_ETH_CLIENT_SETUP):
   1842		DP(BNX2X_MSG_SP, "got MULTI[%d] setup ramrod\n", cid);
   1843		drv_cmd = BNX2X_Q_CMD_SETUP;
   1844		break;
   1845
   1846	case (RAMROD_CMD_ID_ETH_TX_QUEUE_SETUP):
   1847		DP(BNX2X_MSG_SP, "got MULTI[%d] tx-only setup ramrod\n", cid);
   1848		drv_cmd = BNX2X_Q_CMD_SETUP_TX_ONLY;
   1849		break;
   1850
   1851	case (RAMROD_CMD_ID_ETH_HALT):
   1852		DP(BNX2X_MSG_SP, "got MULTI[%d] halt ramrod\n", cid);
   1853		drv_cmd = BNX2X_Q_CMD_HALT;
   1854		break;
   1855
   1856	case (RAMROD_CMD_ID_ETH_TERMINATE):
   1857		DP(BNX2X_MSG_SP, "got MULTI[%d] terminate ramrod\n", cid);
   1858		drv_cmd = BNX2X_Q_CMD_TERMINATE;
   1859		break;
   1860
   1861	case (RAMROD_CMD_ID_ETH_EMPTY):
   1862		DP(BNX2X_MSG_SP, "got MULTI[%d] empty ramrod\n", cid);
   1863		drv_cmd = BNX2X_Q_CMD_EMPTY;
   1864		break;
   1865
   1866	case (RAMROD_CMD_ID_ETH_TPA_UPDATE):
   1867		DP(BNX2X_MSG_SP, "got tpa update ramrod CID=%d\n", cid);
   1868		drv_cmd = BNX2X_Q_CMD_UPDATE_TPA;
   1869		break;
   1870
   1871	default:
   1872		BNX2X_ERR("unexpected MC reply (%d) on fp[%d]\n",
   1873			  command, fp->index);
   1874		return;
   1875	}
   1876
   1877	if ((drv_cmd != BNX2X_Q_CMD_MAX) &&
   1878	    q_obj->complete_cmd(bp, q_obj, drv_cmd))
   1879		/* q_obj->complete_cmd() failure means that this was
   1880		 * an unexpected completion.
   1881		 *
   1882		 * In this case we don't want to increase the bp->spq_left
   1883		 * because apparently we haven't sent this command the first
   1884		 * place.
   1885		 */
   1886#ifdef BNX2X_STOP_ON_ERROR
   1887		bnx2x_panic();
   1888#else
   1889		return;
   1890#endif
   1891
   1892	smp_mb__before_atomic();
   1893	atomic_inc(&bp->cq_spq_left);
   1894	/* push the change in bp->spq_left and towards the memory */
   1895	smp_mb__after_atomic();
   1896
   1897	DP(BNX2X_MSG_SP, "bp->cq_spq_left %x\n", atomic_read(&bp->cq_spq_left));
   1898
   1899	if ((drv_cmd == BNX2X_Q_CMD_UPDATE) && (IS_FCOE_FP(fp)) &&
   1900	    (!!test_bit(BNX2X_AFEX_FCOE_Q_UPDATE_PENDING, &bp->sp_state))) {
   1901		/* if Q update ramrod is completed for last Q in AFEX vif set
   1902		 * flow, then ACK MCP at the end
   1903		 *
   1904		 * mark pending ACK to MCP bit.
   1905		 * prevent case that both bits are cleared.
   1906		 * At the end of load/unload driver checks that
   1907		 * sp_state is cleared, and this order prevents
   1908		 * races
   1909		 */
   1910		smp_mb__before_atomic();
   1911		set_bit(BNX2X_AFEX_PENDING_VIFSET_MCP_ACK, &bp->sp_state);
   1912		wmb();
   1913		clear_bit(BNX2X_AFEX_FCOE_Q_UPDATE_PENDING, &bp->sp_state);
   1914		smp_mb__after_atomic();
   1915
   1916		/* schedule the sp task as mcp ack is required */
   1917		bnx2x_schedule_sp_task(bp);
   1918	}
   1919
   1920	return;
   1921}
   1922
   1923irqreturn_t bnx2x_interrupt(int irq, void *dev_instance)
   1924{
   1925	struct bnx2x *bp = netdev_priv(dev_instance);
   1926	u16 status = bnx2x_ack_int(bp);
   1927	u16 mask;
   1928	int i;
   1929	u8 cos;
   1930
   1931	/* Return here if interrupt is shared and it's not for us */
   1932	if (unlikely(status == 0)) {
   1933		DP(NETIF_MSG_INTR, "not our interrupt!\n");
   1934		return IRQ_NONE;
   1935	}
   1936	DP(NETIF_MSG_INTR, "got an interrupt  status 0x%x\n", status);
   1937
   1938#ifdef BNX2X_STOP_ON_ERROR
   1939	if (unlikely(bp->panic))
   1940		return IRQ_HANDLED;
   1941#endif
   1942
   1943	for_each_eth_queue(bp, i) {
   1944		struct bnx2x_fastpath *fp = &bp->fp[i];
   1945
   1946		mask = 0x2 << (fp->index + CNIC_SUPPORT(bp));
   1947		if (status & mask) {
   1948			/* Handle Rx or Tx according to SB id */
   1949			for_each_cos_in_tx_queue(fp, cos)
   1950				prefetch(fp->txdata_ptr[cos]->tx_cons_sb);
   1951			prefetch(&fp->sb_running_index[SM_RX_ID]);
   1952			napi_schedule_irqoff(&bnx2x_fp(bp, fp->index, napi));
   1953			status &= ~mask;
   1954		}
   1955	}
   1956
   1957	if (CNIC_SUPPORT(bp)) {
   1958		mask = 0x2;
   1959		if (status & (mask | 0x1)) {
   1960			struct cnic_ops *c_ops = NULL;
   1961
   1962			rcu_read_lock();
   1963			c_ops = rcu_dereference(bp->cnic_ops);
   1964			if (c_ops && (bp->cnic_eth_dev.drv_state &
   1965				      CNIC_DRV_STATE_HANDLES_IRQ))
   1966				c_ops->cnic_handler(bp->cnic_data, NULL);
   1967			rcu_read_unlock();
   1968
   1969			status &= ~mask;
   1970		}
   1971	}
   1972
   1973	if (unlikely(status & 0x1)) {
   1974
   1975		/* schedule sp task to perform default status block work, ack
   1976		 * attentions and enable interrupts.
   1977		 */
   1978		bnx2x_schedule_sp_task(bp);
   1979
   1980		status &= ~0x1;
   1981		if (!status)
   1982			return IRQ_HANDLED;
   1983	}
   1984
   1985	if (unlikely(status))
   1986		DP(NETIF_MSG_INTR, "got an unknown interrupt! (status 0x%x)\n",
   1987		   status);
   1988
   1989	return IRQ_HANDLED;
   1990}
   1991
   1992/* Link */
   1993
   1994/*
   1995 * General service functions
   1996 */
   1997
   1998int bnx2x_acquire_hw_lock(struct bnx2x *bp, u32 resource)
   1999{
   2000	u32 lock_status;
   2001	u32 resource_bit = (1 << resource);
   2002	int func = BP_FUNC(bp);
   2003	u32 hw_lock_control_reg;
   2004	int cnt;
   2005
   2006	/* Validating that the resource is within range */
   2007	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
   2008		BNX2X_ERR("resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n",
   2009		   resource, HW_LOCK_MAX_RESOURCE_VALUE);
   2010		return -EINVAL;
   2011	}
   2012
   2013	if (func <= 5) {
   2014		hw_lock_control_reg = (MISC_REG_DRIVER_CONTROL_1 + func*8);
   2015	} else {
   2016		hw_lock_control_reg =
   2017				(MISC_REG_DRIVER_CONTROL_7 + (func - 6)*8);
   2018	}
   2019
   2020	/* Validating that the resource is not already taken */
   2021	lock_status = REG_RD(bp, hw_lock_control_reg);
   2022	if (lock_status & resource_bit) {
   2023		BNX2X_ERR("lock_status 0x%x  resource_bit 0x%x\n",
   2024		   lock_status, resource_bit);
   2025		return -EEXIST;
   2026	}
   2027
   2028	/* Try for 5 second every 5ms */
   2029	for (cnt = 0; cnt < 1000; cnt++) {
   2030		/* Try to acquire the lock */
   2031		REG_WR(bp, hw_lock_control_reg + 4, resource_bit);
   2032		lock_status = REG_RD(bp, hw_lock_control_reg);
   2033		if (lock_status & resource_bit)
   2034			return 0;
   2035
   2036		usleep_range(5000, 10000);
   2037	}
   2038	BNX2X_ERR("Timeout\n");
   2039	return -EAGAIN;
   2040}
   2041
   2042int bnx2x_release_leader_lock(struct bnx2x *bp)
   2043{
   2044	return bnx2x_release_hw_lock(bp, bnx2x_get_leader_lock_resource(bp));
   2045}
   2046
   2047int bnx2x_release_hw_lock(struct bnx2x *bp, u32 resource)
   2048{
   2049	u32 lock_status;
   2050	u32 resource_bit = (1 << resource);
   2051	int func = BP_FUNC(bp);
   2052	u32 hw_lock_control_reg;
   2053
   2054	/* Validating that the resource is within range */
   2055	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
   2056		BNX2X_ERR("resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n",
   2057		   resource, HW_LOCK_MAX_RESOURCE_VALUE);
   2058		return -EINVAL;
   2059	}
   2060
   2061	if (func <= 5) {
   2062		hw_lock_control_reg = (MISC_REG_DRIVER_CONTROL_1 + func*8);
   2063	} else {
   2064		hw_lock_control_reg =
   2065				(MISC_REG_DRIVER_CONTROL_7 + (func - 6)*8);
   2066	}
   2067
   2068	/* Validating that the resource is currently taken */
   2069	lock_status = REG_RD(bp, hw_lock_control_reg);
   2070	if (!(lock_status & resource_bit)) {
   2071		BNX2X_ERR("lock_status 0x%x resource_bit 0x%x. Unlock was called but lock wasn't taken!\n",
   2072			  lock_status, resource_bit);
   2073		return -EFAULT;
   2074	}
   2075
   2076	REG_WR(bp, hw_lock_control_reg, resource_bit);
   2077	return 0;
   2078}
   2079
   2080int bnx2x_get_gpio(struct bnx2x *bp, int gpio_num, u8 port)
   2081{
   2082	/* The GPIO should be swapped if swap register is set and active */
   2083	int gpio_port = (REG_RD(bp, NIG_REG_PORT_SWAP) &&
   2084			 REG_RD(bp, NIG_REG_STRAP_OVERRIDE)) ^ port;
   2085	int gpio_shift = gpio_num +
   2086			(gpio_port ? MISC_REGISTERS_GPIO_PORT_SHIFT : 0);
   2087	u32 gpio_mask = (1 << gpio_shift);
   2088	u32 gpio_reg;
   2089	int value;
   2090
   2091	if (gpio_num > MISC_REGISTERS_GPIO_3) {
   2092		BNX2X_ERR("Invalid GPIO %d\n", gpio_num);
   2093		return -EINVAL;
   2094	}
   2095
   2096	/* read GPIO value */
   2097	gpio_reg = REG_RD(bp, MISC_REG_GPIO);
   2098
   2099	/* get the requested pin value */
   2100	if ((gpio_reg & gpio_mask) == gpio_mask)
   2101		value = 1;
   2102	else
   2103		value = 0;
   2104
   2105	return value;
   2106}
   2107
   2108int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port)
   2109{
   2110	/* The GPIO should be swapped if swap register is set and active */
   2111	int gpio_port = (REG_RD(bp, NIG_REG_PORT_SWAP) &&
   2112			 REG_RD(bp, NIG_REG_STRAP_OVERRIDE)) ^ port;
   2113	int gpio_shift = gpio_num +
   2114			(gpio_port ? MISC_REGISTERS_GPIO_PORT_SHIFT : 0);
   2115	u32 gpio_mask = (1 << gpio_shift);
   2116	u32 gpio_reg;
   2117
   2118	if (gpio_num > MISC_REGISTERS_GPIO_3) {
   2119		BNX2X_ERR("Invalid GPIO %d\n", gpio_num);
   2120		return -EINVAL;
   2121	}
   2122
   2123	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_GPIO);
   2124	/* read GPIO and mask except the float bits */
   2125	gpio_reg = (REG_RD(bp, MISC_REG_GPIO) & MISC_REGISTERS_GPIO_FLOAT);
   2126
   2127	switch (mode) {
   2128	case MISC_REGISTERS_GPIO_OUTPUT_LOW:
   2129		DP(NETIF_MSG_LINK,
   2130		   "Set GPIO %d (shift %d) -> output low\n",
   2131		   gpio_num, gpio_shift);
   2132		/* clear FLOAT and set CLR */
   2133		gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS);
   2134		gpio_reg |=  (gpio_mask << MISC_REGISTERS_GPIO_CLR_POS);
   2135		break;
   2136
   2137	case MISC_REGISTERS_GPIO_OUTPUT_HIGH:
   2138		DP(NETIF_MSG_LINK,
   2139		   "Set GPIO %d (shift %d) -> output high\n",
   2140		   gpio_num, gpio_shift);
   2141		/* clear FLOAT and set SET */
   2142		gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS);
   2143		gpio_reg |=  (gpio_mask << MISC_REGISTERS_GPIO_SET_POS);
   2144		break;
   2145
   2146	case MISC_REGISTERS_GPIO_INPUT_HI_Z:
   2147		DP(NETIF_MSG_LINK,
   2148		   "Set GPIO %d (shift %d) -> input\n",
   2149		   gpio_num, gpio_shift);
   2150		/* set FLOAT */
   2151		gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS);
   2152		break;
   2153
   2154	default:
   2155		break;
   2156	}
   2157
   2158	REG_WR(bp, MISC_REG_GPIO, gpio_reg);
   2159	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_GPIO);
   2160
   2161	return 0;
   2162}
   2163
   2164int bnx2x_set_mult_gpio(struct bnx2x *bp, u8 pins, u32 mode)
   2165{
   2166	u32 gpio_reg = 0;
   2167	int rc = 0;
   2168
   2169	/* Any port swapping should be handled by caller. */
   2170
   2171	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_GPIO);
   2172	/* read GPIO and mask except the float bits */
   2173	gpio_reg = REG_RD(bp, MISC_REG_GPIO);
   2174	gpio_reg &= ~(pins << MISC_REGISTERS_GPIO_FLOAT_POS);
   2175	gpio_reg &= ~(pins << MISC_REGISTERS_GPIO_CLR_POS);
   2176	gpio_reg &= ~(pins << MISC_REGISTERS_GPIO_SET_POS);
   2177
   2178	switch (mode) {
   2179	case MISC_REGISTERS_GPIO_OUTPUT_LOW:
   2180		DP(NETIF_MSG_LINK, "Set GPIO 0x%x -> output low\n", pins);
   2181		/* set CLR */
   2182		gpio_reg |= (pins << MISC_REGISTERS_GPIO_CLR_POS);
   2183		break;
   2184
   2185	case MISC_REGISTERS_GPIO_OUTPUT_HIGH:
   2186		DP(NETIF_MSG_LINK, "Set GPIO 0x%x -> output high\n", pins);
   2187		/* set SET */
   2188		gpio_reg |= (pins << MISC_REGISTERS_GPIO_SET_POS);
   2189		break;
   2190
   2191	case MISC_REGISTERS_GPIO_INPUT_HI_Z:
   2192		DP(NETIF_MSG_LINK, "Set GPIO 0x%x -> input\n", pins);
   2193		/* set FLOAT */
   2194		gpio_reg |= (pins << MISC_REGISTERS_GPIO_FLOAT_POS);
   2195		break;
   2196
   2197	default:
   2198		BNX2X_ERR("Invalid GPIO mode assignment %d\n", mode);
   2199		rc = -EINVAL;
   2200		break;
   2201	}
   2202
   2203	if (rc == 0)
   2204		REG_WR(bp, MISC_REG_GPIO, gpio_reg);
   2205
   2206	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_GPIO);
   2207
   2208	return rc;
   2209}
   2210
   2211int bnx2x_set_gpio_int(struct bnx2x *bp, int gpio_num, u32 mode, u8 port)
   2212{
   2213	/* The GPIO should be swapped if swap register is set and active */
   2214	int gpio_port = (REG_RD(bp, NIG_REG_PORT_SWAP) &&
   2215			 REG_RD(bp, NIG_REG_STRAP_OVERRIDE)) ^ port;
   2216	int gpio_shift = gpio_num +
   2217			(gpio_port ? MISC_REGISTERS_GPIO_PORT_SHIFT : 0);
   2218	u32 gpio_mask = (1 << gpio_shift);
   2219	u32 gpio_reg;
   2220
   2221	if (gpio_num > MISC_REGISTERS_GPIO_3) {
   2222		BNX2X_ERR("Invalid GPIO %d\n", gpio_num);
   2223		return -EINVAL;
   2224	}
   2225
   2226	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_GPIO);
   2227	/* read GPIO int */
   2228	gpio_reg = REG_RD(bp, MISC_REG_GPIO_INT);
   2229
   2230	switch (mode) {
   2231	case MISC_REGISTERS_GPIO_INT_OUTPUT_CLR:
   2232		DP(NETIF_MSG_LINK,
   2233		   "Clear GPIO INT %d (shift %d) -> output low\n",
   2234		   gpio_num, gpio_shift);
   2235		/* clear SET and set CLR */
   2236		gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_INT_SET_POS);
   2237		gpio_reg |=  (gpio_mask << MISC_REGISTERS_GPIO_INT_CLR_POS);
   2238		break;
   2239
   2240	case MISC_REGISTERS_GPIO_INT_OUTPUT_SET:
   2241		DP(NETIF_MSG_LINK,
   2242		   "Set GPIO INT %d (shift %d) -> output high\n",
   2243		   gpio_num, gpio_shift);
   2244		/* clear CLR and set SET */
   2245		gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_INT_CLR_POS);
   2246		gpio_reg |=  (gpio_mask << MISC_REGISTERS_GPIO_INT_SET_POS);
   2247		break;
   2248
   2249	default:
   2250		break;
   2251	}
   2252
   2253	REG_WR(bp, MISC_REG_GPIO_INT, gpio_reg);
   2254	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_GPIO);
   2255
   2256	return 0;
   2257}
   2258
   2259static int bnx2x_set_spio(struct bnx2x *bp, int spio, u32 mode)
   2260{
   2261	u32 spio_reg;
   2262
   2263	/* Only 2 SPIOs are configurable */
   2264	if ((spio != MISC_SPIO_SPIO4) && (spio != MISC_SPIO_SPIO5)) {
   2265		BNX2X_ERR("Invalid SPIO 0x%x\n", spio);
   2266		return -EINVAL;
   2267	}
   2268
   2269	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_SPIO);
   2270	/* read SPIO and mask except the float bits */
   2271	spio_reg = (REG_RD(bp, MISC_REG_SPIO) & MISC_SPIO_FLOAT);
   2272
   2273	switch (mode) {
   2274	case MISC_SPIO_OUTPUT_LOW:
   2275		DP(NETIF_MSG_HW, "Set SPIO 0x%x -> output low\n", spio);
   2276		/* clear FLOAT and set CLR */
   2277		spio_reg &= ~(spio << MISC_SPIO_FLOAT_POS);
   2278		spio_reg |=  (spio << MISC_SPIO_CLR_POS);
   2279		break;
   2280
   2281	case MISC_SPIO_OUTPUT_HIGH:
   2282		DP(NETIF_MSG_HW, "Set SPIO 0x%x -> output high\n", spio);
   2283		/* clear FLOAT and set SET */
   2284		spio_reg &= ~(spio << MISC_SPIO_FLOAT_POS);
   2285		spio_reg |=  (spio << MISC_SPIO_SET_POS);
   2286		break;
   2287
   2288	case MISC_SPIO_INPUT_HI_Z:
   2289		DP(NETIF_MSG_HW, "Set SPIO 0x%x -> input\n", spio);
   2290		/* set FLOAT */
   2291		spio_reg |= (spio << MISC_SPIO_FLOAT_POS);
   2292		break;
   2293
   2294	default:
   2295		break;
   2296	}
   2297
   2298	REG_WR(bp, MISC_REG_SPIO, spio_reg);
   2299	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_SPIO);
   2300
   2301	return 0;
   2302}
   2303
   2304void bnx2x_calc_fc_adv(struct bnx2x *bp)
   2305{
   2306	u8 cfg_idx = bnx2x_get_link_cfg_idx(bp);
   2307
   2308	bp->port.advertising[cfg_idx] &= ~(ADVERTISED_Asym_Pause |
   2309					   ADVERTISED_Pause);
   2310	switch (bp->link_vars.ieee_fc &
   2311		MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) {
   2312	case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH:
   2313		bp->port.advertising[cfg_idx] |= (ADVERTISED_Asym_Pause |
   2314						  ADVERTISED_Pause);
   2315		break;
   2316
   2317	case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC:
   2318		bp->port.advertising[cfg_idx] |= ADVERTISED_Asym_Pause;
   2319		break;
   2320
   2321	default:
   2322		break;
   2323	}
   2324}
   2325
   2326static void bnx2x_set_requested_fc(struct bnx2x *bp)
   2327{
   2328	/* Initialize link parameters structure variables
   2329	 * It is recommended to turn off RX FC for jumbo frames
   2330	 *  for better performance
   2331	 */
   2332	if (CHIP_IS_E1x(bp) && (bp->dev->mtu > 5000))
   2333		bp->link_params.req_fc_auto_adv = BNX2X_FLOW_CTRL_TX;
   2334	else
   2335		bp->link_params.req_fc_auto_adv = BNX2X_FLOW_CTRL_BOTH;
   2336}
   2337
   2338static void bnx2x_init_dropless_fc(struct bnx2x *bp)
   2339{
   2340	u32 pause_enabled = 0;
   2341
   2342	if (!CHIP_IS_E1(bp) && bp->dropless_fc && bp->link_vars.link_up) {
   2343		if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_TX)
   2344			pause_enabled = 1;
   2345
   2346		REG_WR(bp, BAR_USTRORM_INTMEM +
   2347			   USTORM_ETH_PAUSE_ENABLED_OFFSET(BP_PORT(bp)),
   2348		       pause_enabled);
   2349	}
   2350
   2351	DP(NETIF_MSG_IFUP | NETIF_MSG_LINK, "dropless_fc is %s\n",
   2352	   pause_enabled ? "enabled" : "disabled");
   2353}
   2354
   2355int bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode)
   2356{
   2357	int rc, cfx_idx = bnx2x_get_link_cfg_idx(bp);
   2358	u16 req_line_speed = bp->link_params.req_line_speed[cfx_idx];
   2359
   2360	if (!BP_NOMCP(bp)) {
   2361		bnx2x_set_requested_fc(bp);
   2362		bnx2x_acquire_phy_lock(bp);
   2363
   2364		if (load_mode == LOAD_DIAG) {
   2365			struct link_params *lp = &bp->link_params;
   2366			lp->loopback_mode = LOOPBACK_XGXS;
   2367			/* Prefer doing PHY loopback at highest speed */
   2368			if (lp->req_line_speed[cfx_idx] < SPEED_20000) {
   2369				if (lp->speed_cap_mask[cfx_idx] &
   2370				    PORT_HW_CFG_SPEED_CAPABILITY_D0_20G)
   2371					lp->req_line_speed[cfx_idx] =
   2372					SPEED_20000;
   2373				else if (lp->speed_cap_mask[cfx_idx] &
   2374					    PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)
   2375						lp->req_line_speed[cfx_idx] =
   2376						SPEED_10000;
   2377				else
   2378					lp->req_line_speed[cfx_idx] =
   2379					SPEED_1000;
   2380			}
   2381		}
   2382
   2383		if (load_mode == LOAD_LOOPBACK_EXT) {
   2384			struct link_params *lp = &bp->link_params;
   2385			lp->loopback_mode = LOOPBACK_EXT;
   2386		}
   2387
   2388		rc = bnx2x_phy_init(&bp->link_params, &bp->link_vars);
   2389
   2390		bnx2x_release_phy_lock(bp);
   2391
   2392		bnx2x_init_dropless_fc(bp);
   2393
   2394		bnx2x_calc_fc_adv(bp);
   2395
   2396		if (bp->link_vars.link_up) {
   2397			bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
   2398			bnx2x_link_report(bp);
   2399		}
   2400		queue_delayed_work(bnx2x_wq, &bp->period_task, 0);
   2401		bp->link_params.req_line_speed[cfx_idx] = req_line_speed;
   2402		return rc;
   2403	}
   2404	BNX2X_ERR("Bootcode is missing - can not initialize link\n");
   2405	return -EINVAL;
   2406}
   2407
   2408void bnx2x_link_set(struct bnx2x *bp)
   2409{
   2410	if (!BP_NOMCP(bp)) {
   2411		bnx2x_acquire_phy_lock(bp);
   2412		bnx2x_phy_init(&bp->link_params, &bp->link_vars);
   2413		bnx2x_release_phy_lock(bp);
   2414
   2415		bnx2x_init_dropless_fc(bp);
   2416
   2417		bnx2x_calc_fc_adv(bp);
   2418	} else
   2419		BNX2X_ERR("Bootcode is missing - can not set link\n");
   2420}
   2421
   2422static void bnx2x__link_reset(struct bnx2x *bp)
   2423{
   2424	if (!BP_NOMCP(bp)) {
   2425		bnx2x_acquire_phy_lock(bp);
   2426		bnx2x_lfa_reset(&bp->link_params, &bp->link_vars);
   2427		bnx2x_release_phy_lock(bp);
   2428	} else
   2429		BNX2X_ERR("Bootcode is missing - can not reset link\n");
   2430}
   2431
   2432void bnx2x_force_link_reset(struct bnx2x *bp)
   2433{
   2434	bnx2x_acquire_phy_lock(bp);
   2435	bnx2x_link_reset(&bp->link_params, &bp->link_vars, 1);
   2436	bnx2x_release_phy_lock(bp);
   2437}
   2438
   2439u8 bnx2x_link_test(struct bnx2x *bp, u8 is_serdes)
   2440{
   2441	u8 rc = 0;
   2442
   2443	if (!BP_NOMCP(bp)) {
   2444		bnx2x_acquire_phy_lock(bp);
   2445		rc = bnx2x_test_link(&bp->link_params, &bp->link_vars,
   2446				     is_serdes);
   2447		bnx2x_release_phy_lock(bp);
   2448	} else
   2449		BNX2X_ERR("Bootcode is missing - can not test link\n");
   2450
   2451	return rc;
   2452}
   2453
   2454/* Calculates the sum of vn_min_rates.
   2455   It's needed for further normalizing of the min_rates.
   2456   Returns:
   2457     sum of vn_min_rates.
   2458       or
   2459     0 - if all the min_rates are 0.
   2460     In the later case fairness algorithm should be deactivated.
   2461     If not all min_rates are zero then those that are zeroes will be set to 1.
   2462 */
   2463static void bnx2x_calc_vn_min(struct bnx2x *bp,
   2464				      struct cmng_init_input *input)
   2465{
   2466	int all_zero = 1;
   2467	int vn;
   2468
   2469	for (vn = VN_0; vn < BP_MAX_VN_NUM(bp); vn++) {
   2470		u32 vn_cfg = bp->mf_config[vn];
   2471		u32 vn_min_rate = ((vn_cfg & FUNC_MF_CFG_MIN_BW_MASK) >>
   2472				   FUNC_MF_CFG_MIN_BW_SHIFT) * 100;
   2473
   2474		/* Skip hidden vns */
   2475		if (vn_cfg & FUNC_MF_CFG_FUNC_HIDE)
   2476			vn_min_rate = 0;
   2477		/* If min rate is zero - set it to 1 */
   2478		else if (!vn_min_rate)
   2479			vn_min_rate = DEF_MIN_RATE;
   2480		else
   2481			all_zero = 0;
   2482
   2483		input->vnic_min_rate[vn] = vn_min_rate;
   2484	}
   2485
   2486	/* if ETS or all min rates are zeros - disable fairness */
   2487	if (BNX2X_IS_ETS_ENABLED(bp)) {
   2488		input->flags.cmng_enables &=
   2489					~CMNG_FLAGS_PER_PORT_FAIRNESS_VN;
   2490		DP(NETIF_MSG_IFUP, "Fairness will be disabled due to ETS\n");
   2491	} else if (all_zero) {
   2492		input->flags.cmng_enables &=
   2493					~CMNG_FLAGS_PER_PORT_FAIRNESS_VN;
   2494		DP(NETIF_MSG_IFUP,
   2495		   "All MIN values are zeroes fairness will be disabled\n");
   2496	} else
   2497		input->flags.cmng_enables |=
   2498					CMNG_FLAGS_PER_PORT_FAIRNESS_VN;
   2499}
   2500
   2501static void bnx2x_calc_vn_max(struct bnx2x *bp, int vn,
   2502				    struct cmng_init_input *input)
   2503{
   2504	u16 vn_max_rate;
   2505	u32 vn_cfg = bp->mf_config[vn];
   2506
   2507	if (vn_cfg & FUNC_MF_CFG_FUNC_HIDE)
   2508		vn_max_rate = 0;
   2509	else {
   2510		u32 maxCfg = bnx2x_extract_max_cfg(bp, vn_cfg);
   2511
   2512		if (IS_MF_PERCENT_BW(bp)) {
   2513			/* maxCfg in percents of linkspeed */
   2514			vn_max_rate = (bp->link_vars.line_speed * maxCfg) / 100;
   2515		} else /* SD modes */
   2516			/* maxCfg is absolute in 100Mb units */
   2517			vn_max_rate = maxCfg * 100;
   2518	}
   2519
   2520	DP(NETIF_MSG_IFUP, "vn %d: vn_max_rate %d\n", vn, vn_max_rate);
   2521
   2522	input->vnic_max_rate[vn] = vn_max_rate;
   2523}
   2524
   2525static int bnx2x_get_cmng_fns_mode(struct bnx2x *bp)
   2526{
   2527	if (CHIP_REV_IS_SLOW(bp))
   2528		return CMNG_FNS_NONE;
   2529	if (IS_MF(bp))
   2530		return CMNG_FNS_MINMAX;
   2531
   2532	return CMNG_FNS_NONE;
   2533}
   2534
   2535void bnx2x_read_mf_cfg(struct bnx2x *bp)
   2536{
   2537	int vn, n = (CHIP_MODE_IS_4_PORT(bp) ? 2 : 1);
   2538
   2539	if (BP_NOMCP(bp))
   2540		return; /* what should be the default value in this case */
   2541
   2542	/* For 2 port configuration the absolute function number formula
   2543	 * is:
   2544	 *      abs_func = 2 * vn + BP_PORT + BP_PATH
   2545	 *
   2546	 *      and there are 4 functions per port
   2547	 *
   2548	 * For 4 port configuration it is
   2549	 *      abs_func = 4 * vn + 2 * BP_PORT + BP_PATH
   2550	 *
   2551	 *      and there are 2 functions per port
   2552	 */
   2553	for (vn = VN_0; vn < BP_MAX_VN_NUM(bp); vn++) {
   2554		int /*abs*/func = n * (2 * vn + BP_PORT(bp)) + BP_PATH(bp);
   2555
   2556		if (func >= E1H_FUNC_MAX)
   2557			break;
   2558
   2559		bp->mf_config[vn] =
   2560			MF_CFG_RD(bp, func_mf_config[func].config);
   2561	}
   2562	if (bp->mf_config[BP_VN(bp)] & FUNC_MF_CFG_FUNC_DISABLED) {
   2563		DP(NETIF_MSG_IFUP, "mf_cfg function disabled\n");
   2564		bp->flags |= MF_FUNC_DIS;
   2565	} else {
   2566		DP(NETIF_MSG_IFUP, "mf_cfg function enabled\n");
   2567		bp->flags &= ~MF_FUNC_DIS;
   2568	}
   2569}
   2570
   2571static void bnx2x_cmng_fns_init(struct bnx2x *bp, u8 read_cfg, u8 cmng_type)
   2572{
   2573	struct cmng_init_input input;
   2574	memset(&input, 0, sizeof(struct cmng_init_input));
   2575
   2576	input.port_rate = bp->link_vars.line_speed;
   2577
   2578	if (cmng_type == CMNG_FNS_MINMAX && input.port_rate) {
   2579		int vn;
   2580
   2581		/* read mf conf from shmem */
   2582		if (read_cfg)
   2583			bnx2x_read_mf_cfg(bp);
   2584
   2585		/* vn_weight_sum and enable fairness if not 0 */
   2586		bnx2x_calc_vn_min(bp, &input);
   2587
   2588		/* calculate and set min-max rate for each vn */
   2589		if (bp->port.pmf)
   2590			for (vn = VN_0; vn < BP_MAX_VN_NUM(bp); vn++)
   2591				bnx2x_calc_vn_max(bp, vn, &input);
   2592
   2593		/* always enable rate shaping and fairness */
   2594		input.flags.cmng_enables |=
   2595					CMNG_FLAGS_PER_PORT_RATE_SHAPING_VN;
   2596
   2597		bnx2x_init_cmng(&input, &bp->cmng);
   2598		return;
   2599	}
   2600
   2601	/* rate shaping and fairness are disabled */
   2602	DP(NETIF_MSG_IFUP,
   2603	   "rate shaping and fairness are disabled\n");
   2604}
   2605
   2606static void storm_memset_cmng(struct bnx2x *bp,
   2607			      struct cmng_init *cmng,
   2608			      u8 port)
   2609{
   2610	int vn;
   2611	size_t size = sizeof(struct cmng_struct_per_port);
   2612
   2613	u32 addr = BAR_XSTRORM_INTMEM +
   2614			XSTORM_CMNG_PER_PORT_VARS_OFFSET(port);
   2615
   2616	__storm_memset_struct(bp, addr, size, (u32 *)&cmng->port);
   2617
   2618	for (vn = VN_0; vn < BP_MAX_VN_NUM(bp); vn++) {
   2619		int func = func_by_vn(bp, vn);
   2620
   2621		addr = BAR_XSTRORM_INTMEM +
   2622		       XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(func);
   2623		size = sizeof(struct rate_shaping_vars_per_vn);
   2624		__storm_memset_struct(bp, addr, size,
   2625				      (u32 *)&cmng->vnic.vnic_max_rate[vn]);
   2626
   2627		addr = BAR_XSTRORM_INTMEM +
   2628		       XSTORM_FAIRNESS_PER_VN_VARS_OFFSET(func);
   2629		size = sizeof(struct fairness_vars_per_vn);
   2630		__storm_memset_struct(bp, addr, size,
   2631				      (u32 *)&cmng->vnic.vnic_min_rate[vn]);
   2632	}
   2633}
   2634
   2635/* init cmng mode in HW according to local configuration */
   2636void bnx2x_set_local_cmng(struct bnx2x *bp)
   2637{
   2638	int cmng_fns = bnx2x_get_cmng_fns_mode(bp);
   2639
   2640	if (cmng_fns != CMNG_FNS_NONE) {
   2641		bnx2x_cmng_fns_init(bp, false, cmng_fns);
   2642		storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
   2643	} else {
   2644		/* rate shaping and fairness are disabled */
   2645		DP(NETIF_MSG_IFUP,
   2646		   "single function mode without fairness\n");
   2647	}
   2648}
   2649
   2650/* This function is called upon link interrupt */
   2651static void bnx2x_link_attn(struct bnx2x *bp)
   2652{
   2653	/* Make sure that we are synced with the current statistics */
   2654	bnx2x_stats_handle(bp, STATS_EVENT_STOP);
   2655
   2656	bnx2x_link_update(&bp->link_params, &bp->link_vars);
   2657
   2658	bnx2x_init_dropless_fc(bp);
   2659
   2660	if (bp->link_vars.link_up) {
   2661
   2662		if (bp->link_vars.mac_type != MAC_TYPE_EMAC) {
   2663			struct host_port_stats *pstats;
   2664
   2665			pstats = bnx2x_sp(bp, port_stats);
   2666			/* reset old mac stats */
   2667			memset(&(pstats->mac_stx[0]), 0,
   2668			       sizeof(struct mac_stx));
   2669		}
   2670		if (bp->state == BNX2X_STATE_OPEN)
   2671			bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
   2672	}
   2673
   2674	if (bp->link_vars.link_up && bp->link_vars.line_speed)
   2675		bnx2x_set_local_cmng(bp);
   2676
   2677	__bnx2x_link_report(bp);
   2678
   2679	if (IS_MF(bp))
   2680		bnx2x_link_sync_notify(bp);
   2681}
   2682
   2683void bnx2x__link_status_update(struct bnx2x *bp)
   2684{
   2685	if (bp->state != BNX2X_STATE_OPEN)
   2686		return;
   2687
   2688	/* read updated dcb configuration */
   2689	if (IS_PF(bp)) {
   2690		bnx2x_dcbx_pmf_update(bp);
   2691		bnx2x_link_status_update(&bp->link_params, &bp->link_vars);
   2692		if (bp->link_vars.link_up)
   2693			bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
   2694		else
   2695			bnx2x_stats_handle(bp, STATS_EVENT_STOP);
   2696			/* indicate link status */
   2697		bnx2x_link_report(bp);
   2698
   2699	} else { /* VF */
   2700		bp->port.supported[0] |= (SUPPORTED_10baseT_Half |
   2701					  SUPPORTED_10baseT_Full |
   2702					  SUPPORTED_100baseT_Half |
   2703					  SUPPORTED_100baseT_Full |
   2704					  SUPPORTED_1000baseT_Full |
   2705					  SUPPORTED_2500baseX_Full |
   2706					  SUPPORTED_10000baseT_Full |
   2707					  SUPPORTED_TP |
   2708					  SUPPORTED_FIBRE |
   2709					  SUPPORTED_Autoneg |
   2710					  SUPPORTED_Pause |
   2711					  SUPPORTED_Asym_Pause);
   2712		bp->port.advertising[0] = bp->port.supported[0];
   2713
   2714		bp->link_params.bp = bp;
   2715		bp->link_params.port = BP_PORT(bp);
   2716		bp->link_params.req_duplex[0] = DUPLEX_FULL;
   2717		bp->link_params.req_flow_ctrl[0] = BNX2X_FLOW_CTRL_NONE;
   2718		bp->link_params.req_line_speed[0] = SPEED_10000;
   2719		bp->link_params.speed_cap_mask[0] = 0x7f0000;
   2720		bp->link_params.switch_cfg = SWITCH_CFG_10G;
   2721		bp->link_vars.mac_type = MAC_TYPE_BMAC;
   2722		bp->link_vars.line_speed = SPEED_10000;
   2723		bp->link_vars.link_status =
   2724			(LINK_STATUS_LINK_UP |
   2725			 LINK_STATUS_SPEED_AND_DUPLEX_10GTFD);
   2726		bp->link_vars.link_up = 1;
   2727		bp->link_vars.duplex = DUPLEX_FULL;
   2728		bp->link_vars.flow_ctrl = BNX2X_FLOW_CTRL_NONE;
   2729		__bnx2x_link_report(bp);
   2730
   2731		bnx2x_sample_bulletin(bp);
   2732
   2733		/* if bulletin board did not have an update for link status
   2734		 * __bnx2x_link_report will report current status
   2735		 * but it will NOT duplicate report in case of already reported
   2736		 * during sampling bulletin board.
   2737		 */
   2738		bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
   2739	}
   2740}
   2741
   2742static int bnx2x_afex_func_update(struct bnx2x *bp, u16 vifid,
   2743				  u16 vlan_val, u8 allowed_prio)
   2744{
   2745	struct bnx2x_func_state_params func_params = {NULL};
   2746	struct bnx2x_func_afex_update_params *f_update_params =
   2747		&func_params.params.afex_update;
   2748
   2749	func_params.f_obj = &bp->func_obj;
   2750	func_params.cmd = BNX2X_F_CMD_AFEX_UPDATE;
   2751
   2752	/* no need to wait for RAMROD completion, so don't
   2753	 * set RAMROD_COMP_WAIT flag
   2754	 */
   2755
   2756	f_update_params->vif_id = vifid;
   2757	f_update_params->afex_default_vlan = vlan_val;
   2758	f_update_params->allowed_priorities = allowed_prio;
   2759
   2760	/* if ramrod can not be sent, response to MCP immediately */
   2761	if (bnx2x_func_state_change(bp, &func_params) < 0)
   2762		bnx2x_fw_command(bp, DRV_MSG_CODE_AFEX_VIFSET_ACK, 0);
   2763
   2764	return 0;
   2765}
   2766
   2767static int bnx2x_afex_handle_vif_list_cmd(struct bnx2x *bp, u8 cmd_type,
   2768					  u16 vif_index, u8 func_bit_map)
   2769{
   2770	struct bnx2x_func_state_params func_params = {NULL};
   2771	struct bnx2x_func_afex_viflists_params *update_params =
   2772		&func_params.params.afex_viflists;
   2773	int rc;
   2774	u32 drv_msg_code;
   2775
   2776	/* validate only LIST_SET and LIST_GET are received from switch */
   2777	if ((cmd_type != VIF_LIST_RULE_GET) && (cmd_type != VIF_LIST_RULE_SET))
   2778		BNX2X_ERR("BUG! afex_handle_vif_list_cmd invalid type 0x%x\n",
   2779			  cmd_type);
   2780
   2781	func_params.f_obj = &bp->func_obj;
   2782	func_params.cmd = BNX2X_F_CMD_AFEX_VIFLISTS;
   2783
   2784	/* set parameters according to cmd_type */
   2785	update_params->afex_vif_list_command = cmd_type;
   2786	update_params->vif_list_index = vif_index;
   2787	update_params->func_bit_map =
   2788		(cmd_type == VIF_LIST_RULE_GET) ? 0 : func_bit_map;
   2789	update_params->func_to_clear = 0;
   2790	drv_msg_code =
   2791		(cmd_type == VIF_LIST_RULE_GET) ?
   2792		DRV_MSG_CODE_AFEX_LISTGET_ACK :
   2793		DRV_MSG_CODE_AFEX_LISTSET_ACK;
   2794
   2795	/* if ramrod can not be sent, respond to MCP immediately for
   2796	 * SET and GET requests (other are not triggered from MCP)
   2797	 */
   2798	rc = bnx2x_func_state_change(bp, &func_params);
   2799	if (rc < 0)
   2800		bnx2x_fw_command(bp, drv_msg_code, 0);
   2801
   2802	return 0;
   2803}
   2804
   2805static void bnx2x_handle_afex_cmd(struct bnx2x *bp, u32 cmd)
   2806{
   2807	struct afex_stats afex_stats;
   2808	u32 func = BP_ABS_FUNC(bp);
   2809	u32 mf_config;
   2810	u16 vlan_val;
   2811	u32 vlan_prio;
   2812	u16 vif_id;
   2813	u8 allowed_prio;
   2814	u8 vlan_mode;
   2815	u32 addr_to_write, vifid, addrs, stats_type, i;
   2816
   2817	if (cmd & DRV_STATUS_AFEX_LISTGET_REQ) {
   2818		vifid = SHMEM2_RD(bp, afex_param1_to_driver[BP_FW_MB_IDX(bp)]);
   2819		DP(BNX2X_MSG_MCP,
   2820		   "afex: got MCP req LISTGET_REQ for vifid 0x%x\n", vifid);
   2821		bnx2x_afex_handle_vif_list_cmd(bp, VIF_LIST_RULE_GET, vifid, 0);
   2822	}
   2823
   2824	if (cmd & DRV_STATUS_AFEX_LISTSET_REQ) {
   2825		vifid = SHMEM2_RD(bp, afex_param1_to_driver[BP_FW_MB_IDX(bp)]);
   2826		addrs = SHMEM2_RD(bp, afex_param2_to_driver[BP_FW_MB_IDX(bp)]);
   2827		DP(BNX2X_MSG_MCP,
   2828		   "afex: got MCP req LISTSET_REQ for vifid 0x%x addrs 0x%x\n",
   2829		   vifid, addrs);
   2830		bnx2x_afex_handle_vif_list_cmd(bp, VIF_LIST_RULE_SET, vifid,
   2831					       addrs);
   2832	}
   2833
   2834	if (cmd & DRV_STATUS_AFEX_STATSGET_REQ) {
   2835		addr_to_write = SHMEM2_RD(bp,
   2836			afex_scratchpad_addr_to_write[BP_FW_MB_IDX(bp)]);
   2837		stats_type = SHMEM2_RD(bp,
   2838			afex_param1_to_driver[BP_FW_MB_IDX(bp)]);
   2839
   2840		DP(BNX2X_MSG_MCP,
   2841		   "afex: got MCP req STATSGET_REQ, write to addr 0x%x\n",
   2842		   addr_to_write);
   2843
   2844		bnx2x_afex_collect_stats(bp, (void *)&afex_stats, stats_type);
   2845
   2846		/* write response to scratchpad, for MCP */
   2847		for (i = 0; i < (sizeof(struct afex_stats)/sizeof(u32)); i++)
   2848			REG_WR(bp, addr_to_write + i*sizeof(u32),
   2849			       *(((u32 *)(&afex_stats))+i));
   2850
   2851		/* send ack message to MCP */
   2852		bnx2x_fw_command(bp, DRV_MSG_CODE_AFEX_STATSGET_ACK, 0);
   2853	}
   2854
   2855	if (cmd & DRV_STATUS_AFEX_VIFSET_REQ) {
   2856		mf_config = MF_CFG_RD(bp, func_mf_config[func].config);
   2857		bp->mf_config[BP_VN(bp)] = mf_config;
   2858		DP(BNX2X_MSG_MCP,
   2859		   "afex: got MCP req VIFSET_REQ, mf_config 0x%x\n",
   2860		   mf_config);
   2861
   2862		/* if VIF_SET is "enabled" */
   2863		if (!(mf_config & FUNC_MF_CFG_FUNC_DISABLED)) {
   2864			/* set rate limit directly to internal RAM */
   2865			struct cmng_init_input cmng_input;
   2866			struct rate_shaping_vars_per_vn m_rs_vn;
   2867			size_t size = sizeof(struct rate_shaping_vars_per_vn);
   2868			u32 addr = BAR_XSTRORM_INTMEM +
   2869			    XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(BP_FUNC(bp));
   2870
   2871			bp->mf_config[BP_VN(bp)] = mf_config;
   2872
   2873			bnx2x_calc_vn_max(bp, BP_VN(bp), &cmng_input);
   2874			m_rs_vn.vn_counter.rate =
   2875				cmng_input.vnic_max_rate[BP_VN(bp)];
   2876			m_rs_vn.vn_counter.quota =
   2877				(m_rs_vn.vn_counter.rate *
   2878				 RS_PERIODIC_TIMEOUT_USEC) / 8;
   2879
   2880			__storm_memset_struct(bp, addr, size, (u32 *)&m_rs_vn);
   2881
   2882			/* read relevant values from mf_cfg struct in shmem */
   2883			vif_id =
   2884				(MF_CFG_RD(bp, func_mf_config[func].e1hov_tag) &
   2885				 FUNC_MF_CFG_E1HOV_TAG_MASK) >>
   2886				FUNC_MF_CFG_E1HOV_TAG_SHIFT;
   2887			vlan_val =
   2888				(MF_CFG_RD(bp, func_mf_config[func].e1hov_tag) &
   2889				 FUNC_MF_CFG_AFEX_VLAN_MASK) >>
   2890				FUNC_MF_CFG_AFEX_VLAN_SHIFT;
   2891			vlan_prio = (mf_config &
   2892				     FUNC_MF_CFG_TRANSMIT_PRIORITY_MASK) >>
   2893				    FUNC_MF_CFG_TRANSMIT_PRIORITY_SHIFT;
   2894			vlan_val |= (vlan_prio << VLAN_PRIO_SHIFT);
   2895			vlan_mode =
   2896				(MF_CFG_RD(bp,
   2897					   func_mf_config[func].afex_config) &
   2898				 FUNC_MF_CFG_AFEX_VLAN_MODE_MASK) >>
   2899				FUNC_MF_CFG_AFEX_VLAN_MODE_SHIFT;
   2900			allowed_prio =
   2901				(MF_CFG_RD(bp,
   2902					   func_mf_config[func].afex_config) &
   2903				 FUNC_MF_CFG_AFEX_COS_FILTER_MASK) >>
   2904				FUNC_MF_CFG_AFEX_COS_FILTER_SHIFT;
   2905
   2906			/* send ramrod to FW, return in case of failure */
   2907			if (bnx2x_afex_func_update(bp, vif_id, vlan_val,
   2908						   allowed_prio))
   2909				return;
   2910
   2911			bp->afex_def_vlan_tag = vlan_val;
   2912			bp->afex_vlan_mode = vlan_mode;
   2913		} else {
   2914			/* notify link down because BP->flags is disabled */
   2915			bnx2x_link_report(bp);
   2916
   2917			/* send INVALID VIF ramrod to FW */
   2918			bnx2x_afex_func_update(bp, 0xFFFF, 0, 0);
   2919
   2920			/* Reset the default afex VLAN */
   2921			bp->afex_def_vlan_tag = -1;
   2922		}
   2923	}
   2924}
   2925
   2926static void bnx2x_handle_update_svid_cmd(struct bnx2x *bp)
   2927{
   2928	struct bnx2x_func_switch_update_params *switch_update_params;
   2929	struct bnx2x_func_state_params func_params;
   2930
   2931	memset(&func_params, 0, sizeof(struct bnx2x_func_state_params));
   2932	switch_update_params = &func_params.params.switch_update;
   2933	func_params.f_obj = &bp->func_obj;
   2934	func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
   2935
   2936	/* Prepare parameters for function state transitions */
   2937	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
   2938	__set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
   2939
   2940	if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
   2941		int func = BP_ABS_FUNC(bp);
   2942		u32 val;
   2943
   2944		/* Re-learn the S-tag from shmem */
   2945		val = MF_CFG_RD(bp, func_mf_config[func].e1hov_tag) &
   2946				FUNC_MF_CFG_E1HOV_TAG_MASK;
   2947		if (val != FUNC_MF_CFG_E1HOV_TAG_DEFAULT) {
   2948			bp->mf_ov = val;
   2949		} else {
   2950			BNX2X_ERR("Got an SVID event, but no tag is configured in shmem\n");
   2951			goto fail;
   2952		}
   2953
   2954		/* Configure new S-tag in LLH */
   2955		REG_WR(bp, NIG_REG_LLH0_FUNC_VLAN_ID + BP_PORT(bp) * 8,
   2956		       bp->mf_ov);
   2957
   2958		/* Send Ramrod to update FW of change */
   2959		__set_bit(BNX2X_F_UPDATE_SD_VLAN_TAG_CHNG,
   2960			  &switch_update_params->changes);
   2961		switch_update_params->vlan = bp->mf_ov;
   2962
   2963		if (bnx2x_func_state_change(bp, &func_params) < 0) {
   2964			BNX2X_ERR("Failed to configure FW of S-tag Change to %02x\n",
   2965				  bp->mf_ov);
   2966			goto fail;
   2967		} else {
   2968			DP(BNX2X_MSG_MCP, "Configured S-tag %02x\n",
   2969			   bp->mf_ov);
   2970		}
   2971	} else {
   2972		goto fail;
   2973	}
   2974
   2975	bnx2x_fw_command(bp, DRV_MSG_CODE_OEM_UPDATE_SVID_OK, 0);
   2976	return;
   2977fail:
   2978	bnx2x_fw_command(bp, DRV_MSG_CODE_OEM_UPDATE_SVID_FAILURE, 0);
   2979}
   2980
   2981static void bnx2x_pmf_update(struct bnx2x *bp)
   2982{
   2983	int port = BP_PORT(bp);
   2984	u32 val;
   2985
   2986	bp->port.pmf = 1;
   2987	DP(BNX2X_MSG_MCP, "pmf %d\n", bp->port.pmf);
   2988
   2989	/*
   2990	 * We need the mb() to ensure the ordering between the writing to
   2991	 * bp->port.pmf here and reading it from the bnx2x_periodic_task().
   2992	 */
   2993	smp_mb();
   2994
   2995	/* queue a periodic task */
   2996	queue_delayed_work(bnx2x_wq, &bp->period_task, 0);
   2997
   2998	bnx2x_dcbx_pmf_update(bp);
   2999
   3000	/* enable nig attention */
   3001	val = (0xff0f | (1 << (BP_VN(bp) + 4)));
   3002	if (bp->common.int_block == INT_BLOCK_HC) {
   3003		REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, val);
   3004		REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, val);
   3005	} else if (!CHIP_IS_E1x(bp)) {
   3006		REG_WR(bp, IGU_REG_TRAILING_EDGE_LATCH, val);
   3007		REG_WR(bp, IGU_REG_LEADING_EDGE_LATCH, val);
   3008	}
   3009
   3010	bnx2x_stats_handle(bp, STATS_EVENT_PMF);
   3011}
   3012
   3013/* end of Link */
   3014
   3015/* slow path */
   3016
   3017/*
   3018 * General service functions
   3019 */
   3020
   3021/* send the MCP a request, block until there is a reply */
   3022u32 bnx2x_fw_command(struct bnx2x *bp, u32 command, u32 param)
   3023{
   3024	int mb_idx = BP_FW_MB_IDX(bp);
   3025	u32 seq;
   3026	u32 rc = 0;
   3027	u32 cnt = 1;
   3028	u8 delay = CHIP_REV_IS_SLOW(bp) ? 100 : 10;
   3029
   3030	mutex_lock(&bp->fw_mb_mutex);
   3031	seq = ++bp->fw_seq;
   3032	SHMEM_WR(bp, func_mb[mb_idx].drv_mb_param, param);
   3033	SHMEM_WR(bp, func_mb[mb_idx].drv_mb_header, (command | seq));
   3034
   3035	DP(BNX2X_MSG_MCP, "wrote command (%x) to FW MB param 0x%08x\n",
   3036			(command | seq), param);
   3037
   3038	do {
   3039		/* let the FW do it's magic ... */
   3040		msleep(delay);
   3041
   3042		rc = SHMEM_RD(bp, func_mb[mb_idx].fw_mb_header);
   3043
   3044		/* Give the FW up to 5 second (500*10ms) */
   3045	} while ((seq != (rc & FW_MSG_SEQ_NUMBER_MASK)) && (cnt++ < 500));
   3046
   3047	DP(BNX2X_MSG_MCP, "[after %d ms] read (%x) seq is (%x) from FW MB\n",
   3048	   cnt*delay, rc, seq);
   3049
   3050	/* is this a reply to our command? */
   3051	if (seq == (rc & FW_MSG_SEQ_NUMBER_MASK))
   3052		rc &= FW_MSG_CODE_MASK;
   3053	else {
   3054		/* FW BUG! */
   3055		BNX2X_ERR("FW failed to respond!\n");
   3056		bnx2x_fw_dump(bp);
   3057		rc = 0;
   3058	}
   3059	mutex_unlock(&bp->fw_mb_mutex);
   3060
   3061	return rc;
   3062}
   3063
   3064static void storm_memset_func_cfg(struct bnx2x *bp,
   3065				 struct tstorm_eth_function_common_config *tcfg,
   3066				 u16 abs_fid)
   3067{
   3068	size_t size = sizeof(struct tstorm_eth_function_common_config);
   3069
   3070	u32 addr = BAR_TSTRORM_INTMEM +
   3071			TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(abs_fid);
   3072
   3073	__storm_memset_struct(bp, addr, size, (u32 *)tcfg);
   3074}
   3075
   3076void bnx2x_func_init(struct bnx2x *bp, struct bnx2x_func_init_params *p)
   3077{
   3078	if (CHIP_IS_E1x(bp)) {
   3079		struct tstorm_eth_function_common_config tcfg = {0};
   3080
   3081		storm_memset_func_cfg(bp, &tcfg, p->func_id);
   3082	}
   3083
   3084	/* Enable the function in the FW */
   3085	storm_memset_vf_to_pf(bp, p->func_id, p->pf_id);
   3086	storm_memset_func_en(bp, p->func_id, 1);
   3087
   3088	/* spq */
   3089	if (p->spq_active) {
   3090		storm_memset_spq_addr(bp, p->spq_map, p->func_id);
   3091		REG_WR(bp, XSEM_REG_FAST_MEMORY +
   3092		       XSTORM_SPQ_PROD_OFFSET(p->func_id), p->spq_prod);
   3093	}
   3094}
   3095
   3096/**
   3097 * bnx2x_get_common_flags - Return common flags
   3098 *
   3099 * @bp:		device handle
   3100 * @fp:		queue handle
   3101 * @zero_stats:	TRUE if statistics zeroing is needed
   3102 *
   3103 * Return the flags that are common for the Tx-only and not normal connections.
   3104 */
   3105static unsigned long bnx2x_get_common_flags(struct bnx2x *bp,
   3106					    struct bnx2x_fastpath *fp,
   3107					    bool zero_stats)
   3108{
   3109	unsigned long flags = 0;
   3110
   3111	/* PF driver will always initialize the Queue to an ACTIVE state */
   3112	__set_bit(BNX2X_Q_FLG_ACTIVE, &flags);
   3113
   3114	/* tx only connections collect statistics (on the same index as the
   3115	 * parent connection). The statistics are zeroed when the parent
   3116	 * connection is initialized.
   3117	 */
   3118
   3119	__set_bit(BNX2X_Q_FLG_STATS, &flags);
   3120	if (zero_stats)
   3121		__set_bit(BNX2X_Q_FLG_ZERO_STATS, &flags);
   3122
   3123	if (bp->flags & TX_SWITCHING)
   3124		__set_bit(BNX2X_Q_FLG_TX_SWITCH, &flags);
   3125
   3126	__set_bit(BNX2X_Q_FLG_PCSUM_ON_PKT, &flags);
   3127	__set_bit(BNX2X_Q_FLG_TUN_INC_INNER_IP_ID, &flags);
   3128
   3129#ifdef BNX2X_STOP_ON_ERROR
   3130	__set_bit(BNX2X_Q_FLG_TX_SEC, &flags);
   3131#endif
   3132
   3133	return flags;
   3134}
   3135
   3136static unsigned long bnx2x_get_q_flags(struct bnx2x *bp,
   3137				       struct bnx2x_fastpath *fp,
   3138				       bool leading)
   3139{
   3140	unsigned long flags = 0;
   3141
   3142	/* calculate other queue flags */
   3143	if (IS_MF_SD(bp))
   3144		__set_bit(BNX2X_Q_FLG_OV, &flags);
   3145
   3146	if (IS_FCOE_FP(fp)) {
   3147		__set_bit(BNX2X_Q_FLG_FCOE, &flags);
   3148		/* For FCoE - force usage of default priority (for afex) */
   3149		__set_bit(BNX2X_Q_FLG_FORCE_DEFAULT_PRI, &flags);
   3150	}
   3151
   3152	if (fp->mode != TPA_MODE_DISABLED) {
   3153		__set_bit(BNX2X_Q_FLG_TPA, &flags);
   3154		__set_bit(BNX2X_Q_FLG_TPA_IPV6, &flags);
   3155		if (fp->mode == TPA_MODE_GRO)
   3156			__set_bit(BNX2X_Q_FLG_TPA_GRO, &flags);
   3157	}
   3158
   3159	if (leading) {
   3160		__set_bit(BNX2X_Q_FLG_LEADING_RSS, &flags);
   3161		__set_bit(BNX2X_Q_FLG_MCAST, &flags);
   3162	}
   3163
   3164	/* Always set HW VLAN stripping */
   3165	__set_bit(BNX2X_Q_FLG_VLAN, &flags);
   3166
   3167	/* configure silent vlan removal */
   3168	if (IS_MF_AFEX(bp))
   3169		__set_bit(BNX2X_Q_FLG_SILENT_VLAN_REM, &flags);
   3170
   3171	return flags | bnx2x_get_common_flags(bp, fp, true);
   3172}
   3173
   3174static void bnx2x_pf_q_prep_general(struct bnx2x *bp,
   3175	struct bnx2x_fastpath *fp, struct bnx2x_general_setup_params *gen_init,
   3176	u8 cos)
   3177{
   3178	gen_init->stat_id = bnx2x_stats_id(fp);
   3179	gen_init->spcl_id = fp->cl_id;
   3180
   3181	/* Always use mini-jumbo MTU for FCoE L2 ring */
   3182	if (IS_FCOE_FP(fp))
   3183		gen_init->mtu = BNX2X_FCOE_MINI_JUMBO_MTU;
   3184	else
   3185		gen_init->mtu = bp->dev->mtu;
   3186
   3187	gen_init->cos = cos;
   3188
   3189	gen_init->fp_hsi = ETH_FP_HSI_VERSION;
   3190}
   3191
   3192static void bnx2x_pf_rx_q_prep(struct bnx2x *bp,
   3193	struct bnx2x_fastpath *fp, struct rxq_pause_params *pause,
   3194	struct bnx2x_rxq_setup_params *rxq_init)
   3195{
   3196	u8 max_sge = 0;
   3197	u16 sge_sz = 0;
   3198	u16 tpa_agg_size = 0;
   3199
   3200	if (fp->mode != TPA_MODE_DISABLED) {
   3201		pause->sge_th_lo = SGE_TH_LO(bp);
   3202		pause->sge_th_hi = SGE_TH_HI(bp);
   3203
   3204		/* validate SGE ring has enough to cross high threshold */
   3205		WARN_ON(bp->dropless_fc &&
   3206				pause->sge_th_hi + FW_PREFETCH_CNT >
   3207				MAX_RX_SGE_CNT * NUM_RX_SGE_PAGES);
   3208
   3209		tpa_agg_size = TPA_AGG_SIZE;
   3210		max_sge = SGE_PAGE_ALIGN(bp->dev->mtu) >>
   3211			SGE_PAGE_SHIFT;
   3212		max_sge = ((max_sge + PAGES_PER_SGE - 1) &
   3213			  (~(PAGES_PER_SGE-1))) >> PAGES_PER_SGE_SHIFT;
   3214		sge_sz = (u16)min_t(u32, SGE_PAGES, 0xffff);
   3215	}
   3216
   3217	/* pause - not for e1 */
   3218	if (!CHIP_IS_E1(bp)) {
   3219		pause->bd_th_lo = BD_TH_LO(bp);
   3220		pause->bd_th_hi = BD_TH_HI(bp);
   3221
   3222		pause->rcq_th_lo = RCQ_TH_LO(bp);
   3223		pause->rcq_th_hi = RCQ_TH_HI(bp);
   3224		/*
   3225		 * validate that rings have enough entries to cross
   3226		 * high thresholds
   3227		 */
   3228		WARN_ON(bp->dropless_fc &&
   3229				pause->bd_th_hi + FW_PREFETCH_CNT >
   3230				bp->rx_ring_size);
   3231		WARN_ON(bp->dropless_fc &&
   3232				pause->rcq_th_hi + FW_PREFETCH_CNT >
   3233				NUM_RCQ_RINGS * MAX_RCQ_DESC_CNT);
   3234
   3235		pause->pri_map = 1;
   3236	}
   3237
   3238	/* rxq setup */
   3239	rxq_init->dscr_map = fp->rx_desc_mapping;
   3240	rxq_init->sge_map = fp->rx_sge_mapping;
   3241	rxq_init->rcq_map = fp->rx_comp_mapping;
   3242	rxq_init->rcq_np_map = fp->rx_comp_mapping + BCM_PAGE_SIZE;
   3243
   3244	/* This should be a maximum number of data bytes that may be
   3245	 * placed on the BD (not including paddings).
   3246	 */
   3247	rxq_init->buf_sz = fp->rx_buf_size - BNX2X_FW_RX_ALIGN_START -
   3248			   BNX2X_FW_RX_ALIGN_END - IP_HEADER_ALIGNMENT_PADDING;
   3249
   3250	rxq_init->cl_qzone_id = fp->cl_qzone_id;
   3251	rxq_init->tpa_agg_sz = tpa_agg_size;
   3252	rxq_init->sge_buf_sz = sge_sz;
   3253	rxq_init->max_sges_pkt = max_sge;
   3254	rxq_init->rss_engine_id = BP_FUNC(bp);
   3255	rxq_init->mcast_engine_id = BP_FUNC(bp);
   3256
   3257	/* Maximum number or simultaneous TPA aggregation for this Queue.
   3258	 *
   3259	 * For PF Clients it should be the maximum available number.
   3260	 * VF driver(s) may want to define it to a smaller value.
   3261	 */
   3262	rxq_init->max_tpa_queues = MAX_AGG_QS(bp);
   3263
   3264	rxq_init->cache_line_log = BNX2X_RX_ALIGN_SHIFT;
   3265	rxq_init->fw_sb_id = fp->fw_sb_id;
   3266
   3267	if (IS_FCOE_FP(fp))
   3268		rxq_init->sb_cq_index = HC_SP_INDEX_ETH_FCOE_RX_CQ_CONS;
   3269	else
   3270		rxq_init->sb_cq_index = HC_INDEX_ETH_RX_CQ_CONS;
   3271	/* configure silent vlan removal
   3272	 * if multi function mode is afex, then mask default vlan
   3273	 */
   3274	if (IS_MF_AFEX(bp)) {
   3275		rxq_init->silent_removal_value = bp->afex_def_vlan_tag;
   3276		rxq_init->silent_removal_mask = VLAN_VID_MASK;
   3277	}
   3278}
   3279
   3280static void bnx2x_pf_tx_q_prep(struct bnx2x *bp,
   3281	struct bnx2x_fastpath *fp, struct bnx2x_txq_setup_params *txq_init,
   3282	u8 cos)
   3283{
   3284	txq_init->dscr_map = fp->txdata_ptr[cos]->tx_desc_mapping;
   3285	txq_init->sb_cq_index = HC_INDEX_ETH_FIRST_TX_CQ_CONS + cos;
   3286	txq_init->traffic_type = LLFC_TRAFFIC_TYPE_NW;
   3287	txq_init->fw_sb_id = fp->fw_sb_id;
   3288
   3289	/*
   3290	 * set the tss leading client id for TX classification ==
   3291	 * leading RSS client id
   3292	 */
   3293	txq_init->tss_leading_cl_id = bnx2x_fp(bp, 0, cl_id);
   3294
   3295	if (IS_FCOE_FP(fp)) {
   3296		txq_init->sb_cq_index = HC_SP_INDEX_ETH_FCOE_TX_CQ_CONS;
   3297		txq_init->traffic_type = LLFC_TRAFFIC_TYPE_FCOE;
   3298	}
   3299}
   3300
   3301static void bnx2x_pf_init(struct bnx2x *bp)
   3302{
   3303	struct bnx2x_func_init_params func_init = {0};
   3304	struct event_ring_data eq_data = { {0} };
   3305
   3306	if (!CHIP_IS_E1x(bp)) {
   3307		/* reset IGU PF statistics: MSIX + ATTN */
   3308		/* PF */
   3309		REG_WR(bp, IGU_REG_STATISTIC_NUM_MESSAGE_SENT +
   3310			   BNX2X_IGU_STAS_MSG_VF_CNT*4 +
   3311			   (CHIP_MODE_IS_4_PORT(bp) ?
   3312				BP_FUNC(bp) : BP_VN(bp))*4, 0);
   3313		/* ATTN */
   3314		REG_WR(bp, IGU_REG_STATISTIC_NUM_MESSAGE_SENT +
   3315			   BNX2X_IGU_STAS_MSG_VF_CNT*4 +
   3316			   BNX2X_IGU_STAS_MSG_PF_CNT*4 +
   3317			   (CHIP_MODE_IS_4_PORT(bp) ?
   3318				BP_FUNC(bp) : BP_VN(bp))*4, 0);
   3319	}
   3320
   3321	func_init.spq_active = true;
   3322	func_init.pf_id = BP_FUNC(bp);
   3323	func_init.func_id = BP_FUNC(bp);
   3324	func_init.spq_map = bp->spq_mapping;
   3325	func_init.spq_prod = bp->spq_prod_idx;
   3326
   3327	bnx2x_func_init(bp, &func_init);
   3328
   3329	memset(&(bp->cmng), 0, sizeof(struct cmng_struct_per_port));
   3330
   3331	/*
   3332	 * Congestion management values depend on the link rate
   3333	 * There is no active link so initial link rate is set to 10 Gbps.
   3334	 * When the link comes up The congestion management values are
   3335	 * re-calculated according to the actual link rate.
   3336	 */
   3337	bp->link_vars.line_speed = SPEED_10000;
   3338	bnx2x_cmng_fns_init(bp, true, bnx2x_get_cmng_fns_mode(bp));
   3339
   3340	/* Only the PMF sets the HW */
   3341	if (bp->port.pmf)
   3342		storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
   3343
   3344	/* init Event Queue - PCI bus guarantees correct endianity*/
   3345	eq_data.base_addr.hi = U64_HI(bp->eq_mapping);
   3346	eq_data.base_addr.lo = U64_LO(bp->eq_mapping);
   3347	eq_data.producer = bp->eq_prod;
   3348	eq_data.index_id = HC_SP_INDEX_EQ_CONS;
   3349	eq_data.sb_id = DEF_SB_ID;
   3350	storm_memset_eq_data(bp, &eq_data, BP_FUNC(bp));
   3351}
   3352
   3353static void bnx2x_e1h_disable(struct bnx2x *bp)
   3354{
   3355	int port = BP_PORT(bp);
   3356
   3357	bnx2x_tx_disable(bp);
   3358
   3359	REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
   3360}
   3361
   3362static void bnx2x_e1h_enable(struct bnx2x *bp)
   3363{
   3364	int port = BP_PORT(bp);
   3365
   3366	if (!(IS_MF_UFP(bp) && BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp)))
   3367		REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port * 8, 1);
   3368
   3369	/* Tx queue should be only re-enabled */
   3370	netif_tx_wake_all_queues(bp->dev);
   3371
   3372	/*
   3373	 * Should not call netif_carrier_on since it will be called if the link
   3374	 * is up when checking for link state
   3375	 */
   3376}
   3377
   3378#define DRV_INFO_ETH_STAT_NUM_MACS_REQUIRED 3
   3379
   3380static void bnx2x_drv_info_ether_stat(struct bnx2x *bp)
   3381{
   3382	struct eth_stats_info *ether_stat =
   3383		&bp->slowpath->drv_info_to_mcp.ether_stat;
   3384	struct bnx2x_vlan_mac_obj *mac_obj =
   3385		&bp->sp_objs->mac_obj;
   3386	int i;
   3387
   3388	strlcpy(ether_stat->version, DRV_MODULE_VERSION,
   3389		ETH_STAT_INFO_VERSION_LEN);
   3390
   3391	/* get DRV_INFO_ETH_STAT_NUM_MACS_REQUIRED macs, placing them in the
   3392	 * mac_local field in ether_stat struct. The base address is offset by 2
   3393	 * bytes to account for the field being 8 bytes but a mac address is
   3394	 * only 6 bytes. Likewise, the stride for the get_n_elements function is
   3395	 * 2 bytes to compensate from the 6 bytes of a mac to the 8 bytes
   3396	 * allocated by the ether_stat struct, so the macs will land in their
   3397	 * proper positions.
   3398	 */
   3399	for (i = 0; i < DRV_INFO_ETH_STAT_NUM_MACS_REQUIRED; i++)
   3400		memset(ether_stat->mac_local + i, 0,
   3401		       sizeof(ether_stat->mac_local[0]));
   3402	mac_obj->get_n_elements(bp, &bp->sp_objs[0].mac_obj,
   3403				DRV_INFO_ETH_STAT_NUM_MACS_REQUIRED,
   3404				ether_stat->mac_local + MAC_PAD, MAC_PAD,
   3405				ETH_ALEN);
   3406	ether_stat->mtu_size = bp->dev->mtu;
   3407	if (bp->dev->features & NETIF_F_RXCSUM)
   3408		ether_stat->feature_flags |= FEATURE_ETH_CHKSUM_OFFLOAD_MASK;
   3409	if (bp->dev->features & NETIF_F_TSO)
   3410		ether_stat->feature_flags |= FEATURE_ETH_LSO_MASK;
   3411	ether_stat->feature_flags |= bp->common.boot_mode;
   3412
   3413	ether_stat->promiscuous_mode = (bp->dev->flags & IFF_PROMISC) ? 1 : 0;
   3414
   3415	ether_stat->txq_size = bp->tx_ring_size;
   3416	ether_stat->rxq_size = bp->rx_ring_size;
   3417
   3418#ifdef CONFIG_BNX2X_SRIOV
   3419	ether_stat->vf_cnt = IS_SRIOV(bp) ? bp->vfdb->sriov.nr_virtfn : 0;
   3420#endif
   3421}
   3422
   3423static void bnx2x_drv_info_fcoe_stat(struct bnx2x *bp)
   3424{
   3425	struct bnx2x_dcbx_app_params *app = &bp->dcbx_port_params.app;
   3426	struct fcoe_stats_info *fcoe_stat =
   3427		&bp->slowpath->drv_info_to_mcp.fcoe_stat;
   3428
   3429	if (!CNIC_LOADED(bp))
   3430		return;
   3431
   3432	memcpy(fcoe_stat->mac_local + MAC_PAD, bp->fip_mac, ETH_ALEN);
   3433
   3434	fcoe_stat->qos_priority =
   3435		app->traffic_type_priority[LLFC_TRAFFIC_TYPE_FCOE];
   3436
   3437	/* insert FCoE stats from ramrod response */
   3438	if (!NO_FCOE(bp)) {
   3439		struct tstorm_per_queue_stats *fcoe_q_tstorm_stats =
   3440			&bp->fw_stats_data->queue_stats[FCOE_IDX(bp)].
   3441			tstorm_queue_statistics;
   3442
   3443		struct xstorm_per_queue_stats *fcoe_q_xstorm_stats =
   3444			&bp->fw_stats_data->queue_stats[FCOE_IDX(bp)].
   3445			xstorm_queue_statistics;
   3446
   3447		struct fcoe_statistics_params *fw_fcoe_stat =
   3448			&bp->fw_stats_data->fcoe;
   3449
   3450		ADD_64_LE(fcoe_stat->rx_bytes_hi, LE32_0,
   3451			  fcoe_stat->rx_bytes_lo,
   3452			  fw_fcoe_stat->rx_stat0.fcoe_rx_byte_cnt);
   3453
   3454		ADD_64_LE(fcoe_stat->rx_bytes_hi,
   3455			  fcoe_q_tstorm_stats->rcv_ucast_bytes.hi,
   3456			  fcoe_stat->rx_bytes_lo,
   3457			  fcoe_q_tstorm_stats->rcv_ucast_bytes.lo);
   3458
   3459		ADD_64_LE(fcoe_stat->rx_bytes_hi,
   3460			  fcoe_q_tstorm_stats->rcv_bcast_bytes.hi,
   3461			  fcoe_stat->rx_bytes_lo,
   3462			  fcoe_q_tstorm_stats->rcv_bcast_bytes.lo);
   3463
   3464		ADD_64_LE(fcoe_stat->rx_bytes_hi,
   3465			  fcoe_q_tstorm_stats->rcv_mcast_bytes.hi,
   3466			  fcoe_stat->rx_bytes_lo,
   3467			  fcoe_q_tstorm_stats->rcv_mcast_bytes.lo);
   3468
   3469		ADD_64_LE(fcoe_stat->rx_frames_hi, LE32_0,
   3470			  fcoe_stat->rx_frames_lo,
   3471			  fw_fcoe_stat->rx_stat0.fcoe_rx_pkt_cnt);
   3472
   3473		ADD_64_LE(fcoe_stat->rx_frames_hi, LE32_0,
   3474			  fcoe_stat->rx_frames_lo,
   3475			  fcoe_q_tstorm_stats->rcv_ucast_pkts);
   3476
   3477		ADD_64_LE(fcoe_stat->rx_frames_hi, LE32_0,
   3478			  fcoe_stat->rx_frames_lo,
   3479			  fcoe_q_tstorm_stats->rcv_bcast_pkts);
   3480
   3481		ADD_64_LE(fcoe_stat->rx_frames_hi, LE32_0,
   3482			  fcoe_stat->rx_frames_lo,
   3483			  fcoe_q_tstorm_stats->rcv_mcast_pkts);
   3484
   3485		ADD_64_LE(fcoe_stat->tx_bytes_hi, LE32_0,
   3486			  fcoe_stat->tx_bytes_lo,
   3487			  fw_fcoe_stat->tx_stat.fcoe_tx_byte_cnt);
   3488
   3489		ADD_64_LE(fcoe_stat->tx_bytes_hi,
   3490			  fcoe_q_xstorm_stats->ucast_bytes_sent.hi,
   3491			  fcoe_stat->tx_bytes_lo,
   3492			  fcoe_q_xstorm_stats->ucast_bytes_sent.lo);
   3493
   3494		ADD_64_LE(fcoe_stat->tx_bytes_hi,
   3495			  fcoe_q_xstorm_stats->bcast_bytes_sent.hi,
   3496			  fcoe_stat->tx_bytes_lo,
   3497			  fcoe_q_xstorm_stats->bcast_bytes_sent.lo);
   3498
   3499		ADD_64_LE(fcoe_stat->tx_bytes_hi,
   3500			  fcoe_q_xstorm_stats->mcast_bytes_sent.hi,
   3501			  fcoe_stat->tx_bytes_lo,
   3502			  fcoe_q_xstorm_stats->mcast_bytes_sent.lo);
   3503
   3504		ADD_64_LE(fcoe_stat->tx_frames_hi, LE32_0,
   3505			  fcoe_stat->tx_frames_lo,
   3506			  fw_fcoe_stat->tx_stat.fcoe_tx_pkt_cnt);
   3507
   3508		ADD_64_LE(fcoe_stat->tx_frames_hi, LE32_0,
   3509			  fcoe_stat->tx_frames_lo,
   3510			  fcoe_q_xstorm_stats->ucast_pkts_sent);
   3511
   3512		ADD_64_LE(fcoe_stat->tx_frames_hi, LE32_0,
   3513			  fcoe_stat->tx_frames_lo,
   3514			  fcoe_q_xstorm_stats->bcast_pkts_sent);
   3515
   3516		ADD_64_LE(fcoe_stat->tx_frames_hi, LE32_0,
   3517			  fcoe_stat->tx_frames_lo,
   3518			  fcoe_q_xstorm_stats->mcast_pkts_sent);
   3519	}
   3520
   3521	/* ask L5 driver to add data to the struct */
   3522	bnx2x_cnic_notify(bp, CNIC_CTL_FCOE_STATS_GET_CMD);
   3523}
   3524
   3525static void bnx2x_drv_info_iscsi_stat(struct bnx2x *bp)
   3526{
   3527	struct bnx2x_dcbx_app_params *app = &bp->dcbx_port_params.app;
   3528	struct iscsi_stats_info *iscsi_stat =
   3529		&bp->slowpath->drv_info_to_mcp.iscsi_stat;
   3530
   3531	if (!CNIC_LOADED(bp))
   3532		return;
   3533
   3534	memcpy(iscsi_stat->mac_local + MAC_PAD, bp->cnic_eth_dev.iscsi_mac,
   3535	       ETH_ALEN);
   3536
   3537	iscsi_stat->qos_priority =
   3538		app->traffic_type_priority[LLFC_TRAFFIC_TYPE_ISCSI];
   3539
   3540	/* ask L5 driver to add data to the struct */
   3541	bnx2x_cnic_notify(bp, CNIC_CTL_ISCSI_STATS_GET_CMD);
   3542}
   3543
   3544/* called due to MCP event (on pmf):
   3545 *	reread new bandwidth configuration
   3546 *	configure FW
   3547 *	notify others function about the change
   3548 */
   3549static void bnx2x_config_mf_bw(struct bnx2x *bp)
   3550{
   3551	/* Workaround for MFW bug.
   3552	 * MFW is not supposed to generate BW attention in
   3553	 * single function mode.
   3554	 */
   3555	if (!IS_MF(bp)) {
   3556		DP(BNX2X_MSG_MCP,
   3557		   "Ignoring MF BW config in single function mode\n");
   3558		return;
   3559	}
   3560
   3561	if (bp->link_vars.link_up) {
   3562		bnx2x_cmng_fns_init(bp, true, CMNG_FNS_MINMAX);
   3563		bnx2x_link_sync_notify(bp);
   3564	}
   3565	storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
   3566}
   3567
   3568static void bnx2x_set_mf_bw(struct bnx2x *bp)
   3569{
   3570	bnx2x_config_mf_bw(bp);
   3571	bnx2x_fw_command(bp, DRV_MSG_CODE_SET_MF_BW_ACK, 0);
   3572}
   3573
   3574static void bnx2x_handle_eee_event(struct bnx2x *bp)
   3575{
   3576	DP(BNX2X_MSG_MCP, "EEE - LLDP event\n");
   3577	bnx2x_fw_command(bp, DRV_MSG_CODE_EEE_RESULTS_ACK, 0);
   3578}
   3579
   3580#define BNX2X_UPDATE_DRV_INFO_IND_LENGTH	(20)
   3581#define BNX2X_UPDATE_DRV_INFO_IND_COUNT		(25)
   3582
   3583static void bnx2x_handle_drv_info_req(struct bnx2x *bp)
   3584{
   3585	enum drv_info_opcode op_code;
   3586	u32 drv_info_ctl = SHMEM2_RD(bp, drv_info_control);
   3587	bool release = false;
   3588	int wait;
   3589
   3590	/* if drv_info version supported by MFW doesn't match - send NACK */
   3591	if ((drv_info_ctl & DRV_INFO_CONTROL_VER_MASK) != DRV_INFO_CUR_VER) {
   3592		bnx2x_fw_command(bp, DRV_MSG_CODE_DRV_INFO_NACK, 0);
   3593		return;
   3594	}
   3595
   3596	op_code = (drv_info_ctl & DRV_INFO_CONTROL_OP_CODE_MASK) >>
   3597		  DRV_INFO_CONTROL_OP_CODE_SHIFT;
   3598
   3599	/* Must prevent other flows from accessing drv_info_to_mcp */
   3600	mutex_lock(&bp->drv_info_mutex);
   3601
   3602	memset(&bp->slowpath->drv_info_to_mcp, 0,
   3603	       sizeof(union drv_info_to_mcp));
   3604
   3605	switch (op_code) {
   3606	case ETH_STATS_OPCODE:
   3607		bnx2x_drv_info_ether_stat(bp);
   3608		break;
   3609	case FCOE_STATS_OPCODE:
   3610		bnx2x_drv_info_fcoe_stat(bp);
   3611		break;
   3612	case ISCSI_STATS_OPCODE:
   3613		bnx2x_drv_info_iscsi_stat(bp);
   3614		break;
   3615	default:
   3616		/* if op code isn't supported - send NACK */
   3617		bnx2x_fw_command(bp, DRV_MSG_CODE_DRV_INFO_NACK, 0);
   3618		goto out;
   3619	}
   3620
   3621	/* if we got drv_info attn from MFW then these fields are defined in
   3622	 * shmem2 for sure
   3623	 */
   3624	SHMEM2_WR(bp, drv_info_host_addr_lo,
   3625		U64_LO(bnx2x_sp_mapping(bp, drv_info_to_mcp)));
   3626	SHMEM2_WR(bp, drv_info_host_addr_hi,
   3627		U64_HI(bnx2x_sp_mapping(bp, drv_info_to_mcp)));
   3628
   3629	bnx2x_fw_command(bp, DRV_MSG_CODE_DRV_INFO_ACK, 0);
   3630
   3631	/* Since possible management wants both this and get_driver_version
   3632	 * need to wait until management notifies us it finished utilizing
   3633	 * the buffer.
   3634	 */
   3635	if (!SHMEM2_HAS(bp, mfw_drv_indication)) {
   3636		DP(BNX2X_MSG_MCP, "Management does not support indication\n");
   3637	} else if (!bp->drv_info_mng_owner) {
   3638		u32 bit = MFW_DRV_IND_READ_DONE_OFFSET((BP_ABS_FUNC(bp) >> 1));
   3639
   3640		for (wait = 0; wait < BNX2X_UPDATE_DRV_INFO_IND_COUNT; wait++) {
   3641			u32 indication = SHMEM2_RD(bp, mfw_drv_indication);
   3642
   3643			/* Management is done; need to clear indication */
   3644			if (indication & bit) {
   3645				SHMEM2_WR(bp, mfw_drv_indication,
   3646					  indication & ~bit);
   3647				release = true;
   3648				break;
   3649			}
   3650
   3651			msleep(BNX2X_UPDATE_DRV_INFO_IND_LENGTH);
   3652		}
   3653	}
   3654	if (!release) {
   3655		DP(BNX2X_MSG_MCP, "Management did not release indication\n");
   3656		bp->drv_info_mng_owner = true;
   3657	}
   3658
   3659out:
   3660	mutex_unlock(&bp->drv_info_mutex);
   3661}
   3662
   3663static u32 bnx2x_update_mng_version_utility(u8 *version, bool bnx2x_format)
   3664{
   3665	u8 vals[4];
   3666	int i = 0;
   3667
   3668	if (bnx2x_format) {
   3669		i = sscanf(version, "1.%c%hhd.%hhd.%hhd",
   3670			   &vals[0], &vals[1], &vals[2], &vals[3]);
   3671		if (i > 0)
   3672			vals[0] -= '0';
   3673	} else {
   3674		i = sscanf(version, "%hhd.%hhd.%hhd.%hhd",
   3675			   &vals[0], &vals[1], &vals[2], &vals[3]);
   3676	}
   3677
   3678	while (i < 4)
   3679		vals[i++] = 0;
   3680
   3681	return (vals[0] << 24) | (vals[1] << 16) | (vals[2] << 8) | vals[3];
   3682}
   3683
   3684void bnx2x_update_mng_version(struct bnx2x *bp)
   3685{
   3686	u32 iscsiver = DRV_VER_NOT_LOADED;
   3687	u32 fcoever = DRV_VER_NOT_LOADED;
   3688	u32 ethver = DRV_VER_NOT_LOADED;
   3689	int idx = BP_FW_MB_IDX(bp);
   3690	u8 *version;
   3691
   3692	if (!SHMEM2_HAS(bp, func_os_drv_ver))
   3693		return;
   3694
   3695	mutex_lock(&bp->drv_info_mutex);
   3696	/* Must not proceed when `bnx2x_handle_drv_info_req' is feasible */
   3697	if (bp->drv_info_mng_owner)
   3698		goto out;
   3699
   3700	if (bp->state != BNX2X_STATE_OPEN)
   3701		goto out;
   3702
   3703	/* Parse ethernet driver version */
   3704	ethver = bnx2x_update_mng_version_utility(DRV_MODULE_VERSION, true);
   3705	if (!CNIC_LOADED(bp))
   3706		goto out;
   3707
   3708	/* Try getting storage driver version via cnic */
   3709	memset(&bp->slowpath->drv_info_to_mcp, 0,
   3710	       sizeof(union drv_info_to_mcp));
   3711	bnx2x_drv_info_iscsi_stat(bp);
   3712	version = bp->slowpath->drv_info_to_mcp.iscsi_stat.version;
   3713	iscsiver = bnx2x_update_mng_version_utility(version, false);
   3714
   3715	memset(&bp->slowpath->drv_info_to_mcp, 0,
   3716	       sizeof(union drv_info_to_mcp));
   3717	bnx2x_drv_info_fcoe_stat(bp);
   3718	version = bp->slowpath->drv_info_to_mcp.fcoe_stat.version;
   3719	fcoever = bnx2x_update_mng_version_utility(version, false);
   3720
   3721out:
   3722	SHMEM2_WR(bp, func_os_drv_ver[idx].versions[DRV_PERS_ETHERNET], ethver);
   3723	SHMEM2_WR(bp, func_os_drv_ver[idx].versions[DRV_PERS_ISCSI], iscsiver);
   3724	SHMEM2_WR(bp, func_os_drv_ver[idx].versions[DRV_PERS_FCOE], fcoever);
   3725
   3726	mutex_unlock(&bp->drv_info_mutex);
   3727
   3728	DP(BNX2X_MSG_MCP, "Setting driver version: ETH [%08x] iSCSI [%08x] FCoE [%08x]\n",
   3729	   ethver, iscsiver, fcoever);
   3730}
   3731
   3732void bnx2x_update_mfw_dump(struct bnx2x *bp)
   3733{
   3734	u32 drv_ver;
   3735	u32 valid_dump;
   3736
   3737	if (!SHMEM2_HAS(bp, drv_info))
   3738		return;
   3739
   3740	/* Update Driver load time, possibly broken in y2038 */
   3741	SHMEM2_WR(bp, drv_info.epoc, (u32)ktime_get_real_seconds());
   3742
   3743	drv_ver = bnx2x_update_mng_version_utility(DRV_MODULE_VERSION, true);
   3744	SHMEM2_WR(bp, drv_info.drv_ver, drv_ver);
   3745
   3746	SHMEM2_WR(bp, drv_info.fw_ver, REG_RD(bp, XSEM_REG_PRAM));
   3747
   3748	/* Check & notify On-Chip dump. */
   3749	valid_dump = SHMEM2_RD(bp, drv_info.valid_dump);
   3750
   3751	if (valid_dump & FIRST_DUMP_VALID)
   3752		DP(NETIF_MSG_IFUP, "A valid On-Chip MFW dump found on 1st partition\n");
   3753
   3754	if (valid_dump & SECOND_DUMP_VALID)
   3755		DP(NETIF_MSG_IFUP, "A valid On-Chip MFW dump found on 2nd partition\n");
   3756}
   3757
   3758static void bnx2x_oem_event(struct bnx2x *bp, u32 event)
   3759{
   3760	u32 cmd_ok, cmd_fail;
   3761
   3762	/* sanity */
   3763	if (event & DRV_STATUS_DCC_EVENT_MASK &&
   3764	    event & DRV_STATUS_OEM_EVENT_MASK) {
   3765		BNX2X_ERR("Received simultaneous events %08x\n", event);
   3766		return;
   3767	}
   3768
   3769	if (event & DRV_STATUS_DCC_EVENT_MASK) {
   3770		cmd_fail = DRV_MSG_CODE_DCC_FAILURE;
   3771		cmd_ok = DRV_MSG_CODE_DCC_OK;
   3772	} else /* if (event & DRV_STATUS_OEM_EVENT_MASK) */ {
   3773		cmd_fail = DRV_MSG_CODE_OEM_FAILURE;
   3774		cmd_ok = DRV_MSG_CODE_OEM_OK;
   3775	}
   3776
   3777	DP(BNX2X_MSG_MCP, "oem_event 0x%x\n", event);
   3778
   3779	if (event & (DRV_STATUS_DCC_DISABLE_ENABLE_PF |
   3780		     DRV_STATUS_OEM_DISABLE_ENABLE_PF)) {
   3781		/* This is the only place besides the function initialization
   3782		 * where the bp->flags can change so it is done without any
   3783		 * locks
   3784		 */
   3785		if (bp->mf_config[BP_VN(bp)] & FUNC_MF_CFG_FUNC_DISABLED) {
   3786			DP(BNX2X_MSG_MCP, "mf_cfg function disabled\n");
   3787			bp->flags |= MF_FUNC_DIS;
   3788
   3789			bnx2x_e1h_disable(bp);
   3790		} else {
   3791			DP(BNX2X_MSG_MCP, "mf_cfg function enabled\n");
   3792			bp->flags &= ~MF_FUNC_DIS;
   3793
   3794			bnx2x_e1h_enable(bp);
   3795		}
   3796		event &= ~(DRV_STATUS_DCC_DISABLE_ENABLE_PF |
   3797			   DRV_STATUS_OEM_DISABLE_ENABLE_PF);
   3798	}
   3799
   3800	if (event & (DRV_STATUS_DCC_BANDWIDTH_ALLOCATION |
   3801		     DRV_STATUS_OEM_BANDWIDTH_ALLOCATION)) {
   3802		bnx2x_config_mf_bw(bp);
   3803		event &= ~(DRV_STATUS_DCC_BANDWIDTH_ALLOCATION |
   3804			   DRV_STATUS_OEM_BANDWIDTH_ALLOCATION);
   3805	}
   3806
   3807	/* Report results to MCP */
   3808	if (event)
   3809		bnx2x_fw_command(bp, cmd_fail, 0);
   3810	else
   3811		bnx2x_fw_command(bp, cmd_ok, 0);
   3812}
   3813
   3814/* must be called under the spq lock */
   3815static struct eth_spe *bnx2x_sp_get_next(struct bnx2x *bp)
   3816{
   3817	struct eth_spe *next_spe = bp->spq_prod_bd;
   3818
   3819	if (bp->spq_prod_bd == bp->spq_last_bd) {
   3820		bp->spq_prod_bd = bp->spq;
   3821		bp->spq_prod_idx = 0;
   3822		DP(BNX2X_MSG_SP, "end of spq\n");
   3823	} else {
   3824		bp->spq_prod_bd++;
   3825		bp->spq_prod_idx++;
   3826	}
   3827	return next_spe;
   3828}
   3829
   3830/* must be called under the spq lock */
   3831static void bnx2x_sp_prod_update(struct bnx2x *bp)
   3832{
   3833	int func = BP_FUNC(bp);
   3834
   3835	/*
   3836	 * Make sure that BD data is updated before writing the producer:
   3837	 * BD data is written to the memory, the producer is read from the
   3838	 * memory, thus we need a full memory barrier to ensure the ordering.
   3839	 */
   3840	mb();
   3841
   3842	REG_WR16_RELAXED(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_PROD_OFFSET(func),
   3843			 bp->spq_prod_idx);
   3844}
   3845
   3846/**
   3847 * bnx2x_is_contextless_ramrod - check if the current command ends on EQ
   3848 *
   3849 * @cmd:	command to check
   3850 * @cmd_type:	command type
   3851 */
   3852static bool bnx2x_is_contextless_ramrod(int cmd, int cmd_type)
   3853{
   3854	if ((cmd_type == NONE_CONNECTION_TYPE) ||
   3855	    (cmd == RAMROD_CMD_ID_ETH_FORWARD_SETUP) ||
   3856	    (cmd == RAMROD_CMD_ID_ETH_CLASSIFICATION_RULES) ||
   3857	    (cmd == RAMROD_CMD_ID_ETH_FILTER_RULES) ||
   3858	    (cmd == RAMROD_CMD_ID_ETH_MULTICAST_RULES) ||
   3859	    (cmd == RAMROD_CMD_ID_ETH_SET_MAC) ||
   3860	    (cmd == RAMROD_CMD_ID_ETH_RSS_UPDATE))
   3861		return true;
   3862	else
   3863		return false;
   3864}
   3865
   3866/**
   3867 * bnx2x_sp_post - place a single command on an SP ring
   3868 *
   3869 * @bp:		driver handle
   3870 * @command:	command to place (e.g. SETUP, FILTER_RULES, etc.)
   3871 * @cid:	SW CID the command is related to
   3872 * @data_hi:	command private data address (high 32 bits)
   3873 * @data_lo:	command private data address (low 32 bits)
   3874 * @cmd_type:	command type (e.g. NONE, ETH)
   3875 *
   3876 * SP data is handled as if it's always an address pair, thus data fields are
   3877 * not swapped to little endian in upper functions. Instead this function swaps
   3878 * data as if it's two u32 fields.
   3879 */
   3880int bnx2x_sp_post(struct bnx2x *bp, int command, int cid,
   3881		  u32 data_hi, u32 data_lo, int cmd_type)
   3882{
   3883	struct eth_spe *spe;
   3884	u16 type;
   3885	bool common = bnx2x_is_contextless_ramrod(command, cmd_type);
   3886
   3887#ifdef BNX2X_STOP_ON_ERROR
   3888	if (unlikely(bp->panic)) {
   3889		BNX2X_ERR("Can't post SP when there is panic\n");
   3890		return -EIO;
   3891	}
   3892#endif
   3893
   3894	spin_lock_bh(&bp->spq_lock);
   3895
   3896	if (common) {
   3897		if (!atomic_read(&bp->eq_spq_left)) {
   3898			BNX2X_ERR("BUG! EQ ring full!\n");
   3899			spin_unlock_bh(&bp->spq_lock);
   3900			bnx2x_panic();
   3901			return -EBUSY;
   3902		}
   3903	} else if (!atomic_read(&bp->cq_spq_left)) {
   3904			BNX2X_ERR("BUG! SPQ ring full!\n");
   3905			spin_unlock_bh(&bp->spq_lock);
   3906			bnx2x_panic();
   3907			return -EBUSY;
   3908	}
   3909
   3910	spe = bnx2x_sp_get_next(bp);
   3911
   3912	/* CID needs port number to be encoded int it */
   3913	spe->hdr.conn_and_cmd_data =
   3914			cpu_to_le32((command << SPE_HDR_CMD_ID_SHIFT) |
   3915				    HW_CID(bp, cid));
   3916
   3917	/* In some cases, type may already contain the func-id
   3918	 * mainly in SRIOV related use cases, so we add it here only
   3919	 * if it's not already set.
   3920	 */
   3921	if (!(cmd_type & SPE_HDR_FUNCTION_ID)) {
   3922		type = (cmd_type << SPE_HDR_CONN_TYPE_SHIFT) &
   3923			SPE_HDR_CONN_TYPE;
   3924		type |= ((BP_FUNC(bp) << SPE_HDR_FUNCTION_ID_SHIFT) &
   3925			 SPE_HDR_FUNCTION_ID);
   3926	} else {
   3927		type = cmd_type;
   3928	}
   3929
   3930	spe->hdr.type = cpu_to_le16(type);
   3931
   3932	spe->data.update_data_addr.hi = cpu_to_le32(data_hi);
   3933	spe->data.update_data_addr.lo = cpu_to_le32(data_lo);
   3934
   3935	/*
   3936	 * It's ok if the actual decrement is issued towards the memory
   3937	 * somewhere between the spin_lock and spin_unlock. Thus no
   3938	 * more explicit memory barrier is needed.
   3939	 */
   3940	if (common)
   3941		atomic_dec(&bp->eq_spq_left);
   3942	else
   3943		atomic_dec(&bp->cq_spq_left);
   3944
   3945	DP(BNX2X_MSG_SP,
   3946	   "SPQE[%x] (%x:%x)  (cmd, common?) (%d,%d)  hw_cid %x  data (%x:%x) type(0x%x) left (CQ, EQ) (%x,%x)\n",
   3947	   bp->spq_prod_idx, (u32)U64_HI(bp->spq_mapping),
   3948	   (u32)(U64_LO(bp->spq_mapping) +
   3949	   (void *)bp->spq_prod_bd - (void *)bp->spq), command, common,
   3950	   HW_CID(bp, cid), data_hi, data_lo, type,
   3951	   atomic_read(&bp->cq_spq_left), atomic_read(&bp->eq_spq_left));
   3952
   3953	bnx2x_sp_prod_update(bp);
   3954	spin_unlock_bh(&bp->spq_lock);
   3955	return 0;
   3956}
   3957
   3958/* acquire split MCP access lock register */
   3959static int bnx2x_acquire_alr(struct bnx2x *bp)
   3960{
   3961	u32 j, val;
   3962	int rc = 0;
   3963
   3964	might_sleep();
   3965	for (j = 0; j < 1000; j++) {
   3966		REG_WR(bp, MCP_REG_MCPR_ACCESS_LOCK, MCPR_ACCESS_LOCK_LOCK);
   3967		val = REG_RD(bp, MCP_REG_MCPR_ACCESS_LOCK);
   3968		if (val & MCPR_ACCESS_LOCK_LOCK)
   3969			break;
   3970
   3971		usleep_range(5000, 10000);
   3972	}
   3973	if (!(val & MCPR_ACCESS_LOCK_LOCK)) {
   3974		BNX2X_ERR("Cannot acquire MCP access lock register\n");
   3975		rc = -EBUSY;
   3976	}
   3977
   3978	return rc;
   3979}
   3980
   3981/* release split MCP access lock register */
   3982static void bnx2x_release_alr(struct bnx2x *bp)
   3983{
   3984	REG_WR(bp, MCP_REG_MCPR_ACCESS_LOCK, 0);
   3985}
   3986
   3987#define BNX2X_DEF_SB_ATT_IDX	0x0001
   3988#define BNX2X_DEF_SB_IDX	0x0002
   3989
   3990static u16 bnx2x_update_dsb_idx(struct bnx2x *bp)
   3991{
   3992	struct host_sp_status_block *def_sb = bp->def_status_blk;
   3993	u16 rc = 0;
   3994
   3995	barrier(); /* status block is written to by the chip */
   3996	if (bp->def_att_idx != def_sb->atten_status_block.attn_bits_index) {
   3997		bp->def_att_idx = def_sb->atten_status_block.attn_bits_index;
   3998		rc |= BNX2X_DEF_SB_ATT_IDX;
   3999	}
   4000
   4001	if (bp->def_idx != def_sb->sp_sb.running_index) {
   4002		bp->def_idx = def_sb->sp_sb.running_index;
   4003		rc |= BNX2X_DEF_SB_IDX;
   4004	}
   4005
   4006	/* Do not reorder: indices reading should complete before handling */
   4007	barrier();
   4008	return rc;
   4009}
   4010
   4011/*
   4012 * slow path service functions
   4013 */
   4014
   4015static void bnx2x_attn_int_asserted(struct bnx2x *bp, u32 asserted)
   4016{
   4017	int port = BP_PORT(bp);
   4018	u32 aeu_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 :
   4019			      MISC_REG_AEU_MASK_ATTN_FUNC_0;
   4020	u32 nig_int_mask_addr = port ? NIG_REG_MASK_INTERRUPT_PORT1 :
   4021				       NIG_REG_MASK_INTERRUPT_PORT0;
   4022	u32 aeu_mask;
   4023	u32 nig_mask = 0;
   4024	u32 reg_addr;
   4025
   4026	if (bp->attn_state & asserted)
   4027		BNX2X_ERR("IGU ERROR\n");
   4028
   4029	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port);
   4030	aeu_mask = REG_RD(bp, aeu_addr);
   4031
   4032	DP(NETIF_MSG_HW, "aeu_mask %x  newly asserted %x\n",
   4033	   aeu_mask, asserted);
   4034	aeu_mask &= ~(asserted & 0x3ff);
   4035	DP(NETIF_MSG_HW, "new mask %x\n", aeu_mask);
   4036
   4037	REG_WR(bp, aeu_addr, aeu_mask);
   4038	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port);
   4039
   4040	DP(NETIF_MSG_HW, "attn_state %x\n", bp->attn_state);
   4041	bp->attn_state |= asserted;
   4042	DP(NETIF_MSG_HW, "new state %x\n", bp->attn_state);
   4043
   4044	if (asserted & ATTN_HARD_WIRED_MASK) {
   4045		if (asserted & ATTN_NIG_FOR_FUNC) {
   4046
   4047			bnx2x_acquire_phy_lock(bp);
   4048
   4049			/* save nig interrupt mask */
   4050			nig_mask = REG_RD(bp, nig_int_mask_addr);
   4051
   4052			/* If nig_mask is not set, no need to call the update
   4053			 * function.
   4054			 */
   4055			if (nig_mask) {
   4056				REG_WR(bp, nig_int_mask_addr, 0);
   4057
   4058				bnx2x_link_attn(bp);
   4059			}
   4060
   4061			/* handle unicore attn? */
   4062		}
   4063		if (asserted & ATTN_SW_TIMER_4_FUNC)
   4064			DP(NETIF_MSG_HW, "ATTN_SW_TIMER_4_FUNC!\n");
   4065
   4066		if (asserted & GPIO_2_FUNC)
   4067			DP(NETIF_MSG_HW, "GPIO_2_FUNC!\n");
   4068
   4069		if (asserted & GPIO_3_FUNC)
   4070			DP(NETIF_MSG_HW, "GPIO_3_FUNC!\n");
   4071
   4072		if (asserted & GPIO_4_FUNC)
   4073			DP(NETIF_MSG_HW, "GPIO_4_FUNC!\n");
   4074
   4075		if (port == 0) {
   4076			if (asserted & ATTN_GENERAL_ATTN_1) {
   4077				DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_1!\n");
   4078				REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_1, 0x0);
   4079			}
   4080			if (asserted & ATTN_GENERAL_ATTN_2) {
   4081				DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_2!\n");
   4082				REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_2, 0x0);
   4083			}
   4084			if (asserted & ATTN_GENERAL_ATTN_3) {
   4085				DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_3!\n");
   4086				REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_3, 0x0);
   4087			}
   4088		} else {
   4089			if (asserted & ATTN_GENERAL_ATTN_4) {
   4090				DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_4!\n");
   4091				REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_4, 0x0);
   4092			}
   4093			if (asserted & ATTN_GENERAL_ATTN_5) {
   4094				DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_5!\n");
   4095				REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_5, 0x0);
   4096			}
   4097			if (asserted & ATTN_GENERAL_ATTN_6) {
   4098				DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_6!\n");
   4099				REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_6, 0x0);
   4100			}
   4101		}
   4102
   4103	} /* if hardwired */
   4104
   4105	if (bp->common.int_block == INT_BLOCK_HC)
   4106		reg_addr = (HC_REG_COMMAND_REG + port*32 +
   4107			    COMMAND_REG_ATTN_BITS_SET);
   4108	else
   4109		reg_addr = (BAR_IGU_INTMEM + IGU_CMD_ATTN_BIT_SET_UPPER*8);
   4110
   4111	DP(NETIF_MSG_HW, "about to mask 0x%08x at %s addr 0x%x\n", asserted,
   4112	   (bp->common.int_block == INT_BLOCK_HC) ? "HC" : "IGU", reg_addr);
   4113	REG_WR(bp, reg_addr, asserted);
   4114
   4115	/* now set back the mask */
   4116	if (asserted & ATTN_NIG_FOR_FUNC) {
   4117		/* Verify that IGU ack through BAR was written before restoring
   4118		 * NIG mask. This loop should exit after 2-3 iterations max.
   4119		 */
   4120		if (bp->common.int_block != INT_BLOCK_HC) {
   4121			u32 cnt = 0, igu_acked;
   4122			do {
   4123				igu_acked = REG_RD(bp,
   4124						   IGU_REG_ATTENTION_ACK_BITS);
   4125			} while (((igu_acked & ATTN_NIG_FOR_FUNC) == 0) &&
   4126				 (++cnt < MAX_IGU_ATTN_ACK_TO));
   4127			if (!igu_acked)
   4128				DP(NETIF_MSG_HW,
   4129				   "Failed to verify IGU ack on time\n");
   4130			barrier();
   4131		}
   4132		REG_WR(bp, nig_int_mask_addr, nig_mask);
   4133		bnx2x_release_phy_lock(bp);
   4134	}
   4135}
   4136
   4137static void bnx2x_fan_failure(struct bnx2x *bp)
   4138{
   4139	int port = BP_PORT(bp);
   4140	u32 ext_phy_config;
   4141	/* mark the failure */
   4142	ext_phy_config =
   4143		SHMEM_RD(bp,
   4144			 dev_info.port_hw_config[port].external_phy_config);
   4145
   4146	ext_phy_config &= ~PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK;
   4147	ext_phy_config |= PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE;
   4148	SHMEM_WR(bp, dev_info.port_hw_config[port].external_phy_config,
   4149		 ext_phy_config);
   4150
   4151	/* log the failure */
   4152	netdev_err(bp->dev, "Fan Failure on Network Controller has caused the driver to shutdown the card to prevent permanent damage.\n"
   4153			    "Please contact OEM Support for assistance\n");
   4154
   4155	/* Schedule device reset (unload)
   4156	 * This is due to some boards consuming sufficient power when driver is
   4157	 * up to overheat if fan fails.
   4158	 */
   4159	bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_FAN_FAILURE, 0);
   4160}
   4161
   4162static void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn)
   4163{
   4164	int port = BP_PORT(bp);
   4165	int reg_offset;
   4166	u32 val;
   4167
   4168	reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
   4169			     MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0);
   4170
   4171	if (attn & AEU_INPUTS_ATTN_BITS_SPIO5) {
   4172
   4173		val = REG_RD(bp, reg_offset);
   4174		val &= ~AEU_INPUTS_ATTN_BITS_SPIO5;
   4175		REG_WR(bp, reg_offset, val);
   4176
   4177		BNX2X_ERR("SPIO5 hw attention\n");
   4178
   4179		/* Fan failure attention */
   4180		bnx2x_hw_reset_phy(&bp->link_params);
   4181		bnx2x_fan_failure(bp);
   4182	}
   4183
   4184	if ((attn & bp->link_vars.aeu_int_mask) && bp->port.pmf) {
   4185		bnx2x_acquire_phy_lock(bp);
   4186		bnx2x_handle_module_detect_int(&bp->link_params);
   4187		bnx2x_release_phy_lock(bp);
   4188	}
   4189
   4190	if (attn & HW_INTERRUPT_ASSERT_SET_0) {
   4191
   4192		val = REG_RD(bp, reg_offset);
   4193		val &= ~(attn & HW_INTERRUPT_ASSERT_SET_0);
   4194		REG_WR(bp, reg_offset, val);
   4195
   4196		BNX2X_ERR("FATAL HW block attention set0 0x%x\n",
   4197			  (u32)(attn & HW_INTERRUPT_ASSERT_SET_0));
   4198		bnx2x_panic();
   4199	}
   4200}
   4201
   4202static void bnx2x_attn_int_deasserted1(struct bnx2x *bp, u32 attn)
   4203{
   4204	u32 val;
   4205
   4206	if (attn & AEU_INPUTS_ATTN_BITS_DOORBELLQ_HW_INTERRUPT) {
   4207
   4208		val = REG_RD(bp, DORQ_REG_DORQ_INT_STS_CLR);
   4209		BNX2X_ERR("DB hw attention 0x%x\n", val);
   4210		/* DORQ discard attention */
   4211		if (val & 0x2)
   4212			BNX2X_ERR("FATAL error from DORQ\n");
   4213	}
   4214
   4215	if (attn & HW_INTERRUPT_ASSERT_SET_1) {
   4216
   4217		int port = BP_PORT(bp);
   4218		int reg_offset;
   4219
   4220		reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_1 :
   4221				     MISC_REG_AEU_ENABLE1_FUNC_0_OUT_1);
   4222
   4223		val = REG_RD(bp, reg_offset);
   4224		val &= ~(attn & HW_INTERRUPT_ASSERT_SET_1);
   4225		REG_WR(bp, reg_offset, val);
   4226
   4227		BNX2X_ERR("FATAL HW block attention set1 0x%x\n",
   4228			  (u32)(attn & HW_INTERRUPT_ASSERT_SET_1));
   4229		bnx2x_panic();
   4230	}
   4231}
   4232
   4233static void bnx2x_attn_int_deasserted2(struct bnx2x *bp, u32 attn)
   4234{
   4235	u32 val;
   4236
   4237	if (attn & AEU_INPUTS_ATTN_BITS_CFC_HW_INTERRUPT) {
   4238
   4239		val = REG_RD(bp, CFC_REG_CFC_INT_STS_CLR);
   4240		BNX2X_ERR("CFC hw attention 0x%x\n", val);
   4241		/* CFC error attention */
   4242		if (val & 0x2)
   4243			BNX2X_ERR("FATAL error from CFC\n");
   4244	}
   4245
   4246	if (attn & AEU_INPUTS_ATTN_BITS_PXP_HW_INTERRUPT) {
   4247		val = REG_RD(bp, PXP_REG_PXP_INT_STS_CLR_0);
   4248		BNX2X_ERR("PXP hw attention-0 0x%x\n", val);
   4249		/* RQ_USDMDP_FIFO_OVERFLOW */
   4250		if (val & 0x18000)
   4251			BNX2X_ERR("FATAL error from PXP\n");
   4252
   4253		if (!CHIP_IS_E1x(bp)) {
   4254			val = REG_RD(bp, PXP_REG_PXP_INT_STS_CLR_1);
   4255			BNX2X_ERR("PXP hw attention-1 0x%x\n", val);
   4256		}
   4257	}
   4258
   4259	if (attn & HW_INTERRUPT_ASSERT_SET_2) {
   4260
   4261		int port = BP_PORT(bp);
   4262		int reg_offset;
   4263
   4264		reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_2 :
   4265				     MISC_REG_AEU_ENABLE1_FUNC_0_OUT_2);
   4266
   4267		val = REG_RD(bp, reg_offset);
   4268		val &= ~(attn & HW_INTERRUPT_ASSERT_SET_2);
   4269		REG_WR(bp, reg_offset, val);
   4270
   4271		BNX2X_ERR("FATAL HW block attention set2 0x%x\n",
   4272			  (u32)(attn & HW_INTERRUPT_ASSERT_SET_2));
   4273		bnx2x_panic();
   4274	}
   4275}
   4276
   4277static void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
   4278{
   4279	u32 val;
   4280
   4281	if (attn & EVEREST_GEN_ATTN_IN_USE_MASK) {
   4282
   4283		if (attn & BNX2X_PMF_LINK_ASSERT) {
   4284			int func = BP_FUNC(bp);
   4285
   4286			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + func*4, 0);
   4287			bnx2x_read_mf_cfg(bp);
   4288			bp->mf_config[BP_VN(bp)] = MF_CFG_RD(bp,
   4289					func_mf_config[BP_ABS_FUNC(bp)].config);
   4290			val = SHMEM_RD(bp,
   4291				       func_mb[BP_FW_MB_IDX(bp)].drv_status);
   4292
   4293			if (val & (DRV_STATUS_DCC_EVENT_MASK |
   4294				   DRV_STATUS_OEM_EVENT_MASK))
   4295				bnx2x_oem_event(bp,
   4296					(val & (DRV_STATUS_DCC_EVENT_MASK |
   4297						DRV_STATUS_OEM_EVENT_MASK)));
   4298
   4299			if (val & DRV_STATUS_SET_MF_BW)
   4300				bnx2x_set_mf_bw(bp);
   4301
   4302			if (val & DRV_STATUS_DRV_INFO_REQ)
   4303				bnx2x_handle_drv_info_req(bp);
   4304
   4305			if (val & DRV_STATUS_VF_DISABLED)
   4306				bnx2x_schedule_iov_task(bp,
   4307							BNX2X_IOV_HANDLE_FLR);
   4308
   4309			if ((bp->port.pmf == 0) && (val & DRV_STATUS_PMF))
   4310				bnx2x_pmf_update(bp);
   4311
   4312			if (bp->port.pmf &&
   4313			    (val & DRV_STATUS_DCBX_NEGOTIATION_RESULTS) &&
   4314				bp->dcbx_enabled > 0)
   4315				/* start dcbx state machine */
   4316				bnx2x_dcbx_set_params(bp,
   4317					BNX2X_DCBX_STATE_NEG_RECEIVED);
   4318			if (val & DRV_STATUS_AFEX_EVENT_MASK)
   4319				bnx2x_handle_afex_cmd(bp,
   4320					val & DRV_STATUS_AFEX_EVENT_MASK);
   4321			if (val & DRV_STATUS_EEE_NEGOTIATION_RESULTS)
   4322				bnx2x_handle_eee_event(bp);
   4323
   4324			if (val & DRV_STATUS_OEM_UPDATE_SVID)
   4325				bnx2x_schedule_sp_rtnl(bp,
   4326					BNX2X_SP_RTNL_UPDATE_SVID, 0);
   4327
   4328			if (bp->link_vars.periodic_flags &
   4329			    PERIODIC_FLAGS_LINK_EVENT) {
   4330				/*  sync with link */
   4331				bnx2x_acquire_phy_lock(bp);
   4332				bp->link_vars.periodic_flags &=
   4333					~PERIODIC_FLAGS_LINK_EVENT;
   4334				bnx2x_release_phy_lock(bp);
   4335				if (IS_MF(bp))
   4336					bnx2x_link_sync_notify(bp);
   4337				bnx2x_link_report(bp);
   4338			}
   4339			/* Always call it here: bnx2x_link_report() will
   4340			 * prevent the link indication duplication.
   4341			 */
   4342			bnx2x__link_status_update(bp);
   4343		} else if (attn & BNX2X_MC_ASSERT_BITS) {
   4344
   4345			BNX2X_ERR("MC assert!\n");
   4346			bnx2x_mc_assert(bp);
   4347			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_10, 0);
   4348			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_9, 0);
   4349			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_8, 0);
   4350			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_7, 0);
   4351			bnx2x_panic();
   4352
   4353		} else if (attn & BNX2X_MCP_ASSERT) {
   4354
   4355			BNX2X_ERR("MCP assert!\n");
   4356			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_11, 0);
   4357			bnx2x_fw_dump(bp);
   4358
   4359		} else
   4360			BNX2X_ERR("Unknown HW assert! (attn 0x%x)\n", attn);
   4361	}
   4362
   4363	if (attn & EVEREST_LATCHED_ATTN_IN_USE_MASK) {
   4364		BNX2X_ERR("LATCHED attention 0x%08x (masked)\n", attn);
   4365		if (attn & BNX2X_GRC_TIMEOUT) {
   4366			val = CHIP_IS_E1(bp) ? 0 :
   4367					REG_RD(bp, MISC_REG_GRC_TIMEOUT_ATTN);
   4368			BNX2X_ERR("GRC time-out 0x%08x\n", val);
   4369		}
   4370		if (attn & BNX2X_GRC_RSV) {
   4371			val = CHIP_IS_E1(bp) ? 0 :
   4372					REG_RD(bp, MISC_REG_GRC_RSV_ATTN);
   4373			BNX2X_ERR("GRC reserved 0x%08x\n", val);
   4374		}
   4375		REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x7ff);
   4376	}
   4377}
   4378
   4379/*
   4380 * Bits map:
   4381 * 0-7   - Engine0 load counter.
   4382 * 8-15  - Engine1 load counter.
   4383 * 16    - Engine0 RESET_IN_PROGRESS bit.
   4384 * 17    - Engine1 RESET_IN_PROGRESS bit.
   4385 * 18    - Engine0 ONE_IS_LOADED. Set when there is at least one active function
   4386 *         on the engine
   4387 * 19    - Engine1 ONE_IS_LOADED.
   4388 * 20    - Chip reset flow bit. When set none-leader must wait for both engines
   4389 *         leader to complete (check for both RESET_IN_PROGRESS bits and not for
   4390 *         just the one belonging to its engine).
   4391 *
   4392 */
   4393#define BNX2X_RECOVERY_GLOB_REG		MISC_REG_GENERIC_POR_1
   4394
   4395#define BNX2X_PATH0_LOAD_CNT_MASK	0x000000ff
   4396#define BNX2X_PATH0_LOAD_CNT_SHIFT	0
   4397#define BNX2X_PATH1_LOAD_CNT_MASK	0x0000ff00
   4398#define BNX2X_PATH1_LOAD_CNT_SHIFT	8
   4399#define BNX2X_PATH0_RST_IN_PROG_BIT	0x00010000
   4400#define BNX2X_PATH1_RST_IN_PROG_BIT	0x00020000
   4401#define BNX2X_GLOBAL_RESET_BIT		0x00040000
   4402
   4403/*
   4404 * Set the GLOBAL_RESET bit.
   4405 *
   4406 * Should be run under rtnl lock
   4407 */
   4408void bnx2x_set_reset_global(struct bnx2x *bp)
   4409{
   4410	u32 val;
   4411	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4412	val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4413	REG_WR(bp, BNX2X_RECOVERY_GLOB_REG, val | BNX2X_GLOBAL_RESET_BIT);
   4414	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4415}
   4416
   4417/*
   4418 * Clear the GLOBAL_RESET bit.
   4419 *
   4420 * Should be run under rtnl lock
   4421 */
   4422static void bnx2x_clear_reset_global(struct bnx2x *bp)
   4423{
   4424	u32 val;
   4425	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4426	val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4427	REG_WR(bp, BNX2X_RECOVERY_GLOB_REG, val & (~BNX2X_GLOBAL_RESET_BIT));
   4428	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4429}
   4430
   4431/*
   4432 * Checks the GLOBAL_RESET bit.
   4433 *
   4434 * should be run under rtnl lock
   4435 */
   4436static bool bnx2x_reset_is_global(struct bnx2x *bp)
   4437{
   4438	u32 val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4439
   4440	DP(NETIF_MSG_HW, "GEN_REG_VAL=0x%08x\n", val);
   4441	return (val & BNX2X_GLOBAL_RESET_BIT) ? true : false;
   4442}
   4443
   4444/*
   4445 * Clear RESET_IN_PROGRESS bit for the current engine.
   4446 *
   4447 * Should be run under rtnl lock
   4448 */
   4449static void bnx2x_set_reset_done(struct bnx2x *bp)
   4450{
   4451	u32 val;
   4452	u32 bit = BP_PATH(bp) ?
   4453		BNX2X_PATH1_RST_IN_PROG_BIT : BNX2X_PATH0_RST_IN_PROG_BIT;
   4454	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4455	val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4456
   4457	/* Clear the bit */
   4458	val &= ~bit;
   4459	REG_WR(bp, BNX2X_RECOVERY_GLOB_REG, val);
   4460
   4461	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4462}
   4463
   4464/*
   4465 * Set RESET_IN_PROGRESS for the current engine.
   4466 *
   4467 * should be run under rtnl lock
   4468 */
   4469void bnx2x_set_reset_in_progress(struct bnx2x *bp)
   4470{
   4471	u32 val;
   4472	u32 bit = BP_PATH(bp) ?
   4473		BNX2X_PATH1_RST_IN_PROG_BIT : BNX2X_PATH0_RST_IN_PROG_BIT;
   4474	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4475	val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4476
   4477	/* Set the bit */
   4478	val |= bit;
   4479	REG_WR(bp, BNX2X_RECOVERY_GLOB_REG, val);
   4480	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4481}
   4482
   4483/*
   4484 * Checks the RESET_IN_PROGRESS bit for the given engine.
   4485 * should be run under rtnl lock
   4486 */
   4487bool bnx2x_reset_is_done(struct bnx2x *bp, int engine)
   4488{
   4489	u32 val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4490	u32 bit = engine ?
   4491		BNX2X_PATH1_RST_IN_PROG_BIT : BNX2X_PATH0_RST_IN_PROG_BIT;
   4492
   4493	/* return false if bit is set */
   4494	return (val & bit) ? false : true;
   4495}
   4496
   4497/*
   4498 * set pf load for the current pf.
   4499 *
   4500 * should be run under rtnl lock
   4501 */
   4502void bnx2x_set_pf_load(struct bnx2x *bp)
   4503{
   4504	u32 val1, val;
   4505	u32 mask = BP_PATH(bp) ? BNX2X_PATH1_LOAD_CNT_MASK :
   4506			     BNX2X_PATH0_LOAD_CNT_MASK;
   4507	u32 shift = BP_PATH(bp) ? BNX2X_PATH1_LOAD_CNT_SHIFT :
   4508			     BNX2X_PATH0_LOAD_CNT_SHIFT;
   4509
   4510	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4511	val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4512
   4513	DP(NETIF_MSG_IFUP, "Old GEN_REG_VAL=0x%08x\n", val);
   4514
   4515	/* get the current counter value */
   4516	val1 = (val & mask) >> shift;
   4517
   4518	/* set bit of that PF */
   4519	val1 |= (1 << bp->pf_num);
   4520
   4521	/* clear the old value */
   4522	val &= ~mask;
   4523
   4524	/* set the new one */
   4525	val |= ((val1 << shift) & mask);
   4526
   4527	REG_WR(bp, BNX2X_RECOVERY_GLOB_REG, val);
   4528	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4529}
   4530
   4531/**
   4532 * bnx2x_clear_pf_load - clear pf load mark
   4533 *
   4534 * @bp:		driver handle
   4535 *
   4536 * Should be run under rtnl lock.
   4537 * Decrements the load counter for the current engine. Returns
   4538 * whether other functions are still loaded
   4539 */
   4540bool bnx2x_clear_pf_load(struct bnx2x *bp)
   4541{
   4542	u32 val1, val;
   4543	u32 mask = BP_PATH(bp) ? BNX2X_PATH1_LOAD_CNT_MASK :
   4544			     BNX2X_PATH0_LOAD_CNT_MASK;
   4545	u32 shift = BP_PATH(bp) ? BNX2X_PATH1_LOAD_CNT_SHIFT :
   4546			     BNX2X_PATH0_LOAD_CNT_SHIFT;
   4547
   4548	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4549	val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4550	DP(NETIF_MSG_IFDOWN, "Old GEN_REG_VAL=0x%08x\n", val);
   4551
   4552	/* get the current counter value */
   4553	val1 = (val & mask) >> shift;
   4554
   4555	/* clear bit of that PF */
   4556	val1 &= ~(1 << bp->pf_num);
   4557
   4558	/* clear the old value */
   4559	val &= ~mask;
   4560
   4561	/* set the new one */
   4562	val |= ((val1 << shift) & mask);
   4563
   4564	REG_WR(bp, BNX2X_RECOVERY_GLOB_REG, val);
   4565	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RECOVERY_REG);
   4566	return val1 != 0;
   4567}
   4568
   4569/*
   4570 * Read the load status for the current engine.
   4571 *
   4572 * should be run under rtnl lock
   4573 */
   4574static bool bnx2x_get_load_status(struct bnx2x *bp, int engine)
   4575{
   4576	u32 mask = (engine ? BNX2X_PATH1_LOAD_CNT_MASK :
   4577			     BNX2X_PATH0_LOAD_CNT_MASK);
   4578	u32 shift = (engine ? BNX2X_PATH1_LOAD_CNT_SHIFT :
   4579			     BNX2X_PATH0_LOAD_CNT_SHIFT);
   4580	u32 val = REG_RD(bp, BNX2X_RECOVERY_GLOB_REG);
   4581
   4582	DP(NETIF_MSG_HW | NETIF_MSG_IFUP, "GLOB_REG=0x%08x\n", val);
   4583
   4584	val = (val & mask) >> shift;
   4585
   4586	DP(NETIF_MSG_HW | NETIF_MSG_IFUP, "load mask for engine %d = 0x%x\n",
   4587	   engine, val);
   4588
   4589	return val != 0;
   4590}
   4591
   4592static void _print_parity(struct bnx2x *bp, u32 reg)
   4593{
   4594	pr_cont(" [0x%08x] ", REG_RD(bp, reg));
   4595}
   4596
   4597static void _print_next_block(int idx, const char *blk)
   4598{
   4599	pr_cont("%s%s", idx ? ", " : "", blk);
   4600}
   4601
   4602static bool bnx2x_check_blocks_with_parity0(struct bnx2x *bp, u32 sig,
   4603					    int *par_num, bool print)
   4604{
   4605	u32 cur_bit;
   4606	bool res;
   4607	int i;
   4608
   4609	res = false;
   4610
   4611	for (i = 0; sig; i++) {
   4612		cur_bit = (0x1UL << i);
   4613		if (sig & cur_bit) {
   4614			res |= true; /* Each bit is real error! */
   4615
   4616			if (print) {
   4617				switch (cur_bit) {
   4618				case AEU_INPUTS_ATTN_BITS_BRB_PARITY_ERROR:
   4619					_print_next_block((*par_num)++, "BRB");
   4620					_print_parity(bp,
   4621						      BRB1_REG_BRB1_PRTY_STS);
   4622					break;
   4623				case AEU_INPUTS_ATTN_BITS_PARSER_PARITY_ERROR:
   4624					_print_next_block((*par_num)++,
   4625							  "PARSER");
   4626					_print_parity(bp, PRS_REG_PRS_PRTY_STS);
   4627					break;
   4628				case AEU_INPUTS_ATTN_BITS_TSDM_PARITY_ERROR:
   4629					_print_next_block((*par_num)++, "TSDM");
   4630					_print_parity(bp,
   4631						      TSDM_REG_TSDM_PRTY_STS);
   4632					break;
   4633				case AEU_INPUTS_ATTN_BITS_SEARCHER_PARITY_ERROR:
   4634					_print_next_block((*par_num)++,
   4635							  "SEARCHER");
   4636					_print_parity(bp, SRC_REG_SRC_PRTY_STS);
   4637					break;
   4638				case AEU_INPUTS_ATTN_BITS_TCM_PARITY_ERROR:
   4639					_print_next_block((*par_num)++, "TCM");
   4640					_print_parity(bp, TCM_REG_TCM_PRTY_STS);
   4641					break;
   4642				case AEU_INPUTS_ATTN_BITS_TSEMI_PARITY_ERROR:
   4643					_print_next_block((*par_num)++,
   4644							  "TSEMI");
   4645					_print_parity(bp,
   4646						      TSEM_REG_TSEM_PRTY_STS_0);
   4647					_print_parity(bp,
   4648						      TSEM_REG_TSEM_PRTY_STS_1);
   4649					break;
   4650				case AEU_INPUTS_ATTN_BITS_PBCLIENT_PARITY_ERROR:
   4651					_print_next_block((*par_num)++, "XPB");
   4652					_print_parity(bp, GRCBASE_XPB +
   4653							  PB_REG_PB_PRTY_STS);
   4654					break;
   4655				}
   4656			}
   4657
   4658			/* Clear the bit */
   4659			sig &= ~cur_bit;
   4660		}
   4661	}
   4662
   4663	return res;
   4664}
   4665
   4666static bool bnx2x_check_blocks_with_parity1(struct bnx2x *bp, u32 sig,
   4667					    int *par_num, bool *global,
   4668					    bool print)
   4669{
   4670	u32 cur_bit;
   4671	bool res;
   4672	int i;
   4673
   4674	res = false;
   4675
   4676	for (i = 0; sig; i++) {
   4677		cur_bit = (0x1UL << i);
   4678		if (sig & cur_bit) {
   4679			res |= true; /* Each bit is real error! */
   4680			switch (cur_bit) {
   4681			case AEU_INPUTS_ATTN_BITS_PBF_PARITY_ERROR:
   4682				if (print) {
   4683					_print_next_block((*par_num)++, "PBF");
   4684					_print_parity(bp, PBF_REG_PBF_PRTY_STS);
   4685				}
   4686				break;
   4687			case AEU_INPUTS_ATTN_BITS_QM_PARITY_ERROR:
   4688				if (print) {
   4689					_print_next_block((*par_num)++, "QM");
   4690					_print_parity(bp, QM_REG_QM_PRTY_STS);
   4691				}
   4692				break;
   4693			case AEU_INPUTS_ATTN_BITS_TIMERS_PARITY_ERROR:
   4694				if (print) {
   4695					_print_next_block((*par_num)++, "TM");
   4696					_print_parity(bp, TM_REG_TM_PRTY_STS);
   4697				}
   4698				break;
   4699			case AEU_INPUTS_ATTN_BITS_XSDM_PARITY_ERROR:
   4700				if (print) {
   4701					_print_next_block((*par_num)++, "XSDM");
   4702					_print_parity(bp,
   4703						      XSDM_REG_XSDM_PRTY_STS);
   4704				}
   4705				break;
   4706			case AEU_INPUTS_ATTN_BITS_XCM_PARITY_ERROR:
   4707				if (print) {
   4708					_print_next_block((*par_num)++, "XCM");
   4709					_print_parity(bp, XCM_REG_XCM_PRTY_STS);
   4710				}
   4711				break;
   4712			case AEU_INPUTS_ATTN_BITS_XSEMI_PARITY_ERROR:
   4713				if (print) {
   4714					_print_next_block((*par_num)++,
   4715							  "XSEMI");
   4716					_print_parity(bp,
   4717						      XSEM_REG_XSEM_PRTY_STS_0);
   4718					_print_parity(bp,
   4719						      XSEM_REG_XSEM_PRTY_STS_1);
   4720				}
   4721				break;
   4722			case AEU_INPUTS_ATTN_BITS_DOORBELLQ_PARITY_ERROR:
   4723				if (print) {
   4724					_print_next_block((*par_num)++,
   4725							  "DOORBELLQ");
   4726					_print_parity(bp,
   4727						      DORQ_REG_DORQ_PRTY_STS);
   4728				}
   4729				break;
   4730			case AEU_INPUTS_ATTN_BITS_NIG_PARITY_ERROR:
   4731				if (print) {
   4732					_print_next_block((*par_num)++, "NIG");
   4733					if (CHIP_IS_E1x(bp)) {
   4734						_print_parity(bp,
   4735							NIG_REG_NIG_PRTY_STS);
   4736					} else {
   4737						_print_parity(bp,
   4738							NIG_REG_NIG_PRTY_STS_0);
   4739						_print_parity(bp,
   4740							NIG_REG_NIG_PRTY_STS_1);
   4741					}
   4742				}
   4743				break;
   4744			case AEU_INPUTS_ATTN_BITS_VAUX_PCI_CORE_PARITY_ERROR:
   4745				if (print)
   4746					_print_next_block((*par_num)++,
   4747							  "VAUX PCI CORE");
   4748				*global = true;
   4749				break;
   4750			case AEU_INPUTS_ATTN_BITS_DEBUG_PARITY_ERROR:
   4751				if (print) {
   4752					_print_next_block((*par_num)++,
   4753							  "DEBUG");
   4754					_print_parity(bp, DBG_REG_DBG_PRTY_STS);
   4755				}
   4756				break;
   4757			case AEU_INPUTS_ATTN_BITS_USDM_PARITY_ERROR:
   4758				if (print) {
   4759					_print_next_block((*par_num)++, "USDM");
   4760					_print_parity(bp,
   4761						      USDM_REG_USDM_PRTY_STS);
   4762				}
   4763				break;
   4764			case AEU_INPUTS_ATTN_BITS_UCM_PARITY_ERROR:
   4765				if (print) {
   4766					_print_next_block((*par_num)++, "UCM");
   4767					_print_parity(bp, UCM_REG_UCM_PRTY_STS);
   4768				}
   4769				break;
   4770			case AEU_INPUTS_ATTN_BITS_USEMI_PARITY_ERROR:
   4771				if (print) {
   4772					_print_next_block((*par_num)++,
   4773							  "USEMI");
   4774					_print_parity(bp,
   4775						      USEM_REG_USEM_PRTY_STS_0);
   4776					_print_parity(bp,
   4777						      USEM_REG_USEM_PRTY_STS_1);
   4778				}
   4779				break;
   4780			case AEU_INPUTS_ATTN_BITS_UPB_PARITY_ERROR:
   4781				if (print) {
   4782					_print_next_block((*par_num)++, "UPB");
   4783					_print_parity(bp, GRCBASE_UPB +
   4784							  PB_REG_PB_PRTY_STS);
   4785				}
   4786				break;
   4787			case AEU_INPUTS_ATTN_BITS_CSDM_PARITY_ERROR:
   4788				if (print) {
   4789					_print_next_block((*par_num)++, "CSDM");
   4790					_print_parity(bp,
   4791						      CSDM_REG_CSDM_PRTY_STS);
   4792				}
   4793				break;
   4794			case AEU_INPUTS_ATTN_BITS_CCM_PARITY_ERROR:
   4795				if (print) {
   4796					_print_next_block((*par_num)++, "CCM");
   4797					_print_parity(bp, CCM_REG_CCM_PRTY_STS);
   4798				}
   4799				break;
   4800			}
   4801
   4802			/* Clear the bit */
   4803			sig &= ~cur_bit;
   4804		}
   4805	}
   4806
   4807	return res;
   4808}
   4809
   4810static bool bnx2x_check_blocks_with_parity2(struct bnx2x *bp, u32 sig,
   4811					    int *par_num, bool print)
   4812{
   4813	u32 cur_bit;
   4814	bool res;
   4815	int i;
   4816
   4817	res = false;
   4818
   4819	for (i = 0; sig; i++) {
   4820		cur_bit = (0x1UL << i);
   4821		if (sig & cur_bit) {
   4822			res = true; /* Each bit is real error! */
   4823			if (print) {
   4824				switch (cur_bit) {
   4825				case AEU_INPUTS_ATTN_BITS_CSEMI_PARITY_ERROR:
   4826					_print_next_block((*par_num)++,
   4827							  "CSEMI");
   4828					_print_parity(bp,
   4829						      CSEM_REG_CSEM_PRTY_STS_0);
   4830					_print_parity(bp,
   4831						      CSEM_REG_CSEM_PRTY_STS_1);
   4832					break;
   4833				case AEU_INPUTS_ATTN_BITS_PXP_PARITY_ERROR:
   4834					_print_next_block((*par_num)++, "PXP");
   4835					_print_parity(bp, PXP_REG_PXP_PRTY_STS);
   4836					_print_parity(bp,
   4837						      PXP2_REG_PXP2_PRTY_STS_0);
   4838					_print_parity(bp,
   4839						      PXP2_REG_PXP2_PRTY_STS_1);
   4840					break;
   4841				case AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR:
   4842					_print_next_block((*par_num)++,
   4843							  "PXPPCICLOCKCLIENT");
   4844					break;
   4845				case AEU_INPUTS_ATTN_BITS_CFC_PARITY_ERROR:
   4846					_print_next_block((*par_num)++, "CFC");
   4847					_print_parity(bp,
   4848						      CFC_REG_CFC_PRTY_STS);
   4849					break;
   4850				case AEU_INPUTS_ATTN_BITS_CDU_PARITY_ERROR:
   4851					_print_next_block((*par_num)++, "CDU");
   4852					_print_parity(bp, CDU_REG_CDU_PRTY_STS);
   4853					break;
   4854				case AEU_INPUTS_ATTN_BITS_DMAE_PARITY_ERROR:
   4855					_print_next_block((*par_num)++, "DMAE");
   4856					_print_parity(bp,
   4857						      DMAE_REG_DMAE_PRTY_STS);
   4858					break;
   4859				case AEU_INPUTS_ATTN_BITS_IGU_PARITY_ERROR:
   4860					_print_next_block((*par_num)++, "IGU");
   4861					if (CHIP_IS_E1x(bp))
   4862						_print_parity(bp,
   4863							HC_REG_HC_PRTY_STS);
   4864					else
   4865						_print_parity(bp,
   4866							IGU_REG_IGU_PRTY_STS);
   4867					break;
   4868				case AEU_INPUTS_ATTN_BITS_MISC_PARITY_ERROR:
   4869					_print_next_block((*par_num)++, "MISC");
   4870					_print_parity(bp,
   4871						      MISC_REG_MISC_PRTY_STS);
   4872					break;
   4873				}
   4874			}
   4875
   4876			/* Clear the bit */
   4877			sig &= ~cur_bit;
   4878		}
   4879	}
   4880
   4881	return res;
   4882}
   4883
   4884static bool bnx2x_check_blocks_with_parity3(struct bnx2x *bp, u32 sig,
   4885					    int *par_num, bool *global,
   4886					    bool print)
   4887{
   4888	bool res = false;
   4889	u32 cur_bit;
   4890	int i;
   4891
   4892	for (i = 0; sig; i++) {
   4893		cur_bit = (0x1UL << i);
   4894		if (sig & cur_bit) {
   4895			switch (cur_bit) {
   4896			case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY:
   4897				if (print)
   4898					_print_next_block((*par_num)++,
   4899							  "MCP ROM");
   4900				*global = true;
   4901				res = true;
   4902				break;
   4903			case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY:
   4904				if (print)
   4905					_print_next_block((*par_num)++,
   4906							  "MCP UMP RX");
   4907				*global = true;
   4908				res = true;
   4909				break;
   4910			case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY:
   4911				if (print)
   4912					_print_next_block((*par_num)++,
   4913							  "MCP UMP TX");
   4914				*global = true;
   4915				res = true;
   4916				break;
   4917			case AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY:
   4918				(*par_num)++;
   4919				/* clear latched SCPAD PATIRY from MCP */
   4920				REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL,
   4921				       1UL << 10);
   4922				break;
   4923			}
   4924
   4925			/* Clear the bit */
   4926			sig &= ~cur_bit;
   4927		}
   4928	}
   4929
   4930	return res;
   4931}
   4932
   4933static bool bnx2x_check_blocks_with_parity4(struct bnx2x *bp, u32 sig,
   4934					    int *par_num, bool print)
   4935{
   4936	u32 cur_bit;
   4937	bool res;
   4938	int i;
   4939
   4940	res = false;
   4941
   4942	for (i = 0; sig; i++) {
   4943		cur_bit = (0x1UL << i);
   4944		if (sig & cur_bit) {
   4945			res = true; /* Each bit is real error! */
   4946			if (print) {
   4947				switch (cur_bit) {
   4948				case AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR:
   4949					_print_next_block((*par_num)++,
   4950							  "PGLUE_B");
   4951					_print_parity(bp,
   4952						      PGLUE_B_REG_PGLUE_B_PRTY_STS);
   4953					break;
   4954				case AEU_INPUTS_ATTN_BITS_ATC_PARITY_ERROR:
   4955					_print_next_block((*par_num)++, "ATC");
   4956					_print_parity(bp,
   4957						      ATC_REG_ATC_PRTY_STS);
   4958					break;
   4959				}
   4960			}
   4961			/* Clear the bit */
   4962			sig &= ~cur_bit;
   4963		}
   4964	}
   4965
   4966	return res;
   4967}
   4968
   4969static bool bnx2x_parity_attn(struct bnx2x *bp, bool *global, bool print,
   4970			      u32 *sig)
   4971{
   4972	bool res = false;
   4973
   4974	if ((sig[0] & HW_PRTY_ASSERT_SET_0) ||
   4975	    (sig[1] & HW_PRTY_ASSERT_SET_1) ||
   4976	    (sig[2] & HW_PRTY_ASSERT_SET_2) ||
   4977	    (sig[3] & HW_PRTY_ASSERT_SET_3) ||
   4978	    (sig[4] & HW_PRTY_ASSERT_SET_4)) {
   4979		int par_num = 0;
   4980
   4981		DP(NETIF_MSG_HW, "Was parity error: HW block parity attention:\n"
   4982				 "[0]:0x%08x [1]:0x%08x [2]:0x%08x [3]:0x%08x [4]:0x%08x\n",
   4983			  sig[0] & HW_PRTY_ASSERT_SET_0,
   4984			  sig[1] & HW_PRTY_ASSERT_SET_1,
   4985			  sig[2] & HW_PRTY_ASSERT_SET_2,
   4986			  sig[3] & HW_PRTY_ASSERT_SET_3,
   4987			  sig[4] & HW_PRTY_ASSERT_SET_4);
   4988		if (print) {
   4989			if (((sig[0] & HW_PRTY_ASSERT_SET_0) ||
   4990			     (sig[1] & HW_PRTY_ASSERT_SET_1) ||
   4991			     (sig[2] & HW_PRTY_ASSERT_SET_2) ||
   4992			     (sig[4] & HW_PRTY_ASSERT_SET_4)) ||
   4993			     (sig[3] & HW_PRTY_ASSERT_SET_3_WITHOUT_SCPAD)) {
   4994				netdev_err(bp->dev,
   4995					   "Parity errors detected in blocks: ");
   4996			} else {
   4997				print = false;
   4998			}
   4999		}
   5000		res |= bnx2x_check_blocks_with_parity0(bp,
   5001			sig[0] & HW_PRTY_ASSERT_SET_0, &par_num, print);
   5002		res |= bnx2x_check_blocks_with_parity1(bp,
   5003			sig[1] & HW_PRTY_ASSERT_SET_1, &par_num, global, print);
   5004		res |= bnx2x_check_blocks_with_parity2(bp,
   5005			sig[2] & HW_PRTY_ASSERT_SET_2, &par_num, print);
   5006		res |= bnx2x_check_blocks_with_parity3(bp,
   5007			sig[3] & HW_PRTY_ASSERT_SET_3, &par_num, global, print);
   5008		res |= bnx2x_check_blocks_with_parity4(bp,
   5009			sig[4] & HW_PRTY_ASSERT_SET_4, &par_num, print);
   5010
   5011		if (print)
   5012			pr_cont("\n");
   5013	}
   5014
   5015	return res;
   5016}
   5017
   5018/**
   5019 * bnx2x_chk_parity_attn - checks for parity attentions.
   5020 *
   5021 * @bp:		driver handle
   5022 * @global:	true if there was a global attention
   5023 * @print:	show parity attention in syslog
   5024 */
   5025bool bnx2x_chk_parity_attn(struct bnx2x *bp, bool *global, bool print)
   5026{
   5027	struct attn_route attn = { {0} };
   5028	int port = BP_PORT(bp);
   5029
   5030	attn.sig[0] = REG_RD(bp,
   5031		MISC_REG_AEU_AFTER_INVERT_1_FUNC_0 +
   5032			     port*4);
   5033	attn.sig[1] = REG_RD(bp,
   5034		MISC_REG_AEU_AFTER_INVERT_2_FUNC_0 +
   5035			     port*4);
   5036	attn.sig[2] = REG_RD(bp,
   5037		MISC_REG_AEU_AFTER_INVERT_3_FUNC_0 +
   5038			     port*4);
   5039	attn.sig[3] = REG_RD(bp,
   5040		MISC_REG_AEU_AFTER_INVERT_4_FUNC_0 +
   5041			     port*4);
   5042	/* Since MCP attentions can't be disabled inside the block, we need to
   5043	 * read AEU registers to see whether they're currently disabled
   5044	 */
   5045	attn.sig[3] &= ((REG_RD(bp,
   5046				!port ? MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0
   5047				      : MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0) &
   5048			 MISC_AEU_ENABLE_MCP_PRTY_BITS) |
   5049			~MISC_AEU_ENABLE_MCP_PRTY_BITS);
   5050
   5051	if (!CHIP_IS_E1x(bp))
   5052		attn.sig[4] = REG_RD(bp,
   5053			MISC_REG_AEU_AFTER_INVERT_5_FUNC_0 +
   5054				     port*4);
   5055
   5056	return bnx2x_parity_attn(bp, global, print, attn.sig);
   5057}
   5058
   5059static void bnx2x_attn_int_deasserted4(struct bnx2x *bp, u32 attn)
   5060{
   5061	u32 val;
   5062	if (attn & AEU_INPUTS_ATTN_BITS_PGLUE_HW_INTERRUPT) {
   5063
   5064		val = REG_RD(bp, PGLUE_B_REG_PGLUE_B_INT_STS_CLR);
   5065		BNX2X_ERR("PGLUE hw attention 0x%x\n", val);
   5066		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_ADDRESS_ERROR)
   5067			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_ADDRESS_ERROR\n");
   5068		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_INCORRECT_RCV_BEHAVIOR)
   5069			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_INCORRECT_RCV_BEHAVIOR\n");
   5070		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_WAS_ERROR_ATTN)
   5071			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_WAS_ERROR_ATTN\n");
   5072		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_VF_LENGTH_VIOLATION_ATTN)
   5073			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_VF_LENGTH_VIOLATION_ATTN\n");
   5074		if (val &
   5075		    PGLUE_B_PGLUE_B_INT_STS_REG_VF_GRC_SPACE_VIOLATION_ATTN)
   5076			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_VF_GRC_SPACE_VIOLATION_ATTN\n");
   5077		if (val &
   5078		    PGLUE_B_PGLUE_B_INT_STS_REG_VF_MSIX_BAR_VIOLATION_ATTN)
   5079			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_VF_MSIX_BAR_VIOLATION_ATTN\n");
   5080		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_ERROR_ATTN)
   5081			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_ERROR_ATTN\n");
   5082		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_IN_TWO_RCBS_ATTN)
   5083			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_IN_TWO_RCBS_ATTN\n");
   5084		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_CSSNOOP_FIFO_OVERFLOW)
   5085			BNX2X_ERR("PGLUE_B_PGLUE_B_INT_STS_REG_CSSNOOP_FIFO_OVERFLOW\n");
   5086	}
   5087	if (attn & AEU_INPUTS_ATTN_BITS_ATC_HW_INTERRUPT) {
   5088		val = REG_RD(bp, ATC_REG_ATC_INT_STS_CLR);
   5089		BNX2X_ERR("ATC hw attention 0x%x\n", val);
   5090		if (val & ATC_ATC_INT_STS_REG_ADDRESS_ERROR)
   5091			BNX2X_ERR("ATC_ATC_INT_STS_REG_ADDRESS_ERROR\n");
   5092		if (val & ATC_ATC_INT_STS_REG_ATC_TCPL_TO_NOT_PEND)
   5093			BNX2X_ERR("ATC_ATC_INT_STS_REG_ATC_TCPL_TO_NOT_PEND\n");
   5094		if (val & ATC_ATC_INT_STS_REG_ATC_GPA_MULTIPLE_HITS)
   5095			BNX2X_ERR("ATC_ATC_INT_STS_REG_ATC_GPA_MULTIPLE_HITS\n");
   5096		if (val & ATC_ATC_INT_STS_REG_ATC_RCPL_TO_EMPTY_CNT)
   5097			BNX2X_ERR("ATC_ATC_INT_STS_REG_ATC_RCPL_TO_EMPTY_CNT\n");
   5098		if (val & ATC_ATC_INT_STS_REG_ATC_TCPL_ERROR)
   5099			BNX2X_ERR("ATC_ATC_INT_STS_REG_ATC_TCPL_ERROR\n");
   5100		if (val & ATC_ATC_INT_STS_REG_ATC_IREQ_LESS_THAN_STU)
   5101			BNX2X_ERR("ATC_ATC_INT_STS_REG_ATC_IREQ_LESS_THAN_STU\n");
   5102	}
   5103
   5104	if (attn & (AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR |
   5105		    AEU_INPUTS_ATTN_BITS_ATC_PARITY_ERROR)) {
   5106		BNX2X_ERR("FATAL parity attention set4 0x%x\n",
   5107		(u32)(attn & (AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR |
   5108		    AEU_INPUTS_ATTN_BITS_ATC_PARITY_ERROR)));
   5109	}
   5110}
   5111
   5112static void bnx2x_attn_int_deasserted(struct bnx2x *bp, u32 deasserted)
   5113{
   5114	struct attn_route attn, *group_mask;
   5115	int port = BP_PORT(bp);
   5116	int index;
   5117	u32 reg_addr;
   5118	u32 val;
   5119	u32 aeu_mask;
   5120	bool global = false;
   5121
   5122	/* need to take HW lock because MCP or other port might also
   5123	   try to handle this event */
   5124	bnx2x_acquire_alr(bp);
   5125
   5126	if (bnx2x_chk_parity_attn(bp, &global, true)) {
   5127#ifndef BNX2X_STOP_ON_ERROR
   5128		bp->recovery_state = BNX2X_RECOVERY_INIT;
   5129		schedule_delayed_work(&bp->sp_rtnl_task, 0);
   5130		/* Disable HW interrupts */
   5131		bnx2x_int_disable(bp);
   5132		/* In case of parity errors don't handle attentions so that
   5133		 * other function would "see" parity errors.
   5134		 */
   5135#else
   5136		bnx2x_panic();
   5137#endif
   5138		bnx2x_release_alr(bp);
   5139		return;
   5140	}
   5141
   5142	attn.sig[0] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_1_FUNC_0 + port*4);
   5143	attn.sig[1] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_2_FUNC_0 + port*4);
   5144	attn.sig[2] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_3_FUNC_0 + port*4);
   5145	attn.sig[3] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_4_FUNC_0 + port*4);
   5146	if (!CHIP_IS_E1x(bp))
   5147		attn.sig[4] =
   5148		      REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_5_FUNC_0 + port*4);
   5149	else
   5150		attn.sig[4] = 0;
   5151
   5152	DP(NETIF_MSG_HW, "attn: %08x %08x %08x %08x %08x\n",
   5153	   attn.sig[0], attn.sig[1], attn.sig[2], attn.sig[3], attn.sig[4]);
   5154
   5155	for (index = 0; index < MAX_DYNAMIC_ATTN_GRPS; index++) {
   5156		if (deasserted & (1 << index)) {
   5157			group_mask = &bp->attn_group[index];
   5158
   5159			DP(NETIF_MSG_HW, "group[%d]: %08x %08x %08x %08x %08x\n",
   5160			   index,
   5161			   group_mask->sig[0], group_mask->sig[1],
   5162			   group_mask->sig[2], group_mask->sig[3],
   5163			   group_mask->sig[4]);
   5164
   5165			bnx2x_attn_int_deasserted4(bp,
   5166					attn.sig[4] & group_mask->sig[4]);
   5167			bnx2x_attn_int_deasserted3(bp,
   5168					attn.sig[3] & group_mask->sig[3]);
   5169			bnx2x_attn_int_deasserted1(bp,
   5170					attn.sig[1] & group_mask->sig[1]);
   5171			bnx2x_attn_int_deasserted2(bp,
   5172					attn.sig[2] & group_mask->sig[2]);
   5173			bnx2x_attn_int_deasserted0(bp,
   5174					attn.sig[0] & group_mask->sig[0]);
   5175		}
   5176	}
   5177
   5178	bnx2x_release_alr(bp);
   5179
   5180	if (bp->common.int_block == INT_BLOCK_HC)
   5181		reg_addr = (HC_REG_COMMAND_REG + port*32 +
   5182			    COMMAND_REG_ATTN_BITS_CLR);
   5183	else
   5184		reg_addr = (BAR_IGU_INTMEM + IGU_CMD_ATTN_BIT_CLR_UPPER*8);
   5185
   5186	val = ~deasserted;
   5187	DP(NETIF_MSG_HW, "about to mask 0x%08x at %s addr 0x%x\n", val,
   5188	   (bp->common.int_block == INT_BLOCK_HC) ? "HC" : "IGU", reg_addr);
   5189	REG_WR(bp, reg_addr, val);
   5190
   5191	if (~bp->attn_state & deasserted)
   5192		BNX2X_ERR("IGU ERROR\n");
   5193
   5194	reg_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 :
   5195			  MISC_REG_AEU_MASK_ATTN_FUNC_0;
   5196
   5197	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port);
   5198	aeu_mask = REG_RD(bp, reg_addr);
   5199
   5200	DP(NETIF_MSG_HW, "aeu_mask %x  newly deasserted %x\n",
   5201	   aeu_mask, deasserted);
   5202	aeu_mask |= (deasserted & 0x3ff);
   5203	DP(NETIF_MSG_HW, "new mask %x\n", aeu_mask);
   5204
   5205	REG_WR(bp, reg_addr, aeu_mask);
   5206	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port);
   5207
   5208	DP(NETIF_MSG_HW, "attn_state %x\n", bp->attn_state);
   5209	bp->attn_state &= ~deasserted;
   5210	DP(NETIF_MSG_HW, "new state %x\n", bp->attn_state);
   5211}
   5212
   5213static void bnx2x_attn_int(struct bnx2x *bp)
   5214{
   5215	/* read local copy of bits */
   5216	u32 attn_bits = le32_to_cpu(bp->def_status_blk->atten_status_block.
   5217								attn_bits);
   5218	u32 attn_ack = le32_to_cpu(bp->def_status_blk->atten_status_block.
   5219								attn_bits_ack);
   5220	u32 attn_state = bp->attn_state;
   5221
   5222	/* look for changed bits */
   5223	u32 asserted   =  attn_bits & ~attn_ack & ~attn_state;
   5224	u32 deasserted = ~attn_bits &  attn_ack &  attn_state;
   5225
   5226	DP(NETIF_MSG_HW,
   5227	   "attn_bits %x  attn_ack %x  asserted %x  deasserted %x\n",
   5228	   attn_bits, attn_ack, asserted, deasserted);
   5229
   5230	if (~(attn_bits ^ attn_ack) & (attn_bits ^ attn_state))
   5231		BNX2X_ERR("BAD attention state\n");
   5232
   5233	/* handle bits that were raised */
   5234	if (asserted)
   5235		bnx2x_attn_int_asserted(bp, asserted);
   5236
   5237	if (deasserted)
   5238		bnx2x_attn_int_deasserted(bp, deasserted);
   5239}
   5240
   5241void bnx2x_igu_ack_sb(struct bnx2x *bp, u8 igu_sb_id, u8 segment,
   5242		      u16 index, u8 op, u8 update)
   5243{
   5244	u32 igu_addr = bp->igu_base_addr;
   5245	igu_addr += (IGU_CMD_INT_ACK_BASE + igu_sb_id)*8;
   5246	bnx2x_igu_ack_sb_gen(bp, igu_sb_id, segment, index, op, update,
   5247			     igu_addr);
   5248}
   5249
   5250static void bnx2x_update_eq_prod(struct bnx2x *bp, u16 prod)
   5251{
   5252	/* No memory barriers */
   5253	storm_memset_eq_prod(bp, prod, BP_FUNC(bp));
   5254}
   5255
   5256static int  bnx2x_cnic_handle_cfc_del(struct bnx2x *bp, u32 cid,
   5257				      union event_ring_elem *elem)
   5258{
   5259	u8 err = elem->message.error;
   5260
   5261	if (!bp->cnic_eth_dev.starting_cid  ||
   5262	    (cid < bp->cnic_eth_dev.starting_cid &&
   5263	    cid != bp->cnic_eth_dev.iscsi_l2_cid))
   5264		return 1;
   5265
   5266	DP(BNX2X_MSG_SP, "got delete ramrod for CNIC CID %d\n", cid);
   5267
   5268	if (unlikely(err)) {
   5269
   5270		BNX2X_ERR("got delete ramrod for CNIC CID %d with error!\n",
   5271			  cid);
   5272		bnx2x_panic_dump(bp, false);
   5273	}
   5274	bnx2x_cnic_cfc_comp(bp, cid, err);
   5275	return 0;
   5276}
   5277
   5278static void bnx2x_handle_mcast_eqe(struct bnx2x *bp)
   5279{
   5280	struct bnx2x_mcast_ramrod_params rparam;
   5281	int rc;
   5282
   5283	memset(&rparam, 0, sizeof(rparam));
   5284
   5285	rparam.mcast_obj = &bp->mcast_obj;
   5286
   5287	netif_addr_lock_bh(bp->dev);
   5288
   5289	/* Clear pending state for the last command */
   5290	bp->mcast_obj.raw.clear_pending(&bp->mcast_obj.raw);
   5291
   5292	/* If there are pending mcast commands - send them */
   5293	if (bp->mcast_obj.check_pending(&bp->mcast_obj)) {
   5294		rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT);
   5295		if (rc < 0)
   5296			BNX2X_ERR("Failed to send pending mcast commands: %d\n",
   5297				  rc);
   5298	}
   5299
   5300	netif_addr_unlock_bh(bp->dev);
   5301}
   5302
   5303static void bnx2x_handle_classification_eqe(struct bnx2x *bp,
   5304					    union event_ring_elem *elem)
   5305{
   5306	unsigned long ramrod_flags = 0;
   5307	int rc = 0;
   5308	u32 echo = le32_to_cpu(elem->message.data.eth_event.echo);
   5309	u32 cid = echo & BNX2X_SWCID_MASK;
   5310	struct bnx2x_vlan_mac_obj *vlan_mac_obj;
   5311
   5312	/* Always push next commands out, don't wait here */
   5313	__set_bit(RAMROD_CONT, &ramrod_flags);
   5314
   5315	switch (echo >> BNX2X_SWCID_SHIFT) {
   5316	case BNX2X_FILTER_MAC_PENDING:
   5317		DP(BNX2X_MSG_SP, "Got SETUP_MAC completions\n");
   5318		if (CNIC_LOADED(bp) && (cid == BNX2X_ISCSI_ETH_CID(bp)))
   5319			vlan_mac_obj = &bp->iscsi_l2_mac_obj;
   5320		else
   5321			vlan_mac_obj = &bp->sp_objs[cid].mac_obj;
   5322
   5323		break;
   5324	case BNX2X_FILTER_VLAN_PENDING:
   5325		DP(BNX2X_MSG_SP, "Got SETUP_VLAN completions\n");
   5326		vlan_mac_obj = &bp->sp_objs[cid].vlan_obj;
   5327		break;
   5328	case BNX2X_FILTER_MCAST_PENDING:
   5329		DP(BNX2X_MSG_SP, "Got SETUP_MCAST completions\n");
   5330		/* This is only relevant for 57710 where multicast MACs are
   5331		 * configured as unicast MACs using the same ramrod.
   5332		 */
   5333		bnx2x_handle_mcast_eqe(bp);
   5334		return;
   5335	default:
   5336		BNX2X_ERR("Unsupported classification command: 0x%x\n", echo);
   5337		return;
   5338	}
   5339
   5340	rc = vlan_mac_obj->complete(bp, vlan_mac_obj, elem, &ramrod_flags);
   5341
   5342	if (rc < 0)
   5343		BNX2X_ERR("Failed to schedule new commands: %d\n", rc);
   5344	else if (rc > 0)
   5345		DP(BNX2X_MSG_SP, "Scheduled next pending commands...\n");
   5346}
   5347
   5348static void bnx2x_set_iscsi_eth_rx_mode(struct bnx2x *bp, bool start);
   5349
   5350static void bnx2x_handle_rx_mode_eqe(struct bnx2x *bp)
   5351{
   5352	netif_addr_lock_bh(bp->dev);
   5353
   5354	clear_bit(BNX2X_FILTER_RX_MODE_PENDING, &bp->sp_state);
   5355
   5356	/* Send rx_mode command again if was requested */
   5357	if (test_and_clear_bit(BNX2X_FILTER_RX_MODE_SCHED, &bp->sp_state))
   5358		bnx2x_set_storm_rx_mode(bp);
   5359	else if (test_and_clear_bit(BNX2X_FILTER_ISCSI_ETH_START_SCHED,
   5360				    &bp->sp_state))
   5361		bnx2x_set_iscsi_eth_rx_mode(bp, true);
   5362	else if (test_and_clear_bit(BNX2X_FILTER_ISCSI_ETH_STOP_SCHED,
   5363				    &bp->sp_state))
   5364		bnx2x_set_iscsi_eth_rx_mode(bp, false);
   5365
   5366	netif_addr_unlock_bh(bp->dev);
   5367}
   5368
   5369static void bnx2x_after_afex_vif_lists(struct bnx2x *bp,
   5370					      union event_ring_elem *elem)
   5371{
   5372	if (elem->message.data.vif_list_event.echo == VIF_LIST_RULE_GET) {
   5373		DP(BNX2X_MSG_SP,
   5374		   "afex: ramrod completed VIF LIST_GET, addrs 0x%x\n",
   5375		   elem->message.data.vif_list_event.func_bit_map);
   5376		bnx2x_fw_command(bp, DRV_MSG_CODE_AFEX_LISTGET_ACK,
   5377			elem->message.data.vif_list_event.func_bit_map);
   5378	} else if (elem->message.data.vif_list_event.echo ==
   5379		   VIF_LIST_RULE_SET) {
   5380		DP(BNX2X_MSG_SP, "afex: ramrod completed VIF LIST_SET\n");
   5381		bnx2x_fw_command(bp, DRV_MSG_CODE_AFEX_LISTSET_ACK, 0);
   5382	}
   5383}
   5384
   5385/* called with rtnl_lock */
   5386static void bnx2x_after_function_update(struct bnx2x *bp)
   5387{
   5388	int q, rc;
   5389	struct bnx2x_fastpath *fp;
   5390	struct bnx2x_queue_state_params queue_params = {NULL};
   5391	struct bnx2x_queue_update_params *q_update_params =
   5392		&queue_params.params.update;
   5393
   5394	/* Send Q update command with afex vlan removal values for all Qs */
   5395	queue_params.cmd = BNX2X_Q_CMD_UPDATE;
   5396
   5397	/* set silent vlan removal values according to vlan mode */
   5398	__set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM_CHNG,
   5399		  &q_update_params->update_flags);
   5400	__set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
   5401		  &q_update_params->update_flags);
   5402	__set_bit(RAMROD_COMP_WAIT, &queue_params.ramrod_flags);
   5403
   5404	/* in access mode mark mask and value are 0 to strip all vlans */
   5405	if (bp->afex_vlan_mode == FUNC_MF_CFG_AFEX_VLAN_ACCESS_MODE) {
   5406		q_update_params->silent_removal_value = 0;
   5407		q_update_params->silent_removal_mask = 0;
   5408	} else {
   5409		q_update_params->silent_removal_value =
   5410			(bp->afex_def_vlan_tag & VLAN_VID_MASK);
   5411		q_update_params->silent_removal_mask = VLAN_VID_MASK;
   5412	}
   5413
   5414	for_each_eth_queue(bp, q) {
   5415		/* Set the appropriate Queue object */
   5416		fp = &bp->fp[q];
   5417		queue_params.q_obj = &bnx2x_sp_obj(bp, fp).q_obj;
   5418
   5419		/* send the ramrod */
   5420		rc = bnx2x_queue_state_change(bp, &queue_params);
   5421		if (rc < 0)
   5422			BNX2X_ERR("Failed to config silent vlan rem for Q %d\n",
   5423				  q);
   5424	}
   5425
   5426	if (!NO_FCOE(bp) && CNIC_ENABLED(bp)) {
   5427		fp = &bp->fp[FCOE_IDX(bp)];
   5428		queue_params.q_obj = &bnx2x_sp_obj(bp, fp).q_obj;
   5429
   5430		/* clear pending completion bit */
   5431		__clear_bit(RAMROD_COMP_WAIT, &queue_params.ramrod_flags);
   5432
   5433		/* mark latest Q bit */
   5434		smp_mb__before_atomic();
   5435		set_bit(BNX2X_AFEX_FCOE_Q_UPDATE_PENDING, &bp->sp_state);
   5436		smp_mb__after_atomic();
   5437
   5438		/* send Q update ramrod for FCoE Q */
   5439		rc = bnx2x_queue_state_change(bp, &queue_params);
   5440		if (rc < 0)
   5441			BNX2X_ERR("Failed to config silent vlan rem for Q %d\n",
   5442				  q);
   5443	} else {
   5444		/* If no FCoE ring - ACK MCP now */
   5445		bnx2x_link_report(bp);
   5446		bnx2x_fw_command(bp, DRV_MSG_CODE_AFEX_VIFSET_ACK, 0);
   5447	}
   5448}
   5449
   5450static struct bnx2x_queue_sp_obj *bnx2x_cid_to_q_obj(
   5451	struct bnx2x *bp, u32 cid)
   5452{
   5453	DP(BNX2X_MSG_SP, "retrieving fp from cid %d\n", cid);
   5454
   5455	if (CNIC_LOADED(bp) && (cid == BNX2X_FCOE_ETH_CID(bp)))
   5456		return &bnx2x_fcoe_sp_obj(bp, q_obj);
   5457	else
   5458		return &bp->sp_objs[CID_TO_FP(cid, bp)].q_obj;
   5459}
   5460
   5461static void bnx2x_eq_int(struct bnx2x *bp)
   5462{
   5463	u16 hw_cons, sw_cons, sw_prod;
   5464	union event_ring_elem *elem;
   5465	u8 echo;
   5466	u32 cid;
   5467	u8 opcode;
   5468	int rc, spqe_cnt = 0;
   5469	struct bnx2x_queue_sp_obj *q_obj;
   5470	struct bnx2x_func_sp_obj *f_obj = &bp->func_obj;
   5471	struct bnx2x_raw_obj *rss_raw = &bp->rss_conf_obj.raw;
   5472
   5473	hw_cons = le16_to_cpu(*bp->eq_cons_sb);
   5474
   5475	/* The hw_cos range is 1-255, 257 - the sw_cons range is 0-254, 256.
   5476	 * when we get the next-page we need to adjust so the loop
   5477	 * condition below will be met. The next element is the size of a
   5478	 * regular element and hence incrementing by 1
   5479	 */
   5480	if ((hw_cons & EQ_DESC_MAX_PAGE) == EQ_DESC_MAX_PAGE)
   5481		hw_cons++;
   5482
   5483	/* This function may never run in parallel with itself for a
   5484	 * specific bp, thus there is no need in "paired" read memory
   5485	 * barrier here.
   5486	 */
   5487	sw_cons = bp->eq_cons;
   5488	sw_prod = bp->eq_prod;
   5489
   5490	DP(BNX2X_MSG_SP, "EQ:  hw_cons %u  sw_cons %u bp->eq_spq_left %x\n",
   5491			hw_cons, sw_cons, atomic_read(&bp->eq_spq_left));
   5492
   5493	for (; sw_cons != hw_cons;
   5494	      sw_prod = NEXT_EQ_IDX(sw_prod), sw_cons = NEXT_EQ_IDX(sw_cons)) {
   5495
   5496		elem = &bp->eq_ring[EQ_DESC(sw_cons)];
   5497
   5498		rc = bnx2x_iov_eq_sp_event(bp, elem);
   5499		if (!rc) {
   5500			DP(BNX2X_MSG_IOV, "bnx2x_iov_eq_sp_event returned %d\n",
   5501			   rc);
   5502			goto next_spqe;
   5503		}
   5504
   5505		opcode = elem->message.opcode;
   5506
   5507		/* handle eq element */
   5508		switch (opcode) {
   5509		case EVENT_RING_OPCODE_VF_PF_CHANNEL:
   5510			bnx2x_vf_mbx_schedule(bp,
   5511					      &elem->message.data.vf_pf_event);
   5512			continue;
   5513
   5514		case EVENT_RING_OPCODE_STAT_QUERY:
   5515			DP_AND((BNX2X_MSG_SP | BNX2X_MSG_STATS),
   5516			       "got statistics comp event %d\n",
   5517			       bp->stats_comp++);
   5518			/* nothing to do with stats comp */
   5519			goto next_spqe;
   5520
   5521		case EVENT_RING_OPCODE_CFC_DEL:
   5522			/* handle according to cid range */
   5523			/*
   5524			 * we may want to verify here that the bp state is
   5525			 * HALTING
   5526			 */
   5527
   5528			/* elem CID originates from FW; actually LE */
   5529			cid = SW_CID(elem->message.data.cfc_del_event.cid);
   5530
   5531			DP(BNX2X_MSG_SP,
   5532			   "got delete ramrod for MULTI[%d]\n", cid);
   5533
   5534			if (CNIC_LOADED(bp) &&
   5535			    !bnx2x_cnic_handle_cfc_del(bp, cid, elem))
   5536				goto next_spqe;
   5537
   5538			q_obj = bnx2x_cid_to_q_obj(bp, cid);
   5539
   5540			if (q_obj->complete_cmd(bp, q_obj, BNX2X_Q_CMD_CFC_DEL))
   5541				break;
   5542
   5543			goto next_spqe;
   5544
   5545		case EVENT_RING_OPCODE_STOP_TRAFFIC:
   5546			DP(BNX2X_MSG_SP | BNX2X_MSG_DCB, "got STOP TRAFFIC\n");
   5547			bnx2x_dcbx_set_params(bp, BNX2X_DCBX_STATE_TX_PAUSED);
   5548			if (f_obj->complete_cmd(bp, f_obj,
   5549						BNX2X_F_CMD_TX_STOP))
   5550				break;
   5551			goto next_spqe;
   5552
   5553		case EVENT_RING_OPCODE_START_TRAFFIC:
   5554			DP(BNX2X_MSG_SP | BNX2X_MSG_DCB, "got START TRAFFIC\n");
   5555			bnx2x_dcbx_set_params(bp, BNX2X_DCBX_STATE_TX_RELEASED);
   5556			if (f_obj->complete_cmd(bp, f_obj,
   5557						BNX2X_F_CMD_TX_START))
   5558				break;
   5559			goto next_spqe;
   5560
   5561		case EVENT_RING_OPCODE_FUNCTION_UPDATE:
   5562			echo = elem->message.data.function_update_event.echo;
   5563			if (echo == SWITCH_UPDATE) {
   5564				DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
   5565				   "got FUNC_SWITCH_UPDATE ramrod\n");
   5566				if (f_obj->complete_cmd(
   5567					bp, f_obj, BNX2X_F_CMD_SWITCH_UPDATE))
   5568					break;
   5569
   5570			} else {
   5571				int cmd = BNX2X_SP_RTNL_AFEX_F_UPDATE;
   5572
   5573				DP(BNX2X_MSG_SP | BNX2X_MSG_MCP,
   5574				   "AFEX: ramrod completed FUNCTION_UPDATE\n");
   5575				f_obj->complete_cmd(bp, f_obj,
   5576						    BNX2X_F_CMD_AFEX_UPDATE);
   5577
   5578				/* We will perform the Queues update from
   5579				 * sp_rtnl task as all Queue SP operations
   5580				 * should run under rtnl_lock.
   5581				 */
   5582				bnx2x_schedule_sp_rtnl(bp, cmd, 0);
   5583			}
   5584
   5585			goto next_spqe;
   5586
   5587		case EVENT_RING_OPCODE_AFEX_VIF_LISTS:
   5588			f_obj->complete_cmd(bp, f_obj,
   5589					    BNX2X_F_CMD_AFEX_VIFLISTS);
   5590			bnx2x_after_afex_vif_lists(bp, elem);
   5591			goto next_spqe;
   5592		case EVENT_RING_OPCODE_FUNCTION_START:
   5593			DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
   5594			   "got FUNC_START ramrod\n");
   5595			if (f_obj->complete_cmd(bp, f_obj, BNX2X_F_CMD_START))
   5596				break;
   5597
   5598			goto next_spqe;
   5599
   5600		case EVENT_RING_OPCODE_FUNCTION_STOP:
   5601			DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
   5602			   "got FUNC_STOP ramrod\n");
   5603			if (f_obj->complete_cmd(bp, f_obj, BNX2X_F_CMD_STOP))
   5604				break;
   5605
   5606			goto next_spqe;
   5607
   5608		case EVENT_RING_OPCODE_SET_TIMESYNC:
   5609			DP(BNX2X_MSG_SP | BNX2X_MSG_PTP,
   5610			   "got set_timesync ramrod completion\n");
   5611			if (f_obj->complete_cmd(bp, f_obj,
   5612						BNX2X_F_CMD_SET_TIMESYNC))
   5613				break;
   5614			goto next_spqe;
   5615		}
   5616
   5617		switch (opcode | bp->state) {
   5618		case (EVENT_RING_OPCODE_RSS_UPDATE_RULES |
   5619		      BNX2X_STATE_OPEN):
   5620		case (EVENT_RING_OPCODE_RSS_UPDATE_RULES |
   5621		      BNX2X_STATE_OPENING_WAIT4_PORT):
   5622		case (EVENT_RING_OPCODE_RSS_UPDATE_RULES |
   5623		      BNX2X_STATE_CLOSING_WAIT4_HALT):
   5624			DP(BNX2X_MSG_SP, "got RSS_UPDATE ramrod. CID %d\n",
   5625			   SW_CID(elem->message.data.eth_event.echo));
   5626			rss_raw->clear_pending(rss_raw);
   5627			break;
   5628
   5629		case (EVENT_RING_OPCODE_SET_MAC | BNX2X_STATE_OPEN):
   5630		case (EVENT_RING_OPCODE_SET_MAC | BNX2X_STATE_DIAG):
   5631		case (EVENT_RING_OPCODE_SET_MAC |
   5632		      BNX2X_STATE_CLOSING_WAIT4_HALT):
   5633		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES |
   5634		      BNX2X_STATE_OPEN):
   5635		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES |
   5636		      BNX2X_STATE_DIAG):
   5637		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES |
   5638		      BNX2X_STATE_CLOSING_WAIT4_HALT):
   5639			DP(BNX2X_MSG_SP, "got (un)set vlan/mac ramrod\n");
   5640			bnx2x_handle_classification_eqe(bp, elem);
   5641			break;
   5642
   5643		case (EVENT_RING_OPCODE_MULTICAST_RULES |
   5644		      BNX2X_STATE_OPEN):
   5645		case (EVENT_RING_OPCODE_MULTICAST_RULES |
   5646		      BNX2X_STATE_DIAG):
   5647		case (EVENT_RING_OPCODE_MULTICAST_RULES |
   5648		      BNX2X_STATE_CLOSING_WAIT4_HALT):
   5649			DP(BNX2X_MSG_SP, "got mcast ramrod\n");
   5650			bnx2x_handle_mcast_eqe(bp);
   5651			break;
   5652
   5653		case (EVENT_RING_OPCODE_FILTERS_RULES |
   5654		      BNX2X_STATE_OPEN):
   5655		case (EVENT_RING_OPCODE_FILTERS_RULES |
   5656		      BNX2X_STATE_DIAG):
   5657		case (EVENT_RING_OPCODE_FILTERS_RULES |
   5658		      BNX2X_STATE_CLOSING_WAIT4_HALT):
   5659			DP(BNX2X_MSG_SP, "got rx_mode ramrod\n");
   5660			bnx2x_handle_rx_mode_eqe(bp);
   5661			break;
   5662		default:
   5663			/* unknown event log error and continue */
   5664			BNX2X_ERR("Unknown EQ event %d, bp->state 0x%x\n",
   5665				  elem->message.opcode, bp->state);
   5666		}
   5667next_spqe:
   5668		spqe_cnt++;
   5669	} /* for */
   5670
   5671	smp_mb__before_atomic();
   5672	atomic_add(spqe_cnt, &bp->eq_spq_left);
   5673
   5674	bp->eq_cons = sw_cons;
   5675	bp->eq_prod = sw_prod;
   5676	/* Make sure that above mem writes were issued towards the memory */
   5677	smp_wmb();
   5678
   5679	/* update producer */
   5680	bnx2x_update_eq_prod(bp, bp->eq_prod);
   5681}
   5682
   5683static void bnx2x_sp_task(struct work_struct *work)
   5684{
   5685	struct bnx2x *bp = container_of(work, struct bnx2x, sp_task.work);
   5686
   5687	DP(BNX2X_MSG_SP, "sp task invoked\n");
   5688
   5689	/* make sure the atomic interrupt_occurred has been written */
   5690	smp_rmb();
   5691	if (atomic_read(&bp->interrupt_occurred)) {
   5692
   5693		/* what work needs to be performed? */
   5694		u16 status = bnx2x_update_dsb_idx(bp);
   5695
   5696		DP(BNX2X_MSG_SP, "status %x\n", status);
   5697		DP(BNX2X_MSG_SP, "setting interrupt_occurred to 0\n");
   5698		atomic_set(&bp->interrupt_occurred, 0);
   5699
   5700		/* HW attentions */
   5701		if (status & BNX2X_DEF_SB_ATT_IDX) {
   5702			bnx2x_attn_int(bp);
   5703			status &= ~BNX2X_DEF_SB_ATT_IDX;
   5704		}
   5705
   5706		/* SP events: STAT_QUERY and others */
   5707		if (status & BNX2X_DEF_SB_IDX) {
   5708			struct bnx2x_fastpath *fp = bnx2x_fcoe_fp(bp);
   5709
   5710			if (FCOE_INIT(bp) &&
   5711			    (bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
   5712				/* Prevent local bottom-halves from running as
   5713				 * we are going to change the local NAPI list.
   5714				 */
   5715				local_bh_disable();
   5716				napi_schedule(&bnx2x_fcoe(bp, napi));
   5717				local_bh_enable();
   5718			}
   5719
   5720			/* Handle EQ completions */
   5721			bnx2x_eq_int(bp);
   5722			bnx2x_ack_sb(bp, bp->igu_dsb_id, USTORM_ID,
   5723				     le16_to_cpu(bp->def_idx), IGU_INT_NOP, 1);
   5724
   5725			status &= ~BNX2X_DEF_SB_IDX;
   5726		}
   5727
   5728		/* if status is non zero then perhaps something went wrong */
   5729		if (unlikely(status))
   5730			DP(BNX2X_MSG_SP,
   5731			   "got an unknown interrupt! (status 0x%x)\n", status);
   5732
   5733		/* ack status block only if something was actually handled */
   5734		bnx2x_ack_sb(bp, bp->igu_dsb_id, ATTENTION_ID,
   5735			     le16_to_cpu(bp->def_att_idx), IGU_INT_ENABLE, 1);
   5736	}
   5737
   5738	/* afex - poll to check if VIFSET_ACK should be sent to MFW */
   5739	if (test_and_clear_bit(BNX2X_AFEX_PENDING_VIFSET_MCP_ACK,
   5740			       &bp->sp_state)) {
   5741		bnx2x_link_report(bp);
   5742		bnx2x_fw_command(bp, DRV_MSG_CODE_AFEX_VIFSET_ACK, 0);
   5743	}
   5744}
   5745
   5746irqreturn_t bnx2x_msix_sp_int(int irq, void *dev_instance)
   5747{
   5748	struct net_device *dev = dev_instance;
   5749	struct bnx2x *bp = netdev_priv(dev);
   5750
   5751	bnx2x_ack_sb(bp, bp->igu_dsb_id, USTORM_ID, 0,
   5752		     IGU_INT_DISABLE, 0);
   5753
   5754#ifdef BNX2X_STOP_ON_ERROR
   5755	if (unlikely(bp->panic))
   5756		return IRQ_HANDLED;
   5757#endif
   5758
   5759	if (CNIC_LOADED(bp)) {
   5760		struct cnic_ops *c_ops;
   5761
   5762		rcu_read_lock();
   5763		c_ops = rcu_dereference(bp->cnic_ops);
   5764		if (c_ops)
   5765			c_ops->cnic_handler(bp->cnic_data, NULL);
   5766		rcu_read_unlock();
   5767	}
   5768
   5769	/* schedule sp task to perform default status block work, ack
   5770	 * attentions and enable interrupts.
   5771	 */
   5772	bnx2x_schedule_sp_task(bp);
   5773
   5774	return IRQ_HANDLED;
   5775}
   5776
   5777/* end of slow path */
   5778
   5779void bnx2x_drv_pulse(struct bnx2x *bp)
   5780{
   5781	SHMEM_WR(bp, func_mb[BP_FW_MB_IDX(bp)].drv_pulse_mb,
   5782		 bp->fw_drv_pulse_wr_seq);
   5783}
   5784
   5785static void bnx2x_timer(struct timer_list *t)
   5786{
   5787	struct bnx2x *bp = from_timer(bp, t, timer);
   5788
   5789	if (!netif_running(bp->dev))
   5790		return;
   5791
   5792	if (IS_PF(bp) &&
   5793	    !BP_NOMCP(bp)) {
   5794		int mb_idx = BP_FW_MB_IDX(bp);
   5795		u16 drv_pulse;
   5796		u16 mcp_pulse;
   5797
   5798		++bp->fw_drv_pulse_wr_seq;
   5799		bp->fw_drv_pulse_wr_seq &= DRV_PULSE_SEQ_MASK;
   5800		drv_pulse = bp->fw_drv_pulse_wr_seq;
   5801		bnx2x_drv_pulse(bp);
   5802
   5803		mcp_pulse = (SHMEM_RD(bp, func_mb[mb_idx].mcp_pulse_mb) &
   5804			     MCP_PULSE_SEQ_MASK);
   5805		/* The delta between driver pulse and mcp response
   5806		 * should not get too big. If the MFW is more than 5 pulses
   5807		 * behind, we should worry about it enough to generate an error
   5808		 * log.
   5809		 */
   5810		if (((drv_pulse - mcp_pulse) & MCP_PULSE_SEQ_MASK) > 5)
   5811			BNX2X_ERR("MFW seems hanged: drv_pulse (0x%x) != mcp_pulse (0x%x)\n",
   5812				  drv_pulse, mcp_pulse);
   5813	}
   5814
   5815	if (bp->state == BNX2X_STATE_OPEN)
   5816		bnx2x_stats_handle(bp, STATS_EVENT_UPDATE);
   5817
   5818	/* sample pf vf bulletin board for new posts from pf */
   5819	if (IS_VF(bp))
   5820		bnx2x_timer_sriov(bp);
   5821
   5822	mod_timer(&bp->timer, jiffies + bp->current_interval);
   5823}
   5824
   5825/* end of Statistics */
   5826
   5827/* nic init */
   5828
   5829/*
   5830 * nic init service functions
   5831 */
   5832
   5833static void bnx2x_fill(struct bnx2x *bp, u32 addr, int fill, u32 len)
   5834{
   5835	u32 i;
   5836	if (!(len%4) && !(addr%4))
   5837		for (i = 0; i < len; i += 4)
   5838			REG_WR(bp, addr + i, fill);
   5839	else
   5840		for (i = 0; i < len; i++)
   5841			REG_WR8(bp, addr + i, fill);
   5842}
   5843
   5844/* helper: writes FP SP data to FW - data_size in dwords */
   5845static void bnx2x_wr_fp_sb_data(struct bnx2x *bp,
   5846				int fw_sb_id,
   5847				u32 *sb_data_p,
   5848				u32 data_size)
   5849{
   5850	int index;
   5851	for (index = 0; index < data_size; index++)
   5852		REG_WR(bp, BAR_CSTRORM_INTMEM +
   5853			CSTORM_STATUS_BLOCK_DATA_OFFSET(fw_sb_id) +
   5854			sizeof(u32)*index,
   5855			*(sb_data_p + index));
   5856}
   5857
   5858static void bnx2x_zero_fp_sb(struct bnx2x *bp, int fw_sb_id)
   5859{
   5860	u32 *sb_data_p;
   5861	u32 data_size = 0;
   5862	struct hc_status_block_data_e2 sb_data_e2;
   5863	struct hc_status_block_data_e1x sb_data_e1x;
   5864
   5865	/* disable the function first */
   5866	if (!CHIP_IS_E1x(bp)) {
   5867		memset(&sb_data_e2, 0, sizeof(struct hc_status_block_data_e2));
   5868		sb_data_e2.common.state = SB_DISABLED;
   5869		sb_data_e2.common.p_func.vf_valid = false;
   5870		sb_data_p = (u32 *)&sb_data_e2;
   5871		data_size = sizeof(struct hc_status_block_data_e2)/sizeof(u32);
   5872	} else {
   5873		memset(&sb_data_e1x, 0,
   5874		       sizeof(struct hc_status_block_data_e1x));
   5875		sb_data_e1x.common.state = SB_DISABLED;
   5876		sb_data_e1x.common.p_func.vf_valid = false;
   5877		sb_data_p = (u32 *)&sb_data_e1x;
   5878		data_size = sizeof(struct hc_status_block_data_e1x)/sizeof(u32);
   5879	}
   5880	bnx2x_wr_fp_sb_data(bp, fw_sb_id, sb_data_p, data_size);
   5881
   5882	bnx2x_fill(bp, BAR_CSTRORM_INTMEM +
   5883			CSTORM_STATUS_BLOCK_OFFSET(fw_sb_id), 0,
   5884			CSTORM_STATUS_BLOCK_SIZE);
   5885	bnx2x_fill(bp, BAR_CSTRORM_INTMEM +
   5886			CSTORM_SYNC_BLOCK_OFFSET(fw_sb_id), 0,
   5887			CSTORM_SYNC_BLOCK_SIZE);
   5888}
   5889
   5890/* helper:  writes SP SB data to FW */
   5891static void bnx2x_wr_sp_sb_data(struct bnx2x *bp,
   5892		struct hc_sp_status_block_data *sp_sb_data)
   5893{
   5894	int func = BP_FUNC(bp);
   5895	int i;
   5896	for (i = 0; i < sizeof(struct hc_sp_status_block_data)/sizeof(u32); i++)
   5897		REG_WR(bp, BAR_CSTRORM_INTMEM +
   5898			CSTORM_SP_STATUS_BLOCK_DATA_OFFSET(func) +
   5899			i*sizeof(u32),
   5900			*((u32 *)sp_sb_data + i));
   5901}
   5902
   5903static void bnx2x_zero_sp_sb(struct bnx2x *bp)
   5904{
   5905	int func = BP_FUNC(bp);
   5906	struct hc_sp_status_block_data sp_sb_data;
   5907	memset(&sp_sb_data, 0, sizeof(struct hc_sp_status_block_data));
   5908
   5909	sp_sb_data.state = SB_DISABLED;
   5910	sp_sb_data.p_func.vf_valid = false;
   5911
   5912	bnx2x_wr_sp_sb_data(bp, &sp_sb_data);
   5913
   5914	bnx2x_fill(bp, BAR_CSTRORM_INTMEM +
   5915			CSTORM_SP_STATUS_BLOCK_OFFSET(func), 0,
   5916			CSTORM_SP_STATUS_BLOCK_SIZE);
   5917	bnx2x_fill(bp, BAR_CSTRORM_INTMEM +
   5918			CSTORM_SP_SYNC_BLOCK_OFFSET(func), 0,
   5919			CSTORM_SP_SYNC_BLOCK_SIZE);
   5920}
   5921
   5922static void bnx2x_setup_ndsb_state_machine(struct hc_status_block_sm *hc_sm,
   5923					   int igu_sb_id, int igu_seg_id)
   5924{
   5925	hc_sm->igu_sb_id = igu_sb_id;
   5926	hc_sm->igu_seg_id = igu_seg_id;
   5927	hc_sm->timer_value = 0xFF;
   5928	hc_sm->time_to_expire = 0xFFFFFFFF;
   5929}
   5930
   5931/* allocates state machine ids. */
   5932static void bnx2x_map_sb_state_machines(struct hc_index_data *index_data)
   5933{
   5934	/* zero out state machine indices */
   5935	/* rx indices */
   5936	index_data[HC_INDEX_ETH_RX_CQ_CONS].flags &= ~HC_INDEX_DATA_SM_ID;
   5937
   5938	/* tx indices */
   5939	index_data[HC_INDEX_OOO_TX_CQ_CONS].flags &= ~HC_INDEX_DATA_SM_ID;
   5940	index_data[HC_INDEX_ETH_TX_CQ_CONS_COS0].flags &= ~HC_INDEX_DATA_SM_ID;
   5941	index_data[HC_INDEX_ETH_TX_CQ_CONS_COS1].flags &= ~HC_INDEX_DATA_SM_ID;
   5942	index_data[HC_INDEX_ETH_TX_CQ_CONS_COS2].flags &= ~HC_INDEX_DATA_SM_ID;
   5943
   5944	/* map indices */
   5945	/* rx indices */
   5946	index_data[HC_INDEX_ETH_RX_CQ_CONS].flags |=
   5947		SM_RX_ID << HC_INDEX_DATA_SM_ID_SHIFT;
   5948
   5949	/* tx indices */
   5950	index_data[HC_INDEX_OOO_TX_CQ_CONS].flags |=
   5951		SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT;
   5952	index_data[HC_INDEX_ETH_TX_CQ_CONS_COS0].flags |=
   5953		SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT;
   5954	index_data[HC_INDEX_ETH_TX_CQ_CONS_COS1].flags |=
   5955		SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT;
   5956	index_data[HC_INDEX_ETH_TX_CQ_CONS_COS2].flags |=
   5957		SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT;
   5958}
   5959
   5960void bnx2x_init_sb(struct bnx2x *bp, dma_addr_t mapping, int vfid,
   5961			  u8 vf_valid, int fw_sb_id, int igu_sb_id)
   5962{
   5963	int igu_seg_id;
   5964
   5965	struct hc_status_block_data_e2 sb_data_e2;
   5966	struct hc_status_block_data_e1x sb_data_e1x;
   5967	struct hc_status_block_sm  *hc_sm_p;
   5968	int data_size;
   5969	u32 *sb_data_p;
   5970
   5971	if (CHIP_INT_MODE_IS_BC(bp))
   5972		igu_seg_id = HC_SEG_ACCESS_NORM;
   5973	else
   5974		igu_seg_id = IGU_SEG_ACCESS_NORM;
   5975
   5976	bnx2x_zero_fp_sb(bp, fw_sb_id);
   5977
   5978	if (!CHIP_IS_E1x(bp)) {
   5979		memset(&sb_data_e2, 0, sizeof(struct hc_status_block_data_e2));
   5980		sb_data_e2.common.state = SB_ENABLED;
   5981		sb_data_e2.common.p_func.pf_id = BP_FUNC(bp);
   5982		sb_data_e2.common.p_func.vf_id = vfid;
   5983		sb_data_e2.common.p_func.vf_valid = vf_valid;
   5984		sb_data_e2.common.p_func.vnic_id = BP_VN(bp);
   5985		sb_data_e2.common.same_igu_sb_1b = true;
   5986		sb_data_e2.common.host_sb_addr.hi = U64_HI(mapping);
   5987		sb_data_e2.common.host_sb_addr.lo = U64_LO(mapping);
   5988		hc_sm_p = sb_data_e2.common.state_machine;
   5989		sb_data_p = (u32 *)&sb_data_e2;
   5990		data_size = sizeof(struct hc_status_block_data_e2)/sizeof(u32);
   5991		bnx2x_map_sb_state_machines(sb_data_e2.index_data);
   5992	} else {
   5993		memset(&sb_data_e1x, 0,
   5994		       sizeof(struct hc_status_block_data_e1x));
   5995		sb_data_e1x.common.state = SB_ENABLED;
   5996		sb_data_e1x.common.p_func.pf_id = BP_FUNC(bp);
   5997		sb_data_e1x.common.p_func.vf_id = 0xff;
   5998		sb_data_e1x.common.p_func.vf_valid = false;
   5999		sb_data_e1x.common.p_func.vnic_id = BP_VN(bp);
   6000		sb_data_e1x.common.same_igu_sb_1b = true;
   6001		sb_data_e1x.common.host_sb_addr.hi = U64_HI(mapping);
   6002		sb_data_e1x.common.host_sb_addr.lo = U64_LO(mapping);
   6003		hc_sm_p = sb_data_e1x.common.state_machine;
   6004		sb_data_p = (u32 *)&sb_data_e1x;
   6005		data_size = sizeof(struct hc_status_block_data_e1x)/sizeof(u32);
   6006		bnx2x_map_sb_state_machines(sb_data_e1x.index_data);
   6007	}
   6008
   6009	bnx2x_setup_ndsb_state_machine(&hc_sm_p[SM_RX_ID],
   6010				       igu_sb_id, igu_seg_id);
   6011	bnx2x_setup_ndsb_state_machine(&hc_sm_p[SM_TX_ID],
   6012				       igu_sb_id, igu_seg_id);
   6013
   6014	DP(NETIF_MSG_IFUP, "Init FW SB %d\n", fw_sb_id);
   6015
   6016	/* write indices to HW - PCI guarantees endianity of regpairs */
   6017	bnx2x_wr_fp_sb_data(bp, fw_sb_id, sb_data_p, data_size);
   6018}
   6019
   6020static void bnx2x_update_coalesce_sb(struct bnx2x *bp, u8 fw_sb_id,
   6021				     u16 tx_usec, u16 rx_usec)
   6022{
   6023	bnx2x_update_coalesce_sb_index(bp, fw_sb_id, HC_INDEX_ETH_RX_CQ_CONS,
   6024				    false, rx_usec);
   6025	bnx2x_update_coalesce_sb_index(bp, fw_sb_id,
   6026				       HC_INDEX_ETH_TX_CQ_CONS_COS0, false,
   6027				       tx_usec);
   6028	bnx2x_update_coalesce_sb_index(bp, fw_sb_id,
   6029				       HC_INDEX_ETH_TX_CQ_CONS_COS1, false,
   6030				       tx_usec);
   6031	bnx2x_update_coalesce_sb_index(bp, fw_sb_id,
   6032				       HC_INDEX_ETH_TX_CQ_CONS_COS2, false,
   6033				       tx_usec);
   6034}
   6035
   6036static void bnx2x_init_def_sb(struct bnx2x *bp)
   6037{
   6038	struct host_sp_status_block *def_sb = bp->def_status_blk;
   6039	dma_addr_t mapping = bp->def_status_blk_mapping;
   6040	int igu_sp_sb_index;
   6041	int igu_seg_id;
   6042	int port = BP_PORT(bp);
   6043	int func = BP_FUNC(bp);
   6044	int reg_offset, reg_offset_en5;
   6045	u64 section;
   6046	int index;
   6047	struct hc_sp_status_block_data sp_sb_data;
   6048	memset(&sp_sb_data, 0, sizeof(struct hc_sp_status_block_data));
   6049
   6050	if (CHIP_INT_MODE_IS_BC(bp)) {
   6051		igu_sp_sb_index = DEF_SB_IGU_ID;
   6052		igu_seg_id = HC_SEG_ACCESS_DEF;
   6053	} else {
   6054		igu_sp_sb_index = bp->igu_dsb_id;
   6055		igu_seg_id = IGU_SEG_ACCESS_DEF;
   6056	}
   6057
   6058	/* ATTN */
   6059	section = ((u64)mapping) + offsetof(struct host_sp_status_block,
   6060					    atten_status_block);
   6061	def_sb->atten_status_block.status_block_id = igu_sp_sb_index;
   6062
   6063	bp->attn_state = 0;
   6064
   6065	reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
   6066			     MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0);
   6067	reg_offset_en5 = (port ? MISC_REG_AEU_ENABLE5_FUNC_1_OUT_0 :
   6068				 MISC_REG_AEU_ENABLE5_FUNC_0_OUT_0);
   6069	for (index = 0; index < MAX_DYNAMIC_ATTN_GRPS; index++) {
   6070		int sindex;
   6071		/* take care of sig[0]..sig[4] */
   6072		for (sindex = 0; sindex < 4; sindex++)
   6073			bp->attn_group[index].sig[sindex] =
   6074			   REG_RD(bp, reg_offset + sindex*0x4 + 0x10*index);
   6075
   6076		if (!CHIP_IS_E1x(bp))
   6077			/*
   6078			 * enable5 is separate from the rest of the registers,
   6079			 * and therefore the address skip is 4
   6080			 * and not 16 between the different groups
   6081			 */
   6082			bp->attn_group[index].sig[4] = REG_RD(bp,
   6083					reg_offset_en5 + 0x4*index);
   6084		else
   6085			bp->attn_group[index].sig[4] = 0;
   6086	}
   6087
   6088	if (bp->common.int_block == INT_BLOCK_HC) {
   6089		reg_offset = (port ? HC_REG_ATTN_MSG1_ADDR_L :
   6090				     HC_REG_ATTN_MSG0_ADDR_L);
   6091
   6092		REG_WR(bp, reg_offset, U64_LO(section));
   6093		REG_WR(bp, reg_offset + 4, U64_HI(section));
   6094	} else if (!CHIP_IS_E1x(bp)) {
   6095		REG_WR(bp, IGU_REG_ATTN_MSG_ADDR_L, U64_LO(section));
   6096		REG_WR(bp, IGU_REG_ATTN_MSG_ADDR_H, U64_HI(section));
   6097	}
   6098
   6099	section = ((u64)mapping) + offsetof(struct host_sp_status_block,
   6100					    sp_sb);
   6101
   6102	bnx2x_zero_sp_sb(bp);
   6103
   6104	/* PCI guarantees endianity of regpairs */
   6105	sp_sb_data.state		= SB_ENABLED;
   6106	sp_sb_data.host_sb_addr.lo	= U64_LO(section);
   6107	sp_sb_data.host_sb_addr.hi	= U64_HI(section);
   6108	sp_sb_data.igu_sb_id		= igu_sp_sb_index;
   6109	sp_sb_data.igu_seg_id		= igu_seg_id;
   6110	sp_sb_data.p_func.pf_id		= func;
   6111	sp_sb_data.p_func.vnic_id	= BP_VN(bp);
   6112	sp_sb_data.p_func.vf_id		= 0xff;
   6113
   6114	bnx2x_wr_sp_sb_data(bp, &sp_sb_data);
   6115
   6116	bnx2x_ack_sb(bp, bp->igu_dsb_id, USTORM_ID, 0, IGU_INT_ENABLE, 0);
   6117}
   6118
   6119void bnx2x_update_coalesce(struct bnx2x *bp)
   6120{
   6121	int i;
   6122
   6123	for_each_eth_queue(bp, i)
   6124		bnx2x_update_coalesce_sb(bp, bp->fp[i].fw_sb_id,
   6125					 bp->tx_ticks, bp->rx_ticks);
   6126}
   6127
   6128static void bnx2x_init_sp_ring(struct bnx2x *bp)
   6129{
   6130	spin_lock_init(&bp->spq_lock);
   6131	atomic_set(&bp->cq_spq_left, MAX_SPQ_PENDING);
   6132
   6133	bp->spq_prod_idx = 0;
   6134	bp->dsb_sp_prod = BNX2X_SP_DSB_INDEX;
   6135	bp->spq_prod_bd = bp->spq;
   6136	bp->spq_last_bd = bp->spq_prod_bd + MAX_SP_DESC_CNT;
   6137}
   6138
   6139static void bnx2x_init_eq_ring(struct bnx2x *bp)
   6140{
   6141	int i;
   6142	for (i = 1; i <= NUM_EQ_PAGES; i++) {
   6143		union event_ring_elem *elem =
   6144			&bp->eq_ring[EQ_DESC_CNT_PAGE * i - 1];
   6145
   6146		elem->next_page.addr.hi =
   6147			cpu_to_le32(U64_HI(bp->eq_mapping +
   6148				   BCM_PAGE_SIZE * (i % NUM_EQ_PAGES)));
   6149		elem->next_page.addr.lo =
   6150			cpu_to_le32(U64_LO(bp->eq_mapping +
   6151				   BCM_PAGE_SIZE*(i % NUM_EQ_PAGES)));
   6152	}
   6153	bp->eq_cons = 0;
   6154	bp->eq_prod = NUM_EQ_DESC;
   6155	bp->eq_cons_sb = BNX2X_EQ_INDEX;
   6156	/* we want a warning message before it gets wrought... */
   6157	atomic_set(&bp->eq_spq_left,
   6158		min_t(int, MAX_SP_DESC_CNT - MAX_SPQ_PENDING, NUM_EQ_DESC) - 1);
   6159}
   6160
   6161/* called with netif_addr_lock_bh() */
   6162static int bnx2x_set_q_rx_mode(struct bnx2x *bp, u8 cl_id,
   6163			       unsigned long rx_mode_flags,
   6164			       unsigned long rx_accept_flags,
   6165			       unsigned long tx_accept_flags,
   6166			       unsigned long ramrod_flags)
   6167{
   6168	struct bnx2x_rx_mode_ramrod_params ramrod_param;
   6169	int rc;
   6170
   6171	memset(&ramrod_param, 0, sizeof(ramrod_param));
   6172
   6173	/* Prepare ramrod parameters */
   6174	ramrod_param.cid = 0;
   6175	ramrod_param.cl_id = cl_id;
   6176	ramrod_param.rx_mode_obj = &bp->rx_mode_obj;
   6177	ramrod_param.func_id = BP_FUNC(bp);
   6178
   6179	ramrod_param.pstate = &bp->sp_state;
   6180	ramrod_param.state = BNX2X_FILTER_RX_MODE_PENDING;
   6181
   6182	ramrod_param.rdata = bnx2x_sp(bp, rx_mode_rdata);
   6183	ramrod_param.rdata_mapping = bnx2x_sp_mapping(bp, rx_mode_rdata);
   6184
   6185	set_bit(BNX2X_FILTER_RX_MODE_PENDING, &bp->sp_state);
   6186
   6187	ramrod_param.ramrod_flags = ramrod_flags;
   6188	ramrod_param.rx_mode_flags = rx_mode_flags;
   6189
   6190	ramrod_param.rx_accept_flags = rx_accept_flags;
   6191	ramrod_param.tx_accept_flags = tx_accept_flags;
   6192
   6193	rc = bnx2x_config_rx_mode(bp, &ramrod_param);
   6194	if (rc < 0) {
   6195		BNX2X_ERR("Set rx_mode %d failed\n", bp->rx_mode);
   6196		return rc;
   6197	}
   6198
   6199	return 0;
   6200}
   6201
   6202static int bnx2x_fill_accept_flags(struct bnx2x *bp, u32 rx_mode,
   6203				   unsigned long *rx_accept_flags,
   6204				   unsigned long *tx_accept_flags)
   6205{
   6206	/* Clear the flags first */
   6207	*rx_accept_flags = 0;
   6208	*tx_accept_flags = 0;
   6209
   6210	switch (rx_mode) {
   6211	case BNX2X_RX_MODE_NONE:
   6212		/*
   6213		 * 'drop all' supersedes any accept flags that may have been
   6214		 * passed to the function.
   6215		 */
   6216		break;
   6217	case BNX2X_RX_MODE_NORMAL:
   6218		__set_bit(BNX2X_ACCEPT_UNICAST, rx_accept_flags);
   6219		__set_bit(BNX2X_ACCEPT_MULTICAST, rx_accept_flags);
   6220		__set_bit(BNX2X_ACCEPT_BROADCAST, rx_accept_flags);
   6221
   6222		/* internal switching mode */
   6223		__set_bit(BNX2X_ACCEPT_UNICAST, tx_accept_flags);
   6224		__set_bit(BNX2X_ACCEPT_MULTICAST, tx_accept_flags);
   6225		__set_bit(BNX2X_ACCEPT_BROADCAST, tx_accept_flags);
   6226
   6227		if (bp->accept_any_vlan) {
   6228			__set_bit(BNX2X_ACCEPT_ANY_VLAN, rx_accept_flags);
   6229			__set_bit(BNX2X_ACCEPT_ANY_VLAN, tx_accept_flags);
   6230		}
   6231
   6232		break;
   6233	case BNX2X_RX_MODE_ALLMULTI:
   6234		__set_bit(BNX2X_ACCEPT_UNICAST, rx_accept_flags);
   6235		__set_bit(BNX2X_ACCEPT_ALL_MULTICAST, rx_accept_flags);
   6236		__set_bit(BNX2X_ACCEPT_BROADCAST, rx_accept_flags);
   6237
   6238		/* internal switching mode */
   6239		__set_bit(BNX2X_ACCEPT_UNICAST, tx_accept_flags);
   6240		__set_bit(BNX2X_ACCEPT_ALL_MULTICAST, tx_accept_flags);
   6241		__set_bit(BNX2X_ACCEPT_BROADCAST, tx_accept_flags);
   6242
   6243		if (bp->accept_any_vlan) {
   6244			__set_bit(BNX2X_ACCEPT_ANY_VLAN, rx_accept_flags);
   6245			__set_bit(BNX2X_ACCEPT_ANY_VLAN, tx_accept_flags);
   6246		}
   6247
   6248		break;
   6249	case BNX2X_RX_MODE_PROMISC:
   6250		/* According to definition of SI mode, iface in promisc mode
   6251		 * should receive matched and unmatched (in resolution of port)
   6252		 * unicast packets.
   6253		 */
   6254		__set_bit(BNX2X_ACCEPT_UNMATCHED, rx_accept_flags);
   6255		__set_bit(BNX2X_ACCEPT_UNICAST, rx_accept_flags);
   6256		__set_bit(BNX2X_ACCEPT_ALL_MULTICAST, rx_accept_flags);
   6257		__set_bit(BNX2X_ACCEPT_BROADCAST, rx_accept_flags);
   6258
   6259		/* internal switching mode */
   6260		__set_bit(BNX2X_ACCEPT_ALL_MULTICAST, tx_accept_flags);
   6261		__set_bit(BNX2X_ACCEPT_BROADCAST, tx_accept_flags);
   6262
   6263		if (IS_MF_SI(bp))
   6264			__set_bit(BNX2X_ACCEPT_ALL_UNICAST, tx_accept_flags);
   6265		else
   6266			__set_bit(BNX2X_ACCEPT_UNICAST, tx_accept_flags);
   6267
   6268		__set_bit(BNX2X_ACCEPT_ANY_VLAN, rx_accept_flags);
   6269		__set_bit(BNX2X_ACCEPT_ANY_VLAN, tx_accept_flags);
   6270
   6271		break;
   6272	default:
   6273		BNX2X_ERR("Unknown rx_mode: %d\n", rx_mode);
   6274		return -EINVAL;
   6275	}
   6276
   6277	return 0;
   6278}
   6279
   6280/* called with netif_addr_lock_bh() */
   6281static int bnx2x_set_storm_rx_mode(struct bnx2x *bp)
   6282{
   6283	unsigned long rx_mode_flags = 0, ramrod_flags = 0;
   6284	unsigned long rx_accept_flags = 0, tx_accept_flags = 0;
   6285	int rc;
   6286
   6287	if (!NO_FCOE(bp))
   6288		/* Configure rx_mode of FCoE Queue */
   6289		__set_bit(BNX2X_RX_MODE_FCOE_ETH, &rx_mode_flags);
   6290
   6291	rc = bnx2x_fill_accept_flags(bp, bp->rx_mode, &rx_accept_flags,
   6292				     &tx_accept_flags);
   6293	if (rc)
   6294		return rc;
   6295
   6296	__set_bit(RAMROD_RX, &ramrod_flags);
   6297	__set_bit(RAMROD_TX, &ramrod_flags);
   6298
   6299	return bnx2x_set_q_rx_mode(bp, bp->fp->cl_id, rx_mode_flags,
   6300				   rx_accept_flags, tx_accept_flags,
   6301				   ramrod_flags);
   6302}
   6303
   6304static void bnx2x_init_internal_common(struct bnx2x *bp)
   6305{
   6306	int i;
   6307
   6308	/* Zero this manually as its initialization is
   6309	   currently missing in the initTool */
   6310	for (i = 0; i < (USTORM_AGG_DATA_SIZE >> 2); i++)
   6311		REG_WR(bp, BAR_USTRORM_INTMEM +
   6312		       USTORM_AGG_DATA_OFFSET + i * 4, 0);
   6313	if (!CHIP_IS_E1x(bp)) {
   6314		REG_WR8(bp, BAR_CSTRORM_INTMEM + CSTORM_IGU_MODE_OFFSET,
   6315			CHIP_INT_MODE_IS_BC(bp) ?
   6316			HC_IGU_BC_MODE : HC_IGU_NBC_MODE);
   6317	}
   6318}
   6319
   6320static void bnx2x_init_internal(struct bnx2x *bp, u32 load_code)
   6321{
   6322	switch (load_code) {
   6323	case FW_MSG_CODE_DRV_LOAD_COMMON:
   6324	case FW_MSG_CODE_DRV_LOAD_COMMON_CHIP:
   6325		bnx2x_init_internal_common(bp);
   6326		fallthrough;
   6327
   6328	case FW_MSG_CODE_DRV_LOAD_PORT:
   6329		/* nothing to do */
   6330		fallthrough;
   6331
   6332	case FW_MSG_CODE_DRV_LOAD_FUNCTION:
   6333		/* internal memory per function is
   6334		   initialized inside bnx2x_pf_init */
   6335		break;
   6336
   6337	default:
   6338		BNX2X_ERR("Unknown load_code (0x%x) from MCP\n", load_code);
   6339		break;
   6340	}
   6341}
   6342
   6343static inline u8 bnx2x_fp_igu_sb_id(struct bnx2x_fastpath *fp)
   6344{
   6345	return fp->bp->igu_base_sb + fp->index + CNIC_SUPPORT(fp->bp);
   6346}
   6347
   6348static inline u8 bnx2x_fp_fw_sb_id(struct bnx2x_fastpath *fp)
   6349{
   6350	return fp->bp->base_fw_ndsb + fp->index + CNIC_SUPPORT(fp->bp);
   6351}
   6352
   6353static u8 bnx2x_fp_cl_id(struct bnx2x_fastpath *fp)
   6354{
   6355	if (CHIP_IS_E1x(fp->bp))
   6356		return BP_L_ID(fp->bp) + fp->index;
   6357	else	/* We want Client ID to be the same as IGU SB ID for 57712 */
   6358		return bnx2x_fp_igu_sb_id(fp);
   6359}
   6360
   6361static void bnx2x_init_eth_fp(struct bnx2x *bp, int fp_idx)
   6362{
   6363	struct bnx2x_fastpath *fp = &bp->fp[fp_idx];
   6364	u8 cos;
   6365	unsigned long q_type = 0;
   6366	u32 cids[BNX2X_MULTI_TX_COS] = { 0 };
   6367	fp->rx_queue = fp_idx;
   6368	fp->cid = fp_idx;
   6369	fp->cl_id = bnx2x_fp_cl_id(fp);
   6370	fp->fw_sb_id = bnx2x_fp_fw_sb_id(fp);
   6371	fp->igu_sb_id = bnx2x_fp_igu_sb_id(fp);
   6372	/* qZone id equals to FW (per path) client id */
   6373	fp->cl_qzone_id  = bnx2x_fp_qzone_id(fp);
   6374
   6375	/* init shortcut */
   6376	fp->ustorm_rx_prods_offset = bnx2x_rx_ustorm_prods_offset(fp);
   6377
   6378	/* Setup SB indices */
   6379	fp->rx_cons_sb = BNX2X_RX_SB_INDEX;
   6380
   6381	/* Configure Queue State object */
   6382	__set_bit(BNX2X_Q_TYPE_HAS_RX, &q_type);
   6383	__set_bit(BNX2X_Q_TYPE_HAS_TX, &q_type);
   6384
   6385	BUG_ON(fp->max_cos > BNX2X_MULTI_TX_COS);
   6386
   6387	/* init tx data */
   6388	for_each_cos_in_tx_queue(fp, cos) {
   6389		bnx2x_init_txdata(bp, fp->txdata_ptr[cos],
   6390				  CID_COS_TO_TX_ONLY_CID(fp->cid, cos, bp),
   6391				  FP_COS_TO_TXQ(fp, cos, bp),
   6392				  BNX2X_TX_SB_INDEX_BASE + cos, fp);
   6393		cids[cos] = fp->txdata_ptr[cos]->cid;
   6394	}
   6395
   6396	/* nothing more for vf to do here */
   6397	if (IS_VF(bp))
   6398		return;
   6399
   6400	bnx2x_init_sb(bp, fp->status_blk_mapping, BNX2X_VF_ID_INVALID, false,
   6401		      fp->fw_sb_id, fp->igu_sb_id);
   6402	bnx2x_update_fpsb_idx(fp);
   6403	bnx2x_init_queue_obj(bp, &bnx2x_sp_obj(bp, fp).q_obj, fp->cl_id, cids,
   6404			     fp->max_cos, BP_FUNC(bp), bnx2x_sp(bp, q_rdata),
   6405			     bnx2x_sp_mapping(bp, q_rdata), q_type);
   6406
   6407	/**
   6408	 * Configure classification DBs: Always enable Tx switching
   6409	 */
   6410	bnx2x_init_vlan_mac_fp_objs(fp, BNX2X_OBJ_TYPE_RX_TX);
   6411
   6412	DP(NETIF_MSG_IFUP,
   6413	   "queue[%d]:  bnx2x_init_sb(%p,%p)  cl_id %d  fw_sb %d  igu_sb %d\n",
   6414	   fp_idx, bp, fp->status_blk.e2_sb, fp->cl_id, fp->fw_sb_id,
   6415	   fp->igu_sb_id);
   6416}
   6417
   6418static void bnx2x_init_tx_ring_one(struct bnx2x_fp_txdata *txdata)
   6419{
   6420	int i;
   6421
   6422	for (i = 1; i <= NUM_TX_RINGS; i++) {
   6423		struct eth_tx_next_bd *tx_next_bd =
   6424			&txdata->tx_desc_ring[TX_DESC_CNT * i - 1].next_bd;
   6425
   6426		tx_next_bd->addr_hi =
   6427			cpu_to_le32(U64_HI(txdata->tx_desc_mapping +
   6428				    BCM_PAGE_SIZE*(i % NUM_TX_RINGS)));
   6429		tx_next_bd->addr_lo =
   6430			cpu_to_le32(U64_LO(txdata->tx_desc_mapping +
   6431				    BCM_PAGE_SIZE*(i % NUM_TX_RINGS)));
   6432	}
   6433
   6434	*txdata->tx_cons_sb = cpu_to_le16(0);
   6435
   6436	SET_FLAG(txdata->tx_db.data.header.header, DOORBELL_HDR_DB_TYPE, 1);
   6437	txdata->tx_db.data.zero_fill1 = 0;
   6438	txdata->tx_db.data.prod = 0;
   6439
   6440	txdata->tx_pkt_prod = 0;
   6441	txdata->tx_pkt_cons = 0;
   6442	txdata->tx_bd_prod = 0;
   6443	txdata->tx_bd_cons = 0;
   6444	txdata->tx_pkt = 0;
   6445}
   6446
   6447static void bnx2x_init_tx_rings_cnic(struct bnx2x *bp)
   6448{
   6449	int i;
   6450
   6451	for_each_tx_queue_cnic(bp, i)
   6452		bnx2x_init_tx_ring_one(bp->fp[i].txdata_ptr[0]);
   6453}
   6454
   6455static void bnx2x_init_tx_rings(struct bnx2x *bp)
   6456{
   6457	int i;
   6458	u8 cos;
   6459
   6460	for_each_eth_queue(bp, i)
   6461		for_each_cos_in_tx_queue(&bp->fp[i], cos)
   6462			bnx2x_init_tx_ring_one(bp->fp[i].txdata_ptr[cos]);
   6463}
   6464
   6465static void bnx2x_init_fcoe_fp(struct bnx2x *bp)
   6466{
   6467	struct bnx2x_fastpath *fp = bnx2x_fcoe_fp(bp);
   6468	unsigned long q_type = 0;
   6469
   6470	bnx2x_fcoe(bp, rx_queue) = BNX2X_NUM_ETH_QUEUES(bp);
   6471	bnx2x_fcoe(bp, cl_id) = bnx2x_cnic_eth_cl_id(bp,
   6472						     BNX2X_FCOE_ETH_CL_ID_IDX);
   6473	bnx2x_fcoe(bp, cid) = BNX2X_FCOE_ETH_CID(bp);
   6474	bnx2x_fcoe(bp, fw_sb_id) = DEF_SB_ID;
   6475	bnx2x_fcoe(bp, igu_sb_id) = bp->igu_dsb_id;
   6476	bnx2x_fcoe(bp, rx_cons_sb) = BNX2X_FCOE_L2_RX_INDEX;
   6477	bnx2x_init_txdata(bp, bnx2x_fcoe(bp, txdata_ptr[0]),
   6478			  fp->cid, FCOE_TXQ_IDX(bp), BNX2X_FCOE_L2_TX_INDEX,
   6479			  fp);
   6480
   6481	DP(NETIF_MSG_IFUP, "created fcoe tx data (fp index %d)\n", fp->index);
   6482
   6483	/* qZone id equals to FW (per path) client id */
   6484	bnx2x_fcoe(bp, cl_qzone_id) = bnx2x_fp_qzone_id(fp);
   6485	/* init shortcut */
   6486	bnx2x_fcoe(bp, ustorm_rx_prods_offset) =
   6487		bnx2x_rx_ustorm_prods_offset(fp);
   6488
   6489	/* Configure Queue State object */
   6490	__set_bit(BNX2X_Q_TYPE_HAS_RX, &q_type);
   6491	__set_bit(BNX2X_Q_TYPE_HAS_TX, &q_type);
   6492
   6493	/* No multi-CoS for FCoE L2 client */
   6494	BUG_ON(fp->max_cos != 1);
   6495
   6496	bnx2x_init_queue_obj(bp, &bnx2x_sp_obj(bp, fp).q_obj, fp->cl_id,
   6497			     &fp->cid, 1, BP_FUNC(bp), bnx2x_sp(bp, q_rdata),
   6498			     bnx2x_sp_mapping(bp, q_rdata), q_type);
   6499
   6500	DP(NETIF_MSG_IFUP,
   6501	   "queue[%d]: bnx2x_init_sb(%p,%p) cl_id %d fw_sb %d igu_sb %d\n",
   6502	   fp->index, bp, fp->status_blk.e2_sb, fp->cl_id, fp->fw_sb_id,
   6503	   fp->igu_sb_id);
   6504}
   6505
   6506void bnx2x_nic_init_cnic(struct bnx2x *bp)
   6507{
   6508	if (!NO_FCOE(bp))
   6509		bnx2x_init_fcoe_fp(bp);
   6510
   6511	bnx2x_init_sb(bp, bp->cnic_sb_mapping,
   6512		      BNX2X_VF_ID_INVALID, false,
   6513		      bnx2x_cnic_fw_sb_id(bp), bnx2x_cnic_igu_sb_id(bp));
   6514
   6515	/* ensure status block indices were read */
   6516	rmb();
   6517	bnx2x_init_rx_rings_cnic(bp);
   6518	bnx2x_init_tx_rings_cnic(bp);
   6519
   6520	/* flush all */
   6521	mb();
   6522}
   6523
   6524void bnx2x_pre_irq_nic_init(struct bnx2x *bp)
   6525{
   6526	int i;
   6527
   6528	/* Setup NIC internals and enable interrupts */
   6529	for_each_eth_queue(bp, i)
   6530		bnx2x_init_eth_fp(bp, i);
   6531
   6532	/* ensure status block indices were read */
   6533	rmb();
   6534	bnx2x_init_rx_rings(bp);
   6535	bnx2x_init_tx_rings(bp);
   6536
   6537	if (IS_PF(bp)) {
   6538		/* Initialize MOD_ABS interrupts */
   6539		bnx2x_init_mod_abs_int(bp, &bp->link_vars, bp->common.chip_id,
   6540				       bp->common.shmem_base,
   6541				       bp->common.shmem2_base, BP_PORT(bp));
   6542
   6543		/* initialize the default status block and sp ring */
   6544		bnx2x_init_def_sb(bp);
   6545		bnx2x_update_dsb_idx(bp);
   6546		bnx2x_init_sp_ring(bp);
   6547	} else {
   6548		bnx2x_memset_stats(bp);
   6549	}
   6550}
   6551
   6552void bnx2x_post_irq_nic_init(struct bnx2x *bp, u32 load_code)
   6553{
   6554	bnx2x_init_eq_ring(bp);
   6555	bnx2x_init_internal(bp, load_code);
   6556	bnx2x_pf_init(bp);
   6557	bnx2x_stats_init(bp);
   6558
   6559	/* flush all before enabling interrupts */
   6560	mb();
   6561
   6562	bnx2x_int_enable(bp);
   6563
   6564	/* Check for SPIO5 */
   6565	bnx2x_attn_int_deasserted0(bp,
   6566		REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_1_FUNC_0 + BP_PORT(bp)*4) &
   6567				   AEU_INPUTS_ATTN_BITS_SPIO5);
   6568}
   6569
   6570/* gzip service functions */
   6571static int bnx2x_gunzip_init(struct bnx2x *bp)
   6572{
   6573	bp->gunzip_buf = dma_alloc_coherent(&bp->pdev->dev, FW_BUF_SIZE,
   6574					    &bp->gunzip_mapping, GFP_KERNEL);
   6575	if (bp->gunzip_buf  == NULL)
   6576		goto gunzip_nomem1;
   6577
   6578	bp->strm = kmalloc(sizeof(*bp->strm), GFP_KERNEL);
   6579	if (bp->strm  == NULL)
   6580		goto gunzip_nomem2;
   6581
   6582	bp->strm->workspace = vmalloc(zlib_inflate_workspacesize());
   6583	if (bp->strm->workspace == NULL)
   6584		goto gunzip_nomem3;
   6585
   6586	return 0;
   6587
   6588gunzip_nomem3:
   6589	kfree(bp->strm);
   6590	bp->strm = NULL;
   6591
   6592gunzip_nomem2:
   6593	dma_free_coherent(&bp->pdev->dev, FW_BUF_SIZE, bp->gunzip_buf,
   6594			  bp->gunzip_mapping);
   6595	bp->gunzip_buf = NULL;
   6596
   6597gunzip_nomem1:
   6598	BNX2X_ERR("Cannot allocate firmware buffer for un-compression\n");
   6599	return -ENOMEM;
   6600}
   6601
   6602static void bnx2x_gunzip_end(struct bnx2x *bp)
   6603{
   6604	if (bp->strm) {
   6605		vfree(bp->strm->workspace);
   6606		kfree(bp->strm);
   6607		bp->strm = NULL;
   6608	}
   6609
   6610	if (bp->gunzip_buf) {
   6611		dma_free_coherent(&bp->pdev->dev, FW_BUF_SIZE, bp->gunzip_buf,
   6612				  bp->gunzip_mapping);
   6613		bp->gunzip_buf = NULL;
   6614	}
   6615}
   6616
   6617static int bnx2x_gunzip(struct bnx2x *bp, const u8 *zbuf, int len)
   6618{
   6619	int n, rc;
   6620
   6621	/* check gzip header */
   6622	if ((zbuf[0] != 0x1f) || (zbuf[1] != 0x8b) || (zbuf[2] != Z_DEFLATED)) {
   6623		BNX2X_ERR("Bad gzip header\n");
   6624		return -EINVAL;
   6625	}
   6626
   6627	n = 10;
   6628
   6629#define FNAME				0x8
   6630
   6631	if (zbuf[3] & FNAME)
   6632		while ((zbuf[n++] != 0) && (n < len));
   6633
   6634	bp->strm->next_in = (typeof(bp->strm->next_in))zbuf + n;
   6635	bp->strm->avail_in = len - n;
   6636	bp->strm->next_out = bp->gunzip_buf;
   6637	bp->strm->avail_out = FW_BUF_SIZE;
   6638
   6639	rc = zlib_inflateInit2(bp->strm, -MAX_WBITS);
   6640	if (rc != Z_OK)
   6641		return rc;
   6642
   6643	rc = zlib_inflate(bp->strm, Z_FINISH);
   6644	if ((rc != Z_OK) && (rc != Z_STREAM_END))
   6645		netdev_err(bp->dev, "Firmware decompression error: %s\n",
   6646			   bp->strm->msg);
   6647
   6648	bp->gunzip_outlen = (FW_BUF_SIZE - bp->strm->avail_out);
   6649	if (bp->gunzip_outlen & 0x3)
   6650		netdev_err(bp->dev,
   6651			   "Firmware decompression error: gunzip_outlen (%d) not aligned\n",
   6652				bp->gunzip_outlen);
   6653	bp->gunzip_outlen >>= 2;
   6654
   6655	zlib_inflateEnd(bp->strm);
   6656
   6657	if (rc == Z_STREAM_END)
   6658		return 0;
   6659
   6660	return rc;
   6661}
   6662
   6663/* nic load/unload */
   6664
   6665/*
   6666 * General service functions
   6667 */
   6668
   6669/* send a NIG loopback debug packet */
   6670static void bnx2x_lb_pckt(struct bnx2x *bp)
   6671{
   6672	u32 wb_write[3];
   6673
   6674	/* Ethernet source and destination addresses */
   6675	wb_write[0] = 0x55555555;
   6676	wb_write[1] = 0x55555555;
   6677	wb_write[2] = 0x20;		/* SOP */
   6678	REG_WR_DMAE(bp, NIG_REG_DEBUG_PACKET_LB, wb_write, 3);
   6679
   6680	/* NON-IP protocol */
   6681	wb_write[0] = 0x09000000;
   6682	wb_write[1] = 0x55555555;
   6683	wb_write[2] = 0x10;		/* EOP, eop_bvalid = 0 */
   6684	REG_WR_DMAE(bp, NIG_REG_DEBUG_PACKET_LB, wb_write, 3);
   6685}
   6686
   6687/* some of the internal memories
   6688 * are not directly readable from the driver
   6689 * to test them we send debug packets
   6690 */
   6691static int bnx2x_int_mem_test(struct bnx2x *bp)
   6692{
   6693	int factor;
   6694	int count, i;
   6695	u32 val = 0;
   6696
   6697	if (CHIP_REV_IS_FPGA(bp))
   6698		factor = 120;
   6699	else if (CHIP_REV_IS_EMUL(bp))
   6700		factor = 200;
   6701	else
   6702		factor = 1;
   6703
   6704	/* Disable inputs of parser neighbor blocks */
   6705	REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x0);
   6706	REG_WR(bp, TCM_REG_PRS_IFEN, 0x0);
   6707	REG_WR(bp, CFC_REG_DEBUG0, 0x1);
   6708	REG_WR(bp, NIG_REG_PRS_REQ_IN_EN, 0x0);
   6709
   6710	/*  Write 0 to parser credits for CFC search request */
   6711	REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x0);
   6712
   6713	/* send Ethernet packet */
   6714	bnx2x_lb_pckt(bp);
   6715
   6716	/* TODO do i reset NIG statistic? */
   6717	/* Wait until NIG register shows 1 packet of size 0x10 */
   6718	count = 1000 * factor;
   6719	while (count) {
   6720
   6721		bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2);
   6722		val = *bnx2x_sp(bp, wb_data[0]);
   6723		if (val == 0x10)
   6724			break;
   6725
   6726		usleep_range(10000, 20000);
   6727		count--;
   6728	}
   6729	if (val != 0x10) {
   6730		BNX2X_ERR("NIG timeout  val = 0x%x\n", val);
   6731		return -1;
   6732	}
   6733
   6734	/* Wait until PRS register shows 1 packet */
   6735	count = 1000 * factor;
   6736	while (count) {
   6737		val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS);
   6738		if (val == 1)
   6739			break;
   6740
   6741		usleep_range(10000, 20000);
   6742		count--;
   6743	}
   6744	if (val != 0x1) {
   6745		BNX2X_ERR("PRS timeout val = 0x%x\n", val);
   6746		return -2;
   6747	}
   6748
   6749	/* Reset and init BRB, PRS */
   6750	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, 0x03);
   6751	msleep(50);
   6752	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0x03);
   6753	msleep(50);
   6754	bnx2x_init_block(bp, BLOCK_BRB1, PHASE_COMMON);
   6755	bnx2x_init_block(bp, BLOCK_PRS, PHASE_COMMON);
   6756
   6757	DP(NETIF_MSG_HW, "part2\n");
   6758
   6759	/* Disable inputs of parser neighbor blocks */
   6760	REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x0);
   6761	REG_WR(bp, TCM_REG_PRS_IFEN, 0x0);
   6762	REG_WR(bp, CFC_REG_DEBUG0, 0x1);
   6763	REG_WR(bp, NIG_REG_PRS_REQ_IN_EN, 0x0);
   6764
   6765	/* Write 0 to parser credits for CFC search request */
   6766	REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x0);
   6767
   6768	/* send 10 Ethernet packets */
   6769	for (i = 0; i < 10; i++)
   6770		bnx2x_lb_pckt(bp);
   6771
   6772	/* Wait until NIG register shows 10 + 1
   6773	   packets of size 11*0x10 = 0xb0 */
   6774	count = 1000 * factor;
   6775	while (count) {
   6776
   6777		bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2);
   6778		val = *bnx2x_sp(bp, wb_data[0]);
   6779		if (val == 0xb0)
   6780			break;
   6781
   6782		usleep_range(10000, 20000);
   6783		count--;
   6784	}
   6785	if (val != 0xb0) {
   6786		BNX2X_ERR("NIG timeout  val = 0x%x\n", val);
   6787		return -3;
   6788	}
   6789
   6790	/* Wait until PRS register shows 2 packets */
   6791	val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS);
   6792	if (val != 2)
   6793		BNX2X_ERR("PRS timeout  val = 0x%x\n", val);
   6794
   6795	/* Write 1 to parser credits for CFC search request */
   6796	REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x1);
   6797
   6798	/* Wait until PRS register shows 3 packets */
   6799	msleep(10 * factor);
   6800	/* Wait until NIG register shows 1 packet of size 0x10 */
   6801	val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS);
   6802	if (val != 3)
   6803		BNX2X_ERR("PRS timeout  val = 0x%x\n", val);
   6804
   6805	/* clear NIG EOP FIFO */
   6806	for (i = 0; i < 11; i++)
   6807		REG_RD(bp, NIG_REG_INGRESS_EOP_LB_FIFO);
   6808	val = REG_RD(bp, NIG_REG_INGRESS_EOP_LB_EMPTY);
   6809	if (val != 1) {
   6810		BNX2X_ERR("clear of NIG failed\n");
   6811		return -4;
   6812	}
   6813
   6814	/* Reset and init BRB, PRS, NIG */
   6815	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, 0x03);
   6816	msleep(50);
   6817	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0x03);
   6818	msleep(50);
   6819	bnx2x_init_block(bp, BLOCK_BRB1, PHASE_COMMON);
   6820	bnx2x_init_block(bp, BLOCK_PRS, PHASE_COMMON);
   6821	if (!CNIC_SUPPORT(bp))
   6822		/* set NIC mode */
   6823		REG_WR(bp, PRS_REG_NIC_MODE, 1);
   6824
   6825	/* Enable inputs of parser neighbor blocks */
   6826	REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x7fffffff);
   6827	REG_WR(bp, TCM_REG_PRS_IFEN, 0x1);
   6828	REG_WR(bp, CFC_REG_DEBUG0, 0x0);
   6829	REG_WR(bp, NIG_REG_PRS_REQ_IN_EN, 0x1);
   6830
   6831	DP(NETIF_MSG_HW, "done\n");
   6832
   6833	return 0; /* OK */
   6834}
   6835
   6836static void bnx2x_enable_blocks_attention(struct bnx2x *bp)
   6837{
   6838	u32 val;
   6839
   6840	REG_WR(bp, PXP_REG_PXP_INT_MASK_0, 0);
   6841	if (!CHIP_IS_E1x(bp))
   6842		REG_WR(bp, PXP_REG_PXP_INT_MASK_1, 0x40);
   6843	else
   6844		REG_WR(bp, PXP_REG_PXP_INT_MASK_1, 0);
   6845	REG_WR(bp, DORQ_REG_DORQ_INT_MASK, 0);
   6846	REG_WR(bp, CFC_REG_CFC_INT_MASK, 0);
   6847	/*
   6848	 * mask read length error interrupts in brb for parser
   6849	 * (parsing unit and 'checksum and crc' unit)
   6850	 * these errors are legal (PU reads fixed length and CAC can cause
   6851	 * read length error on truncated packets)
   6852	 */
   6853	REG_WR(bp, BRB1_REG_BRB1_INT_MASK, 0xFC00);
   6854	REG_WR(bp, QM_REG_QM_INT_MASK, 0);
   6855	REG_WR(bp, TM_REG_TM_INT_MASK, 0);
   6856	REG_WR(bp, XSDM_REG_XSDM_INT_MASK_0, 0);
   6857	REG_WR(bp, XSDM_REG_XSDM_INT_MASK_1, 0);
   6858	REG_WR(bp, XCM_REG_XCM_INT_MASK, 0);
   6859/*	REG_WR(bp, XSEM_REG_XSEM_INT_MASK_0, 0); */
   6860/*	REG_WR(bp, XSEM_REG_XSEM_INT_MASK_1, 0); */
   6861	REG_WR(bp, USDM_REG_USDM_INT_MASK_0, 0);
   6862	REG_WR(bp, USDM_REG_USDM_INT_MASK_1, 0);
   6863	REG_WR(bp, UCM_REG_UCM_INT_MASK, 0);
   6864/*	REG_WR(bp, USEM_REG_USEM_INT_MASK_0, 0); */
   6865/*	REG_WR(bp, USEM_REG_USEM_INT_MASK_1, 0); */
   6866	REG_WR(bp, GRCBASE_UPB + PB_REG_PB_INT_MASK, 0);
   6867	REG_WR(bp, CSDM_REG_CSDM_INT_MASK_0, 0);
   6868	REG_WR(bp, CSDM_REG_CSDM_INT_MASK_1, 0);
   6869	REG_WR(bp, CCM_REG_CCM_INT_MASK, 0);
   6870/*	REG_WR(bp, CSEM_REG_CSEM_INT_MASK_0, 0); */
   6871/*	REG_WR(bp, CSEM_REG_CSEM_INT_MASK_1, 0); */
   6872
   6873	val = PXP2_PXP2_INT_MASK_0_REG_PGL_CPL_AFT  |
   6874		PXP2_PXP2_INT_MASK_0_REG_PGL_CPL_OF |
   6875		PXP2_PXP2_INT_MASK_0_REG_PGL_PCIE_ATTN;
   6876	if (!CHIP_IS_E1x(bp))
   6877		val |= PXP2_PXP2_INT_MASK_0_REG_PGL_READ_BLOCKED |
   6878			PXP2_PXP2_INT_MASK_0_REG_PGL_WRITE_BLOCKED;
   6879	REG_WR(bp, PXP2_REG_PXP2_INT_MASK_0, val);
   6880
   6881	REG_WR(bp, TSDM_REG_TSDM_INT_MASK_0, 0);
   6882	REG_WR(bp, TSDM_REG_TSDM_INT_MASK_1, 0);
   6883	REG_WR(bp, TCM_REG_TCM_INT_MASK, 0);
   6884/*	REG_WR(bp, TSEM_REG_TSEM_INT_MASK_0, 0); */
   6885
   6886	if (!CHIP_IS_E1x(bp))
   6887		/* enable VFC attentions: bits 11 and 12, bits 31:13 reserved */
   6888		REG_WR(bp, TSEM_REG_TSEM_INT_MASK_1, 0x07ff);
   6889
   6890	REG_WR(bp, CDU_REG_CDU_INT_MASK, 0);
   6891	REG_WR(bp, DMAE_REG_DMAE_INT_MASK, 0);
   6892/*	REG_WR(bp, MISC_REG_MISC_INT_MASK, 0); */
   6893	REG_WR(bp, PBF_REG_PBF_INT_MASK, 0x18);		/* bit 3,4 masked */
   6894}
   6895
   6896static void bnx2x_reset_common(struct bnx2x *bp)
   6897{
   6898	u32 val = 0x1400;
   6899
   6900	/* reset_common */
   6901	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR,
   6902	       0xd3ffff7f);
   6903
   6904	if (CHIP_IS_E3(bp)) {
   6905		val |= MISC_REGISTERS_RESET_REG_2_MSTAT0;
   6906		val |= MISC_REGISTERS_RESET_REG_2_MSTAT1;
   6907	}
   6908
   6909	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, val);
   6910}
   6911
   6912static void bnx2x_setup_dmae(struct bnx2x *bp)
   6913{
   6914	bp->dmae_ready = 0;
   6915	spin_lock_init(&bp->dmae_lock);
   6916}
   6917
   6918static void bnx2x_init_pxp(struct bnx2x *bp)
   6919{
   6920	u16 devctl;
   6921	int r_order, w_order;
   6922
   6923	pcie_capability_read_word(bp->pdev, PCI_EXP_DEVCTL, &devctl);
   6924	DP(NETIF_MSG_HW, "read 0x%x from devctl\n", devctl);
   6925	w_order = ((devctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
   6926	if (bp->mrrs == -1)
   6927		r_order = ((devctl & PCI_EXP_DEVCTL_READRQ) >> 12);
   6928	else {
   6929		DP(NETIF_MSG_HW, "force read order to %d\n", bp->mrrs);
   6930		r_order = bp->mrrs;
   6931	}
   6932
   6933	bnx2x_init_pxp_arb(bp, r_order, w_order);
   6934}
   6935
   6936static void bnx2x_setup_fan_failure_detection(struct bnx2x *bp)
   6937{
   6938	int is_required;
   6939	u32 val;
   6940	int port;
   6941
   6942	if (BP_NOMCP(bp))
   6943		return;
   6944
   6945	is_required = 0;
   6946	val = SHMEM_RD(bp, dev_info.shared_hw_config.config2) &
   6947	      SHARED_HW_CFG_FAN_FAILURE_MASK;
   6948
   6949	if (val == SHARED_HW_CFG_FAN_FAILURE_ENABLED)
   6950		is_required = 1;
   6951
   6952	/*
   6953	 * The fan failure mechanism is usually related to the PHY type since
   6954	 * the power consumption of the board is affected by the PHY. Currently,
   6955	 * fan is required for most designs with SFX7101, BCM8727 and BCM8481.
   6956	 */
   6957	else if (val == SHARED_HW_CFG_FAN_FAILURE_PHY_TYPE)
   6958		for (port = PORT_0; port < PORT_MAX; port++) {
   6959			is_required |=
   6960				bnx2x_fan_failure_det_req(
   6961					bp,
   6962					bp->common.shmem_base,
   6963					bp->common.shmem2_base,
   6964					port);
   6965		}
   6966
   6967	DP(NETIF_MSG_HW, "fan detection setting: %d\n", is_required);
   6968
   6969	if (is_required == 0)
   6970		return;
   6971
   6972	/* Fan failure is indicated by SPIO 5 */
   6973	bnx2x_set_spio(bp, MISC_SPIO_SPIO5, MISC_SPIO_INPUT_HI_Z);
   6974
   6975	/* set to active low mode */
   6976	val = REG_RD(bp, MISC_REG_SPIO_INT);
   6977	val |= (MISC_SPIO_SPIO5 << MISC_SPIO_INT_OLD_SET_POS);
   6978	REG_WR(bp, MISC_REG_SPIO_INT, val);
   6979
   6980	/* enable interrupt to signal the IGU */
   6981	val = REG_RD(bp, MISC_REG_SPIO_EVENT_EN);
   6982	val |= MISC_SPIO_SPIO5;
   6983	REG_WR(bp, MISC_REG_SPIO_EVENT_EN, val);
   6984}
   6985
   6986void bnx2x_pf_disable(struct bnx2x *bp)
   6987{
   6988	u32 val = REG_RD(bp, IGU_REG_PF_CONFIGURATION);
   6989	val &= ~IGU_PF_CONF_FUNC_EN;
   6990
   6991	REG_WR(bp, IGU_REG_PF_CONFIGURATION, val);
   6992	REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 0);
   6993	REG_WR(bp, CFC_REG_WEAK_ENABLE_PF, 0);
   6994}
   6995
   6996static void bnx2x__common_init_phy(struct bnx2x *bp)
   6997{
   6998	u32 shmem_base[2], shmem2_base[2];
   6999	/* Avoid common init in case MFW supports LFA */
   7000	if (SHMEM2_RD(bp, size) >
   7001	    (u32)offsetof(struct shmem2_region, lfa_host_addr[BP_PORT(bp)]))
   7002		return;
   7003	shmem_base[0] =  bp->common.shmem_base;
   7004	shmem2_base[0] = bp->common.shmem2_base;
   7005	if (!CHIP_IS_E1x(bp)) {
   7006		shmem_base[1] =
   7007			SHMEM2_RD(bp, other_shmem_base_addr);
   7008		shmem2_base[1] =
   7009			SHMEM2_RD(bp, other_shmem2_base_addr);
   7010	}
   7011	bnx2x_acquire_phy_lock(bp);
   7012	bnx2x_common_init_phy(bp, shmem_base, shmem2_base,
   7013			      bp->common.chip_id);
   7014	bnx2x_release_phy_lock(bp);
   7015}
   7016
   7017static void bnx2x_config_endianity(struct bnx2x *bp, u32 val)
   7018{
   7019	REG_WR(bp, PXP2_REG_RQ_QM_ENDIAN_M, val);
   7020	REG_WR(bp, PXP2_REG_RQ_TM_ENDIAN_M, val);
   7021	REG_WR(bp, PXP2_REG_RQ_SRC_ENDIAN_M, val);
   7022	REG_WR(bp, PXP2_REG_RQ_CDU_ENDIAN_M, val);
   7023	REG_WR(bp, PXP2_REG_RQ_DBG_ENDIAN_M, val);
   7024
   7025	/* make sure this value is 0 */
   7026	REG_WR(bp, PXP2_REG_RQ_HC_ENDIAN_M, 0);
   7027
   7028	REG_WR(bp, PXP2_REG_RD_QM_SWAP_MODE, val);
   7029	REG_WR(bp, PXP2_REG_RD_TM_SWAP_MODE, val);
   7030	REG_WR(bp, PXP2_REG_RD_SRC_SWAP_MODE, val);
   7031	REG_WR(bp, PXP2_REG_RD_CDURD_SWAP_MODE, val);
   7032}
   7033
   7034static void bnx2x_set_endianity(struct bnx2x *bp)
   7035{
   7036#ifdef __BIG_ENDIAN
   7037	bnx2x_config_endianity(bp, 1);
   7038#else
   7039	bnx2x_config_endianity(bp, 0);
   7040#endif
   7041}
   7042
   7043static void bnx2x_reset_endianity(struct bnx2x *bp)
   7044{
   7045	bnx2x_config_endianity(bp, 0);
   7046}
   7047
   7048/**
   7049 * bnx2x_init_hw_common - initialize the HW at the COMMON phase.
   7050 *
   7051 * @bp:		driver handle
   7052 */
   7053static int bnx2x_init_hw_common(struct bnx2x *bp)
   7054{
   7055	u32 val;
   7056
   7057	DP(NETIF_MSG_HW, "starting common init  func %d\n", BP_ABS_FUNC(bp));
   7058
   7059	/*
   7060	 * take the RESET lock to protect undi_unload flow from accessing
   7061	 * registers while we're resetting the chip
   7062	 */
   7063	bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RESET);
   7064
   7065	bnx2x_reset_common(bp);
   7066	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0xffffffff);
   7067
   7068	val = 0xfffc;
   7069	if (CHIP_IS_E3(bp)) {
   7070		val |= MISC_REGISTERS_RESET_REG_2_MSTAT0;
   7071		val |= MISC_REGISTERS_RESET_REG_2_MSTAT1;
   7072	}
   7073	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, val);
   7074
   7075	bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RESET);
   7076
   7077	bnx2x_init_block(bp, BLOCK_MISC, PHASE_COMMON);
   7078
   7079	if (!CHIP_IS_E1x(bp)) {
   7080		u8 abs_func_id;
   7081
   7082		/**
   7083		 * 4-port mode or 2-port mode we need to turn of master-enable
   7084		 * for everyone, after that, turn it back on for self.
   7085		 * so, we disregard multi-function or not, and always disable
   7086		 * for all functions on the given path, this means 0,2,4,6 for
   7087		 * path 0 and 1,3,5,7 for path 1
   7088		 */
   7089		for (abs_func_id = BP_PATH(bp);
   7090		     abs_func_id < E2_FUNC_MAX*2; abs_func_id += 2) {
   7091			if (abs_func_id == BP_ABS_FUNC(bp)) {
   7092				REG_WR(bp,
   7093				    PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER,
   7094				    1);
   7095				continue;
   7096			}
   7097
   7098			bnx2x_pretend_func(bp, abs_func_id);
   7099			/* clear pf enable */
   7100			bnx2x_pf_disable(bp);
   7101			bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
   7102		}
   7103	}
   7104
   7105	bnx2x_init_block(bp, BLOCK_PXP, PHASE_COMMON);
   7106	if (CHIP_IS_E1(bp)) {
   7107		/* enable HW interrupt from PXP on USDM overflow
   7108		   bit 16 on INT_MASK_0 */
   7109		REG_WR(bp, PXP_REG_PXP_INT_MASK_0, 0);
   7110	}
   7111
   7112	bnx2x_init_block(bp, BLOCK_PXP2, PHASE_COMMON);
   7113	bnx2x_init_pxp(bp);
   7114	bnx2x_set_endianity(bp);
   7115	bnx2x_ilt_init_page_size(bp, INITOP_SET);
   7116
   7117	if (CHIP_REV_IS_FPGA(bp) && CHIP_IS_E1H(bp))
   7118		REG_WR(bp, PXP2_REG_PGL_TAGS_LIMIT, 0x1);
   7119
   7120	/* let the HW do it's magic ... */
   7121	msleep(100);
   7122	/* finish PXP init */
   7123	val = REG_RD(bp, PXP2_REG_RQ_CFG_DONE);
   7124	if (val != 1) {
   7125		BNX2X_ERR("PXP2 CFG failed\n");
   7126		return -EBUSY;
   7127	}
   7128	val = REG_RD(bp, PXP2_REG_RD_INIT_DONE);
   7129	if (val != 1) {
   7130		BNX2X_ERR("PXP2 RD_INIT failed\n");
   7131		return -EBUSY;
   7132	}
   7133
   7134	/* Timers bug workaround E2 only. We need to set the entire ILT to
   7135	 * have entries with value "0" and valid bit on.
   7136	 * This needs to be done by the first PF that is loaded in a path
   7137	 * (i.e. common phase)
   7138	 */
   7139	if (!CHIP_IS_E1x(bp)) {
   7140/* In E2 there is a bug in the timers block that can cause function 6 / 7
   7141 * (i.e. vnic3) to start even if it is marked as "scan-off".
   7142 * This occurs when a different function (func2,3) is being marked
   7143 * as "scan-off". Real-life scenario for example: if a driver is being
   7144 * load-unloaded while func6,7 are down. This will cause the timer to access
   7145 * the ilt, translate to a logical address and send a request to read/write.
   7146 * Since the ilt for the function that is down is not valid, this will cause
   7147 * a translation error which is unrecoverable.
   7148 * The Workaround is intended to make sure that when this happens nothing fatal
   7149 * will occur. The workaround:
   7150 *	1.  First PF driver which loads on a path will:
   7151 *		a.  After taking the chip out of reset, by using pretend,
   7152 *		    it will write "0" to the following registers of
   7153 *		    the other vnics.
   7154 *		    REG_WR(pdev, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 0);
   7155 *		    REG_WR(pdev, CFC_REG_WEAK_ENABLE_PF,0);
   7156 *		    REG_WR(pdev, CFC_REG_STRONG_ENABLE_PF,0);
   7157 *		    And for itself it will write '1' to
   7158 *		    PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER to enable
   7159 *		    dmae-operations (writing to pram for example.)
   7160 *		    note: can be done for only function 6,7 but cleaner this
   7161 *			  way.
   7162 *		b.  Write zero+valid to the entire ILT.
   7163 *		c.  Init the first_timers_ilt_entry, last_timers_ilt_entry of
   7164 *		    VNIC3 (of that port). The range allocated will be the
   7165 *		    entire ILT. This is needed to prevent  ILT range error.
   7166 *	2.  Any PF driver load flow:
   7167 *		a.  ILT update with the physical addresses of the allocated
   7168 *		    logical pages.
   7169 *		b.  Wait 20msec. - note that this timeout is needed to make
   7170 *		    sure there are no requests in one of the PXP internal
   7171 *		    queues with "old" ILT addresses.
   7172 *		c.  PF enable in the PGLC.
   7173 *		d.  Clear the was_error of the PF in the PGLC. (could have
   7174 *		    occurred while driver was down)
   7175 *		e.  PF enable in the CFC (WEAK + STRONG)
   7176 *		f.  Timers scan enable
   7177 *	3.  PF driver unload flow:
   7178 *		a.  Clear the Timers scan_en.
   7179 *		b.  Polling for scan_on=0 for that PF.
   7180 *		c.  Clear the PF enable bit in the PXP.
   7181 *		d.  Clear the PF enable in the CFC (WEAK + STRONG)
   7182 *		e.  Write zero+valid to all ILT entries (The valid bit must
   7183 *		    stay set)
   7184 *		f.  If this is VNIC 3 of a port then also init
   7185 *		    first_timers_ilt_entry to zero and last_timers_ilt_entry
   7186 *		    to the last entry in the ILT.
   7187 *
   7188 *	Notes:
   7189 *	Currently the PF error in the PGLC is non recoverable.
   7190 *	In the future the there will be a recovery routine for this error.
   7191 *	Currently attention is masked.
   7192 *	Having an MCP lock on the load/unload process does not guarantee that
   7193 *	there is no Timer disable during Func6/7 enable. This is because the
   7194 *	Timers scan is currently being cleared by the MCP on FLR.
   7195 *	Step 2.d can be done only for PF6/7 and the driver can also check if
   7196 *	there is error before clearing it. But the flow above is simpler and
   7197 *	more general.
   7198 *	All ILT entries are written by zero+valid and not just PF6/7
   7199 *	ILT entries since in the future the ILT entries allocation for
   7200 *	PF-s might be dynamic.
   7201 */
   7202		struct ilt_client_info ilt_cli;
   7203		struct bnx2x_ilt ilt;
   7204		memset(&ilt_cli, 0, sizeof(struct ilt_client_info));
   7205		memset(&ilt, 0, sizeof(struct bnx2x_ilt));
   7206
   7207		/* initialize dummy TM client */
   7208		ilt_cli.start = 0;
   7209		ilt_cli.end = ILT_NUM_PAGE_ENTRIES - 1;
   7210		ilt_cli.client_num = ILT_CLIENT_TM;
   7211
   7212		/* Step 1: set zeroes to all ilt page entries with valid bit on
   7213		 * Step 2: set the timers first/last ilt entry to point
   7214		 * to the entire range to prevent ILT range error for 3rd/4th
   7215		 * vnic	(this code assumes existence of the vnic)
   7216		 *
   7217		 * both steps performed by call to bnx2x_ilt_client_init_op()
   7218		 * with dummy TM client
   7219		 *
   7220		 * we must use pretend since PXP2_REG_RQ_##blk##_FIRST_ILT
   7221		 * and his brother are split registers
   7222		 */
   7223		bnx2x_pretend_func(bp, (BP_PATH(bp) + 6));
   7224		bnx2x_ilt_client_init_op_ilt(bp, &ilt, &ilt_cli, INITOP_CLEAR);
   7225		bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
   7226
   7227		REG_WR(bp, PXP2_REG_RQ_DRAM_ALIGN, BNX2X_PXP_DRAM_ALIGN);
   7228		REG_WR(bp, PXP2_REG_RQ_DRAM_ALIGN_RD, BNX2X_PXP_DRAM_ALIGN);
   7229		REG_WR(bp, PXP2_REG_RQ_DRAM_ALIGN_SEL, 1);
   7230	}
   7231
   7232	REG_WR(bp, PXP2_REG_RQ_DISABLE_INPUTS, 0);
   7233	REG_WR(bp, PXP2_REG_RD_DISABLE_INPUTS, 0);
   7234
   7235	if (!CHIP_IS_E1x(bp)) {
   7236		int factor = CHIP_REV_IS_EMUL(bp) ? 1000 :
   7237				(CHIP_REV_IS_FPGA(bp) ? 400 : 0);
   7238		bnx2x_init_block(bp, BLOCK_PGLUE_B, PHASE_COMMON);
   7239
   7240		bnx2x_init_block(bp, BLOCK_ATC, PHASE_COMMON);
   7241
   7242		/* let the HW do it's magic ... */
   7243		do {
   7244			msleep(200);
   7245			val = REG_RD(bp, ATC_REG_ATC_INIT_DONE);
   7246		} while (factor-- && (val != 1));
   7247
   7248		if (val != 1) {
   7249			BNX2X_ERR("ATC_INIT failed\n");
   7250			return -EBUSY;
   7251		}
   7252	}
   7253
   7254	bnx2x_init_block(bp, BLOCK_DMAE, PHASE_COMMON);
   7255
   7256	bnx2x_iov_init_dmae(bp);
   7257
   7258	/* clean the DMAE memory */
   7259	bp->dmae_ready = 1;
   7260	bnx2x_init_fill(bp, TSEM_REG_PRAM, 0, 8, 1);
   7261
   7262	bnx2x_init_block(bp, BLOCK_TCM, PHASE_COMMON);
   7263
   7264	bnx2x_init_block(bp, BLOCK_UCM, PHASE_COMMON);
   7265
   7266	bnx2x_init_block(bp, BLOCK_CCM, PHASE_COMMON);
   7267
   7268	bnx2x_init_block(bp, BLOCK_XCM, PHASE_COMMON);
   7269
   7270	bnx2x_read_dmae(bp, XSEM_REG_PASSIVE_BUFFER, 3);
   7271	bnx2x_read_dmae(bp, CSEM_REG_PASSIVE_BUFFER, 3);
   7272	bnx2x_read_dmae(bp, TSEM_REG_PASSIVE_BUFFER, 3);
   7273	bnx2x_read_dmae(bp, USEM_REG_PASSIVE_BUFFER, 3);
   7274
   7275	bnx2x_init_block(bp, BLOCK_QM, PHASE_COMMON);
   7276
   7277	/* QM queues pointers table */
   7278	bnx2x_qm_init_ptr_table(bp, bp->qm_cid_count, INITOP_SET);
   7279
   7280	/* soft reset pulse */
   7281	REG_WR(bp, QM_REG_SOFT_RESET, 1);
   7282	REG_WR(bp, QM_REG_SOFT_RESET, 0);
   7283
   7284	if (CNIC_SUPPORT(bp))
   7285		bnx2x_init_block(bp, BLOCK_TM, PHASE_COMMON);
   7286
   7287	bnx2x_init_block(bp, BLOCK_DORQ, PHASE_COMMON);
   7288
   7289	if (!CHIP_REV_IS_SLOW(bp))
   7290		/* enable hw interrupt from doorbell Q */
   7291		REG_WR(bp, DORQ_REG_DORQ_INT_MASK, 0);
   7292
   7293	bnx2x_init_block(bp, BLOCK_BRB1, PHASE_COMMON);
   7294
   7295	bnx2x_init_block(bp, BLOCK_PRS, PHASE_COMMON);
   7296	REG_WR(bp, PRS_REG_A_PRSU_20, 0xf);
   7297
   7298	if (!CHIP_IS_E1(bp))
   7299		REG_WR(bp, PRS_REG_E1HOV_MODE, bp->path_has_ovlan);
   7300
   7301	if (!CHIP_IS_E1x(bp) && !CHIP_IS_E3B0(bp)) {
   7302		if (IS_MF_AFEX(bp)) {
   7303			/* configure that VNTag and VLAN headers must be
   7304			 * received in afex mode
   7305			 */
   7306			REG_WR(bp, PRS_REG_HDRS_AFTER_BASIC, 0xE);
   7307			REG_WR(bp, PRS_REG_MUST_HAVE_HDRS, 0xA);
   7308			REG_WR(bp, PRS_REG_HDRS_AFTER_TAG_0, 0x6);
   7309			REG_WR(bp, PRS_REG_TAG_ETHERTYPE_0, 0x8926);
   7310			REG_WR(bp, PRS_REG_TAG_LEN_0, 0x4);
   7311		} else {
   7312			/* Bit-map indicating which L2 hdrs may appear
   7313			 * after the basic Ethernet header
   7314			 */
   7315			REG_WR(bp, PRS_REG_HDRS_AFTER_BASIC,
   7316			       bp->path_has_ovlan ? 7 : 6);
   7317		}
   7318	}
   7319
   7320	bnx2x_init_block(bp, BLOCK_TSDM, PHASE_COMMON);
   7321	bnx2x_init_block(bp, BLOCK_CSDM, PHASE_COMMON);
   7322	bnx2x_init_block(bp, BLOCK_USDM, PHASE_COMMON);
   7323	bnx2x_init_block(bp, BLOCK_XSDM, PHASE_COMMON);
   7324
   7325	if (!CHIP_IS_E1x(bp)) {
   7326		/* reset VFC memories */
   7327		REG_WR(bp, TSEM_REG_FAST_MEMORY + VFC_REG_MEMORIES_RST,
   7328			   VFC_MEMORIES_RST_REG_CAM_RST |
   7329			   VFC_MEMORIES_RST_REG_RAM_RST);
   7330		REG_WR(bp, XSEM_REG_FAST_MEMORY + VFC_REG_MEMORIES_RST,
   7331			   VFC_MEMORIES_RST_REG_CAM_RST |
   7332			   VFC_MEMORIES_RST_REG_RAM_RST);
   7333
   7334		msleep(20);
   7335	}
   7336
   7337	bnx2x_init_block(bp, BLOCK_TSEM, PHASE_COMMON);
   7338	bnx2x_init_block(bp, BLOCK_USEM, PHASE_COMMON);
   7339	bnx2x_init_block(bp, BLOCK_CSEM, PHASE_COMMON);
   7340	bnx2x_init_block(bp, BLOCK_XSEM, PHASE_COMMON);
   7341
   7342	/* sync semi rtc */
   7343	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR,
   7344	       0x80000000);
   7345	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET,
   7346	       0x80000000);
   7347
   7348	bnx2x_init_block(bp, BLOCK_UPB, PHASE_COMMON);
   7349	bnx2x_init_block(bp, BLOCK_XPB, PHASE_COMMON);
   7350	bnx2x_init_block(bp, BLOCK_PBF, PHASE_COMMON);
   7351
   7352	if (!CHIP_IS_E1x(bp)) {
   7353		if (IS_MF_AFEX(bp)) {
   7354			/* configure that VNTag and VLAN headers must be
   7355			 * sent in afex mode
   7356			 */
   7357			REG_WR(bp, PBF_REG_HDRS_AFTER_BASIC, 0xE);
   7358			REG_WR(bp, PBF_REG_MUST_HAVE_HDRS, 0xA);
   7359			REG_WR(bp, PBF_REG_HDRS_AFTER_TAG_0, 0x6);
   7360			REG_WR(bp, PBF_REG_TAG_ETHERTYPE_0, 0x8926);
   7361			REG_WR(bp, PBF_REG_TAG_LEN_0, 0x4);
   7362		} else {
   7363			REG_WR(bp, PBF_REG_HDRS_AFTER_BASIC,
   7364			       bp->path_has_ovlan ? 7 : 6);
   7365		}
   7366	}
   7367
   7368	REG_WR(bp, SRC_REG_SOFT_RST, 1);
   7369
   7370	bnx2x_init_block(bp, BLOCK_SRC, PHASE_COMMON);
   7371
   7372	if (CNIC_SUPPORT(bp)) {
   7373		REG_WR(bp, SRC_REG_KEYSEARCH_0, 0x63285672);
   7374		REG_WR(bp, SRC_REG_KEYSEARCH_1, 0x24b8f2cc);
   7375		REG_WR(bp, SRC_REG_KEYSEARCH_2, 0x223aef9b);
   7376		REG_WR(bp, SRC_REG_KEYSEARCH_3, 0x26001e3a);
   7377		REG_WR(bp, SRC_REG_KEYSEARCH_4, 0x7ae91116);
   7378		REG_WR(bp, SRC_REG_KEYSEARCH_5, 0x5ce5230b);
   7379		REG_WR(bp, SRC_REG_KEYSEARCH_6, 0x298d8adf);
   7380		REG_WR(bp, SRC_REG_KEYSEARCH_7, 0x6eb0ff09);
   7381		REG_WR(bp, SRC_REG_KEYSEARCH_8, 0x1830f82f);
   7382		REG_WR(bp, SRC_REG_KEYSEARCH_9, 0x01e46be7);
   7383	}
   7384	REG_WR(bp, SRC_REG_SOFT_RST, 0);
   7385
   7386	if (sizeof(union cdu_context) != 1024)
   7387		/* we currently assume that a context is 1024 bytes */
   7388		dev_alert(&bp->pdev->dev,
   7389			  "please adjust the size of cdu_context(%ld)\n",
   7390			  (long)sizeof(union cdu_context));
   7391
   7392	bnx2x_init_block(bp, BLOCK_CDU, PHASE_COMMON);
   7393	val = (4 << 24) + (0 << 12) + 1024;
   7394	REG_WR(bp, CDU_REG_CDU_GLOBAL_PARAMS, val);
   7395
   7396	bnx2x_init_block(bp, BLOCK_CFC, PHASE_COMMON);
   7397	REG_WR(bp, CFC_REG_INIT_REG, 0x7FF);
   7398	/* enable context validation interrupt from CFC */
   7399	REG_WR(bp, CFC_REG_CFC_INT_MASK, 0);
   7400
   7401	/* set the thresholds to prevent CFC/CDU race */
   7402	REG_WR(bp, CFC_REG_DEBUG0, 0x20020000);
   7403
   7404	bnx2x_init_block(bp, BLOCK_HC, PHASE_COMMON);
   7405
   7406	if (!CHIP_IS_E1x(bp) && BP_NOMCP(bp))
   7407		REG_WR(bp, IGU_REG_RESET_MEMORIES, 0x36);
   7408
   7409	bnx2x_init_block(bp, BLOCK_IGU, PHASE_COMMON);
   7410	bnx2x_init_block(bp, BLOCK_MISC_AEU, PHASE_COMMON);
   7411
   7412	/* Reset PCIE errors for debug */
   7413	REG_WR(bp, 0x2814, 0xffffffff);
   7414	REG_WR(bp, 0x3820, 0xffffffff);
   7415
   7416	if (!CHIP_IS_E1x(bp)) {
   7417		REG_WR(bp, PCICFG_OFFSET + PXPCS_TL_CONTROL_5,
   7418			   (PXPCS_TL_CONTROL_5_ERR_UNSPPORT1 |
   7419				PXPCS_TL_CONTROL_5_ERR_UNSPPORT));
   7420		REG_WR(bp, PCICFG_OFFSET + PXPCS_TL_FUNC345_STAT,
   7421			   (PXPCS_TL_FUNC345_STAT_ERR_UNSPPORT4 |
   7422				PXPCS_TL_FUNC345_STAT_ERR_UNSPPORT3 |
   7423				PXPCS_TL_FUNC345_STAT_ERR_UNSPPORT2));
   7424		REG_WR(bp, PCICFG_OFFSET + PXPCS_TL_FUNC678_STAT,
   7425			   (PXPCS_TL_FUNC678_STAT_ERR_UNSPPORT7 |
   7426				PXPCS_TL_FUNC678_STAT_ERR_UNSPPORT6 |
   7427				PXPCS_TL_FUNC678_STAT_ERR_UNSPPORT5));
   7428	}
   7429
   7430	bnx2x_init_block(bp, BLOCK_NIG, PHASE_COMMON);
   7431	if (!CHIP_IS_E1(bp)) {
   7432		/* in E3 this done in per-port section */
   7433		if (!CHIP_IS_E3(bp))
   7434			REG_WR(bp, NIG_REG_LLH_MF_MODE, IS_MF(bp));
   7435	}
   7436	if (CHIP_IS_E1H(bp))
   7437		/* not applicable for E2 (and above ...) */
   7438		REG_WR(bp, NIG_REG_LLH_E1HOV_MODE, IS_MF_SD(bp));
   7439
   7440	if (CHIP_REV_IS_SLOW(bp))
   7441		msleep(200);
   7442
   7443	/* finish CFC init */
   7444	val = reg_poll(bp, CFC_REG_LL_INIT_DONE, 1, 100, 10);
   7445	if (val != 1) {
   7446		BNX2X_ERR("CFC LL_INIT failed\n");
   7447		return -EBUSY;
   7448	}
   7449	val = reg_poll(bp, CFC_REG_AC_INIT_DONE, 1, 100, 10);
   7450	if (val != 1) {
   7451		BNX2X_ERR("CFC AC_INIT failed\n");
   7452		return -EBUSY;
   7453	}
   7454	val = reg_poll(bp, CFC_REG_CAM_INIT_DONE, 1, 100, 10);
   7455	if (val != 1) {
   7456		BNX2X_ERR("CFC CAM_INIT failed\n");
   7457		return -EBUSY;
   7458	}
   7459	REG_WR(bp, CFC_REG_DEBUG0, 0);
   7460
   7461	if (CHIP_IS_E1(bp)) {
   7462		/* read NIG statistic
   7463		   to see if this is our first up since powerup */
   7464		bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2);
   7465		val = *bnx2x_sp(bp, wb_data[0]);
   7466
   7467		/* do internal memory self test */
   7468		if ((val == 0) && bnx2x_int_mem_test(bp)) {
   7469			BNX2X_ERR("internal mem self test failed\n");
   7470			return -EBUSY;
   7471		}
   7472	}
   7473
   7474	bnx2x_setup_fan_failure_detection(bp);
   7475
   7476	/* clear PXP2 attentions */
   7477	REG_RD(bp, PXP2_REG_PXP2_INT_STS_CLR_0);
   7478
   7479	bnx2x_enable_blocks_attention(bp);
   7480	bnx2x_enable_blocks_parity(bp);
   7481
   7482	if (!BP_NOMCP(bp)) {
   7483		if (CHIP_IS_E1x(bp))
   7484			bnx2x__common_init_phy(bp);
   7485	} else
   7486		BNX2X_ERR("Bootcode is missing - can not initialize link\n");
   7487
   7488	if (SHMEM2_HAS(bp, netproc_fw_ver))
   7489		SHMEM2_WR(bp, netproc_fw_ver, REG_RD(bp, XSEM_REG_PRAM));
   7490
   7491	return 0;
   7492}
   7493
   7494/**
   7495 * bnx2x_init_hw_common_chip - init HW at the COMMON_CHIP phase.
   7496 *
   7497 * @bp:		driver handle
   7498 */
   7499static int bnx2x_init_hw_common_chip(struct bnx2x *bp)
   7500{
   7501	int rc = bnx2x_init_hw_common(bp);
   7502
   7503	if (rc)
   7504		return rc;
   7505
   7506	/* In E2 2-PORT mode, same ext phy is used for the two paths */
   7507	if (!BP_NOMCP(bp))
   7508		bnx2x__common_init_phy(bp);
   7509
   7510	return 0;
   7511}
   7512
   7513static int bnx2x_init_hw_port(struct bnx2x *bp)
   7514{
   7515	int port = BP_PORT(bp);
   7516	int init_phase = port ? PHASE_PORT1 : PHASE_PORT0;
   7517	u32 low, high;
   7518	u32 val, reg;
   7519
   7520	DP(NETIF_MSG_HW, "starting port init  port %d\n", port);
   7521
   7522	REG_WR(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0);
   7523
   7524	bnx2x_init_block(bp, BLOCK_MISC, init_phase);
   7525	bnx2x_init_block(bp, BLOCK_PXP, init_phase);
   7526	bnx2x_init_block(bp, BLOCK_PXP2, init_phase);
   7527
   7528	/* Timers bug workaround: disables the pf_master bit in pglue at
   7529	 * common phase, we need to enable it here before any dmae access are
   7530	 * attempted. Therefore we manually added the enable-master to the
   7531	 * port phase (it also happens in the function phase)
   7532	 */
   7533	if (!CHIP_IS_E1x(bp))
   7534		REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 1);
   7535
   7536	bnx2x_init_block(bp, BLOCK_ATC, init_phase);
   7537	bnx2x_init_block(bp, BLOCK_DMAE, init_phase);
   7538	bnx2x_init_block(bp, BLOCK_PGLUE_B, init_phase);
   7539	bnx2x_init_block(bp, BLOCK_QM, init_phase);
   7540
   7541	bnx2x_init_block(bp, BLOCK_TCM, init_phase);
   7542	bnx2x_init_block(bp, BLOCK_UCM, init_phase);
   7543	bnx2x_init_block(bp, BLOCK_CCM, init_phase);
   7544	bnx2x_init_block(bp, BLOCK_XCM, init_phase);
   7545
   7546	/* QM cid (connection) count */
   7547	bnx2x_qm_init_cid_count(bp, bp->qm_cid_count, INITOP_SET);
   7548
   7549	if (CNIC_SUPPORT(bp)) {
   7550		bnx2x_init_block(bp, BLOCK_TM, init_phase);
   7551		REG_WR(bp, TM_REG_LIN0_SCAN_TIME + port*4, 20);
   7552		REG_WR(bp, TM_REG_LIN0_MAX_ACTIVE_CID + port*4, 31);
   7553	}
   7554
   7555	bnx2x_init_block(bp, BLOCK_DORQ, init_phase);
   7556
   7557	bnx2x_init_block(bp, BLOCK_BRB1, init_phase);
   7558
   7559	if (CHIP_IS_E1(bp) || CHIP_IS_E1H(bp)) {
   7560
   7561		if (IS_MF(bp))
   7562			low = ((bp->flags & ONE_PORT_FLAG) ? 160 : 246);
   7563		else if (bp->dev->mtu > 4096) {
   7564			if (bp->flags & ONE_PORT_FLAG)
   7565				low = 160;
   7566			else {
   7567				val = bp->dev->mtu;
   7568				/* (24*1024 + val*4)/256 */
   7569				low = 96 + (val/64) +
   7570						((val % 64) ? 1 : 0);
   7571			}
   7572		} else
   7573			low = ((bp->flags & ONE_PORT_FLAG) ? 80 : 160);
   7574		high = low + 56;	/* 14*1024/256 */
   7575		REG_WR(bp, BRB1_REG_PAUSE_LOW_THRESHOLD_0 + port*4, low);
   7576		REG_WR(bp, BRB1_REG_PAUSE_HIGH_THRESHOLD_0 + port*4, high);
   7577	}
   7578
   7579	if (CHIP_MODE_IS_4_PORT(bp))
   7580		REG_WR(bp, (BP_PORT(bp) ?
   7581			    BRB1_REG_MAC_GUARANTIED_1 :
   7582			    BRB1_REG_MAC_GUARANTIED_0), 40);
   7583
   7584	bnx2x_init_block(bp, BLOCK_PRS, init_phase);
   7585	if (CHIP_IS_E3B0(bp)) {
   7586		if (IS_MF_AFEX(bp)) {
   7587			/* configure headers for AFEX mode */
   7588			REG_WR(bp, BP_PORT(bp) ?
   7589			       PRS_REG_HDRS_AFTER_BASIC_PORT_1 :
   7590			       PRS_REG_HDRS_AFTER_BASIC_PORT_0, 0xE);
   7591			REG_WR(bp, BP_PORT(bp) ?
   7592			       PRS_REG_HDRS_AFTER_TAG_0_PORT_1 :
   7593			       PRS_REG_HDRS_AFTER_TAG_0_PORT_0, 0x6);
   7594			REG_WR(bp, BP_PORT(bp) ?
   7595			       PRS_REG_MUST_HAVE_HDRS_PORT_1 :
   7596			       PRS_REG_MUST_HAVE_HDRS_PORT_0, 0xA);
   7597		} else {
   7598			/* Ovlan exists only if we are in multi-function +
   7599			 * switch-dependent mode, in switch-independent there
   7600			 * is no ovlan headers
   7601			 */
   7602			REG_WR(bp, BP_PORT(bp) ?
   7603			       PRS_REG_HDRS_AFTER_BASIC_PORT_1 :
   7604			       PRS_REG_HDRS_AFTER_BASIC_PORT_0,
   7605			       (bp->path_has_ovlan ? 7 : 6));
   7606		}
   7607	}
   7608
   7609	bnx2x_init_block(bp, BLOCK_TSDM, init_phase);
   7610	bnx2x_init_block(bp, BLOCK_CSDM, init_phase);
   7611	bnx2x_init_block(bp, BLOCK_USDM, init_phase);
   7612	bnx2x_init_block(bp, BLOCK_XSDM, init_phase);
   7613
   7614	bnx2x_init_block(bp, BLOCK_TSEM, init_phase);
   7615	bnx2x_init_block(bp, BLOCK_USEM, init_phase);
   7616	bnx2x_init_block(bp, BLOCK_CSEM, init_phase);
   7617	bnx2x_init_block(bp, BLOCK_XSEM, init_phase);
   7618
   7619	bnx2x_init_block(bp, BLOCK_UPB, init_phase);
   7620	bnx2x_init_block(bp, BLOCK_XPB, init_phase);
   7621
   7622	bnx2x_init_block(bp, BLOCK_PBF, init_phase);
   7623
   7624	if (CHIP_IS_E1x(bp)) {
   7625		/* configure PBF to work without PAUSE mtu 9000 */
   7626		REG_WR(bp, PBF_REG_P0_PAUSE_ENABLE + port*4, 0);
   7627
   7628		/* update threshold */
   7629		REG_WR(bp, PBF_REG_P0_ARB_THRSH + port*4, (9040/16));
   7630		/* update init credit */
   7631		REG_WR(bp, PBF_REG_P0_INIT_CRD + port*4, (9040/16) + 553 - 22);
   7632
   7633		/* probe changes */
   7634		REG_WR(bp, PBF_REG_INIT_P0 + port*4, 1);
   7635		udelay(50);
   7636		REG_WR(bp, PBF_REG_INIT_P0 + port*4, 0);
   7637	}
   7638
   7639	if (CNIC_SUPPORT(bp))
   7640		bnx2x_init_block(bp, BLOCK_SRC, init_phase);
   7641
   7642	bnx2x_init_block(bp, BLOCK_CDU, init_phase);
   7643	bnx2x_init_block(bp, BLOCK_CFC, init_phase);
   7644
   7645	if (CHIP_IS_E1(bp)) {
   7646		REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, 0);
   7647		REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, 0);
   7648	}
   7649	bnx2x_init_block(bp, BLOCK_HC, init_phase);
   7650
   7651	bnx2x_init_block(bp, BLOCK_IGU, init_phase);
   7652
   7653	bnx2x_init_block(bp, BLOCK_MISC_AEU, init_phase);
   7654	/* init aeu_mask_attn_func_0/1:
   7655	 *  - SF mode: bits 3-7 are masked. Only bits 0-2 are in use
   7656	 *  - MF mode: bit 3 is masked. Bits 0-2 are in use as in SF
   7657	 *             bits 4-7 are used for "per vn group attention" */
   7658	val = IS_MF(bp) ? 0xF7 : 0x7;
   7659	/* Enable DCBX attention for all but E1 */
   7660	val |= CHIP_IS_E1(bp) ? 0 : 0x10;
   7661	REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, val);
   7662
   7663	/* SCPAD_PARITY should NOT trigger close the gates */
   7664	reg = port ? MISC_REG_AEU_ENABLE4_NIG_1 : MISC_REG_AEU_ENABLE4_NIG_0;
   7665	REG_WR(bp, reg,
   7666	       REG_RD(bp, reg) &
   7667	       ~AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY);
   7668
   7669	reg = port ? MISC_REG_AEU_ENABLE4_PXP_1 : MISC_REG_AEU_ENABLE4_PXP_0;
   7670	REG_WR(bp, reg,
   7671	       REG_RD(bp, reg) &
   7672	       ~AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY);
   7673
   7674	bnx2x_init_block(bp, BLOCK_NIG, init_phase);
   7675
   7676	if (!CHIP_IS_E1x(bp)) {
   7677		/* Bit-map indicating which L2 hdrs may appear after the
   7678		 * basic Ethernet header
   7679		 */
   7680		if (IS_MF_AFEX(bp))
   7681			REG_WR(bp, BP_PORT(bp) ?
   7682			       NIG_REG_P1_HDRS_AFTER_BASIC :
   7683			       NIG_REG_P0_HDRS_AFTER_BASIC, 0xE);
   7684		else
   7685			REG_WR(bp, BP_PORT(bp) ?
   7686			       NIG_REG_P1_HDRS_AFTER_BASIC :
   7687			       NIG_REG_P0_HDRS_AFTER_BASIC,
   7688			       IS_MF_SD(bp) ? 7 : 6);
   7689
   7690		if (CHIP_IS_E3(bp))
   7691			REG_WR(bp, BP_PORT(bp) ?
   7692				   NIG_REG_LLH1_MF_MODE :
   7693				   NIG_REG_LLH_MF_MODE, IS_MF(bp));
   7694	}
   7695	if (!CHIP_IS_E3(bp))
   7696		REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 1);
   7697
   7698	if (!CHIP_IS_E1(bp)) {
   7699		/* 0x2 disable mf_ov, 0x1 enable */
   7700		REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK_MF + port*4,
   7701		       (IS_MF_SD(bp) ? 0x1 : 0x2));
   7702
   7703		if (!CHIP_IS_E1x(bp)) {
   7704			val = 0;
   7705			switch (bp->mf_mode) {
   7706			case MULTI_FUNCTION_SD:
   7707				val = 1;
   7708				break;
   7709			case MULTI_FUNCTION_SI:
   7710			case MULTI_FUNCTION_AFEX:
   7711				val = 2;
   7712				break;
   7713			}
   7714
   7715			REG_WR(bp, (BP_PORT(bp) ? NIG_REG_LLH1_CLS_TYPE :
   7716						  NIG_REG_LLH0_CLS_TYPE), val);
   7717		}
   7718		{
   7719			REG_WR(bp, NIG_REG_LLFC_ENABLE_0 + port*4, 0);
   7720			REG_WR(bp, NIG_REG_LLFC_OUT_EN_0 + port*4, 0);
   7721			REG_WR(bp, NIG_REG_PAUSE_ENABLE_0 + port*4, 1);
   7722		}
   7723	}
   7724
   7725	/* If SPIO5 is set to generate interrupts, enable it for this port */
   7726	val = REG_RD(bp, MISC_REG_SPIO_EVENT_EN);
   7727	if (val & MISC_SPIO_SPIO5) {
   7728		u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
   7729				       MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0);
   7730		val = REG_RD(bp, reg_addr);
   7731		val |= AEU_INPUTS_ATTN_BITS_SPIO5;
   7732		REG_WR(bp, reg_addr, val);
   7733	}
   7734
   7735	if (CHIP_IS_E3B0(bp))
   7736		bp->flags |= PTP_SUPPORTED;
   7737
   7738	return 0;
   7739}
   7740
   7741static void bnx2x_ilt_wr(struct bnx2x *bp, u32 index, dma_addr_t addr)
   7742{
   7743	int reg;
   7744	u32 wb_write[2];
   7745
   7746	if (CHIP_IS_E1(bp))
   7747		reg = PXP2_REG_RQ_ONCHIP_AT + index*8;
   7748	else
   7749		reg = PXP2_REG_RQ_ONCHIP_AT_B0 + index*8;
   7750
   7751	wb_write[0] = ONCHIP_ADDR1(addr);
   7752	wb_write[1] = ONCHIP_ADDR2(addr);
   7753	REG_WR_DMAE(bp, reg, wb_write, 2);
   7754}
   7755
   7756void bnx2x_igu_clear_sb_gen(struct bnx2x *bp, u8 func, u8 idu_sb_id, bool is_pf)
   7757{
   7758	u32 data, ctl, cnt = 100;
   7759	u32 igu_addr_data = IGU_REG_COMMAND_REG_32LSB_DATA;
   7760	u32 igu_addr_ctl = IGU_REG_COMMAND_REG_CTRL;
   7761	u32 igu_addr_ack = IGU_REG_CSTORM_TYPE_0_SB_CLEANUP + (idu_sb_id/32)*4;
   7762	u32 sb_bit =  1 << (idu_sb_id%32);
   7763	u32 func_encode = func | (is_pf ? 1 : 0) << IGU_FID_ENCODE_IS_PF_SHIFT;
   7764	u32 addr_encode = IGU_CMD_E2_PROD_UPD_BASE + idu_sb_id;
   7765
   7766	/* Not supported in BC mode */
   7767	if (CHIP_INT_MODE_IS_BC(bp))
   7768		return;
   7769
   7770	data = (IGU_USE_REGISTER_cstorm_type_0_sb_cleanup
   7771			<< IGU_REGULAR_CLEANUP_TYPE_SHIFT)	|
   7772		IGU_REGULAR_CLEANUP_SET				|
   7773		IGU_REGULAR_BCLEANUP;
   7774
   7775	ctl = addr_encode << IGU_CTRL_REG_ADDRESS_SHIFT		|
   7776	      func_encode << IGU_CTRL_REG_FID_SHIFT		|
   7777	      IGU_CTRL_CMD_TYPE_WR << IGU_CTRL_REG_TYPE_SHIFT;
   7778
   7779	DP(NETIF_MSG_HW, "write 0x%08x to IGU(via GRC) addr 0x%x\n",
   7780			 data, igu_addr_data);
   7781	REG_WR(bp, igu_addr_data, data);
   7782	barrier();
   7783	DP(NETIF_MSG_HW, "write 0x%08x to IGU(via GRC) addr 0x%x\n",
   7784			  ctl, igu_addr_ctl);
   7785	REG_WR(bp, igu_addr_ctl, ctl);
   7786	barrier();
   7787
   7788	/* wait for clean up to finish */
   7789	while (!(REG_RD(bp, igu_addr_ack) & sb_bit) && --cnt)
   7790		msleep(20);
   7791
   7792	if (!(REG_RD(bp, igu_addr_ack) & sb_bit)) {
   7793		DP(NETIF_MSG_HW,
   7794		   "Unable to finish IGU cleanup: idu_sb_id %d offset %d bit %d (cnt %d)\n",
   7795			  idu_sb_id, idu_sb_id/32, idu_sb_id%32, cnt);
   7796	}
   7797}
   7798
   7799static void bnx2x_igu_clear_sb(struct bnx2x *bp, u8 idu_sb_id)
   7800{
   7801	bnx2x_igu_clear_sb_gen(bp, BP_FUNC(bp), idu_sb_id, true /*PF*/);
   7802}
   7803
   7804static void bnx2x_clear_func_ilt(struct bnx2x *bp, u32 func)
   7805{
   7806	u32 i, base = FUNC_ILT_BASE(func);
   7807	for (i = base; i < base + ILT_PER_FUNC; i++)
   7808		bnx2x_ilt_wr(bp, i, 0);
   7809}
   7810
   7811static void bnx2x_init_searcher(struct bnx2x *bp)
   7812{
   7813	int port = BP_PORT(bp);
   7814	bnx2x_src_init_t2(bp, bp->t2, bp->t2_mapping, SRC_CONN_NUM);
   7815	/* T1 hash bits value determines the T1 number of entries */
   7816	REG_WR(bp, SRC_REG_NUMBER_HASH_BITS0 + port*4, SRC_HASH_BITS);
   7817}
   7818
   7819static inline int bnx2x_func_switch_update(struct bnx2x *bp, int suspend)
   7820{
   7821	int rc;
   7822	struct bnx2x_func_state_params func_params = {NULL};
   7823	struct bnx2x_func_switch_update_params *switch_update_params =
   7824		&func_params.params.switch_update;
   7825
   7826	/* Prepare parameters for function state transitions */
   7827	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
   7828	__set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
   7829
   7830	func_params.f_obj = &bp->func_obj;
   7831	func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
   7832
   7833	/* Function parameters */
   7834	__set_bit(BNX2X_F_UPDATE_TX_SWITCH_SUSPEND_CHNG,
   7835		  &switch_update_params->changes);
   7836	if (suspend)
   7837		__set_bit(BNX2X_F_UPDATE_TX_SWITCH_SUSPEND,
   7838			  &switch_update_params->changes);
   7839
   7840	rc = bnx2x_func_state_change(bp, &func_params);
   7841
   7842	return rc;
   7843}
   7844
   7845static int bnx2x_reset_nic_mode(struct bnx2x *bp)
   7846{
   7847	int rc, i, port = BP_PORT(bp);
   7848	int vlan_en = 0, mac_en[NUM_MACS];
   7849
   7850	/* Close input from network */
   7851	if (bp->mf_mode == SINGLE_FUNCTION) {
   7852		bnx2x_set_rx_filter(&bp->link_params, 0);
   7853	} else {
   7854		vlan_en = REG_RD(bp, port ? NIG_REG_LLH1_FUNC_EN :
   7855				   NIG_REG_LLH0_FUNC_EN);
   7856		REG_WR(bp, port ? NIG_REG_LLH1_FUNC_EN :
   7857			  NIG_REG_LLH0_FUNC_EN, 0);
   7858		for (i = 0; i < NUM_MACS; i++) {
   7859			mac_en[i] = REG_RD(bp, port ?
   7860					     (NIG_REG_LLH1_FUNC_MEM_ENABLE +
   7861					      4 * i) :
   7862					     (NIG_REG_LLH0_FUNC_MEM_ENABLE +
   7863					      4 * i));
   7864			REG_WR(bp, port ? (NIG_REG_LLH1_FUNC_MEM_ENABLE +
   7865					      4 * i) :
   7866				  (NIG_REG_LLH0_FUNC_MEM_ENABLE + 4 * i), 0);
   7867		}
   7868	}
   7869
   7870	/* Close BMC to host */
   7871	REG_WR(bp, port ? NIG_REG_P0_TX_MNG_HOST_ENABLE :
   7872	       NIG_REG_P1_TX_MNG_HOST_ENABLE, 0);
   7873
   7874	/* Suspend Tx switching to the PF. Completion of this ramrod
   7875	 * further guarantees that all the packets of that PF / child
   7876	 * VFs in BRB were processed by the Parser, so it is safe to
   7877	 * change the NIC_MODE register.
   7878	 */
   7879	rc = bnx2x_func_switch_update(bp, 1);
   7880	if (rc) {
   7881		BNX2X_ERR("Can't suspend tx-switching!\n");
   7882		return rc;
   7883	}
   7884
   7885	/* Change NIC_MODE register */
   7886	REG_WR(bp, PRS_REG_NIC_MODE, 0);
   7887
   7888	/* Open input from network */
   7889	if (bp->mf_mode == SINGLE_FUNCTION) {
   7890		bnx2x_set_rx_filter(&bp->link_params, 1);
   7891	} else {
   7892		REG_WR(bp, port ? NIG_REG_LLH1_FUNC_EN :
   7893			  NIG_REG_LLH0_FUNC_EN, vlan_en);
   7894		for (i = 0; i < NUM_MACS; i++) {
   7895			REG_WR(bp, port ? (NIG_REG_LLH1_FUNC_MEM_ENABLE +
   7896					      4 * i) :
   7897				  (NIG_REG_LLH0_FUNC_MEM_ENABLE + 4 * i),
   7898				  mac_en[i]);
   7899		}
   7900	}
   7901
   7902	/* Enable BMC to host */
   7903	REG_WR(bp, port ? NIG_REG_P0_TX_MNG_HOST_ENABLE :
   7904	       NIG_REG_P1_TX_MNG_HOST_ENABLE, 1);
   7905
   7906	/* Resume Tx switching to the PF */
   7907	rc = bnx2x_func_switch_update(bp, 0);
   7908	if (rc) {
   7909		BNX2X_ERR("Can't resume tx-switching!\n");
   7910		return rc;
   7911	}
   7912
   7913	DP(NETIF_MSG_IFUP, "NIC MODE disabled\n");
   7914	return 0;
   7915}
   7916
   7917int bnx2x_init_hw_func_cnic(struct bnx2x *bp)
   7918{
   7919	int rc;
   7920
   7921	bnx2x_ilt_init_op_cnic(bp, INITOP_SET);
   7922
   7923	if (CONFIGURE_NIC_MODE(bp)) {
   7924		/* Configure searcher as part of function hw init */
   7925		bnx2x_init_searcher(bp);
   7926
   7927		/* Reset NIC mode */
   7928		rc = bnx2x_reset_nic_mode(bp);
   7929		if (rc)
   7930			BNX2X_ERR("Can't change NIC mode!\n");
   7931		return rc;
   7932	}
   7933
   7934	return 0;
   7935}
   7936
   7937/* previous driver DMAE transaction may have occurred when pre-boot stage ended
   7938 * and boot began, or when kdump kernel was loaded. Either case would invalidate
   7939 * the addresses of the transaction, resulting in was-error bit set in the pci
   7940 * causing all hw-to-host pcie transactions to timeout. If this happened we want
   7941 * to clear the interrupt which detected this from the pglueb and the was done
   7942 * bit
   7943 */
   7944static void bnx2x_clean_pglue_errors(struct bnx2x *bp)
   7945{
   7946	if (!CHIP_IS_E1x(bp))
   7947		REG_WR(bp, PGLUE_B_REG_WAS_ERROR_PF_7_0_CLR,
   7948		       1 << BP_ABS_FUNC(bp));
   7949}
   7950
   7951static int bnx2x_init_hw_func(struct bnx2x *bp)
   7952{
   7953	int port = BP_PORT(bp);
   7954	int func = BP_FUNC(bp);
   7955	int init_phase = PHASE_PF0 + func;
   7956	struct bnx2x_ilt *ilt = BP_ILT(bp);
   7957	u16 cdu_ilt_start;
   7958	u32 addr, val;
   7959	u32 main_mem_base, main_mem_size, main_mem_prty_clr;
   7960	int i, main_mem_width, rc;
   7961
   7962	DP(NETIF_MSG_HW, "starting func init  func %d\n", func);
   7963
   7964	/* FLR cleanup - hmmm */
   7965	if (!CHIP_IS_E1x(bp)) {
   7966		rc = bnx2x_pf_flr_clnup(bp);
   7967		if (rc) {
   7968			bnx2x_fw_dump(bp);
   7969			return rc;
   7970		}
   7971	}
   7972
   7973	/* set MSI reconfigure capability */
   7974	if (bp->common.int_block == INT_BLOCK_HC) {
   7975		addr = (port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0);
   7976		val = REG_RD(bp, addr);
   7977		val |= HC_CONFIG_0_REG_MSI_ATTN_EN_0;
   7978		REG_WR(bp, addr, val);
   7979	}
   7980
   7981	bnx2x_init_block(bp, BLOCK_PXP, init_phase);
   7982	bnx2x_init_block(bp, BLOCK_PXP2, init_phase);
   7983
   7984	ilt = BP_ILT(bp);
   7985	cdu_ilt_start = ilt->clients[ILT_CLIENT_CDU].start;
   7986
   7987	if (IS_SRIOV(bp))
   7988		cdu_ilt_start += BNX2X_FIRST_VF_CID/ILT_PAGE_CIDS;
   7989	cdu_ilt_start = bnx2x_iov_init_ilt(bp, cdu_ilt_start);
   7990
   7991	/* since BNX2X_FIRST_VF_CID > 0 the PF L2 cids precedes
   7992	 * those of the VFs, so start line should be reset
   7993	 */
   7994	cdu_ilt_start = ilt->clients[ILT_CLIENT_CDU].start;
   7995	for (i = 0; i < L2_ILT_LINES(bp); i++) {
   7996		ilt->lines[cdu_ilt_start + i].page = bp->context[i].vcxt;
   7997		ilt->lines[cdu_ilt_start + i].page_mapping =
   7998			bp->context[i].cxt_mapping;
   7999		ilt->lines[cdu_ilt_start + i].size = bp->context[i].size;
   8000	}
   8001
   8002	bnx2x_ilt_init_op(bp, INITOP_SET);
   8003
   8004	if (!CONFIGURE_NIC_MODE(bp)) {
   8005		bnx2x_init_searcher(bp);
   8006		REG_WR(bp, PRS_REG_NIC_MODE, 0);
   8007		DP(NETIF_MSG_IFUP, "NIC MODE disabled\n");
   8008	} else {
   8009		/* Set NIC mode */
   8010		REG_WR(bp, PRS_REG_NIC_MODE, 1);
   8011		DP(NETIF_MSG_IFUP, "NIC MODE configured\n");
   8012	}
   8013
   8014	if (!CHIP_IS_E1x(bp)) {
   8015		u32 pf_conf = IGU_PF_CONF_FUNC_EN;
   8016
   8017		/* Turn on a single ISR mode in IGU if driver is going to use
   8018		 * INT#x or MSI
   8019		 */
   8020		if (!(bp->flags & USING_MSIX_FLAG))
   8021			pf_conf |= IGU_PF_CONF_SINGLE_ISR_EN;
   8022		/*
   8023		 * Timers workaround bug: function init part.
   8024		 * Need to wait 20msec after initializing ILT,
   8025		 * needed to make sure there are no requests in
   8026		 * one of the PXP internal queues with "old" ILT addresses
   8027		 */
   8028		msleep(20);
   8029		/*
   8030		 * Master enable - Due to WB DMAE writes performed before this
   8031		 * register is re-initialized as part of the regular function
   8032		 * init
   8033		 */
   8034		REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 1);
   8035		/* Enable the function in IGU */
   8036		REG_WR(bp, IGU_REG_PF_CONFIGURATION, pf_conf);
   8037	}
   8038
   8039	bp->dmae_ready = 1;
   8040
   8041	bnx2x_init_block(bp, BLOCK_PGLUE_B, init_phase);
   8042
   8043	bnx2x_clean_pglue_errors(bp);
   8044
   8045	bnx2x_init_block(bp, BLOCK_ATC, init_phase);
   8046	bnx2x_init_block(bp, BLOCK_DMAE, init_phase);
   8047	bnx2x_init_block(bp, BLOCK_NIG, init_phase);
   8048	bnx2x_init_block(bp, BLOCK_SRC, init_phase);
   8049	bnx2x_init_block(bp, BLOCK_MISC, init_phase);
   8050	bnx2x_init_block(bp, BLOCK_TCM, init_phase);
   8051	bnx2x_init_block(bp, BLOCK_UCM, init_phase);
   8052	bnx2x_init_block(bp, BLOCK_CCM, init_phase);
   8053	bnx2x_init_block(bp, BLOCK_XCM, init_phase);
   8054	bnx2x_init_block(bp, BLOCK_TSEM, init_phase);
   8055	bnx2x_init_block(bp, BLOCK_USEM, init_phase);
   8056	bnx2x_init_block(bp, BLOCK_CSEM, init_phase);
   8057	bnx2x_init_block(bp, BLOCK_XSEM, init_phase);
   8058
   8059	if (!CHIP_IS_E1x(bp))
   8060		REG_WR(bp, QM_REG_PF_EN, 1);
   8061
   8062	if (!CHIP_IS_E1x(bp)) {
   8063		REG_WR(bp, TSEM_REG_VFPF_ERR_NUM, BNX2X_MAX_NUM_OF_VFS + func);
   8064		REG_WR(bp, USEM_REG_VFPF_ERR_NUM, BNX2X_MAX_NUM_OF_VFS + func);
   8065		REG_WR(bp, CSEM_REG_VFPF_ERR_NUM, BNX2X_MAX_NUM_OF_VFS + func);
   8066		REG_WR(bp, XSEM_REG_VFPF_ERR_NUM, BNX2X_MAX_NUM_OF_VFS + func);
   8067	}
   8068	bnx2x_init_block(bp, BLOCK_QM, init_phase);
   8069
   8070	bnx2x_init_block(bp, BLOCK_TM, init_phase);
   8071	bnx2x_init_block(bp, BLOCK_DORQ, init_phase);
   8072	REG_WR(bp, DORQ_REG_MODE_ACT, 1); /* no dpm */
   8073
   8074	bnx2x_iov_init_dq(bp);
   8075
   8076	bnx2x_init_block(bp, BLOCK_BRB1, init_phase);
   8077	bnx2x_init_block(bp, BLOCK_PRS, init_phase);
   8078	bnx2x_init_block(bp, BLOCK_TSDM, init_phase);
   8079	bnx2x_init_block(bp, BLOCK_CSDM, init_phase);
   8080	bnx2x_init_block(bp, BLOCK_USDM, init_phase);
   8081	bnx2x_init_block(bp, BLOCK_XSDM, init_phase);
   8082	bnx2x_init_block(bp, BLOCK_UPB, init_phase);
   8083	bnx2x_init_block(bp, BLOCK_XPB, init_phase);
   8084	bnx2x_init_block(bp, BLOCK_PBF, init_phase);
   8085	if (!CHIP_IS_E1x(bp))
   8086		REG_WR(bp, PBF_REG_DISABLE_PF, 0);
   8087
   8088	bnx2x_init_block(bp, BLOCK_CDU, init_phase);
   8089
   8090	bnx2x_init_block(bp, BLOCK_CFC, init_phase);
   8091
   8092	if (!CHIP_IS_E1x(bp))
   8093		REG_WR(bp, CFC_REG_WEAK_ENABLE_PF, 1);
   8094
   8095	if (IS_MF(bp)) {
   8096		if (!(IS_MF_UFP(bp) && BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp))) {
   8097			REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port * 8, 1);
   8098			REG_WR(bp, NIG_REG_LLH0_FUNC_VLAN_ID + port * 8,
   8099			       bp->mf_ov);
   8100		}
   8101	}
   8102
   8103	bnx2x_init_block(bp, BLOCK_MISC_AEU, init_phase);
   8104
   8105	/* HC init per function */
   8106	if (bp->common.int_block == INT_BLOCK_HC) {
   8107		if (CHIP_IS_E1H(bp)) {
   8108			REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + func*4, 0);
   8109
   8110			REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, 0);
   8111			REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, 0);
   8112		}
   8113		bnx2x_init_block(bp, BLOCK_HC, init_phase);
   8114
   8115	} else {
   8116		int num_segs, sb_idx, prod_offset;
   8117
   8118		REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + func*4, 0);
   8119
   8120		if (!CHIP_IS_E1x(bp)) {
   8121			REG_WR(bp, IGU_REG_LEADING_EDGE_LATCH, 0);
   8122			REG_WR(bp, IGU_REG_TRAILING_EDGE_LATCH, 0);
   8123		}
   8124
   8125		bnx2x_init_block(bp, BLOCK_IGU, init_phase);
   8126
   8127		if (!CHIP_IS_E1x(bp)) {
   8128			int dsb_idx = 0;
   8129			/**
   8130			 * Producer memory:
   8131			 * E2 mode: address 0-135 match to the mapping memory;
   8132			 * 136 - PF0 default prod; 137 - PF1 default prod;
   8133			 * 138 - PF2 default prod; 139 - PF3 default prod;
   8134			 * 140 - PF0 attn prod;    141 - PF1 attn prod;
   8135			 * 142 - PF2 attn prod;    143 - PF3 attn prod;
   8136			 * 144-147 reserved.
   8137			 *
   8138			 * E1.5 mode - In backward compatible mode;
   8139			 * for non default SB; each even line in the memory
   8140			 * holds the U producer and each odd line hold
   8141			 * the C producer. The first 128 producers are for
   8142			 * NDSB (PF0 - 0-31; PF1 - 32-63 and so on). The last 20
   8143			 * producers are for the DSB for each PF.
   8144			 * Each PF has five segments: (the order inside each
   8145			 * segment is PF0; PF1; PF2; PF3) - 128-131 U prods;
   8146			 * 132-135 C prods; 136-139 X prods; 140-143 T prods;
   8147			 * 144-147 attn prods;
   8148			 */
   8149			/* non-default-status-blocks */
   8150			num_segs = CHIP_INT_MODE_IS_BC(bp) ?
   8151				IGU_BC_NDSB_NUM_SEGS : IGU_NORM_NDSB_NUM_SEGS;
   8152			for (sb_idx = 0; sb_idx < bp->igu_sb_cnt; sb_idx++) {
   8153				prod_offset = (bp->igu_base_sb + sb_idx) *
   8154					num_segs;
   8155
   8156				for (i = 0; i < num_segs; i++) {
   8157					addr = IGU_REG_PROD_CONS_MEMORY +
   8158							(prod_offset + i) * 4;
   8159					REG_WR(bp, addr, 0);
   8160				}
   8161				/* send consumer update with value 0 */
   8162				bnx2x_ack_sb(bp, bp->igu_base_sb + sb_idx,
   8163					     USTORM_ID, 0, IGU_INT_NOP, 1);
   8164				bnx2x_igu_clear_sb(bp,
   8165						   bp->igu_base_sb + sb_idx);
   8166			}
   8167
   8168			/* default-status-blocks */
   8169			num_segs = CHIP_INT_MODE_IS_BC(bp) ?
   8170				IGU_BC_DSB_NUM_SEGS : IGU_NORM_DSB_NUM_SEGS;
   8171
   8172			if (CHIP_MODE_IS_4_PORT(bp))
   8173				dsb_idx = BP_FUNC(bp);
   8174			else
   8175				dsb_idx = BP_VN(bp);
   8176
   8177			prod_offset = (CHIP_INT_MODE_IS_BC(bp) ?
   8178				       IGU_BC_BASE_DSB_PROD + dsb_idx :
   8179				       IGU_NORM_BASE_DSB_PROD + dsb_idx);
   8180
   8181			/*
   8182			 * igu prods come in chunks of E1HVN_MAX (4) -
   8183			 * does not matters what is the current chip mode
   8184			 */
   8185			for (i = 0; i < (num_segs * E1HVN_MAX);
   8186			     i += E1HVN_MAX) {
   8187				addr = IGU_REG_PROD_CONS_MEMORY +
   8188							(prod_offset + i)*4;
   8189				REG_WR(bp, addr, 0);
   8190			}
   8191			/* send consumer update with 0 */
   8192			if (CHIP_INT_MODE_IS_BC(bp)) {
   8193				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8194					     USTORM_ID, 0, IGU_INT_NOP, 1);
   8195				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8196					     CSTORM_ID, 0, IGU_INT_NOP, 1);
   8197				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8198					     XSTORM_ID, 0, IGU_INT_NOP, 1);
   8199				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8200					     TSTORM_ID, 0, IGU_INT_NOP, 1);
   8201				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8202					     ATTENTION_ID, 0, IGU_INT_NOP, 1);
   8203			} else {
   8204				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8205					     USTORM_ID, 0, IGU_INT_NOP, 1);
   8206				bnx2x_ack_sb(bp, bp->igu_dsb_id,
   8207					     ATTENTION_ID, 0, IGU_INT_NOP, 1);
   8208			}
   8209			bnx2x_igu_clear_sb(bp, bp->igu_dsb_id);
   8210
   8211			/* !!! These should become driver const once
   8212			   rf-tool supports split-68 const */
   8213			REG_WR(bp, IGU_REG_SB_INT_BEFORE_MASK_LSB, 0);
   8214			REG_WR(bp, IGU_REG_SB_INT_BEFORE_MASK_MSB, 0);
   8215			REG_WR(bp, IGU_REG_SB_MASK_LSB, 0);
   8216			REG_WR(bp, IGU_REG_SB_MASK_MSB, 0);
   8217			REG_WR(bp, IGU_REG_PBA_STATUS_LSB, 0);
   8218			REG_WR(bp, IGU_REG_PBA_STATUS_MSB, 0);
   8219		}
   8220	}
   8221
   8222	/* Reset PCIE errors for debug */
   8223	REG_WR(bp, 0x2114, 0xffffffff);
   8224	REG_WR(bp, 0x2120, 0xffffffff);
   8225
   8226	if (CHIP_IS_E1x(bp)) {
   8227		main_mem_size = HC_REG_MAIN_MEMORY_SIZE / 2; /*dwords*/
   8228		main_mem_base = HC_REG_MAIN_MEMORY +
   8229				BP_PORT(bp) * (main_mem_size * 4);
   8230		main_mem_prty_clr = HC_REG_HC_PRTY_STS_CLR;
   8231		main_mem_width = 8;
   8232
   8233		val = REG_RD(bp, main_mem_prty_clr);
   8234		if (val)
   8235			DP(NETIF_MSG_HW,
   8236			   "Hmmm... Parity errors in HC block during function init (0x%x)!\n",
   8237			   val);
   8238
   8239		/* Clear "false" parity errors in MSI-X table */
   8240		for (i = main_mem_base;
   8241		     i < main_mem_base + main_mem_size * 4;
   8242		     i += main_mem_width) {
   8243			bnx2x_read_dmae(bp, i, main_mem_width / 4);
   8244			bnx2x_write_dmae(bp, bnx2x_sp_mapping(bp, wb_data),
   8245					 i, main_mem_width / 4);
   8246		}
   8247		/* Clear HC parity attention */
   8248		REG_RD(bp, main_mem_prty_clr);
   8249	}
   8250
   8251#ifdef BNX2X_STOP_ON_ERROR
   8252	/* Enable STORMs SP logging */
   8253	REG_WR8(bp, BAR_USTRORM_INTMEM +
   8254	       USTORM_RECORD_SLOW_PATH_OFFSET(BP_FUNC(bp)), 1);
   8255	REG_WR8(bp, BAR_TSTRORM_INTMEM +
   8256	       TSTORM_RECORD_SLOW_PATH_OFFSET(BP_FUNC(bp)), 1);
   8257	REG_WR8(bp, BAR_CSTRORM_INTMEM +
   8258	       CSTORM_RECORD_SLOW_PATH_OFFSET(BP_FUNC(bp)), 1);
   8259	REG_WR8(bp, BAR_XSTRORM_INTMEM +
   8260	       XSTORM_RECORD_SLOW_PATH_OFFSET(BP_FUNC(bp)), 1);
   8261#endif
   8262
   8263	bnx2x_phy_probe(&bp->link_params);
   8264
   8265	return 0;
   8266}
   8267
   8268void bnx2x_free_mem_cnic(struct bnx2x *bp)
   8269{
   8270	bnx2x_ilt_mem_op_cnic(bp, ILT_MEMOP_FREE);
   8271
   8272	if (!CHIP_IS_E1x(bp))
   8273		BNX2X_PCI_FREE(bp->cnic_sb.e2_sb, bp->cnic_sb_mapping,
   8274			       sizeof(struct host_hc_status_block_e2));
   8275	else
   8276		BNX2X_PCI_FREE(bp->cnic_sb.e1x_sb, bp->cnic_sb_mapping,
   8277			       sizeof(struct host_hc_status_block_e1x));
   8278
   8279	BNX2X_PCI_FREE(bp->t2, bp->t2_mapping, SRC_T2_SZ);
   8280}
   8281
   8282void bnx2x_free_mem(struct bnx2x *bp)
   8283{
   8284	int i;
   8285
   8286	BNX2X_PCI_FREE(bp->fw_stats, bp->fw_stats_mapping,
   8287		       bp->fw_stats_data_sz + bp->fw_stats_req_sz);
   8288
   8289	if (IS_VF(bp))
   8290		return;
   8291
   8292	BNX2X_PCI_FREE(bp->def_status_blk, bp->def_status_blk_mapping,
   8293		       sizeof(struct host_sp_status_block));
   8294
   8295	BNX2X_PCI_FREE(bp->slowpath, bp->slowpath_mapping,
   8296		       sizeof(struct bnx2x_slowpath));
   8297
   8298	for (i = 0; i < L2_ILT_LINES(bp); i++)
   8299		BNX2X_PCI_FREE(bp->context[i].vcxt, bp->context[i].cxt_mapping,
   8300			       bp->context[i].size);
   8301	bnx2x_ilt_mem_op(bp, ILT_MEMOP_FREE);
   8302
   8303	BNX2X_FREE(bp->ilt->lines);
   8304
   8305	BNX2X_PCI_FREE(bp->spq, bp->spq_mapping, BCM_PAGE_SIZE);
   8306
   8307	BNX2X_PCI_FREE(bp->eq_ring, bp->eq_mapping,
   8308		       BCM_PAGE_SIZE * NUM_EQ_PAGES);
   8309
   8310	BNX2X_PCI_FREE(bp->t2, bp->t2_mapping, SRC_T2_SZ);
   8311
   8312	bnx2x_iov_free_mem(bp);
   8313}
   8314
   8315int bnx2x_alloc_mem_cnic(struct bnx2x *bp)
   8316{
   8317	if (!CHIP_IS_E1x(bp)) {
   8318		/* size = the status block + ramrod buffers */
   8319		bp->cnic_sb.e2_sb = BNX2X_PCI_ALLOC(&bp->cnic_sb_mapping,
   8320						    sizeof(struct host_hc_status_block_e2));
   8321		if (!bp->cnic_sb.e2_sb)
   8322			goto alloc_mem_err;
   8323	} else {
   8324		bp->cnic_sb.e1x_sb = BNX2X_PCI_ALLOC(&bp->cnic_sb_mapping,
   8325						     sizeof(struct host_hc_status_block_e1x));
   8326		if (!bp->cnic_sb.e1x_sb)
   8327			goto alloc_mem_err;
   8328	}
   8329
   8330	if (CONFIGURE_NIC_MODE(bp) && !bp->t2) {
   8331		/* allocate searcher T2 table, as it wasn't allocated before */
   8332		bp->t2 = BNX2X_PCI_ALLOC(&bp->t2_mapping, SRC_T2_SZ);
   8333		if (!bp->t2)
   8334			goto alloc_mem_err;
   8335	}
   8336
   8337	/* write address to which L5 should insert its values */
   8338	bp->cnic_eth_dev.addr_drv_info_to_mcp =
   8339		&bp->slowpath->drv_info_to_mcp;
   8340
   8341	if (bnx2x_ilt_mem_op_cnic(bp, ILT_MEMOP_ALLOC))
   8342		goto alloc_mem_err;
   8343
   8344	return 0;
   8345
   8346alloc_mem_err:
   8347	bnx2x_free_mem_cnic(bp);
   8348	BNX2X_ERR("Can't allocate memory\n");
   8349	return -ENOMEM;
   8350}
   8351
   8352int bnx2x_alloc_mem(struct bnx2x *bp)
   8353{
   8354	int i, allocated, context_size;
   8355
   8356	if (!CONFIGURE_NIC_MODE(bp) && !bp->t2) {
   8357		/* allocate searcher T2 table */
   8358		bp->t2 = BNX2X_PCI_ALLOC(&bp->t2_mapping, SRC_T2_SZ);
   8359		if (!bp->t2)
   8360			goto alloc_mem_err;
   8361	}
   8362
   8363	bp->def_status_blk = BNX2X_PCI_ALLOC(&bp->def_status_blk_mapping,
   8364					     sizeof(struct host_sp_status_block));
   8365	if (!bp->def_status_blk)
   8366		goto alloc_mem_err;
   8367
   8368	bp->slowpath = BNX2X_PCI_ALLOC(&bp->slowpath_mapping,
   8369				       sizeof(struct bnx2x_slowpath));
   8370	if (!bp->slowpath)
   8371		goto alloc_mem_err;
   8372
   8373	/* Allocate memory for CDU context:
   8374	 * This memory is allocated separately and not in the generic ILT
   8375	 * functions because CDU differs in few aspects:
   8376	 * 1. There are multiple entities allocating memory for context -
   8377	 * 'regular' driver, CNIC and SRIOV driver. Each separately controls
   8378	 * its own ILT lines.
   8379	 * 2. Since CDU page-size is not a single 4KB page (which is the case
   8380	 * for the other ILT clients), to be efficient we want to support
   8381	 * allocation of sub-page-size in the last entry.
   8382	 * 3. Context pointers are used by the driver to pass to FW / update
   8383	 * the context (for the other ILT clients the pointers are used just to
   8384	 * free the memory during unload).
   8385	 */
   8386	context_size = sizeof(union cdu_context) * BNX2X_L2_CID_COUNT(bp);
   8387
   8388	for (i = 0, allocated = 0; allocated < context_size; i++) {
   8389		bp->context[i].size = min(CDU_ILT_PAGE_SZ,
   8390					  (context_size - allocated));
   8391		bp->context[i].vcxt = BNX2X_PCI_ALLOC(&bp->context[i].cxt_mapping,
   8392						      bp->context[i].size);
   8393		if (!bp->context[i].vcxt)
   8394			goto alloc_mem_err;
   8395		allocated += bp->context[i].size;
   8396	}
   8397	bp->ilt->lines = kcalloc(ILT_MAX_LINES, sizeof(struct ilt_line),
   8398				 GFP_KERNEL);
   8399	if (!bp->ilt->lines)
   8400		goto alloc_mem_err;
   8401
   8402	if (bnx2x_ilt_mem_op(bp, ILT_MEMOP_ALLOC))
   8403		goto alloc_mem_err;
   8404
   8405	if (bnx2x_iov_alloc_mem(bp))
   8406		goto alloc_mem_err;
   8407
   8408	/* Slow path ring */
   8409	bp->spq = BNX2X_PCI_ALLOC(&bp->spq_mapping, BCM_PAGE_SIZE);
   8410	if (!bp->spq)
   8411		goto alloc_mem_err;
   8412
   8413	/* EQ */
   8414	bp->eq_ring = BNX2X_PCI_ALLOC(&bp->eq_mapping,
   8415				      BCM_PAGE_SIZE * NUM_EQ_PAGES);
   8416	if (!bp->eq_ring)
   8417		goto alloc_mem_err;
   8418
   8419	return 0;
   8420
   8421alloc_mem_err:
   8422	bnx2x_free_mem(bp);
   8423	BNX2X_ERR("Can't allocate memory\n");
   8424	return -ENOMEM;
   8425}
   8426
   8427/*
   8428 * Init service functions
   8429 */
   8430
   8431int bnx2x_set_mac_one(struct bnx2x *bp, const u8 *mac,
   8432		      struct bnx2x_vlan_mac_obj *obj, bool set,
   8433		      int mac_type, unsigned long *ramrod_flags)
   8434{
   8435	int rc;
   8436	struct bnx2x_vlan_mac_ramrod_params ramrod_param;
   8437
   8438	memset(&ramrod_param, 0, sizeof(ramrod_param));
   8439
   8440	/* Fill general parameters */
   8441	ramrod_param.vlan_mac_obj = obj;
   8442	ramrod_param.ramrod_flags = *ramrod_flags;
   8443
   8444	/* Fill a user request section if needed */
   8445	if (!test_bit(RAMROD_CONT, ramrod_flags)) {
   8446		memcpy(ramrod_param.user_req.u.mac.mac, mac, ETH_ALEN);
   8447
   8448		__set_bit(mac_type, &ramrod_param.user_req.vlan_mac_flags);
   8449
   8450		/* Set the command: ADD or DEL */
   8451		if (set)
   8452			ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
   8453		else
   8454			ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_DEL;
   8455	}
   8456
   8457	rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
   8458
   8459	if (rc == -EEXIST) {
   8460		DP(BNX2X_MSG_SP, "Failed to schedule ADD operations: %d\n", rc);
   8461		/* do not treat adding same MAC as error */
   8462		rc = 0;
   8463	} else if (rc < 0)
   8464		BNX2X_ERR("%s MAC failed\n", (set ? "Set" : "Del"));
   8465
   8466	return rc;
   8467}
   8468
   8469int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
   8470		       struct bnx2x_vlan_mac_obj *obj, bool set,
   8471		       unsigned long *ramrod_flags)
   8472{
   8473	int rc;
   8474	struct bnx2x_vlan_mac_ramrod_params ramrod_param;
   8475
   8476	memset(&ramrod_param, 0, sizeof(ramrod_param));
   8477
   8478	/* Fill general parameters */
   8479	ramrod_param.vlan_mac_obj = obj;
   8480	ramrod_param.ramrod_flags = *ramrod_flags;
   8481
   8482	/* Fill a user request section if needed */
   8483	if (!test_bit(RAMROD_CONT, ramrod_flags)) {
   8484		ramrod_param.user_req.u.vlan.vlan = vlan;
   8485		__set_bit(BNX2X_VLAN, &ramrod_param.user_req.vlan_mac_flags);
   8486		/* Set the command: ADD or DEL */
   8487		if (set)
   8488			ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
   8489		else
   8490			ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_DEL;
   8491	}
   8492
   8493	rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
   8494
   8495	if (rc == -EEXIST) {
   8496		/* Do not treat adding same vlan as error. */
   8497		DP(BNX2X_MSG_SP, "Failed to schedule ADD operations: %d\n", rc);
   8498		rc = 0;
   8499	} else if (rc < 0) {
   8500		BNX2X_ERR("%s VLAN failed\n", (set ? "Set" : "Del"));
   8501	}
   8502
   8503	return rc;
   8504}
   8505
   8506void bnx2x_clear_vlan_info(struct bnx2x *bp)
   8507{
   8508	struct bnx2x_vlan_entry *vlan;
   8509
   8510	/* Mark that hw forgot all entries */
   8511	list_for_each_entry(vlan, &bp->vlan_reg, link)
   8512		vlan->hw = false;
   8513
   8514	bp->vlan_cnt = 0;
   8515}
   8516
   8517static int bnx2x_del_all_vlans(struct bnx2x *bp)
   8518{
   8519	struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj;
   8520	unsigned long ramrod_flags = 0, vlan_flags = 0;
   8521	int rc;
   8522
   8523	__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
   8524	__set_bit(BNX2X_VLAN, &vlan_flags);
   8525	rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_flags, &ramrod_flags);
   8526	if (rc)
   8527		return rc;
   8528
   8529	bnx2x_clear_vlan_info(bp);
   8530
   8531	return 0;
   8532}
   8533
   8534int bnx2x_del_all_macs(struct bnx2x *bp,
   8535		       struct bnx2x_vlan_mac_obj *mac_obj,
   8536		       int mac_type, bool wait_for_comp)
   8537{
   8538	int rc;
   8539	unsigned long ramrod_flags = 0, vlan_mac_flags = 0;
   8540
   8541	/* Wait for completion of requested */
   8542	if (wait_for_comp)
   8543		__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
   8544
   8545	/* Set the mac type of addresses we want to clear */
   8546	__set_bit(mac_type, &vlan_mac_flags);
   8547
   8548	rc = mac_obj->delete_all(bp, mac_obj, &vlan_mac_flags, &ramrod_flags);
   8549	if (rc < 0)
   8550		BNX2X_ERR("Failed to delete MACs: %d\n", rc);
   8551
   8552	return rc;
   8553}
   8554
   8555int bnx2x_set_eth_mac(struct bnx2x *bp, bool set)
   8556{
   8557	if (IS_PF(bp)) {
   8558		unsigned long ramrod_flags = 0;
   8559
   8560		DP(NETIF_MSG_IFUP, "Adding Eth MAC\n");
   8561		__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
   8562		return bnx2x_set_mac_one(bp, bp->dev->dev_addr,
   8563					 &bp->sp_objs->mac_obj, set,
   8564					 BNX2X_ETH_MAC, &ramrod_flags);
   8565	} else { /* vf */
   8566		return bnx2x_vfpf_config_mac(bp, bp->dev->dev_addr,
   8567					     bp->fp->index, set);
   8568	}
   8569}
   8570
   8571int bnx2x_setup_leading(struct bnx2x *bp)
   8572{
   8573	if (IS_PF(bp))
   8574		return bnx2x_setup_queue(bp, &bp->fp[0], true);
   8575	else /* VF */
   8576		return bnx2x_vfpf_setup_q(bp, &bp->fp[0], true);
   8577}
   8578
   8579/**
   8580 * bnx2x_set_int_mode - configure interrupt mode
   8581 *
   8582 * @bp:		driver handle
   8583 *
   8584 * In case of MSI-X it will also try to enable MSI-X.
   8585 */
   8586int bnx2x_set_int_mode(struct bnx2x *bp)
   8587{
   8588	int rc = 0;
   8589
   8590	if (IS_VF(bp) && int_mode != BNX2X_INT_MODE_MSIX) {
   8591		BNX2X_ERR("VF not loaded since interrupt mode not msix\n");
   8592		return -EINVAL;
   8593	}
   8594
   8595	switch (int_mode) {
   8596	case BNX2X_INT_MODE_MSIX:
   8597		/* attempt to enable msix */
   8598		rc = bnx2x_enable_msix(bp);
   8599
   8600		/* msix attained */
   8601		if (!rc)
   8602			return 0;
   8603
   8604		/* vfs use only msix */
   8605		if (rc && IS_VF(bp))
   8606			return rc;
   8607
   8608		/* failed to enable multiple MSI-X */
   8609		BNX2X_DEV_INFO("Failed to enable multiple MSI-X (%d), set number of queues to %d\n",
   8610			       bp->num_queues,
   8611			       1 + bp->num_cnic_queues);
   8612
   8613		fallthrough;
   8614	case BNX2X_INT_MODE_MSI:
   8615		bnx2x_enable_msi(bp);
   8616
   8617		fallthrough;
   8618	case BNX2X_INT_MODE_INTX:
   8619		bp->num_ethernet_queues = 1;
   8620		bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
   8621		BNX2X_DEV_INFO("set number of queues to 1\n");
   8622		break;
   8623	default:
   8624		BNX2X_DEV_INFO("unknown value in int_mode module parameter\n");
   8625		return -EINVAL;
   8626	}
   8627	return 0;
   8628}
   8629
   8630/* must be called prior to any HW initializations */
   8631static inline u16 bnx2x_cid_ilt_lines(struct bnx2x *bp)
   8632{
   8633	if (IS_SRIOV(bp))
   8634		return (BNX2X_FIRST_VF_CID + BNX2X_VF_CIDS)/ILT_PAGE_CIDS;
   8635	return L2_ILT_LINES(bp);
   8636}
   8637
   8638void bnx2x_ilt_set_info(struct bnx2x *bp)
   8639{
   8640	struct ilt_client_info *ilt_client;
   8641	struct bnx2x_ilt *ilt = BP_ILT(bp);
   8642	u16 line = 0;
   8643
   8644	ilt->start_line = FUNC_ILT_BASE(BP_FUNC(bp));
   8645	DP(BNX2X_MSG_SP, "ilt starts at line %d\n", ilt->start_line);
   8646
   8647	/* CDU */
   8648	ilt_client = &ilt->clients[ILT_CLIENT_CDU];
   8649	ilt_client->client_num = ILT_CLIENT_CDU;
   8650	ilt_client->page_size = CDU_ILT_PAGE_SZ;
   8651	ilt_client->flags = ILT_CLIENT_SKIP_MEM;
   8652	ilt_client->start = line;
   8653	line += bnx2x_cid_ilt_lines(bp);
   8654
   8655	if (CNIC_SUPPORT(bp))
   8656		line += CNIC_ILT_LINES;
   8657	ilt_client->end = line - 1;
   8658
   8659	DP(NETIF_MSG_IFUP, "ilt client[CDU]: start %d, end %d, psz 0x%x, flags 0x%x, hw psz %d\n",
   8660	   ilt_client->start,
   8661	   ilt_client->end,
   8662	   ilt_client->page_size,
   8663	   ilt_client->flags,
   8664	   ilog2(ilt_client->page_size >> 12));
   8665
   8666	/* QM */
   8667	if (QM_INIT(bp->qm_cid_count)) {
   8668		ilt_client = &ilt->clients[ILT_CLIENT_QM];
   8669		ilt_client->client_num = ILT_CLIENT_QM;
   8670		ilt_client->page_size = QM_ILT_PAGE_SZ;
   8671		ilt_client->flags = 0;
   8672		ilt_client->start = line;
   8673
   8674		/* 4 bytes for each cid */
   8675		line += DIV_ROUND_UP(bp->qm_cid_count * QM_QUEUES_PER_FUNC * 4,
   8676							 QM_ILT_PAGE_SZ);
   8677
   8678		ilt_client->end = line - 1;
   8679
   8680		DP(NETIF_MSG_IFUP,
   8681		   "ilt client[QM]: start %d, end %d, psz 0x%x, flags 0x%x, hw psz %d\n",
   8682		   ilt_client->start,
   8683		   ilt_client->end,
   8684		   ilt_client->page_size,
   8685		   ilt_client->flags,
   8686		   ilog2(ilt_client->page_size >> 12));
   8687	}
   8688
   8689	if (CNIC_SUPPORT(bp)) {
   8690		/* SRC */
   8691		ilt_client = &ilt->clients[ILT_CLIENT_SRC];
   8692		ilt_client->client_num = ILT_CLIENT_SRC;
   8693		ilt_client->page_size = SRC_ILT_PAGE_SZ;
   8694		ilt_client->flags = 0;
   8695		ilt_client->start = line;
   8696		line += SRC_ILT_LINES;
   8697		ilt_client->end = line - 1;
   8698
   8699		DP(NETIF_MSG_IFUP,
   8700		   "ilt client[SRC]: start %d, end %d, psz 0x%x, flags 0x%x, hw psz %d\n",
   8701		   ilt_client->start,
   8702		   ilt_client->end,
   8703		   ilt_client->page_size,
   8704		   ilt_client->flags,
   8705		   ilog2(ilt_client->page_size >> 12));
   8706
   8707		/* TM */
   8708		ilt_client = &ilt->clients[ILT_CLIENT_TM];
   8709		ilt_client->client_num = ILT_CLIENT_TM;
   8710		ilt_client->page_size = TM_ILT_PAGE_SZ;
   8711		ilt_client->flags = 0;
   8712		ilt_client->start = line;
   8713		line += TM_ILT_LINES;
   8714		ilt_client->end = line - 1;
   8715
   8716		DP(NETIF_MSG_IFUP,
   8717		   "ilt client[TM]: start %d, end %d, psz 0x%x, flags 0x%x, hw psz %d\n",
   8718		   ilt_client->start,
   8719		   ilt_client->end,
   8720		   ilt_client->page_size,
   8721		   ilt_client->flags,
   8722		   ilog2(ilt_client->page_size >> 12));
   8723	}
   8724
   8725	BUG_ON(line > ILT_MAX_LINES);
   8726}
   8727
   8728/**
   8729 * bnx2x_pf_q_prep_init - prepare INIT transition parameters
   8730 *
   8731 * @bp:			driver handle
   8732 * @fp:			pointer to fastpath
   8733 * @init_params:	pointer to parameters structure
   8734 *
   8735 * parameters configured:
   8736 *      - HC configuration
   8737 *      - Queue's CDU context
   8738 */
   8739static void bnx2x_pf_q_prep_init(struct bnx2x *bp,
   8740	struct bnx2x_fastpath *fp, struct bnx2x_queue_init_params *init_params)
   8741{
   8742	u8 cos;
   8743	int cxt_index, cxt_offset;
   8744
   8745	/* FCoE Queue uses Default SB, thus has no HC capabilities */
   8746	if (!IS_FCOE_FP(fp)) {
   8747		__set_bit(BNX2X_Q_FLG_HC, &init_params->rx.flags);
   8748		__set_bit(BNX2X_Q_FLG_HC, &init_params->tx.flags);
   8749
   8750		/* If HC is supported, enable host coalescing in the transition
   8751		 * to INIT state.
   8752		 */
   8753		__set_bit(BNX2X_Q_FLG_HC_EN, &init_params->rx.flags);
   8754		__set_bit(BNX2X_Q_FLG_HC_EN, &init_params->tx.flags);
   8755
   8756		/* HC rate */
   8757		init_params->rx.hc_rate = bp->rx_ticks ?
   8758			(1000000 / bp->rx_ticks) : 0;
   8759		init_params->tx.hc_rate = bp->tx_ticks ?
   8760			(1000000 / bp->tx_ticks) : 0;
   8761
   8762		/* FW SB ID */
   8763		init_params->rx.fw_sb_id = init_params->tx.fw_sb_id =
   8764			fp->fw_sb_id;
   8765
   8766		/*
   8767		 * CQ index among the SB indices: FCoE clients uses the default
   8768		 * SB, therefore it's different.
   8769		 */
   8770		init_params->rx.sb_cq_index = HC_INDEX_ETH_RX_CQ_CONS;
   8771		init_params->tx.sb_cq_index = HC_INDEX_ETH_FIRST_TX_CQ_CONS;
   8772	}
   8773
   8774	/* set maximum number of COSs supported by this queue */
   8775	init_params->max_cos = fp->max_cos;
   8776
   8777	DP(NETIF_MSG_IFUP, "fp: %d setting queue params max cos to: %d\n",
   8778	    fp->index, init_params->max_cos);
   8779
   8780	/* set the context pointers queue object */
   8781	for (cos = FIRST_TX_COS_INDEX; cos < init_params->max_cos; cos++) {
   8782		cxt_index = fp->txdata_ptr[cos]->cid / ILT_PAGE_CIDS;
   8783		cxt_offset = fp->txdata_ptr[cos]->cid - (cxt_index *
   8784				ILT_PAGE_CIDS);
   8785		init_params->cxts[cos] =
   8786			&bp->context[cxt_index].vcxt[cxt_offset].eth;
   8787	}
   8788}
   8789
   8790static int bnx2x_setup_tx_only(struct bnx2x *bp, struct bnx2x_fastpath *fp,
   8791			struct bnx2x_queue_state_params *q_params,
   8792			struct bnx2x_queue_setup_tx_only_params *tx_only_params,
   8793			int tx_index, bool leading)
   8794{
   8795	memset(tx_only_params, 0, sizeof(*tx_only_params));
   8796
   8797	/* Set the command */
   8798	q_params->cmd = BNX2X_Q_CMD_SETUP_TX_ONLY;
   8799
   8800	/* Set tx-only QUEUE flags: don't zero statistics */
   8801	tx_only_params->flags = bnx2x_get_common_flags(bp, fp, false);
   8802
   8803	/* choose the index of the cid to send the slow path on */
   8804	tx_only_params->cid_index = tx_index;
   8805
   8806	/* Set general TX_ONLY_SETUP parameters */
   8807	bnx2x_pf_q_prep_general(bp, fp, &tx_only_params->gen_params, tx_index);
   8808
   8809	/* Set Tx TX_ONLY_SETUP parameters */
   8810	bnx2x_pf_tx_q_prep(bp, fp, &tx_only_params->txq_params, tx_index);
   8811
   8812	DP(NETIF_MSG_IFUP,
   8813	   "preparing to send tx-only ramrod for connection: cos %d, primary cid %d, cid %d, client id %d, sp-client id %d, flags %lx\n",
   8814	   tx_index, q_params->q_obj->cids[FIRST_TX_COS_INDEX],
   8815	   q_params->q_obj->cids[tx_index], q_params->q_obj->cl_id,
   8816	   tx_only_params->gen_params.spcl_id, tx_only_params->flags);
   8817
   8818	/* send the ramrod */
   8819	return bnx2x_queue_state_change(bp, q_params);
   8820}
   8821
   8822/**
   8823 * bnx2x_setup_queue - setup queue
   8824 *
   8825 * @bp:		driver handle
   8826 * @fp:		pointer to fastpath
   8827 * @leading:	is leading
   8828 *
   8829 * This function performs 2 steps in a Queue state machine
   8830 *      actually: 1) RESET->INIT 2) INIT->SETUP
   8831 */
   8832
   8833int bnx2x_setup_queue(struct bnx2x *bp, struct bnx2x_fastpath *fp,
   8834		       bool leading)
   8835{
   8836	struct bnx2x_queue_state_params q_params = {NULL};
   8837	struct bnx2x_queue_setup_params *setup_params =
   8838						&q_params.params.setup;
   8839	struct bnx2x_queue_setup_tx_only_params *tx_only_params =
   8840						&q_params.params.tx_only;
   8841	int rc;
   8842	u8 tx_index;
   8843
   8844	DP(NETIF_MSG_IFUP, "setting up queue %d\n", fp->index);
   8845
   8846	/* reset IGU state skip FCoE L2 queue */
   8847	if (!IS_FCOE_FP(fp))
   8848		bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID, 0,
   8849			     IGU_INT_ENABLE, 0);
   8850
   8851	q_params.q_obj = &bnx2x_sp_obj(bp, fp).q_obj;
   8852	/* We want to wait for completion in this context */
   8853	__set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
   8854
   8855	/* Prepare the INIT parameters */
   8856	bnx2x_pf_q_prep_init(bp, fp, &q_params.params.init);
   8857
   8858	/* Set the command */
   8859	q_params.cmd = BNX2X_Q_CMD_INIT;
   8860
   8861	/* Change the state to INIT */
   8862	rc = bnx2x_queue_state_change(bp, &q_params);
   8863	if (rc) {
   8864		BNX2X_ERR("Queue(%d) INIT failed\n", fp->index);
   8865		return rc;
   8866	}
   8867
   8868	DP(NETIF_MSG_IFUP, "init complete\n");
   8869
   8870	/* Now move the Queue to the SETUP state... */
   8871	memset(setup_params, 0, sizeof(*setup_params));
   8872
   8873	/* Set QUEUE flags */
   8874	setup_params->flags = bnx2x_get_q_flags(bp, fp, leading);
   8875
   8876	/* Set general SETUP parameters */
   8877	bnx2x_pf_q_prep_general(bp, fp, &setup_params->gen_params,
   8878				FIRST_TX_COS_INDEX);
   8879
   8880	bnx2x_pf_rx_q_prep(bp, fp, &setup_params->pause_params,
   8881			    &setup_params->rxq_params);
   8882
   8883	bnx2x_pf_tx_q_prep(bp, fp, &setup_params->txq_params,
   8884			   FIRST_TX_COS_INDEX);
   8885
   8886	/* Set the command */
   8887	q_params.cmd = BNX2X_Q_CMD_SETUP;
   8888
   8889	if (IS_FCOE_FP(fp))
   8890		bp->fcoe_init = true;
   8891
   8892	/* Change the state to SETUP */
   8893	rc = bnx2x_queue_state_change(bp, &q_params);
   8894	if (rc) {
   8895		BNX2X_ERR("Queue(%d) SETUP failed\n", fp->index);
   8896		return rc;
   8897	}
   8898
   8899	/* loop through the relevant tx-only indices */
   8900	for (tx_index = FIRST_TX_ONLY_COS_INDEX;
   8901	      tx_index < fp->max_cos;
   8902	      tx_index++) {
   8903
   8904		/* prepare and send tx-only ramrod*/
   8905		rc = bnx2x_setup_tx_only(bp, fp, &q_params,
   8906					  tx_only_params, tx_index, leading);
   8907		if (rc) {
   8908			BNX2X_ERR("Queue(%d.%d) TX_ONLY_SETUP failed\n",
   8909				  fp->index, tx_index);
   8910			return rc;
   8911		}
   8912	}
   8913
   8914	return rc;
   8915}
   8916
   8917static int bnx2x_stop_queue(struct bnx2x *bp, int index)
   8918{
   8919	struct bnx2x_fastpath *fp = &bp->fp[index];
   8920	struct bnx2x_fp_txdata *txdata;
   8921	struct bnx2x_queue_state_params q_params = {NULL};
   8922	int rc, tx_index;
   8923
   8924	DP(NETIF_MSG_IFDOWN, "stopping queue %d cid %d\n", index, fp->cid);
   8925
   8926	q_params.q_obj = &bnx2x_sp_obj(bp, fp).q_obj;
   8927	/* We want to wait for completion in this context */
   8928	__set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
   8929
   8930	/* close tx-only connections */
   8931	for (tx_index = FIRST_TX_ONLY_COS_INDEX;
   8932	     tx_index < fp->max_cos;
   8933	     tx_index++){
   8934
   8935		/* ascertain this is a normal queue*/
   8936		txdata = fp->txdata_ptr[tx_index];
   8937
   8938		DP(NETIF_MSG_IFDOWN, "stopping tx-only queue %d\n",
   8939							txdata->txq_index);
   8940
   8941		/* send halt terminate on tx-only connection */
   8942		q_params.cmd = BNX2X_Q_CMD_TERMINATE;
   8943		memset(&q_params.params.terminate, 0,
   8944		       sizeof(q_params.params.terminate));
   8945		q_params.params.terminate.cid_index = tx_index;
   8946
   8947		rc = bnx2x_queue_state_change(bp, &q_params);
   8948		if (rc)
   8949			return rc;
   8950
   8951		/* send halt terminate on tx-only connection */
   8952		q_params.cmd = BNX2X_Q_CMD_CFC_DEL;
   8953		memset(&q_params.params.cfc_del, 0,
   8954		       sizeof(q_params.params.cfc_del));
   8955		q_params.params.cfc_del.cid_index = tx_index;
   8956		rc = bnx2x_queue_state_change(bp, &q_params);
   8957		if (rc)
   8958			return rc;
   8959	}
   8960	/* Stop the primary connection: */
   8961	/* ...halt the connection */
   8962	q_params.cmd = BNX2X_Q_CMD_HALT;
   8963	rc = bnx2x_queue_state_change(bp, &q_params);
   8964	if (rc)
   8965		return rc;
   8966
   8967	/* ...terminate the connection */
   8968	q_params.cmd = BNX2X_Q_CMD_TERMINATE;
   8969	memset(&q_params.params.terminate, 0,
   8970	       sizeof(q_params.params.terminate));
   8971	q_params.params.terminate.cid_index = FIRST_TX_COS_INDEX;
   8972	rc = bnx2x_queue_state_change(bp, &q_params);
   8973	if (rc)
   8974		return rc;
   8975	/* ...delete cfc entry */
   8976	q_params.cmd = BNX2X_Q_CMD_CFC_DEL;
   8977	memset(&q_params.params.cfc_del, 0,
   8978	       sizeof(q_params.params.cfc_del));
   8979	q_params.params.cfc_del.cid_index = FIRST_TX_COS_INDEX;
   8980	return bnx2x_queue_state_change(bp, &q_params);
   8981}
   8982
   8983static void bnx2x_reset_func(struct bnx2x *bp)
   8984{
   8985	int port = BP_PORT(bp);
   8986	int func = BP_FUNC(bp);
   8987	int i;
   8988
   8989	/* Disable the function in the FW */
   8990	REG_WR8(bp, BAR_XSTRORM_INTMEM + XSTORM_FUNC_EN_OFFSET(func), 0);
   8991	REG_WR8(bp, BAR_CSTRORM_INTMEM + CSTORM_FUNC_EN_OFFSET(func), 0);
   8992	REG_WR8(bp, BAR_TSTRORM_INTMEM + TSTORM_FUNC_EN_OFFSET(func), 0);
   8993	REG_WR8(bp, BAR_USTRORM_INTMEM + USTORM_FUNC_EN_OFFSET(func), 0);
   8994
   8995	/* FP SBs */
   8996	for_each_eth_queue(bp, i) {
   8997		struct bnx2x_fastpath *fp = &bp->fp[i];
   8998		REG_WR8(bp, BAR_CSTRORM_INTMEM +
   8999			   CSTORM_STATUS_BLOCK_DATA_STATE_OFFSET(fp->fw_sb_id),
   9000			   SB_DISABLED);
   9001	}
   9002
   9003	if (CNIC_LOADED(bp))
   9004		/* CNIC SB */
   9005		REG_WR8(bp, BAR_CSTRORM_INTMEM +
   9006			CSTORM_STATUS_BLOCK_DATA_STATE_OFFSET
   9007			(bnx2x_cnic_fw_sb_id(bp)), SB_DISABLED);
   9008
   9009	/* SP SB */
   9010	REG_WR8(bp, BAR_CSTRORM_INTMEM +
   9011		CSTORM_SP_STATUS_BLOCK_DATA_STATE_OFFSET(func),
   9012		SB_DISABLED);
   9013
   9014	for (i = 0; i < XSTORM_SPQ_DATA_SIZE / 4; i++)
   9015		REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_DATA_OFFSET(func),
   9016		       0);
   9017
   9018	/* Configure IGU */
   9019	if (bp->common.int_block == INT_BLOCK_HC) {
   9020		REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, 0);
   9021		REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, 0);
   9022	} else {
   9023		REG_WR(bp, IGU_REG_LEADING_EDGE_LATCH, 0);
   9024		REG_WR(bp, IGU_REG_TRAILING_EDGE_LATCH, 0);
   9025	}
   9026
   9027	if (CNIC_LOADED(bp)) {
   9028		/* Disable Timer scan */
   9029		REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 0);
   9030		/*
   9031		 * Wait for at least 10ms and up to 2 second for the timers
   9032		 * scan to complete
   9033		 */
   9034		for (i = 0; i < 200; i++) {
   9035			usleep_range(10000, 20000);
   9036			if (!REG_RD(bp, TM_REG_LIN0_SCAN_ON + port*4))
   9037				break;
   9038		}
   9039	}
   9040	/* Clear ILT */
   9041	bnx2x_clear_func_ilt(bp, func);
   9042
   9043	/* Timers workaround bug for E2: if this is vnic-3,
   9044	 * we need to set the entire ilt range for this timers.
   9045	 */
   9046	if (!CHIP_IS_E1x(bp) && BP_VN(bp) == 3) {
   9047		struct ilt_client_info ilt_cli;
   9048		/* use dummy TM client */
   9049		memset(&ilt_cli, 0, sizeof(struct ilt_client_info));
   9050		ilt_cli.start = 0;
   9051		ilt_cli.end = ILT_NUM_PAGE_ENTRIES - 1;
   9052		ilt_cli.client_num = ILT_CLIENT_TM;
   9053
   9054		bnx2x_ilt_boundry_init_op(bp, &ilt_cli, 0, INITOP_CLEAR);
   9055	}
   9056
   9057	/* this assumes that reset_port() called before reset_func()*/
   9058	if (!CHIP_IS_E1x(bp))
   9059		bnx2x_pf_disable(bp);
   9060
   9061	bp->dmae_ready = 0;
   9062}
   9063
   9064static void bnx2x_reset_port(struct bnx2x *bp)
   9065{
   9066	int port = BP_PORT(bp);
   9067	u32 val;
   9068
   9069	/* Reset physical Link */
   9070	bnx2x__link_reset(bp);
   9071
   9072	REG_WR(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0);
   9073
   9074	/* Do not rcv packets to BRB */
   9075	REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK + port*4, 0x0);
   9076	/* Do not direct rcv packets that are not for MCP to the BRB */
   9077	REG_WR(bp, (port ? NIG_REG_LLH1_BRB1_NOT_MCP :
   9078			   NIG_REG_LLH0_BRB1_NOT_MCP), 0x0);
   9079
   9080	/* Configure AEU */
   9081	REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, 0);
   9082
   9083	msleep(100);
   9084	/* Check for BRB port occupancy */
   9085	val = REG_RD(bp, BRB1_REG_PORT_NUM_OCC_BLOCKS_0 + port*4);
   9086	if (val)
   9087		DP(NETIF_MSG_IFDOWN,
   9088		   "BRB1 is not empty  %d blocks are occupied\n", val);
   9089
   9090	/* TODO: Close Doorbell port? */
   9091}
   9092
   9093static int bnx2x_reset_hw(struct bnx2x *bp, u32 load_code)
   9094{
   9095	struct bnx2x_func_state_params func_params = {NULL};
   9096
   9097	/* Prepare parameters for function state transitions */
   9098	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
   9099
   9100	func_params.f_obj = &bp->func_obj;
   9101	func_params.cmd = BNX2X_F_CMD_HW_RESET;
   9102
   9103	func_params.params.hw_init.load_phase = load_code;
   9104
   9105	return bnx2x_func_state_change(bp, &func_params);
   9106}
   9107
   9108static int bnx2x_func_stop(struct bnx2x *bp)
   9109{
   9110	struct bnx2x_func_state_params func_params = {NULL};
   9111	int rc;
   9112
   9113	/* Prepare parameters for function state transitions */
   9114	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
   9115	func_params.f_obj = &bp->func_obj;
   9116	func_params.cmd = BNX2X_F_CMD_STOP;
   9117
   9118	/*
   9119	 * Try to stop the function the 'good way'. If fails (in case
   9120	 * of a parity error during bnx2x_chip_cleanup()) and we are
   9121	 * not in a debug mode, perform a state transaction in order to
   9122	 * enable further HW_RESET transaction.
   9123	 */
   9124	rc = bnx2x_func_state_change(bp, &func_params);
   9125	if (rc) {
   9126#ifdef BNX2X_STOP_ON_ERROR
   9127		return rc;
   9128#else
   9129		BNX2X_ERR("FUNC_STOP ramrod failed. Running a dry transaction\n");
   9130		__set_bit(RAMROD_DRV_CLR_ONLY, &func_params.ramrod_flags);
   9131		return bnx2x_func_state_change(bp, &func_params);
   9132#endif
   9133	}
   9134
   9135	return 0;
   9136}
   9137
   9138/**
   9139 * bnx2x_send_unload_req - request unload mode from the MCP.
   9140 *
   9141 * @bp:			driver handle
   9142 * @unload_mode:	requested function's unload mode
   9143 *
   9144 * Return unload mode returned by the MCP: COMMON, PORT or FUNC.
   9145 */
   9146u32 bnx2x_send_unload_req(struct bnx2x *bp, int unload_mode)
   9147{
   9148	u32 reset_code = 0;
   9149	int port = BP_PORT(bp);
   9150
   9151	/* Select the UNLOAD request mode */
   9152	if (unload_mode == UNLOAD_NORMAL)
   9153		reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
   9154
   9155	else if (bp->flags & NO_WOL_FLAG)
   9156		reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP;
   9157
   9158	else if (bp->wol) {
   9159		u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
   9160		const u8 *mac_addr = bp->dev->dev_addr;
   9161		struct pci_dev *pdev = bp->pdev;
   9162		u32 val;
   9163		u16 pmc;
   9164
   9165		/* The mac address is written to entries 1-4 to
   9166		 * preserve entry 0 which is used by the PMF
   9167		 */
   9168		u8 entry = (BP_VN(bp) + 1)*8;
   9169
   9170		val = (mac_addr[0] << 8) | mac_addr[1];
   9171		EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry, val);
   9172
   9173		val = (mac_addr[2] << 24) | (mac_addr[3] << 16) |
   9174		      (mac_addr[4] << 8) | mac_addr[5];
   9175		EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry + 4, val);
   9176
   9177		/* Enable the PME and clear the status */
   9178		pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, &pmc);
   9179		pmc |= PCI_PM_CTRL_PME_ENABLE | PCI_PM_CTRL_PME_STATUS;
   9180		pci_write_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, pmc);
   9181
   9182		reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_EN;
   9183
   9184	} else
   9185		reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
   9186
   9187	/* Send the request to the MCP */
   9188	if (!BP_NOMCP(bp))
   9189		reset_code = bnx2x_fw_command(bp, reset_code, 0);
   9190	else {
   9191		int path = BP_PATH(bp);
   9192
   9193		DP(NETIF_MSG_IFDOWN, "NO MCP - load counts[%d]      %d, %d, %d\n",
   9194		   path, bnx2x_load_count[path][0], bnx2x_load_count[path][1],
   9195		   bnx2x_load_count[path][2]);
   9196		bnx2x_load_count[path][0]--;
   9197		bnx2x_load_count[path][1 + port]--;
   9198		DP(NETIF_MSG_IFDOWN, "NO MCP - new load counts[%d]  %d, %d, %d\n",
   9199		   path, bnx2x_load_count[path][0], bnx2x_load_count[path][1],
   9200		   bnx2x_load_count[path][2]);
   9201		if (bnx2x_load_count[path][0] == 0)
   9202			reset_code = FW_MSG_CODE_DRV_UNLOAD_COMMON;
   9203		else if (bnx2x_load_count[path][1 + port] == 0)
   9204			reset_code = FW_MSG_CODE_DRV_UNLOAD_PORT;
   9205		else
   9206			reset_code = FW_MSG_CODE_DRV_UNLOAD_FUNCTION;
   9207	}
   9208
   9209	return reset_code;
   9210}
   9211
   9212/**
   9213 * bnx2x_send_unload_done - send UNLOAD_DONE command to the MCP.
   9214 *
   9215 * @bp:		driver handle
   9216 * @keep_link:		true iff link should be kept up
   9217 */
   9218void bnx2x_send_unload_done(struct bnx2x *bp, bool keep_link)
   9219{
   9220	u32 reset_param = keep_link ? DRV_MSG_CODE_UNLOAD_SKIP_LINK_RESET : 0;
   9221
   9222	/* Report UNLOAD_DONE to MCP */
   9223	if (!BP_NOMCP(bp))
   9224		bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, reset_param);
   9225}
   9226
   9227static int bnx2x_func_wait_started(struct bnx2x *bp)
   9228{
   9229	int tout = 50;
   9230	int msix = (bp->flags & USING_MSIX_FLAG) ? 1 : 0;
   9231
   9232	if (!bp->port.pmf)
   9233		return 0;
   9234
   9235	/*
   9236	 * (assumption: No Attention from MCP at this stage)
   9237	 * PMF probably in the middle of TX disable/enable transaction
   9238	 * 1. Sync IRS for default SB
   9239	 * 2. Sync SP queue - this guarantees us that attention handling started
   9240	 * 3. Wait, that TX disable/enable transaction completes
   9241	 *
   9242	 * 1+2 guarantee that if DCBx attention was scheduled it already changed
   9243	 * pending bit of transaction from STARTED-->TX_STOPPED, if we already
   9244	 * received completion for the transaction the state is TX_STOPPED.
   9245	 * State will return to STARTED after completion of TX_STOPPED-->STARTED
   9246	 * transaction.
   9247	 */
   9248
   9249	/* make sure default SB ISR is done */
   9250	if (msix)
   9251		synchronize_irq(bp->msix_table[0].vector);
   9252	else
   9253		synchronize_irq(bp->pdev->irq);
   9254
   9255	flush_workqueue(bnx2x_wq);
   9256	flush_workqueue(bnx2x_iov_wq);
   9257
   9258	while (bnx2x_func_get_state(bp, &bp->func_obj) !=
   9259				BNX2X_F_STATE_STARTED && tout--)
   9260		msleep(20);
   9261
   9262	if (bnx2x_func_get_state(bp, &bp->func_obj) !=
   9263						BNX2X_F_STATE_STARTED) {
   9264#ifdef BNX2X_STOP_ON_ERROR
   9265		BNX2X_ERR("Wrong function state\n");
   9266		return -EBUSY;
   9267#else
   9268		/*
   9269		 * Failed to complete the transaction in a "good way"
   9270		 * Force both transactions with CLR bit
   9271		 */
   9272		struct bnx2x_func_state_params func_params = {NULL};
   9273
   9274		DP(NETIF_MSG_IFDOWN,
   9275		   "Hmmm... Unexpected function state! Forcing STARTED-->TX_STOPPED-->STARTED\n");
   9276
   9277		func_params.f_obj = &bp->func_obj;
   9278		__set_bit(RAMROD_DRV_CLR_ONLY,
   9279					&func_params.ramrod_flags);
   9280
   9281		/* STARTED-->TX_ST0PPED */
   9282		func_params.cmd = BNX2X_F_CMD_TX_STOP;
   9283		bnx2x_func_state_change(bp, &func_params);
   9284
   9285		/* TX_ST0PPED-->STARTED */
   9286		func_params.cmd = BNX2X_F_CMD_TX_START;
   9287		return bnx2x_func_state_change(bp, &func_params);
   9288#endif
   9289	}
   9290
   9291	return 0;
   9292}
   9293
   9294static void bnx2x_disable_ptp(struct bnx2x *bp)
   9295{
   9296	int port = BP_PORT(bp);
   9297
   9298	/* Disable sending PTP packets to host */
   9299	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_TO_HOST :
   9300	       NIG_REG_P0_LLH_PTP_TO_HOST, 0x0);
   9301
   9302	/* Reset PTP event detection rules */
   9303	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_PARAM_MASK :
   9304	       NIG_REG_P0_LLH_PTP_PARAM_MASK, 0x7FF);
   9305	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_RULE_MASK :
   9306	       NIG_REG_P0_LLH_PTP_RULE_MASK, 0x3FFF);
   9307	REG_WR(bp, port ? NIG_REG_P1_TLLH_PTP_PARAM_MASK :
   9308	       NIG_REG_P0_TLLH_PTP_PARAM_MASK, 0x7FF);
   9309	REG_WR(bp, port ? NIG_REG_P1_TLLH_PTP_RULE_MASK :
   9310	       NIG_REG_P0_TLLH_PTP_RULE_MASK, 0x3FFF);
   9311
   9312	/* Disable the PTP feature */
   9313	REG_WR(bp, port ? NIG_REG_P1_PTP_EN :
   9314	       NIG_REG_P0_PTP_EN, 0x0);
   9315}
   9316
   9317/* Called during unload, to stop PTP-related stuff */
   9318static void bnx2x_stop_ptp(struct bnx2x *bp)
   9319{
   9320	/* Cancel PTP work queue. Should be done after the Tx queues are
   9321	 * drained to prevent additional scheduling.
   9322	 */
   9323	cancel_work_sync(&bp->ptp_task);
   9324
   9325	if (bp->ptp_tx_skb) {
   9326		dev_kfree_skb_any(bp->ptp_tx_skb);
   9327		bp->ptp_tx_skb = NULL;
   9328	}
   9329
   9330	/* Disable PTP in HW */
   9331	bnx2x_disable_ptp(bp);
   9332
   9333	DP(BNX2X_MSG_PTP, "PTP stop ended successfully\n");
   9334}
   9335
   9336void bnx2x_chip_cleanup(struct bnx2x *bp, int unload_mode, bool keep_link)
   9337{
   9338	int port = BP_PORT(bp);
   9339	int i, rc = 0;
   9340	u8 cos;
   9341	struct bnx2x_mcast_ramrod_params rparam = {NULL};
   9342	u32 reset_code;
   9343
   9344	/* Wait until tx fastpath tasks complete */
   9345	for_each_tx_queue(bp, i) {
   9346		struct bnx2x_fastpath *fp = &bp->fp[i];
   9347
   9348		for_each_cos_in_tx_queue(fp, cos)
   9349			rc = bnx2x_clean_tx_queue(bp, fp->txdata_ptr[cos]);
   9350#ifdef BNX2X_STOP_ON_ERROR
   9351		if (rc)
   9352			return;
   9353#endif
   9354	}
   9355
   9356	/* Give HW time to discard old tx messages */
   9357	usleep_range(1000, 2000);
   9358
   9359	/* Clean all ETH MACs */
   9360	rc = bnx2x_del_all_macs(bp, &bp->sp_objs[0].mac_obj, BNX2X_ETH_MAC,
   9361				false);
   9362	if (rc < 0)
   9363		BNX2X_ERR("Failed to delete all ETH macs: %d\n", rc);
   9364
   9365	/* Clean up UC list  */
   9366	rc = bnx2x_del_all_macs(bp, &bp->sp_objs[0].mac_obj, BNX2X_UC_LIST_MAC,
   9367				true);
   9368	if (rc < 0)
   9369		BNX2X_ERR("Failed to schedule DEL commands for UC MACs list: %d\n",
   9370			  rc);
   9371
   9372	/* The whole *vlan_obj structure may be not initialized if VLAN
   9373	 * filtering offload is not supported by hardware. Currently this is
   9374	 * true for all hardware covered by CHIP_IS_E1x().
   9375	 */
   9376	if (!CHIP_IS_E1x(bp)) {
   9377		/* Remove all currently configured VLANs */
   9378		rc = bnx2x_del_all_vlans(bp);
   9379		if (rc < 0)
   9380			BNX2X_ERR("Failed to delete all VLANs\n");
   9381	}
   9382
   9383	/* Disable LLH */
   9384	if (!CHIP_IS_E1(bp))
   9385		REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
   9386
   9387	/* Set "drop all" (stop Rx).
   9388	 * We need to take a netif_addr_lock() here in order to prevent
   9389	 * a race between the completion code and this code.
   9390	 */
   9391	netif_addr_lock_bh(bp->dev);
   9392	/* Schedule the rx_mode command */
   9393	if (test_bit(BNX2X_FILTER_RX_MODE_PENDING, &bp->sp_state))
   9394		set_bit(BNX2X_FILTER_RX_MODE_SCHED, &bp->sp_state);
   9395	else if (bp->slowpath)
   9396		bnx2x_set_storm_rx_mode(bp);
   9397
   9398	/* Cleanup multicast configuration */
   9399	rparam.mcast_obj = &bp->mcast_obj;
   9400	rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL);
   9401	if (rc < 0)
   9402		BNX2X_ERR("Failed to send DEL multicast command: %d\n", rc);
   9403
   9404	netif_addr_unlock_bh(bp->dev);
   9405
   9406	bnx2x_iov_chip_cleanup(bp);
   9407
   9408	/*
   9409	 * Send the UNLOAD_REQUEST to the MCP. This will return if
   9410	 * this function should perform FUNC, PORT or COMMON HW
   9411	 * reset.
   9412	 */
   9413	reset_code = bnx2x_send_unload_req(bp, unload_mode);
   9414
   9415	/*
   9416	 * (assumption: No Attention from MCP at this stage)
   9417	 * PMF probably in the middle of TX disable/enable transaction
   9418	 */
   9419	rc = bnx2x_func_wait_started(bp);
   9420	if (rc) {
   9421		BNX2X_ERR("bnx2x_func_wait_started failed\n");
   9422#ifdef BNX2X_STOP_ON_ERROR
   9423		return;
   9424#endif
   9425	}
   9426
   9427	/* Close multi and leading connections
   9428	 * Completions for ramrods are collected in a synchronous way
   9429	 */
   9430	for_each_eth_queue(bp, i)
   9431		if (bnx2x_stop_queue(bp, i))
   9432#ifdef BNX2X_STOP_ON_ERROR
   9433			return;
   9434#else
   9435			goto unload_error;
   9436#endif
   9437
   9438	if (CNIC_LOADED(bp)) {
   9439		for_each_cnic_queue(bp, i)
   9440			if (bnx2x_stop_queue(bp, i))
   9441#ifdef BNX2X_STOP_ON_ERROR
   9442				return;
   9443#else
   9444				goto unload_error;
   9445#endif
   9446	}
   9447
   9448	/* If SP settings didn't get completed so far - something
   9449	 * very wrong has happen.
   9450	 */
   9451	if (!bnx2x_wait_sp_comp(bp, ~0x0UL))
   9452		BNX2X_ERR("Hmmm... Common slow path ramrods got stuck!\n");
   9453
   9454#ifndef BNX2X_STOP_ON_ERROR
   9455unload_error:
   9456#endif
   9457	rc = bnx2x_func_stop(bp);
   9458	if (rc) {
   9459		BNX2X_ERR("Function stop failed!\n");
   9460#ifdef BNX2X_STOP_ON_ERROR
   9461		return;
   9462#endif
   9463	}
   9464
   9465	/* stop_ptp should be after the Tx queues are drained to prevent
   9466	 * scheduling to the cancelled PTP work queue. It should also be after
   9467	 * function stop ramrod is sent, since as part of this ramrod FW access
   9468	 * PTP registers.
   9469	 */
   9470	if (bp->flags & PTP_SUPPORTED) {
   9471		bnx2x_stop_ptp(bp);
   9472		if (bp->ptp_clock) {
   9473			ptp_clock_unregister(bp->ptp_clock);
   9474			bp->ptp_clock = NULL;
   9475		}
   9476	}
   9477
   9478	/* Disable HW interrupts, NAPI */
   9479	bnx2x_netif_stop(bp, 1);
   9480	/* Delete all NAPI objects */
   9481	bnx2x_del_all_napi(bp);
   9482	if (CNIC_LOADED(bp))
   9483		bnx2x_del_all_napi_cnic(bp);
   9484
   9485	/* Release IRQs */
   9486	bnx2x_free_irq(bp);
   9487
   9488	/* Reset the chip, unless PCI function is offline. If we reach this
   9489	 * point following a PCI error handling, it means device is really
   9490	 * in a bad state and we're about to remove it, so reset the chip
   9491	 * is not a good idea.
   9492	 */
   9493	if (!pci_channel_offline(bp->pdev)) {
   9494		rc = bnx2x_reset_hw(bp, reset_code);
   9495		if (rc)
   9496			BNX2X_ERR("HW_RESET failed\n");
   9497	}
   9498
   9499	/* Report UNLOAD_DONE to MCP */
   9500	bnx2x_send_unload_done(bp, keep_link);
   9501}
   9502
   9503void bnx2x_disable_close_the_gate(struct bnx2x *bp)
   9504{
   9505	u32 val;
   9506
   9507	DP(NETIF_MSG_IFDOWN, "Disabling \"close the gates\"\n");
   9508
   9509	if (CHIP_IS_E1(bp)) {
   9510		int port = BP_PORT(bp);
   9511		u32 addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 :
   9512			MISC_REG_AEU_MASK_ATTN_FUNC_0;
   9513
   9514		val = REG_RD(bp, addr);
   9515		val &= ~(0x300);
   9516		REG_WR(bp, addr, val);
   9517	} else {
   9518		val = REG_RD(bp, MISC_REG_AEU_GENERAL_MASK);
   9519		val &= ~(MISC_AEU_GENERAL_MASK_REG_AEU_PXP_CLOSE_MASK |
   9520			 MISC_AEU_GENERAL_MASK_REG_AEU_NIG_CLOSE_MASK);
   9521		REG_WR(bp, MISC_REG_AEU_GENERAL_MASK, val);
   9522	}
   9523}
   9524
   9525/* Close gates #2, #3 and #4: */
   9526static void bnx2x_set_234_gates(struct bnx2x *bp, bool close)
   9527{
   9528	u32 val;
   9529
   9530	/* Gates #2 and #4a are closed/opened for "not E1" only */
   9531	if (!CHIP_IS_E1(bp)) {
   9532		/* #4 */
   9533		REG_WR(bp, PXP_REG_HST_DISCARD_DOORBELLS, !!close);
   9534		/* #2 */
   9535		REG_WR(bp, PXP_REG_HST_DISCARD_INTERNAL_WRITES, !!close);
   9536	}
   9537
   9538	/* #3 */
   9539	if (CHIP_IS_E1x(bp)) {
   9540		/* Prevent interrupts from HC on both ports */
   9541		val = REG_RD(bp, HC_REG_CONFIG_1);
   9542		REG_WR(bp, HC_REG_CONFIG_1,
   9543		       (!close) ? (val | HC_CONFIG_1_REG_BLOCK_DISABLE_1) :
   9544		       (val & ~(u32)HC_CONFIG_1_REG_BLOCK_DISABLE_1));
   9545
   9546		val = REG_RD(bp, HC_REG_CONFIG_0);
   9547		REG_WR(bp, HC_REG_CONFIG_0,
   9548		       (!close) ? (val | HC_CONFIG_0_REG_BLOCK_DISABLE_0) :
   9549		       (val & ~(u32)HC_CONFIG_0_REG_BLOCK_DISABLE_0));
   9550	} else {
   9551		/* Prevent incoming interrupts in IGU */
   9552		val = REG_RD(bp, IGU_REG_BLOCK_CONFIGURATION);
   9553
   9554		REG_WR(bp, IGU_REG_BLOCK_CONFIGURATION,
   9555		       (!close) ?
   9556		       (val | IGU_BLOCK_CONFIGURATION_REG_BLOCK_ENABLE) :
   9557		       (val & ~(u32)IGU_BLOCK_CONFIGURATION_REG_BLOCK_ENABLE));
   9558	}
   9559
   9560	DP(NETIF_MSG_HW | NETIF_MSG_IFUP, "%s gates #2, #3 and #4\n",
   9561		close ? "closing" : "opening");
   9562}
   9563
   9564#define SHARED_MF_CLP_MAGIC  0x80000000 /* `magic' bit */
   9565
   9566static void bnx2x_clp_reset_prep(struct bnx2x *bp, u32 *magic_val)
   9567{
   9568	/* Do some magic... */
   9569	u32 val = MF_CFG_RD(bp, shared_mf_config.clp_mb);
   9570	*magic_val = val & SHARED_MF_CLP_MAGIC;
   9571	MF_CFG_WR(bp, shared_mf_config.clp_mb, val | SHARED_MF_CLP_MAGIC);
   9572}
   9573
   9574/**
   9575 * bnx2x_clp_reset_done - restore the value of the `magic' bit.
   9576 *
   9577 * @bp:		driver handle
   9578 * @magic_val:	old value of the `magic' bit.
   9579 */
   9580static void bnx2x_clp_reset_done(struct bnx2x *bp, u32 magic_val)
   9581{
   9582	/* Restore the `magic' bit value... */
   9583	u32 val = MF_CFG_RD(bp, shared_mf_config.clp_mb);
   9584	MF_CFG_WR(bp, shared_mf_config.clp_mb,
   9585		(val & (~SHARED_MF_CLP_MAGIC)) | magic_val);
   9586}
   9587
   9588/**
   9589 * bnx2x_reset_mcp_prep - prepare for MCP reset.
   9590 *
   9591 * @bp:		driver handle
   9592 * @magic_val:	old value of 'magic' bit.
   9593 *
   9594 * Takes care of CLP configurations.
   9595 */
   9596static void bnx2x_reset_mcp_prep(struct bnx2x *bp, u32 *magic_val)
   9597{
   9598	u32 shmem;
   9599	u32 validity_offset;
   9600
   9601	DP(NETIF_MSG_HW | NETIF_MSG_IFUP, "Starting\n");
   9602
   9603	/* Set `magic' bit in order to save MF config */
   9604	if (!CHIP_IS_E1(bp))
   9605		bnx2x_clp_reset_prep(bp, magic_val);
   9606
   9607	/* Get shmem offset */
   9608	shmem = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR);
   9609	validity_offset =
   9610		offsetof(struct shmem_region, validity_map[BP_PORT(bp)]);
   9611
   9612	/* Clear validity map flags */
   9613	if (shmem > 0)
   9614		REG_WR(bp, shmem + validity_offset, 0);
   9615}
   9616
   9617#define MCP_TIMEOUT      5000   /* 5 seconds (in ms) */
   9618#define MCP_ONE_TIMEOUT  100    /* 100 ms */
   9619
   9620/**
   9621 * bnx2x_mcp_wait_one - wait for MCP_ONE_TIMEOUT
   9622 *
   9623 * @bp:	driver handle
   9624 */
   9625static void bnx2x_mcp_wait_one(struct bnx2x *bp)
   9626{
   9627	/* special handling for emulation and FPGA,
   9628	   wait 10 times longer */
   9629	if (CHIP_REV_IS_SLOW(bp))
   9630		msleep(MCP_ONE_TIMEOUT*10);
   9631	else
   9632		msleep(MCP_ONE_TIMEOUT);
   9633}
   9634
   9635/*
   9636 * initializes bp->common.shmem_base and waits for validity signature to appear
   9637 */
   9638static int bnx2x_init_shmem(struct bnx2x *bp)
   9639{
   9640	int cnt = 0;
   9641	u32 val = 0;
   9642
   9643	do {
   9644		bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR);
   9645
   9646		/* If we read all 0xFFs, means we are in PCI error state and
   9647		 * should bail out to avoid crashes on adapter's FW reads.
   9648		 */
   9649		if (bp->common.shmem_base == 0xFFFFFFFF) {
   9650			bp->flags |= NO_MCP_FLAG;
   9651			return -ENODEV;
   9652		}
   9653
   9654		if (bp->common.shmem_base) {
   9655			val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]);
   9656			if (val & SHR_MEM_VALIDITY_MB)
   9657				return 0;
   9658		}
   9659
   9660		bnx2x_mcp_wait_one(bp);
   9661
   9662	} while (cnt++ < (MCP_TIMEOUT / MCP_ONE_TIMEOUT));
   9663
   9664	BNX2X_ERR("BAD MCP validity signature\n");
   9665
   9666	return -ENODEV;
   9667}
   9668
   9669static int bnx2x_reset_mcp_comp(struct bnx2x *bp, u32 magic_val)
   9670{
   9671	int rc = bnx2x_init_shmem(bp);
   9672
   9673	/* Restore the `magic' bit value */
   9674	if (!CHIP_IS_E1(bp))
   9675		bnx2x_clp_reset_done(bp, magic_val);
   9676
   9677	return rc;
   9678}
   9679
   9680static void bnx2x_pxp_prep(struct bnx2x *bp)
   9681{
   9682	if (!CHIP_IS_E1(bp)) {
   9683		REG_WR(bp, PXP2_REG_RD_START_INIT, 0);
   9684		REG_WR(bp, PXP2_REG_RQ_RBC_DONE, 0);
   9685	}
   9686}
   9687
   9688/*
   9689 * Reset the whole chip except for:
   9690 *      - PCIE core
   9691 *      - PCI Glue, PSWHST, PXP/PXP2 RF (all controlled by
   9692 *              one reset bit)
   9693 *      - IGU
   9694 *      - MISC (including AEU)
   9695 *      - GRC
   9696 *      - RBCN, RBCP
   9697 */
   9698static void bnx2x_process_kill_chip_reset(struct bnx2x *bp, bool global)
   9699{
   9700	u32 not_reset_mask1, reset_mask1, not_reset_mask2, reset_mask2;
   9701	u32 global_bits2, stay_reset2;
   9702
   9703	/*
   9704	 * Bits that have to be set in reset_mask2 if we want to reset 'global'
   9705	 * (per chip) blocks.
   9706	 */
   9707	global_bits2 =
   9708		MISC_REGISTERS_RESET_REG_2_RST_MCP_N_RESET_CMN_CPU |
   9709		MISC_REGISTERS_RESET_REG_2_RST_MCP_N_RESET_CMN_CORE;
   9710
   9711	/* Don't reset the following blocks.
   9712	 * Important: per port blocks (such as EMAC, BMAC, UMAC) can't be
   9713	 *            reset, as in 4 port device they might still be owned
   9714	 *            by the MCP (there is only one leader per path).
   9715	 */
   9716	not_reset_mask1 =
   9717		MISC_REGISTERS_RESET_REG_1_RST_HC |
   9718		MISC_REGISTERS_RESET_REG_1_RST_PXPV |
   9719		MISC_REGISTERS_RESET_REG_1_RST_PXP;
   9720
   9721	not_reset_mask2 =
   9722		MISC_REGISTERS_RESET_REG_2_RST_PCI_MDIO |
   9723		MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE |
   9724		MISC_REGISTERS_RESET_REG_2_RST_EMAC1_HARD_CORE |
   9725		MISC_REGISTERS_RESET_REG_2_RST_MISC_CORE |
   9726		MISC_REGISTERS_RESET_REG_2_RST_RBCN |
   9727		MISC_REGISTERS_RESET_REG_2_RST_GRC  |
   9728		MISC_REGISTERS_RESET_REG_2_RST_MCP_N_RESET_REG_HARD_CORE |
   9729		MISC_REGISTERS_RESET_REG_2_RST_MCP_N_HARD_CORE_RST_B |
   9730		MISC_REGISTERS_RESET_REG_2_RST_ATC |
   9731		MISC_REGISTERS_RESET_REG_2_PGLC |
   9732		MISC_REGISTERS_RESET_REG_2_RST_BMAC0 |
   9733		MISC_REGISTERS_RESET_REG_2_RST_BMAC1 |
   9734		MISC_REGISTERS_RESET_REG_2_RST_EMAC0 |
   9735		MISC_REGISTERS_RESET_REG_2_RST_EMAC1 |
   9736		MISC_REGISTERS_RESET_REG_2_UMAC0 |
   9737		MISC_REGISTERS_RESET_REG_2_UMAC1;
   9738
   9739	/*
   9740	 * Keep the following blocks in reset:
   9741	 *  - all xxMACs are handled by the bnx2x_link code.
   9742	 */
   9743	stay_reset2 =
   9744		MISC_REGISTERS_RESET_REG_2_XMAC |
   9745		MISC_REGISTERS_RESET_REG_2_XMAC_SOFT;
   9746
   9747	/* Full reset masks according to the chip */
   9748	reset_mask1 = 0xffffffff;
   9749
   9750	if (CHIP_IS_E1(bp))
   9751		reset_mask2 = 0xffff;
   9752	else if (CHIP_IS_E1H(bp))
   9753		reset_mask2 = 0x1ffff;
   9754	else if (CHIP_IS_E2(bp))
   9755		reset_mask2 = 0xfffff;
   9756	else /* CHIP_IS_E3 */
   9757		reset_mask2 = 0x3ffffff;
   9758
   9759	/* Don't reset global blocks unless we need to */
   9760	if (!global)
   9761		reset_mask2 &= ~global_bits2;
   9762
   9763	/*
   9764	 * In case of attention in the QM, we need to reset PXP
   9765	 * (MISC_REGISTERS_RESET_REG_2_RST_PXP_RQ_RD_WR) before QM
   9766	 * because otherwise QM reset would release 'close the gates' shortly
   9767	 * before resetting the PXP, then the PSWRQ would send a write
   9768	 * request to PGLUE. Then when PXP is reset, PGLUE would try to
   9769	 * read the payload data from PSWWR, but PSWWR would not
   9770	 * respond. The write queue in PGLUE would stuck, dmae commands
   9771	 * would not return. Therefore it's important to reset the second
   9772	 * reset register (containing the
   9773	 * MISC_REGISTERS_RESET_REG_2_RST_PXP_RQ_RD_WR bit) before the
   9774	 * first one (containing the MISC_REGISTERS_RESET_REG_1_RST_QM
   9775	 * bit).
   9776	 */
   9777	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR,
   9778	       reset_mask2 & (~not_reset_mask2));
   9779
   9780	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR,
   9781	       reset_mask1 & (~not_reset_mask1));
   9782
   9783	barrier();
   9784
   9785	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET,
   9786	       reset_mask2 & (~stay_reset2));
   9787
   9788	barrier();
   9789
   9790	REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, reset_mask1);
   9791}
   9792
   9793/**
   9794 * bnx2x_er_poll_igu_vq - poll for pending writes bit.
   9795 * It should get cleared in no more than 1s.
   9796 *
   9797 * @bp:	driver handle
   9798 *
   9799 * It should get cleared in no more than 1s. Returns 0 if
   9800 * pending writes bit gets cleared.
   9801 */
   9802static int bnx2x_er_poll_igu_vq(struct bnx2x *bp)
   9803{
   9804	u32 cnt = 1000;
   9805	u32 pend_bits = 0;
   9806
   9807	do {
   9808		pend_bits  = REG_RD(bp, IGU_REG_PENDING_BITS_STATUS);
   9809
   9810		if (pend_bits == 0)
   9811			break;
   9812
   9813		usleep_range(1000, 2000);
   9814	} while (cnt-- > 0);
   9815
   9816	if (cnt <= 0) {
   9817		BNX2X_ERR("Still pending IGU requests pend_bits=%x!\n",
   9818			  pend_bits);
   9819		return -EBUSY;
   9820	}
   9821
   9822	return 0;
   9823}
   9824
   9825static int bnx2x_process_kill(struct bnx2x *bp, bool global)
   9826{
   9827	int cnt = 1000;
   9828	u32 val = 0;
   9829	u32 sr_cnt, blk_cnt, port_is_idle_0, port_is_idle_1, pgl_exp_rom2;
   9830	u32 tags_63_32 = 0;
   9831
   9832	/* Empty the Tetris buffer, wait for 1s */
   9833	do {
   9834		sr_cnt  = REG_RD(bp, PXP2_REG_RD_SR_CNT);
   9835		blk_cnt = REG_RD(bp, PXP2_REG_RD_BLK_CNT);
   9836		port_is_idle_0 = REG_RD(bp, PXP2_REG_RD_PORT_IS_IDLE_0);
   9837		port_is_idle_1 = REG_RD(bp, PXP2_REG_RD_PORT_IS_IDLE_1);
   9838		pgl_exp_rom2 = REG_RD(bp, PXP2_REG_PGL_EXP_ROM2);
   9839		if (CHIP_IS_E3(bp))
   9840			tags_63_32 = REG_RD(bp, PGLUE_B_REG_TAGS_63_32);
   9841
   9842		if ((sr_cnt == 0x7e) && (blk_cnt == 0xa0) &&
   9843		    ((port_is_idle_0 & 0x1) == 0x1) &&
   9844		    ((port_is_idle_1 & 0x1) == 0x1) &&
   9845		    (pgl_exp_rom2 == 0xffffffff) &&
   9846		    (!CHIP_IS_E3(bp) || (tags_63_32 == 0xffffffff)))
   9847			break;
   9848		usleep_range(1000, 2000);
   9849	} while (cnt-- > 0);
   9850
   9851	if (cnt <= 0) {
   9852		BNX2X_ERR("Tetris buffer didn't get empty or there are still outstanding read requests after 1s!\n");
   9853		BNX2X_ERR("sr_cnt=0x%08x, blk_cnt=0x%08x, port_is_idle_0=0x%08x, port_is_idle_1=0x%08x, pgl_exp_rom2=0x%08x\n",
   9854			  sr_cnt, blk_cnt, port_is_idle_0, port_is_idle_1,
   9855			  pgl_exp_rom2);
   9856		return -EAGAIN;
   9857	}
   9858
   9859	barrier();
   9860
   9861	/* Close gates #2, #3 and #4 */
   9862	bnx2x_set_234_gates(bp, true);
   9863
   9864	/* Poll for IGU VQs for 57712 and newer chips */
   9865	if (!CHIP_IS_E1x(bp) && bnx2x_er_poll_igu_vq(bp))
   9866		return -EAGAIN;
   9867
   9868	/* TBD: Indicate that "process kill" is in progress to MCP */
   9869
   9870	/* Clear "unprepared" bit */
   9871	REG_WR(bp, MISC_REG_UNPREPARED, 0);
   9872	barrier();
   9873
   9874	/* Wait for 1ms to empty GLUE and PCI-E core queues,
   9875	 * PSWHST, GRC and PSWRD Tetris buffer.
   9876	 */
   9877	usleep_range(1000, 2000);
   9878
   9879	/* Prepare to chip reset: */
   9880	/* MCP */
   9881	if (global)
   9882		bnx2x_reset_mcp_prep(bp, &val);
   9883
   9884	/* PXP */
   9885	bnx2x_pxp_prep(bp);
   9886	barrier();
   9887
   9888	/* reset the chip */
   9889	bnx2x_process_kill_chip_reset(bp, global);
   9890	barrier();
   9891
   9892	/* clear errors in PGB */
   9893	if (!CHIP_IS_E1x(bp))
   9894		REG_WR(bp, PGLUE_B_REG_LATCHED_ERRORS_CLR, 0x7f);
   9895
   9896	/* Recover after reset: */
   9897	/* MCP */
   9898	if (global && bnx2x_reset_mcp_comp(bp, val))
   9899		return -EAGAIN;
   9900
   9901	/* TBD: Add resetting the NO_MCP mode DB here */
   9902
   9903	/* Open the gates #2, #3 and #4 */
   9904	bnx2x_set_234_gates(bp, false);
   9905
   9906	/* TBD: IGU/AEU preparation bring back the AEU/IGU to a
   9907	 * reset state, re-enable attentions. */
   9908
   9909	return 0;
   9910}
   9911
   9912static int bnx2x_leader_reset(struct bnx2x *bp)
   9913{
   9914	int rc = 0;
   9915	bool global = bnx2x_reset_is_global(bp);
   9916	u32 load_code;
   9917
   9918	/* if not going to reset MCP - load "fake" driver to reset HW while
   9919	 * driver is owner of the HW
   9920	 */
   9921	if (!global && !BP_NOMCP(bp)) {
   9922		load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ,
   9923					     DRV_MSG_CODE_LOAD_REQ_WITH_LFA);
   9924		if (!load_code) {
   9925			BNX2X_ERR("MCP response failure, aborting\n");
   9926			rc = -EAGAIN;
   9927			goto exit_leader_reset;
   9928		}
   9929		if ((load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) &&
   9930		    (load_code != FW_MSG_CODE_DRV_LOAD_COMMON)) {
   9931			BNX2X_ERR("MCP unexpected resp, aborting\n");
   9932			rc = -EAGAIN;
   9933			goto exit_leader_reset2;
   9934		}
   9935		load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
   9936		if (!load_code) {
   9937			BNX2X_ERR("MCP response failure, aborting\n");
   9938			rc = -EAGAIN;
   9939			goto exit_leader_reset2;
   9940		}
   9941	}
   9942
   9943	/* Try to recover after the failure */
   9944	if (bnx2x_process_kill(bp, global)) {
   9945		BNX2X_ERR("Something bad had happen on engine %d! Aii!\n",
   9946			  BP_PATH(bp));
   9947		rc = -EAGAIN;
   9948		goto exit_leader_reset2;
   9949	}
   9950
   9951	/*
   9952	 * Clear RESET_IN_PROGRES and RESET_GLOBAL bits and update the driver
   9953	 * state.
   9954	 */
   9955	bnx2x_set_reset_done(bp);
   9956	if (global)
   9957		bnx2x_clear_reset_global(bp);
   9958
   9959exit_leader_reset2:
   9960	/* unload "fake driver" if it was loaded */
   9961	if (!global && !BP_NOMCP(bp)) {
   9962		bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0);
   9963		bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
   9964	}
   9965exit_leader_reset:
   9966	bp->is_leader = 0;
   9967	bnx2x_release_leader_lock(bp);
   9968	smp_mb();
   9969	return rc;
   9970}
   9971
   9972static void bnx2x_recovery_failed(struct bnx2x *bp)
   9973{
   9974	netdev_err(bp->dev, "Recovery has failed. Power cycle is needed.\n");
   9975
   9976	/* Disconnect this device */
   9977	netif_device_detach(bp->dev);
   9978
   9979	/*
   9980	 * Block ifup for all function on this engine until "process kill"
   9981	 * or power cycle.
   9982	 */
   9983	bnx2x_set_reset_in_progress(bp);
   9984
   9985	/* Shut down the power */
   9986	bnx2x_set_power_state(bp, PCI_D3hot);
   9987
   9988	bp->recovery_state = BNX2X_RECOVERY_FAILED;
   9989
   9990	smp_mb();
   9991}
   9992
   9993/*
   9994 * Assumption: runs under rtnl lock. This together with the fact
   9995 * that it's called only from bnx2x_sp_rtnl() ensure that it
   9996 * will never be called when netif_running(bp->dev) is false.
   9997 */
   9998static void bnx2x_parity_recover(struct bnx2x *bp)
   9999{
  10000	u32 error_recovered, error_unrecovered;
  10001	bool is_parity, global = false;
  10002#ifdef CONFIG_BNX2X_SRIOV
  10003	int vf_idx;
  10004
  10005	for (vf_idx = 0; vf_idx < bp->requested_nr_virtfn; vf_idx++) {
  10006		struct bnx2x_virtf *vf = BP_VF(bp, vf_idx);
  10007
  10008		if (vf)
  10009			vf->state = VF_LOST;
  10010	}
  10011#endif
  10012	DP(NETIF_MSG_HW, "Handling parity\n");
  10013	while (1) {
  10014		switch (bp->recovery_state) {
  10015		case BNX2X_RECOVERY_INIT:
  10016			DP(NETIF_MSG_HW, "State is BNX2X_RECOVERY_INIT\n");
  10017			is_parity = bnx2x_chk_parity_attn(bp, &global, false);
  10018			WARN_ON(!is_parity);
  10019
  10020			/* Try to get a LEADER_LOCK HW lock */
  10021			if (bnx2x_trylock_leader_lock(bp)) {
  10022				bnx2x_set_reset_in_progress(bp);
  10023				/*
  10024				 * Check if there is a global attention and if
  10025				 * there was a global attention, set the global
  10026				 * reset bit.
  10027				 */
  10028
  10029				if (global)
  10030					bnx2x_set_reset_global(bp);
  10031
  10032				bp->is_leader = 1;
  10033			}
  10034
  10035			/* Stop the driver */
  10036			/* If interface has been removed - break */
  10037			if (bnx2x_nic_unload(bp, UNLOAD_RECOVERY, false))
  10038				return;
  10039
  10040			bp->recovery_state = BNX2X_RECOVERY_WAIT;
  10041
  10042			/* Ensure "is_leader", MCP command sequence and
  10043			 * "recovery_state" update values are seen on other
  10044			 * CPUs.
  10045			 */
  10046			smp_mb();
  10047			break;
  10048
  10049		case BNX2X_RECOVERY_WAIT:
  10050			DP(NETIF_MSG_HW, "State is BNX2X_RECOVERY_WAIT\n");
  10051			if (bp->is_leader) {
  10052				int other_engine = BP_PATH(bp) ? 0 : 1;
  10053				bool other_load_status =
  10054					bnx2x_get_load_status(bp, other_engine);
  10055				bool load_status =
  10056					bnx2x_get_load_status(bp, BP_PATH(bp));
  10057				global = bnx2x_reset_is_global(bp);
  10058
  10059				/*
  10060				 * In case of a parity in a global block, let
  10061				 * the first leader that performs a
  10062				 * leader_reset() reset the global blocks in
  10063				 * order to clear global attentions. Otherwise
  10064				 * the gates will remain closed for that
  10065				 * engine.
  10066				 */
  10067				if (load_status ||
  10068				    (global && other_load_status)) {
  10069					/* Wait until all other functions get
  10070					 * down.
  10071					 */
  10072					schedule_delayed_work(&bp->sp_rtnl_task,
  10073								HZ/10);
  10074					return;
  10075				} else {
  10076					/* If all other functions got down -
  10077					 * try to bring the chip back to
  10078					 * normal. In any case it's an exit
  10079					 * point for a leader.
  10080					 */
  10081					if (bnx2x_leader_reset(bp)) {
  10082						bnx2x_recovery_failed(bp);
  10083						return;
  10084					}
  10085
  10086					/* If we are here, means that the
  10087					 * leader has succeeded and doesn't
  10088					 * want to be a leader any more. Try
  10089					 * to continue as a none-leader.
  10090					 */
  10091					break;
  10092				}
  10093			} else { /* non-leader */
  10094				if (!bnx2x_reset_is_done(bp, BP_PATH(bp))) {
  10095					/* Try to get a LEADER_LOCK HW lock as
  10096					 * long as a former leader may have
  10097					 * been unloaded by the user or
  10098					 * released a leadership by another
  10099					 * reason.
  10100					 */
  10101					if (bnx2x_trylock_leader_lock(bp)) {
  10102						/* I'm a leader now! Restart a
  10103						 * switch case.
  10104						 */
  10105						bp->is_leader = 1;
  10106						break;
  10107					}
  10108
  10109					schedule_delayed_work(&bp->sp_rtnl_task,
  10110								HZ/10);
  10111					return;
  10112
  10113				} else {
  10114					/*
  10115					 * If there was a global attention, wait
  10116					 * for it to be cleared.
  10117					 */
  10118					if (bnx2x_reset_is_global(bp)) {
  10119						schedule_delayed_work(
  10120							&bp->sp_rtnl_task,
  10121							HZ/10);
  10122						return;
  10123					}
  10124
  10125					error_recovered =
  10126					  bp->eth_stats.recoverable_error;
  10127					error_unrecovered =
  10128					  bp->eth_stats.unrecoverable_error;
  10129					bp->recovery_state =
  10130						BNX2X_RECOVERY_NIC_LOADING;
  10131					if (bnx2x_nic_load(bp, LOAD_NORMAL)) {
  10132						error_unrecovered++;
  10133						netdev_err(bp->dev,
  10134							   "Recovery failed. Power cycle needed\n");
  10135						/* Disconnect this device */
  10136						netif_device_detach(bp->dev);
  10137						/* Shut down the power */
  10138						bnx2x_set_power_state(
  10139							bp, PCI_D3hot);
  10140						smp_mb();
  10141					} else {
  10142						bp->recovery_state =
  10143							BNX2X_RECOVERY_DONE;
  10144						error_recovered++;
  10145						smp_mb();
  10146					}
  10147					bp->eth_stats.recoverable_error =
  10148						error_recovered;
  10149					bp->eth_stats.unrecoverable_error =
  10150						error_unrecovered;
  10151
  10152					return;
  10153				}
  10154			}
  10155		default:
  10156			return;
  10157		}
  10158	}
  10159}
  10160
  10161static int bnx2x_udp_port_update(struct bnx2x *bp)
  10162{
  10163	struct bnx2x_func_switch_update_params *switch_update_params;
  10164	struct bnx2x_func_state_params func_params = {NULL};
  10165	u16 vxlan_port = 0, geneve_port = 0;
  10166	int rc;
  10167
  10168	switch_update_params = &func_params.params.switch_update;
  10169
  10170	/* Prepare parameters for function state transitions */
  10171	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
  10172	__set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
  10173
  10174	func_params.f_obj = &bp->func_obj;
  10175	func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
  10176
  10177	/* Function parameters */
  10178	__set_bit(BNX2X_F_UPDATE_TUNNEL_CFG_CHNG,
  10179		  &switch_update_params->changes);
  10180
  10181	if (bp->udp_tunnel_ports[BNX2X_UDP_PORT_GENEVE]) {
  10182		geneve_port = bp->udp_tunnel_ports[BNX2X_UDP_PORT_GENEVE];
  10183		switch_update_params->geneve_dst_port = geneve_port;
  10184	}
  10185
  10186	if (bp->udp_tunnel_ports[BNX2X_UDP_PORT_VXLAN]) {
  10187		vxlan_port = bp->udp_tunnel_ports[BNX2X_UDP_PORT_VXLAN];
  10188		switch_update_params->vxlan_dst_port = vxlan_port;
  10189	}
  10190
  10191	/* Re-enable inner-rss for the offloaded UDP tunnels */
  10192	__set_bit(BNX2X_F_UPDATE_TUNNEL_INNER_RSS,
  10193		  &switch_update_params->changes);
  10194
  10195	rc = bnx2x_func_state_change(bp, &func_params);
  10196	if (rc)
  10197		BNX2X_ERR("failed to set UDP dst port to %04x %04x (rc = 0x%x)\n",
  10198			  vxlan_port, geneve_port, rc);
  10199	else
  10200		DP(BNX2X_MSG_SP,
  10201		   "Configured UDP ports: Vxlan [%04x] Geneve [%04x]\n",
  10202		   vxlan_port, geneve_port);
  10203
  10204	return rc;
  10205}
  10206
  10207static int bnx2x_udp_tunnel_sync(struct net_device *netdev, unsigned int table)
  10208{
  10209	struct bnx2x *bp = netdev_priv(netdev);
  10210	struct udp_tunnel_info ti;
  10211
  10212	udp_tunnel_nic_get_port(netdev, table, 0, &ti);
  10213	bp->udp_tunnel_ports[table] = be16_to_cpu(ti.port);
  10214
  10215	return bnx2x_udp_port_update(bp);
  10216}
  10217
  10218static const struct udp_tunnel_nic_info bnx2x_udp_tunnels = {
  10219	.sync_table	= bnx2x_udp_tunnel_sync,
  10220	.flags		= UDP_TUNNEL_NIC_INFO_MAY_SLEEP |
  10221			  UDP_TUNNEL_NIC_INFO_OPEN_ONLY,
  10222	.tables		= {
  10223		{ .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_VXLAN,  },
  10224		{ .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_GENEVE, },
  10225	},
  10226};
  10227
  10228static int bnx2x_close(struct net_device *dev);
  10229
  10230/* bnx2x_nic_unload() flushes the bnx2x_wq, thus reset task is
  10231 * scheduled on a general queue in order to prevent a dead lock.
  10232 */
  10233static void bnx2x_sp_rtnl_task(struct work_struct *work)
  10234{
  10235	struct bnx2x *bp = container_of(work, struct bnx2x, sp_rtnl_task.work);
  10236
  10237	rtnl_lock();
  10238
  10239	if (!netif_running(bp->dev)) {
  10240		rtnl_unlock();
  10241		return;
  10242	}
  10243
  10244	if (unlikely(bp->recovery_state != BNX2X_RECOVERY_DONE)) {
  10245#ifdef BNX2X_STOP_ON_ERROR
  10246		BNX2X_ERR("recovery flow called but STOP_ON_ERROR defined so reset not done to allow debug dump,\n"
  10247			  "you will need to reboot when done\n");
  10248		goto sp_rtnl_not_reset;
  10249#endif
  10250		/*
  10251		 * Clear all pending SP commands as we are going to reset the
  10252		 * function anyway.
  10253		 */
  10254		bp->sp_rtnl_state = 0;
  10255		smp_mb();
  10256
  10257		bnx2x_parity_recover(bp);
  10258
  10259		rtnl_unlock();
  10260		return;
  10261	}
  10262
  10263	if (test_and_clear_bit(BNX2X_SP_RTNL_TX_TIMEOUT, &bp->sp_rtnl_state)) {
  10264#ifdef BNX2X_STOP_ON_ERROR
  10265		BNX2X_ERR("recovery flow called but STOP_ON_ERROR defined so reset not done to allow debug dump,\n"
  10266			  "you will need to reboot when done\n");
  10267		goto sp_rtnl_not_reset;
  10268#endif
  10269
  10270		/*
  10271		 * Clear all pending SP commands as we are going to reset the
  10272		 * function anyway.
  10273		 */
  10274		bp->sp_rtnl_state = 0;
  10275		smp_mb();
  10276
  10277		/* Immediately indicate link as down */
  10278		bp->link_vars.link_up = 0;
  10279		bp->force_link_down = true;
  10280		netif_carrier_off(bp->dev);
  10281		BNX2X_ERR("Indicating link is down due to Tx-timeout\n");
  10282
  10283		bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);
  10284		/* When ret value shows failure of allocation failure,
  10285		 * the nic is rebooted again. If open still fails, a error
  10286		 * message to notify the user.
  10287		 */
  10288		if (bnx2x_nic_load(bp, LOAD_NORMAL) == -ENOMEM) {
  10289			bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);
  10290			if (bnx2x_nic_load(bp, LOAD_NORMAL))
  10291				BNX2X_ERR("Open the NIC fails again!\n");
  10292		}
  10293		rtnl_unlock();
  10294		return;
  10295	}
  10296#ifdef BNX2X_STOP_ON_ERROR
  10297sp_rtnl_not_reset:
  10298#endif
  10299	if (test_and_clear_bit(BNX2X_SP_RTNL_SETUP_TC, &bp->sp_rtnl_state))
  10300		bnx2x_setup_tc(bp->dev, bp->dcbx_port_params.ets.num_of_cos);
  10301	if (test_and_clear_bit(BNX2X_SP_RTNL_AFEX_F_UPDATE, &bp->sp_rtnl_state))
  10302		bnx2x_after_function_update(bp);
  10303	/*
  10304	 * in case of fan failure we need to reset id if the "stop on error"
  10305	 * debug flag is set, since we trying to prevent permanent overheating
  10306	 * damage
  10307	 */
  10308	if (test_and_clear_bit(BNX2X_SP_RTNL_FAN_FAILURE, &bp->sp_rtnl_state)) {
  10309		DP(NETIF_MSG_HW, "fan failure detected. Unloading driver\n");
  10310		netif_device_detach(bp->dev);
  10311		bnx2x_close(bp->dev);
  10312		rtnl_unlock();
  10313		return;
  10314	}
  10315
  10316	if (test_and_clear_bit(BNX2X_SP_RTNL_VFPF_MCAST, &bp->sp_rtnl_state)) {
  10317		DP(BNX2X_MSG_SP,
  10318		   "sending set mcast vf pf channel message from rtnl sp-task\n");
  10319		bnx2x_vfpf_set_mcast(bp->dev);
  10320	}
  10321	if (test_and_clear_bit(BNX2X_SP_RTNL_VFPF_CHANNEL_DOWN,
  10322			       &bp->sp_rtnl_state)){
  10323		if (netif_carrier_ok(bp->dev)) {
  10324			bnx2x_tx_disable(bp);
  10325			BNX2X_ERR("PF indicated channel is not servicable anymore. This means this VF device is no longer operational\n");
  10326		}
  10327	}
  10328
  10329	if (test_and_clear_bit(BNX2X_SP_RTNL_RX_MODE, &bp->sp_rtnl_state)) {
  10330		DP(BNX2X_MSG_SP, "Handling Rx Mode setting\n");
  10331		bnx2x_set_rx_mode_inner(bp);
  10332	}
  10333
  10334	if (test_and_clear_bit(BNX2X_SP_RTNL_HYPERVISOR_VLAN,
  10335			       &bp->sp_rtnl_state))
  10336		bnx2x_pf_set_vfs_vlan(bp);
  10337
  10338	if (test_and_clear_bit(BNX2X_SP_RTNL_TX_STOP, &bp->sp_rtnl_state)) {
  10339		bnx2x_dcbx_stop_hw_tx(bp);
  10340		bnx2x_dcbx_resume_hw_tx(bp);
  10341	}
  10342
  10343	if (test_and_clear_bit(BNX2X_SP_RTNL_GET_DRV_VERSION,
  10344			       &bp->sp_rtnl_state))
  10345		bnx2x_update_mng_version(bp);
  10346
  10347	if (test_and_clear_bit(BNX2X_SP_RTNL_UPDATE_SVID, &bp->sp_rtnl_state))
  10348		bnx2x_handle_update_svid_cmd(bp);
  10349
  10350	/* work which needs rtnl lock not-taken (as it takes the lock itself and
  10351	 * can be called from other contexts as well)
  10352	 */
  10353	rtnl_unlock();
  10354
  10355	/* enable SR-IOV if applicable */
  10356	if (IS_SRIOV(bp) && test_and_clear_bit(BNX2X_SP_RTNL_ENABLE_SRIOV,
  10357					       &bp->sp_rtnl_state)) {
  10358		bnx2x_disable_sriov(bp);
  10359		bnx2x_enable_sriov(bp);
  10360	}
  10361}
  10362
  10363static void bnx2x_period_task(struct work_struct *work)
  10364{
  10365	struct bnx2x *bp = container_of(work, struct bnx2x, period_task.work);
  10366
  10367	if (!netif_running(bp->dev))
  10368		goto period_task_exit;
  10369
  10370	if (CHIP_REV_IS_SLOW(bp)) {
  10371		BNX2X_ERR("period task called on emulation, ignoring\n");
  10372		goto period_task_exit;
  10373	}
  10374
  10375	bnx2x_acquire_phy_lock(bp);
  10376	/*
  10377	 * The barrier is needed to ensure the ordering between the writing to
  10378	 * the bp->port.pmf in the bnx2x_nic_load() or bnx2x_pmf_update() and
  10379	 * the reading here.
  10380	 */
  10381	smp_mb();
  10382	if (bp->port.pmf) {
  10383		bnx2x_period_func(&bp->link_params, &bp->link_vars);
  10384
  10385		/* Re-queue task in 1 sec */
  10386		queue_delayed_work(bnx2x_wq, &bp->period_task, 1*HZ);
  10387	}
  10388
  10389	bnx2x_release_phy_lock(bp);
  10390period_task_exit:
  10391	return;
  10392}
  10393
  10394/*
  10395 * Init service functions
  10396 */
  10397
  10398static u32 bnx2x_get_pretend_reg(struct bnx2x *bp)
  10399{
  10400	u32 base = PXP2_REG_PGL_PRETEND_FUNC_F0;
  10401	u32 stride = PXP2_REG_PGL_PRETEND_FUNC_F1 - base;
  10402	return base + (BP_ABS_FUNC(bp)) * stride;
  10403}
  10404
  10405static bool bnx2x_prev_unload_close_umac(struct bnx2x *bp,
  10406					 u8 port, u32 reset_reg,
  10407					 struct bnx2x_mac_vals *vals)
  10408{
  10409	u32 mask = MISC_REGISTERS_RESET_REG_2_UMAC0 << port;
  10410	u32 base_addr;
  10411
  10412	if (!(mask & reset_reg))
  10413		return false;
  10414
  10415	BNX2X_DEV_INFO("Disable umac Rx %02x\n", port);
  10416	base_addr = port ? GRCBASE_UMAC1 : GRCBASE_UMAC0;
  10417	vals->umac_addr[port] = base_addr + UMAC_REG_COMMAND_CONFIG;
  10418	vals->umac_val[port] = REG_RD(bp, vals->umac_addr[port]);
  10419	REG_WR(bp, vals->umac_addr[port], 0);
  10420
  10421	return true;
  10422}
  10423
  10424static void bnx2x_prev_unload_close_mac(struct bnx2x *bp,
  10425					struct bnx2x_mac_vals *vals)
  10426{
  10427	u32 val, base_addr, offset, mask, reset_reg;
  10428	bool mac_stopped = false;
  10429	u8 port = BP_PORT(bp);
  10430
  10431	/* reset addresses as they also mark which values were changed */
  10432	memset(vals, 0, sizeof(*vals));
  10433
  10434	reset_reg = REG_RD(bp, MISC_REG_RESET_REG_2);
  10435
  10436	if (!CHIP_IS_E3(bp)) {
  10437		val = REG_RD(bp, NIG_REG_BMAC0_REGS_OUT_EN + port * 4);
  10438		mask = MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port;
  10439		if ((mask & reset_reg) && val) {
  10440			u32 wb_data[2];
  10441			BNX2X_DEV_INFO("Disable bmac Rx\n");
  10442			base_addr = BP_PORT(bp) ? NIG_REG_INGRESS_BMAC1_MEM
  10443						: NIG_REG_INGRESS_BMAC0_MEM;
  10444			offset = CHIP_IS_E2(bp) ? BIGMAC2_REGISTER_BMAC_CONTROL
  10445						: BIGMAC_REGISTER_BMAC_CONTROL;
  10446
  10447			/*
  10448			 * use rd/wr since we cannot use dmae. This is safe
  10449			 * since MCP won't access the bus due to the request
  10450			 * to unload, and no function on the path can be
  10451			 * loaded at this time.
  10452			 */
  10453			wb_data[0] = REG_RD(bp, base_addr + offset);
  10454			wb_data[1] = REG_RD(bp, base_addr + offset + 0x4);
  10455			vals->bmac_addr = base_addr + offset;
  10456			vals->bmac_val[0] = wb_data[0];
  10457			vals->bmac_val[1] = wb_data[1];
  10458			wb_data[0] &= ~BMAC_CONTROL_RX_ENABLE;
  10459			REG_WR(bp, vals->bmac_addr, wb_data[0]);
  10460			REG_WR(bp, vals->bmac_addr + 0x4, wb_data[1]);
  10461		}
  10462		BNX2X_DEV_INFO("Disable emac Rx\n");
  10463		vals->emac_addr = NIG_REG_NIG_EMAC0_EN + BP_PORT(bp)*4;
  10464		vals->emac_val = REG_RD(bp, vals->emac_addr);
  10465		REG_WR(bp, vals->emac_addr, 0);
  10466		mac_stopped = true;
  10467	} else {
  10468		if (reset_reg & MISC_REGISTERS_RESET_REG_2_XMAC) {
  10469			BNX2X_DEV_INFO("Disable xmac Rx\n");
  10470			base_addr = BP_PORT(bp) ? GRCBASE_XMAC1 : GRCBASE_XMAC0;
  10471			val = REG_RD(bp, base_addr + XMAC_REG_PFC_CTRL_HI);
  10472			REG_WR(bp, base_addr + XMAC_REG_PFC_CTRL_HI,
  10473			       val & ~(1 << 1));
  10474			REG_WR(bp, base_addr + XMAC_REG_PFC_CTRL_HI,
  10475			       val | (1 << 1));
  10476			vals->xmac_addr = base_addr + XMAC_REG_CTRL;
  10477			vals->xmac_val = REG_RD(bp, vals->xmac_addr);
  10478			REG_WR(bp, vals->xmac_addr, 0);
  10479			mac_stopped = true;
  10480		}
  10481
  10482		mac_stopped |= bnx2x_prev_unload_close_umac(bp, 0,
  10483							    reset_reg, vals);
  10484		mac_stopped |= bnx2x_prev_unload_close_umac(bp, 1,
  10485							    reset_reg, vals);
  10486	}
  10487
  10488	if (mac_stopped)
  10489		msleep(20);
  10490}
  10491
  10492#define BNX2X_PREV_UNDI_PROD_ADDR(p) (BAR_TSTRORM_INTMEM + 0x1508 + ((p) << 4))
  10493#define BNX2X_PREV_UNDI_PROD_ADDR_H(f) (BAR_TSTRORM_INTMEM + \
  10494					0x1848 + ((f) << 4))
  10495#define BNX2X_PREV_UNDI_RCQ(val)	((val) & 0xffff)
  10496#define BNX2X_PREV_UNDI_BD(val)		((val) >> 16 & 0xffff)
  10497#define BNX2X_PREV_UNDI_PROD(rcq, bd)	((bd) << 16 | (rcq))
  10498
  10499#define BCM_5710_UNDI_FW_MF_MAJOR	(0x07)
  10500#define BCM_5710_UNDI_FW_MF_MINOR	(0x08)
  10501#define BCM_5710_UNDI_FW_MF_VERS	(0x05)
  10502
  10503static bool bnx2x_prev_is_after_undi(struct bnx2x *bp)
  10504{
  10505	/* UNDI marks its presence in DORQ -
  10506	 * it initializes CID offset for normal bell to 0x7
  10507	 */
  10508	if (!(REG_RD(bp, MISC_REG_RESET_REG_1) &
  10509	    MISC_REGISTERS_RESET_REG_1_RST_DORQ))
  10510		return false;
  10511
  10512	if (REG_RD(bp, DORQ_REG_NORM_CID_OFST) == 0x7) {
  10513		BNX2X_DEV_INFO("UNDI previously loaded\n");
  10514		return true;
  10515	}
  10516
  10517	return false;
  10518}
  10519
  10520static void bnx2x_prev_unload_undi_inc(struct bnx2x *bp, u8 inc)
  10521{
  10522	u16 rcq, bd;
  10523	u32 addr, tmp_reg;
  10524
  10525	if (BP_FUNC(bp) < 2)
  10526		addr = BNX2X_PREV_UNDI_PROD_ADDR(BP_PORT(bp));
  10527	else
  10528		addr = BNX2X_PREV_UNDI_PROD_ADDR_H(BP_FUNC(bp) - 2);
  10529
  10530	tmp_reg = REG_RD(bp, addr);
  10531	rcq = BNX2X_PREV_UNDI_RCQ(tmp_reg) + inc;
  10532	bd = BNX2X_PREV_UNDI_BD(tmp_reg) + inc;
  10533
  10534	tmp_reg = BNX2X_PREV_UNDI_PROD(rcq, bd);
  10535	REG_WR(bp, addr, tmp_reg);
  10536
  10537	BNX2X_DEV_INFO("UNDI producer [%d/%d][%08x] rings bd -> 0x%04x, rcq -> 0x%04x\n",
  10538		       BP_PORT(bp), BP_FUNC(bp), addr, bd, rcq);
  10539}
  10540
  10541static int bnx2x_prev_mcp_done(struct bnx2x *bp)
  10542{
  10543	u32 rc = bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE,
  10544				  DRV_MSG_CODE_UNLOAD_SKIP_LINK_RESET);
  10545	if (!rc) {
  10546		BNX2X_ERR("MCP response failure, aborting\n");
  10547		return -EBUSY;
  10548	}
  10549
  10550	return 0;
  10551}
  10552
  10553static struct bnx2x_prev_path_list *
  10554		bnx2x_prev_path_get_entry(struct bnx2x *bp)
  10555{
  10556	struct bnx2x_prev_path_list *tmp_list;
  10557
  10558	list_for_each_entry(tmp_list, &bnx2x_prev_list, list)
  10559		if (PCI_SLOT(bp->pdev->devfn) == tmp_list->slot &&
  10560		    bp->pdev->bus->number == tmp_list->bus &&
  10561		    BP_PATH(bp) == tmp_list->path)
  10562			return tmp_list;
  10563
  10564	return NULL;
  10565}
  10566
  10567static int bnx2x_prev_path_mark_eeh(struct bnx2x *bp)
  10568{
  10569	struct bnx2x_prev_path_list *tmp_list;
  10570	int rc;
  10571
  10572	rc = down_interruptible(&bnx2x_prev_sem);
  10573	if (rc) {
  10574		BNX2X_ERR("Received %d when tried to take lock\n", rc);
  10575		return rc;
  10576	}
  10577
  10578	tmp_list = bnx2x_prev_path_get_entry(bp);
  10579	if (tmp_list) {
  10580		tmp_list->aer = 1;
  10581		rc = 0;
  10582	} else {
  10583		BNX2X_ERR("path %d: Entry does not exist for eeh; Flow occurs before initial insmod is over ?\n",
  10584			  BP_PATH(bp));
  10585	}
  10586
  10587	up(&bnx2x_prev_sem);
  10588
  10589	return rc;
  10590}
  10591
  10592static bool bnx2x_prev_is_path_marked(struct bnx2x *bp)
  10593{
  10594	struct bnx2x_prev_path_list *tmp_list;
  10595	bool rc = false;
  10596
  10597	if (down_trylock(&bnx2x_prev_sem))
  10598		return false;
  10599
  10600	tmp_list = bnx2x_prev_path_get_entry(bp);
  10601	if (tmp_list) {
  10602		if (tmp_list->aer) {
  10603			DP(NETIF_MSG_HW, "Path %d was marked by AER\n",
  10604			   BP_PATH(bp));
  10605		} else {
  10606			rc = true;
  10607			BNX2X_DEV_INFO("Path %d was already cleaned from previous drivers\n",
  10608				       BP_PATH(bp));
  10609		}
  10610	}
  10611
  10612	up(&bnx2x_prev_sem);
  10613
  10614	return rc;
  10615}
  10616
  10617bool bnx2x_port_after_undi(struct bnx2x *bp)
  10618{
  10619	struct bnx2x_prev_path_list *entry;
  10620	bool val;
  10621
  10622	down(&bnx2x_prev_sem);
  10623
  10624	entry = bnx2x_prev_path_get_entry(bp);
  10625	val = !!(entry && (entry->undi & (1 << BP_PORT(bp))));
  10626
  10627	up(&bnx2x_prev_sem);
  10628
  10629	return val;
  10630}
  10631
  10632static int bnx2x_prev_mark_path(struct bnx2x *bp, bool after_undi)
  10633{
  10634	struct bnx2x_prev_path_list *tmp_list;
  10635	int rc;
  10636
  10637	rc = down_interruptible(&bnx2x_prev_sem);
  10638	if (rc) {
  10639		BNX2X_ERR("Received %d when tried to take lock\n", rc);
  10640		return rc;
  10641	}
  10642
  10643	/* Check whether the entry for this path already exists */
  10644	tmp_list = bnx2x_prev_path_get_entry(bp);
  10645	if (tmp_list) {
  10646		if (!tmp_list->aer) {
  10647			BNX2X_ERR("Re-Marking the path.\n");
  10648		} else {
  10649			DP(NETIF_MSG_HW, "Removing AER indication from path %d\n",
  10650			   BP_PATH(bp));
  10651			tmp_list->aer = 0;
  10652		}
  10653		up(&bnx2x_prev_sem);
  10654		return 0;
  10655	}
  10656	up(&bnx2x_prev_sem);
  10657
  10658	/* Create an entry for this path and add it */
  10659	tmp_list = kmalloc(sizeof(struct bnx2x_prev_path_list), GFP_KERNEL);
  10660	if (!tmp_list) {
  10661		BNX2X_ERR("Failed to allocate 'bnx2x_prev_path_list'\n");
  10662		return -ENOMEM;
  10663	}
  10664
  10665	tmp_list->bus = bp->pdev->bus->number;
  10666	tmp_list->slot = PCI_SLOT(bp->pdev->devfn);
  10667	tmp_list->path = BP_PATH(bp);
  10668	tmp_list->aer = 0;
  10669	tmp_list->undi = after_undi ? (1 << BP_PORT(bp)) : 0;
  10670
  10671	rc = down_interruptible(&bnx2x_prev_sem);
  10672	if (rc) {
  10673		BNX2X_ERR("Received %d when tried to take lock\n", rc);
  10674		kfree(tmp_list);
  10675	} else {
  10676		DP(NETIF_MSG_HW, "Marked path [%d] - finished previous unload\n",
  10677		   BP_PATH(bp));
  10678		list_add(&tmp_list->list, &bnx2x_prev_list);
  10679		up(&bnx2x_prev_sem);
  10680	}
  10681
  10682	return rc;
  10683}
  10684
  10685static int bnx2x_do_flr(struct bnx2x *bp)
  10686{
  10687	struct pci_dev *dev = bp->pdev;
  10688
  10689	if (CHIP_IS_E1x(bp)) {
  10690		BNX2X_DEV_INFO("FLR not supported in E1/E1H\n");
  10691		return -EINVAL;
  10692	}
  10693
  10694	/* only bootcode REQ_BC_VER_4_INITIATE_FLR and onwards support flr */
  10695	if (bp->common.bc_ver < REQ_BC_VER_4_INITIATE_FLR) {
  10696		BNX2X_ERR("FLR not supported by BC_VER: 0x%x\n",
  10697			  bp->common.bc_ver);
  10698		return -EINVAL;
  10699	}
  10700
  10701	if (!pci_wait_for_pending_transaction(dev))
  10702		dev_err(&dev->dev, "transaction is not cleared; proceeding with reset anyway\n");
  10703
  10704	BNX2X_DEV_INFO("Initiating FLR\n");
  10705	bnx2x_fw_command(bp, DRV_MSG_CODE_INITIATE_FLR, 0);
  10706
  10707	return 0;
  10708}
  10709
  10710static int bnx2x_prev_unload_uncommon(struct bnx2x *bp)
  10711{
  10712	int rc;
  10713
  10714	BNX2X_DEV_INFO("Uncommon unload Flow\n");
  10715
  10716	/* Test if previous unload process was already finished for this path */
  10717	if (bnx2x_prev_is_path_marked(bp))
  10718		return bnx2x_prev_mcp_done(bp);
  10719
  10720	BNX2X_DEV_INFO("Path is unmarked\n");
  10721
  10722	/* Cannot proceed with FLR if UNDI is loaded, since FW does not match */
  10723	if (bnx2x_prev_is_after_undi(bp))
  10724		goto out;
  10725
  10726	/* If function has FLR capabilities, and existing FW version matches
  10727	 * the one required, then FLR will be sufficient to clean any residue
  10728	 * left by previous driver
  10729	 */
  10730	rc = bnx2x_compare_fw_ver(bp, FW_MSG_CODE_DRV_LOAD_FUNCTION, false);
  10731
  10732	if (!rc) {
  10733		/* fw version is good */
  10734		BNX2X_DEV_INFO("FW version matches our own. Attempting FLR\n");
  10735		rc = bnx2x_do_flr(bp);
  10736	}
  10737
  10738	if (!rc) {
  10739		/* FLR was performed */
  10740		BNX2X_DEV_INFO("FLR successful\n");
  10741		return 0;
  10742	}
  10743
  10744	BNX2X_DEV_INFO("Could not FLR\n");
  10745
  10746out:
  10747	/* Close the MCP request, return failure*/
  10748	rc = bnx2x_prev_mcp_done(bp);
  10749	if (!rc)
  10750		rc = BNX2X_PREV_WAIT_NEEDED;
  10751
  10752	return rc;
  10753}
  10754
  10755static int bnx2x_prev_unload_common(struct bnx2x *bp)
  10756{
  10757	u32 reset_reg, tmp_reg = 0, rc;
  10758	bool prev_undi = false;
  10759	struct bnx2x_mac_vals mac_vals;
  10760
  10761	/* It is possible a previous function received 'common' answer,
  10762	 * but hasn't loaded yet, therefore creating a scenario of
  10763	 * multiple functions receiving 'common' on the same path.
  10764	 */
  10765	BNX2X_DEV_INFO("Common unload Flow\n");
  10766
  10767	memset(&mac_vals, 0, sizeof(mac_vals));
  10768
  10769	if (bnx2x_prev_is_path_marked(bp))
  10770		return bnx2x_prev_mcp_done(bp);
  10771
  10772	reset_reg = REG_RD(bp, MISC_REG_RESET_REG_1);
  10773
  10774	/* Reset should be performed after BRB is emptied */
  10775	if (reset_reg & MISC_REGISTERS_RESET_REG_1_RST_BRB1) {
  10776		u32 timer_count = 1000;
  10777
  10778		/* Close the MAC Rx to prevent BRB from filling up */
  10779		bnx2x_prev_unload_close_mac(bp, &mac_vals);
  10780
  10781		/* close LLH filters for both ports towards the BRB */
  10782		bnx2x_set_rx_filter(&bp->link_params, 0);
  10783		bp->link_params.port ^= 1;
  10784		bnx2x_set_rx_filter(&bp->link_params, 0);
  10785		bp->link_params.port ^= 1;
  10786
  10787		/* Check if the UNDI driver was previously loaded */
  10788		if (bnx2x_prev_is_after_undi(bp)) {
  10789			prev_undi = true;
  10790			/* clear the UNDI indication */
  10791			REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0);
  10792			/* clear possible idle check errors */
  10793			REG_RD(bp, NIG_REG_NIG_INT_STS_CLR_0);
  10794		}
  10795		if (!CHIP_IS_E1x(bp))
  10796			/* block FW from writing to host */
  10797			REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 0);
  10798
  10799		/* wait until BRB is empty */
  10800		tmp_reg = REG_RD(bp, BRB1_REG_NUM_OF_FULL_BLOCKS);
  10801		while (timer_count) {
  10802			u32 prev_brb = tmp_reg;
  10803
  10804			tmp_reg = REG_RD(bp, BRB1_REG_NUM_OF_FULL_BLOCKS);
  10805			if (!tmp_reg)
  10806				break;
  10807
  10808			BNX2X_DEV_INFO("BRB still has 0x%08x\n", tmp_reg);
  10809
  10810			/* reset timer as long as BRB actually gets emptied */
  10811			if (prev_brb > tmp_reg)
  10812				timer_count = 1000;
  10813			else
  10814				timer_count--;
  10815
  10816			/* If UNDI resides in memory, manually increment it */
  10817			if (prev_undi)
  10818				bnx2x_prev_unload_undi_inc(bp, 1);
  10819
  10820			udelay(10);
  10821		}
  10822
  10823		if (!timer_count)
  10824			BNX2X_ERR("Failed to empty BRB, hope for the best\n");
  10825	}
  10826
  10827	/* No packets are in the pipeline, path is ready for reset */
  10828	bnx2x_reset_common(bp);
  10829
  10830	if (mac_vals.xmac_addr)
  10831		REG_WR(bp, mac_vals.xmac_addr, mac_vals.xmac_val);
  10832	if (mac_vals.umac_addr[0])
  10833		REG_WR(bp, mac_vals.umac_addr[0], mac_vals.umac_val[0]);
  10834	if (mac_vals.umac_addr[1])
  10835		REG_WR(bp, mac_vals.umac_addr[1], mac_vals.umac_val[1]);
  10836	if (mac_vals.emac_addr)
  10837		REG_WR(bp, mac_vals.emac_addr, mac_vals.emac_val);
  10838	if (mac_vals.bmac_addr) {
  10839		REG_WR(bp, mac_vals.bmac_addr, mac_vals.bmac_val[0]);
  10840		REG_WR(bp, mac_vals.bmac_addr + 4, mac_vals.bmac_val[1]);
  10841	}
  10842
  10843	rc = bnx2x_prev_mark_path(bp, prev_undi);
  10844	if (rc) {
  10845		bnx2x_prev_mcp_done(bp);
  10846		return rc;
  10847	}
  10848
  10849	return bnx2x_prev_mcp_done(bp);
  10850}
  10851
  10852static int bnx2x_prev_unload(struct bnx2x *bp)
  10853{
  10854	int time_counter = 10;
  10855	u32 rc, fw, hw_lock_reg, hw_lock_val;
  10856	BNX2X_DEV_INFO("Entering Previous Unload Flow\n");
  10857
  10858	/* clear hw from errors which may have resulted from an interrupted
  10859	 * dmae transaction.
  10860	 */
  10861	bnx2x_clean_pglue_errors(bp);
  10862
  10863	/* Release previously held locks */
  10864	hw_lock_reg = (BP_FUNC(bp) <= 5) ?
  10865		      (MISC_REG_DRIVER_CONTROL_1 + BP_FUNC(bp) * 8) :
  10866		      (MISC_REG_DRIVER_CONTROL_7 + (BP_FUNC(bp) - 6) * 8);
  10867
  10868	hw_lock_val = REG_RD(bp, hw_lock_reg);
  10869	if (hw_lock_val) {
  10870		if (hw_lock_val & HW_LOCK_RESOURCE_NVRAM) {
  10871			BNX2X_DEV_INFO("Release Previously held NVRAM lock\n");
  10872			REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB,
  10873			       (MCPR_NVM_SW_ARB_ARB_REQ_CLR1 << BP_PORT(bp)));
  10874		}
  10875
  10876		BNX2X_DEV_INFO("Release Previously held hw lock\n");
  10877		REG_WR(bp, hw_lock_reg, 0xffffffff);
  10878	} else
  10879		BNX2X_DEV_INFO("No need to release hw/nvram locks\n");
  10880
  10881	if (MCPR_ACCESS_LOCK_LOCK & REG_RD(bp, MCP_REG_MCPR_ACCESS_LOCK)) {
  10882		BNX2X_DEV_INFO("Release previously held alr\n");
  10883		bnx2x_release_alr(bp);
  10884	}
  10885
  10886	do {
  10887		int aer = 0;
  10888		/* Lock MCP using an unload request */
  10889		fw = bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS, 0);
  10890		if (!fw) {
  10891			BNX2X_ERR("MCP response failure, aborting\n");
  10892			rc = -EBUSY;
  10893			break;
  10894		}
  10895
  10896		rc = down_interruptible(&bnx2x_prev_sem);
  10897		if (rc) {
  10898			BNX2X_ERR("Cannot check for AER; Received %d when tried to take lock\n",
  10899				  rc);
  10900		} else {
  10901			/* If Path is marked by EEH, ignore unload status */
  10902			aer = !!(bnx2x_prev_path_get_entry(bp) &&
  10903				 bnx2x_prev_path_get_entry(bp)->aer);
  10904			up(&bnx2x_prev_sem);
  10905		}
  10906
  10907		if (fw == FW_MSG_CODE_DRV_UNLOAD_COMMON || aer) {
  10908			rc = bnx2x_prev_unload_common(bp);
  10909			break;
  10910		}
  10911
  10912		/* non-common reply from MCP might require looping */
  10913		rc = bnx2x_prev_unload_uncommon(bp);
  10914		if (rc != BNX2X_PREV_WAIT_NEEDED)
  10915			break;
  10916
  10917		msleep(20);
  10918	} while (--time_counter);
  10919
  10920	if (!time_counter || rc) {
  10921		BNX2X_DEV_INFO("Unloading previous driver did not occur, Possibly due to MF UNDI\n");
  10922		rc = -EPROBE_DEFER;
  10923	}
  10924
  10925	/* Mark function if its port was used to boot from SAN */
  10926	if (bnx2x_port_after_undi(bp))
  10927		bp->link_params.feature_config_flags |=
  10928			FEATURE_CONFIG_BOOT_FROM_SAN;
  10929
  10930	BNX2X_DEV_INFO("Finished Previous Unload Flow [%d]\n", rc);
  10931
  10932	return rc;
  10933}
  10934
  10935static void bnx2x_get_common_hwinfo(struct bnx2x *bp)
  10936{
  10937	u32 val, val2, val3, val4, id, boot_mode;
  10938	u16 pmc;
  10939
  10940	/* Get the chip revision id and number. */
  10941	/* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */
  10942	val = REG_RD(bp, MISC_REG_CHIP_NUM);
  10943	id = ((val & 0xffff) << 16);
  10944	val = REG_RD(bp, MISC_REG_CHIP_REV);
  10945	id |= ((val & 0xf) << 12);
  10946
  10947	/* Metal is read from PCI regs, but we can't access >=0x400 from
  10948	 * the configuration space (so we need to reg_rd)
  10949	 */
  10950	val = REG_RD(bp, PCICFG_OFFSET + PCI_ID_VAL3);
  10951	id |= (((val >> 24) & 0xf) << 4);
  10952	val = REG_RD(bp, MISC_REG_BOND_ID);
  10953	id |= (val & 0xf);
  10954	bp->common.chip_id = id;
  10955
  10956	/* force 57811 according to MISC register */
  10957	if (REG_RD(bp, MISC_REG_CHIP_TYPE) & MISC_REG_CHIP_TYPE_57811_MASK) {
  10958		if (CHIP_IS_57810(bp))
  10959			bp->common.chip_id = (CHIP_NUM_57811 << 16) |
  10960				(bp->common.chip_id & 0x0000FFFF);
  10961		else if (CHIP_IS_57810_MF(bp))
  10962			bp->common.chip_id = (CHIP_NUM_57811_MF << 16) |
  10963				(bp->common.chip_id & 0x0000FFFF);
  10964		bp->common.chip_id |= 0x1;
  10965	}
  10966
  10967	/* Set doorbell size */
  10968	bp->db_size = (1 << BNX2X_DB_SHIFT);
  10969
  10970	if (!CHIP_IS_E1x(bp)) {
  10971		val = REG_RD(bp, MISC_REG_PORT4MODE_EN_OVWR);
  10972		if ((val & 1) == 0)
  10973			val = REG_RD(bp, MISC_REG_PORT4MODE_EN);
  10974		else
  10975			val = (val >> 1) & 1;
  10976		BNX2X_DEV_INFO("chip is in %s\n", val ? "4_PORT_MODE" :
  10977						       "2_PORT_MODE");
  10978		bp->common.chip_port_mode = val ? CHIP_4_PORT_MODE :
  10979						 CHIP_2_PORT_MODE;
  10980
  10981		if (CHIP_MODE_IS_4_PORT(bp))
  10982			bp->pfid = (bp->pf_num >> 1);	/* 0..3 */
  10983		else
  10984			bp->pfid = (bp->pf_num & 0x6);	/* 0, 2, 4, 6 */
  10985	} else {
  10986		bp->common.chip_port_mode = CHIP_PORT_MODE_NONE; /* N/A */
  10987		bp->pfid = bp->pf_num;			/* 0..7 */
  10988	}
  10989
  10990	BNX2X_DEV_INFO("pf_id: %x", bp->pfid);
  10991
  10992	bp->link_params.chip_id = bp->common.chip_id;
  10993	BNX2X_DEV_INFO("chip ID is 0x%x\n", id);
  10994
  10995	val = (REG_RD(bp, 0x2874) & 0x55);
  10996	if ((bp->common.chip_id & 0x1) ||
  10997	    (CHIP_IS_E1(bp) && val) || (CHIP_IS_E1H(bp) && (val == 0x55))) {
  10998		bp->flags |= ONE_PORT_FLAG;
  10999		BNX2X_DEV_INFO("single port device\n");
  11000	}
  11001
  11002	val = REG_RD(bp, MCP_REG_MCPR_NVM_CFG4);
  11003	bp->common.flash_size = (BNX2X_NVRAM_1MB_SIZE <<
  11004				 (val & MCPR_NVM_CFG4_FLASH_SIZE));
  11005	BNX2X_DEV_INFO("flash_size 0x%x (%d)\n",
  11006		       bp->common.flash_size, bp->common.flash_size);
  11007
  11008	bnx2x_init_shmem(bp);
  11009
  11010	bp->common.shmem2_base = REG_RD(bp, (BP_PATH(bp) ?
  11011					MISC_REG_GENERIC_CR_1 :
  11012					MISC_REG_GENERIC_CR_0));
  11013
  11014	bp->link_params.shmem_base = bp->common.shmem_base;
  11015	bp->link_params.shmem2_base = bp->common.shmem2_base;
  11016	if (SHMEM2_RD(bp, size) >
  11017	    (u32)offsetof(struct shmem2_region, lfa_host_addr[BP_PORT(bp)]))
  11018		bp->link_params.lfa_base =
  11019		REG_RD(bp, bp->common.shmem2_base +
  11020		       (u32)offsetof(struct shmem2_region,
  11021				     lfa_host_addr[BP_PORT(bp)]));
  11022	else
  11023		bp->link_params.lfa_base = 0;
  11024	BNX2X_DEV_INFO("shmem offset 0x%x  shmem2 offset 0x%x\n",
  11025		       bp->common.shmem_base, bp->common.shmem2_base);
  11026
  11027	if (!bp->common.shmem_base) {
  11028		BNX2X_DEV_INFO("MCP not active\n");
  11029		bp->flags |= NO_MCP_FLAG;
  11030		return;
  11031	}
  11032
  11033	bp->common.hw_config = SHMEM_RD(bp, dev_info.shared_hw_config.config);
  11034	BNX2X_DEV_INFO("hw_config 0x%08x\n", bp->common.hw_config);
  11035
  11036	bp->link_params.hw_led_mode = ((bp->common.hw_config &
  11037					SHARED_HW_CFG_LED_MODE_MASK) >>
  11038				       SHARED_HW_CFG_LED_MODE_SHIFT);
  11039
  11040	bp->link_params.feature_config_flags = 0;
  11041	val = SHMEM_RD(bp, dev_info.shared_feature_config.config);
  11042	if (val & SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_ENABLED)
  11043		bp->link_params.feature_config_flags |=
  11044				FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED;
  11045	else
  11046		bp->link_params.feature_config_flags &=
  11047				~FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED;
  11048
  11049	val = SHMEM_RD(bp, dev_info.bc_rev) >> 8;
  11050	bp->common.bc_ver = val;
  11051	BNX2X_DEV_INFO("bc_ver %X\n", val);
  11052	if (val < BNX2X_BC_VER) {
  11053		/* for now only warn
  11054		 * later we might need to enforce this */
  11055		BNX2X_ERR("This driver needs bc_ver %X but found %X, please upgrade BC\n",
  11056			  BNX2X_BC_VER, val);
  11057	}
  11058	bp->link_params.feature_config_flags |=
  11059				(val >= REQ_BC_VER_4_VRFY_FIRST_PHY_OPT_MDL) ?
  11060				FEATURE_CONFIG_BC_SUPPORTS_OPT_MDL_VRFY : 0;
  11061
  11062	bp->link_params.feature_config_flags |=
  11063		(val >= REQ_BC_VER_4_VRFY_SPECIFIC_PHY_OPT_MDL) ?
  11064		FEATURE_CONFIG_BC_SUPPORTS_DUAL_PHY_OPT_MDL_VRFY : 0;
  11065	bp->link_params.feature_config_flags |=
  11066		(val >= REQ_BC_VER_4_VRFY_AFEX_SUPPORTED) ?
  11067		FEATURE_CONFIG_BC_SUPPORTS_AFEX : 0;
  11068	bp->link_params.feature_config_flags |=
  11069		(val >= REQ_BC_VER_4_SFP_TX_DISABLE_SUPPORTED) ?
  11070		FEATURE_CONFIG_BC_SUPPORTS_SFP_TX_DISABLED : 0;
  11071
  11072	bp->link_params.feature_config_flags |=
  11073		(val >= REQ_BC_VER_4_MT_SUPPORTED) ?
  11074		FEATURE_CONFIG_MT_SUPPORT : 0;
  11075
  11076	bp->flags |= (val >= REQ_BC_VER_4_PFC_STATS_SUPPORTED) ?
  11077			BC_SUPPORTS_PFC_STATS : 0;
  11078
  11079	bp->flags |= (val >= REQ_BC_VER_4_FCOE_FEATURES) ?
  11080			BC_SUPPORTS_FCOE_FEATURES : 0;
  11081
  11082	bp->flags |= (val >= REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF) ?
  11083			BC_SUPPORTS_DCBX_MSG_NON_PMF : 0;
  11084
  11085	bp->flags |= (val >= REQ_BC_VER_4_RMMOD_CMD) ?
  11086			BC_SUPPORTS_RMMOD_CMD : 0;
  11087
  11088	boot_mode = SHMEM_RD(bp,
  11089			dev_info.port_feature_config[BP_PORT(bp)].mba_config) &
  11090			PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK;
  11091	switch (boot_mode) {
  11092	case PORT_FEATURE_MBA_BOOT_AGENT_TYPE_PXE:
  11093		bp->common.boot_mode = FEATURE_ETH_BOOTMODE_PXE;
  11094		break;
  11095	case PORT_FEATURE_MBA_BOOT_AGENT_TYPE_ISCSIB:
  11096		bp->common.boot_mode = FEATURE_ETH_BOOTMODE_ISCSI;
  11097		break;
  11098	case PORT_FEATURE_MBA_BOOT_AGENT_TYPE_FCOE_BOOT:
  11099		bp->common.boot_mode = FEATURE_ETH_BOOTMODE_FCOE;
  11100		break;
  11101	case PORT_FEATURE_MBA_BOOT_AGENT_TYPE_NONE:
  11102		bp->common.boot_mode = FEATURE_ETH_BOOTMODE_NONE;
  11103		break;
  11104	}
  11105
  11106	pci_read_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_PMC, &pmc);
  11107	bp->flags |= (pmc & PCI_PM_CAP_PME_D3cold) ? 0 : NO_WOL_FLAG;
  11108
  11109	BNX2X_DEV_INFO("%sWoL capable\n",
  11110		       (bp->flags & NO_WOL_FLAG) ? "not " : "");
  11111
  11112	val = SHMEM_RD(bp, dev_info.shared_hw_config.part_num);
  11113	val2 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[4]);
  11114	val3 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[8]);
  11115	val4 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[12]);
  11116
  11117	dev_info(&bp->pdev->dev, "part number %X-%X-%X-%X\n",
  11118		 val, val2, val3, val4);
  11119}
  11120
  11121#define IGU_FID(val)	GET_FIELD((val), IGU_REG_MAPPING_MEMORY_FID)
  11122#define IGU_VEC(val)	GET_FIELD((val), IGU_REG_MAPPING_MEMORY_VECTOR)
  11123
  11124static int bnx2x_get_igu_cam_info(struct bnx2x *bp)
  11125{
  11126	int pfid = BP_FUNC(bp);
  11127	int igu_sb_id;
  11128	u32 val;
  11129	u8 fid, igu_sb_cnt = 0;
  11130
  11131	bp->igu_base_sb = 0xff;
  11132	if (CHIP_INT_MODE_IS_BC(bp)) {
  11133		int vn = BP_VN(bp);
  11134		igu_sb_cnt = bp->igu_sb_cnt;
  11135		bp->igu_base_sb = (CHIP_MODE_IS_4_PORT(bp) ? pfid : vn) *
  11136			FP_SB_MAX_E1x;
  11137
  11138		bp->igu_dsb_id =  E1HVN_MAX * FP_SB_MAX_E1x +
  11139			(CHIP_MODE_IS_4_PORT(bp) ? pfid : vn);
  11140
  11141		return 0;
  11142	}
  11143
  11144	/* IGU in normal mode - read CAM */
  11145	for (igu_sb_id = 0; igu_sb_id < IGU_REG_MAPPING_MEMORY_SIZE;
  11146	     igu_sb_id++) {
  11147		val = REG_RD(bp, IGU_REG_MAPPING_MEMORY + igu_sb_id * 4);
  11148		if (!(val & IGU_REG_MAPPING_MEMORY_VALID))
  11149			continue;
  11150		fid = IGU_FID(val);
  11151		if ((fid & IGU_FID_ENCODE_IS_PF)) {
  11152			if ((fid & IGU_FID_PF_NUM_MASK) != pfid)
  11153				continue;
  11154			if (IGU_VEC(val) == 0)
  11155				/* default status block */
  11156				bp->igu_dsb_id = igu_sb_id;
  11157			else {
  11158				if (bp->igu_base_sb == 0xff)
  11159					bp->igu_base_sb = igu_sb_id;
  11160				igu_sb_cnt++;
  11161			}
  11162		}
  11163	}
  11164
  11165#ifdef CONFIG_PCI_MSI
  11166	/* Due to new PF resource allocation by MFW T7.4 and above, it's
  11167	 * optional that number of CAM entries will not be equal to the value
  11168	 * advertised in PCI.
  11169	 * Driver should use the minimal value of both as the actual status
  11170	 * block count
  11171	 */
  11172	bp->igu_sb_cnt = min_t(int, bp->igu_sb_cnt, igu_sb_cnt);
  11173#endif
  11174
  11175	if (igu_sb_cnt == 0) {
  11176		BNX2X_ERR("CAM configuration error\n");
  11177		return -EINVAL;
  11178	}
  11179
  11180	return 0;
  11181}
  11182
  11183static void bnx2x_link_settings_supported(struct bnx2x *bp, u32 switch_cfg)
  11184{
  11185	int cfg_size = 0, idx, port = BP_PORT(bp);
  11186
  11187	/* Aggregation of supported attributes of all external phys */
  11188	bp->port.supported[0] = 0;
  11189	bp->port.supported[1] = 0;
  11190	switch (bp->link_params.num_phys) {
  11191	case 1:
  11192		bp->port.supported[0] = bp->link_params.phy[INT_PHY].supported;
  11193		cfg_size = 1;
  11194		break;
  11195	case 2:
  11196		bp->port.supported[0] = bp->link_params.phy[EXT_PHY1].supported;
  11197		cfg_size = 1;
  11198		break;
  11199	case 3:
  11200		if (bp->link_params.multi_phy_config &
  11201		    PORT_HW_CFG_PHY_SWAPPED_ENABLED) {
  11202			bp->port.supported[1] =
  11203				bp->link_params.phy[EXT_PHY1].supported;
  11204			bp->port.supported[0] =
  11205				bp->link_params.phy[EXT_PHY2].supported;
  11206		} else {
  11207			bp->port.supported[0] =
  11208				bp->link_params.phy[EXT_PHY1].supported;
  11209			bp->port.supported[1] =
  11210				bp->link_params.phy[EXT_PHY2].supported;
  11211		}
  11212		cfg_size = 2;
  11213		break;
  11214	}
  11215
  11216	if (!(bp->port.supported[0] || bp->port.supported[1])) {
  11217		BNX2X_ERR("NVRAM config error. BAD phy config. PHY1 config 0x%x, PHY2 config 0x%x\n",
  11218			   SHMEM_RD(bp,
  11219			   dev_info.port_hw_config[port].external_phy_config),
  11220			   SHMEM_RD(bp,
  11221			   dev_info.port_hw_config[port].external_phy_config2));
  11222		return;
  11223	}
  11224
  11225	if (CHIP_IS_E3(bp))
  11226		bp->port.phy_addr = REG_RD(bp, MISC_REG_WC0_CTRL_PHY_ADDR);
  11227	else {
  11228		switch (switch_cfg) {
  11229		case SWITCH_CFG_1G:
  11230			bp->port.phy_addr = REG_RD(
  11231				bp, NIG_REG_SERDES0_CTRL_PHY_ADDR + port*0x10);
  11232			break;
  11233		case SWITCH_CFG_10G:
  11234			bp->port.phy_addr = REG_RD(
  11235				bp, NIG_REG_XGXS0_CTRL_PHY_ADDR + port*0x18);
  11236			break;
  11237		default:
  11238			BNX2X_ERR("BAD switch_cfg link_config 0x%x\n",
  11239				  bp->port.link_config[0]);
  11240			return;
  11241		}
  11242	}
  11243	BNX2X_DEV_INFO("phy_addr 0x%x\n", bp->port.phy_addr);
  11244	/* mask what we support according to speed_cap_mask per configuration */
  11245	for (idx = 0; idx < cfg_size; idx++) {
  11246		if (!(bp->link_params.speed_cap_mask[idx] &
  11247				PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF))
  11248			bp->port.supported[idx] &= ~SUPPORTED_10baseT_Half;
  11249
  11250		if (!(bp->link_params.speed_cap_mask[idx] &
  11251				PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL))
  11252			bp->port.supported[idx] &= ~SUPPORTED_10baseT_Full;
  11253
  11254		if (!(bp->link_params.speed_cap_mask[idx] &
  11255				PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF))
  11256			bp->port.supported[idx] &= ~SUPPORTED_100baseT_Half;
  11257
  11258		if (!(bp->link_params.speed_cap_mask[idx] &
  11259				PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL))
  11260			bp->port.supported[idx] &= ~SUPPORTED_100baseT_Full;
  11261
  11262		if (!(bp->link_params.speed_cap_mask[idx] &
  11263					PORT_HW_CFG_SPEED_CAPABILITY_D0_1G))
  11264			bp->port.supported[idx] &= ~(SUPPORTED_1000baseT_Half |
  11265						     SUPPORTED_1000baseT_Full);
  11266
  11267		if (!(bp->link_params.speed_cap_mask[idx] &
  11268					PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))
  11269			bp->port.supported[idx] &= ~SUPPORTED_2500baseX_Full;
  11270
  11271		if (!(bp->link_params.speed_cap_mask[idx] &
  11272					PORT_HW_CFG_SPEED_CAPABILITY_D0_10G))
  11273			bp->port.supported[idx] &= ~SUPPORTED_10000baseT_Full;
  11274
  11275		if (!(bp->link_params.speed_cap_mask[idx] &
  11276					PORT_HW_CFG_SPEED_CAPABILITY_D0_20G))
  11277			bp->port.supported[idx] &= ~SUPPORTED_20000baseKR2_Full;
  11278	}
  11279
  11280	BNX2X_DEV_INFO("supported 0x%x 0x%x\n", bp->port.supported[0],
  11281		       bp->port.supported[1]);
  11282}
  11283
  11284static void bnx2x_link_settings_requested(struct bnx2x *bp)
  11285{
  11286	u32 link_config, idx, cfg_size = 0;
  11287	bp->port.advertising[0] = 0;
  11288	bp->port.advertising[1] = 0;
  11289	switch (bp->link_params.num_phys) {
  11290	case 1:
  11291	case 2:
  11292		cfg_size = 1;
  11293		break;
  11294	case 3:
  11295		cfg_size = 2;
  11296		break;
  11297	}
  11298	for (idx = 0; idx < cfg_size; idx++) {
  11299		bp->link_params.req_duplex[idx] = DUPLEX_FULL;
  11300		link_config = bp->port.link_config[idx];
  11301		switch (link_config & PORT_FEATURE_LINK_SPEED_MASK) {
  11302		case PORT_FEATURE_LINK_SPEED_AUTO:
  11303			if (bp->port.supported[idx] & SUPPORTED_Autoneg) {
  11304				bp->link_params.req_line_speed[idx] =
  11305					SPEED_AUTO_NEG;
  11306				bp->port.advertising[idx] |=
  11307					bp->port.supported[idx];
  11308				if (bp->link_params.phy[EXT_PHY1].type ==
  11309				    PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833)
  11310					bp->port.advertising[idx] |=
  11311					(SUPPORTED_100baseT_Half |
  11312					 SUPPORTED_100baseT_Full);
  11313			} else {
  11314				/* force 10G, no AN */
  11315				bp->link_params.req_line_speed[idx] =
  11316					SPEED_10000;
  11317				bp->port.advertising[idx] |=
  11318					(ADVERTISED_10000baseT_Full |
  11319					 ADVERTISED_FIBRE);
  11320				continue;
  11321			}
  11322			break;
  11323
  11324		case PORT_FEATURE_LINK_SPEED_10M_FULL:
  11325			if (bp->port.supported[idx] & SUPPORTED_10baseT_Full) {
  11326				bp->link_params.req_line_speed[idx] =
  11327					SPEED_10;
  11328				bp->port.advertising[idx] |=
  11329					(ADVERTISED_10baseT_Full |
  11330					 ADVERTISED_TP);
  11331			} else {
  11332				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11333					    link_config,
  11334				    bp->link_params.speed_cap_mask[idx]);
  11335				return;
  11336			}
  11337			break;
  11338
  11339		case PORT_FEATURE_LINK_SPEED_10M_HALF:
  11340			if (bp->port.supported[idx] & SUPPORTED_10baseT_Half) {
  11341				bp->link_params.req_line_speed[idx] =
  11342					SPEED_10;
  11343				bp->link_params.req_duplex[idx] =
  11344					DUPLEX_HALF;
  11345				bp->port.advertising[idx] |=
  11346					(ADVERTISED_10baseT_Half |
  11347					 ADVERTISED_TP);
  11348			} else {
  11349				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11350					    link_config,
  11351					  bp->link_params.speed_cap_mask[idx]);
  11352				return;
  11353			}
  11354			break;
  11355
  11356		case PORT_FEATURE_LINK_SPEED_100M_FULL:
  11357			if (bp->port.supported[idx] &
  11358			    SUPPORTED_100baseT_Full) {
  11359				bp->link_params.req_line_speed[idx] =
  11360					SPEED_100;
  11361				bp->port.advertising[idx] |=
  11362					(ADVERTISED_100baseT_Full |
  11363					 ADVERTISED_TP);
  11364			} else {
  11365				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11366					    link_config,
  11367					  bp->link_params.speed_cap_mask[idx]);
  11368				return;
  11369			}
  11370			break;
  11371
  11372		case PORT_FEATURE_LINK_SPEED_100M_HALF:
  11373			if (bp->port.supported[idx] &
  11374			    SUPPORTED_100baseT_Half) {
  11375				bp->link_params.req_line_speed[idx] =
  11376								SPEED_100;
  11377				bp->link_params.req_duplex[idx] =
  11378								DUPLEX_HALF;
  11379				bp->port.advertising[idx] |=
  11380					(ADVERTISED_100baseT_Half |
  11381					 ADVERTISED_TP);
  11382			} else {
  11383				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11384				    link_config,
  11385				    bp->link_params.speed_cap_mask[idx]);
  11386				return;
  11387			}
  11388			break;
  11389
  11390		case PORT_FEATURE_LINK_SPEED_1G:
  11391			if (bp->port.supported[idx] &
  11392			    SUPPORTED_1000baseT_Full) {
  11393				bp->link_params.req_line_speed[idx] =
  11394					SPEED_1000;
  11395				bp->port.advertising[idx] |=
  11396					(ADVERTISED_1000baseT_Full |
  11397					 ADVERTISED_TP);
  11398			} else if (bp->port.supported[idx] &
  11399				   SUPPORTED_1000baseKX_Full) {
  11400				bp->link_params.req_line_speed[idx] =
  11401					SPEED_1000;
  11402				bp->port.advertising[idx] |=
  11403					ADVERTISED_1000baseKX_Full;
  11404			} else {
  11405				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11406				    link_config,
  11407				    bp->link_params.speed_cap_mask[idx]);
  11408				return;
  11409			}
  11410			break;
  11411
  11412		case PORT_FEATURE_LINK_SPEED_2_5G:
  11413			if (bp->port.supported[idx] &
  11414			    SUPPORTED_2500baseX_Full) {
  11415				bp->link_params.req_line_speed[idx] =
  11416					SPEED_2500;
  11417				bp->port.advertising[idx] |=
  11418					(ADVERTISED_2500baseX_Full |
  11419						ADVERTISED_TP);
  11420			} else {
  11421				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11422				    link_config,
  11423				    bp->link_params.speed_cap_mask[idx]);
  11424				return;
  11425			}
  11426			break;
  11427
  11428		case PORT_FEATURE_LINK_SPEED_10G_CX4:
  11429			if (bp->port.supported[idx] &
  11430			    SUPPORTED_10000baseT_Full) {
  11431				bp->link_params.req_line_speed[idx] =
  11432					SPEED_10000;
  11433				bp->port.advertising[idx] |=
  11434					(ADVERTISED_10000baseT_Full |
  11435						ADVERTISED_FIBRE);
  11436			} else if (bp->port.supported[idx] &
  11437				   SUPPORTED_10000baseKR_Full) {
  11438				bp->link_params.req_line_speed[idx] =
  11439					SPEED_10000;
  11440				bp->port.advertising[idx] |=
  11441					(ADVERTISED_10000baseKR_Full |
  11442						ADVERTISED_FIBRE);
  11443			} else {
  11444				BNX2X_ERR("NVRAM config error. Invalid link_config 0x%x  speed_cap_mask 0x%x\n",
  11445				    link_config,
  11446				    bp->link_params.speed_cap_mask[idx]);
  11447				return;
  11448			}
  11449			break;
  11450		case PORT_FEATURE_LINK_SPEED_20G:
  11451			bp->link_params.req_line_speed[idx] = SPEED_20000;
  11452
  11453			break;
  11454		default:
  11455			BNX2X_ERR("NVRAM config error. BAD link speed link_config 0x%x\n",
  11456				  link_config);
  11457				bp->link_params.req_line_speed[idx] =
  11458							SPEED_AUTO_NEG;
  11459				bp->port.advertising[idx] =
  11460						bp->port.supported[idx];
  11461			break;
  11462		}
  11463
  11464		bp->link_params.req_flow_ctrl[idx] = (link_config &
  11465					 PORT_FEATURE_FLOW_CONTROL_MASK);
  11466		if (bp->link_params.req_flow_ctrl[idx] ==
  11467		    BNX2X_FLOW_CTRL_AUTO) {
  11468			if (!(bp->port.supported[idx] & SUPPORTED_Autoneg))
  11469				bp->link_params.req_flow_ctrl[idx] =
  11470							BNX2X_FLOW_CTRL_NONE;
  11471			else
  11472				bnx2x_set_requested_fc(bp);
  11473		}
  11474
  11475		BNX2X_DEV_INFO("req_line_speed %d  req_duplex %d req_flow_ctrl 0x%x advertising 0x%x\n",
  11476			       bp->link_params.req_line_speed[idx],
  11477			       bp->link_params.req_duplex[idx],
  11478			       bp->link_params.req_flow_ctrl[idx],
  11479			       bp->port.advertising[idx]);
  11480	}
  11481}
  11482
  11483static void bnx2x_set_mac_buf(u8 *mac_buf, u32 mac_lo, u16 mac_hi)
  11484{
  11485	__be16 mac_hi_be = cpu_to_be16(mac_hi);
  11486	__be32 mac_lo_be = cpu_to_be32(mac_lo);
  11487	memcpy(mac_buf, &mac_hi_be, sizeof(mac_hi_be));
  11488	memcpy(mac_buf + sizeof(mac_hi_be), &mac_lo_be, sizeof(mac_lo_be));
  11489}
  11490
  11491static void bnx2x_get_port_hwinfo(struct bnx2x *bp)
  11492{
  11493	int port = BP_PORT(bp);
  11494	u32 config;
  11495	u32 ext_phy_type, ext_phy_config, eee_mode;
  11496
  11497	bp->link_params.bp = bp;
  11498	bp->link_params.port = port;
  11499
  11500	bp->link_params.lane_config =
  11501		SHMEM_RD(bp, dev_info.port_hw_config[port].lane_config);
  11502
  11503	bp->link_params.speed_cap_mask[0] =
  11504		SHMEM_RD(bp,
  11505			 dev_info.port_hw_config[port].speed_capability_mask) &
  11506		PORT_HW_CFG_SPEED_CAPABILITY_D0_MASK;
  11507	bp->link_params.speed_cap_mask[1] =
  11508		SHMEM_RD(bp,
  11509			 dev_info.port_hw_config[port].speed_capability_mask2) &
  11510		PORT_HW_CFG_SPEED_CAPABILITY_D0_MASK;
  11511	bp->port.link_config[0] =
  11512		SHMEM_RD(bp, dev_info.port_feature_config[port].link_config);
  11513
  11514	bp->port.link_config[1] =
  11515		SHMEM_RD(bp, dev_info.port_feature_config[port].link_config2);
  11516
  11517	bp->link_params.multi_phy_config =
  11518		SHMEM_RD(bp, dev_info.port_hw_config[port].multi_phy_config);
  11519	/* If the device is capable of WoL, set the default state according
  11520	 * to the HW
  11521	 */
  11522	config = SHMEM_RD(bp, dev_info.port_feature_config[port].config);
  11523	bp->wol = (!(bp->flags & NO_WOL_FLAG) &&
  11524		   (config & PORT_FEATURE_WOL_ENABLED));
  11525
  11526	if ((config & PORT_FEAT_CFG_STORAGE_PERSONALITY_MASK) ==
  11527	    PORT_FEAT_CFG_STORAGE_PERSONALITY_FCOE && !IS_MF(bp))
  11528		bp->flags |= NO_ISCSI_FLAG;
  11529	if ((config & PORT_FEAT_CFG_STORAGE_PERSONALITY_MASK) ==
  11530	    PORT_FEAT_CFG_STORAGE_PERSONALITY_ISCSI && !(IS_MF(bp)))
  11531		bp->flags |= NO_FCOE_FLAG;
  11532
  11533	BNX2X_DEV_INFO("lane_config 0x%08x  speed_cap_mask0 0x%08x  link_config0 0x%08x\n",
  11534		       bp->link_params.lane_config,
  11535		       bp->link_params.speed_cap_mask[0],
  11536		       bp->port.link_config[0]);
  11537
  11538	bp->link_params.switch_cfg = (bp->port.link_config[0] &
  11539				      PORT_FEATURE_CONNECTED_SWITCH_MASK);
  11540	bnx2x_phy_probe(&bp->link_params);
  11541	bnx2x_link_settings_supported(bp, bp->link_params.switch_cfg);
  11542
  11543	bnx2x_link_settings_requested(bp);
  11544
  11545	/*
  11546	 * If connected directly, work with the internal PHY, otherwise, work
  11547	 * with the external PHY
  11548	 */
  11549	ext_phy_config =
  11550		SHMEM_RD(bp,
  11551			 dev_info.port_hw_config[port].external_phy_config);
  11552	ext_phy_type = XGXS_EXT_PHY_TYPE(ext_phy_config);
  11553	if (ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)
  11554		bp->mdio.prtad = bp->port.phy_addr;
  11555
  11556	else if ((ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE) &&
  11557		 (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN))
  11558		bp->mdio.prtad =
  11559			XGXS_EXT_PHY_ADDR(ext_phy_config);
  11560
  11561	/* Configure link feature according to nvram value */
  11562	eee_mode = (((SHMEM_RD(bp, dev_info.
  11563		      port_feature_config[port].eee_power_mode)) &
  11564		     PORT_FEAT_CFG_EEE_POWER_MODE_MASK) >>
  11565		    PORT_FEAT_CFG_EEE_POWER_MODE_SHIFT);
  11566	if (eee_mode != PORT_FEAT_CFG_EEE_POWER_MODE_DISABLED) {
  11567		bp->link_params.eee_mode = EEE_MODE_ADV_LPI |
  11568					   EEE_MODE_ENABLE_LPI |
  11569					   EEE_MODE_OUTPUT_TIME;
  11570	} else {
  11571		bp->link_params.eee_mode = 0;
  11572	}
  11573}
  11574
  11575void bnx2x_get_iscsi_info(struct bnx2x *bp)
  11576{
  11577	u32 no_flags = NO_ISCSI_FLAG;
  11578	int port = BP_PORT(bp);
  11579	u32 max_iscsi_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
  11580				drv_lic_key[port].max_iscsi_conn);
  11581
  11582	if (!CNIC_SUPPORT(bp)) {
  11583		bp->flags |= no_flags;
  11584		return;
  11585	}
  11586
  11587	/* Get the number of maximum allowed iSCSI connections */
  11588	bp->cnic_eth_dev.max_iscsi_conn =
  11589		(max_iscsi_conn & BNX2X_MAX_ISCSI_INIT_CONN_MASK) >>
  11590		BNX2X_MAX_ISCSI_INIT_CONN_SHIFT;
  11591
  11592	BNX2X_DEV_INFO("max_iscsi_conn 0x%x\n",
  11593		       bp->cnic_eth_dev.max_iscsi_conn);
  11594
  11595	/*
  11596	 * If maximum allowed number of connections is zero -
  11597	 * disable the feature.
  11598	 */
  11599	if (!bp->cnic_eth_dev.max_iscsi_conn)
  11600		bp->flags |= no_flags;
  11601}
  11602
  11603static void bnx2x_get_ext_wwn_info(struct bnx2x *bp, int func)
  11604{
  11605	/* Port info */
  11606	bp->cnic_eth_dev.fcoe_wwn_port_name_hi =
  11607		MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_port_name_upper);
  11608	bp->cnic_eth_dev.fcoe_wwn_port_name_lo =
  11609		MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_port_name_lower);
  11610
  11611	/* Node info */
  11612	bp->cnic_eth_dev.fcoe_wwn_node_name_hi =
  11613		MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_node_name_upper);
  11614	bp->cnic_eth_dev.fcoe_wwn_node_name_lo =
  11615		MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_node_name_lower);
  11616}
  11617
  11618static int bnx2x_shared_fcoe_funcs(struct bnx2x *bp)
  11619{
  11620	u8 count = 0;
  11621
  11622	if (IS_MF(bp)) {
  11623		u8 fid;
  11624
  11625		/* iterate over absolute function ids for this path: */
  11626		for (fid = BP_PATH(bp); fid < E2_FUNC_MAX * 2; fid += 2) {
  11627			if (IS_MF_SD(bp)) {
  11628				u32 cfg = MF_CFG_RD(bp,
  11629						    func_mf_config[fid].config);
  11630
  11631				if (!(cfg & FUNC_MF_CFG_FUNC_HIDE) &&
  11632				    ((cfg & FUNC_MF_CFG_PROTOCOL_MASK) ==
  11633					    FUNC_MF_CFG_PROTOCOL_FCOE))
  11634					count++;
  11635			} else {
  11636				u32 cfg = MF_CFG_RD(bp,
  11637						    func_ext_config[fid].
  11638								      func_cfg);
  11639
  11640				if ((cfg & MACP_FUNC_CFG_FLAGS_ENABLED) &&
  11641				    (cfg & MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD))
  11642					count++;
  11643			}
  11644		}
  11645	} else { /* SF */
  11646		int port, port_cnt = CHIP_MODE_IS_4_PORT(bp) ? 2 : 1;
  11647
  11648		for (port = 0; port < port_cnt; port++) {
  11649			u32 lic = SHMEM_RD(bp,
  11650					   drv_lic_key[port].max_fcoe_conn) ^
  11651				  FW_ENCODE_32BIT_PATTERN;
  11652			if (lic)
  11653				count++;
  11654		}
  11655	}
  11656
  11657	return count;
  11658}
  11659
  11660static void bnx2x_get_fcoe_info(struct bnx2x *bp)
  11661{
  11662	int port = BP_PORT(bp);
  11663	int func = BP_ABS_FUNC(bp);
  11664	u32 max_fcoe_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
  11665				drv_lic_key[port].max_fcoe_conn);
  11666	u8 num_fcoe_func = bnx2x_shared_fcoe_funcs(bp);
  11667
  11668	if (!CNIC_SUPPORT(bp)) {
  11669		bp->flags |= NO_FCOE_FLAG;
  11670		return;
  11671	}
  11672
  11673	/* Get the number of maximum allowed FCoE connections */
  11674	bp->cnic_eth_dev.max_fcoe_conn =
  11675		(max_fcoe_conn & BNX2X_MAX_FCOE_INIT_CONN_MASK) >>
  11676		BNX2X_MAX_FCOE_INIT_CONN_SHIFT;
  11677
  11678	/* Calculate the number of maximum allowed FCoE tasks */
  11679	bp->cnic_eth_dev.max_fcoe_exchanges = MAX_NUM_FCOE_TASKS_PER_ENGINE;
  11680
  11681	/* check if FCoE resources must be shared between different functions */
  11682	if (num_fcoe_func)
  11683		bp->cnic_eth_dev.max_fcoe_exchanges /= num_fcoe_func;
  11684
  11685	/* Read the WWN: */
  11686	if (!IS_MF(bp)) {
  11687		/* Port info */
  11688		bp->cnic_eth_dev.fcoe_wwn_port_name_hi =
  11689			SHMEM_RD(bp,
  11690				 dev_info.port_hw_config[port].
  11691				 fcoe_wwn_port_name_upper);
  11692		bp->cnic_eth_dev.fcoe_wwn_port_name_lo =
  11693			SHMEM_RD(bp,
  11694				 dev_info.port_hw_config[port].
  11695				 fcoe_wwn_port_name_lower);
  11696
  11697		/* Node info */
  11698		bp->cnic_eth_dev.fcoe_wwn_node_name_hi =
  11699			SHMEM_RD(bp,
  11700				 dev_info.port_hw_config[port].
  11701				 fcoe_wwn_node_name_upper);
  11702		bp->cnic_eth_dev.fcoe_wwn_node_name_lo =
  11703			SHMEM_RD(bp,
  11704				 dev_info.port_hw_config[port].
  11705				 fcoe_wwn_node_name_lower);
  11706	} else if (!IS_MF_SD(bp)) {
  11707		/* Read the WWN info only if the FCoE feature is enabled for
  11708		 * this function.
  11709		 */
  11710		if (BNX2X_HAS_MF_EXT_PROTOCOL_FCOE(bp))
  11711			bnx2x_get_ext_wwn_info(bp, func);
  11712	} else {
  11713		if (BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp) && !CHIP_IS_E1x(bp))
  11714			bnx2x_get_ext_wwn_info(bp, func);
  11715	}
  11716
  11717	BNX2X_DEV_INFO("max_fcoe_conn 0x%x\n", bp->cnic_eth_dev.max_fcoe_conn);
  11718
  11719	/*
  11720	 * If maximum allowed number of connections is zero -
  11721	 * disable the feature.
  11722	 */
  11723	if (!bp->cnic_eth_dev.max_fcoe_conn) {
  11724		bp->flags |= NO_FCOE_FLAG;
  11725		eth_zero_addr(bp->fip_mac);
  11726	}
  11727}
  11728
  11729static void bnx2x_get_cnic_info(struct bnx2x *bp)
  11730{
  11731	/*
  11732	 * iSCSI may be dynamically disabled but reading
  11733	 * info here we will decrease memory usage by driver
  11734	 * if the feature is disabled for good
  11735	 */
  11736	bnx2x_get_iscsi_info(bp);
  11737	bnx2x_get_fcoe_info(bp);
  11738}
  11739
  11740static void bnx2x_get_cnic_mac_hwinfo(struct bnx2x *bp)
  11741{
  11742	u32 val, val2;
  11743	int func = BP_ABS_FUNC(bp);
  11744	int port = BP_PORT(bp);
  11745	u8 *iscsi_mac = bp->cnic_eth_dev.iscsi_mac;
  11746	u8 *fip_mac = bp->fip_mac;
  11747
  11748	if (IS_MF(bp)) {
  11749		/* iSCSI and FCoE NPAR MACs: if there is no either iSCSI or
  11750		 * FCoE MAC then the appropriate feature should be disabled.
  11751		 * In non SD mode features configuration comes from struct
  11752		 * func_ext_config.
  11753		 */
  11754		if (!IS_MF_SD(bp)) {
  11755			u32 cfg = MF_CFG_RD(bp, func_ext_config[func].func_cfg);
  11756			if (cfg & MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD) {
  11757				val2 = MF_CFG_RD(bp, func_ext_config[func].
  11758						 iscsi_mac_addr_upper);
  11759				val = MF_CFG_RD(bp, func_ext_config[func].
  11760						iscsi_mac_addr_lower);
  11761				bnx2x_set_mac_buf(iscsi_mac, val, val2);
  11762				BNX2X_DEV_INFO
  11763					("Read iSCSI MAC: %pM\n", iscsi_mac);
  11764			} else {
  11765				bp->flags |= NO_ISCSI_OOO_FLAG | NO_ISCSI_FLAG;
  11766			}
  11767
  11768			if (cfg & MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD) {
  11769				val2 = MF_CFG_RD(bp, func_ext_config[func].
  11770						 fcoe_mac_addr_upper);
  11771				val = MF_CFG_RD(bp, func_ext_config[func].
  11772						fcoe_mac_addr_lower);
  11773				bnx2x_set_mac_buf(fip_mac, val, val2);
  11774				BNX2X_DEV_INFO
  11775					("Read FCoE L2 MAC: %pM\n", fip_mac);
  11776			} else {
  11777				bp->flags |= NO_FCOE_FLAG;
  11778			}
  11779
  11780			bp->mf_ext_config = cfg;
  11781
  11782		} else { /* SD MODE */
  11783			if (BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp)) {
  11784				/* use primary mac as iscsi mac */
  11785				memcpy(iscsi_mac, bp->dev->dev_addr, ETH_ALEN);
  11786
  11787				BNX2X_DEV_INFO("SD ISCSI MODE\n");
  11788				BNX2X_DEV_INFO
  11789					("Read iSCSI MAC: %pM\n", iscsi_mac);
  11790			} else if (BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp)) {
  11791				/* use primary mac as fip mac */
  11792				memcpy(fip_mac, bp->dev->dev_addr, ETH_ALEN);
  11793				BNX2X_DEV_INFO("SD FCoE MODE\n");
  11794				BNX2X_DEV_INFO
  11795					("Read FIP MAC: %pM\n", fip_mac);
  11796			}
  11797		}
  11798
  11799		/* If this is a storage-only interface, use SAN mac as
  11800		 * primary MAC. Notice that for SD this is already the case,
  11801		 * as the SAN mac was copied from the primary MAC.
  11802		 */
  11803		if (IS_MF_FCOE_AFEX(bp))
  11804			eth_hw_addr_set(bp->dev, fip_mac);
  11805	} else {
  11806		val2 = SHMEM_RD(bp, dev_info.port_hw_config[port].
  11807				iscsi_mac_upper);
  11808		val = SHMEM_RD(bp, dev_info.port_hw_config[port].
  11809			       iscsi_mac_lower);
  11810		bnx2x_set_mac_buf(iscsi_mac, val, val2);
  11811
  11812		val2 = SHMEM_RD(bp, dev_info.port_hw_config[port].
  11813				fcoe_fip_mac_upper);
  11814		val = SHMEM_RD(bp, dev_info.port_hw_config[port].
  11815			       fcoe_fip_mac_lower);
  11816		bnx2x_set_mac_buf(fip_mac, val, val2);
  11817	}
  11818
  11819	/* Disable iSCSI OOO if MAC configuration is invalid. */
  11820	if (!is_valid_ether_addr(iscsi_mac)) {
  11821		bp->flags |= NO_ISCSI_OOO_FLAG | NO_ISCSI_FLAG;
  11822		eth_zero_addr(iscsi_mac);
  11823	}
  11824
  11825	/* Disable FCoE if MAC configuration is invalid. */
  11826	if (!is_valid_ether_addr(fip_mac)) {
  11827		bp->flags |= NO_FCOE_FLAG;
  11828		eth_zero_addr(bp->fip_mac);
  11829	}
  11830}
  11831
  11832static void bnx2x_get_mac_hwinfo(struct bnx2x *bp)
  11833{
  11834	u32 val, val2;
  11835	int func = BP_ABS_FUNC(bp);
  11836	int port = BP_PORT(bp);
  11837	u8 addr[ETH_ALEN] = {};
  11838
  11839	/* Zero primary MAC configuration */
  11840	eth_hw_addr_set(bp->dev, addr);
  11841
  11842	if (BP_NOMCP(bp)) {
  11843		BNX2X_ERROR("warning: random MAC workaround active\n");
  11844		eth_hw_addr_random(bp->dev);
  11845	} else if (IS_MF(bp)) {
  11846		val2 = MF_CFG_RD(bp, func_mf_config[func].mac_upper);
  11847		val = MF_CFG_RD(bp, func_mf_config[func].mac_lower);
  11848		if ((val2 != FUNC_MF_CFG_UPPERMAC_DEFAULT) &&
  11849		    (val != FUNC_MF_CFG_LOWERMAC_DEFAULT)) {
  11850			bnx2x_set_mac_buf(addr, val, val2);
  11851			eth_hw_addr_set(bp->dev, addr);
  11852		}
  11853
  11854		if (CNIC_SUPPORT(bp))
  11855			bnx2x_get_cnic_mac_hwinfo(bp);
  11856	} else {
  11857		/* in SF read MACs from port configuration */
  11858		val2 = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_upper);
  11859		val = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_lower);
  11860		bnx2x_set_mac_buf(addr, val, val2);
  11861		eth_hw_addr_set(bp->dev, addr);
  11862
  11863		if (CNIC_SUPPORT(bp))
  11864			bnx2x_get_cnic_mac_hwinfo(bp);
  11865	}
  11866
  11867	if (!BP_NOMCP(bp)) {
  11868		/* Read physical port identifier from shmem */
  11869		val2 = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_upper);
  11870		val = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_lower);
  11871		bnx2x_set_mac_buf(bp->phys_port_id, val, val2);
  11872		bp->flags |= HAS_PHYS_PORT_ID;
  11873	}
  11874
  11875	memcpy(bp->link_params.mac_addr, bp->dev->dev_addr, ETH_ALEN);
  11876
  11877	if (!is_valid_ether_addr(bp->dev->dev_addr))
  11878		dev_err(&bp->pdev->dev,
  11879			"bad Ethernet MAC address configuration: %pM\n"
  11880			"change it manually before bringing up the appropriate network interface\n",
  11881			bp->dev->dev_addr);
  11882}
  11883
  11884static bool bnx2x_get_dropless_info(struct bnx2x *bp)
  11885{
  11886	int tmp;
  11887	u32 cfg;
  11888
  11889	if (IS_VF(bp))
  11890		return false;
  11891
  11892	if (IS_MF(bp) && !CHIP_IS_E1x(bp)) {
  11893		/* Take function: tmp = func */
  11894		tmp = BP_ABS_FUNC(bp);
  11895		cfg = MF_CFG_RD(bp, func_ext_config[tmp].func_cfg);
  11896		cfg = !!(cfg & MACP_FUNC_CFG_PAUSE_ON_HOST_RING);
  11897	} else {
  11898		/* Take port: tmp = port */
  11899		tmp = BP_PORT(bp);
  11900		cfg = SHMEM_RD(bp,
  11901			       dev_info.port_hw_config[tmp].generic_features);
  11902		cfg = !!(cfg & PORT_HW_CFG_PAUSE_ON_HOST_RING_ENABLED);
  11903	}
  11904	return cfg;
  11905}
  11906
  11907static void validate_set_si_mode(struct bnx2x *bp)
  11908{
  11909	u8 func = BP_ABS_FUNC(bp);
  11910	u32 val;
  11911
  11912	val = MF_CFG_RD(bp, func_mf_config[func].mac_upper);
  11913
  11914	/* check for legal mac (upper bytes) */
  11915	if (val != 0xffff) {
  11916		bp->mf_mode = MULTI_FUNCTION_SI;
  11917		bp->mf_config[BP_VN(bp)] =
  11918			MF_CFG_RD(bp, func_mf_config[func].config);
  11919	} else
  11920		BNX2X_DEV_INFO("illegal MAC address for SI\n");
  11921}
  11922
  11923static int bnx2x_get_hwinfo(struct bnx2x *bp)
  11924{
  11925	int /*abs*/func = BP_ABS_FUNC(bp);
  11926	int vn;
  11927	u32 val = 0, val2 = 0;
  11928	int rc = 0;
  11929
  11930	/* Validate that chip access is feasible */
  11931	if (REG_RD(bp, MISC_REG_CHIP_NUM) == 0xffffffff) {
  11932		dev_err(&bp->pdev->dev,
  11933			"Chip read returns all Fs. Preventing probe from continuing\n");
  11934		return -EINVAL;
  11935	}
  11936
  11937	bnx2x_get_common_hwinfo(bp);
  11938
  11939	/*
  11940	 * initialize IGU parameters
  11941	 */
  11942	if (CHIP_IS_E1x(bp)) {
  11943		bp->common.int_block = INT_BLOCK_HC;
  11944
  11945		bp->igu_dsb_id = DEF_SB_IGU_ID;
  11946		bp->igu_base_sb = 0;
  11947	} else {
  11948		bp->common.int_block = INT_BLOCK_IGU;
  11949
  11950		/* do not allow device reset during IGU info processing */
  11951		bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_RESET);
  11952
  11953		val = REG_RD(bp, IGU_REG_BLOCK_CONFIGURATION);
  11954
  11955		if (val & IGU_BLOCK_CONFIGURATION_REG_BACKWARD_COMP_EN) {
  11956			int tout = 5000;
  11957
  11958			BNX2X_DEV_INFO("FORCING Normal Mode\n");
  11959
  11960			val &= ~(IGU_BLOCK_CONFIGURATION_REG_BACKWARD_COMP_EN);
  11961			REG_WR(bp, IGU_REG_BLOCK_CONFIGURATION, val);
  11962			REG_WR(bp, IGU_REG_RESET_MEMORIES, 0x7f);
  11963
  11964			while (tout && REG_RD(bp, IGU_REG_RESET_MEMORIES)) {
  11965				tout--;
  11966				usleep_range(1000, 2000);
  11967			}
  11968
  11969			if (REG_RD(bp, IGU_REG_RESET_MEMORIES)) {
  11970				dev_err(&bp->pdev->dev,
  11971					"FORCING Normal Mode failed!!!\n");
  11972				bnx2x_release_hw_lock(bp,
  11973						      HW_LOCK_RESOURCE_RESET);
  11974				return -EPERM;
  11975			}
  11976		}
  11977
  11978		if (val & IGU_BLOCK_CONFIGURATION_REG_BACKWARD_COMP_EN) {
  11979			BNX2X_DEV_INFO("IGU Backward Compatible Mode\n");
  11980			bp->common.int_block |= INT_BLOCK_MODE_BW_COMP;
  11981		} else
  11982			BNX2X_DEV_INFO("IGU Normal Mode\n");
  11983
  11984		rc = bnx2x_get_igu_cam_info(bp);
  11985		bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RESET);
  11986		if (rc)
  11987			return rc;
  11988	}
  11989
  11990	/*
  11991	 * set base FW non-default (fast path) status block id, this value is
  11992	 * used to initialize the fw_sb_id saved on the fp/queue structure to
  11993	 * determine the id used by the FW.
  11994	 */
  11995	if (CHIP_IS_E1x(bp))
  11996		bp->base_fw_ndsb = BP_PORT(bp) * FP_SB_MAX_E1x + BP_L_ID(bp);
  11997	else /*
  11998	      * 57712 - we currently use one FW SB per IGU SB (Rx and Tx of
  11999	      * the same queue are indicated on the same IGU SB). So we prefer
  12000	      * FW and IGU SBs to be the same value.
  12001	      */
  12002		bp->base_fw_ndsb = bp->igu_base_sb;
  12003
  12004	BNX2X_DEV_INFO("igu_dsb_id %d  igu_base_sb %d  igu_sb_cnt %d\n"
  12005		       "base_fw_ndsb %d\n", bp->igu_dsb_id, bp->igu_base_sb,
  12006		       bp->igu_sb_cnt, bp->base_fw_ndsb);
  12007
  12008	/*
  12009	 * Initialize MF configuration
  12010	 */
  12011	bp->mf_ov = 0;
  12012	bp->mf_mode = 0;
  12013	bp->mf_sub_mode = 0;
  12014	vn = BP_VN(bp);
  12015
  12016	if (!CHIP_IS_E1(bp) && !BP_NOMCP(bp)) {
  12017		BNX2X_DEV_INFO("shmem2base 0x%x, size %d, mfcfg offset %d\n",
  12018			       bp->common.shmem2_base, SHMEM2_RD(bp, size),
  12019			      (u32)offsetof(struct shmem2_region, mf_cfg_addr));
  12020
  12021		if (SHMEM2_HAS(bp, mf_cfg_addr))
  12022			bp->common.mf_cfg_base = SHMEM2_RD(bp, mf_cfg_addr);
  12023		else
  12024			bp->common.mf_cfg_base = bp->common.shmem_base +
  12025				offsetof(struct shmem_region, func_mb) +
  12026				E1H_FUNC_MAX * sizeof(struct drv_func_mb);
  12027		/*
  12028		 * get mf configuration:
  12029		 * 1. Existence of MF configuration
  12030		 * 2. MAC address must be legal (check only upper bytes)
  12031		 *    for  Switch-Independent mode;
  12032		 *    OVLAN must be legal for Switch-Dependent mode
  12033		 * 3. SF_MODE configures specific MF mode
  12034		 */
  12035		if (bp->common.mf_cfg_base != SHMEM_MF_CFG_ADDR_NONE) {
  12036			/* get mf configuration */
  12037			val = SHMEM_RD(bp,
  12038				       dev_info.shared_feature_config.config);
  12039			val &= SHARED_FEAT_CFG_FORCE_SF_MODE_MASK;
  12040
  12041			switch (val) {
  12042			case SHARED_FEAT_CFG_FORCE_SF_MODE_SWITCH_INDEPT:
  12043				validate_set_si_mode(bp);
  12044				break;
  12045			case SHARED_FEAT_CFG_FORCE_SF_MODE_AFEX_MODE:
  12046				if ((!CHIP_IS_E1x(bp)) &&
  12047				    (MF_CFG_RD(bp, func_mf_config[func].
  12048					       mac_upper) != 0xffff) &&
  12049				    (SHMEM2_HAS(bp,
  12050						afex_driver_support))) {
  12051					bp->mf_mode = MULTI_FUNCTION_AFEX;
  12052					bp->mf_config[vn] = MF_CFG_RD(bp,
  12053						func_mf_config[func].config);
  12054				} else {
  12055					BNX2X_DEV_INFO("can not configure afex mode\n");
  12056				}
  12057				break;
  12058			case SHARED_FEAT_CFG_FORCE_SF_MODE_MF_ALLOWED:
  12059				/* get OV configuration */
  12060				val = MF_CFG_RD(bp,
  12061					func_mf_config[FUNC_0].e1hov_tag);
  12062				val &= FUNC_MF_CFG_E1HOV_TAG_MASK;
  12063
  12064				if (val != FUNC_MF_CFG_E1HOV_TAG_DEFAULT) {
  12065					bp->mf_mode = MULTI_FUNCTION_SD;
  12066					bp->mf_config[vn] = MF_CFG_RD(bp,
  12067						func_mf_config[func].config);
  12068				} else
  12069					BNX2X_DEV_INFO("illegal OV for SD\n");
  12070				break;
  12071			case SHARED_FEAT_CFG_FORCE_SF_MODE_BD_MODE:
  12072				bp->mf_mode = MULTI_FUNCTION_SD;
  12073				bp->mf_sub_mode = SUB_MF_MODE_BD;
  12074				bp->mf_config[vn] =
  12075					MF_CFG_RD(bp,
  12076						  func_mf_config[func].config);
  12077
  12078				if (SHMEM2_HAS(bp, mtu_size)) {
  12079					int mtu_idx = BP_FW_MB_IDX(bp);
  12080					u16 mtu_size;
  12081					u32 mtu;
  12082
  12083					mtu = SHMEM2_RD(bp, mtu_size[mtu_idx]);
  12084					mtu_size = (u16)mtu;
  12085					DP(NETIF_MSG_IFUP, "Read MTU size %04x [%08x]\n",
  12086					   mtu_size, mtu);
  12087
  12088					/* if valid: update device mtu */
  12089					if ((mtu_size >= ETH_MIN_PACKET_SIZE) &&
  12090					    (mtu_size <=
  12091					     ETH_MAX_JUMBO_PACKET_SIZE))
  12092						bp->dev->mtu = mtu_size;
  12093				}
  12094				break;
  12095			case SHARED_FEAT_CFG_FORCE_SF_MODE_UFP_MODE:
  12096				bp->mf_mode = MULTI_FUNCTION_SD;
  12097				bp->mf_sub_mode = SUB_MF_MODE_UFP;
  12098				bp->mf_config[vn] =
  12099					MF_CFG_RD(bp,
  12100						  func_mf_config[func].config);
  12101				break;
  12102			case SHARED_FEAT_CFG_FORCE_SF_MODE_FORCED_SF:
  12103				bp->mf_config[vn] = 0;
  12104				break;
  12105			case SHARED_FEAT_CFG_FORCE_SF_MODE_EXTENDED_MODE:
  12106				val2 = SHMEM_RD(bp,
  12107					dev_info.shared_hw_config.config_3);
  12108				val2 &= SHARED_HW_CFG_EXTENDED_MF_MODE_MASK;
  12109				switch (val2) {
  12110				case SHARED_HW_CFG_EXTENDED_MF_MODE_NPAR1_DOT_5:
  12111					validate_set_si_mode(bp);
  12112					bp->mf_sub_mode =
  12113							SUB_MF_MODE_NPAR1_DOT_5;
  12114					break;
  12115				default:
  12116					/* Unknown configuration */
  12117					bp->mf_config[vn] = 0;
  12118					BNX2X_DEV_INFO("unknown extended MF mode 0x%x\n",
  12119						       val);
  12120				}
  12121				break;
  12122			default:
  12123				/* Unknown configuration: reset mf_config */
  12124				bp->mf_config[vn] = 0;
  12125				BNX2X_DEV_INFO("unknown MF mode 0x%x\n", val);
  12126			}
  12127		}
  12128
  12129		BNX2X_DEV_INFO("%s function mode\n",
  12130			       IS_MF(bp) ? "multi" : "single");
  12131
  12132		switch (bp->mf_mode) {
  12133		case MULTI_FUNCTION_SD:
  12134			val = MF_CFG_RD(bp, func_mf_config[func].e1hov_tag) &
  12135			      FUNC_MF_CFG_E1HOV_TAG_MASK;
  12136			if (val != FUNC_MF_CFG_E1HOV_TAG_DEFAULT) {
  12137				bp->mf_ov = val;
  12138				bp->path_has_ovlan = true;
  12139
  12140				BNX2X_DEV_INFO("MF OV for func %d is %d (0x%04x)\n",
  12141					       func, bp->mf_ov, bp->mf_ov);
  12142			} else if ((bp->mf_sub_mode == SUB_MF_MODE_UFP) ||
  12143				   (bp->mf_sub_mode == SUB_MF_MODE_BD)) {
  12144				dev_err(&bp->pdev->dev,
  12145					"Unexpected - no valid MF OV for func %d in UFP/BD mode\n",
  12146					func);
  12147				bp->path_has_ovlan = true;
  12148			} else {
  12149				dev_err(&bp->pdev->dev,
  12150					"No valid MF OV for func %d, aborting\n",
  12151					func);
  12152				return -EPERM;
  12153			}
  12154			break;
  12155		case MULTI_FUNCTION_AFEX:
  12156			BNX2X_DEV_INFO("func %d is in MF afex mode\n", func);
  12157			break;
  12158		case MULTI_FUNCTION_SI:
  12159			BNX2X_DEV_INFO("func %d is in MF switch-independent mode\n",
  12160				       func);
  12161			break;
  12162		default:
  12163			if (vn) {
  12164				dev_err(&bp->pdev->dev,
  12165					"VN %d is in a single function mode, aborting\n",
  12166					vn);
  12167				return -EPERM;
  12168			}
  12169			break;
  12170		}
  12171
  12172		/* check if other port on the path needs ovlan:
  12173		 * Since MF configuration is shared between ports
  12174		 * Possible mixed modes are only
  12175		 * {SF, SI} {SF, SD} {SD, SF} {SI, SF}
  12176		 */
  12177		if (CHIP_MODE_IS_4_PORT(bp) &&
  12178		    !bp->path_has_ovlan &&
  12179		    !IS_MF(bp) &&
  12180		    bp->common.mf_cfg_base != SHMEM_MF_CFG_ADDR_NONE) {
  12181			u8 other_port = !BP_PORT(bp);
  12182			u8 other_func = BP_PATH(bp) + 2*other_port;
  12183			val = MF_CFG_RD(bp,
  12184					func_mf_config[other_func].e1hov_tag);
  12185			if (val != FUNC_MF_CFG_E1HOV_TAG_DEFAULT)
  12186				bp->path_has_ovlan = true;
  12187		}
  12188	}
  12189
  12190	/* adjust igu_sb_cnt to MF for E1H */
  12191	if (CHIP_IS_E1H(bp) && IS_MF(bp))
  12192		bp->igu_sb_cnt = min_t(u8, bp->igu_sb_cnt, E1H_MAX_MF_SB_COUNT);
  12193
  12194	/* port info */
  12195	bnx2x_get_port_hwinfo(bp);
  12196
  12197	/* Get MAC addresses */
  12198	bnx2x_get_mac_hwinfo(bp);
  12199
  12200	bnx2x_get_cnic_info(bp);
  12201
  12202	return rc;
  12203}
  12204
  12205static void bnx2x_read_fwinfo(struct bnx2x *bp)
  12206{
  12207	char str_id[VENDOR_ID_LEN + 1];
  12208	unsigned int vpd_len, kw_len;
  12209	u8 *vpd_data;
  12210	int rodi;
  12211
  12212	memset(bp->fw_ver, 0, sizeof(bp->fw_ver));
  12213
  12214	vpd_data = pci_vpd_alloc(bp->pdev, &vpd_len);
  12215	if (IS_ERR(vpd_data))
  12216		return;
  12217
  12218	rodi = pci_vpd_find_ro_info_keyword(vpd_data, vpd_len,
  12219					    PCI_VPD_RO_KEYWORD_MFR_ID, &kw_len);
  12220	if (rodi < 0 || kw_len != VENDOR_ID_LEN)
  12221		goto out_not_found;
  12222
  12223	/* vendor specific info */
  12224	snprintf(str_id, VENDOR_ID_LEN + 1, "%04x", PCI_VENDOR_ID_DELL);
  12225	if (!strncasecmp(str_id, &vpd_data[rodi], VENDOR_ID_LEN)) {
  12226		rodi = pci_vpd_find_ro_info_keyword(vpd_data, vpd_len,
  12227						    PCI_VPD_RO_KEYWORD_VENDOR0,
  12228						    &kw_len);
  12229		if (rodi >= 0 && kw_len < sizeof(bp->fw_ver)) {
  12230			memcpy(bp->fw_ver, &vpd_data[rodi], kw_len);
  12231			bp->fw_ver[kw_len] = ' ';
  12232		}
  12233	}
  12234out_not_found:
  12235	kfree(vpd_data);
  12236}
  12237
  12238static void bnx2x_set_modes_bitmap(struct bnx2x *bp)
  12239{
  12240	u32 flags = 0;
  12241
  12242	if (CHIP_REV_IS_FPGA(bp))
  12243		SET_FLAGS(flags, MODE_FPGA);
  12244	else if (CHIP_REV_IS_EMUL(bp))
  12245		SET_FLAGS(flags, MODE_EMUL);
  12246	else
  12247		SET_FLAGS(flags, MODE_ASIC);
  12248
  12249	if (CHIP_MODE_IS_4_PORT(bp))
  12250		SET_FLAGS(flags, MODE_PORT4);
  12251	else
  12252		SET_FLAGS(flags, MODE_PORT2);
  12253
  12254	if (CHIP_IS_E2(bp))
  12255		SET_FLAGS(flags, MODE_E2);
  12256	else if (CHIP_IS_E3(bp)) {
  12257		SET_FLAGS(flags, MODE_E3);
  12258		if (CHIP_REV(bp) == CHIP_REV_Ax)
  12259			SET_FLAGS(flags, MODE_E3_A0);
  12260		else /*if (CHIP_REV(bp) == CHIP_REV_Bx)*/
  12261			SET_FLAGS(flags, MODE_E3_B0 | MODE_COS3);
  12262	}
  12263
  12264	if (IS_MF(bp)) {
  12265		SET_FLAGS(flags, MODE_MF);
  12266		switch (bp->mf_mode) {
  12267		case MULTI_FUNCTION_SD:
  12268			SET_FLAGS(flags, MODE_MF_SD);
  12269			break;
  12270		case MULTI_FUNCTION_SI:
  12271			SET_FLAGS(flags, MODE_MF_SI);
  12272			break;
  12273		case MULTI_FUNCTION_AFEX:
  12274			SET_FLAGS(flags, MODE_MF_AFEX);
  12275			break;
  12276		}
  12277	} else
  12278		SET_FLAGS(flags, MODE_SF);
  12279
  12280#if defined(__LITTLE_ENDIAN)
  12281	SET_FLAGS(flags, MODE_LITTLE_ENDIAN);
  12282#else /*(__BIG_ENDIAN)*/
  12283	SET_FLAGS(flags, MODE_BIG_ENDIAN);
  12284#endif
  12285	INIT_MODE_FLAGS(bp) = flags;
  12286}
  12287
  12288static int bnx2x_init_bp(struct bnx2x *bp)
  12289{
  12290	int func;
  12291	int rc;
  12292
  12293	mutex_init(&bp->port.phy_mutex);
  12294	mutex_init(&bp->fw_mb_mutex);
  12295	mutex_init(&bp->drv_info_mutex);
  12296	sema_init(&bp->stats_lock, 1);
  12297	bp->drv_info_mng_owner = false;
  12298	INIT_LIST_HEAD(&bp->vlan_reg);
  12299
  12300	INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task);
  12301	INIT_DELAYED_WORK(&bp->sp_rtnl_task, bnx2x_sp_rtnl_task);
  12302	INIT_DELAYED_WORK(&bp->period_task, bnx2x_period_task);
  12303	INIT_DELAYED_WORK(&bp->iov_task, bnx2x_iov_task);
  12304	if (IS_PF(bp)) {
  12305		rc = bnx2x_get_hwinfo(bp);
  12306		if (rc)
  12307			return rc;
  12308	} else {
  12309		static const u8 zero_addr[ETH_ALEN] = {};
  12310
  12311		eth_hw_addr_set(bp->dev, zero_addr);
  12312	}
  12313
  12314	bnx2x_set_modes_bitmap(bp);
  12315
  12316	rc = bnx2x_alloc_mem_bp(bp);
  12317	if (rc)
  12318		return rc;
  12319
  12320	bnx2x_read_fwinfo(bp);
  12321
  12322	func = BP_FUNC(bp);
  12323
  12324	/* need to reset chip if undi was active */
  12325	if (IS_PF(bp) && !BP_NOMCP(bp)) {
  12326		/* init fw_seq */
  12327		bp->fw_seq =
  12328			SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) &
  12329							DRV_MSG_SEQ_NUMBER_MASK;
  12330		BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq);
  12331
  12332		rc = bnx2x_prev_unload(bp);
  12333		if (rc) {
  12334			bnx2x_free_mem_bp(bp);
  12335			return rc;
  12336		}
  12337	}
  12338
  12339	if (CHIP_REV_IS_FPGA(bp))
  12340		dev_err(&bp->pdev->dev, "FPGA detected\n");
  12341
  12342	if (BP_NOMCP(bp) && (func == 0))
  12343		dev_err(&bp->pdev->dev, "MCP disabled, must load devices in order!\n");
  12344
  12345	bp->disable_tpa = disable_tpa;
  12346	bp->disable_tpa |= !!IS_MF_STORAGE_ONLY(bp);
  12347	/* Reduce memory usage in kdump environment by disabling TPA */
  12348	bp->disable_tpa |= is_kdump_kernel();
  12349
  12350	/* Set TPA flags */
  12351	if (bp->disable_tpa) {
  12352		bp->dev->hw_features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW);
  12353		bp->dev->features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW);
  12354	}
  12355
  12356	if (CHIP_IS_E1(bp))
  12357		bp->dropless_fc = false;
  12358	else
  12359		bp->dropless_fc = dropless_fc | bnx2x_get_dropless_info(bp);
  12360
  12361	bp->mrrs = mrrs;
  12362
  12363	bp->tx_ring_size = IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL;
  12364	if (IS_VF(bp))
  12365		bp->rx_ring_size = MAX_RX_AVAIL;
  12366
  12367	/* make sure that the numbers are in the right granularity */
  12368	bp->tx_ticks = (50 / BNX2X_BTR) * BNX2X_BTR;
  12369	bp->rx_ticks = (25 / BNX2X_BTR) * BNX2X_BTR;
  12370
  12371	bp->current_interval = CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ;
  12372
  12373	timer_setup(&bp->timer, bnx2x_timer, 0);
  12374	bp->timer.expires = jiffies + bp->current_interval;
  12375
  12376	if (SHMEM2_HAS(bp, dcbx_lldp_params_offset) &&
  12377	    SHMEM2_HAS(bp, dcbx_lldp_dcbx_stat_offset) &&
  12378	    SHMEM2_HAS(bp, dcbx_en) &&
  12379	    SHMEM2_RD(bp, dcbx_lldp_params_offset) &&
  12380	    SHMEM2_RD(bp, dcbx_lldp_dcbx_stat_offset) &&
  12381	    SHMEM2_RD(bp, dcbx_en[BP_PORT(bp)])) {
  12382		bnx2x_dcbx_set_state(bp, true, BNX2X_DCBX_ENABLED_ON_NEG_ON);
  12383		bnx2x_dcbx_init_params(bp);
  12384	} else {
  12385		bnx2x_dcbx_set_state(bp, false, BNX2X_DCBX_ENABLED_OFF);
  12386	}
  12387
  12388	if (CHIP_IS_E1x(bp))
  12389		bp->cnic_base_cl_id = FP_SB_MAX_E1x;
  12390	else
  12391		bp->cnic_base_cl_id = FP_SB_MAX_E2;
  12392
  12393	/* multiple tx priority */
  12394	if (IS_VF(bp))
  12395		bp->max_cos = 1;
  12396	else if (CHIP_IS_E1x(bp))
  12397		bp->max_cos = BNX2X_MULTI_TX_COS_E1X;
  12398	else if (CHIP_IS_E2(bp) || CHIP_IS_E3A0(bp))
  12399		bp->max_cos = BNX2X_MULTI_TX_COS_E2_E3A0;
  12400	else if (CHIP_IS_E3B0(bp))
  12401		bp->max_cos = BNX2X_MULTI_TX_COS_E3B0;
  12402	else
  12403		BNX2X_ERR("unknown chip %x revision %x\n",
  12404			  CHIP_NUM(bp), CHIP_REV(bp));
  12405	BNX2X_DEV_INFO("set bp->max_cos to %d\n", bp->max_cos);
  12406
  12407	/* We need at least one default status block for slow-path events,
  12408	 * second status block for the L2 queue, and a third status block for
  12409	 * CNIC if supported.
  12410	 */
  12411	if (IS_VF(bp))
  12412		bp->min_msix_vec_cnt = 1;
  12413	else if (CNIC_SUPPORT(bp))
  12414		bp->min_msix_vec_cnt = 3;
  12415	else /* PF w/o cnic */
  12416		bp->min_msix_vec_cnt = 2;
  12417	BNX2X_DEV_INFO("bp->min_msix_vec_cnt %d", bp->min_msix_vec_cnt);
  12418
  12419	bp->dump_preset_idx = 1;
  12420
  12421	return rc;
  12422}
  12423
  12424/****************************************************************************
  12425* General service functions
  12426****************************************************************************/
  12427
  12428/*
  12429 * net_device service functions
  12430 */
  12431
  12432/* called with rtnl_lock */
  12433static int bnx2x_open(struct net_device *dev)
  12434{
  12435	struct bnx2x *bp = netdev_priv(dev);
  12436	int rc;
  12437
  12438	bp->stats_init = true;
  12439
  12440	netif_carrier_off(dev);
  12441
  12442	bnx2x_set_power_state(bp, PCI_D0);
  12443
  12444	/* If parity had happen during the unload, then attentions
  12445	 * and/or RECOVERY_IN_PROGRES may still be set. In this case we
  12446	 * want the first function loaded on the current engine to
  12447	 * complete the recovery.
  12448	 * Parity recovery is only relevant for PF driver.
  12449	 */
  12450	if (IS_PF(bp)) {
  12451		int other_engine = BP_PATH(bp) ? 0 : 1;
  12452		bool other_load_status, load_status;
  12453		bool global = false;
  12454
  12455		other_load_status = bnx2x_get_load_status(bp, other_engine);
  12456		load_status = bnx2x_get_load_status(bp, BP_PATH(bp));
  12457		if (!bnx2x_reset_is_done(bp, BP_PATH(bp)) ||
  12458		    bnx2x_chk_parity_attn(bp, &global, true)) {
  12459			do {
  12460				/* If there are attentions and they are in a
  12461				 * global blocks, set the GLOBAL_RESET bit
  12462				 * regardless whether it will be this function
  12463				 * that will complete the recovery or not.
  12464				 */
  12465				if (global)
  12466					bnx2x_set_reset_global(bp);
  12467
  12468				/* Only the first function on the current
  12469				 * engine should try to recover in open. In case
  12470				 * of attentions in global blocks only the first
  12471				 * in the chip should try to recover.
  12472				 */
  12473				if ((!load_status &&
  12474				     (!global || !other_load_status)) &&
  12475				      bnx2x_trylock_leader_lock(bp) &&
  12476				      !bnx2x_leader_reset(bp)) {
  12477					netdev_info(bp->dev,
  12478						    "Recovered in open\n");
  12479					break;
  12480				}
  12481
  12482				/* recovery has failed... */
  12483				bnx2x_set_power_state(bp, PCI_D3hot);
  12484				bp->recovery_state = BNX2X_RECOVERY_FAILED;
  12485
  12486				BNX2X_ERR("Recovery flow hasn't been properly completed yet. Try again later.\n"
  12487					  "If you still see this message after a few retries then power cycle is required.\n");
  12488
  12489				return -EAGAIN;
  12490			} while (0);
  12491		}
  12492	}
  12493
  12494	bp->recovery_state = BNX2X_RECOVERY_DONE;
  12495	rc = bnx2x_nic_load(bp, LOAD_OPEN);
  12496	if (rc)
  12497		return rc;
  12498
  12499	return 0;
  12500}
  12501
  12502/* called with rtnl_lock */
  12503static int bnx2x_close(struct net_device *dev)
  12504{
  12505	struct bnx2x *bp = netdev_priv(dev);
  12506
  12507	/* Unload the driver, release IRQs */
  12508	bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
  12509
  12510	return 0;
  12511}
  12512
  12513struct bnx2x_mcast_list_elem_group
  12514{
  12515	struct list_head mcast_group_link;
  12516	struct bnx2x_mcast_list_elem mcast_elems[];
  12517};
  12518
  12519#define MCAST_ELEMS_PER_PG \
  12520	((PAGE_SIZE - sizeof(struct bnx2x_mcast_list_elem_group)) / \
  12521	sizeof(struct bnx2x_mcast_list_elem))
  12522
  12523static void bnx2x_free_mcast_macs_list(struct list_head *mcast_group_list)
  12524{
  12525	struct bnx2x_mcast_list_elem_group *current_mcast_group;
  12526
  12527	while (!list_empty(mcast_group_list)) {
  12528		current_mcast_group = list_first_entry(mcast_group_list,
  12529				      struct bnx2x_mcast_list_elem_group,
  12530				      mcast_group_link);
  12531		list_del(&current_mcast_group->mcast_group_link);
  12532		free_page((unsigned long)current_mcast_group);
  12533	}
  12534}
  12535
  12536static int bnx2x_init_mcast_macs_list(struct bnx2x *bp,
  12537				      struct bnx2x_mcast_ramrod_params *p,
  12538				      struct list_head *mcast_group_list)
  12539{
  12540	struct bnx2x_mcast_list_elem *mc_mac;
  12541	struct netdev_hw_addr *ha;
  12542	struct bnx2x_mcast_list_elem_group *current_mcast_group = NULL;
  12543	int mc_count = netdev_mc_count(bp->dev);
  12544	int offset = 0;
  12545
  12546	INIT_LIST_HEAD(&p->mcast_list);
  12547	netdev_for_each_mc_addr(ha, bp->dev) {
  12548		if (!offset) {
  12549			current_mcast_group =
  12550				(struct bnx2x_mcast_list_elem_group *)
  12551				__get_free_page(GFP_ATOMIC);
  12552			if (!current_mcast_group) {
  12553				bnx2x_free_mcast_macs_list(mcast_group_list);
  12554				BNX2X_ERR("Failed to allocate mc MAC list\n");
  12555				return -ENOMEM;
  12556			}
  12557			list_add(&current_mcast_group->mcast_group_link,
  12558				 mcast_group_list);
  12559		}
  12560		mc_mac = &current_mcast_group->mcast_elems[offset];
  12561		mc_mac->mac = bnx2x_mc_addr(ha);
  12562		list_add_tail(&mc_mac->link, &p->mcast_list);
  12563		offset++;
  12564		if (offset == MCAST_ELEMS_PER_PG)
  12565			offset = 0;
  12566	}
  12567	p->mcast_list_len = mc_count;
  12568	return 0;
  12569}
  12570
  12571/**
  12572 * bnx2x_set_uc_list - configure a new unicast MACs list.
  12573 *
  12574 * @bp: driver handle
  12575 *
  12576 * We will use zero (0) as a MAC type for these MACs.
  12577 */
  12578static int bnx2x_set_uc_list(struct bnx2x *bp)
  12579{
  12580	int rc;
  12581	struct net_device *dev = bp->dev;
  12582	struct netdev_hw_addr *ha;
  12583	struct bnx2x_vlan_mac_obj *mac_obj = &bp->sp_objs->mac_obj;
  12584	unsigned long ramrod_flags = 0;
  12585
  12586	/* First schedule a cleanup up of old configuration */
  12587	rc = bnx2x_del_all_macs(bp, mac_obj, BNX2X_UC_LIST_MAC, false);
  12588	if (rc < 0) {
  12589		BNX2X_ERR("Failed to schedule DELETE operations: %d\n", rc);
  12590		return rc;
  12591	}
  12592
  12593	netdev_for_each_uc_addr(ha, dev) {
  12594		rc = bnx2x_set_mac_one(bp, bnx2x_uc_addr(ha), mac_obj, true,
  12595				       BNX2X_UC_LIST_MAC, &ramrod_flags);
  12596		if (rc == -EEXIST) {
  12597			DP(BNX2X_MSG_SP,
  12598			   "Failed to schedule ADD operations: %d\n", rc);
  12599			/* do not treat adding same MAC as error */
  12600			rc = 0;
  12601
  12602		} else if (rc < 0) {
  12603
  12604			BNX2X_ERR("Failed to schedule ADD operations: %d\n",
  12605				  rc);
  12606			return rc;
  12607		}
  12608	}
  12609
  12610	/* Execute the pending commands */
  12611	__set_bit(RAMROD_CONT, &ramrod_flags);
  12612	return bnx2x_set_mac_one(bp, NULL, mac_obj, false /* don't care */,
  12613				 BNX2X_UC_LIST_MAC, &ramrod_flags);
  12614}
  12615
  12616static int bnx2x_set_mc_list_e1x(struct bnx2x *bp)
  12617{
  12618	LIST_HEAD(mcast_group_list);
  12619	struct net_device *dev = bp->dev;
  12620	struct bnx2x_mcast_ramrod_params rparam = {NULL};
  12621	int rc = 0;
  12622
  12623	rparam.mcast_obj = &bp->mcast_obj;
  12624
  12625	/* first, clear all configured multicast MACs */
  12626	rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL);
  12627	if (rc < 0) {
  12628		BNX2X_ERR("Failed to clear multicast configuration: %d\n", rc);
  12629		return rc;
  12630	}
  12631
  12632	/* then, configure a new MACs list */
  12633	if (netdev_mc_count(dev)) {
  12634		rc = bnx2x_init_mcast_macs_list(bp, &rparam, &mcast_group_list);
  12635		if (rc)
  12636			return rc;
  12637
  12638		/* Now add the new MACs */
  12639		rc = bnx2x_config_mcast(bp, &rparam,
  12640					BNX2X_MCAST_CMD_ADD);
  12641		if (rc < 0)
  12642			BNX2X_ERR("Failed to set a new multicast configuration: %d\n",
  12643				  rc);
  12644
  12645		bnx2x_free_mcast_macs_list(&mcast_group_list);
  12646	}
  12647
  12648	return rc;
  12649}
  12650
  12651static int bnx2x_set_mc_list(struct bnx2x *bp)
  12652{
  12653	LIST_HEAD(mcast_group_list);
  12654	struct bnx2x_mcast_ramrod_params rparam = {NULL};
  12655	struct net_device *dev = bp->dev;
  12656	int rc = 0;
  12657
  12658	/* On older adapters, we need to flush and re-add filters */
  12659	if (CHIP_IS_E1x(bp))
  12660		return bnx2x_set_mc_list_e1x(bp);
  12661
  12662	rparam.mcast_obj = &bp->mcast_obj;
  12663
  12664	if (netdev_mc_count(dev)) {
  12665		rc = bnx2x_init_mcast_macs_list(bp, &rparam, &mcast_group_list);
  12666		if (rc)
  12667			return rc;
  12668
  12669		/* Override the curently configured set of mc filters */
  12670		rc = bnx2x_config_mcast(bp, &rparam,
  12671					BNX2X_MCAST_CMD_SET);
  12672		if (rc < 0)
  12673			BNX2X_ERR("Failed to set a new multicast configuration: %d\n",
  12674				  rc);
  12675
  12676		bnx2x_free_mcast_macs_list(&mcast_group_list);
  12677	} else {
  12678		/* If no mc addresses are required, flush the configuration */
  12679		rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL);
  12680		if (rc < 0)
  12681			BNX2X_ERR("Failed to clear multicast configuration %d\n",
  12682				  rc);
  12683	}
  12684
  12685	return rc;
  12686}
  12687
  12688/* If bp->state is OPEN, should be called with netif_addr_lock_bh() */
  12689static void bnx2x_set_rx_mode(struct net_device *dev)
  12690{
  12691	struct bnx2x *bp = netdev_priv(dev);
  12692
  12693	if (bp->state != BNX2X_STATE_OPEN) {
  12694		DP(NETIF_MSG_IFUP, "state is %x, returning\n", bp->state);
  12695		return;
  12696	} else {
  12697		/* Schedule an SP task to handle rest of change */
  12698		bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_RX_MODE,
  12699				       NETIF_MSG_IFUP);
  12700	}
  12701}
  12702
  12703void bnx2x_set_rx_mode_inner(struct bnx2x *bp)
  12704{
  12705	u32 rx_mode = BNX2X_RX_MODE_NORMAL;
  12706
  12707	DP(NETIF_MSG_IFUP, "dev->flags = %x\n", bp->dev->flags);
  12708
  12709	netif_addr_lock_bh(bp->dev);
  12710
  12711	if (bp->dev->flags & IFF_PROMISC) {
  12712		rx_mode = BNX2X_RX_MODE_PROMISC;
  12713	} else if ((bp->dev->flags & IFF_ALLMULTI) ||
  12714		   ((netdev_mc_count(bp->dev) > BNX2X_MAX_MULTICAST) &&
  12715		    CHIP_IS_E1(bp))) {
  12716		rx_mode = BNX2X_RX_MODE_ALLMULTI;
  12717	} else {
  12718		if (IS_PF(bp)) {
  12719			/* some multicasts */
  12720			if (bnx2x_set_mc_list(bp) < 0)
  12721				rx_mode = BNX2X_RX_MODE_ALLMULTI;
  12722
  12723			/* release bh lock, as bnx2x_set_uc_list might sleep */
  12724			netif_addr_unlock_bh(bp->dev);
  12725			if (bnx2x_set_uc_list(bp) < 0)
  12726				rx_mode = BNX2X_RX_MODE_PROMISC;
  12727			netif_addr_lock_bh(bp->dev);
  12728		} else {
  12729			/* configuring mcast to a vf involves sleeping (when we
  12730			 * wait for the pf's response).
  12731			 */
  12732			bnx2x_schedule_sp_rtnl(bp,
  12733					       BNX2X_SP_RTNL_VFPF_MCAST, 0);
  12734		}
  12735	}
  12736
  12737	bp->rx_mode = rx_mode;
  12738	/* handle ISCSI SD mode */
  12739	if (IS_MF_ISCSI_ONLY(bp))
  12740		bp->rx_mode = BNX2X_RX_MODE_NONE;
  12741
  12742	/* Schedule the rx_mode command */
  12743	if (test_bit(BNX2X_FILTER_RX_MODE_PENDING, &bp->sp_state)) {
  12744		set_bit(BNX2X_FILTER_RX_MODE_SCHED, &bp->sp_state);
  12745		netif_addr_unlock_bh(bp->dev);
  12746		return;
  12747	}
  12748
  12749	if (IS_PF(bp)) {
  12750		bnx2x_set_storm_rx_mode(bp);
  12751		netif_addr_unlock_bh(bp->dev);
  12752	} else {
  12753		/* VF will need to request the PF to make this change, and so
  12754		 * the VF needs to release the bottom-half lock prior to the
  12755		 * request (as it will likely require sleep on the VF side)
  12756		 */
  12757		netif_addr_unlock_bh(bp->dev);
  12758		bnx2x_vfpf_storm_rx_mode(bp);
  12759	}
  12760}
  12761
  12762/* called with rtnl_lock */
  12763static int bnx2x_mdio_read(struct net_device *netdev, int prtad,
  12764			   int devad, u16 addr)
  12765{
  12766	struct bnx2x *bp = netdev_priv(netdev);
  12767	u16 value;
  12768	int rc;
  12769
  12770	DP(NETIF_MSG_LINK, "mdio_read: prtad 0x%x, devad 0x%x, addr 0x%x\n",
  12771	   prtad, devad, addr);
  12772
  12773	/* The HW expects different devad if CL22 is used */
  12774	devad = (devad == MDIO_DEVAD_NONE) ? DEFAULT_PHY_DEV_ADDR : devad;
  12775
  12776	bnx2x_acquire_phy_lock(bp);
  12777	rc = bnx2x_phy_read(&bp->link_params, prtad, devad, addr, &value);
  12778	bnx2x_release_phy_lock(bp);
  12779	DP(NETIF_MSG_LINK, "mdio_read_val 0x%x rc = 0x%x\n", value, rc);
  12780
  12781	if (!rc)
  12782		rc = value;
  12783	return rc;
  12784}
  12785
  12786/* called with rtnl_lock */
  12787static int bnx2x_mdio_write(struct net_device *netdev, int prtad, int devad,
  12788			    u16 addr, u16 value)
  12789{
  12790	struct bnx2x *bp = netdev_priv(netdev);
  12791	int rc;
  12792
  12793	DP(NETIF_MSG_LINK,
  12794	   "mdio_write: prtad 0x%x, devad 0x%x, addr 0x%x, value 0x%x\n",
  12795	   prtad, devad, addr, value);
  12796
  12797	/* The HW expects different devad if CL22 is used */
  12798	devad = (devad == MDIO_DEVAD_NONE) ? DEFAULT_PHY_DEV_ADDR : devad;
  12799
  12800	bnx2x_acquire_phy_lock(bp);
  12801	rc = bnx2x_phy_write(&bp->link_params, prtad, devad, addr, value);
  12802	bnx2x_release_phy_lock(bp);
  12803	return rc;
  12804}
  12805
  12806/* called with rtnl_lock */
  12807static int bnx2x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
  12808{
  12809	struct bnx2x *bp = netdev_priv(dev);
  12810	struct mii_ioctl_data *mdio = if_mii(ifr);
  12811
  12812	if (!netif_running(dev))
  12813		return -EAGAIN;
  12814
  12815	switch (cmd) {
  12816	case SIOCSHWTSTAMP:
  12817		return bnx2x_hwtstamp_ioctl(bp, ifr);
  12818	default:
  12819		DP(NETIF_MSG_LINK, "ioctl: phy id 0x%x, reg 0x%x, val_in 0x%x\n",
  12820		   mdio->phy_id, mdio->reg_num, mdio->val_in);
  12821		return mdio_mii_ioctl(&bp->mdio, mdio, cmd);
  12822	}
  12823}
  12824
  12825static int bnx2x_validate_addr(struct net_device *dev)
  12826{
  12827	struct bnx2x *bp = netdev_priv(dev);
  12828
  12829	/* query the bulletin board for mac address configured by the PF */
  12830	if (IS_VF(bp))
  12831		bnx2x_sample_bulletin(bp);
  12832
  12833	if (!is_valid_ether_addr(dev->dev_addr)) {
  12834		BNX2X_ERR("Non-valid Ethernet address\n");
  12835		return -EADDRNOTAVAIL;
  12836	}
  12837	return 0;
  12838}
  12839
  12840static int bnx2x_get_phys_port_id(struct net_device *netdev,
  12841				  struct netdev_phys_item_id *ppid)
  12842{
  12843	struct bnx2x *bp = netdev_priv(netdev);
  12844
  12845	if (!(bp->flags & HAS_PHYS_PORT_ID))
  12846		return -EOPNOTSUPP;
  12847
  12848	ppid->id_len = sizeof(bp->phys_port_id);
  12849	memcpy(ppid->id, bp->phys_port_id, ppid->id_len);
  12850
  12851	return 0;
  12852}
  12853
  12854static netdev_features_t bnx2x_features_check(struct sk_buff *skb,
  12855					      struct net_device *dev,
  12856					      netdev_features_t features)
  12857{
  12858	/*
  12859	 * A skb with gso_size + header length > 9700 will cause a
  12860	 * firmware panic. Drop GSO support.
  12861	 *
  12862	 * Eventually the upper layer should not pass these packets down.
  12863	 *
  12864	 * For speed, if the gso_size is <= 9000, assume there will
  12865	 * not be 700 bytes of headers and pass it through. Only do a
  12866	 * full (slow) validation if the gso_size is > 9000.
  12867	 *
  12868	 * (Due to the way SKB_BY_FRAGS works this will also do a full
  12869	 * validation in that case.)
  12870	 */
  12871	if (unlikely(skb_is_gso(skb) &&
  12872		     (skb_shinfo(skb)->gso_size > 9000) &&
  12873		     !skb_gso_validate_mac_len(skb, 9700)))
  12874		features &= ~NETIF_F_GSO_MASK;
  12875
  12876	features = vlan_features_check(skb, features);
  12877	return vxlan_features_check(skb, features);
  12878}
  12879
  12880static int __bnx2x_vlan_configure_vid(struct bnx2x *bp, u16 vid, bool add)
  12881{
  12882	int rc;
  12883
  12884	if (IS_PF(bp)) {
  12885		unsigned long ramrod_flags = 0;
  12886
  12887		__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
  12888		rc = bnx2x_set_vlan_one(bp, vid, &bp->sp_objs->vlan_obj,
  12889					add, &ramrod_flags);
  12890	} else {
  12891		rc = bnx2x_vfpf_update_vlan(bp, vid, bp->fp->index, add);
  12892	}
  12893
  12894	return rc;
  12895}
  12896
  12897static int bnx2x_vlan_configure_vid_list(struct bnx2x *bp)
  12898{
  12899	struct bnx2x_vlan_entry *vlan;
  12900	int rc = 0;
  12901
  12902	/* Configure all non-configured entries */
  12903	list_for_each_entry(vlan, &bp->vlan_reg, link) {
  12904		if (vlan->hw)
  12905			continue;
  12906
  12907		if (bp->vlan_cnt >= bp->vlan_credit)
  12908			return -ENOBUFS;
  12909
  12910		rc = __bnx2x_vlan_configure_vid(bp, vlan->vid, true);
  12911		if (rc) {
  12912			BNX2X_ERR("Unable to config VLAN %d\n", vlan->vid);
  12913			return rc;
  12914		}
  12915
  12916		DP(NETIF_MSG_IFUP, "HW configured for VLAN %d\n", vlan->vid);
  12917		vlan->hw = true;
  12918		bp->vlan_cnt++;
  12919	}
  12920
  12921	return 0;
  12922}
  12923
  12924static void bnx2x_vlan_configure(struct bnx2x *bp, bool set_rx_mode)
  12925{
  12926	bool need_accept_any_vlan;
  12927
  12928	need_accept_any_vlan = !!bnx2x_vlan_configure_vid_list(bp);
  12929
  12930	if (bp->accept_any_vlan != need_accept_any_vlan) {
  12931		bp->accept_any_vlan = need_accept_any_vlan;
  12932		DP(NETIF_MSG_IFUP, "Accept all VLAN %s\n",
  12933		   bp->accept_any_vlan ? "raised" : "cleared");
  12934		if (set_rx_mode) {
  12935			if (IS_PF(bp))
  12936				bnx2x_set_rx_mode_inner(bp);
  12937			else
  12938				bnx2x_vfpf_storm_rx_mode(bp);
  12939		}
  12940	}
  12941}
  12942
  12943int bnx2x_vlan_reconfigure_vid(struct bnx2x *bp)
  12944{
  12945	/* Don't set rx mode here. Our caller will do it. */
  12946	bnx2x_vlan_configure(bp, false);
  12947
  12948	return 0;
  12949}
  12950
  12951static int bnx2x_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
  12952{
  12953	struct bnx2x *bp = netdev_priv(dev);
  12954	struct bnx2x_vlan_entry *vlan;
  12955
  12956	DP(NETIF_MSG_IFUP, "Adding VLAN %d\n", vid);
  12957
  12958	vlan = kmalloc(sizeof(*vlan), GFP_KERNEL);
  12959	if (!vlan)
  12960		return -ENOMEM;
  12961
  12962	vlan->vid = vid;
  12963	vlan->hw = false;
  12964	list_add_tail(&vlan->link, &bp->vlan_reg);
  12965
  12966	if (netif_running(dev))
  12967		bnx2x_vlan_configure(bp, true);
  12968
  12969	return 0;
  12970}
  12971
  12972static int bnx2x_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)
  12973{
  12974	struct bnx2x *bp = netdev_priv(dev);
  12975	struct bnx2x_vlan_entry *vlan;
  12976	bool found = false;
  12977	int rc = 0;
  12978
  12979	DP(NETIF_MSG_IFUP, "Removing VLAN %d\n", vid);
  12980
  12981	list_for_each_entry(vlan, &bp->vlan_reg, link)
  12982		if (vlan->vid == vid) {
  12983			found = true;
  12984			break;
  12985		}
  12986
  12987	if (!found) {
  12988		BNX2X_ERR("Unable to kill VLAN %d - not found\n", vid);
  12989		return -EINVAL;
  12990	}
  12991
  12992	if (netif_running(dev) && vlan->hw) {
  12993		rc = __bnx2x_vlan_configure_vid(bp, vid, false);
  12994		DP(NETIF_MSG_IFUP, "HW deconfigured for VLAN %d\n", vid);
  12995		bp->vlan_cnt--;
  12996	}
  12997
  12998	list_del(&vlan->link);
  12999	kfree(vlan);
  13000
  13001	if (netif_running(dev))
  13002		bnx2x_vlan_configure(bp, true);
  13003
  13004	DP(NETIF_MSG_IFUP, "Removing VLAN result %d\n", rc);
  13005
  13006	return rc;
  13007}
  13008
  13009static const struct net_device_ops bnx2x_netdev_ops = {
  13010	.ndo_open		= bnx2x_open,
  13011	.ndo_stop		= bnx2x_close,
  13012	.ndo_start_xmit		= bnx2x_start_xmit,
  13013	.ndo_select_queue	= bnx2x_select_queue,
  13014	.ndo_set_rx_mode	= bnx2x_set_rx_mode,
  13015	.ndo_set_mac_address	= bnx2x_change_mac_addr,
  13016	.ndo_validate_addr	= bnx2x_validate_addr,
  13017	.ndo_eth_ioctl		= bnx2x_ioctl,
  13018	.ndo_change_mtu		= bnx2x_change_mtu,
  13019	.ndo_fix_features	= bnx2x_fix_features,
  13020	.ndo_set_features	= bnx2x_set_features,
  13021	.ndo_tx_timeout		= bnx2x_tx_timeout,
  13022	.ndo_vlan_rx_add_vid	= bnx2x_vlan_rx_add_vid,
  13023	.ndo_vlan_rx_kill_vid	= bnx2x_vlan_rx_kill_vid,
  13024	.ndo_setup_tc		= __bnx2x_setup_tc,
  13025#ifdef CONFIG_BNX2X_SRIOV
  13026	.ndo_set_vf_mac		= bnx2x_set_vf_mac,
  13027	.ndo_set_vf_vlan	= bnx2x_set_vf_vlan,
  13028	.ndo_get_vf_config	= bnx2x_get_vf_config,
  13029	.ndo_set_vf_spoofchk	= bnx2x_set_vf_spoofchk,
  13030#endif
  13031#ifdef NETDEV_FCOE_WWNN
  13032	.ndo_fcoe_get_wwn	= bnx2x_fcoe_get_wwn,
  13033#endif
  13034
  13035	.ndo_get_phys_port_id	= bnx2x_get_phys_port_id,
  13036	.ndo_set_vf_link_state	= bnx2x_set_vf_link_state,
  13037	.ndo_features_check	= bnx2x_features_check,
  13038};
  13039
  13040static void bnx2x_disable_pcie_error_reporting(struct bnx2x *bp)
  13041{
  13042	if (bp->flags & AER_ENABLED) {
  13043		pci_disable_pcie_error_reporting(bp->pdev);
  13044		bp->flags &= ~AER_ENABLED;
  13045	}
  13046}
  13047
  13048static int bnx2x_init_dev(struct bnx2x *bp, struct pci_dev *pdev,
  13049			  struct net_device *dev, unsigned long board_type)
  13050{
  13051	int rc;
  13052	u32 pci_cfg_dword;
  13053	bool chip_is_e1x = (board_type == BCM57710 ||
  13054			    board_type == BCM57711 ||
  13055			    board_type == BCM57711E);
  13056
  13057	SET_NETDEV_DEV(dev, &pdev->dev);
  13058
  13059	bp->dev = dev;
  13060	bp->pdev = pdev;
  13061
  13062	rc = pci_enable_device(pdev);
  13063	if (rc) {
  13064		dev_err(&bp->pdev->dev,
  13065			"Cannot enable PCI device, aborting\n");
  13066		goto err_out;
  13067	}
  13068
  13069	if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
  13070		dev_err(&bp->pdev->dev,
  13071			"Cannot find PCI device base address, aborting\n");
  13072		rc = -ENODEV;
  13073		goto err_out_disable;
  13074	}
  13075
  13076	if (IS_PF(bp) && !(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
  13077		dev_err(&bp->pdev->dev, "Cannot find second PCI device base address, aborting\n");
  13078		rc = -ENODEV;
  13079		goto err_out_disable;
  13080	}
  13081
  13082	pci_read_config_dword(pdev, PCICFG_REVISION_ID_OFFSET, &pci_cfg_dword);
  13083	if ((pci_cfg_dword & PCICFG_REVESION_ID_MASK) ==
  13084	    PCICFG_REVESION_ID_ERROR_VAL) {
  13085		pr_err("PCI device error, probably due to fan failure, aborting\n");
  13086		rc = -ENODEV;
  13087		goto err_out_disable;
  13088	}
  13089
  13090	if (atomic_read(&pdev->enable_cnt) == 1) {
  13091		rc = pci_request_regions(pdev, DRV_MODULE_NAME);
  13092		if (rc) {
  13093			dev_err(&bp->pdev->dev,
  13094				"Cannot obtain PCI resources, aborting\n");
  13095			goto err_out_disable;
  13096		}
  13097
  13098		pci_set_master(pdev);
  13099		pci_save_state(pdev);
  13100	}
  13101
  13102	if (IS_PF(bp)) {
  13103		if (!pdev->pm_cap) {
  13104			dev_err(&bp->pdev->dev,
  13105				"Cannot find power management capability, aborting\n");
  13106			rc = -EIO;
  13107			goto err_out_release;
  13108		}
  13109	}
  13110
  13111	if (!pci_is_pcie(pdev)) {
  13112		dev_err(&bp->pdev->dev, "Not PCI Express, aborting\n");
  13113		rc = -EIO;
  13114		goto err_out_release;
  13115	}
  13116
  13117	rc = dma_set_mask_and_coherent(&bp->pdev->dev, DMA_BIT_MASK(64));
  13118	if (rc) {
  13119		dev_err(&bp->pdev->dev, "System does not support DMA, aborting\n");
  13120		goto err_out_release;
  13121	}
  13122
  13123	dev->mem_start = pci_resource_start(pdev, 0);
  13124	dev->base_addr = dev->mem_start;
  13125	dev->mem_end = pci_resource_end(pdev, 0);
  13126
  13127	dev->irq = pdev->irq;
  13128
  13129	bp->regview = pci_ioremap_bar(pdev, 0);
  13130	if (!bp->regview) {
  13131		dev_err(&bp->pdev->dev,
  13132			"Cannot map register space, aborting\n");
  13133		rc = -ENOMEM;
  13134		goto err_out_release;
  13135	}
  13136
  13137	/* In E1/E1H use pci device function given by kernel.
  13138	 * In E2/E3 read physical function from ME register since these chips
  13139	 * support Physical Device Assignment where kernel BDF maybe arbitrary
  13140	 * (depending on hypervisor).
  13141	 */
  13142	if (chip_is_e1x) {
  13143		bp->pf_num = PCI_FUNC(pdev->devfn);
  13144	} else {
  13145		/* chip is E2/3*/
  13146		pci_read_config_dword(bp->pdev,
  13147				      PCICFG_ME_REGISTER, &pci_cfg_dword);
  13148		bp->pf_num = (u8)((pci_cfg_dword & ME_REG_ABS_PF_NUM) >>
  13149				  ME_REG_ABS_PF_NUM_SHIFT);
  13150	}
  13151	BNX2X_DEV_INFO("me reg PF num: %d\n", bp->pf_num);
  13152
  13153	/* clean indirect addresses */
  13154	pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS,
  13155			       PCICFG_VENDOR_ID_OFFSET);
  13156
  13157	/* Set PCIe reset type to fundamental for EEH recovery */
  13158	pdev->needs_freset = 1;
  13159
  13160	/* AER (Advanced Error reporting) configuration */
  13161	rc = pci_enable_pcie_error_reporting(pdev);
  13162	if (!rc)
  13163		bp->flags |= AER_ENABLED;
  13164	else
  13165		BNX2X_DEV_INFO("Failed To configure PCIe AER [%d]\n", rc);
  13166
  13167	/*
  13168	 * Clean the following indirect addresses for all functions since it
  13169	 * is not used by the driver.
  13170	 */
  13171	if (IS_PF(bp)) {
  13172		REG_WR(bp, PXP2_REG_PGL_ADDR_88_F0, 0);
  13173		REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F0, 0);
  13174		REG_WR(bp, PXP2_REG_PGL_ADDR_90_F0, 0);
  13175		REG_WR(bp, PXP2_REG_PGL_ADDR_94_F0, 0);
  13176
  13177		if (chip_is_e1x) {
  13178			REG_WR(bp, PXP2_REG_PGL_ADDR_88_F1, 0);
  13179			REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F1, 0);
  13180			REG_WR(bp, PXP2_REG_PGL_ADDR_90_F1, 0);
  13181			REG_WR(bp, PXP2_REG_PGL_ADDR_94_F1, 0);
  13182		}
  13183
  13184		/* Enable internal target-read (in case we are probed after PF
  13185		 * FLR). Must be done prior to any BAR read access. Only for
  13186		 * 57712 and up
  13187		 */
  13188		if (!chip_is_e1x)
  13189			REG_WR(bp,
  13190			       PGLUE_B_REG_INTERNAL_PFID_ENABLE_TARGET_READ, 1);
  13191	}
  13192
  13193	dev->watchdog_timeo = TX_TIMEOUT;
  13194
  13195	dev->netdev_ops = &bnx2x_netdev_ops;
  13196	bnx2x_set_ethtool_ops(bp, dev);
  13197
  13198	dev->priv_flags |= IFF_UNICAST_FLT;
  13199
  13200	dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
  13201		NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
  13202		NETIF_F_RXCSUM | NETIF_F_LRO | NETIF_F_GRO | NETIF_F_GRO_HW |
  13203		NETIF_F_RXHASH | NETIF_F_HW_VLAN_CTAG_TX;
  13204	if (!chip_is_e1x) {
  13205		dev->hw_features |= NETIF_F_GSO_GRE | NETIF_F_GSO_GRE_CSUM |
  13206				    NETIF_F_GSO_IPXIP4 |
  13207				    NETIF_F_GSO_UDP_TUNNEL |
  13208				    NETIF_F_GSO_UDP_TUNNEL_CSUM |
  13209				    NETIF_F_GSO_PARTIAL;
  13210
  13211		dev->hw_enc_features =
  13212			NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
  13213			NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
  13214			NETIF_F_GSO_IPXIP4 |
  13215			NETIF_F_GSO_GRE | NETIF_F_GSO_GRE_CSUM |
  13216			NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_UDP_TUNNEL_CSUM |
  13217			NETIF_F_GSO_PARTIAL;
  13218
  13219		dev->gso_partial_features = NETIF_F_GSO_GRE_CSUM |
  13220					    NETIF_F_GSO_UDP_TUNNEL_CSUM;
  13221
  13222		if (IS_PF(bp))
  13223			dev->udp_tunnel_nic_info = &bnx2x_udp_tunnels;
  13224	}
  13225
  13226	dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
  13227		NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_HIGHDMA;
  13228
  13229	if (IS_PF(bp)) {
  13230		if (chip_is_e1x)
  13231			bp->accept_any_vlan = true;
  13232		else
  13233			dev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER;
  13234	}
  13235	/* For VF we'll know whether to enable VLAN filtering after
  13236	 * getting a response to CHANNEL_TLV_ACQUIRE from PF.
  13237	 */
  13238
  13239	dev->features |= dev->hw_features | NETIF_F_HW_VLAN_CTAG_RX;
  13240	dev->features |= NETIF_F_HIGHDMA;
  13241	if (dev->features & NETIF_F_LRO)
  13242		dev->features &= ~NETIF_F_GRO_HW;
  13243
  13244	/* Add Loopback capability to the device */
  13245	dev->hw_features |= NETIF_F_LOOPBACK;
  13246
  13247#ifdef BCM_DCBNL
  13248	dev->dcbnl_ops = &bnx2x_dcbnl_ops;
  13249#endif
  13250
  13251	/* MTU range, 46 - 9600 */
  13252	dev->min_mtu = ETH_MIN_PACKET_SIZE;
  13253	dev->max_mtu = ETH_MAX_JUMBO_PACKET_SIZE;
  13254
  13255	/* get_port_hwinfo() will set prtad and mmds properly */
  13256	bp->mdio.prtad = MDIO_PRTAD_NONE;
  13257	bp->mdio.mmds = 0;
  13258	bp->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22;
  13259	bp->mdio.dev = dev;
  13260	bp->mdio.mdio_read = bnx2x_mdio_read;
  13261	bp->mdio.mdio_write = bnx2x_mdio_write;
  13262
  13263	return 0;
  13264
  13265err_out_release:
  13266	if (atomic_read(&pdev->enable_cnt) == 1)
  13267		pci_release_regions(pdev);
  13268
  13269err_out_disable:
  13270	pci_disable_device(pdev);
  13271
  13272err_out:
  13273	return rc;
  13274}
  13275
  13276static int bnx2x_check_firmware(struct bnx2x *bp)
  13277{
  13278	const struct firmware *firmware = bp->firmware;
  13279	struct bnx2x_fw_file_hdr *fw_hdr;
  13280	struct bnx2x_fw_file_section *sections;
  13281	u32 offset, len, num_ops;
  13282	__be16 *ops_offsets;
  13283	int i;
  13284	const u8 *fw_ver;
  13285
  13286	if (firmware->size < sizeof(struct bnx2x_fw_file_hdr)) {
  13287		BNX2X_ERR("Wrong FW size\n");
  13288		return -EINVAL;
  13289	}
  13290
  13291	fw_hdr = (struct bnx2x_fw_file_hdr *)firmware->data;
  13292	sections = (struct bnx2x_fw_file_section *)fw_hdr;
  13293
  13294	/* Make sure none of the offsets and sizes make us read beyond
  13295	 * the end of the firmware data */
  13296	for (i = 0; i < sizeof(*fw_hdr) / sizeof(*sections); i++) {
  13297		offset = be32_to_cpu(sections[i].offset);
  13298		len = be32_to_cpu(sections[i].len);
  13299		if (offset + len > firmware->size) {
  13300			BNX2X_ERR("Section %d length is out of bounds\n", i);
  13301			return -EINVAL;
  13302		}
  13303	}
  13304
  13305	/* Likewise for the init_ops offsets */
  13306	offset = be32_to_cpu(fw_hdr->init_ops_offsets.offset);
  13307	ops_offsets = (__force __be16 *)(firmware->data + offset);
  13308	num_ops = be32_to_cpu(fw_hdr->init_ops.len) / sizeof(struct raw_op);
  13309
  13310	for (i = 0; i < be32_to_cpu(fw_hdr->init_ops_offsets.len) / 2; i++) {
  13311		if (be16_to_cpu(ops_offsets[i]) > num_ops) {
  13312			BNX2X_ERR("Section offset %d is out of bounds\n", i);
  13313			return -EINVAL;
  13314		}
  13315	}
  13316
  13317	/* Check FW version */
  13318	offset = be32_to_cpu(fw_hdr->fw_version.offset);
  13319	fw_ver = firmware->data + offset;
  13320	if (fw_ver[0] != bp->fw_major || fw_ver[1] != bp->fw_minor ||
  13321	    fw_ver[2] != bp->fw_rev || fw_ver[3] != bp->fw_eng) {
  13322		BNX2X_ERR("Bad FW version:%d.%d.%d.%d. Should be %d.%d.%d.%d\n",
  13323			  fw_ver[0], fw_ver[1], fw_ver[2], fw_ver[3],
  13324			  bp->fw_major, bp->fw_minor, bp->fw_rev, bp->fw_eng);
  13325		return -EINVAL;
  13326	}
  13327
  13328	return 0;
  13329}
  13330
  13331static void be32_to_cpu_n(const u8 *_source, u8 *_target, u32 n)
  13332{
  13333	const __be32 *source = (const __be32 *)_source;
  13334	u32 *target = (u32 *)_target;
  13335	u32 i;
  13336
  13337	for (i = 0; i < n/4; i++)
  13338		target[i] = be32_to_cpu(source[i]);
  13339}
  13340
  13341/*
  13342   Ops array is stored in the following format:
  13343   {op(8bit), offset(24bit, big endian), data(32bit, big endian)}
  13344 */
  13345static void bnx2x_prep_ops(const u8 *_source, u8 *_target, u32 n)
  13346{
  13347	const __be32 *source = (const __be32 *)_source;
  13348	struct raw_op *target = (struct raw_op *)_target;
  13349	u32 i, j, tmp;
  13350
  13351	for (i = 0, j = 0; i < n/8; i++, j += 2) {
  13352		tmp = be32_to_cpu(source[j]);
  13353		target[i].op = (tmp >> 24) & 0xff;
  13354		target[i].offset = tmp & 0xffffff;
  13355		target[i].raw_data = be32_to_cpu(source[j + 1]);
  13356	}
  13357}
  13358
  13359/* IRO array is stored in the following format:
  13360 * {base(24bit), m1(16bit), m2(16bit), m3(16bit), size(16bit) }
  13361 */
  13362static void bnx2x_prep_iro(const u8 *_source, u8 *_target, u32 n)
  13363{
  13364	const __be32 *source = (const __be32 *)_source;
  13365	struct iro *target = (struct iro *)_target;
  13366	u32 i, j, tmp;
  13367
  13368	for (i = 0, j = 0; i < n/sizeof(struct iro); i++) {
  13369		target[i].base = be32_to_cpu(source[j]);
  13370		j++;
  13371		tmp = be32_to_cpu(source[j]);
  13372		target[i].m1 = (tmp >> 16) & 0xffff;
  13373		target[i].m2 = tmp & 0xffff;
  13374		j++;
  13375		tmp = be32_to_cpu(source[j]);
  13376		target[i].m3 = (tmp >> 16) & 0xffff;
  13377		target[i].size = tmp & 0xffff;
  13378		j++;
  13379	}
  13380}
  13381
  13382static void be16_to_cpu_n(const u8 *_source, u8 *_target, u32 n)
  13383{
  13384	const __be16 *source = (const __be16 *)_source;
  13385	u16 *target = (u16 *)_target;
  13386	u32 i;
  13387
  13388	for (i = 0; i < n/2; i++)
  13389		target[i] = be16_to_cpu(source[i]);
  13390}
  13391
  13392#define BNX2X_ALLOC_AND_SET(arr, lbl, func)				\
  13393do {									\
  13394	u32 len = be32_to_cpu(fw_hdr->arr.len);				\
  13395	bp->arr = kmalloc(len, GFP_KERNEL);				\
  13396	if (!bp->arr)							\
  13397		goto lbl;						\
  13398	func(bp->firmware->data + be32_to_cpu(fw_hdr->arr.offset),	\
  13399	     (u8 *)bp->arr, len);					\
  13400} while (0)
  13401
  13402static int bnx2x_init_firmware(struct bnx2x *bp)
  13403{
  13404	const char *fw_file_name, *fw_file_name_v15;
  13405	struct bnx2x_fw_file_hdr *fw_hdr;
  13406	int rc;
  13407
  13408	if (bp->firmware)
  13409		return 0;
  13410
  13411	if (CHIP_IS_E1(bp)) {
  13412		fw_file_name = FW_FILE_NAME_E1;
  13413		fw_file_name_v15 = FW_FILE_NAME_E1_V15;
  13414	} else if (CHIP_IS_E1H(bp)) {
  13415		fw_file_name = FW_FILE_NAME_E1H;
  13416		fw_file_name_v15 = FW_FILE_NAME_E1H_V15;
  13417	} else if (!CHIP_IS_E1x(bp)) {
  13418		fw_file_name = FW_FILE_NAME_E2;
  13419		fw_file_name_v15 = FW_FILE_NAME_E2_V15;
  13420	} else {
  13421		BNX2X_ERR("Unsupported chip revision\n");
  13422		return -EINVAL;
  13423	}
  13424
  13425	BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
  13426
  13427	rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
  13428	if (rc) {
  13429		BNX2X_DEV_INFO("Trying to load older fw %s\n", fw_file_name_v15);
  13430
  13431		/* try to load prev version */
  13432		rc = request_firmware(&bp->firmware, fw_file_name_v15, &bp->pdev->dev);
  13433
  13434		if (rc)
  13435			goto request_firmware_exit;
  13436
  13437		bp->fw_rev = BCM_5710_FW_REVISION_VERSION_V15;
  13438	} else {
  13439		bp->fw_cap |= FW_CAP_INVALIDATE_VF_FP_HSI;
  13440		bp->fw_rev = BCM_5710_FW_REVISION_VERSION;
  13441	}
  13442
  13443	bp->fw_major = BCM_5710_FW_MAJOR_VERSION;
  13444	bp->fw_minor = BCM_5710_FW_MINOR_VERSION;
  13445	bp->fw_eng = BCM_5710_FW_ENGINEERING_VERSION;
  13446
  13447	rc = bnx2x_check_firmware(bp);
  13448	if (rc) {
  13449		BNX2X_ERR("Corrupt firmware file %s\n", fw_file_name);
  13450		goto request_firmware_exit;
  13451	}
  13452
  13453	fw_hdr = (struct bnx2x_fw_file_hdr *)bp->firmware->data;
  13454
  13455	/* Initialize the pointers to the init arrays */
  13456	/* Blob */
  13457	rc = -ENOMEM;
  13458	BNX2X_ALLOC_AND_SET(init_data, request_firmware_exit, be32_to_cpu_n);
  13459
  13460	/* Opcodes */
  13461	BNX2X_ALLOC_AND_SET(init_ops, init_ops_alloc_err, bnx2x_prep_ops);
  13462
  13463	/* Offsets */
  13464	BNX2X_ALLOC_AND_SET(init_ops_offsets, init_offsets_alloc_err,
  13465			    be16_to_cpu_n);
  13466
  13467	/* STORMs firmware */
  13468	INIT_TSEM_INT_TABLE_DATA(bp) = bp->firmware->data +
  13469			be32_to_cpu(fw_hdr->tsem_int_table_data.offset);
  13470	INIT_TSEM_PRAM_DATA(bp)      = bp->firmware->data +
  13471			be32_to_cpu(fw_hdr->tsem_pram_data.offset);
  13472	INIT_USEM_INT_TABLE_DATA(bp) = bp->firmware->data +
  13473			be32_to_cpu(fw_hdr->usem_int_table_data.offset);
  13474	INIT_USEM_PRAM_DATA(bp)      = bp->firmware->data +
  13475			be32_to_cpu(fw_hdr->usem_pram_data.offset);
  13476	INIT_XSEM_INT_TABLE_DATA(bp) = bp->firmware->data +
  13477			be32_to_cpu(fw_hdr->xsem_int_table_data.offset);
  13478	INIT_XSEM_PRAM_DATA(bp)      = bp->firmware->data +
  13479			be32_to_cpu(fw_hdr->xsem_pram_data.offset);
  13480	INIT_CSEM_INT_TABLE_DATA(bp) = bp->firmware->data +
  13481			be32_to_cpu(fw_hdr->csem_int_table_data.offset);
  13482	INIT_CSEM_PRAM_DATA(bp)      = bp->firmware->data +
  13483			be32_to_cpu(fw_hdr->csem_pram_data.offset);
  13484	/* IRO */
  13485	BNX2X_ALLOC_AND_SET(iro_arr, iro_alloc_err, bnx2x_prep_iro);
  13486
  13487	return 0;
  13488
  13489iro_alloc_err:
  13490	kfree(bp->init_ops_offsets);
  13491init_offsets_alloc_err:
  13492	kfree(bp->init_ops);
  13493init_ops_alloc_err:
  13494	kfree(bp->init_data);
  13495request_firmware_exit:
  13496	release_firmware(bp->firmware);
  13497	bp->firmware = NULL;
  13498
  13499	return rc;
  13500}
  13501
  13502static void bnx2x_release_firmware(struct bnx2x *bp)
  13503{
  13504	kfree(bp->init_ops_offsets);
  13505	kfree(bp->init_ops);
  13506	kfree(bp->init_data);
  13507	release_firmware(bp->firmware);
  13508	bp->firmware = NULL;
  13509}
  13510
  13511static struct bnx2x_func_sp_drv_ops bnx2x_func_sp_drv = {
  13512	.init_hw_cmn_chip = bnx2x_init_hw_common_chip,
  13513	.init_hw_cmn      = bnx2x_init_hw_common,
  13514	.init_hw_port     = bnx2x_init_hw_port,
  13515	.init_hw_func     = bnx2x_init_hw_func,
  13516
  13517	.reset_hw_cmn     = bnx2x_reset_common,
  13518	.reset_hw_port    = bnx2x_reset_port,
  13519	.reset_hw_func    = bnx2x_reset_func,
  13520
  13521	.gunzip_init      = bnx2x_gunzip_init,
  13522	.gunzip_end       = bnx2x_gunzip_end,
  13523
  13524	.init_fw          = bnx2x_init_firmware,
  13525	.release_fw       = bnx2x_release_firmware,
  13526};
  13527
  13528void bnx2x__init_func_obj(struct bnx2x *bp)
  13529{
  13530	/* Prepare DMAE related driver resources */
  13531	bnx2x_setup_dmae(bp);
  13532
  13533	bnx2x_init_func_obj(bp, &bp->func_obj,
  13534			    bnx2x_sp(bp, func_rdata),
  13535			    bnx2x_sp_mapping(bp, func_rdata),
  13536			    bnx2x_sp(bp, func_afex_rdata),
  13537			    bnx2x_sp_mapping(bp, func_afex_rdata),
  13538			    &bnx2x_func_sp_drv);
  13539}
  13540
  13541/* must be called after sriov-enable */
  13542static int bnx2x_set_qm_cid_count(struct bnx2x *bp)
  13543{
  13544	int cid_count = BNX2X_L2_MAX_CID(bp);
  13545
  13546	if (IS_SRIOV(bp))
  13547		cid_count += BNX2X_VF_CIDS;
  13548
  13549	if (CNIC_SUPPORT(bp))
  13550		cid_count += CNIC_CID_MAX;
  13551
  13552	return roundup(cid_count, QM_CID_ROUND);
  13553}
  13554
  13555/**
  13556 * bnx2x_get_num_non_def_sbs - return the number of none default SBs
  13557 * @pdev: pci device
  13558 * @cnic_cnt: count
  13559 *
  13560 */
  13561static int bnx2x_get_num_non_def_sbs(struct pci_dev *pdev, int cnic_cnt)
  13562{
  13563	int index;
  13564	u16 control = 0;
  13565
  13566	/*
  13567	 * If MSI-X is not supported - return number of SBs needed to support
  13568	 * one fast path queue: one FP queue + SB for CNIC
  13569	 */
  13570	if (!pdev->msix_cap) {
  13571		dev_info(&pdev->dev, "no msix capability found\n");
  13572		return 1 + cnic_cnt;
  13573	}
  13574	dev_info(&pdev->dev, "msix capability found\n");
  13575
  13576	/*
  13577	 * The value in the PCI configuration space is the index of the last
  13578	 * entry, namely one less than the actual size of the table, which is
  13579	 * exactly what we want to return from this function: number of all SBs
  13580	 * without the default SB.
  13581	 * For VFs there is no default SB, then we return (index+1).
  13582	 */
  13583	pci_read_config_word(pdev, pdev->msix_cap + PCI_MSIX_FLAGS, &control);
  13584
  13585	index = control & PCI_MSIX_FLAGS_QSIZE;
  13586
  13587	return index;
  13588}
  13589
  13590static int set_max_cos_est(int chip_id)
  13591{
  13592	switch (chip_id) {
  13593	case BCM57710:
  13594	case BCM57711:
  13595	case BCM57711E:
  13596		return BNX2X_MULTI_TX_COS_E1X;
  13597	case BCM57712:
  13598	case BCM57712_MF:
  13599		return BNX2X_MULTI_TX_COS_E2_E3A0;
  13600	case BCM57800:
  13601	case BCM57800_MF:
  13602	case BCM57810:
  13603	case BCM57810_MF:
  13604	case BCM57840_4_10:
  13605	case BCM57840_2_20:
  13606	case BCM57840_O:
  13607	case BCM57840_MFO:
  13608	case BCM57840_MF:
  13609	case BCM57811:
  13610	case BCM57811_MF:
  13611		return BNX2X_MULTI_TX_COS_E3B0;
  13612	case BCM57712_VF:
  13613	case BCM57800_VF:
  13614	case BCM57810_VF:
  13615	case BCM57840_VF:
  13616	case BCM57811_VF:
  13617		return 1;
  13618	default:
  13619		pr_err("Unknown board_type (%d), aborting\n", chip_id);
  13620		return -ENODEV;
  13621	}
  13622}
  13623
  13624static int set_is_vf(int chip_id)
  13625{
  13626	switch (chip_id) {
  13627	case BCM57712_VF:
  13628	case BCM57800_VF:
  13629	case BCM57810_VF:
  13630	case BCM57840_VF:
  13631	case BCM57811_VF:
  13632		return true;
  13633	default:
  13634		return false;
  13635	}
  13636}
  13637
  13638/* nig_tsgen registers relative address */
  13639#define tsgen_ctrl 0x0
  13640#define tsgen_freecount 0x10
  13641#define tsgen_synctime_t0 0x20
  13642#define tsgen_offset_t0 0x28
  13643#define tsgen_drift_t0 0x30
  13644#define tsgen_synctime_t1 0x58
  13645#define tsgen_offset_t1 0x60
  13646#define tsgen_drift_t1 0x68
  13647
  13648/* FW workaround for setting drift */
  13649static int bnx2x_send_update_drift_ramrod(struct bnx2x *bp, int drift_dir,
  13650					  int best_val, int best_period)
  13651{
  13652	struct bnx2x_func_state_params func_params = {NULL};
  13653	struct bnx2x_func_set_timesync_params *set_timesync_params =
  13654		&func_params.params.set_timesync;
  13655
  13656	/* Prepare parameters for function state transitions */
  13657	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
  13658	__set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
  13659
  13660	func_params.f_obj = &bp->func_obj;
  13661	func_params.cmd = BNX2X_F_CMD_SET_TIMESYNC;
  13662
  13663	/* Function parameters */
  13664	set_timesync_params->drift_adjust_cmd = TS_DRIFT_ADJUST_SET;
  13665	set_timesync_params->offset_cmd = TS_OFFSET_KEEP;
  13666	set_timesync_params->add_sub_drift_adjust_value =
  13667		drift_dir ? TS_ADD_VALUE : TS_SUB_VALUE;
  13668	set_timesync_params->drift_adjust_value = best_val;
  13669	set_timesync_params->drift_adjust_period = best_period;
  13670
  13671	return bnx2x_func_state_change(bp, &func_params);
  13672}
  13673
  13674static int bnx2x_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
  13675{
  13676	struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
  13677	int rc;
  13678	int drift_dir = 1;
  13679	int val, period, period1, period2, dif, dif1, dif2;
  13680	int best_dif = BNX2X_MAX_PHC_DRIFT, best_period = 0, best_val = 0;
  13681
  13682	DP(BNX2X_MSG_PTP, "PTP adjfreq called, ppb = %d\n", ppb);
  13683
  13684	if (!netif_running(bp->dev)) {
  13685		DP(BNX2X_MSG_PTP,
  13686		   "PTP adjfreq called while the interface is down\n");
  13687		return -ENETDOWN;
  13688	}
  13689
  13690	if (ppb < 0) {
  13691		ppb = -ppb;
  13692		drift_dir = 0;
  13693	}
  13694
  13695	if (ppb == 0) {
  13696		best_val = 1;
  13697		best_period = 0x1FFFFFF;
  13698	} else if (ppb >= BNX2X_MAX_PHC_DRIFT) {
  13699		best_val = 31;
  13700		best_period = 1;
  13701	} else {
  13702		/* Changed not to allow val = 8, 16, 24 as these values
  13703		 * are not supported in workaround.
  13704		 */
  13705		for (val = 0; val <= 31; val++) {
  13706			if ((val & 0x7) == 0)
  13707				continue;
  13708			period1 = val * 1000000 / ppb;
  13709			period2 = period1 + 1;
  13710			if (period1 != 0)
  13711				dif1 = ppb - (val * 1000000 / period1);
  13712			else
  13713				dif1 = BNX2X_MAX_PHC_DRIFT;
  13714			if (dif1 < 0)
  13715				dif1 = -dif1;
  13716			dif2 = ppb - (val * 1000000 / period2);
  13717			if (dif2 < 0)
  13718				dif2 = -dif2;
  13719			dif = (dif1 < dif2) ? dif1 : dif2;
  13720			period = (dif1 < dif2) ? period1 : period2;
  13721			if (dif < best_dif) {
  13722				best_dif = dif;
  13723				best_val = val;
  13724				best_period = period;
  13725			}
  13726		}
  13727	}
  13728
  13729	rc = bnx2x_send_update_drift_ramrod(bp, drift_dir, best_val,
  13730					    best_period);
  13731	if (rc) {
  13732		BNX2X_ERR("Failed to set drift\n");
  13733		return -EFAULT;
  13734	}
  13735
  13736	DP(BNX2X_MSG_PTP, "Configured val = %d, period = %d\n", best_val,
  13737	   best_period);
  13738
  13739	return 0;
  13740}
  13741
  13742static int bnx2x_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
  13743{
  13744	struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
  13745
  13746	if (!netif_running(bp->dev)) {
  13747		DP(BNX2X_MSG_PTP,
  13748		   "PTP adjtime called while the interface is down\n");
  13749		return -ENETDOWN;
  13750	}
  13751
  13752	DP(BNX2X_MSG_PTP, "PTP adjtime called, delta = %llx\n", delta);
  13753
  13754	timecounter_adjtime(&bp->timecounter, delta);
  13755
  13756	return 0;
  13757}
  13758
  13759static int bnx2x_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
  13760{
  13761	struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
  13762	u64 ns;
  13763
  13764	if (!netif_running(bp->dev)) {
  13765		DP(BNX2X_MSG_PTP,
  13766		   "PTP gettime called while the interface is down\n");
  13767		return -ENETDOWN;
  13768	}
  13769
  13770	ns = timecounter_read(&bp->timecounter);
  13771
  13772	DP(BNX2X_MSG_PTP, "PTP gettime called, ns = %llu\n", ns);
  13773
  13774	*ts = ns_to_timespec64(ns);
  13775
  13776	return 0;
  13777}
  13778
  13779static int bnx2x_ptp_settime(struct ptp_clock_info *ptp,
  13780			     const struct timespec64 *ts)
  13781{
  13782	struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
  13783	u64 ns;
  13784
  13785	if (!netif_running(bp->dev)) {
  13786		DP(BNX2X_MSG_PTP,
  13787		   "PTP settime called while the interface is down\n");
  13788		return -ENETDOWN;
  13789	}
  13790
  13791	ns = timespec64_to_ns(ts);
  13792
  13793	DP(BNX2X_MSG_PTP, "PTP settime called, ns = %llu\n", ns);
  13794
  13795	/* Re-init the timecounter */
  13796	timecounter_init(&bp->timecounter, &bp->cyclecounter, ns);
  13797
  13798	return 0;
  13799}
  13800
  13801/* Enable (or disable) ancillary features of the phc subsystem */
  13802static int bnx2x_ptp_enable(struct ptp_clock_info *ptp,
  13803			    struct ptp_clock_request *rq, int on)
  13804{
  13805	struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
  13806
  13807	BNX2X_ERR("PHC ancillary features are not supported\n");
  13808	return -ENOTSUPP;
  13809}
  13810
  13811void bnx2x_register_phc(struct bnx2x *bp)
  13812{
  13813	/* Fill the ptp_clock_info struct and register PTP clock*/
  13814	bp->ptp_clock_info.owner = THIS_MODULE;
  13815	snprintf(bp->ptp_clock_info.name, 16, "%s", bp->dev->name);
  13816	bp->ptp_clock_info.max_adj = BNX2X_MAX_PHC_DRIFT; /* In PPB */
  13817	bp->ptp_clock_info.n_alarm = 0;
  13818	bp->ptp_clock_info.n_ext_ts = 0;
  13819	bp->ptp_clock_info.n_per_out = 0;
  13820	bp->ptp_clock_info.pps = 0;
  13821	bp->ptp_clock_info.adjfreq = bnx2x_ptp_adjfreq;
  13822	bp->ptp_clock_info.adjtime = bnx2x_ptp_adjtime;
  13823	bp->ptp_clock_info.gettime64 = bnx2x_ptp_gettime;
  13824	bp->ptp_clock_info.settime64 = bnx2x_ptp_settime;
  13825	bp->ptp_clock_info.enable = bnx2x_ptp_enable;
  13826
  13827	bp->ptp_clock = ptp_clock_register(&bp->ptp_clock_info, &bp->pdev->dev);
  13828	if (IS_ERR(bp->ptp_clock)) {
  13829		bp->ptp_clock = NULL;
  13830		BNX2X_ERR("PTP clock registration failed\n");
  13831	}
  13832}
  13833
  13834static int bnx2x_init_one(struct pci_dev *pdev,
  13835				    const struct pci_device_id *ent)
  13836{
  13837	struct net_device *dev = NULL;
  13838	struct bnx2x *bp;
  13839	int rc, max_non_def_sbs;
  13840	int rx_count, tx_count, rss_count, doorbell_size;
  13841	int max_cos_est;
  13842	bool is_vf;
  13843	int cnic_cnt;
  13844
  13845	/* Management FW 'remembers' living interfaces. Allow it some time
  13846	 * to forget previously living interfaces, allowing a proper re-load.
  13847	 */
  13848	if (is_kdump_kernel()) {
  13849		ktime_t now = ktime_get_boottime();
  13850		ktime_t fw_ready_time = ktime_set(5, 0);
  13851
  13852		if (ktime_before(now, fw_ready_time))
  13853			msleep(ktime_ms_delta(fw_ready_time, now));
  13854	}
  13855
  13856	/* An estimated maximum supported CoS number according to the chip
  13857	 * version.
  13858	 * We will try to roughly estimate the maximum number of CoSes this chip
  13859	 * may support in order to minimize the memory allocated for Tx
  13860	 * netdev_queue's. This number will be accurately calculated during the
  13861	 * initialization of bp->max_cos based on the chip versions AND chip
  13862	 * revision in the bnx2x_init_bp().
  13863	 */
  13864	max_cos_est = set_max_cos_est(ent->driver_data);
  13865	if (max_cos_est < 0)
  13866		return max_cos_est;
  13867	is_vf = set_is_vf(ent->driver_data);
  13868	cnic_cnt = is_vf ? 0 : 1;
  13869
  13870	max_non_def_sbs = bnx2x_get_num_non_def_sbs(pdev, cnic_cnt);
  13871
  13872	/* add another SB for VF as it has no default SB */
  13873	max_non_def_sbs += is_vf ? 1 : 0;
  13874
  13875	/* Maximum number of RSS queues: one IGU SB goes to CNIC */
  13876	rss_count = max_non_def_sbs - cnic_cnt;
  13877
  13878	if (rss_count < 1)
  13879		return -EINVAL;
  13880
  13881	/* Maximum number of netdev Rx queues: RSS + FCoE L2 */
  13882	rx_count = rss_count + cnic_cnt;
  13883
  13884	/* Maximum number of netdev Tx queues:
  13885	 * Maximum TSS queues * Maximum supported number of CoS  + FCoE L2
  13886	 */
  13887	tx_count = rss_count * max_cos_est + cnic_cnt;
  13888
  13889	/* dev zeroed in init_etherdev */
  13890	dev = alloc_etherdev_mqs(sizeof(*bp), tx_count, rx_count);
  13891	if (!dev)
  13892		return -ENOMEM;
  13893
  13894	bp = netdev_priv(dev);
  13895
  13896	bp->flags = 0;
  13897	if (is_vf)
  13898		bp->flags |= IS_VF_FLAG;
  13899
  13900	bp->igu_sb_cnt = max_non_def_sbs;
  13901	bp->igu_base_addr = IS_VF(bp) ? PXP_VF_ADDR_IGU_START : BAR_IGU_INTMEM;
  13902	bp->msg_enable = debug;
  13903	bp->cnic_support = cnic_cnt;
  13904	bp->cnic_probe = bnx2x_cnic_probe;
  13905
  13906	pci_set_drvdata(pdev, dev);
  13907
  13908	rc = bnx2x_init_dev(bp, pdev, dev, ent->driver_data);
  13909	if (rc < 0) {
  13910		free_netdev(dev);
  13911		return rc;
  13912	}
  13913
  13914	BNX2X_DEV_INFO("This is a %s function\n",
  13915		       IS_PF(bp) ? "physical" : "virtual");
  13916	BNX2X_DEV_INFO("Cnic support is %s\n", CNIC_SUPPORT(bp) ? "on" : "off");
  13917	BNX2X_DEV_INFO("Max num of status blocks %d\n", max_non_def_sbs);
  13918	BNX2X_DEV_INFO("Allocated netdev with %d tx and %d rx queues\n",
  13919		       tx_count, rx_count);
  13920
  13921	rc = bnx2x_init_bp(bp);
  13922	if (rc)
  13923		goto init_one_exit;
  13924
  13925	/* Map doorbells here as we need the real value of bp->max_cos which
  13926	 * is initialized in bnx2x_init_bp() to determine the number of
  13927	 * l2 connections.
  13928	 */
  13929	if (IS_VF(bp)) {
  13930		bp->doorbells = bnx2x_vf_doorbells(bp);
  13931		rc = bnx2x_vf_pci_alloc(bp);
  13932		if (rc)
  13933			goto init_one_freemem;
  13934	} else {
  13935		doorbell_size = BNX2X_L2_MAX_CID(bp) * (1 << BNX2X_DB_SHIFT);
  13936		if (doorbell_size > pci_resource_len(pdev, 2)) {
  13937			dev_err(&bp->pdev->dev,
  13938				"Cannot map doorbells, bar size too small, aborting\n");
  13939			rc = -ENOMEM;
  13940			goto init_one_freemem;
  13941		}
  13942		bp->doorbells = ioremap(pci_resource_start(pdev, 2),
  13943						doorbell_size);
  13944	}
  13945	if (!bp->doorbells) {
  13946		dev_err(&bp->pdev->dev,
  13947			"Cannot map doorbell space, aborting\n");
  13948		rc = -ENOMEM;
  13949		goto init_one_freemem;
  13950	}
  13951
  13952	if (IS_VF(bp)) {
  13953		rc = bnx2x_vfpf_acquire(bp, tx_count, rx_count);
  13954		if (rc)
  13955			goto init_one_freemem;
  13956
  13957#ifdef CONFIG_BNX2X_SRIOV
  13958		/* VF with OLD Hypervisor or old PF do not support filtering */
  13959		if (bp->acquire_resp.pfdev_info.pf_cap & PFVF_CAP_VLAN_FILTER) {
  13960			dev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER;
  13961			dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
  13962		}
  13963#endif
  13964	}
  13965
  13966	/* Enable SRIOV if capability found in configuration space */
  13967	rc = bnx2x_iov_init_one(bp, int_mode, BNX2X_MAX_NUM_OF_VFS);
  13968	if (rc)
  13969		goto init_one_freemem;
  13970
  13971	/* calc qm_cid_count */
  13972	bp->qm_cid_count = bnx2x_set_qm_cid_count(bp);
  13973	BNX2X_DEV_INFO("qm_cid_count %d\n", bp->qm_cid_count);
  13974
  13975	/* disable FCOE L2 queue for E1x*/
  13976	if (CHIP_IS_E1x(bp))
  13977		bp->flags |= NO_FCOE_FLAG;
  13978
  13979	/* Set bp->num_queues for MSI-X mode*/
  13980	bnx2x_set_num_queues(bp);
  13981
  13982	/* Configure interrupt mode: try to enable MSI-X/MSI if
  13983	 * needed.
  13984	 */
  13985	rc = bnx2x_set_int_mode(bp);
  13986	if (rc) {
  13987		dev_err(&pdev->dev, "Cannot set interrupts\n");
  13988		goto init_one_freemem;
  13989	}
  13990	BNX2X_DEV_INFO("set interrupts successfully\n");
  13991
  13992	/* register the net device */
  13993	rc = register_netdev(dev);
  13994	if (rc) {
  13995		dev_err(&pdev->dev, "Cannot register net device\n");
  13996		goto init_one_freemem;
  13997	}
  13998	BNX2X_DEV_INFO("device name after netdev register %s\n", dev->name);
  13999
  14000	if (!NO_FCOE(bp)) {
  14001		/* Add storage MAC address */
  14002		rtnl_lock();
  14003		dev_addr_add(bp->dev, bp->fip_mac, NETDEV_HW_ADDR_T_SAN);
  14004		rtnl_unlock();
  14005	}
  14006	BNX2X_DEV_INFO(
  14007	       "%s (%c%d) PCI-E found at mem %lx, IRQ %d, node addr %pM\n",
  14008	       board_info[ent->driver_data].name,
  14009	       (CHIP_REV(bp) >> 12) + 'A', (CHIP_METAL(bp) >> 4),
  14010	       dev->base_addr, bp->pdev->irq, dev->dev_addr);
  14011	pcie_print_link_status(bp->pdev);
  14012
  14013	if (!IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp))
  14014		bnx2x_set_os_driver_state(bp, OS_DRIVER_STATE_DISABLED);
  14015
  14016	return 0;
  14017
  14018init_one_freemem:
  14019	bnx2x_free_mem_bp(bp);
  14020
  14021init_one_exit:
  14022	bnx2x_disable_pcie_error_reporting(bp);
  14023
  14024	if (bp->regview)
  14025		iounmap(bp->regview);
  14026
  14027	if (IS_PF(bp) && bp->doorbells)
  14028		iounmap(bp->doorbells);
  14029
  14030	free_netdev(dev);
  14031
  14032	if (atomic_read(&pdev->enable_cnt) == 1)
  14033		pci_release_regions(pdev);
  14034
  14035	pci_disable_device(pdev);
  14036
  14037	return rc;
  14038}
  14039
  14040static void __bnx2x_remove(struct pci_dev *pdev,
  14041			   struct net_device *dev,
  14042			   struct bnx2x *bp,
  14043			   bool remove_netdev)
  14044{
  14045	/* Delete storage MAC address */
  14046	if (!NO_FCOE(bp)) {
  14047		rtnl_lock();
  14048		dev_addr_del(bp->dev, bp->fip_mac, NETDEV_HW_ADDR_T_SAN);
  14049		rtnl_unlock();
  14050	}
  14051
  14052#ifdef BCM_DCBNL
  14053	/* Delete app tlvs from dcbnl */
  14054	bnx2x_dcbnl_update_applist(bp, true);
  14055#endif
  14056
  14057	if (IS_PF(bp) &&
  14058	    !BP_NOMCP(bp) &&
  14059	    (bp->flags & BC_SUPPORTS_RMMOD_CMD))
  14060		bnx2x_fw_command(bp, DRV_MSG_CODE_RMMOD, 0);
  14061
  14062	/* Close the interface - either directly or implicitly */
  14063	if (remove_netdev) {
  14064		unregister_netdev(dev);
  14065	} else {
  14066		rtnl_lock();
  14067		dev_close(dev);
  14068		rtnl_unlock();
  14069	}
  14070
  14071	bnx2x_iov_remove_one(bp);
  14072
  14073	/* Power on: we can't let PCI layer write to us while we are in D3 */
  14074	if (IS_PF(bp)) {
  14075		bnx2x_set_power_state(bp, PCI_D0);
  14076		bnx2x_set_os_driver_state(bp, OS_DRIVER_STATE_NOT_LOADED);
  14077
  14078		/* Set endianity registers to reset values in case next driver
  14079		 * boots in different endianty environment.
  14080		 */
  14081		bnx2x_reset_endianity(bp);
  14082	}
  14083
  14084	/* Disable MSI/MSI-X */
  14085	bnx2x_disable_msi(bp);
  14086
  14087	/* Power off */
  14088	if (IS_PF(bp))
  14089		bnx2x_set_power_state(bp, PCI_D3hot);
  14090
  14091	/* Make sure RESET task is not scheduled before continuing */
  14092	cancel_delayed_work_sync(&bp->sp_rtnl_task);
  14093
  14094	/* send message via vfpf channel to release the resources of this vf */
  14095	if (IS_VF(bp))
  14096		bnx2x_vfpf_release(bp);
  14097
  14098	/* Assumes no further PCIe PM changes will occur */
  14099	if (system_state == SYSTEM_POWER_OFF) {
  14100		pci_wake_from_d3(pdev, bp->wol);
  14101		pci_set_power_state(pdev, PCI_D3hot);
  14102	}
  14103
  14104	bnx2x_disable_pcie_error_reporting(bp);
  14105	if (remove_netdev) {
  14106		if (bp->regview)
  14107			iounmap(bp->regview);
  14108
  14109		/* For vfs, doorbells are part of the regview and were unmapped
  14110		 * along with it. FW is only loaded by PF.
  14111		 */
  14112		if (IS_PF(bp)) {
  14113			if (bp->doorbells)
  14114				iounmap(bp->doorbells);
  14115
  14116			bnx2x_release_firmware(bp);
  14117		} else {
  14118			bnx2x_vf_pci_dealloc(bp);
  14119		}
  14120		bnx2x_free_mem_bp(bp);
  14121
  14122		free_netdev(dev);
  14123
  14124		if (atomic_read(&pdev->enable_cnt) == 1)
  14125			pci_release_regions(pdev);
  14126
  14127		pci_disable_device(pdev);
  14128	}
  14129}
  14130
  14131static void bnx2x_remove_one(struct pci_dev *pdev)
  14132{
  14133	struct net_device *dev = pci_get_drvdata(pdev);
  14134	struct bnx2x *bp;
  14135
  14136	if (!dev) {
  14137		dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
  14138		return;
  14139	}
  14140	bp = netdev_priv(dev);
  14141
  14142	__bnx2x_remove(pdev, dev, bp, true);
  14143}
  14144
  14145static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
  14146{
  14147	bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT;
  14148
  14149	bp->rx_mode = BNX2X_RX_MODE_NONE;
  14150
  14151	if (CNIC_LOADED(bp))
  14152		bnx2x_cnic_notify(bp, CNIC_CTL_STOP_CMD);
  14153
  14154	/* Stop Tx */
  14155	bnx2x_tx_disable(bp);
  14156	netdev_reset_tc(bp->dev);
  14157
  14158	del_timer_sync(&bp->timer);
  14159	cancel_delayed_work_sync(&bp->sp_task);
  14160	cancel_delayed_work_sync(&bp->period_task);
  14161
  14162	if (!down_timeout(&bp->stats_lock, HZ / 10)) {
  14163		bp->stats_state = STATS_STATE_DISABLED;
  14164		up(&bp->stats_lock);
  14165	}
  14166
  14167	bnx2x_save_statistics(bp);
  14168
  14169	netif_carrier_off(bp->dev);
  14170
  14171	return 0;
  14172}
  14173
  14174/**
  14175 * bnx2x_io_error_detected - called when PCI error is detected
  14176 * @pdev: Pointer to PCI device
  14177 * @state: The current pci connection state
  14178 *
  14179 * This function is called after a PCI bus error affecting
  14180 * this device has been detected.
  14181 */
  14182static pci_ers_result_t bnx2x_io_error_detected(struct pci_dev *pdev,
  14183						pci_channel_state_t state)
  14184{
  14185	struct net_device *dev = pci_get_drvdata(pdev);
  14186	struct bnx2x *bp = netdev_priv(dev);
  14187
  14188	rtnl_lock();
  14189
  14190	BNX2X_ERR("IO error detected\n");
  14191
  14192	netif_device_detach(dev);
  14193
  14194	if (state == pci_channel_io_perm_failure) {
  14195		rtnl_unlock();
  14196		return PCI_ERS_RESULT_DISCONNECT;
  14197	}
  14198
  14199	if (netif_running(dev))
  14200		bnx2x_eeh_nic_unload(bp);
  14201
  14202	bnx2x_prev_path_mark_eeh(bp);
  14203
  14204	pci_disable_device(pdev);
  14205
  14206	rtnl_unlock();
  14207
  14208	/* Request a slot reset */
  14209	return PCI_ERS_RESULT_NEED_RESET;
  14210}
  14211
  14212/**
  14213 * bnx2x_io_slot_reset - called after the PCI bus has been reset
  14214 * @pdev: Pointer to PCI device
  14215 *
  14216 * Restart the card from scratch, as if from a cold-boot.
  14217 */
  14218static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev)
  14219{
  14220	struct net_device *dev = pci_get_drvdata(pdev);
  14221	struct bnx2x *bp = netdev_priv(dev);
  14222	int i;
  14223
  14224	rtnl_lock();
  14225	BNX2X_ERR("IO slot reset initializing...\n");
  14226	if (pci_enable_device(pdev)) {
  14227		dev_err(&pdev->dev,
  14228			"Cannot re-enable PCI device after reset\n");
  14229		rtnl_unlock();
  14230		return PCI_ERS_RESULT_DISCONNECT;
  14231	}
  14232
  14233	pci_set_master(pdev);
  14234	pci_restore_state(pdev);
  14235	pci_save_state(pdev);
  14236
  14237	if (netif_running(dev))
  14238		bnx2x_set_power_state(bp, PCI_D0);
  14239
  14240	if (netif_running(dev)) {
  14241		BNX2X_ERR("IO slot reset --> driver unload\n");
  14242
  14243		/* MCP should have been reset; Need to wait for validity */
  14244		if (bnx2x_init_shmem(bp)) {
  14245			rtnl_unlock();
  14246			return PCI_ERS_RESULT_DISCONNECT;
  14247		}
  14248
  14249		if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
  14250			u32 v;
  14251
  14252			v = SHMEM2_RD(bp,
  14253				      drv_capabilities_flag[BP_FW_MB_IDX(bp)]);
  14254			SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)],
  14255				  v & ~DRV_FLAGS_CAPABILITIES_LOADED_L2);
  14256		}
  14257		bnx2x_drain_tx_queues(bp);
  14258		bnx2x_send_unload_req(bp, UNLOAD_RECOVERY);
  14259		bnx2x_netif_stop(bp, 1);
  14260		bnx2x_del_all_napi(bp);
  14261
  14262		if (CNIC_LOADED(bp))
  14263			bnx2x_del_all_napi_cnic(bp);
  14264
  14265		bnx2x_free_irq(bp);
  14266
  14267		/* Report UNLOAD_DONE to MCP */
  14268		bnx2x_send_unload_done(bp, true);
  14269
  14270		bp->sp_state = 0;
  14271		bp->port.pmf = 0;
  14272
  14273		bnx2x_prev_unload(bp);
  14274
  14275		/* We should have reseted the engine, so It's fair to
  14276		 * assume the FW will no longer write to the bnx2x driver.
  14277		 */
  14278		bnx2x_squeeze_objects(bp);
  14279		bnx2x_free_skbs(bp);
  14280		for_each_rx_queue(bp, i)
  14281			bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
  14282		bnx2x_free_fp_mem(bp);
  14283		bnx2x_free_mem(bp);
  14284
  14285		bp->state = BNX2X_STATE_CLOSED;
  14286	}
  14287
  14288	rtnl_unlock();
  14289
  14290	return PCI_ERS_RESULT_RECOVERED;
  14291}
  14292
  14293/**
  14294 * bnx2x_io_resume - called when traffic can start flowing again
  14295 * @pdev: Pointer to PCI device
  14296 *
  14297 * This callback is called when the error recovery driver tells us that
  14298 * its OK to resume normal operation.
  14299 */
  14300static void bnx2x_io_resume(struct pci_dev *pdev)
  14301{
  14302	struct net_device *dev = pci_get_drvdata(pdev);
  14303	struct bnx2x *bp = netdev_priv(dev);
  14304
  14305	if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
  14306		netdev_err(bp->dev, "Handling parity error recovery. Try again later\n");
  14307		return;
  14308	}
  14309
  14310	rtnl_lock();
  14311
  14312	bp->fw_seq = SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) &
  14313							DRV_MSG_SEQ_NUMBER_MASK;
  14314
  14315	if (netif_running(dev))
  14316		bnx2x_nic_load(bp, LOAD_NORMAL);
  14317
  14318	netif_device_attach(dev);
  14319
  14320	rtnl_unlock();
  14321}
  14322
  14323static const struct pci_error_handlers bnx2x_err_handler = {
  14324	.error_detected = bnx2x_io_error_detected,
  14325	.slot_reset     = bnx2x_io_slot_reset,
  14326	.resume         = bnx2x_io_resume,
  14327};
  14328
  14329static void bnx2x_shutdown(struct pci_dev *pdev)
  14330{
  14331	struct net_device *dev = pci_get_drvdata(pdev);
  14332	struct bnx2x *bp;
  14333
  14334	if (!dev)
  14335		return;
  14336
  14337	bp = netdev_priv(dev);
  14338	if (!bp)
  14339		return;
  14340
  14341	rtnl_lock();
  14342	netif_device_detach(dev);
  14343	rtnl_unlock();
  14344
  14345	/* Don't remove the netdevice, as there are scenarios which will cause
  14346	 * the kernel to hang, e.g., when trying to remove bnx2i while the
  14347	 * rootfs is mounted from SAN.
  14348	 */
  14349	__bnx2x_remove(pdev, dev, bp, false);
  14350}
  14351
  14352static struct pci_driver bnx2x_pci_driver = {
  14353	.name        = DRV_MODULE_NAME,
  14354	.id_table    = bnx2x_pci_tbl,
  14355	.probe       = bnx2x_init_one,
  14356	.remove      = bnx2x_remove_one,
  14357	.driver.pm   = &bnx2x_pm_ops,
  14358	.err_handler = &bnx2x_err_handler,
  14359#ifdef CONFIG_BNX2X_SRIOV
  14360	.sriov_configure = bnx2x_sriov_configure,
  14361#endif
  14362	.shutdown    = bnx2x_shutdown,
  14363};
  14364
  14365static int __init bnx2x_init(void)
  14366{
  14367	int ret;
  14368
  14369	bnx2x_wq = create_singlethread_workqueue("bnx2x");
  14370	if (bnx2x_wq == NULL) {
  14371		pr_err("Cannot create workqueue\n");
  14372		return -ENOMEM;
  14373	}
  14374	bnx2x_iov_wq = create_singlethread_workqueue("bnx2x_iov");
  14375	if (!bnx2x_iov_wq) {
  14376		pr_err("Cannot create iov workqueue\n");
  14377		destroy_workqueue(bnx2x_wq);
  14378		return -ENOMEM;
  14379	}
  14380
  14381	ret = pci_register_driver(&bnx2x_pci_driver);
  14382	if (ret) {
  14383		pr_err("Cannot register driver\n");
  14384		destroy_workqueue(bnx2x_wq);
  14385		destroy_workqueue(bnx2x_iov_wq);
  14386	}
  14387	return ret;
  14388}
  14389
  14390static void __exit bnx2x_cleanup(void)
  14391{
  14392	struct list_head *pos, *q;
  14393
  14394	pci_unregister_driver(&bnx2x_pci_driver);
  14395
  14396	destroy_workqueue(bnx2x_wq);
  14397	destroy_workqueue(bnx2x_iov_wq);
  14398
  14399	/* Free globally allocated resources */
  14400	list_for_each_safe(pos, q, &bnx2x_prev_list) {
  14401		struct bnx2x_prev_path_list *tmp =
  14402			list_entry(pos, struct bnx2x_prev_path_list, list);
  14403		list_del(pos);
  14404		kfree(tmp);
  14405	}
  14406}
  14407
  14408void bnx2x_notify_link_changed(struct bnx2x *bp)
  14409{
  14410	REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + BP_FUNC(bp)*sizeof(u32), 1);
  14411}
  14412
  14413module_init(bnx2x_init);
  14414module_exit(bnx2x_cleanup);
  14415
  14416/**
  14417 * bnx2x_set_iscsi_eth_mac_addr - set iSCSI MAC(s).
  14418 * @bp:		driver handle
  14419 *
  14420 * This function will wait until the ramrod completion returns.
  14421 * Return 0 if success, -ENODEV if ramrod doesn't return.
  14422 */
  14423static int bnx2x_set_iscsi_eth_mac_addr(struct bnx2x *bp)
  14424{
  14425	unsigned long ramrod_flags = 0;
  14426
  14427	__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
  14428	return bnx2x_set_mac_one(bp, bp->cnic_eth_dev.iscsi_mac,
  14429				 &bp->iscsi_l2_mac_obj, true,
  14430				 BNX2X_ISCSI_ETH_MAC, &ramrod_flags);
  14431}
  14432
  14433/* count denotes the number of new completions we have seen */
  14434static void bnx2x_cnic_sp_post(struct bnx2x *bp, int count)
  14435{
  14436	struct eth_spe *spe;
  14437	int cxt_index, cxt_offset;
  14438
  14439#ifdef BNX2X_STOP_ON_ERROR
  14440	if (unlikely(bp->panic))
  14441		return;
  14442#endif
  14443
  14444	spin_lock_bh(&bp->spq_lock);
  14445	BUG_ON(bp->cnic_spq_pending < count);
  14446	bp->cnic_spq_pending -= count;
  14447
  14448	for (; bp->cnic_kwq_pending; bp->cnic_kwq_pending--) {
  14449		u16 type =  (le16_to_cpu(bp->cnic_kwq_cons->hdr.type)
  14450				& SPE_HDR_CONN_TYPE) >>
  14451				SPE_HDR_CONN_TYPE_SHIFT;
  14452		u8 cmd = (le32_to_cpu(bp->cnic_kwq_cons->hdr.conn_and_cmd_data)
  14453				>> SPE_HDR_CMD_ID_SHIFT) & 0xff;
  14454
  14455		/* Set validation for iSCSI L2 client before sending SETUP
  14456		 *  ramrod
  14457		 */
  14458		if (type == ETH_CONNECTION_TYPE) {
  14459			if (cmd == RAMROD_CMD_ID_ETH_CLIENT_SETUP) {
  14460				cxt_index = BNX2X_ISCSI_ETH_CID(bp) /
  14461					ILT_PAGE_CIDS;
  14462				cxt_offset = BNX2X_ISCSI_ETH_CID(bp) -
  14463					(cxt_index * ILT_PAGE_CIDS);
  14464				bnx2x_set_ctx_validation(bp,
  14465					&bp->context[cxt_index].
  14466							 vcxt[cxt_offset].eth,
  14467					BNX2X_ISCSI_ETH_CID(bp));
  14468			}
  14469		}
  14470
  14471		/*
  14472		 * There may be not more than 8 L2, not more than 8 L5 SPEs
  14473		 * and in the air. We also check that number of outstanding
  14474		 * COMMON ramrods is not more than the EQ and SPQ can
  14475		 * accommodate.
  14476		 */
  14477		if (type == ETH_CONNECTION_TYPE) {
  14478			if (!atomic_read(&bp->cq_spq_left))
  14479				break;
  14480			else
  14481				atomic_dec(&bp->cq_spq_left);
  14482		} else if (type == NONE_CONNECTION_TYPE) {
  14483			if (!atomic_read(&bp->eq_spq_left))
  14484				break;
  14485			else
  14486				atomic_dec(&bp->eq_spq_left);
  14487		} else if ((type == ISCSI_CONNECTION_TYPE) ||
  14488			   (type == FCOE_CONNECTION_TYPE)) {
  14489			if (bp->cnic_spq_pending >=
  14490			    bp->cnic_eth_dev.max_kwqe_pending)
  14491				break;
  14492			else
  14493				bp->cnic_spq_pending++;
  14494		} else {
  14495			BNX2X_ERR("Unknown SPE type: %d\n", type);
  14496			bnx2x_panic();
  14497			break;
  14498		}
  14499
  14500		spe = bnx2x_sp_get_next(bp);
  14501		*spe = *bp->cnic_kwq_cons;
  14502
  14503		DP(BNX2X_MSG_SP, "pending on SPQ %d, on KWQ %d count %d\n",
  14504		   bp->cnic_spq_pending, bp->cnic_kwq_pending, count);
  14505
  14506		if (bp->cnic_kwq_cons == bp->cnic_kwq_last)
  14507			bp->cnic_kwq_cons = bp->cnic_kwq;
  14508		else
  14509			bp->cnic_kwq_cons++;
  14510	}
  14511	bnx2x_sp_prod_update(bp);
  14512	spin_unlock_bh(&bp->spq_lock);
  14513}
  14514
  14515static int bnx2x_cnic_sp_queue(struct net_device *dev,
  14516			       struct kwqe_16 *kwqes[], u32 count)
  14517{
  14518	struct bnx2x *bp = netdev_priv(dev);
  14519	int i;
  14520
  14521#ifdef BNX2X_STOP_ON_ERROR
  14522	if (unlikely(bp->panic)) {
  14523		BNX2X_ERR("Can't post to SP queue while panic\n");
  14524		return -EIO;
  14525	}
  14526#endif
  14527
  14528	if ((bp->recovery_state != BNX2X_RECOVERY_DONE) &&
  14529	    (bp->recovery_state != BNX2X_RECOVERY_NIC_LOADING)) {
  14530		BNX2X_ERR("Handling parity error recovery. Try again later\n");
  14531		return -EAGAIN;
  14532	}
  14533
  14534	spin_lock_bh(&bp->spq_lock);
  14535
  14536	for (i = 0; i < count; i++) {
  14537		struct eth_spe *spe = (struct eth_spe *)kwqes[i];
  14538
  14539		if (bp->cnic_kwq_pending == MAX_SP_DESC_CNT)
  14540			break;
  14541
  14542		*bp->cnic_kwq_prod = *spe;
  14543
  14544		bp->cnic_kwq_pending++;
  14545
  14546		DP(BNX2X_MSG_SP, "L5 SPQE %x %x %x:%x pos %d\n",
  14547		   spe->hdr.conn_and_cmd_data, spe->hdr.type,
  14548		   spe->data.update_data_addr.hi,
  14549		   spe->data.update_data_addr.lo,
  14550		   bp->cnic_kwq_pending);
  14551
  14552		if (bp->cnic_kwq_prod == bp->cnic_kwq_last)
  14553			bp->cnic_kwq_prod = bp->cnic_kwq;
  14554		else
  14555			bp->cnic_kwq_prod++;
  14556	}
  14557
  14558	spin_unlock_bh(&bp->spq_lock);
  14559
  14560	if (bp->cnic_spq_pending < bp->cnic_eth_dev.max_kwqe_pending)
  14561		bnx2x_cnic_sp_post(bp, 0);
  14562
  14563	return i;
  14564}
  14565
  14566static int bnx2x_cnic_ctl_send(struct bnx2x *bp, struct cnic_ctl_info *ctl)
  14567{
  14568	struct cnic_ops *c_ops;
  14569	int rc = 0;
  14570
  14571	mutex_lock(&bp->cnic_mutex);
  14572	c_ops = rcu_dereference_protected(bp->cnic_ops,
  14573					  lockdep_is_held(&bp->cnic_mutex));
  14574	if (c_ops)
  14575		rc = c_ops->cnic_ctl(bp->cnic_data, ctl);
  14576	mutex_unlock(&bp->cnic_mutex);
  14577
  14578	return rc;
  14579}
  14580
  14581static int bnx2x_cnic_ctl_send_bh(struct bnx2x *bp, struct cnic_ctl_info *ctl)
  14582{
  14583	struct cnic_ops *c_ops;
  14584	int rc = 0;
  14585
  14586	rcu_read_lock();
  14587	c_ops = rcu_dereference(bp->cnic_ops);
  14588	if (c_ops)
  14589		rc = c_ops->cnic_ctl(bp->cnic_data, ctl);
  14590	rcu_read_unlock();
  14591
  14592	return rc;
  14593}
  14594
  14595/*
  14596 * for commands that have no data
  14597 */
  14598int bnx2x_cnic_notify(struct bnx2x *bp, int cmd)
  14599{
  14600	struct cnic_ctl_info ctl = {0};
  14601
  14602	ctl.cmd = cmd;
  14603
  14604	return bnx2x_cnic_ctl_send(bp, &ctl);
  14605}
  14606
  14607static void bnx2x_cnic_cfc_comp(struct bnx2x *bp, int cid, u8 err)
  14608{
  14609	struct cnic_ctl_info ctl = {0};
  14610
  14611	/* first we tell CNIC and only then we count this as a completion */
  14612	ctl.cmd = CNIC_CTL_COMPLETION_CMD;
  14613	ctl.data.comp.cid = cid;
  14614	ctl.data.comp.error = err;
  14615
  14616	bnx2x_cnic_ctl_send_bh(bp, &ctl);
  14617	bnx2x_cnic_sp_post(bp, 0);
  14618}
  14619
  14620/* Called with netif_addr_lock_bh() taken.
  14621 * Sets an rx_mode config for an iSCSI ETH client.
  14622 * Doesn't block.
  14623 * Completion should be checked outside.
  14624 */
  14625static void bnx2x_set_iscsi_eth_rx_mode(struct bnx2x *bp, bool start)
  14626{
  14627	unsigned long accept_flags = 0, ramrod_flags = 0;
  14628	u8 cl_id = bnx2x_cnic_eth_cl_id(bp, BNX2X_ISCSI_ETH_CL_ID_IDX);
  14629	int sched_state = BNX2X_FILTER_ISCSI_ETH_STOP_SCHED;
  14630
  14631	if (start) {
  14632		/* Start accepting on iSCSI L2 ring. Accept all multicasts
  14633		 * because it's the only way for UIO Queue to accept
  14634		 * multicasts (in non-promiscuous mode only one Queue per
  14635		 * function will receive multicast packets (leading in our
  14636		 * case).
  14637		 */
  14638		__set_bit(BNX2X_ACCEPT_UNICAST, &accept_flags);
  14639		__set_bit(BNX2X_ACCEPT_ALL_MULTICAST, &accept_flags);
  14640		__set_bit(BNX2X_ACCEPT_BROADCAST, &accept_flags);
  14641		__set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept_flags);
  14642
  14643		/* Clear STOP_PENDING bit if START is requested */
  14644		clear_bit(BNX2X_FILTER_ISCSI_ETH_STOP_SCHED, &bp->sp_state);
  14645
  14646		sched_state = BNX2X_FILTER_ISCSI_ETH_START_SCHED;
  14647	} else
  14648		/* Clear START_PENDING bit if STOP is requested */
  14649		clear_bit(BNX2X_FILTER_ISCSI_ETH_START_SCHED, &bp->sp_state);
  14650
  14651	if (test_bit(BNX2X_FILTER_RX_MODE_PENDING, &bp->sp_state))
  14652		set_bit(sched_state, &bp->sp_state);
  14653	else {
  14654		__set_bit(RAMROD_RX, &ramrod_flags);
  14655		bnx2x_set_q_rx_mode(bp, cl_id, 0, accept_flags, 0,
  14656				    ramrod_flags);
  14657	}
  14658}
  14659
  14660static int bnx2x_drv_ctl(struct net_device *dev, struct drv_ctl_info *ctl)
  14661{
  14662	struct bnx2x *bp = netdev_priv(dev);
  14663	int rc = 0;
  14664
  14665	switch (ctl->cmd) {
  14666	case DRV_CTL_CTXTBL_WR_CMD: {
  14667		u32 index = ctl->data.io.offset;
  14668		dma_addr_t addr = ctl->data.io.dma_addr;
  14669
  14670		bnx2x_ilt_wr(bp, index, addr);
  14671		break;
  14672	}
  14673
  14674	case DRV_CTL_RET_L5_SPQ_CREDIT_CMD: {
  14675		int count = ctl->data.credit.credit_count;
  14676
  14677		bnx2x_cnic_sp_post(bp, count);
  14678		break;
  14679	}
  14680
  14681	/* rtnl_lock is held.  */
  14682	case DRV_CTL_START_L2_CMD: {
  14683		struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
  14684		unsigned long sp_bits = 0;
  14685
  14686		/* Configure the iSCSI classification object */
  14687		bnx2x_init_mac_obj(bp, &bp->iscsi_l2_mac_obj,
  14688				   cp->iscsi_l2_client_id,
  14689				   cp->iscsi_l2_cid, BP_FUNC(bp),
  14690				   bnx2x_sp(bp, mac_rdata),
  14691				   bnx2x_sp_mapping(bp, mac_rdata),
  14692				   BNX2X_FILTER_MAC_PENDING,
  14693				   &bp->sp_state, BNX2X_OBJ_TYPE_RX,
  14694				   &bp->macs_pool);
  14695
  14696		/* Set iSCSI MAC address */
  14697		rc = bnx2x_set_iscsi_eth_mac_addr(bp);
  14698		if (rc)
  14699			break;
  14700
  14701		barrier();
  14702
  14703		/* Start accepting on iSCSI L2 ring */
  14704
  14705		netif_addr_lock_bh(dev);
  14706		bnx2x_set_iscsi_eth_rx_mode(bp, true);
  14707		netif_addr_unlock_bh(dev);
  14708
  14709		/* bits to wait on */
  14710		__set_bit(BNX2X_FILTER_RX_MODE_PENDING, &sp_bits);
  14711		__set_bit(BNX2X_FILTER_ISCSI_ETH_START_SCHED, &sp_bits);
  14712
  14713		if (!bnx2x_wait_sp_comp(bp, sp_bits))
  14714			BNX2X_ERR("rx_mode completion timed out!\n");
  14715
  14716		break;
  14717	}
  14718
  14719	/* rtnl_lock is held.  */
  14720	case DRV_CTL_STOP_L2_CMD: {
  14721		unsigned long sp_bits = 0;
  14722
  14723		/* Stop accepting on iSCSI L2 ring */
  14724		netif_addr_lock_bh(dev);
  14725		bnx2x_set_iscsi_eth_rx_mode(bp, false);
  14726		netif_addr_unlock_bh(dev);
  14727
  14728		/* bits to wait on */
  14729		__set_bit(BNX2X_FILTER_RX_MODE_PENDING, &sp_bits);
  14730		__set_bit(BNX2X_FILTER_ISCSI_ETH_STOP_SCHED, &sp_bits);
  14731
  14732		if (!bnx2x_wait_sp_comp(bp, sp_bits))
  14733			BNX2X_ERR("rx_mode completion timed out!\n");
  14734
  14735		barrier();
  14736
  14737		/* Unset iSCSI L2 MAC */
  14738		rc = bnx2x_del_all_macs(bp, &bp->iscsi_l2_mac_obj,
  14739					BNX2X_ISCSI_ETH_MAC, true);
  14740		break;
  14741	}
  14742	case DRV_CTL_RET_L2_SPQ_CREDIT_CMD: {
  14743		int count = ctl->data.credit.credit_count;
  14744
  14745		smp_mb__before_atomic();
  14746		atomic_add(count, &bp->cq_spq_left);
  14747		smp_mb__after_atomic();
  14748		break;
  14749	}
  14750	case DRV_CTL_ULP_REGISTER_CMD: {
  14751		int ulp_type = ctl->data.register_data.ulp_type;
  14752
  14753		if (CHIP_IS_E3(bp)) {
  14754			int idx = BP_FW_MB_IDX(bp);
  14755			u32 cap = SHMEM2_RD(bp, drv_capabilities_flag[idx]);
  14756			int path = BP_PATH(bp);
  14757			int port = BP_PORT(bp);
  14758			int i;
  14759			u32 scratch_offset;
  14760			u32 *host_addr;
  14761
  14762			/* first write capability to shmem2 */
  14763			if (ulp_type == CNIC_ULP_ISCSI)
  14764				cap |= DRV_FLAGS_CAPABILITIES_LOADED_ISCSI;
  14765			else if (ulp_type == CNIC_ULP_FCOE)
  14766				cap |= DRV_FLAGS_CAPABILITIES_LOADED_FCOE;
  14767			SHMEM2_WR(bp, drv_capabilities_flag[idx], cap);
  14768
  14769			if ((ulp_type != CNIC_ULP_FCOE) ||
  14770			    (!SHMEM2_HAS(bp, ncsi_oem_data_addr)) ||
  14771			    (!(bp->flags &  BC_SUPPORTS_FCOE_FEATURES)))
  14772				break;
  14773
  14774			/* if reached here - should write fcoe capabilities */
  14775			scratch_offset = SHMEM2_RD(bp, ncsi_oem_data_addr);
  14776			if (!scratch_offset)
  14777				break;
  14778			scratch_offset += offsetof(struct glob_ncsi_oem_data,
  14779						   fcoe_features[path][port]);
  14780			host_addr = (u32 *) &(ctl->data.register_data.
  14781					      fcoe_features);
  14782			for (i = 0; i < sizeof(struct fcoe_capabilities);
  14783			     i += 4)
  14784				REG_WR(bp, scratch_offset + i,
  14785				       *(host_addr + i/4));
  14786		}
  14787		bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_GET_DRV_VERSION, 0);
  14788		break;
  14789	}
  14790
  14791	case DRV_CTL_ULP_UNREGISTER_CMD: {
  14792		int ulp_type = ctl->data.ulp_type;
  14793
  14794		if (CHIP_IS_E3(bp)) {
  14795			int idx = BP_FW_MB_IDX(bp);
  14796			u32 cap;
  14797
  14798			cap = SHMEM2_RD(bp, drv_capabilities_flag[idx]);
  14799			if (ulp_type == CNIC_ULP_ISCSI)
  14800				cap &= ~DRV_FLAGS_CAPABILITIES_LOADED_ISCSI;
  14801			else if (ulp_type == CNIC_ULP_FCOE)
  14802				cap &= ~DRV_FLAGS_CAPABILITIES_LOADED_FCOE;
  14803			SHMEM2_WR(bp, drv_capabilities_flag[idx], cap);
  14804		}
  14805		bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_GET_DRV_VERSION, 0);
  14806		break;
  14807	}
  14808
  14809	default:
  14810		BNX2X_ERR("unknown command %x\n", ctl->cmd);
  14811		rc = -EINVAL;
  14812	}
  14813
  14814	/* For storage-only interfaces, change driver state */
  14815	if (IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp)) {
  14816		switch (ctl->drv_state) {
  14817		case DRV_NOP:
  14818			break;
  14819		case DRV_ACTIVE:
  14820			bnx2x_set_os_driver_state(bp,
  14821						  OS_DRIVER_STATE_ACTIVE);
  14822			break;
  14823		case DRV_INACTIVE:
  14824			bnx2x_set_os_driver_state(bp,
  14825						  OS_DRIVER_STATE_DISABLED);
  14826			break;
  14827		case DRV_UNLOADED:
  14828			bnx2x_set_os_driver_state(bp,
  14829						  OS_DRIVER_STATE_NOT_LOADED);
  14830			break;
  14831		default:
  14832		BNX2X_ERR("Unknown cnic driver state: %d\n", ctl->drv_state);
  14833		}
  14834	}
  14835
  14836	return rc;
  14837}
  14838
  14839static int bnx2x_get_fc_npiv(struct net_device *dev,
  14840			     struct cnic_fc_npiv_tbl *cnic_tbl)
  14841{
  14842	struct bnx2x *bp = netdev_priv(dev);
  14843	struct bdn_fc_npiv_tbl *tbl = NULL;
  14844	u32 offset, entries;
  14845	int rc = -EINVAL;
  14846	int i;
  14847
  14848	if (!SHMEM2_HAS(bp, fc_npiv_nvram_tbl_addr[0]))
  14849		goto out;
  14850
  14851	DP(BNX2X_MSG_MCP, "About to read the FC-NPIV table\n");
  14852
  14853	tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);
  14854	if (!tbl) {
  14855		BNX2X_ERR("Failed to allocate fc_npiv table\n");
  14856		goto out;
  14857	}
  14858
  14859	offset = SHMEM2_RD(bp, fc_npiv_nvram_tbl_addr[BP_PORT(bp)]);
  14860	if (!offset) {
  14861		DP(BNX2X_MSG_MCP, "No FC-NPIV in NVRAM\n");
  14862		goto out;
  14863	}
  14864	DP(BNX2X_MSG_MCP, "Offset of FC-NPIV in NVRAM: %08x\n", offset);
  14865
  14866	/* Read the table contents from nvram */
  14867	if (bnx2x_nvram_read(bp, offset, (u8 *)tbl, sizeof(*tbl))) {
  14868		BNX2X_ERR("Failed to read FC-NPIV table\n");
  14869		goto out;
  14870	}
  14871
  14872	/* Since bnx2x_nvram_read() returns data in be32, we need to convert
  14873	 * the number of entries back to cpu endianness.
  14874	 */
  14875	entries = tbl->fc_npiv_cfg.num_of_npiv;
  14876	entries = (__force u32)be32_to_cpu((__force __be32)entries);
  14877	tbl->fc_npiv_cfg.num_of_npiv = entries;
  14878
  14879	if (!tbl->fc_npiv_cfg.num_of_npiv) {
  14880		DP(BNX2X_MSG_MCP,
  14881		   "No FC-NPIV table [valid, simply not present]\n");
  14882		goto out;
  14883	} else if (tbl->fc_npiv_cfg.num_of_npiv > MAX_NUMBER_NPIV) {
  14884		BNX2X_ERR("FC-NPIV table with bad length 0x%08x\n",
  14885			  tbl->fc_npiv_cfg.num_of_npiv);
  14886		goto out;
  14887	} else {
  14888		DP(BNX2X_MSG_MCP, "Read 0x%08x entries from NVRAM\n",
  14889		   tbl->fc_npiv_cfg.num_of_npiv);
  14890	}
  14891
  14892	/* Copy the data into cnic-provided struct */
  14893	cnic_tbl->count = tbl->fc_npiv_cfg.num_of_npiv;
  14894	for (i = 0; i < cnic_tbl->count; i++) {
  14895		memcpy(cnic_tbl->wwpn[i], tbl->settings[i].npiv_wwpn, 8);
  14896		memcpy(cnic_tbl->wwnn[i], tbl->settings[i].npiv_wwnn, 8);
  14897	}
  14898
  14899	rc = 0;
  14900out:
  14901	kfree(tbl);
  14902	return rc;
  14903}
  14904
  14905void bnx2x_setup_cnic_irq_info(struct bnx2x *bp)
  14906{
  14907	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
  14908
  14909	if (bp->flags & USING_MSIX_FLAG) {
  14910		cp->drv_state |= CNIC_DRV_STATE_USING_MSIX;
  14911		cp->irq_arr[0].irq_flags |= CNIC_IRQ_FL_MSIX;
  14912		cp->irq_arr[0].vector = bp->msix_table[1].vector;
  14913	} else {
  14914		cp->drv_state &= ~CNIC_DRV_STATE_USING_MSIX;
  14915		cp->irq_arr[0].irq_flags &= ~CNIC_IRQ_FL_MSIX;
  14916	}
  14917	if (!CHIP_IS_E1x(bp))
  14918		cp->irq_arr[0].status_blk = (void *)bp->cnic_sb.e2_sb;
  14919	else
  14920		cp->irq_arr[0].status_blk = (void *)bp->cnic_sb.e1x_sb;
  14921
  14922	cp->irq_arr[0].status_blk_num =  bnx2x_cnic_fw_sb_id(bp);
  14923	cp->irq_arr[0].status_blk_num2 = bnx2x_cnic_igu_sb_id(bp);
  14924	cp->irq_arr[1].status_blk = bp->def_status_blk;
  14925	cp->irq_arr[1].status_blk_num = DEF_SB_ID;
  14926	cp->irq_arr[1].status_blk_num2 = DEF_SB_IGU_ID;
  14927
  14928	cp->num_irq = 2;
  14929}
  14930
  14931void bnx2x_setup_cnic_info(struct bnx2x *bp)
  14932{
  14933	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
  14934
  14935	cp->ctx_tbl_offset = FUNC_ILT_BASE(BP_FUNC(bp)) +
  14936			     bnx2x_cid_ilt_lines(bp);
  14937	cp->starting_cid = bnx2x_cid_ilt_lines(bp) * ILT_PAGE_CIDS;
  14938	cp->fcoe_init_cid = BNX2X_FCOE_ETH_CID(bp);
  14939	cp->iscsi_l2_cid = BNX2X_ISCSI_ETH_CID(bp);
  14940
  14941	DP(NETIF_MSG_IFUP, "BNX2X_1st_NON_L2_ETH_CID(bp) %x, cp->starting_cid %x, cp->fcoe_init_cid %x, cp->iscsi_l2_cid %x\n",
  14942	   BNX2X_1st_NON_L2_ETH_CID(bp), cp->starting_cid, cp->fcoe_init_cid,
  14943	   cp->iscsi_l2_cid);
  14944
  14945	if (NO_ISCSI_OOO(bp))
  14946		cp->drv_state |= CNIC_DRV_STATE_NO_ISCSI_OOO;
  14947}
  14948
  14949static int bnx2x_register_cnic(struct net_device *dev, struct cnic_ops *ops,
  14950			       void *data)
  14951{
  14952	struct bnx2x *bp = netdev_priv(dev);
  14953	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
  14954	int rc;
  14955
  14956	DP(NETIF_MSG_IFUP, "Register_cnic called\n");
  14957
  14958	if (ops == NULL) {
  14959		BNX2X_ERR("NULL ops received\n");
  14960		return -EINVAL;
  14961	}
  14962
  14963	if (!CNIC_SUPPORT(bp)) {
  14964		BNX2X_ERR("Can't register CNIC when not supported\n");
  14965		return -EOPNOTSUPP;
  14966	}
  14967
  14968	if (!CNIC_LOADED(bp)) {
  14969		rc = bnx2x_load_cnic(bp);
  14970		if (rc) {
  14971			BNX2X_ERR("CNIC-related load failed\n");
  14972			return rc;
  14973		}
  14974	}
  14975
  14976	bp->cnic_enabled = true;
  14977
  14978	bp->cnic_kwq = kzalloc(PAGE_SIZE, GFP_KERNEL);
  14979	if (!bp->cnic_kwq)
  14980		return -ENOMEM;
  14981
  14982	bp->cnic_kwq_cons = bp->cnic_kwq;
  14983	bp->cnic_kwq_prod = bp->cnic_kwq;
  14984	bp->cnic_kwq_last = bp->cnic_kwq + MAX_SP_DESC_CNT;
  14985
  14986	bp->cnic_spq_pending = 0;
  14987	bp->cnic_kwq_pending = 0;
  14988
  14989	bp->cnic_data = data;
  14990
  14991	cp->num_irq = 0;
  14992	cp->drv_state |= CNIC_DRV_STATE_REGD;
  14993	cp->iro_arr = bp->iro_arr;
  14994
  14995	bnx2x_setup_cnic_irq_info(bp);
  14996
  14997	rcu_assign_pointer(bp->cnic_ops, ops);
  14998
  14999	/* Schedule driver to read CNIC driver versions */
  15000	bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_GET_DRV_VERSION, 0);
  15001
  15002	return 0;
  15003}
  15004
  15005static int bnx2x_unregister_cnic(struct net_device *dev)
  15006{
  15007	struct bnx2x *bp = netdev_priv(dev);
  15008	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
  15009
  15010	mutex_lock(&bp->cnic_mutex);
  15011	cp->drv_state = 0;
  15012	RCU_INIT_POINTER(bp->cnic_ops, NULL);
  15013	mutex_unlock(&bp->cnic_mutex);
  15014	synchronize_rcu();
  15015	bp->cnic_enabled = false;
  15016	kfree(bp->cnic_kwq);
  15017	bp->cnic_kwq = NULL;
  15018
  15019	return 0;
  15020}
  15021
  15022static struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev)
  15023{
  15024	struct bnx2x *bp = netdev_priv(dev);
  15025	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
  15026
  15027	/* If both iSCSI and FCoE are disabled - return NULL in
  15028	 * order to indicate CNIC that it should not try to work
  15029	 * with this device.
  15030	 */
  15031	if (NO_ISCSI(bp) && NO_FCOE(bp))
  15032		return NULL;
  15033
  15034	cp->drv_owner = THIS_MODULE;
  15035	cp->chip_id = CHIP_ID(bp);
  15036	cp->pdev = bp->pdev;
  15037	cp->io_base = bp->regview;
  15038	cp->io_base2 = bp->doorbells;
  15039	cp->max_kwqe_pending = 8;
  15040	cp->ctx_blk_size = CDU_ILT_PAGE_SZ;
  15041	cp->ctx_tbl_offset = FUNC_ILT_BASE(BP_FUNC(bp)) +
  15042			     bnx2x_cid_ilt_lines(bp);
  15043	cp->ctx_tbl_len = CNIC_ILT_LINES;
  15044	cp->starting_cid = bnx2x_cid_ilt_lines(bp) * ILT_PAGE_CIDS;
  15045	cp->drv_submit_kwqes_16 = bnx2x_cnic_sp_queue;
  15046	cp->drv_ctl = bnx2x_drv_ctl;
  15047	cp->drv_get_fc_npiv_tbl = bnx2x_get_fc_npiv;
  15048	cp->drv_register_cnic = bnx2x_register_cnic;
  15049	cp->drv_unregister_cnic = bnx2x_unregister_cnic;
  15050	cp->fcoe_init_cid = BNX2X_FCOE_ETH_CID(bp);
  15051	cp->iscsi_l2_client_id =
  15052		bnx2x_cnic_eth_cl_id(bp, BNX2X_ISCSI_ETH_CL_ID_IDX);
  15053	cp->iscsi_l2_cid = BNX2X_ISCSI_ETH_CID(bp);
  15054
  15055	if (NO_ISCSI_OOO(bp))
  15056		cp->drv_state |= CNIC_DRV_STATE_NO_ISCSI_OOO;
  15057
  15058	if (NO_ISCSI(bp))
  15059		cp->drv_state |= CNIC_DRV_STATE_NO_ISCSI;
  15060
  15061	if (NO_FCOE(bp))
  15062		cp->drv_state |= CNIC_DRV_STATE_NO_FCOE;
  15063
  15064	BNX2X_DEV_INFO(
  15065		"page_size %d, tbl_offset %d, tbl_lines %d, starting cid %d\n",
  15066	   cp->ctx_blk_size,
  15067	   cp->ctx_tbl_offset,
  15068	   cp->ctx_tbl_len,
  15069	   cp->starting_cid);
  15070	return cp;
  15071}
  15072
  15073static u32 bnx2x_rx_ustorm_prods_offset(struct bnx2x_fastpath *fp)
  15074{
  15075	struct bnx2x *bp = fp->bp;
  15076	u32 offset = BAR_USTRORM_INTMEM;
  15077
  15078	if (IS_VF(bp))
  15079		return bnx2x_vf_ustorm_prods_offset(bp, fp);
  15080	else if (!CHIP_IS_E1x(bp))
  15081		offset += USTORM_RX_PRODS_E2_OFFSET(fp->cl_qzone_id);
  15082	else
  15083		offset += USTORM_RX_PRODS_E1X_OFFSET(BP_PORT(bp), fp->cl_id);
  15084
  15085	return offset;
  15086}
  15087
  15088/* called only on E1H or E2.
  15089 * When pretending to be PF, the pretend value is the function number 0...7
  15090 * When pretending to be VF, the pretend val is the PF-num:VF-valid:ABS-VFID
  15091 * combination
  15092 */
  15093int bnx2x_pretend_func(struct bnx2x *bp, u16 pretend_func_val)
  15094{
  15095	u32 pretend_reg;
  15096
  15097	if (CHIP_IS_E1H(bp) && pretend_func_val >= E1H_FUNC_MAX)
  15098		return -1;
  15099
  15100	/* get my own pretend register */
  15101	pretend_reg = bnx2x_get_pretend_reg(bp);
  15102	REG_WR(bp, pretend_reg, pretend_func_val);
  15103	REG_RD(bp, pretend_reg);
  15104	return 0;
  15105}
  15106
  15107static void bnx2x_ptp_task(struct work_struct *work)
  15108{
  15109	struct bnx2x *bp = container_of(work, struct bnx2x, ptp_task);
  15110	int port = BP_PORT(bp);
  15111	u32 val_seq;
  15112	u64 timestamp, ns;
  15113	struct skb_shared_hwtstamps shhwtstamps;
  15114	bool bail = true;
  15115	int i;
  15116
  15117	/* FW may take a while to complete timestamping; try a bit and if it's
  15118	 * still not complete, may indicate an error state - bail out then.
  15119	 */
  15120	for (i = 0; i < 10; i++) {
  15121		/* Read Tx timestamp registers */
  15122		val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
  15123				 NIG_REG_P0_TLLH_PTP_BUF_SEQID);
  15124		if (val_seq & 0x10000) {
  15125			bail = false;
  15126			break;
  15127		}
  15128		msleep(1 << i);
  15129	}
  15130
  15131	if (!bail) {
  15132		/* There is a valid timestamp value */
  15133		timestamp = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_TS_MSB :
  15134				   NIG_REG_P0_TLLH_PTP_BUF_TS_MSB);
  15135		timestamp <<= 32;
  15136		timestamp |= REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_TS_LSB :
  15137				    NIG_REG_P0_TLLH_PTP_BUF_TS_LSB);
  15138		/* Reset timestamp register to allow new timestamp */
  15139		REG_WR(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
  15140		       NIG_REG_P0_TLLH_PTP_BUF_SEQID, 0x10000);
  15141		ns = timecounter_cyc2time(&bp->timecounter, timestamp);
  15142
  15143		memset(&shhwtstamps, 0, sizeof(shhwtstamps));
  15144		shhwtstamps.hwtstamp = ns_to_ktime(ns);
  15145		skb_tstamp_tx(bp->ptp_tx_skb, &shhwtstamps);
  15146
  15147		DP(BNX2X_MSG_PTP, "Tx timestamp, timestamp cycles = %llu, ns = %llu\n",
  15148		   timestamp, ns);
  15149	} else {
  15150		DP(BNX2X_MSG_PTP,
  15151		   "Tx timestamp is not recorded (register read=%u)\n",
  15152		   val_seq);
  15153		bp->eth_stats.ptp_skip_tx_ts++;
  15154	}
  15155
  15156	dev_kfree_skb_any(bp->ptp_tx_skb);
  15157	bp->ptp_tx_skb = NULL;
  15158}
  15159
  15160void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb)
  15161{
  15162	int port = BP_PORT(bp);
  15163	u64 timestamp, ns;
  15164
  15165	timestamp = REG_RD(bp, port ? NIG_REG_P1_LLH_PTP_HOST_BUF_TS_MSB :
  15166			    NIG_REG_P0_LLH_PTP_HOST_BUF_TS_MSB);
  15167	timestamp <<= 32;
  15168	timestamp |= REG_RD(bp, port ? NIG_REG_P1_LLH_PTP_HOST_BUF_TS_LSB :
  15169			    NIG_REG_P0_LLH_PTP_HOST_BUF_TS_LSB);
  15170
  15171	/* Reset timestamp register to allow new timestamp */
  15172	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_HOST_BUF_SEQID :
  15173	       NIG_REG_P0_LLH_PTP_HOST_BUF_SEQID, 0x10000);
  15174
  15175	ns = timecounter_cyc2time(&bp->timecounter, timestamp);
  15176
  15177	skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(ns);
  15178
  15179	DP(BNX2X_MSG_PTP, "Rx timestamp, timestamp cycles = %llu, ns = %llu\n",
  15180	   timestamp, ns);
  15181}
  15182
  15183/* Read the PHC */
  15184static u64 bnx2x_cyclecounter_read(const struct cyclecounter *cc)
  15185{
  15186	struct bnx2x *bp = container_of(cc, struct bnx2x, cyclecounter);
  15187	int port = BP_PORT(bp);
  15188	u32 wb_data[2];
  15189	u64 phc_cycles;
  15190
  15191	REG_RD_DMAE(bp, port ? NIG_REG_TIMESYNC_GEN_REG + tsgen_synctime_t1 :
  15192		    NIG_REG_TIMESYNC_GEN_REG + tsgen_synctime_t0, wb_data, 2);
  15193	phc_cycles = wb_data[1];
  15194	phc_cycles = (phc_cycles << 32) + wb_data[0];
  15195
  15196	DP(BNX2X_MSG_PTP, "PHC read cycles = %llu\n", phc_cycles);
  15197
  15198	return phc_cycles;
  15199}
  15200
  15201static void bnx2x_init_cyclecounter(struct bnx2x *bp)
  15202{
  15203	memset(&bp->cyclecounter, 0, sizeof(bp->cyclecounter));
  15204	bp->cyclecounter.read = bnx2x_cyclecounter_read;
  15205	bp->cyclecounter.mask = CYCLECOUNTER_MASK(64);
  15206	bp->cyclecounter.shift = 0;
  15207	bp->cyclecounter.mult = 1;
  15208}
  15209
  15210static int bnx2x_send_reset_timesync_ramrod(struct bnx2x *bp)
  15211{
  15212	struct bnx2x_func_state_params func_params = {NULL};
  15213	struct bnx2x_func_set_timesync_params *set_timesync_params =
  15214		&func_params.params.set_timesync;
  15215
  15216	/* Prepare parameters for function state transitions */
  15217	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
  15218	__set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
  15219
  15220	func_params.f_obj = &bp->func_obj;
  15221	func_params.cmd = BNX2X_F_CMD_SET_TIMESYNC;
  15222
  15223	/* Function parameters */
  15224	set_timesync_params->drift_adjust_cmd = TS_DRIFT_ADJUST_RESET;
  15225	set_timesync_params->offset_cmd = TS_OFFSET_KEEP;
  15226
  15227	return bnx2x_func_state_change(bp, &func_params);
  15228}
  15229
  15230static int bnx2x_enable_ptp_packets(struct bnx2x *bp)
  15231{
  15232	struct bnx2x_queue_state_params q_params;
  15233	int rc, i;
  15234
  15235	/* send queue update ramrod to enable PTP packets */
  15236	memset(&q_params, 0, sizeof(q_params));
  15237	__set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
  15238	q_params.cmd = BNX2X_Q_CMD_UPDATE;
  15239	__set_bit(BNX2X_Q_UPDATE_PTP_PKTS_CHNG,
  15240		  &q_params.params.update.update_flags);
  15241	__set_bit(BNX2X_Q_UPDATE_PTP_PKTS,
  15242		  &q_params.params.update.update_flags);
  15243
  15244	/* send the ramrod on all the queues of the PF */
  15245	for_each_eth_queue(bp, i) {
  15246		struct bnx2x_fastpath *fp = &bp->fp[i];
  15247
  15248		/* Set the appropriate Queue object */
  15249		q_params.q_obj = &bnx2x_sp_obj(bp, fp).q_obj;
  15250
  15251		/* Update the Queue state */
  15252		rc = bnx2x_queue_state_change(bp, &q_params);
  15253		if (rc) {
  15254			BNX2X_ERR("Failed to enable PTP packets\n");
  15255			return rc;
  15256		}
  15257	}
  15258
  15259	return 0;
  15260}
  15261
  15262#define BNX2X_P2P_DETECT_PARAM_MASK 0x5F5
  15263#define BNX2X_P2P_DETECT_RULE_MASK 0x3DBB
  15264#define BNX2X_PTP_TX_ON_PARAM_MASK (BNX2X_P2P_DETECT_PARAM_MASK & 0x6AA)
  15265#define BNX2X_PTP_TX_ON_RULE_MASK (BNX2X_P2P_DETECT_RULE_MASK & 0x3EEE)
  15266#define BNX2X_PTP_V1_L4_PARAM_MASK (BNX2X_P2P_DETECT_PARAM_MASK & 0x7EE)
  15267#define BNX2X_PTP_V1_L4_RULE_MASK (BNX2X_P2P_DETECT_RULE_MASK & 0x3FFE)
  15268#define BNX2X_PTP_V2_L4_PARAM_MASK (BNX2X_P2P_DETECT_PARAM_MASK & 0x7EA)
  15269#define BNX2X_PTP_V2_L4_RULE_MASK (BNX2X_P2P_DETECT_RULE_MASK & 0x3FEE)
  15270#define BNX2X_PTP_V2_L2_PARAM_MASK (BNX2X_P2P_DETECT_PARAM_MASK & 0x6BF)
  15271#define BNX2X_PTP_V2_L2_RULE_MASK (BNX2X_P2P_DETECT_RULE_MASK & 0x3EFF)
  15272#define BNX2X_PTP_V2_PARAM_MASK (BNX2X_P2P_DETECT_PARAM_MASK & 0x6AA)
  15273#define BNX2X_PTP_V2_RULE_MASK (BNX2X_P2P_DETECT_RULE_MASK & 0x3EEE)
  15274
  15275int bnx2x_configure_ptp_filters(struct bnx2x *bp)
  15276{
  15277	int port = BP_PORT(bp);
  15278	u32 param, rule;
  15279	int rc;
  15280
  15281	if (!bp->hwtstamp_ioctl_called)
  15282		return 0;
  15283
  15284	param = port ? NIG_REG_P1_TLLH_PTP_PARAM_MASK :
  15285		NIG_REG_P0_TLLH_PTP_PARAM_MASK;
  15286	rule = port ? NIG_REG_P1_TLLH_PTP_RULE_MASK :
  15287		NIG_REG_P0_TLLH_PTP_RULE_MASK;
  15288	switch (bp->tx_type) {
  15289	case HWTSTAMP_TX_ON:
  15290		bp->flags |= TX_TIMESTAMPING_EN;
  15291		REG_WR(bp, param, BNX2X_PTP_TX_ON_PARAM_MASK);
  15292		REG_WR(bp, rule, BNX2X_PTP_TX_ON_RULE_MASK);
  15293		break;
  15294	case HWTSTAMP_TX_ONESTEP_SYNC:
  15295	case HWTSTAMP_TX_ONESTEP_P2P:
  15296		BNX2X_ERR("One-step timestamping is not supported\n");
  15297		return -ERANGE;
  15298	}
  15299
  15300	param = port ? NIG_REG_P1_LLH_PTP_PARAM_MASK :
  15301		NIG_REG_P0_LLH_PTP_PARAM_MASK;
  15302	rule = port ? NIG_REG_P1_LLH_PTP_RULE_MASK :
  15303		NIG_REG_P0_LLH_PTP_RULE_MASK;
  15304	switch (bp->rx_filter) {
  15305	case HWTSTAMP_FILTER_NONE:
  15306		break;
  15307	case HWTSTAMP_FILTER_ALL:
  15308	case HWTSTAMP_FILTER_SOME:
  15309	case HWTSTAMP_FILTER_NTP_ALL:
  15310		bp->rx_filter = HWTSTAMP_FILTER_NONE;
  15311		break;
  15312	case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
  15313	case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
  15314	case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
  15315		bp->rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
  15316		/* Initialize PTP detection for UDP/IPv4 events */
  15317		REG_WR(bp, param, BNX2X_PTP_V1_L4_PARAM_MASK);
  15318		REG_WR(bp, rule, BNX2X_PTP_V1_L4_RULE_MASK);
  15319		break;
  15320	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
  15321	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
  15322	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
  15323		bp->rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
  15324		/* Initialize PTP detection for UDP/IPv4 or UDP/IPv6 events */
  15325		REG_WR(bp, param, BNX2X_PTP_V2_L4_PARAM_MASK);
  15326		REG_WR(bp, rule, BNX2X_PTP_V2_L4_RULE_MASK);
  15327		break;
  15328	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
  15329	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
  15330	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
  15331		bp->rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
  15332		/* Initialize PTP detection L2 events */
  15333		REG_WR(bp, param, BNX2X_PTP_V2_L2_PARAM_MASK);
  15334		REG_WR(bp, rule, BNX2X_PTP_V2_L2_RULE_MASK);
  15335
  15336		break;
  15337	case HWTSTAMP_FILTER_PTP_V2_EVENT:
  15338	case HWTSTAMP_FILTER_PTP_V2_SYNC:
  15339	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
  15340		bp->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
  15341		/* Initialize PTP detection L2, UDP/IPv4 or UDP/IPv6 events */
  15342		REG_WR(bp, param, BNX2X_PTP_V2_PARAM_MASK);
  15343		REG_WR(bp, rule, BNX2X_PTP_V2_RULE_MASK);
  15344		break;
  15345	}
  15346
  15347	/* Indicate to FW that this PF expects recorded PTP packets */
  15348	rc = bnx2x_enable_ptp_packets(bp);
  15349	if (rc)
  15350		return rc;
  15351
  15352	/* Enable sending PTP packets to host */
  15353	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_TO_HOST :
  15354	       NIG_REG_P0_LLH_PTP_TO_HOST, 0x1);
  15355
  15356	return 0;
  15357}
  15358
  15359static int bnx2x_hwtstamp_ioctl(struct bnx2x *bp, struct ifreq *ifr)
  15360{
  15361	struct hwtstamp_config config;
  15362	int rc;
  15363
  15364	DP(BNX2X_MSG_PTP, "HWTSTAMP IOCTL called\n");
  15365
  15366	if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
  15367		return -EFAULT;
  15368
  15369	DP(BNX2X_MSG_PTP, "Requested tx_type: %d, requested rx_filters = %d\n",
  15370	   config.tx_type, config.rx_filter);
  15371
  15372	bp->hwtstamp_ioctl_called = true;
  15373	bp->tx_type = config.tx_type;
  15374	bp->rx_filter = config.rx_filter;
  15375
  15376	rc = bnx2x_configure_ptp_filters(bp);
  15377	if (rc)
  15378		return rc;
  15379
  15380	config.rx_filter = bp->rx_filter;
  15381
  15382	return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
  15383		-EFAULT : 0;
  15384}
  15385
  15386/* Configures HW for PTP */
  15387static int bnx2x_configure_ptp(struct bnx2x *bp)
  15388{
  15389	int rc, port = BP_PORT(bp);
  15390	u32 wb_data[2];
  15391
  15392	/* Reset PTP event detection rules - will be configured in the IOCTL */
  15393	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_PARAM_MASK :
  15394	       NIG_REG_P0_LLH_PTP_PARAM_MASK, 0x7FF);
  15395	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_RULE_MASK :
  15396	       NIG_REG_P0_LLH_PTP_RULE_MASK, 0x3FFF);
  15397	REG_WR(bp, port ? NIG_REG_P1_TLLH_PTP_PARAM_MASK :
  15398	       NIG_REG_P0_TLLH_PTP_PARAM_MASK, 0x7FF);
  15399	REG_WR(bp, port ? NIG_REG_P1_TLLH_PTP_RULE_MASK :
  15400	       NIG_REG_P0_TLLH_PTP_RULE_MASK, 0x3FFF);
  15401
  15402	/* Disable PTP packets to host - will be configured in the IOCTL*/
  15403	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_TO_HOST :
  15404	       NIG_REG_P0_LLH_PTP_TO_HOST, 0x0);
  15405
  15406	/* Enable the PTP feature */
  15407	REG_WR(bp, port ? NIG_REG_P1_PTP_EN :
  15408	       NIG_REG_P0_PTP_EN, 0x3F);
  15409
  15410	/* Enable the free-running counter */
  15411	wb_data[0] = 0;
  15412	wb_data[1] = 0;
  15413	REG_WR_DMAE(bp, NIG_REG_TIMESYNC_GEN_REG + tsgen_ctrl, wb_data, 2);
  15414
  15415	/* Reset drift register (offset register is not reset) */
  15416	rc = bnx2x_send_reset_timesync_ramrod(bp);
  15417	if (rc) {
  15418		BNX2X_ERR("Failed to reset PHC drift register\n");
  15419		return -EFAULT;
  15420	}
  15421
  15422	/* Reset possibly old timestamps */
  15423	REG_WR(bp, port ? NIG_REG_P1_LLH_PTP_HOST_BUF_SEQID :
  15424	       NIG_REG_P0_LLH_PTP_HOST_BUF_SEQID, 0x10000);
  15425	REG_WR(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
  15426	       NIG_REG_P0_TLLH_PTP_BUF_SEQID, 0x10000);
  15427
  15428	return 0;
  15429}
  15430
  15431/* Called during load, to initialize PTP-related stuff */
  15432void bnx2x_init_ptp(struct bnx2x *bp)
  15433{
  15434	int rc;
  15435
  15436	/* Configure PTP in HW */
  15437	rc = bnx2x_configure_ptp(bp);
  15438	if (rc) {
  15439		BNX2X_ERR("Stopping PTP initialization\n");
  15440		return;
  15441	}
  15442
  15443	/* Init work queue for Tx timestamping */
  15444	INIT_WORK(&bp->ptp_task, bnx2x_ptp_task);
  15445
  15446	/* Init cyclecounter and timecounter. This is done only in the first
  15447	 * load. If done in every load, PTP application will fail when doing
  15448	 * unload / load (e.g. MTU change) while it is running.
  15449	 */
  15450	if (!bp->timecounter_init_done) {
  15451		bnx2x_init_cyclecounter(bp);
  15452		timecounter_init(&bp->timecounter, &bp->cyclecounter,
  15453				 ktime_to_ns(ktime_get_real()));
  15454		bp->timecounter_init_done = true;
  15455	}
  15456
  15457	DP(BNX2X_MSG_PTP, "PTP initialization ended successfully\n");
  15458}