aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/arc/emac_main.c4
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c8
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x.h7
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c94
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c6
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c15
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h7
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c254
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c28
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c2
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4.h21
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c59
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h9
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/l2t.c35
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/l2t.h3
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/sge.c2
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c103
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_regs.h73
-rw-r--r--drivers/net/ethernet/emulex/benet/be.h3
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.c33
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c29
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c4
-rw-r--r--drivers/net/ethernet/intel/e1000e/80003es2lan.c7
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c4
-rw-r--r--drivers/net/ethernet/intel/e1000e/phy.c10
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c2
-rw-r--r--drivers/net/ethernet/marvell/mvmdio.c6
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c4
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic.h5
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c7
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c4
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c12
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c4
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c7
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c20
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c4
-rw-r--r--drivers/net/ethernet/ti/cpsw.c4
39 files changed, 655 insertions, 246 deletions
diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c
index eedf2a5fc2be..eeecc29cf5b7 100644
--- a/drivers/net/ethernet/arc/emac_main.c
+++ b/drivers/net/ethernet/arc/emac_main.c
@@ -555,6 +555,8 @@ static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)
555 /* Make sure pointer to data buffer is set */ 555 /* Make sure pointer to data buffer is set */
556 wmb(); 556 wmb();
557 557
558 skb_tx_timestamp(skb);
559
558 *info = cpu_to_le32(FOR_EMAC | FIRST_OR_LAST_MASK | len); 560 *info = cpu_to_le32(FOR_EMAC | FIRST_OR_LAST_MASK | len);
559 561
560 /* Increment index to point to the next BD */ 562 /* Increment index to point to the next BD */
@@ -569,8 +571,6 @@ static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)
569 571
570 arc_reg_set(priv, R_STATUS, TXPL_MASK); 572 arc_reg_set(priv, R_STATUS, TXPL_MASK);
571 573
572 skb_tx_timestamp(skb);
573
574 return NETDEV_TX_OK; 574 return NETDEV_TX_OK;
575} 575}
576 576
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index a36a760ada28..29801750f239 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -145,9 +145,11 @@ static void atl1c_reset_pcie(struct atl1c_hw *hw, u32 flag)
145 * Mask some pcie error bits 145 * Mask some pcie error bits
146 */ 146 */
147 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR); 147 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
148 pci_read_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, &data); 148 if (pos) {
149 data &= ~(PCI_ERR_UNC_DLP | PCI_ERR_UNC_FCP); 149 pci_read_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, &data);
150 pci_write_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, data); 150 data &= ~(PCI_ERR_UNC_DLP | PCI_ERR_UNC_FCP);
151 pci_write_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, data);
152 }
151 /* clear error status */ 153 /* clear error status */
152 pcie_capability_write_word(pdev, PCI_EXP_DEVSTA, 154 pcie_capability_write_word(pdev, PCI_EXP_DEVSTA,
153 PCI_EXP_DEVSTA_NFED | 155 PCI_EXP_DEVSTA_NFED |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index dad67905f4e2..eb105abcf0e7 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1250,7 +1250,10 @@ struct bnx2x_slowpath {
1250 * Therefore, if they would have been defined in the same union, 1250 * Therefore, if they would have been defined in the same union,
1251 * data can get corrupted. 1251 * data can get corrupted.
1252 */ 1252 */
1253 struct afex_vif_list_ramrod_data func_afex_rdata; 1253 union {
1254 struct afex_vif_list_ramrod_data viflist_data;
1255 struct function_update_data func_update;
1256 } func_afex_rdata;
1254 1257
1255 /* used by dmae command executer */ 1258 /* used by dmae command executer */
1256 struct dmae_command dmae[MAX_DMAE_C]; 1259 struct dmae_command dmae[MAX_DMAE_C];
@@ -2501,4 +2504,6 @@ void bnx2x_set_local_cmng(struct bnx2x *bp);
2501#define MCPR_SCRATCH_BASE(bp) \ 2504#define MCPR_SCRATCH_BASE(bp) \
2502 (CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH) 2505 (CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH)
2503 2506
2507#define E1H_MAX_MF_SB_COUNT (HC_SB_MAX_SB_E1X/(E1HVN_MAX * PORT_MAX))
2508
2504#endif /* bnx2x.h */ 2509#endif /* bnx2x.h */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
index 20dcc02431ca..11fc79585491 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
@@ -3865,6 +3865,19 @@ static void bnx2x_warpcore_enable_AN_KR(struct bnx2x_phy *phy,
3865 3865
3866 bnx2x_warpcore_enable_AN_KR2(phy, params, vars); 3866 bnx2x_warpcore_enable_AN_KR2(phy, params, vars);
3867 } else { 3867 } else {
3868 /* Enable Auto-Detect to support 1G over CL37 as well */
3869 bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD,
3870 MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X1, 0x10);
3871
3872 /* Force cl48 sync_status LOW to avoid getting stuck in CL73
3873 * parallel-detect loop when CL73 and CL37 are enabled.
3874 */
3875 CL22_WR_OVER_CL45(bp, phy, MDIO_REG_BANK_AER_BLOCK,
3876 MDIO_AER_BLOCK_AER_REG, 0);
3877 bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD,
3878 MDIO_WC_REG_RXB_ANA_RX_CONTROL_PCI, 0x0800);
3879 bnx2x_set_aer_mmd(params, phy);
3880
3868 bnx2x_disable_kr2(params, vars, phy); 3881 bnx2x_disable_kr2(params, vars, phy);
3869 } 3882 }
3870 3883
@@ -8120,17 +8133,20 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8120 *edc_mode = EDC_MODE_ACTIVE_DAC; 8133 *edc_mode = EDC_MODE_ACTIVE_DAC;
8121 else 8134 else
8122 check_limiting_mode = 1; 8135 check_limiting_mode = 1;
8123 } else if (copper_module_type & 8136 } else {
8124 SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE) { 8137 *edc_mode = EDC_MODE_PASSIVE_DAC;
8138 /* Even in case PASSIVE_DAC indication is not set,
8139 * treat it as a passive DAC cable, since some cables
8140 * don't have this indication.
8141 */
8142 if (copper_module_type &
8143 SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE) {
8125 DP(NETIF_MSG_LINK, 8144 DP(NETIF_MSG_LINK,
8126 "Passive Copper cable detected\n"); 8145 "Passive Copper cable detected\n");
8127 *edc_mode = 8146 } else {
8128 EDC_MODE_PASSIVE_DAC; 8147 DP(NETIF_MSG_LINK,
8129 } else { 8148 "Unknown copper-cable-type\n");
8130 DP(NETIF_MSG_LINK, 8149 }
8131 "Unknown copper-cable-type 0x%x !!!\n",
8132 copper_module_type);
8133 return -EINVAL;
8134 } 8150 }
8135 break; 8151 break;
8136 } 8152 }
@@ -10825,9 +10841,9 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy,
10825 (1<<11)); 10841 (1<<11));
10826 10842
10827 if (((phy->req_line_speed == SPEED_AUTO_NEG) && 10843 if (((phy->req_line_speed == SPEED_AUTO_NEG) &&
10828 (phy->speed_cap_mask & 10844 (phy->speed_cap_mask &
10829 PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) || 10845 PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) ||
10830 (phy->req_line_speed == SPEED_1000)) { 10846 (phy->req_line_speed == SPEED_1000)) {
10831 an_1000_val |= (1<<8); 10847 an_1000_val |= (1<<8);
10832 autoneg_val |= (1<<9 | 1<<12); 10848 autoneg_val |= (1<<9 | 1<<12);
10833 if (phy->req_duplex == DUPLEX_FULL) 10849 if (phy->req_duplex == DUPLEX_FULL)
@@ -10843,30 +10859,32 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy,
10843 0x09, 10859 0x09,
10844 &an_1000_val); 10860 &an_1000_val);
10845 10861
10846 /* Set 100 speed advertisement */ 10862 /* Advertise 10/100 link speed */
10847 if (((phy->req_line_speed == SPEED_AUTO_NEG) && 10863 if (phy->req_line_speed == SPEED_AUTO_NEG) {
10848 (phy->speed_cap_mask & 10864 if (phy->speed_cap_mask &
10849 (PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL | 10865 PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF) {
10850 PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF)))) { 10866 an_10_100_val |= (1<<5);
10851 an_10_100_val |= (1<<7); 10867 autoneg_val |= (1<<9 | 1<<12);
10852 /* Enable autoneg and restart autoneg for legacy speeds */ 10868 DP(NETIF_MSG_LINK, "Advertising 10M-HD\n");
10853 autoneg_val |= (1<<9 | 1<<12); 10869 }
10854 10870 if (phy->speed_cap_mask &
10855 if (phy->req_duplex == DUPLEX_FULL) 10871 PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL) {
10856 an_10_100_val |= (1<<8);
10857 DP(NETIF_MSG_LINK, "Advertising 100M\n");
10858 }
10859
10860 /* Set 10 speed advertisement */
10861 if (((phy->req_line_speed == SPEED_AUTO_NEG) &&
10862 (phy->speed_cap_mask &
10863 (PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL |
10864 PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF)))) {
10865 an_10_100_val |= (1<<5);
10866 autoneg_val |= (1<<9 | 1<<12);
10867 if (phy->req_duplex == DUPLEX_FULL)
10868 an_10_100_val |= (1<<6); 10872 an_10_100_val |= (1<<6);
10869 DP(NETIF_MSG_LINK, "Advertising 10M\n"); 10873 autoneg_val |= (1<<9 | 1<<12);
10874 DP(NETIF_MSG_LINK, "Advertising 10M-FD\n");
10875 }
10876 if (phy->speed_cap_mask &
10877 PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF) {
10878 an_10_100_val |= (1<<7);
10879 autoneg_val |= (1<<9 | 1<<12);
10880 DP(NETIF_MSG_LINK, "Advertising 100M-HD\n");
10881 }
10882 if (phy->speed_cap_mask &
10883 PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL) {
10884 an_10_100_val |= (1<<8);
10885 autoneg_val |= (1<<9 | 1<<12);
10886 DP(NETIF_MSG_LINK, "Advertising 100M-FD\n");
10887 }
10870 } 10888 }
10871 10889
10872 /* Only 10/100 are allowed to work in FORCE mode */ 10890 /* Only 10/100 are allowed to work in FORCE mode */
@@ -13342,6 +13360,10 @@ static u8 bnx2x_analyze_link_error(struct link_params *params,
13342 DP(NETIF_MSG_LINK, "Link changed:[%x %x]->%x\n", vars->link_up, 13360 DP(NETIF_MSG_LINK, "Link changed:[%x %x]->%x\n", vars->link_up,
13343 old_status, status); 13361 old_status, status);
13344 13362
13363 /* Do not touch the link in case physical link down */
13364 if ((vars->phy_flags & PHY_PHYSICAL_LINK_FLAG) == 0)
13365 return 1;
13366
13345 /* a. Update shmem->link_status accordingly 13367 /* a. Update shmem->link_status accordingly
13346 * b. Update link_vars->link_up 13368 * b. Update link_vars->link_up
13347 */ 13369 */
@@ -13550,7 +13572,7 @@ static void bnx2x_check_kr2_wa(struct link_params *params,
13550 */ 13572 */
13551 not_kr2_device = (((base_page & 0x8000) == 0) || 13573 not_kr2_device = (((base_page & 0x8000) == 0) ||
13552 (((base_page & 0x8000) && 13574 (((base_page & 0x8000) &&
13553 ((next_page & 0xe0) == 0x2)))); 13575 ((next_page & 0xe0) == 0x20))));
13554 13576
13555 /* In case KR2 is already disabled, check if we need to re-enable it */ 13577 /* In case KR2 is already disabled, check if we need to re-enable it */
13556 if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) { 13578 if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index d3748bf3ac7b..18498fed520b 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -11517,9 +11517,9 @@ static int bnx2x_get_hwinfo(struct bnx2x *bp)
11517 } 11517 }
11518 } 11518 }
11519 11519
11520 /* adjust igu_sb_cnt to MF for E1x */ 11520 /* adjust igu_sb_cnt to MF for E1H */
11521 if (CHIP_IS_E1x(bp) && IS_MF(bp)) 11521 if (CHIP_IS_E1H(bp) && IS_MF(bp))
11522 bp->igu_sb_cnt /= E1HVN_MAX; 11522 bp->igu_sb_cnt = min_t(u8, bp->igu_sb_cnt, E1H_MAX_MF_SB_COUNT);
11523 11523
11524 /* port info */ 11524 /* port info */
11525 bnx2x_get_port_hwinfo(bp); 11525 bnx2x_get_port_hwinfo(bp);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
index 08f8047188e9..2beb5430b876 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
@@ -7180,6 +7180,7 @@ Theotherbitsarereservedandshouldbezero*/
7180#define MDIO_WC_REG_RX1_PCI_CTRL 0x80ca 7180#define MDIO_WC_REG_RX1_PCI_CTRL 0x80ca
7181#define MDIO_WC_REG_RX2_PCI_CTRL 0x80da 7181#define MDIO_WC_REG_RX2_PCI_CTRL 0x80da
7182#define MDIO_WC_REG_RX3_PCI_CTRL 0x80ea 7182#define MDIO_WC_REG_RX3_PCI_CTRL 0x80ea
7183#define MDIO_WC_REG_RXB_ANA_RX_CONTROL_PCI 0x80fa
7183#define MDIO_WC_REG_XGXSBLK2_UNICORE_MODE_10G 0x8104 7184#define MDIO_WC_REG_XGXSBLK2_UNICORE_MODE_10G 0x8104
7184#define MDIO_WC_REG_XGXS_STATUS3 0x8129 7185#define MDIO_WC_REG_XGXS_STATUS3 0x8129
7185#define MDIO_WC_REG_PAR_DET_10G_STATUS 0x8130 7186#define MDIO_WC_REG_PAR_DET_10G_STATUS 0x8130
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index babf7b954ae6..98cccd487fc2 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -2036,6 +2036,7 @@ static int bnx2x_vlan_mac_del_all(struct bnx2x *bp,
2036 struct bnx2x_vlan_mac_ramrod_params p; 2036 struct bnx2x_vlan_mac_ramrod_params p;
2037 struct bnx2x_exe_queue_obj *exeq = &o->exe_queue; 2037 struct bnx2x_exe_queue_obj *exeq = &o->exe_queue;
2038 struct bnx2x_exeq_elem *exeq_pos, *exeq_pos_n; 2038 struct bnx2x_exeq_elem *exeq_pos, *exeq_pos_n;
2039 unsigned long flags;
2039 int read_lock; 2040 int read_lock;
2040 int rc = 0; 2041 int rc = 0;
2041 2042
@@ -2044,8 +2045,9 @@ static int bnx2x_vlan_mac_del_all(struct bnx2x *bp,
2044 spin_lock_bh(&exeq->lock); 2045 spin_lock_bh(&exeq->lock);
2045 2046
2046 list_for_each_entry_safe(exeq_pos, exeq_pos_n, &exeq->exe_queue, link) { 2047 list_for_each_entry_safe(exeq_pos, exeq_pos_n, &exeq->exe_queue, link) {
2047 if (exeq_pos->cmd_data.vlan_mac.vlan_mac_flags == 2048 flags = exeq_pos->cmd_data.vlan_mac.vlan_mac_flags;
2048 *vlan_mac_flags) { 2049 if (BNX2X_VLAN_MAC_CMP_FLAGS(flags) ==
2050 BNX2X_VLAN_MAC_CMP_FLAGS(*vlan_mac_flags)) {
2049 rc = exeq->remove(bp, exeq->owner, exeq_pos); 2051 rc = exeq->remove(bp, exeq->owner, exeq_pos);
2050 if (rc) { 2052 if (rc) {
2051 BNX2X_ERR("Failed to remove command\n"); 2053 BNX2X_ERR("Failed to remove command\n");
@@ -2078,7 +2080,9 @@ static int bnx2x_vlan_mac_del_all(struct bnx2x *bp,
2078 return read_lock; 2080 return read_lock;
2079 2081
2080 list_for_each_entry(pos, &o->head, link) { 2082 list_for_each_entry(pos, &o->head, link) {
2081 if (pos->vlan_mac_flags == *vlan_mac_flags) { 2083 flags = pos->vlan_mac_flags;
2084 if (BNX2X_VLAN_MAC_CMP_FLAGS(flags) ==
2085 BNX2X_VLAN_MAC_CMP_FLAGS(*vlan_mac_flags)) {
2082 p.user_req.vlan_mac_flags = pos->vlan_mac_flags; 2086 p.user_req.vlan_mac_flags = pos->vlan_mac_flags;
2083 memcpy(&p.user_req.u, &pos->u, sizeof(pos->u)); 2087 memcpy(&p.user_req.u, &pos->u, sizeof(pos->u));
2084 rc = bnx2x_config_vlan_mac(bp, &p); 2088 rc = bnx2x_config_vlan_mac(bp, &p);
@@ -4380,8 +4384,11 @@ int bnx2x_config_rss(struct bnx2x *bp,
4380 struct bnx2x_raw_obj *r = &o->raw; 4384 struct bnx2x_raw_obj *r = &o->raw;
4381 4385
4382 /* Do nothing if only driver cleanup was requested */ 4386 /* Do nothing if only driver cleanup was requested */
4383 if (test_bit(RAMROD_DRV_CLR_ONLY, &p->ramrod_flags)) 4387 if (test_bit(RAMROD_DRV_CLR_ONLY, &p->ramrod_flags)) {
4388 DP(BNX2X_MSG_SP, "Not configuring RSS ramrod_flags=%lx\n",
4389 p->ramrod_flags);
4384 return 0; 4390 return 0;
4391 }
4385 4392
4386 r->set_pending(r); 4393 r->set_pending(r);
4387 4394
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
index 658f4e33abf9..6a53c15c85a3 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
@@ -266,6 +266,13 @@ enum {
266 BNX2X_DONT_CONSUME_CAM_CREDIT, 266 BNX2X_DONT_CONSUME_CAM_CREDIT,
267 BNX2X_DONT_CONSUME_CAM_CREDIT_DEST, 267 BNX2X_DONT_CONSUME_CAM_CREDIT_DEST,
268}; 268};
269/* When looking for matching filters, some flags are not interesting */
270#define BNX2X_VLAN_MAC_CMP_MASK (1 << BNX2X_UC_LIST_MAC | \
271 1 << BNX2X_ETH_MAC | \
272 1 << BNX2X_ISCSI_ETH_MAC | \
273 1 << BNX2X_NETQ_ETH_MAC)
274#define BNX2X_VLAN_MAC_CMP_FLAGS(flags) \
275 ((flags) & BNX2X_VLAN_MAC_CMP_MASK)
269 276
270struct bnx2x_vlan_mac_ramrod_params { 277struct bnx2x_vlan_mac_ramrod_params {
271 /* Object to run the command from */ 278 /* Object to run the command from */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index 6fe52d301dfe..31ab924600c1 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -1213,6 +1213,11 @@ static void bnx2x_vfop_rxmode(struct bnx2x *bp, struct bnx2x_virtf *vf)
1213 /* next state */ 1213 /* next state */
1214 vfop->state = BNX2X_VFOP_RXMODE_DONE; 1214 vfop->state = BNX2X_VFOP_RXMODE_DONE;
1215 1215
1216 /* record the accept flags in vfdb so hypervisor can modify them
1217 * if necessary
1218 */
1219 bnx2x_vfq(vf, ramrod->cl_id - vf->igu_base_id, accept_flags) =
1220 ramrod->rx_accept_flags;
1216 vfop->rc = bnx2x_config_rx_mode(bp, ramrod); 1221 vfop->rc = bnx2x_config_rx_mode(bp, ramrod);
1217 bnx2x_vfop_finalize(vf, vfop->rc, VFOP_DONE); 1222 bnx2x_vfop_finalize(vf, vfop->rc, VFOP_DONE);
1218op_err: 1223op_err:
@@ -1228,39 +1233,43 @@ op_pending:
1228 return; 1233 return;
1229} 1234}
1230 1235
1236static void bnx2x_vf_prep_rx_mode(struct bnx2x *bp, u8 qid,
1237 struct bnx2x_rx_mode_ramrod_params *ramrod,
1238 struct bnx2x_virtf *vf,
1239 unsigned long accept_flags)
1240{
1241 struct bnx2x_vf_queue *vfq = vfq_get(vf, qid);
1242
1243 memset(ramrod, 0, sizeof(*ramrod));
1244 ramrod->cid = vfq->cid;
1245 ramrod->cl_id = vfq_cl_id(vf, vfq);
1246 ramrod->rx_mode_obj = &bp->rx_mode_obj;
1247 ramrod->func_id = FW_VF_HANDLE(vf->abs_vfid);
1248 ramrod->rx_accept_flags = accept_flags;
1249 ramrod->tx_accept_flags = accept_flags;
1250 ramrod->pstate = &vf->filter_state;
1251 ramrod->state = BNX2X_FILTER_RX_MODE_PENDING;
1252
1253 set_bit(BNX2X_FILTER_RX_MODE_PENDING, &vf->filter_state);
1254 set_bit(RAMROD_RX, &ramrod->ramrod_flags);
1255 set_bit(RAMROD_TX, &ramrod->ramrod_flags);
1256
1257 ramrod->rdata = bnx2x_vf_sp(bp, vf, rx_mode_rdata.e2);
1258 ramrod->rdata_mapping = bnx2x_vf_sp_map(bp, vf, rx_mode_rdata.e2);
1259}
1260
1231int bnx2x_vfop_rxmode_cmd(struct bnx2x *bp, 1261int bnx2x_vfop_rxmode_cmd(struct bnx2x *bp,
1232 struct bnx2x_virtf *vf, 1262 struct bnx2x_virtf *vf,
1233 struct bnx2x_vfop_cmd *cmd, 1263 struct bnx2x_vfop_cmd *cmd,
1234 int qid, unsigned long accept_flags) 1264 int qid, unsigned long accept_flags)
1235{ 1265{
1236 struct bnx2x_vf_queue *vfq = vfq_get(vf, qid);
1237 struct bnx2x_vfop *vfop = bnx2x_vfop_add(bp, vf); 1266 struct bnx2x_vfop *vfop = bnx2x_vfop_add(bp, vf);
1238 1267
1239 if (vfop) { 1268 if (vfop) {
1240 struct bnx2x_rx_mode_ramrod_params *ramrod = 1269 struct bnx2x_rx_mode_ramrod_params *ramrod =
1241 &vf->op_params.rx_mode; 1270 &vf->op_params.rx_mode;
1242 1271
1243 memset(ramrod, 0, sizeof(*ramrod)); 1272 bnx2x_vf_prep_rx_mode(bp, qid, ramrod, vf, accept_flags);
1244
1245 /* Prepare ramrod parameters */
1246 ramrod->cid = vfq->cid;
1247 ramrod->cl_id = vfq_cl_id(vf, vfq);
1248 ramrod->rx_mode_obj = &bp->rx_mode_obj;
1249 ramrod->func_id = FW_VF_HANDLE(vf->abs_vfid);
1250
1251 ramrod->rx_accept_flags = accept_flags;
1252 ramrod->tx_accept_flags = accept_flags;
1253 ramrod->pstate = &vf->filter_state;
1254 ramrod->state = BNX2X_FILTER_RX_MODE_PENDING;
1255
1256 set_bit(BNX2X_FILTER_RX_MODE_PENDING, &vf->filter_state);
1257 set_bit(RAMROD_RX, &ramrod->ramrod_flags);
1258 set_bit(RAMROD_TX, &ramrod->ramrod_flags);
1259
1260 ramrod->rdata =
1261 bnx2x_vf_sp(bp, vf, rx_mode_rdata.e2);
1262 ramrod->rdata_mapping =
1263 bnx2x_vf_sp_map(bp, vf, rx_mode_rdata.e2);
1264 1273
1265 bnx2x_vfop_opset(BNX2X_VFOP_RXMODE_CONFIG, 1274 bnx2x_vfop_opset(BNX2X_VFOP_RXMODE_CONFIG,
1266 bnx2x_vfop_rxmode, cmd->done); 1275 bnx2x_vfop_rxmode, cmd->done);
@@ -3213,13 +3222,16 @@ int bnx2x_enable_sriov(struct bnx2x *bp)
3213 bnx2x_iov_static_resc(bp, vf); 3222 bnx2x_iov_static_resc(bp, vf);
3214 } 3223 }
3215 3224
3216 /* prepare msix vectors in VF configuration space */ 3225 /* prepare msix vectors in VF configuration space - the value in the
3226 * PCI configuration space should be the index of the last entry,
3227 * namely one less than the actual size of the table
3228 */
3217 for (vf_idx = first_vf; vf_idx < first_vf + req_vfs; vf_idx++) { 3229 for (vf_idx = first_vf; vf_idx < first_vf + req_vfs; vf_idx++) {
3218 bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf_idx)); 3230 bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf_idx));
3219 REG_WR(bp, PCICFG_OFFSET + GRC_CONFIG_REG_VF_MSIX_CONTROL, 3231 REG_WR(bp, PCICFG_OFFSET + GRC_CONFIG_REG_VF_MSIX_CONTROL,
3220 num_vf_queues); 3232 num_vf_queues - 1);
3221 DP(BNX2X_MSG_IOV, "set msix vec num in VF %d cfg space to %d\n", 3233 DP(BNX2X_MSG_IOV, "set msix vec num in VF %d cfg space to %d\n",
3222 vf_idx, num_vf_queues); 3234 vf_idx, num_vf_queues - 1);
3223 } 3235 }
3224 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp)); 3236 bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
3225 3237
@@ -3447,10 +3459,18 @@ out:
3447 3459
3448int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos) 3460int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos)
3449{ 3461{
3462 struct bnx2x_queue_state_params q_params = {NULL};
3463 struct bnx2x_vlan_mac_ramrod_params ramrod_param;
3464 struct bnx2x_queue_update_params *update_params;
3465 struct pf_vf_bulletin_content *bulletin = NULL;
3466 struct bnx2x_rx_mode_ramrod_params rx_ramrod;
3450 struct bnx2x *bp = netdev_priv(dev); 3467 struct bnx2x *bp = netdev_priv(dev);
3451 int rc, q_logical_state; 3468 struct bnx2x_vlan_mac_obj *vlan_obj;
3469 unsigned long vlan_mac_flags = 0;
3470 unsigned long ramrod_flags = 0;
3452 struct bnx2x_virtf *vf = NULL; 3471 struct bnx2x_virtf *vf = NULL;
3453 struct pf_vf_bulletin_content *bulletin = NULL; 3472 unsigned long accept_flags;
3473 int rc;
3454 3474
3455 /* sanity and init */ 3475 /* sanity and init */
3456 rc = bnx2x_vf_ndo_prep(bp, vfidx, &vf, &bulletin); 3476 rc = bnx2x_vf_ndo_prep(bp, vfidx, &vf, &bulletin);
@@ -3468,104 +3488,118 @@ int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos)
3468 /* update PF's copy of the VF's bulletin. No point in posting the vlan 3488 /* update PF's copy of the VF's bulletin. No point in posting the vlan
3469 * to the VF since it doesn't have anything to do with it. But it useful 3489 * to the VF since it doesn't have anything to do with it. But it useful
3470 * to store it here in case the VF is not up yet and we can only 3490 * to store it here in case the VF is not up yet and we can only
3471 * configure the vlan later when it does. 3491 * configure the vlan later when it does. Treat vlan id 0 as remove the
3492 * Host tag.
3472 */ 3493 */
3473 bulletin->valid_bitmap |= 1 << VLAN_VALID; 3494 if (vlan > 0)
3495 bulletin->valid_bitmap |= 1 << VLAN_VALID;
3496 else
3497 bulletin->valid_bitmap &= ~(1 << VLAN_VALID);
3474 bulletin->vlan = vlan; 3498 bulletin->vlan = vlan;
3475 3499
3476 /* is vf initialized and queue set up? */ 3500 /* is vf initialized and queue set up? */
3477 q_logical_state = 3501 if (vf->state != VF_ENABLED ||
3478 bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj)); 3502 bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj)) !=
3479 if (vf->state == VF_ENABLED && 3503 BNX2X_Q_LOGICAL_STATE_ACTIVE)
3480 q_logical_state == BNX2X_Q_LOGICAL_STATE_ACTIVE) { 3504 return rc;
3481 /* configure the vlan in device on this vf's queue */
3482 unsigned long ramrod_flags = 0;
3483 unsigned long vlan_mac_flags = 0;
3484 struct bnx2x_vlan_mac_obj *vlan_obj =
3485 &bnx2x_leading_vfq(vf, vlan_obj);
3486 struct bnx2x_vlan_mac_ramrod_params ramrod_param;
3487 struct bnx2x_queue_state_params q_params = {NULL};
3488 struct bnx2x_queue_update_params *update_params;
3489 3505
3490 rc = validate_vlan_mac(bp, &bnx2x_leading_vfq(vf, mac_obj)); 3506 /* configure the vlan in device on this vf's queue */
3491 if (rc) 3507 vlan_obj = &bnx2x_leading_vfq(vf, vlan_obj);
3492 return rc; 3508 rc = validate_vlan_mac(bp, &bnx2x_leading_vfq(vf, mac_obj));
3493 memset(&ramrod_param, 0, sizeof(ramrod_param)); 3509 if (rc)
3510 return rc;
3494 3511
3495 /* must lock vfpf channel to protect against vf flows */ 3512 /* must lock vfpf channel to protect against vf flows */
3496 bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN); 3513 bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
3497 3514
3498 /* remove existing vlans */ 3515 /* remove existing vlans */
3499 __set_bit(RAMROD_COMP_WAIT, &ramrod_flags); 3516 __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
3500 rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_mac_flags, 3517 rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_mac_flags,
3501 &ramrod_flags); 3518 &ramrod_flags);
3502 if (rc) { 3519 if (rc) {
3503 BNX2X_ERR("failed to delete vlans\n"); 3520 BNX2X_ERR("failed to delete vlans\n");
3504 rc = -EINVAL; 3521 rc = -EINVAL;
3505 goto out; 3522 goto out;
3506 } 3523 }
3524
3525 /* need to remove/add the VF's accept_any_vlan bit */
3526 accept_flags = bnx2x_leading_vfq(vf, accept_flags);
3527 if (vlan)
3528 clear_bit(BNX2X_ACCEPT_ANY_VLAN, &accept_flags);
3529 else
3530 set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept_flags);
3531
3532 bnx2x_vf_prep_rx_mode(bp, LEADING_IDX, &rx_ramrod, vf,
3533 accept_flags);
3534 bnx2x_leading_vfq(vf, accept_flags) = accept_flags;
3535 bnx2x_config_rx_mode(bp, &rx_ramrod);
3536
3537 /* configure the new vlan to device */
3538 memset(&ramrod_param, 0, sizeof(ramrod_param));
3539 __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
3540 ramrod_param.vlan_mac_obj = vlan_obj;
3541 ramrod_param.ramrod_flags = ramrod_flags;
3542 set_bit(BNX2X_DONT_CONSUME_CAM_CREDIT,
3543 &ramrod_param.user_req.vlan_mac_flags);
3544 ramrod_param.user_req.u.vlan.vlan = vlan;
3545 ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
3546 rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
3547 if (rc) {
3548 BNX2X_ERR("failed to configure vlan\n");
3549 rc = -EINVAL;
3550 goto out;
3551 }
3507 3552
3508 /* send queue update ramrod to configure default vlan and silent 3553 /* send queue update ramrod to configure default vlan and silent
3509 * vlan removal 3554 * vlan removal
3555 */
3556 __set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
3557 q_params.cmd = BNX2X_Q_CMD_UPDATE;
3558 q_params.q_obj = &bnx2x_leading_vfq(vf, sp_obj);
3559 update_params = &q_params.params.update;
3560 __set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN_CHNG,
3561 &update_params->update_flags);
3562 __set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM_CHNG,
3563 &update_params->update_flags);
3564 if (vlan == 0) {
3565 /* if vlan is 0 then we want to leave the VF traffic
3566 * untagged, and leave the incoming traffic untouched
3567 * (i.e. do not remove any vlan tags).
3510 */ 3568 */
3511 __set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags); 3569 __clear_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
3512 q_params.cmd = BNX2X_Q_CMD_UPDATE; 3570 &update_params->update_flags);
3513 q_params.q_obj = &bnx2x_leading_vfq(vf, sp_obj); 3571 __clear_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
3514 update_params = &q_params.params.update; 3572 &update_params->update_flags);
3515 __set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN_CHNG, 3573 } else {
3574 /* configure default vlan to vf queue and set silent
3575 * vlan removal (the vf remains unaware of this vlan).
3576 */
3577 __set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
3516 &update_params->update_flags); 3578 &update_params->update_flags);
3517 __set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM_CHNG, 3579 __set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
3518 &update_params->update_flags); 3580 &update_params->update_flags);
3581 update_params->def_vlan = vlan;
3582 update_params->silent_removal_value =
3583 vlan & VLAN_VID_MASK;
3584 update_params->silent_removal_mask = VLAN_VID_MASK;
3585 }
3519 3586
3520 if (vlan == 0) { 3587 /* Update the Queue state */
3521 /* if vlan is 0 then we want to leave the VF traffic 3588 rc = bnx2x_queue_state_change(bp, &q_params);
3522 * untagged, and leave the incoming traffic untouched 3589 if (rc) {
3523 * (i.e. do not remove any vlan tags). 3590 BNX2X_ERR("Failed to configure default VLAN\n");
3524 */ 3591 goto out;
3525 __clear_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN, 3592 }
3526 &update_params->update_flags);
3527 __clear_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
3528 &update_params->update_flags);
3529 } else {
3530 /* configure the new vlan to device */
3531 __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
3532 ramrod_param.vlan_mac_obj = vlan_obj;
3533 ramrod_param.ramrod_flags = ramrod_flags;
3534 ramrod_param.user_req.u.vlan.vlan = vlan;
3535 ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
3536 rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
3537 if (rc) {
3538 BNX2X_ERR("failed to configure vlan\n");
3539 rc = -EINVAL;
3540 goto out;
3541 }
3542
3543 /* configure default vlan to vf queue and set silent
3544 * vlan removal (the vf remains unaware of this vlan).
3545 */
3546 update_params = &q_params.params.update;
3547 __set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
3548 &update_params->update_flags);
3549 __set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
3550 &update_params->update_flags);
3551 update_params->def_vlan = vlan;
3552 }
3553 3593
3554 /* Update the Queue state */
3555 rc = bnx2x_queue_state_change(bp, &q_params);
3556 if (rc) {
3557 BNX2X_ERR("Failed to configure default VLAN\n");
3558 goto out;
3559 }
3560 3594
3561 /* clear the flag indicating that this VF needs its vlan 3595 /* clear the flag indicating that this VF needs its vlan
3562 * (will only be set if the HV configured the Vlan before vf was 3596 * (will only be set if the HV configured the Vlan before vf was
3563 * up and we were called because the VF came up later 3597 * up and we were called because the VF came up later
3564 */ 3598 */
3565out: 3599out:
3566 vf->cfg_flags &= ~VF_CFG_VLAN; 3600 vf->cfg_flags &= ~VF_CFG_VLAN;
3567 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN); 3601 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
3568 } 3602
3569 return rc; 3603 return rc;
3570} 3604}
3571 3605
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
index a5c84a7d454c..d72ab7e24de0 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
@@ -74,6 +74,7 @@ struct bnx2x_vf_queue {
74 /* VLANs object */ 74 /* VLANs object */
75 struct bnx2x_vlan_mac_obj vlan_obj; 75 struct bnx2x_vlan_mac_obj vlan_obj;
76 atomic_t vlan_count; /* 0 means vlan-0 is set ~ untagged */ 76 atomic_t vlan_count; /* 0 means vlan-0 is set ~ untagged */
77 unsigned long accept_flags; /* last accept flags configured */
77 78
78 /* Queue Slow-path State object */ 79 /* Queue Slow-path State object */
79 struct bnx2x_queue_sp_obj sp_obj; 80 struct bnx2x_queue_sp_obj sp_obj;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
index e5f7985a372c..1b1ad31b4553 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
@@ -208,7 +208,7 @@ static int bnx2x_get_vf_id(struct bnx2x *bp, u32 *vf_id)
208 return -EINVAL; 208 return -EINVAL;
209 } 209 }
210 210
211 BNX2X_ERR("valid ME register value: 0x%08x\n", me_reg); 211 DP(BNX2X_MSG_IOV, "valid ME register value: 0x%08x\n", me_reg);
212 212
213 *vf_id = (me_reg & ME_REG_VF_NUM_MASK) >> ME_REG_VF_NUM_SHIFT; 213 *vf_id = (me_reg & ME_REG_VF_NUM_MASK) >> ME_REG_VF_NUM_SHIFT;
214 214
@@ -1610,6 +1610,8 @@ static void bnx2x_vfop_mbx_qfilters(struct bnx2x *bp, struct bnx2x_virtf *vf)
1610 1610
1611 if (msg->flags & VFPF_SET_Q_FILTERS_RX_MASK_CHANGED) { 1611 if (msg->flags & VFPF_SET_Q_FILTERS_RX_MASK_CHANGED) {
1612 unsigned long accept = 0; 1612 unsigned long accept = 0;
1613 struct pf_vf_bulletin_content *bulletin =
1614 BP_VF_BULLETIN(bp, vf->index);
1613 1615
1614 /* covert VF-PF if mask to bnx2x accept flags */ 1616 /* covert VF-PF if mask to bnx2x accept flags */
1615 if (msg->rx_mask & VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST) 1617 if (msg->rx_mask & VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST)
@@ -1629,9 +1631,11 @@ static void bnx2x_vfop_mbx_qfilters(struct bnx2x *bp, struct bnx2x_virtf *vf)
1629 __set_bit(BNX2X_ACCEPT_BROADCAST, &accept); 1631 __set_bit(BNX2X_ACCEPT_BROADCAST, &accept);
1630 1632
1631 /* A packet arriving the vf's mac should be accepted 1633 /* A packet arriving the vf's mac should be accepted
1632 * with any vlan 1634 * with any vlan, unless a vlan has already been
1635 * configured.
1633 */ 1636 */
1634 __set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept); 1637 if (!(bulletin->valid_bitmap & (1 << VLAN_VALID)))
1638 __set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept);
1635 1639
1636 /* set rx-mode */ 1640 /* set rx-mode */
1637 rc = bnx2x_vfop_rxmode_cmd(bp, vf, &cmd, 1641 rc = bnx2x_vfop_rxmode_cmd(bp, vf, &cmd,
@@ -1722,6 +1726,21 @@ static void bnx2x_vf_mbx_set_q_filters(struct bnx2x *bp,
1722 goto response; 1726 goto response;
1723 } 1727 }
1724 } 1728 }
1729 /* if vlan was set by hypervisor we don't allow guest to config vlan */
1730 if (bulletin->valid_bitmap & 1 << VLAN_VALID) {
1731 int i;
1732
1733 /* search for vlan filters */
1734 for (i = 0; i < filters->n_mac_vlan_filters; i++) {
1735 if (filters->filters[i].flags &
1736 VFPF_Q_FILTER_VLAN_TAG_VALID) {
1737 BNX2X_ERR("VF[%d] attempted to configure vlan but one was already set by Hypervisor. Aborting request\n",
1738 vf->abs_vfid);
1739 vf->op_rc = -EPERM;
1740 goto response;
1741 }
1742 }
1743 }
1725 1744
1726 /* verify vf_qid */ 1745 /* verify vf_qid */
1727 if (filters->vf_qid > vf_rxq_count(vf)) 1746 if (filters->vf_qid > vf_rxq_count(vf))
@@ -1817,6 +1836,9 @@ static void bnx2x_vf_mbx_update_rss(struct bnx2x *bp, struct bnx2x_virtf *vf,
1817 vf_op_params->rss_result_mask = rss_tlv->rss_result_mask; 1836 vf_op_params->rss_result_mask = rss_tlv->rss_result_mask;
1818 1837
1819 /* flags handled individually for backward/forward compatability */ 1838 /* flags handled individually for backward/forward compatability */
1839 vf_op_params->rss_flags = 0;
1840 vf_op_params->ramrod_flags = 0;
1841
1820 if (rss_tlv->rss_flags & VFPF_RSS_MODE_DISABLED) 1842 if (rss_tlv->rss_flags & VFPF_RSS_MODE_DISABLED)
1821 __set_bit(BNX2X_RSS_MODE_DISABLED, &vf_op_params->rss_flags); 1843 __set_bit(BNX2X_RSS_MODE_DISABLED, &vf_op_params->rss_flags);
1822 if (rss_tlv->rss_flags & VFPF_RSS_MODE_REGULAR) 1844 if (rss_tlv->rss_flags & VFPF_RSS_MODE_REGULAR)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index d88ef551dfcd..c37e9f27ff6d 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -7638,7 +7638,7 @@ static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7638{ 7638{
7639 u32 base = (u32) mapping & 0xffffffff; 7639 u32 base = (u32) mapping & 0xffffffff;
7640 7640
7641 return (base > 0xffffdcc0) && (base + len + 8 < base); 7641 return base + len + 8 < base;
7642} 7642}
7643 7643
7644/* Test for TSO DMA buffers that cross into regions which are within MSS bytes 7644/* Test for TSO DMA buffers that cross into regions which are within MSS bytes
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index 17fe50b91523..b97e35c33d17 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -228,6 +228,25 @@ struct tp_params {
228 228
229 uint32_t dack_re; /* DACK timer resolution */ 229 uint32_t dack_re; /* DACK timer resolution */
230 unsigned short tx_modq[NCHAN]; /* channel to modulation queue map */ 230 unsigned short tx_modq[NCHAN]; /* channel to modulation queue map */
231
232 u32 vlan_pri_map; /* cached TP_VLAN_PRI_MAP */
233 u32 ingress_config; /* cached TP_INGRESS_CONFIG */
234
235 /* TP_VLAN_PRI_MAP Compressed Filter Tuple field offsets. This is a
236 * subset of the set of fields which may be present in the Compressed
237 * Filter Tuple portion of filters and TCP TCB connections. The
238 * fields which are present are controlled by the TP_VLAN_PRI_MAP.
239 * Since a variable number of fields may or may not be present, their
240 * shifted field positions within the Compressed Filter Tuple may
241 * vary, or not even be present if the field isn't selected in
242 * TP_VLAN_PRI_MAP. Since some of these fields are needed in various
243 * places we store their offsets here, or a -1 if the field isn't
244 * present.
245 */
246 int vlan_shift;
247 int vnic_shift;
248 int port_shift;
249 int protocol_shift;
231}; 250};
232 251
233struct vpd_params { 252struct vpd_params {
@@ -925,6 +944,8 @@ int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
925 const u8 *fw_data, unsigned int fw_size, 944 const u8 *fw_data, unsigned int fw_size,
926 struct fw_hdr *card_fw, enum dev_state state, int *reset); 945 struct fw_hdr *card_fw, enum dev_state state, int *reset);
927int t4_prep_adapter(struct adapter *adapter); 946int t4_prep_adapter(struct adapter *adapter);
947int t4_init_tp_params(struct adapter *adap);
948int t4_filter_field_shift(const struct adapter *adap, int filter_sel);
928int t4_port_init(struct adapter *adap, int mbox, int pf, int vf); 949int t4_port_init(struct adapter *adap, int mbox, int pf, int vf);
929void t4_fatal_err(struct adapter *adapter); 950void t4_fatal_err(struct adapter *adapter);
930int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid, 951int t4_config_rss_range(struct adapter *adapter, int mbox, unsigned int viid,
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index d6b12e035a7d..fff02ed1295e 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -2986,7 +2986,14 @@ int cxgb4_alloc_stid(struct tid_info *t, int family, void *data)
2986 if (stid >= 0) { 2986 if (stid >= 0) {
2987 t->stid_tab[stid].data = data; 2987 t->stid_tab[stid].data = data;
2988 stid += t->stid_base; 2988 stid += t->stid_base;
2989 t->stids_in_use++; 2989 /* IPv6 requires max of 520 bits or 16 cells in TCAM
2990 * This is equivalent to 4 TIDs. With CLIP enabled it
2991 * needs 2 TIDs.
2992 */
2993 if (family == PF_INET)
2994 t->stids_in_use++;
2995 else
2996 t->stids_in_use += 4;
2990 } 2997 }
2991 spin_unlock_bh(&t->stid_lock); 2998 spin_unlock_bh(&t->stid_lock);
2992 return stid; 2999 return stid;
@@ -3012,7 +3019,8 @@ int cxgb4_alloc_sftid(struct tid_info *t, int family, void *data)
3012 } 3019 }
3013 if (stid >= 0) { 3020 if (stid >= 0) {
3014 t->stid_tab[stid].data = data; 3021 t->stid_tab[stid].data = data;
3015 stid += t->stid_base; 3022 stid -= t->nstids;
3023 stid += t->sftid_base;
3016 t->stids_in_use++; 3024 t->stids_in_use++;
3017 } 3025 }
3018 spin_unlock_bh(&t->stid_lock); 3026 spin_unlock_bh(&t->stid_lock);
@@ -3024,14 +3032,24 @@ EXPORT_SYMBOL(cxgb4_alloc_sftid);
3024 */ 3032 */
3025void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family) 3033void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family)
3026{ 3034{
3027 stid -= t->stid_base; 3035 /* Is it a server filter TID? */
3036 if (t->nsftids && (stid >= t->sftid_base)) {
3037 stid -= t->sftid_base;
3038 stid += t->nstids;
3039 } else {
3040 stid -= t->stid_base;
3041 }
3042
3028 spin_lock_bh(&t->stid_lock); 3043 spin_lock_bh(&t->stid_lock);
3029 if (family == PF_INET) 3044 if (family == PF_INET)
3030 __clear_bit(stid, t->stid_bmap); 3045 __clear_bit(stid, t->stid_bmap);
3031 else 3046 else
3032 bitmap_release_region(t->stid_bmap, stid, 2); 3047 bitmap_release_region(t->stid_bmap, stid, 2);
3033 t->stid_tab[stid].data = NULL; 3048 t->stid_tab[stid].data = NULL;
3034 t->stids_in_use--; 3049 if (family == PF_INET)
3050 t->stids_in_use--;
3051 else
3052 t->stids_in_use -= 4;
3035 spin_unlock_bh(&t->stid_lock); 3053 spin_unlock_bh(&t->stid_lock);
3036} 3054}
3037EXPORT_SYMBOL(cxgb4_free_stid); 3055EXPORT_SYMBOL(cxgb4_free_stid);
@@ -3134,6 +3152,7 @@ static int tid_init(struct tid_info *t)
3134 size_t size; 3152 size_t size;
3135 unsigned int stid_bmap_size; 3153 unsigned int stid_bmap_size;
3136 unsigned int natids = t->natids; 3154 unsigned int natids = t->natids;
3155 struct adapter *adap = container_of(t, struct adapter, tids);
3137 3156
3138 stid_bmap_size = BITS_TO_LONGS(t->nstids + t->nsftids); 3157 stid_bmap_size = BITS_TO_LONGS(t->nstids + t->nsftids);
3139 size = t->ntids * sizeof(*t->tid_tab) + 3158 size = t->ntids * sizeof(*t->tid_tab) +
@@ -3167,6 +3186,11 @@ static int tid_init(struct tid_info *t)
3167 t->afree = t->atid_tab; 3186 t->afree = t->atid_tab;
3168 } 3187 }
3169 bitmap_zero(t->stid_bmap, t->nstids + t->nsftids); 3188 bitmap_zero(t->stid_bmap, t->nstids + t->nsftids);
3189 /* Reserve stid 0 for T4/T5 adapters */
3190 if (!t->stid_base &&
3191 (is_t4(adap->params.chip) || is_t5(adap->params.chip)))
3192 __set_bit(0, t->stid_bmap);
3193
3170 return 0; 3194 return 0;
3171} 3195}
3172 3196
@@ -3731,7 +3755,7 @@ static void uld_attach(struct adapter *adap, unsigned int uld)
3731 lli.ucq_density = 1 << QUEUESPERPAGEPF0_GET( 3755 lli.ucq_density = 1 << QUEUESPERPAGEPF0_GET(
3732 t4_read_reg(adap, SGE_INGRESS_QUEUES_PER_PAGE_PF) >> 3756 t4_read_reg(adap, SGE_INGRESS_QUEUES_PER_PAGE_PF) >>
3733 (adap->fn * 4)); 3757 (adap->fn * 4));
3734 lli.filt_mode = adap->filter_mode; 3758 lli.filt_mode = adap->params.tp.vlan_pri_map;
3735 /* MODQ_REQ_MAP sets queues 0-3 to chan 0-3 */ 3759 /* MODQ_REQ_MAP sets queues 0-3 to chan 0-3 */
3736 for (i = 0; i < NCHAN; i++) 3760 for (i = 0; i < NCHAN; i++)
3737 lli.tx_modq[i] = i; 3761 lli.tx_modq[i] = i;
@@ -4179,7 +4203,7 @@ int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid,
4179 adap = netdev2adap(dev); 4203 adap = netdev2adap(dev);
4180 4204
4181 /* Adjust stid to correct filter index */ 4205 /* Adjust stid to correct filter index */
4182 stid -= adap->tids.nstids; 4206 stid -= adap->tids.sftid_base;
4183 stid += adap->tids.nftids; 4207 stid += adap->tids.nftids;
4184 4208
4185 /* Check to make sure the filter requested is writable ... 4209 /* Check to make sure the filter requested is writable ...
@@ -4205,12 +4229,17 @@ int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid,
4205 f->fs.val.lip[i] = val[i]; 4229 f->fs.val.lip[i] = val[i];
4206 f->fs.mask.lip[i] = ~0; 4230 f->fs.mask.lip[i] = ~0;
4207 } 4231 }
4208 if (adap->filter_mode & F_PORT) { 4232 if (adap->params.tp.vlan_pri_map & F_PORT) {
4209 f->fs.val.iport = port; 4233 f->fs.val.iport = port;
4210 f->fs.mask.iport = mask; 4234 f->fs.mask.iport = mask;
4211 } 4235 }
4212 } 4236 }
4213 4237
4238 if (adap->params.tp.vlan_pri_map & F_PROTOCOL) {
4239 f->fs.val.proto = IPPROTO_TCP;
4240 f->fs.mask.proto = ~0;
4241 }
4242
4214 f->fs.dirsteer = 1; 4243 f->fs.dirsteer = 1;
4215 f->fs.iq = queue; 4244 f->fs.iq = queue;
4216 /* Mark filter as locked */ 4245 /* Mark filter as locked */
@@ -4237,7 +4266,7 @@ int cxgb4_remove_server_filter(const struct net_device *dev, unsigned int stid,
4237 adap = netdev2adap(dev); 4266 adap = netdev2adap(dev);
4238 4267
4239 /* Adjust stid to correct filter index */ 4268 /* Adjust stid to correct filter index */
4240 stid -= adap->tids.nstids; 4269 stid -= adap->tids.sftid_base;
4241 stid += adap->tids.nftids; 4270 stid += adap->tids.nftids;
4242 4271
4243 f = &adap->tids.ftid_tab[stid]; 4272 f = &adap->tids.ftid_tab[stid];
@@ -5092,7 +5121,7 @@ static int adap_init0(struct adapter *adap)
5092 enum dev_state state; 5121 enum dev_state state;
5093 u32 params[7], val[7]; 5122 u32 params[7], val[7];
5094 struct fw_caps_config_cmd caps_cmd; 5123 struct fw_caps_config_cmd caps_cmd;
5095 int reset = 1, j; 5124 int reset = 1;
5096 5125
5097 /* 5126 /*
5098 * Contact FW, advertising Master capability (and potentially forcing 5127 * Contact FW, advertising Master capability (and potentially forcing
@@ -5434,21 +5463,11 @@ static int adap_init0(struct adapter *adap)
5434 /* 5463 /*
5435 * These are finalized by FW initialization, load their values now. 5464 * These are finalized by FW initialization, load their values now.
5436 */ 5465 */
5437 v = t4_read_reg(adap, TP_TIMER_RESOLUTION);
5438 adap->params.tp.tre = TIMERRESOLUTION_GET(v);
5439 adap->params.tp.dack_re = DELAYEDACKRESOLUTION_GET(v);
5440 t4_read_mtu_tbl(adap, adap->params.mtus, NULL); 5466 t4_read_mtu_tbl(adap, adap->params.mtus, NULL);
5441 t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd, 5467 t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
5442 adap->params.b_wnd); 5468 adap->params.b_wnd);
5443 5469
5444 /* MODQ_REQ_MAP defaults to setting queues 0-3 to chan 0-3 */ 5470 t4_init_tp_params(adap);
5445 for (j = 0; j < NCHAN; j++)
5446 adap->params.tp.tx_modq[j] = j;
5447
5448 t4_read_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
5449 &adap->filter_mode, 1,
5450 TP_VLAN_PRI_MAP);
5451
5452 adap->flags |= FW_OK; 5471 adap->flags |= FW_OK;
5453 return 0; 5472 return 0;
5454 5473
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
index 6f21f2451c30..4dd0a82533e4 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
@@ -131,7 +131,14 @@ static inline void *lookup_atid(const struct tid_info *t, unsigned int atid)
131 131
132static inline void *lookup_stid(const struct tid_info *t, unsigned int stid) 132static inline void *lookup_stid(const struct tid_info *t, unsigned int stid)
133{ 133{
134 stid -= t->stid_base; 134 /* Is it a server filter TID? */
135 if (t->nsftids && (stid >= t->sftid_base)) {
136 stid -= t->sftid_base;
137 stid += t->nstids;
138 } else {
139 stid -= t->stid_base;
140 }
141
135 return stid < (t->nstids + t->nsftids) ? t->stid_tab[stid].data : NULL; 142 return stid < (t->nstids + t->nsftids) ? t->stid_tab[stid].data : NULL;
136} 143}
137 144
diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
index 29878098101e..cb05be905def 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
@@ -45,6 +45,7 @@
45#include "l2t.h" 45#include "l2t.h"
46#include "t4_msg.h" 46#include "t4_msg.h"
47#include "t4fw_api.h" 47#include "t4fw_api.h"
48#include "t4_regs.h"
48 49
49#define VLAN_NONE 0xfff 50#define VLAN_NONE 0xfff
50 51
@@ -411,6 +412,40 @@ done:
411} 412}
412EXPORT_SYMBOL(cxgb4_l2t_get); 413EXPORT_SYMBOL(cxgb4_l2t_get);
413 414
415u64 cxgb4_select_ntuple(struct net_device *dev,
416 const struct l2t_entry *l2t)
417{
418 struct adapter *adap = netdev2adap(dev);
419 struct tp_params *tp = &adap->params.tp;
420 u64 ntuple = 0;
421
422 /* Initialize each of the fields which we care about which are present
423 * in the Compressed Filter Tuple.
424 */
425 if (tp->vlan_shift >= 0 && l2t->vlan != VLAN_NONE)
426 ntuple |= (F_FT_VLAN_VLD | l2t->vlan) << tp->vlan_shift;
427
428 if (tp->port_shift >= 0)
429 ntuple |= (u64)l2t->lport << tp->port_shift;
430
431 if (tp->protocol_shift >= 0)
432 ntuple |= (u64)IPPROTO_TCP << tp->protocol_shift;
433
434 if (tp->vnic_shift >= 0) {
435 u32 viid = cxgb4_port_viid(dev);
436 u32 vf = FW_VIID_VIN_GET(viid);
437 u32 pf = FW_VIID_PFN_GET(viid);
438 u32 vld = FW_VIID_VIVLD_GET(viid);
439
440 ntuple |= (u64)(V_FT_VNID_ID_VF(vf) |
441 V_FT_VNID_ID_PF(pf) |
442 V_FT_VNID_ID_VLD(vld)) << tp->vnic_shift;
443 }
444
445 return ntuple;
446}
447EXPORT_SYMBOL(cxgb4_select_ntuple);
448
414/* 449/*
415 * Called when address resolution fails for an L2T entry to handle packets 450 * Called when address resolution fails for an L2T entry to handle packets
416 * on the arpq head. If a packet specifies a failure handler it is invoked, 451 * on the arpq head. If a packet specifies a failure handler it is invoked,
diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.h b/drivers/net/ethernet/chelsio/cxgb4/l2t.h
index 108c0f1fce1c..85eb5c71358d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/l2t.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.h
@@ -98,7 +98,8 @@ int cxgb4_l2t_send(struct net_device *dev, struct sk_buff *skb,
98struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh, 98struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh,
99 const struct net_device *physdev, 99 const struct net_device *physdev,
100 unsigned int priority); 100 unsigned int priority);
101 101u64 cxgb4_select_ntuple(struct net_device *dev,
102 const struct l2t_entry *l2t);
102void t4_l2t_update(struct adapter *adap, struct neighbour *neigh); 103void t4_l2t_update(struct adapter *adap, struct neighbour *neigh);
103struct l2t_entry *t4_l2t_alloc_switching(struct l2t_data *d); 104struct l2t_entry *t4_l2t_alloc_switching(struct l2t_data *d);
104int t4_l2t_set_switching(struct adapter *adap, struct l2t_entry *e, u16 vlan, 105int t4_l2t_set_switching(struct adapter *adap, struct l2t_entry *e, u16 vlan,
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index 42745438c1e0..47ffa64fcf19 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -2583,7 +2583,7 @@ static int t4_sge_init_soft(struct adapter *adap)
2583 #undef READ_FL_BUF 2583 #undef READ_FL_BUF
2584 2584
2585 if (fl_small_pg != PAGE_SIZE || 2585 if (fl_small_pg != PAGE_SIZE ||
2586 (fl_large_pg != 0 && (fl_large_pg <= fl_small_pg || 2586 (fl_large_pg != 0 && (fl_large_pg < fl_small_pg ||
2587 (fl_large_pg & (fl_large_pg-1)) != 0))) { 2587 (fl_large_pg & (fl_large_pg-1)) != 0))) {
2588 dev_err(adap->pdev_dev, "bad SGE FL page buffer sizes [%d, %d]\n", 2588 dev_err(adap->pdev_dev, "bad SGE FL page buffer sizes [%d, %d]\n",
2589 fl_small_pg, fl_large_pg); 2589 fl_small_pg, fl_large_pg);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index 9903a66b7bad..a3964753935c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -3682,6 +3682,109 @@ int t4_prep_adapter(struct adapter *adapter)
3682 return 0; 3682 return 0;
3683} 3683}
3684 3684
3685/**
3686 * t4_init_tp_params - initialize adap->params.tp
3687 * @adap: the adapter
3688 *
3689 * Initialize various fields of the adapter's TP Parameters structure.
3690 */
3691int t4_init_tp_params(struct adapter *adap)
3692{
3693 int chan;
3694 u32 v;
3695
3696 v = t4_read_reg(adap, TP_TIMER_RESOLUTION);
3697 adap->params.tp.tre = TIMERRESOLUTION_GET(v);
3698 adap->params.tp.dack_re = DELAYEDACKRESOLUTION_GET(v);
3699
3700 /* MODQ_REQ_MAP defaults to setting queues 0-3 to chan 0-3 */
3701 for (chan = 0; chan < NCHAN; chan++)
3702 adap->params.tp.tx_modq[chan] = chan;
3703
3704 /* Cache the adapter's Compressed Filter Mode and global Incress
3705 * Configuration.
3706 */
3707 t4_read_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
3708 &adap->params.tp.vlan_pri_map, 1,
3709 TP_VLAN_PRI_MAP);
3710 t4_read_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA,
3711 &adap->params.tp.ingress_config, 1,
3712 TP_INGRESS_CONFIG);
3713
3714 /* Now that we have TP_VLAN_PRI_MAP cached, we can calculate the field
3715 * shift positions of several elements of the Compressed Filter Tuple
3716 * for this adapter which we need frequently ...
3717 */
3718 adap->params.tp.vlan_shift = t4_filter_field_shift(adap, F_VLAN);
3719 adap->params.tp.vnic_shift = t4_filter_field_shift(adap, F_VNIC_ID);
3720 adap->params.tp.port_shift = t4_filter_field_shift(adap, F_PORT);
3721 adap->params.tp.protocol_shift = t4_filter_field_shift(adap,
3722 F_PROTOCOL);
3723
3724 /* If TP_INGRESS_CONFIG.VNID == 0, then TP_VLAN_PRI_MAP.VNIC_ID
3725 * represents the presense of an Outer VLAN instead of a VNIC ID.
3726 */
3727 if ((adap->params.tp.ingress_config & F_VNIC) == 0)
3728 adap->params.tp.vnic_shift = -1;
3729
3730 return 0;
3731}
3732
3733/**
3734 * t4_filter_field_shift - calculate filter field shift
3735 * @adap: the adapter
3736 * @filter_sel: the desired field (from TP_VLAN_PRI_MAP bits)
3737 *
3738 * Return the shift position of a filter field within the Compressed
3739 * Filter Tuple. The filter field is specified via its selection bit
3740 * within TP_VLAN_PRI_MAL (filter mode). E.g. F_VLAN.
3741 */
3742int t4_filter_field_shift(const struct adapter *adap, int filter_sel)
3743{
3744 unsigned int filter_mode = adap->params.tp.vlan_pri_map;
3745 unsigned int sel;
3746 int field_shift;
3747
3748 if ((filter_mode & filter_sel) == 0)
3749 return -1;
3750
3751 for (sel = 1, field_shift = 0; sel < filter_sel; sel <<= 1) {
3752 switch (filter_mode & sel) {
3753 case F_FCOE:
3754 field_shift += W_FT_FCOE;
3755 break;
3756 case F_PORT:
3757 field_shift += W_FT_PORT;
3758 break;
3759 case F_VNIC_ID:
3760 field_shift += W_FT_VNIC_ID;
3761 break;
3762 case F_VLAN:
3763 field_shift += W_FT_VLAN;
3764 break;
3765 case F_TOS:
3766 field_shift += W_FT_TOS;
3767 break;
3768 case F_PROTOCOL:
3769 field_shift += W_FT_PROTOCOL;
3770 break;
3771 case F_ETHERTYPE:
3772 field_shift += W_FT_ETHERTYPE;
3773 break;
3774 case F_MACMATCH:
3775 field_shift += W_FT_MACMATCH;
3776 break;
3777 case F_MPSHITTYPE:
3778 field_shift += W_FT_MPSHITTYPE;
3779 break;
3780 case F_FRAGMENTATION:
3781 field_shift += W_FT_FRAGMENTATION;
3782 break;
3783 }
3784 }
3785 return field_shift;
3786}
3787
3685int t4_port_init(struct adapter *adap, int mbox, int pf, int vf) 3788int t4_port_init(struct adapter *adap, int mbox, int pf, int vf)
3686{ 3789{
3687 u8 addr[6]; 3790 u8 addr[6];
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
index 0a8205d69d2c..4082522d8140 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
@@ -1171,10 +1171,50 @@
1171 1171
1172#define A_TP_TX_SCHED_PCMD 0x25 1172#define A_TP_TX_SCHED_PCMD 0x25
1173 1173
1174#define S_VNIC 11
1175#define V_VNIC(x) ((x) << S_VNIC)
1176#define F_VNIC V_VNIC(1U)
1177
1178#define S_FRAGMENTATION 9
1179#define V_FRAGMENTATION(x) ((x) << S_FRAGMENTATION)
1180#define F_FRAGMENTATION V_FRAGMENTATION(1U)
1181
1182#define S_MPSHITTYPE 8
1183#define V_MPSHITTYPE(x) ((x) << S_MPSHITTYPE)
1184#define F_MPSHITTYPE V_MPSHITTYPE(1U)
1185
1186#define S_MACMATCH 7
1187#define V_MACMATCH(x) ((x) << S_MACMATCH)
1188#define F_MACMATCH V_MACMATCH(1U)
1189
1190#define S_ETHERTYPE 6
1191#define V_ETHERTYPE(x) ((x) << S_ETHERTYPE)
1192#define F_ETHERTYPE V_ETHERTYPE(1U)
1193
1194#define S_PROTOCOL 5
1195#define V_PROTOCOL(x) ((x) << S_PROTOCOL)
1196#define F_PROTOCOL V_PROTOCOL(1U)
1197
1198#define S_TOS 4
1199#define V_TOS(x) ((x) << S_TOS)
1200#define F_TOS V_TOS(1U)
1201
1202#define S_VLAN 3
1203#define V_VLAN(x) ((x) << S_VLAN)
1204#define F_VLAN V_VLAN(1U)
1205
1206#define S_VNIC_ID 2
1207#define V_VNIC_ID(x) ((x) << S_VNIC_ID)
1208#define F_VNIC_ID V_VNIC_ID(1U)
1209
1174#define S_PORT 1 1210#define S_PORT 1
1175#define V_PORT(x) ((x) << S_PORT) 1211#define V_PORT(x) ((x) << S_PORT)
1176#define F_PORT V_PORT(1U) 1212#define F_PORT V_PORT(1U)
1177 1213
1214#define S_FCOE 0
1215#define V_FCOE(x) ((x) << S_FCOE)
1216#define F_FCOE V_FCOE(1U)
1217
1178#define NUM_MPS_CLS_SRAM_L_INSTANCES 336 1218#define NUM_MPS_CLS_SRAM_L_INSTANCES 336
1179#define NUM_MPS_T5_CLS_SRAM_L_INSTANCES 512 1219#define NUM_MPS_T5_CLS_SRAM_L_INSTANCES 512
1180 1220
@@ -1213,4 +1253,37 @@
1213#define V_CHIPID(x) ((x) << S_CHIPID) 1253#define V_CHIPID(x) ((x) << S_CHIPID)
1214#define G_CHIPID(x) (((x) >> S_CHIPID) & M_CHIPID) 1254#define G_CHIPID(x) (((x) >> S_CHIPID) & M_CHIPID)
1215 1255
1256/* TP_VLAN_PRI_MAP controls which subset of fields will be present in the
1257 * Compressed Filter Tuple for LE filters. Each bit set in TP_VLAN_PRI_MAP
1258 * selects for a particular field being present. These fields, when present
1259 * in the Compressed Filter Tuple, have the following widths in bits.
1260 */
1261#define W_FT_FCOE 1
1262#define W_FT_PORT 3
1263#define W_FT_VNIC_ID 17
1264#define W_FT_VLAN 17
1265#define W_FT_TOS 8
1266#define W_FT_PROTOCOL 8
1267#define W_FT_ETHERTYPE 16
1268#define W_FT_MACMATCH 9
1269#define W_FT_MPSHITTYPE 3
1270#define W_FT_FRAGMENTATION 1
1271
1272/* Some of the Compressed Filter Tuple fields have internal structure. These
1273 * bit shifts/masks describe those structures. All shifts are relative to the
1274 * base position of the fields within the Compressed Filter Tuple
1275 */
1276#define S_FT_VLAN_VLD 16
1277#define V_FT_VLAN_VLD(x) ((x) << S_FT_VLAN_VLD)
1278#define F_FT_VLAN_VLD V_FT_VLAN_VLD(1U)
1279
1280#define S_FT_VNID_ID_VF 0
1281#define V_FT_VNID_ID_VF(x) ((x) << S_FT_VNID_ID_VF)
1282
1283#define S_FT_VNID_ID_PF 7
1284#define V_FT_VNID_ID_PF(x) ((x) << S_FT_VNID_ID_PF)
1285
1286#define S_FT_VNID_ID_VLD 16
1287#define V_FT_VNID_ID_VLD(x) ((x) << S_FT_VNID_ID_VLD)
1288
1216#endif /* __T4_REGS_H */ 1289#endif /* __T4_REGS_H */
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index 5878df619b53..4ccaf9af6fc9 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -104,6 +104,7 @@ static inline char *nic_name(struct pci_dev *pdev)
104#define BE3_MAX_RSS_QS 16 104#define BE3_MAX_RSS_QS 16
105#define BE3_MAX_TX_QS 16 105#define BE3_MAX_TX_QS 16
106#define BE3_MAX_EVT_QS 16 106#define BE3_MAX_EVT_QS 16
107#define BE3_SRIOV_MAX_EVT_QS 8
107 108
108#define MAX_RX_QS 32 109#define MAX_RX_QS 32
109#define MAX_EVT_QS 32 110#define MAX_EVT_QS 32
@@ -480,7 +481,7 @@ struct be_adapter {
480 struct list_head entry; 481 struct list_head entry;
481 482
482 u32 flash_status; 483 u32 flash_status;
483 struct completion flash_compl; 484 struct completion et_cmd_compl;
484 485
485 struct be_resources res; /* resources available for the func */ 486 struct be_resources res; /* resources available for the func */
486 u16 num_vfs; /* Number of VFs provisioned by PF */ 487 u16 num_vfs; /* Number of VFs provisioned by PF */
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index e0e8bc1ef14c..94c35c8d799d 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -141,11 +141,17 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
141 subsystem = resp_hdr->subsystem; 141 subsystem = resp_hdr->subsystem;
142 } 142 }
143 143
144 if (opcode == OPCODE_LOWLEVEL_LOOPBACK_TEST &&
145 subsystem == CMD_SUBSYSTEM_LOWLEVEL) {
146 complete(&adapter->et_cmd_compl);
147 return 0;
148 }
149
144 if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) || 150 if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) ||
145 (opcode == OPCODE_COMMON_WRITE_OBJECT)) && 151 (opcode == OPCODE_COMMON_WRITE_OBJECT)) &&
146 (subsystem == CMD_SUBSYSTEM_COMMON)) { 152 (subsystem == CMD_SUBSYSTEM_COMMON)) {
147 adapter->flash_status = compl_status; 153 adapter->flash_status = compl_status;
148 complete(&adapter->flash_compl); 154 complete(&adapter->et_cmd_compl);
149 } 155 }
150 156
151 if (compl_status == MCC_STATUS_SUCCESS) { 157 if (compl_status == MCC_STATUS_SUCCESS) {
@@ -2017,6 +2023,9 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable,
2017 0x3ea83c02, 0x4a110304}; 2023 0x3ea83c02, 0x4a110304};
2018 int status; 2024 int status;
2019 2025
2026 if (!(be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS))
2027 return 0;
2028
2020 if (mutex_lock_interruptible(&adapter->mbox_lock)) 2029 if (mutex_lock_interruptible(&adapter->mbox_lock))
2021 return -1; 2030 return -1;
2022 2031
@@ -2160,7 +2169,7 @@ int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
2160 be_mcc_notify(adapter); 2169 be_mcc_notify(adapter);
2161 spin_unlock_bh(&adapter->mcc_lock); 2170 spin_unlock_bh(&adapter->mcc_lock);
2162 2171
2163 if (!wait_for_completion_timeout(&adapter->flash_compl, 2172 if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
2164 msecs_to_jiffies(60000))) 2173 msecs_to_jiffies(60000)))
2165 status = -1; 2174 status = -1;
2166 else 2175 else
@@ -2255,8 +2264,8 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
2255 be_mcc_notify(adapter); 2264 be_mcc_notify(adapter);
2256 spin_unlock_bh(&adapter->mcc_lock); 2265 spin_unlock_bh(&adapter->mcc_lock);
2257 2266
2258 if (!wait_for_completion_timeout(&adapter->flash_compl, 2267 if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
2259 msecs_to_jiffies(40000))) 2268 msecs_to_jiffies(40000)))
2260 status = -1; 2269 status = -1;
2261 else 2270 else
2262 status = adapter->flash_status; 2271 status = adapter->flash_status;
@@ -2367,6 +2376,7 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
2367{ 2376{
2368 struct be_mcc_wrb *wrb; 2377 struct be_mcc_wrb *wrb;
2369 struct be_cmd_req_loopback_test *req; 2378 struct be_cmd_req_loopback_test *req;
2379 struct be_cmd_resp_loopback_test *resp;
2370 int status; 2380 int status;
2371 2381
2372 spin_lock_bh(&adapter->mcc_lock); 2382 spin_lock_bh(&adapter->mcc_lock);
@@ -2381,8 +2391,8 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
2381 2391
2382 be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL, 2392 be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL,
2383 OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req), wrb, NULL); 2393 OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req), wrb, NULL);
2384 req->hdr.timeout = cpu_to_le32(4);
2385 2394
2395 req->hdr.timeout = cpu_to_le32(15);
2386 req->pattern = cpu_to_le64(pattern); 2396 req->pattern = cpu_to_le64(pattern);
2387 req->src_port = cpu_to_le32(port_num); 2397 req->src_port = cpu_to_le32(port_num);
2388 req->dest_port = cpu_to_le32(port_num); 2398 req->dest_port = cpu_to_le32(port_num);
@@ -2390,12 +2400,15 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
2390 req->num_pkts = cpu_to_le32(num_pkts); 2400 req->num_pkts = cpu_to_le32(num_pkts);
2391 req->loopback_type = cpu_to_le32(loopback_type); 2401 req->loopback_type = cpu_to_le32(loopback_type);
2392 2402
2393 status = be_mcc_notify_wait(adapter); 2403 be_mcc_notify(adapter);
2394 if (!status) { 2404
2395 struct be_cmd_resp_loopback_test *resp = embedded_payload(wrb); 2405 spin_unlock_bh(&adapter->mcc_lock);
2396 status = le32_to_cpu(resp->status);
2397 }
2398 2406
2407 wait_for_completion(&adapter->et_cmd_compl);
2408 resp = embedded_payload(wrb);
2409 status = le32_to_cpu(resp->status);
2410
2411 return status;
2399err: 2412err:
2400 spin_unlock_bh(&adapter->mcc_lock); 2413 spin_unlock_bh(&adapter->mcc_lock);
2401 return status; 2414 return status;
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index b5c238aa6861..3acf137b5784 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2744,13 +2744,16 @@ static int be_rx_qs_create(struct be_adapter *adapter)
2744 if (!BEx_chip(adapter)) 2744 if (!BEx_chip(adapter))
2745 adapter->rss_flags |= RSS_ENABLE_UDP_IPV4 | 2745 adapter->rss_flags |= RSS_ENABLE_UDP_IPV4 |
2746 RSS_ENABLE_UDP_IPV6; 2746 RSS_ENABLE_UDP_IPV6;
2747 } else {
2748 /* Disable RSS, if only default RX Q is created */
2749 adapter->rss_flags = RSS_ENABLE_NONE;
2750 }
2747 2751
2748 rc = be_cmd_rss_config(adapter, rsstable, adapter->rss_flags, 2752 rc = be_cmd_rss_config(adapter, rsstable, adapter->rss_flags,
2749 128); 2753 128);
2750 if (rc) { 2754 if (rc) {
2751 adapter->rss_flags = 0; 2755 adapter->rss_flags = RSS_ENABLE_NONE;
2752 return rc; 2756 return rc;
2753 }
2754 } 2757 }
2755 2758
2756 /* First time posting */ 2759 /* First time posting */
@@ -3124,11 +3127,11 @@ static void BEx_get_resources(struct be_adapter *adapter,
3124{ 3127{
3125 struct pci_dev *pdev = adapter->pdev; 3128 struct pci_dev *pdev = adapter->pdev;
3126 bool use_sriov = false; 3129 bool use_sriov = false;
3130 int max_vfs;
3127 3131
3128 if (BE3_chip(adapter) && sriov_want(adapter)) { 3132 max_vfs = pci_sriov_get_totalvfs(pdev);
3129 int max_vfs;
3130 3133
3131 max_vfs = pci_sriov_get_totalvfs(pdev); 3134 if (BE3_chip(adapter) && sriov_want(adapter)) {
3132 res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0; 3135 res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
3133 use_sriov = res->max_vfs; 3136 use_sriov = res->max_vfs;
3134 } 3137 }
@@ -3159,7 +3162,11 @@ static void BEx_get_resources(struct be_adapter *adapter,
3159 BE3_MAX_RSS_QS : BE2_MAX_RSS_QS; 3162 BE3_MAX_RSS_QS : BE2_MAX_RSS_QS;
3160 res->max_rx_qs = res->max_rss_qs + 1; 3163 res->max_rx_qs = res->max_rss_qs + 1;
3161 3164
3162 res->max_evt_qs = be_physfn(adapter) ? BE3_MAX_EVT_QS : 1; 3165 if (be_physfn(adapter))
3166 res->max_evt_qs = (max_vfs > 0) ?
3167 BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS;
3168 else
3169 res->max_evt_qs = 1;
3163 3170
3164 res->if_cap_flags = BE_IF_CAP_FLAGS_WANT; 3171 res->if_cap_flags = BE_IF_CAP_FLAGS_WANT;
3165 if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS)) 3172 if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
@@ -4205,7 +4212,7 @@ static int be_ctrl_init(struct be_adapter *adapter)
4205 spin_lock_init(&adapter->mcc_lock); 4212 spin_lock_init(&adapter->mcc_lock);
4206 spin_lock_init(&adapter->mcc_cq_lock); 4213 spin_lock_init(&adapter->mcc_cq_lock);
4207 4214
4208 init_completion(&adapter->flash_compl); 4215 init_completion(&adapter->et_cmd_compl);
4209 pci_save_state(adapter->pdev); 4216 pci_save_state(adapter->pdev);
4210 return 0; 4217 return 0;
4211 4218
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 05cd81aa9813..6530177d53e7 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -428,6 +428,8 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
428 /* If this was the last BD in the ring, start at the beginning again. */ 428 /* If this was the last BD in the ring, start at the beginning again. */
429 bdp = fec_enet_get_nextdesc(bdp, fep); 429 bdp = fec_enet_get_nextdesc(bdp, fep);
430 430
431 skb_tx_timestamp(skb);
432
431 fep->cur_tx = bdp; 433 fep->cur_tx = bdp;
432 434
433 if (fep->cur_tx == fep->dirty_tx) 435 if (fep->cur_tx == fep->dirty_tx)
@@ -436,8 +438,6 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
436 /* Trigger transmission start */ 438 /* Trigger transmission start */
437 writel(0, fep->hwp + FEC_X_DES_ACTIVE); 439 writel(0, fep->hwp + FEC_X_DES_ACTIVE);
438 440
439 skb_tx_timestamp(skb);
440
441 return NETDEV_TX_OK; 441 return NETDEV_TX_OK;
442} 442}
443 443
diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
index 895450e9bb3c..ff2d806eaef7 100644
--- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c
+++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
@@ -718,8 +718,11 @@ static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
718 e1000_release_phy_80003es2lan(hw); 718 e1000_release_phy_80003es2lan(hw);
719 719
720 /* Disable IBIST slave mode (far-end loopback) */ 720 /* Disable IBIST slave mode (far-end loopback) */
721 e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM, 721 ret_val =
722 &kum_reg_data); 722 e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
723 &kum_reg_data);
724 if (ret_val)
725 return ret_val;
723 kum_reg_data |= E1000_KMRNCTRLSTA_IBIST_DISABLE; 726 kum_reg_data |= E1000_KMRNCTRLSTA_IBIST_DISABLE;
724 e1000_write_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM, 727 e1000_write_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
725 kum_reg_data); 728 kum_reg_data);
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 051d1583e211..d6570b2d5a6b 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -6184,7 +6184,7 @@ static int __e1000_resume(struct pci_dev *pdev)
6184 return 0; 6184 return 0;
6185} 6185}
6186 6186
6187#ifdef CONFIG_PM_SLEEP 6187#ifdef CONFIG_PM
6188static int e1000_suspend(struct device *dev) 6188static int e1000_suspend(struct device *dev)
6189{ 6189{
6190 struct pci_dev *pdev = to_pci_dev(dev); 6190 struct pci_dev *pdev = to_pci_dev(dev);
@@ -6203,7 +6203,7 @@ static int e1000_resume(struct device *dev)
6203 6203
6204 return __e1000_resume(pdev); 6204 return __e1000_resume(pdev);
6205} 6205}
6206#endif /* CONFIG_PM_SLEEP */ 6206#endif /* CONFIG_PM */
6207 6207
6208#ifdef CONFIG_PM_RUNTIME 6208#ifdef CONFIG_PM_RUNTIME
6209static int e1000_runtime_suspend(struct device *dev) 6209static int e1000_runtime_suspend(struct device *dev)
diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c
index da2be59505c0..20e71f4ca426 100644
--- a/drivers/net/ethernet/intel/e1000e/phy.c
+++ b/drivers/net/ethernet/intel/e1000e/phy.c
@@ -1757,19 +1757,23 @@ s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
1757 * it across the board. 1757 * it across the board.
1758 */ 1758 */
1759 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status); 1759 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status);
1760 if (ret_val) 1760 if (ret_val) {
1761 /* If the first read fails, another entity may have 1761 /* If the first read fails, another entity may have
1762 * ownership of the resources, wait and try again to 1762 * ownership of the resources, wait and try again to
1763 * see if they have relinquished the resources yet. 1763 * see if they have relinquished the resources yet.
1764 */ 1764 */
1765 udelay(usec_interval); 1765 if (usec_interval >= 1000)
1766 msleep(usec_interval / 1000);
1767 else
1768 udelay(usec_interval);
1769 }
1766 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status); 1770 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status);
1767 if (ret_val) 1771 if (ret_val)
1768 break; 1772 break;
1769 if (phy_status & BMSR_LSTATUS) 1773 if (phy_status & BMSR_LSTATUS)
1770 break; 1774 break;
1771 if (usec_interval >= 1000) 1775 if (usec_interval >= 1000)
1772 mdelay(usec_interval / 1000); 1776 msleep(usec_interval / 1000);
1773 else 1777 else
1774 udelay(usec_interval); 1778 udelay(usec_interval);
1775 } 1779 }
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index 9ce07f3ef62d..359f6e60320d 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -291,7 +291,9 @@ static int ixgbe_pci_sriov_disable(struct pci_dev *dev)
291{ 291{
292 struct ixgbe_adapter *adapter = pci_get_drvdata(dev); 292 struct ixgbe_adapter *adapter = pci_get_drvdata(dev);
293 int err; 293 int err;
294#ifdef CONFIG_PCI_IOV
294 u32 current_flags = adapter->flags; 295 u32 current_flags = adapter->flags;
296#endif
295 297
296 err = ixgbe_disable_sriov(adapter); 298 err = ixgbe_disable_sriov(adapter);
297 299
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index 7354960b583b..c4eeb69a5bee 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -92,6 +92,12 @@ static int orion_mdio_wait_ready(struct mii_bus *bus)
92 if (time_is_before_jiffies(end)) 92 if (time_is_before_jiffies(end))
93 ++timedout; 93 ++timedout;
94 } else { 94 } else {
95 /* wait_event_timeout does not guarantee a delay of at
96 * least one whole jiffie, so timeout must be no less
97 * than two.
98 */
99 if (timeout < 2)
100 timeout = 2;
95 wait_event_timeout(dev->smi_busy_wait, 101 wait_event_timeout(dev->smi_busy_wait,
96 orion_mdio_smi_is_done(dev), 102 orion_mdio_smi_is_done(dev),
97 timeout); 103 timeout);
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
index 3010abb55fbd..32058614151a 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
@@ -1602,13 +1602,13 @@ netxen_process_lro(struct netxen_adapter *adapter,
1602 u32 seq_number; 1602 u32 seq_number;
1603 u8 vhdr_len = 0; 1603 u8 vhdr_len = 0;
1604 1604
1605 if (unlikely(ring > adapter->max_rds_rings)) 1605 if (unlikely(ring >= adapter->max_rds_rings))
1606 return NULL; 1606 return NULL;
1607 1607
1608 rds_ring = &recv_ctx->rds_rings[ring]; 1608 rds_ring = &recv_ctx->rds_rings[ring];
1609 1609
1610 index = netxen_get_lro_sts_refhandle(sts_data0); 1610 index = netxen_get_lro_sts_refhandle(sts_data0);
1611 if (unlikely(index > rds_ring->num_desc)) 1611 if (unlikely(index >= rds_ring->num_desc))
1612 return NULL; 1612 return NULL;
1613 1613
1614 buffer = &rds_ring->rx_buf_arr[index]; 1614 buffer = &rds_ring->rx_buf_arr[index];
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 4afdef0cc175..35d48766d842 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -493,6 +493,7 @@ struct qlcnic_hardware_context {
493 struct qlcnic_mailbox *mailbox; 493 struct qlcnic_mailbox *mailbox;
494 u8 extend_lb_time; 494 u8 extend_lb_time;
495 u8 phys_port_id[ETH_ALEN]; 495 u8 phys_port_id[ETH_ALEN];
496 u8 lb_mode;
496}; 497};
497 498
498struct qlcnic_adapter_stats { 499struct qlcnic_adapter_stats {
@@ -584,6 +585,8 @@ struct qlcnic_host_tx_ring {
584 dma_addr_t phys_addr; 585 dma_addr_t phys_addr;
585 dma_addr_t hw_cons_phys_addr; 586 dma_addr_t hw_cons_phys_addr;
586 struct netdev_queue *txq; 587 struct netdev_queue *txq;
588 /* Lock to protect Tx descriptors cleanup */
589 spinlock_t tx_clean_lock;
587} ____cacheline_internodealigned_in_smp; 590} ____cacheline_internodealigned_in_smp;
588 591
589/* 592/*
@@ -815,6 +818,7 @@ struct qlcnic_mac_vlan_list {
815 818
816#define QLCNIC_ILB_MODE 0x1 819#define QLCNIC_ILB_MODE 0x1
817#define QLCNIC_ELB_MODE 0x2 820#define QLCNIC_ELB_MODE 0x2
821#define QLCNIC_LB_MODE_MASK 0x3
818 822
819#define QLCNIC_LINKEVENT 0x1 823#define QLCNIC_LINKEVENT 0x1
820#define QLCNIC_LB_RESPONSE 0x2 824#define QLCNIC_LB_RESPONSE 0x2
@@ -1100,7 +1104,6 @@ struct qlcnic_adapter {
1100 struct qlcnic_filter_hash rx_fhash; 1104 struct qlcnic_filter_hash rx_fhash;
1101 struct list_head vf_mc_list; 1105 struct list_head vf_mc_list;
1102 1106
1103 spinlock_t tx_clean_lock;
1104 spinlock_t mac_learn_lock; 1107 spinlock_t mac_learn_lock;
1105 /* spinlock for catching rcv filters for eswitch traffic */ 1108 /* spinlock for catching rcv filters for eswitch traffic */
1106 spinlock_t rx_mac_learn_lock; 1109 spinlock_t rx_mac_learn_lock;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index b3fd1605773e..03eb2ad9611a 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -1685,12 +1685,6 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)
1685 } 1685 }
1686 } while ((adapter->ahw->linkup && ahw->has_link_events) != 1); 1686 } while ((adapter->ahw->linkup && ahw->has_link_events) != 1);
1687 1687
1688 /* Make sure carrier is off and queue is stopped during loopback */
1689 if (netif_running(netdev)) {
1690 netif_carrier_off(netdev);
1691 netif_tx_stop_all_queues(netdev);
1692 }
1693
1694 ret = qlcnic_do_lb_test(adapter, mode); 1688 ret = qlcnic_do_lb_test(adapter, mode);
1695 1689
1696 qlcnic_83xx_clear_lb_mode(adapter, mode); 1690 qlcnic_83xx_clear_lb_mode(adapter, mode);
@@ -2122,6 +2116,7 @@ static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter,
2122 ahw->link_autoneg = MSB(MSW(data[3])); 2116 ahw->link_autoneg = MSB(MSW(data[3]));
2123 ahw->module_type = MSB(LSW(data[3])); 2117 ahw->module_type = MSB(LSW(data[3]));
2124 ahw->has_link_events = 1; 2118 ahw->has_link_events = 1;
2119 ahw->lb_mode = data[4] & QLCNIC_LB_MODE_MASK;
2125 qlcnic_advert_link_change(adapter, link_status); 2120 qlcnic_advert_link_change(adapter, link_status);
2126} 2121}
2127 2122
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
index e9c21e5d0ca9..c4262c23ed7c 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
@@ -134,6 +134,8 @@ void qlcnic_release_tx_buffers(struct qlcnic_adapter *adapter,
134 struct qlcnic_skb_frag *buffrag; 134 struct qlcnic_skb_frag *buffrag;
135 int i, j; 135 int i, j;
136 136
137 spin_lock(&tx_ring->tx_clean_lock);
138
137 cmd_buf = tx_ring->cmd_buf_arr; 139 cmd_buf = tx_ring->cmd_buf_arr;
138 for (i = 0; i < tx_ring->num_desc; i++) { 140 for (i = 0; i < tx_ring->num_desc; i++) {
139 buffrag = cmd_buf->frag_array; 141 buffrag = cmd_buf->frag_array;
@@ -157,6 +159,8 @@ void qlcnic_release_tx_buffers(struct qlcnic_adapter *adapter,
157 } 159 }
158 cmd_buf++; 160 cmd_buf++;
159 } 161 }
162
163 spin_unlock(&tx_ring->tx_clean_lock);
160} 164}
161 165
162void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter) 166void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index a215e0f69335..6373f6022486 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -689,6 +689,10 @@ void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup)
689 adapter->ahw->linkup = 0; 689 adapter->ahw->linkup = 0;
690 netif_carrier_off(netdev); 690 netif_carrier_off(netdev);
691 } else if (!adapter->ahw->linkup && linkup) { 691 } else if (!adapter->ahw->linkup && linkup) {
692 /* Do not advertise Link up if the port is in loopback mode */
693 if (qlcnic_83xx_check(adapter) && adapter->ahw->lb_mode)
694 return;
695
692 netdev_info(netdev, "NIC Link is up\n"); 696 netdev_info(netdev, "NIC Link is up\n");
693 adapter->ahw->linkup = 1; 697 adapter->ahw->linkup = 1;
694 netif_carrier_on(netdev); 698 netif_carrier_on(netdev);
@@ -778,7 +782,7 @@ static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter,
778 struct net_device *netdev = adapter->netdev; 782 struct net_device *netdev = adapter->netdev;
779 struct qlcnic_skb_frag *frag; 783 struct qlcnic_skb_frag *frag;
780 784
781 if (!spin_trylock(&adapter->tx_clean_lock)) 785 if (!spin_trylock(&tx_ring->tx_clean_lock))
782 return 1; 786 return 1;
783 787
784 sw_consumer = tx_ring->sw_consumer; 788 sw_consumer = tx_ring->sw_consumer;
@@ -807,8 +811,9 @@ static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter,
807 break; 811 break;
808 } 812 }
809 813
814 tx_ring->sw_consumer = sw_consumer;
815
810 if (count && netif_running(netdev)) { 816 if (count && netif_running(netdev)) {
811 tx_ring->sw_consumer = sw_consumer;
812 smp_mb(); 817 smp_mb();
813 if (netif_tx_queue_stopped(tx_ring->txq) && 818 if (netif_tx_queue_stopped(tx_ring->txq) &&
814 netif_carrier_ok(netdev)) { 819 netif_carrier_ok(netdev)) {
@@ -834,7 +839,8 @@ static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter,
834 */ 839 */
835 hw_consumer = le32_to_cpu(*(tx_ring->hw_consumer)); 840 hw_consumer = le32_to_cpu(*(tx_ring->hw_consumer));
836 done = (sw_consumer == hw_consumer); 841 done = (sw_consumer == hw_consumer);
837 spin_unlock(&adapter->tx_clean_lock); 842
843 spin_unlock(&tx_ring->tx_clean_lock);
838 844
839 return done; 845 return done;
840} 846}
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index d131ec1321e8..eeec83a0e664 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -1757,7 +1757,6 @@ void __qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev)
1757 if (qlcnic_sriov_vf_check(adapter)) 1757 if (qlcnic_sriov_vf_check(adapter))
1758 qlcnic_sriov_cleanup_async_list(&adapter->ahw->sriov->bc); 1758 qlcnic_sriov_cleanup_async_list(&adapter->ahw->sriov->bc);
1759 smp_mb(); 1759 smp_mb();
1760 spin_lock(&adapter->tx_clean_lock);
1761 netif_carrier_off(netdev); 1760 netif_carrier_off(netdev);
1762 adapter->ahw->linkup = 0; 1761 adapter->ahw->linkup = 0;
1763 netif_tx_disable(netdev); 1762 netif_tx_disable(netdev);
@@ -1778,7 +1777,6 @@ void __qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev)
1778 1777
1779 for (ring = 0; ring < adapter->drv_tx_rings; ring++) 1778 for (ring = 0; ring < adapter->drv_tx_rings; ring++)
1780 qlcnic_release_tx_buffers(adapter, &adapter->tx_ring[ring]); 1779 qlcnic_release_tx_buffers(adapter, &adapter->tx_ring[ring]);
1781 spin_unlock(&adapter->tx_clean_lock);
1782} 1780}
1783 1781
1784/* Usage: During suspend and firmware recovery module */ 1782/* Usage: During suspend and firmware recovery module */
@@ -2173,6 +2171,7 @@ int qlcnic_alloc_tx_rings(struct qlcnic_adapter *adapter,
2173 } 2171 }
2174 memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring)); 2172 memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring));
2175 tx_ring->cmd_buf_arr = cmd_buf_arr; 2173 tx_ring->cmd_buf_arr = cmd_buf_arr;
2174 spin_lock_init(&tx_ring->tx_clean_lock);
2176 } 2175 }
2177 2176
2178 if (qlcnic_83xx_check(adapter) || 2177 if (qlcnic_83xx_check(adapter) ||
@@ -2300,7 +2299,6 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2300 rwlock_init(&adapter->ahw->crb_lock); 2299 rwlock_init(&adapter->ahw->crb_lock);
2301 mutex_init(&adapter->ahw->mem_lock); 2300 mutex_init(&adapter->ahw->mem_lock);
2302 2301
2303 spin_lock_init(&adapter->tx_clean_lock);
2304 INIT_LIST_HEAD(&adapter->mac_list); 2302 INIT_LIST_HEAD(&adapter->mac_list);
2305 2303
2306 qlcnic_register_dcb(adapter); 2304 qlcnic_register_dcb(adapter);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
index 98b621fb1227..d14d9a139eef 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
@@ -81,9 +81,12 @@ static int qlcnic_sriov_pf_cal_res_limit(struct qlcnic_adapter *adapter,
81 if (qlcnic_83xx_pf_check(adapter)) 81 if (qlcnic_83xx_pf_check(adapter))
82 num_macs = 1; 82 num_macs = 1;
83 83
84 info->max_rx_mcast_mac_filters = res->num_rx_mcast_mac_filters;
85
84 if (adapter->ahw->pci_func == func) { 86 if (adapter->ahw->pci_func == func) {
85 info->min_tx_bw = 0; 87 info->min_tx_bw = 0;
86 info->max_tx_bw = MAX_BW; 88 info->max_tx_bw = MAX_BW;
89
87 temp = res->num_rx_ucast_mac_filters - num_macs * num_vfs; 90 temp = res->num_rx_ucast_mac_filters - num_macs * num_vfs;
88 info->max_rx_ucast_mac_filters = temp; 91 info->max_rx_ucast_mac_filters = temp;
89 temp = res->num_tx_mac_filters - num_macs * num_vfs; 92 temp = res->num_tx_mac_filters - num_macs * num_vfs;
@@ -92,6 +95,7 @@ static int qlcnic_sriov_pf_cal_res_limit(struct qlcnic_adapter *adapter,
92 temp = res->num_rx_mcast_mac_filters - temp; 95 temp = res->num_rx_mcast_mac_filters - temp;
93 info->max_rx_mcast_mac_filters = temp; 96 info->max_rx_mcast_mac_filters = temp;
94 97
98 info->max_tx_ques = res->num_tx_queues - sriov->num_vfs;
95 } else { 99 } else {
96 id = qlcnic_sriov_func_to_index(adapter, func); 100 id = qlcnic_sriov_func_to_index(adapter, func);
97 if (id < 0) 101 if (id < 0)
@@ -99,10 +103,13 @@ static int qlcnic_sriov_pf_cal_res_limit(struct qlcnic_adapter *adapter,
99 vp = sriov->vf_info[id].vp; 103 vp = sriov->vf_info[id].vp;
100 info->min_tx_bw = vp->min_tx_bw; 104 info->min_tx_bw = vp->min_tx_bw;
101 info->max_tx_bw = vp->max_tx_bw; 105 info->max_tx_bw = vp->max_tx_bw;
106
102 info->max_rx_ucast_mac_filters = num_macs; 107 info->max_rx_ucast_mac_filters = num_macs;
103 info->max_tx_mac_filters = num_macs; 108 info->max_tx_mac_filters = num_macs;
104 temp = num_macs * QLCNIC_SRIOV_VF_MAX_MAC; 109 temp = num_macs * QLCNIC_SRIOV_VF_MAX_MAC;
105 info->max_rx_mcast_mac_filters = temp; 110 info->max_rx_mcast_mac_filters = temp;
111
112 info->max_tx_ques = QLCNIC_SINGLE_RING;
106 } 113 }
107 114
108 info->max_rx_ip_addr = res->num_destip / max; 115 info->max_rx_ip_addr = res->num_destip / max;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 216141028125..b8e3a4ce24b0 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -622,17 +622,15 @@ static int stmmac_init_ptp(struct stmmac_priv *priv)
622 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp)) 622 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
623 return -EOPNOTSUPP; 623 return -EOPNOTSUPP;
624 624
625 if (netif_msg_hw(priv)) { 625 priv->adv_ts = 0;
626 if (priv->dma_cap.time_stamp) { 626 if (priv->dma_cap.atime_stamp && priv->extend_desc)
627 pr_debug("IEEE 1588-2002 Time Stamp supported\n"); 627 priv->adv_ts = 1;
628 priv->adv_ts = 0; 628
629 } 629 if (netif_msg_hw(priv) && priv->dma_cap.time_stamp)
630 if (priv->dma_cap.atime_stamp && priv->extend_desc) { 630 pr_debug("IEEE 1588-2002 Time Stamp supported\n");
631 pr_debug 631
632 ("IEEE 1588-2008 Advanced Time Stamp supported\n"); 632 if (netif_msg_hw(priv) && priv->adv_ts)
633 priv->adv_ts = 1; 633 pr_debug("IEEE 1588-2008 Advanced Time Stamp supported\n");
634 }
635 }
636 634
637 priv->hw->ptp = &stmmac_ptp; 635 priv->hw->ptp = &stmmac_ptp;
638 priv->hwts_tx_en = 0; 636 priv->hwts_tx_en = 0;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
index b8b0eeed0f92..7680581ebe12 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
@@ -56,7 +56,7 @@ static int stmmac_adjust_freq(struct ptp_clock_info *ptp, s32 ppb)
56 56
57 priv->hw->ptp->config_addend(priv->ioaddr, addend); 57 priv->hw->ptp->config_addend(priv->ioaddr, addend);
58 58
59 spin_unlock_irqrestore(&priv->lock, flags); 59 spin_unlock_irqrestore(&priv->ptp_lock, flags);
60 60
61 return 0; 61 return 0;
62} 62}
@@ -91,7 +91,7 @@ static int stmmac_adjust_time(struct ptp_clock_info *ptp, s64 delta)
91 91
92 priv->hw->ptp->adjust_systime(priv->ioaddr, sec, nsec, neg_adj); 92 priv->hw->ptp->adjust_systime(priv->ioaddr, sec, nsec, neg_adj);
93 93
94 spin_unlock_irqrestore(&priv->lock, flags); 94 spin_unlock_irqrestore(&priv->ptp_lock, flags);
95 95
96 return 0; 96 return 0;
97} 97}
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 243fffbe18e8..e8bb77d25d98 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -740,6 +740,8 @@ static void _cpsw_adjust_link(struct cpsw_slave *slave,
740 /* set speed_in input in case RMII mode is used in 100Mbps */ 740 /* set speed_in input in case RMII mode is used in 100Mbps */
741 if (phy->speed == 100) 741 if (phy->speed == 100)
742 mac_control |= BIT(15); 742 mac_control |= BIT(15);
743 else if (phy->speed == 10)
744 mac_control |= BIT(18); /* In Band mode */
743 745
744 *link = true; 746 *link = true;
745 } else { 747 } else {
@@ -2126,7 +2128,7 @@ static int cpsw_probe(struct platform_device *pdev)
2126 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) { 2128 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
2127 for (i = res->start; i <= res->end; i++) { 2129 for (i = res->start; i <= res->end; i++) {
2128 if (devm_request_irq(&pdev->dev, i, cpsw_interrupt, 0, 2130 if (devm_request_irq(&pdev->dev, i, cpsw_interrupt, 0,
2129 dev_name(priv->dev), priv)) { 2131 dev_name(&pdev->dev), priv)) {
2130 dev_err(priv->dev, "error attaching irq\n"); 2132 dev_err(priv->dev, "error attaching irq\n");
2131 goto clean_ale_ret; 2133 goto clean_ale_ret;
2132 } 2134 }