aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/dsa/bcm_sf2_cfp.c6
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c53
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c3
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c2
-rw-r--r--drivers/net/ieee802154/mcr20a.c6
-rw-r--r--drivers/net/phy/marvell.c6
-rw-r--r--drivers/net/slip/slhc.c2
-rw-r--r--drivers/net/usb/qmi_wwan.c10
-rw-r--r--drivers/net/wireless/ath/ath10k/ce.c2
-rw-r--r--drivers/net/wireless/ath/ath10k/core.c1
-rw-r--r--drivers/net/wireless/ath/ath10k/core.h3
-rw-r--r--drivers/net/wireless/ath/ath10k/coredump.c6
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c4
-rw-r--r--drivers/net/wireless/ath/ath10k/pci.c24
-rw-r--r--drivers/net/wireless/ath/ath10k/pci.h2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/22000.c2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/5000.c3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/fw/file.h15
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/debugfs-vif.c5
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw.c4
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/ops.c2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c28
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/trans.c19
-rw-r--r--drivers/net/wireless/marvell/mwifiex/sdio.c2
25 files changed, 155 insertions, 58 deletions
diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c
index e6234d209787..4212bc4a5f31 100644
--- a/drivers/net/dsa/bcm_sf2_cfp.c
+++ b/drivers/net/dsa/bcm_sf2_cfp.c
@@ -886,6 +886,9 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port,
886 fs->m_ext.data[1])) 886 fs->m_ext.data[1]))
887 return -EINVAL; 887 return -EINVAL;
888 888
889 if (fs->location != RX_CLS_LOC_ANY && fs->location >= CFP_NUM_RULES)
890 return -EINVAL;
891
889 if (fs->location != RX_CLS_LOC_ANY && 892 if (fs->location != RX_CLS_LOC_ANY &&
890 test_bit(fs->location, priv->cfp.used)) 893 test_bit(fs->location, priv->cfp.used))
891 return -EBUSY; 894 return -EBUSY;
@@ -974,6 +977,9 @@ static int bcm_sf2_cfp_rule_del(struct bcm_sf2_priv *priv, int port, u32 loc)
974 struct cfp_rule *rule; 977 struct cfp_rule *rule;
975 int ret; 978 int ret;
976 979
980 if (loc >= CFP_NUM_RULES)
981 return -EINVAL;
982
977 /* Refuse deleting unused rules, and those that are not unique since 983 /* Refuse deleting unused rules, and those that are not unique since
978 * that could leave IPv6 rules with one of the chained rule in the 984 * that could leave IPv6 rules with one of the chained rule in the
979 * table. 985 * table.
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 526f36dcb204..a0de3c368f4a 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -1625,7 +1625,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
1625 netdev_warn(bp->dev, "RX buffer error %x\n", rx_err); 1625 netdev_warn(bp->dev, "RX buffer error %x\n", rx_err);
1626 bnxt_sched_reset(bp, rxr); 1626 bnxt_sched_reset(bp, rxr);
1627 } 1627 }
1628 goto next_rx; 1628 goto next_rx_no_len;
1629 } 1629 }
1630 1630
1631 len = le32_to_cpu(rxcmp->rx_cmp_len_flags_type) >> RX_CMP_LEN_SHIFT; 1631 len = le32_to_cpu(rxcmp->rx_cmp_len_flags_type) >> RX_CMP_LEN_SHIFT;
@@ -1706,12 +1706,13 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
1706 rc = 1; 1706 rc = 1;
1707 1707
1708next_rx: 1708next_rx:
1709 rxr->rx_prod = NEXT_RX(prod);
1710 rxr->rx_next_cons = NEXT_RX(cons);
1711
1712 cpr->rx_packets += 1; 1709 cpr->rx_packets += 1;
1713 cpr->rx_bytes += len; 1710 cpr->rx_bytes += len;
1714 1711
1712next_rx_no_len:
1713 rxr->rx_prod = NEXT_RX(prod);
1714 rxr->rx_next_cons = NEXT_RX(cons);
1715
1715next_rx_no_prod_no_len: 1716next_rx_no_prod_no_len:
1716 *raw_cons = tmp_raw_cons; 1717 *raw_cons = tmp_raw_cons;
1717 1718
@@ -5135,10 +5136,10 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
5135 for (i = 0; i < bp->tx_nr_rings; i++) { 5136 for (i = 0; i < bp->tx_nr_rings; i++) {
5136 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i]; 5137 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
5137 struct bnxt_ring_struct *ring = &txr->tx_ring_struct; 5138 struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
5138 u32 cmpl_ring_id;
5139 5139
5140 cmpl_ring_id = bnxt_cp_ring_for_tx(bp, txr);
5141 if (ring->fw_ring_id != INVALID_HW_RING_ID) { 5140 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5141 u32 cmpl_ring_id = bnxt_cp_ring_for_tx(bp, txr);
5142
5142 hwrm_ring_free_send_msg(bp, ring, 5143 hwrm_ring_free_send_msg(bp, ring,
5143 RING_FREE_REQ_RING_TYPE_TX, 5144 RING_FREE_REQ_RING_TYPE_TX,
5144 close_path ? cmpl_ring_id : 5145 close_path ? cmpl_ring_id :
@@ -5151,10 +5152,10 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
5151 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i]; 5152 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
5152 struct bnxt_ring_struct *ring = &rxr->rx_ring_struct; 5153 struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
5153 u32 grp_idx = rxr->bnapi->index; 5154 u32 grp_idx = rxr->bnapi->index;
5154 u32 cmpl_ring_id;
5155 5155
5156 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
5157 if (ring->fw_ring_id != INVALID_HW_RING_ID) { 5156 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5157 u32 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
5158
5158 hwrm_ring_free_send_msg(bp, ring, 5159 hwrm_ring_free_send_msg(bp, ring,
5159 RING_FREE_REQ_RING_TYPE_RX, 5160 RING_FREE_REQ_RING_TYPE_RX,
5160 close_path ? cmpl_ring_id : 5161 close_path ? cmpl_ring_id :
@@ -5173,10 +5174,10 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
5173 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i]; 5174 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
5174 struct bnxt_ring_struct *ring = &rxr->rx_agg_ring_struct; 5175 struct bnxt_ring_struct *ring = &rxr->rx_agg_ring_struct;
5175 u32 grp_idx = rxr->bnapi->index; 5176 u32 grp_idx = rxr->bnapi->index;
5176 u32 cmpl_ring_id;
5177 5177
5178 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
5179 if (ring->fw_ring_id != INVALID_HW_RING_ID) { 5178 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5179 u32 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
5180
5180 hwrm_ring_free_send_msg(bp, ring, type, 5181 hwrm_ring_free_send_msg(bp, ring, type,
5181 close_path ? cmpl_ring_id : 5182 close_path ? cmpl_ring_id :
5182 INVALID_HW_RING_ID); 5183 INVALID_HW_RING_ID);
@@ -5315,17 +5316,16 @@ __bnxt_hwrm_reserve_pf_rings(struct bnxt *bp, struct hwrm_func_cfg_input *req,
5315 req->num_tx_rings = cpu_to_le16(tx_rings); 5316 req->num_tx_rings = cpu_to_le16(tx_rings);
5316 if (BNXT_NEW_RM(bp)) { 5317 if (BNXT_NEW_RM(bp)) {
5317 enables |= rx_rings ? FUNC_CFG_REQ_ENABLES_NUM_RX_RINGS : 0; 5318 enables |= rx_rings ? FUNC_CFG_REQ_ENABLES_NUM_RX_RINGS : 0;
5319 enables |= stats ? FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5318 if (bp->flags & BNXT_FLAG_CHIP_P5) { 5320 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5319 enables |= cp_rings ? FUNC_CFG_REQ_ENABLES_NUM_MSIX : 0; 5321 enables |= cp_rings ? FUNC_CFG_REQ_ENABLES_NUM_MSIX : 0;
5320 enables |= tx_rings + ring_grps ? 5322 enables |= tx_rings + ring_grps ?
5321 FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS | 5323 FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5322 FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5323 enables |= rx_rings ? 5324 enables |= rx_rings ?
5324 FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0; 5325 FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0;
5325 } else { 5326 } else {
5326 enables |= cp_rings ? 5327 enables |= cp_rings ?
5327 FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS | 5328 FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5328 FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5329 enables |= ring_grps ? 5329 enables |= ring_grps ?
5330 FUNC_CFG_REQ_ENABLES_NUM_HW_RING_GRPS | 5330 FUNC_CFG_REQ_ENABLES_NUM_HW_RING_GRPS |
5331 FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0; 5331 FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0;
@@ -5365,14 +5365,13 @@ __bnxt_hwrm_reserve_vf_rings(struct bnxt *bp,
5365 enables |= tx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_TX_RINGS : 0; 5365 enables |= tx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_TX_RINGS : 0;
5366 enables |= rx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_RX_RINGS | 5366 enables |= rx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_RX_RINGS |
5367 FUNC_VF_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0; 5367 FUNC_VF_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0;
5368 enables |= stats ? FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5368 if (bp->flags & BNXT_FLAG_CHIP_P5) { 5369 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5369 enables |= tx_rings + ring_grps ? 5370 enables |= tx_rings + ring_grps ?
5370 FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS | 5371 FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5371 FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5372 } else { 5372 } else {
5373 enables |= cp_rings ? 5373 enables |= cp_rings ?
5374 FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS | 5374 FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5375 FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5376 enables |= ring_grps ? 5375 enables |= ring_grps ?
5377 FUNC_VF_CFG_REQ_ENABLES_NUM_HW_RING_GRPS : 0; 5376 FUNC_VF_CFG_REQ_ENABLES_NUM_HW_RING_GRPS : 0;
5378 } 5377 }
@@ -6753,6 +6752,7 @@ static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp)
6753 struct hwrm_queue_pri2cos_qcfg_input req2 = {0}; 6752 struct hwrm_queue_pri2cos_qcfg_input req2 = {0};
6754 struct hwrm_port_qstats_ext_input req = {0}; 6753 struct hwrm_port_qstats_ext_input req = {0};
6755 struct bnxt_pf_info *pf = &bp->pf; 6754 struct bnxt_pf_info *pf = &bp->pf;
6755 u32 tx_stat_size;
6756 int rc; 6756 int rc;
6757 6757
6758 if (!(bp->flags & BNXT_FLAG_PORT_STATS_EXT)) 6758 if (!(bp->flags & BNXT_FLAG_PORT_STATS_EXT))
@@ -6762,13 +6762,16 @@ static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp)
6762 req.port_id = cpu_to_le16(pf->port_id); 6762 req.port_id = cpu_to_le16(pf->port_id);
6763 req.rx_stat_size = cpu_to_le16(sizeof(struct rx_port_stats_ext)); 6763 req.rx_stat_size = cpu_to_le16(sizeof(struct rx_port_stats_ext));
6764 req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_ext_map); 6764 req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_ext_map);
6765 req.tx_stat_size = cpu_to_le16(sizeof(struct tx_port_stats_ext)); 6765 tx_stat_size = bp->hw_tx_port_stats_ext ?
6766 sizeof(*bp->hw_tx_port_stats_ext) : 0;
6767 req.tx_stat_size = cpu_to_le16(tx_stat_size);
6766 req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_ext_map); 6768 req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_ext_map);
6767 mutex_lock(&bp->hwrm_cmd_lock); 6769 mutex_lock(&bp->hwrm_cmd_lock);
6768 rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); 6770 rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6769 if (!rc) { 6771 if (!rc) {
6770 bp->fw_rx_stats_ext_size = le16_to_cpu(resp->rx_stat_size) / 8; 6772 bp->fw_rx_stats_ext_size = le16_to_cpu(resp->rx_stat_size) / 8;
6771 bp->fw_tx_stats_ext_size = le16_to_cpu(resp->tx_stat_size) / 8; 6773 bp->fw_tx_stats_ext_size = tx_stat_size ?
6774 le16_to_cpu(resp->tx_stat_size) / 8 : 0;
6772 } else { 6775 } else {
6773 bp->fw_rx_stats_ext_size = 0; 6776 bp->fw_rx_stats_ext_size = 0;
6774 bp->fw_tx_stats_ext_size = 0; 6777 bp->fw_tx_stats_ext_size = 0;
@@ -8961,8 +8964,15 @@ static int bnxt_cfg_rx_mode(struct bnxt *bp)
8961 8964
8962skip_uc: 8965skip_uc:
8963 rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0); 8966 rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0);
8967 if (rc && vnic->mc_list_count) {
8968 netdev_info(bp->dev, "Failed setting MC filters rc: %d, turning on ALL_MCAST mode\n",
8969 rc);
8970 vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST;
8971 vnic->mc_list_count = 0;
8972 rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0);
8973 }
8964 if (rc) 8974 if (rc)
8965 netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %x\n", 8975 netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %d\n",
8966 rc); 8976 rc);
8967 8977
8968 return rc; 8978 return rc;
@@ -10699,6 +10709,7 @@ init_err_cleanup_tc:
10699 bnxt_clear_int_mode(bp); 10709 bnxt_clear_int_mode(bp);
10700 10710
10701init_err_pci_clean: 10711init_err_pci_clean:
10712 bnxt_free_hwrm_short_cmd_req(bp);
10702 bnxt_free_hwrm_resources(bp); 10713 bnxt_free_hwrm_resources(bp);
10703 bnxt_free_ctx_mem(bp); 10714 bnxt_free_ctx_mem(bp);
10704 kfree(bp->ctx); 10715 kfree(bp->ctx);
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
index 062a600fa5a7..21428537e231 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
@@ -333,6 +333,9 @@ static int stm32mp1_parse_data(struct stm32_dwmac *dwmac,
333 */ 333 */
334 dwmac->irq_pwr_wakeup = platform_get_irq_byname(pdev, 334 dwmac->irq_pwr_wakeup = platform_get_irq_byname(pdev,
335 "stm32_pwr_wakeup"); 335 "stm32_pwr_wakeup");
336 if (dwmac->irq_pwr_wakeup == -EPROBE_DEFER)
337 return -EPROBE_DEFER;
338
336 if (!dwmac->clk_eth_ck && dwmac->irq_pwr_wakeup >= 0) { 339 if (!dwmac->clk_eth_ck && dwmac->irq_pwr_wakeup >= 0) {
337 err = device_init_wakeup(&pdev->dev, true); 340 err = device_init_wakeup(&pdev->dev, true);
338 if (err) { 341 if (err) {
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
index cc1e887e47b5..26db6aa002d1 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -160,7 +160,7 @@ static const struct dmi_system_id quark_pci_dmi[] = {
160 .driver_data = (void *)&galileo_stmmac_dmi_data, 160 .driver_data = (void *)&galileo_stmmac_dmi_data,
161 }, 161 },
162 /* 162 /*
163 * There are 2 types of SIMATIC IOT2000: IOT20202 and IOT2040. 163 * There are 2 types of SIMATIC IOT2000: IOT2020 and IOT2040.
164 * The asset tag "6ES7647-0AA00-0YA2" is only for IOT2020 which 164 * The asset tag "6ES7647-0AA00-0YA2" is only for IOT2020 which
165 * has only one pci network device while other asset tags are 165 * has only one pci network device while other asset tags are
166 * for IOT2040 which has two. 166 * for IOT2040 which has two.
diff --git a/drivers/net/ieee802154/mcr20a.c b/drivers/net/ieee802154/mcr20a.c
index c589f5ae75bb..8bb53ec8d9cf 100644
--- a/drivers/net/ieee802154/mcr20a.c
+++ b/drivers/net/ieee802154/mcr20a.c
@@ -533,6 +533,8 @@ mcr20a_start(struct ieee802154_hw *hw)
533 dev_dbg(printdev(lp), "no slotted operation\n"); 533 dev_dbg(printdev(lp), "no slotted operation\n");
534 ret = regmap_update_bits(lp->regmap_dar, DAR_PHY_CTRL1, 534 ret = regmap_update_bits(lp->regmap_dar, DAR_PHY_CTRL1,
535 DAR_PHY_CTRL1_SLOTTED, 0x0); 535 DAR_PHY_CTRL1_SLOTTED, 0x0);
536 if (ret < 0)
537 return ret;
536 538
537 /* enable irq */ 539 /* enable irq */
538 enable_irq(lp->spi->irq); 540 enable_irq(lp->spi->irq);
@@ -540,11 +542,15 @@ mcr20a_start(struct ieee802154_hw *hw)
540 /* Unmask SEQ interrupt */ 542 /* Unmask SEQ interrupt */
541 ret = regmap_update_bits(lp->regmap_dar, DAR_PHY_CTRL2, 543 ret = regmap_update_bits(lp->regmap_dar, DAR_PHY_CTRL2,
542 DAR_PHY_CTRL2_SEQMSK, 0x0); 544 DAR_PHY_CTRL2_SEQMSK, 0x0);
545 if (ret < 0)
546 return ret;
543 547
544 /* Start the RX sequence */ 548 /* Start the RX sequence */
545 dev_dbg(printdev(lp), "start the RX sequence\n"); 549 dev_dbg(printdev(lp), "start the RX sequence\n");
546 ret = regmap_update_bits(lp->regmap_dar, DAR_PHY_CTRL1, 550 ret = regmap_update_bits(lp->regmap_dar, DAR_PHY_CTRL1,
547 DAR_PHY_CTRL1_XCVSEQ_MASK, MCR20A_XCVSEQ_RX); 551 DAR_PHY_CTRL1_XCVSEQ_MASK, MCR20A_XCVSEQ_RX);
552 if (ret < 0)
553 return ret;
548 554
549 return 0; 555 return 0;
550} 556}
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index a7e8c8113d97..a7796134e3be 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -1597,9 +1597,10 @@ static int marvell_get_sset_count(struct phy_device *phydev)
1597 1597
1598static void marvell_get_strings(struct phy_device *phydev, u8 *data) 1598static void marvell_get_strings(struct phy_device *phydev, u8 *data)
1599{ 1599{
1600 int count = marvell_get_sset_count(phydev);
1600 int i; 1601 int i;
1601 1602
1602 for (i = 0; i < ARRAY_SIZE(marvell_hw_stats); i++) { 1603 for (i = 0; i < count; i++) {
1603 strlcpy(data + i * ETH_GSTRING_LEN, 1604 strlcpy(data + i * ETH_GSTRING_LEN,
1604 marvell_hw_stats[i].string, ETH_GSTRING_LEN); 1605 marvell_hw_stats[i].string, ETH_GSTRING_LEN);
1605 } 1606 }
@@ -1627,9 +1628,10 @@ static u64 marvell_get_stat(struct phy_device *phydev, int i)
1627static void marvell_get_stats(struct phy_device *phydev, 1628static void marvell_get_stats(struct phy_device *phydev,
1628 struct ethtool_stats *stats, u64 *data) 1629 struct ethtool_stats *stats, u64 *data)
1629{ 1630{
1631 int count = marvell_get_sset_count(phydev);
1630 int i; 1632 int i;
1631 1633
1632 for (i = 0; i < ARRAY_SIZE(marvell_hw_stats); i++) 1634 for (i = 0; i < count; i++)
1633 data[i] = marvell_get_stat(phydev, i); 1635 data[i] = marvell_get_stat(phydev, i);
1634} 1636}
1635 1637
diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c
index f4e93f5fc204..ea90db3c7705 100644
--- a/drivers/net/slip/slhc.c
+++ b/drivers/net/slip/slhc.c
@@ -153,7 +153,7 @@ out_fail:
153void 153void
154slhc_free(struct slcompress *comp) 154slhc_free(struct slcompress *comp)
155{ 155{
156 if ( comp == NULLSLCOMPR ) 156 if ( IS_ERR_OR_NULL(comp) )
157 return; 157 return;
158 158
159 if ( comp->tstate != NULLSLSTATE ) 159 if ( comp->tstate != NULLSLSTATE )
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 18c4e5d17b05..5c3ac97519b7 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1131,9 +1131,16 @@ static const struct usb_device_id products[] = {
1131 {QMI_FIXED_INTF(0x0846, 0x68d3, 8)}, /* Netgear Aircard 779S */ 1131 {QMI_FIXED_INTF(0x0846, 0x68d3, 8)}, /* Netgear Aircard 779S */
1132 {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */ 1132 {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
1133 {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */ 1133 {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */
1134 {QMI_FIXED_INTF(0x1435, 0x0918, 3)}, /* Wistron NeWeb D16Q1 */
1135 {QMI_FIXED_INTF(0x1435, 0x0918, 4)}, /* Wistron NeWeb D16Q1 */
1136 {QMI_FIXED_INTF(0x1435, 0x0918, 5)}, /* Wistron NeWeb D16Q1 */
1137 {QMI_FIXED_INTF(0x1435, 0x3185, 4)}, /* Wistron NeWeb M18Q5 */
1138 {QMI_FIXED_INTF(0x1435, 0xd111, 4)}, /* M9615A DM11-1 D51QC */
1134 {QMI_FIXED_INTF(0x1435, 0xd181, 3)}, /* Wistron NeWeb D18Q1 */ 1139 {QMI_FIXED_INTF(0x1435, 0xd181, 3)}, /* Wistron NeWeb D18Q1 */
1135 {QMI_FIXED_INTF(0x1435, 0xd181, 4)}, /* Wistron NeWeb D18Q1 */ 1140 {QMI_FIXED_INTF(0x1435, 0xd181, 4)}, /* Wistron NeWeb D18Q1 */
1136 {QMI_FIXED_INTF(0x1435, 0xd181, 5)}, /* Wistron NeWeb D18Q1 */ 1141 {QMI_FIXED_INTF(0x1435, 0xd181, 5)}, /* Wistron NeWeb D18Q1 */
1142 {QMI_FIXED_INTF(0x1435, 0xd182, 4)}, /* Wistron NeWeb D18 */
1143 {QMI_FIXED_INTF(0x1435, 0xd182, 5)}, /* Wistron NeWeb D18 */
1137 {QMI_FIXED_INTF(0x1435, 0xd191, 4)}, /* Wistron NeWeb D19Q1 */ 1144 {QMI_FIXED_INTF(0x1435, 0xd191, 4)}, /* Wistron NeWeb D19Q1 */
1138 {QMI_QUIRK_SET_DTR(0x1508, 0x1001, 4)}, /* Fibocom NL668 series */ 1145 {QMI_QUIRK_SET_DTR(0x1508, 0x1001, 4)}, /* Fibocom NL668 series */
1139 {QMI_FIXED_INTF(0x16d8, 0x6003, 0)}, /* CMOTech 6003 */ 1146 {QMI_FIXED_INTF(0x16d8, 0x6003, 0)}, /* CMOTech 6003 */
@@ -1189,6 +1196,7 @@ static const struct usb_device_id products[] = {
1189 {QMI_FIXED_INTF(0x19d2, 0x0265, 4)}, /* ONDA MT8205 4G LTE */ 1196 {QMI_FIXED_INTF(0x19d2, 0x0265, 4)}, /* ONDA MT8205 4G LTE */
1190 {QMI_FIXED_INTF(0x19d2, 0x0284, 4)}, /* ZTE MF880 */ 1197 {QMI_FIXED_INTF(0x19d2, 0x0284, 4)}, /* ZTE MF880 */
1191 {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */ 1198 {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */
1199 {QMI_FIXED_INTF(0x19d2, 0x0396, 3)}, /* ZTE ZM8620 */
1192 {QMI_FIXED_INTF(0x19d2, 0x0412, 4)}, /* Telewell TW-LTE 4G */ 1200 {QMI_FIXED_INTF(0x19d2, 0x0412, 4)}, /* Telewell TW-LTE 4G */
1193 {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */ 1201 {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */
1194 {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */ 1202 {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */
@@ -1209,7 +1217,9 @@ static const struct usb_device_id products[] = {
1209 {QMI_FIXED_INTF(0x19d2, 0x1425, 2)}, 1217 {QMI_FIXED_INTF(0x19d2, 0x1425, 2)},
1210 {QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */ 1218 {QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */
1211 {QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */ 1219 {QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */
1220 {QMI_FIXED_INTF(0x19d2, 0x1432, 3)}, /* ZTE ME3620 */
1212 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ 1221 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
1222 {QMI_FIXED_INTF(0x2001, 0x7e16, 3)}, /* D-Link DWM-221 */
1213 {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */ 1223 {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */
1214 {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */ 1224 {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */
1215 {QMI_FIXED_INTF(0x2020, 0x2031, 4)}, /* Olicard 600 */ 1225 {QMI_FIXED_INTF(0x2020, 0x2031, 4)}, /* Olicard 600 */
diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
index 24b983edb357..eca87f7c5b6c 100644
--- a/drivers/net/wireless/ath/ath10k/ce.c
+++ b/drivers/net/wireless/ath/ath10k/ce.c
@@ -1855,7 +1855,7 @@ void ath10k_ce_dump_registers(struct ath10k *ar,
1855 struct ath10k_ce_crash_data ce_data; 1855 struct ath10k_ce_crash_data ce_data;
1856 u32 addr, id; 1856 u32 addr, id;
1857 1857
1858 lockdep_assert_held(&ar->data_lock); 1858 lockdep_assert_held(&ar->dump_mutex);
1859 1859
1860 ath10k_err(ar, "Copy Engine register dump:\n"); 1860 ath10k_err(ar, "Copy Engine register dump:\n");
1861 1861
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 835b8de92d55..aff585658fc0 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -3119,6 +3119,7 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
3119 goto err_free_wq; 3119 goto err_free_wq;
3120 3120
3121 mutex_init(&ar->conf_mutex); 3121 mutex_init(&ar->conf_mutex);
3122 mutex_init(&ar->dump_mutex);
3122 spin_lock_init(&ar->data_lock); 3123 spin_lock_init(&ar->data_lock);
3123 3124
3124 INIT_LIST_HEAD(&ar->peers); 3125 INIT_LIST_HEAD(&ar->peers);
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index e08a17b01e03..e35aae5146f1 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -1063,6 +1063,9 @@ struct ath10k {
1063 /* prevents concurrent FW reconfiguration */ 1063 /* prevents concurrent FW reconfiguration */
1064 struct mutex conf_mutex; 1064 struct mutex conf_mutex;
1065 1065
1066 /* protects coredump data */
1067 struct mutex dump_mutex;
1068
1066 /* protects shared structure data */ 1069 /* protects shared structure data */
1067 spinlock_t data_lock; 1070 spinlock_t data_lock;
1068 1071
diff --git a/drivers/net/wireless/ath/ath10k/coredump.c b/drivers/net/wireless/ath/ath10k/coredump.c
index 33838d9c1cb6..45a355fb62b9 100644
--- a/drivers/net/wireless/ath/ath10k/coredump.c
+++ b/drivers/net/wireless/ath/ath10k/coredump.c
@@ -1102,7 +1102,7 @@ struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar)
1102{ 1102{
1103 struct ath10k_fw_crash_data *crash_data = ar->coredump.fw_crash_data; 1103 struct ath10k_fw_crash_data *crash_data = ar->coredump.fw_crash_data;
1104 1104
1105 lockdep_assert_held(&ar->data_lock); 1105 lockdep_assert_held(&ar->dump_mutex);
1106 1106
1107 if (ath10k_coredump_mask == 0) 1107 if (ath10k_coredump_mask == 0)
1108 /* coredump disabled */ 1108 /* coredump disabled */
@@ -1146,7 +1146,7 @@ static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar)
1146 if (!buf) 1146 if (!buf)
1147 return NULL; 1147 return NULL;
1148 1148
1149 spin_lock_bh(&ar->data_lock); 1149 mutex_lock(&ar->dump_mutex);
1150 1150
1151 dump_data = (struct ath10k_dump_file_data *)(buf); 1151 dump_data = (struct ath10k_dump_file_data *)(buf);
1152 strlcpy(dump_data->df_magic, "ATH10K-FW-DUMP", 1152 strlcpy(dump_data->df_magic, "ATH10K-FW-DUMP",
@@ -1213,7 +1213,7 @@ static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar)
1213 sofar += sizeof(*dump_tlv) + crash_data->ramdump_buf_len; 1213 sofar += sizeof(*dump_tlv) + crash_data->ramdump_buf_len;
1214 } 1214 }
1215 1215
1216 spin_unlock_bh(&ar->data_lock); 1216 mutex_unlock(&ar->dump_mutex);
1217 1217
1218 return dump_data; 1218 return dump_data;
1219} 1219}
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 41e89db244d2..9c703d287333 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -5774,7 +5774,7 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
5774 } 5774 }
5775 5775
5776 if (changed & BSS_CHANGED_MCAST_RATE && 5776 if (changed & BSS_CHANGED_MCAST_RATE &&
5777 !WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) { 5777 !ath10k_mac_vif_chan(arvif->vif, &def)) {
5778 band = def.chan->band; 5778 band = def.chan->band;
5779 rateidx = vif->bss_conf.mcast_rate[band] - 1; 5779 rateidx = vif->bss_conf.mcast_rate[band] - 1;
5780 5780
@@ -5812,7 +5812,7 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
5812 } 5812 }
5813 5813
5814 if (changed & BSS_CHANGED_BASIC_RATES) { 5814 if (changed & BSS_CHANGED_BASIC_RATES) {
5815 if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) { 5815 if (ath10k_mac_vif_chan(vif, &def)) {
5816 mutex_unlock(&ar->conf_mutex); 5816 mutex_unlock(&ar->conf_mutex);
5817 return; 5817 return;
5818 } 5818 }
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 271f92c24d44..2c27f407a851 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -1441,7 +1441,7 @@ static void ath10k_pci_dump_registers(struct ath10k *ar,
1441 __le32 reg_dump_values[REG_DUMP_COUNT_QCA988X] = {}; 1441 __le32 reg_dump_values[REG_DUMP_COUNT_QCA988X] = {};
1442 int i, ret; 1442 int i, ret;
1443 1443
1444 lockdep_assert_held(&ar->data_lock); 1444 lockdep_assert_held(&ar->dump_mutex);
1445 1445
1446 ret = ath10k_pci_diag_read_hi(ar, &reg_dump_values[0], 1446 ret = ath10k_pci_diag_read_hi(ar, &reg_dump_values[0],
1447 hi_failure_state, 1447 hi_failure_state,
@@ -1656,7 +1656,7 @@ static void ath10k_pci_dump_memory(struct ath10k *ar,
1656 int ret, i; 1656 int ret, i;
1657 u8 *buf; 1657 u8 *buf;
1658 1658
1659 lockdep_assert_held(&ar->data_lock); 1659 lockdep_assert_held(&ar->dump_mutex);
1660 1660
1661 if (!crash_data) 1661 if (!crash_data)
1662 return; 1662 return;
@@ -1734,14 +1734,19 @@ static void ath10k_pci_dump_memory(struct ath10k *ar,
1734 } 1734 }
1735} 1735}
1736 1736
1737static void ath10k_pci_fw_crashed_dump(struct ath10k *ar) 1737static void ath10k_pci_fw_dump_work(struct work_struct *work)
1738{ 1738{
1739 struct ath10k_pci *ar_pci = container_of(work, struct ath10k_pci,
1740 dump_work);
1739 struct ath10k_fw_crash_data *crash_data; 1741 struct ath10k_fw_crash_data *crash_data;
1742 struct ath10k *ar = ar_pci->ar;
1740 char guid[UUID_STRING_LEN + 1]; 1743 char guid[UUID_STRING_LEN + 1];
1741 1744
1742 spin_lock_bh(&ar->data_lock); 1745 mutex_lock(&ar->dump_mutex);
1743 1746
1747 spin_lock_bh(&ar->data_lock);
1744 ar->stats.fw_crash_counter++; 1748 ar->stats.fw_crash_counter++;
1749 spin_unlock_bh(&ar->data_lock);
1745 1750
1746 crash_data = ath10k_coredump_new(ar); 1751 crash_data = ath10k_coredump_new(ar);
1747 1752
@@ -1756,11 +1761,18 @@ static void ath10k_pci_fw_crashed_dump(struct ath10k *ar)
1756 ath10k_ce_dump_registers(ar, crash_data); 1761 ath10k_ce_dump_registers(ar, crash_data);
1757 ath10k_pci_dump_memory(ar, crash_data); 1762 ath10k_pci_dump_memory(ar, crash_data);
1758 1763
1759 spin_unlock_bh(&ar->data_lock); 1764 mutex_unlock(&ar->dump_mutex);
1760 1765
1761 queue_work(ar->workqueue, &ar->restart_work); 1766 queue_work(ar->workqueue, &ar->restart_work);
1762} 1767}
1763 1768
1769static void ath10k_pci_fw_crashed_dump(struct ath10k *ar)
1770{
1771 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
1772
1773 queue_work(ar->workqueue, &ar_pci->dump_work);
1774}
1775
1764void ath10k_pci_hif_send_complete_check(struct ath10k *ar, u8 pipe, 1776void ath10k_pci_hif_send_complete_check(struct ath10k *ar, u8 pipe,
1765 int force) 1777 int force)
1766{ 1778{
@@ -3442,6 +3454,8 @@ int ath10k_pci_setup_resource(struct ath10k *ar)
3442 spin_lock_init(&ar_pci->ps_lock); 3454 spin_lock_init(&ar_pci->ps_lock);
3443 mutex_init(&ar_pci->ce_diag_mutex); 3455 mutex_init(&ar_pci->ce_diag_mutex);
3444 3456
3457 INIT_WORK(&ar_pci->dump_work, ath10k_pci_fw_dump_work);
3458
3445 timer_setup(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry, 0); 3459 timer_setup(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry, 0);
3446 3460
3447 if (QCA_REV_6174(ar) || QCA_REV_9377(ar)) 3461 if (QCA_REV_6174(ar) || QCA_REV_9377(ar))
diff --git a/drivers/net/wireless/ath/ath10k/pci.h b/drivers/net/wireless/ath/ath10k/pci.h
index 3773c79f322f..4455ed6c5275 100644
--- a/drivers/net/wireless/ath/ath10k/pci.h
+++ b/drivers/net/wireless/ath/ath10k/pci.h
@@ -121,6 +121,8 @@ struct ath10k_pci {
121 /* For protecting ce_diag */ 121 /* For protecting ce_diag */
122 struct mutex ce_diag_mutex; 122 struct mutex ce_diag_mutex;
123 123
124 struct work_struct dump_work;
125
124 struct ath10k_ce ce; 126 struct ath10k_ce ce;
125 struct timer_list rx_post_retry; 127 struct timer_list rx_post_retry;
126 128
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
index fc915ecfb06e..17b34f6e4515 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
@@ -207,7 +207,7 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
207#define IWL_DEVICE_AX210 \ 207#define IWL_DEVICE_AX210 \
208 IWL_DEVICE_AX200_COMMON, \ 208 IWL_DEVICE_AX200_COMMON, \
209 .device_family = IWL_DEVICE_FAMILY_AX210, \ 209 .device_family = IWL_DEVICE_FAMILY_AX210, \
210 .base_params = &iwl_22000_base_params, \ 210 .base_params = &iwl_22560_base_params, \
211 .csr = &iwl_csr_v1, \ 211 .csr = &iwl_csr_v1, \
212 .min_txq_size = 128, \ 212 .min_txq_size = 128, \
213 .gp2_reg_addr = 0xd02c68, \ 213 .gp2_reg_addr = 0xd02c68, \
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/5000.c b/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
index 575a7022d045..3846064d51a5 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
@@ -1,7 +1,7 @@
1/****************************************************************************** 1/******************************************************************************
2 * 2 *
3 * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. 3 * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved.
4 * Copyright(c) 2018 Intel Corporation 4 * Copyright(c) 2018 - 2019 Intel Corporation
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License as 7 * under the terms of version 2 of the GNU General Public License as
@@ -136,6 +136,7 @@ const struct iwl_cfg iwl5350_agn_cfg = {
136 .ht_params = &iwl5000_ht_params, 136 .ht_params = &iwl5000_ht_params,
137 .led_mode = IWL_LED_BLINK, 137 .led_mode = IWL_LED_BLINK,
138 .internal_wimax_coex = true, 138 .internal_wimax_coex = true,
139 .csr = &iwl_csr_v1,
139}; 140};
140 141
141#define IWL_DEVICE_5150 \ 142#define IWL_DEVICE_5150 \
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/file.h b/drivers/net/wireless/intel/iwlwifi/fw/file.h
index abfdcabdcbf7..cd622af90077 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/file.h
+++ b/drivers/net/wireless/intel/iwlwifi/fw/file.h
@@ -93,7 +93,7 @@ struct iwl_ucode_header {
93 } u; 93 } u;
94}; 94};
95 95
96#define IWL_UCODE_INI_TLV_GROUP BIT(24) 96#define IWL_UCODE_INI_TLV_GROUP 0x1000000
97 97
98/* 98/*
99 * new TLV uCode file layout 99 * new TLV uCode file layout
@@ -148,11 +148,14 @@ enum iwl_ucode_tlv_type {
148 IWL_UCODE_TLV_UMAC_DEBUG_ADDRS = 54, 148 IWL_UCODE_TLV_UMAC_DEBUG_ADDRS = 54,
149 IWL_UCODE_TLV_LMAC_DEBUG_ADDRS = 55, 149 IWL_UCODE_TLV_LMAC_DEBUG_ADDRS = 55,
150 IWL_UCODE_TLV_FW_RECOVERY_INFO = 57, 150 IWL_UCODE_TLV_FW_RECOVERY_INFO = 57,
151 IWL_UCODE_TLV_TYPE_BUFFER_ALLOCATION = IWL_UCODE_INI_TLV_GROUP | 0x1, 151
152 IWL_UCODE_TLV_TYPE_HCMD = IWL_UCODE_INI_TLV_GROUP | 0x2, 152 IWL_UCODE_TLV_TYPE_BUFFER_ALLOCATION = IWL_UCODE_INI_TLV_GROUP + 0x1,
153 IWL_UCODE_TLV_TYPE_REGIONS = IWL_UCODE_INI_TLV_GROUP | 0x3, 153 IWL_UCODE_TLV_DEBUG_BASE = IWL_UCODE_TLV_TYPE_BUFFER_ALLOCATION,
154 IWL_UCODE_TLV_TYPE_TRIGGERS = IWL_UCODE_INI_TLV_GROUP | 0x4, 154 IWL_UCODE_TLV_TYPE_HCMD = IWL_UCODE_INI_TLV_GROUP + 0x2,
155 IWL_UCODE_TLV_TYPE_DEBUG_FLOW = IWL_UCODE_INI_TLV_GROUP | 0x5, 155 IWL_UCODE_TLV_TYPE_REGIONS = IWL_UCODE_INI_TLV_GROUP + 0x3,
156 IWL_UCODE_TLV_TYPE_TRIGGERS = IWL_UCODE_INI_TLV_GROUP + 0x4,
157 IWL_UCODE_TLV_TYPE_DEBUG_FLOW = IWL_UCODE_INI_TLV_GROUP + 0x5,
158 IWL_UCODE_TLV_DEBUG_MAX = IWL_UCODE_TLV_TYPE_DEBUG_FLOW,
156 159
157 /* TLVs 0x1000-0x2000 are for internal driver usage */ 160 /* TLVs 0x1000-0x2000 are for internal driver usage */
158 IWL_UCODE_TLV_FW_DBG_DUMP_LST = 0x1000, 161 IWL_UCODE_TLV_FW_DBG_DUMP_LST = 0x1000,
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c b/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
index 9107302cc444..0e8664375298 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
@@ -129,7 +129,8 @@ void iwl_alloc_dbg_tlv(struct iwl_trans *trans, size_t len, const u8 *data,
129 len -= ALIGN(tlv_len, 4); 129 len -= ALIGN(tlv_len, 4);
130 data += sizeof(*tlv) + ALIGN(tlv_len, 4); 130 data += sizeof(*tlv) + ALIGN(tlv_len, 4);
131 131
132 if (!(tlv_type & IWL_UCODE_INI_TLV_GROUP)) 132 if (tlv_type < IWL_UCODE_TLV_DEBUG_BASE ||
133 tlv_type > IWL_UCODE_TLV_DEBUG_MAX)
133 continue; 134 continue;
134 135
135 hdr = (void *)&tlv->data[0]; 136 hdr = (void *)&tlv->data[0];
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs-vif.c b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs-vif.c
index 9bf2407c9b4b..f043eefabb4e 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs-vif.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs-vif.c
@@ -773,6 +773,11 @@ void iwl_mvm_vif_dbgfs_register(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
773 return; 773 return;
774 774
775 mvmvif->dbgfs_dir = debugfs_create_dir("iwlmvm", dbgfs_dir); 775 mvmvif->dbgfs_dir = debugfs_create_dir("iwlmvm", dbgfs_dir);
776 if (IS_ERR_OR_NULL(mvmvif->dbgfs_dir)) {
777 IWL_ERR(mvm, "Failed to create debugfs directory under %pd\n",
778 dbgfs_dir);
779 return;
780 }
776 781
777 if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM && 782 if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM &&
778 ((vif->type == NL80211_IFTYPE_STATION && !vif->p2p) || 783 ((vif->type == NL80211_IFTYPE_STATION && !vif->p2p) ||
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
index 00a47f6f1d81..ab68b5d53ec9 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
@@ -1121,7 +1121,9 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
1121 ret = iwl_mvm_load_rt_fw(mvm); 1121 ret = iwl_mvm_load_rt_fw(mvm);
1122 if (ret) { 1122 if (ret) {
1123 IWL_ERR(mvm, "Failed to start RT ucode: %d\n", ret); 1123 IWL_ERR(mvm, "Failed to start RT ucode: %d\n", ret);
1124 iwl_fw_dbg_error_collect(&mvm->fwrt, FW_DBG_TRIGGER_DRIVER); 1124 if (ret != -ERFKILL)
1125 iwl_fw_dbg_error_collect(&mvm->fwrt,
1126 FW_DBG_TRIGGER_DRIVER);
1125 goto error; 1127 goto error;
1126 } 1128 }
1127 1129
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
index 55d399899d1c..8da9e5572fcf 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
@@ -834,7 +834,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
834 mutex_lock(&mvm->mutex); 834 mutex_lock(&mvm->mutex);
835 iwl_mvm_ref(mvm, IWL_MVM_REF_INIT_UCODE); 835 iwl_mvm_ref(mvm, IWL_MVM_REF_INIT_UCODE);
836 err = iwl_run_init_mvm_ucode(mvm, true); 836 err = iwl_run_init_mvm_ucode(mvm, true);
837 if (err) 837 if (err && err != -ERFKILL)
838 iwl_fw_dbg_error_collect(&mvm->fwrt, FW_DBG_TRIGGER_DRIVER); 838 iwl_fw_dbg_error_collect(&mvm->fwrt, FW_DBG_TRIGGER_DRIVER);
839 if (!iwlmvm_mod_params.init_dbg || !err) 839 if (!iwlmvm_mod_params.init_dbg || !err)
840 iwl_mvm_stop_device(mvm); 840 iwl_mvm_stop_device(mvm);
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
index 0b1b208de767..1824566d08fc 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
@@ -169,9 +169,9 @@ static inline int iwl_mvm_check_pn(struct iwl_mvm *mvm, struct sk_buff *skb,
169} 169}
170 170
171/* iwl_mvm_create_skb Adds the rxb to a new skb */ 171/* iwl_mvm_create_skb Adds the rxb to a new skb */
172static void iwl_mvm_create_skb(struct sk_buff *skb, struct ieee80211_hdr *hdr, 172static int iwl_mvm_create_skb(struct iwl_mvm *mvm, struct sk_buff *skb,
173 u16 len, u8 crypt_len, 173 struct ieee80211_hdr *hdr, u16 len, u8 crypt_len,
174 struct iwl_rx_cmd_buffer *rxb) 174 struct iwl_rx_cmd_buffer *rxb)
175{ 175{
176 struct iwl_rx_packet *pkt = rxb_addr(rxb); 176 struct iwl_rx_packet *pkt = rxb_addr(rxb);
177 struct iwl_rx_mpdu_desc *desc = (void *)pkt->data; 177 struct iwl_rx_mpdu_desc *desc = (void *)pkt->data;
@@ -204,6 +204,20 @@ static void iwl_mvm_create_skb(struct sk_buff *skb, struct ieee80211_hdr *hdr,
204 * present before copying packet data. 204 * present before copying packet data.
205 */ 205 */
206 hdrlen += crypt_len; 206 hdrlen += crypt_len;
207
208 if (WARN_ONCE(headlen < hdrlen,
209 "invalid packet lengths (hdrlen=%d, len=%d, crypt_len=%d)\n",
210 hdrlen, len, crypt_len)) {
211 /*
212 * We warn and trace because we want to be able to see
213 * it in trace-cmd as well.
214 */
215 IWL_DEBUG_RX(mvm,
216 "invalid packet lengths (hdrlen=%d, len=%d, crypt_len=%d)\n",
217 hdrlen, len, crypt_len);
218 return -EINVAL;
219 }
220
207 skb_put_data(skb, hdr, hdrlen); 221 skb_put_data(skb, hdr, hdrlen);
208 skb_put_data(skb, (u8 *)hdr + hdrlen + pad_len, headlen - hdrlen); 222 skb_put_data(skb, (u8 *)hdr + hdrlen + pad_len, headlen - hdrlen);
209 223
@@ -216,6 +230,8 @@ static void iwl_mvm_create_skb(struct sk_buff *skb, struct ieee80211_hdr *hdr,
216 skb_add_rx_frag(skb, 0, rxb_steal_page(rxb), offset, 230 skb_add_rx_frag(skb, 0, rxb_steal_page(rxb), offset,
217 fraglen, rxb->truesize); 231 fraglen, rxb->truesize);
218 } 232 }
233
234 return 0;
219} 235}
220 236
221static void iwl_mvm_add_rtap_sniffer_config(struct iwl_mvm *mvm, 237static void iwl_mvm_add_rtap_sniffer_config(struct iwl_mvm *mvm,
@@ -1671,7 +1687,11 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
1671 rx_status->boottime_ns = ktime_get_boot_ns(); 1687 rx_status->boottime_ns = ktime_get_boot_ns();
1672 } 1688 }
1673 1689
1674 iwl_mvm_create_skb(skb, hdr, len, crypt_len, rxb); 1690 if (iwl_mvm_create_skb(mvm, skb, hdr, len, crypt_len, rxb)) {
1691 kfree_skb(skb);
1692 goto out;
1693 }
1694
1675 if (!iwl_mvm_reorder(mvm, napi, queue, sta, skb, desc)) 1695 if (!iwl_mvm_reorder(mvm, napi, queue, sta, skb, desc))
1676 iwl_mvm_pass_packet_to_mac80211(mvm, napi, skb, queue, 1696 iwl_mvm_pass_packet_to_mac80211(mvm, napi, skb, queue,
1677 sta, csi); 1697 sta, csi);
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index c5baaae8d38e..cccb8bbd7ea7 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -3654,20 +3654,27 @@ out_no_pci:
3654 3654
3655void iwl_trans_pcie_sync_nmi(struct iwl_trans *trans) 3655void iwl_trans_pcie_sync_nmi(struct iwl_trans *trans)
3656{ 3656{
3657 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
3657 unsigned long timeout = jiffies + IWL_TRANS_NMI_TIMEOUT; 3658 unsigned long timeout = jiffies + IWL_TRANS_NMI_TIMEOUT;
3659 u32 inta_addr, sw_err_bit;
3660
3661 if (trans_pcie->msix_enabled) {
3662 inta_addr = CSR_MSIX_HW_INT_CAUSES_AD;
3663 sw_err_bit = MSIX_HW_INT_CAUSES_REG_SW_ERR;
3664 } else {
3665 inta_addr = CSR_INT;
3666 sw_err_bit = CSR_INT_BIT_SW_ERR;
3667 }
3658 3668
3659 iwl_disable_interrupts(trans); 3669 iwl_disable_interrupts(trans);
3660 iwl_force_nmi(trans); 3670 iwl_force_nmi(trans);
3661 while (time_after(timeout, jiffies)) { 3671 while (time_after(timeout, jiffies)) {
3662 u32 inta_hw = iwl_read32(trans, 3672 u32 inta_hw = iwl_read32(trans, inta_addr);
3663 CSR_MSIX_HW_INT_CAUSES_AD);
3664 3673
3665 /* Error detected by uCode */ 3674 /* Error detected by uCode */
3666 if (inta_hw & MSIX_HW_INT_CAUSES_REG_SW_ERR) { 3675 if (inta_hw & sw_err_bit) {
3667 /* Clear causes register */ 3676 /* Clear causes register */
3668 iwl_write32(trans, CSR_MSIX_HW_INT_CAUSES_AD, 3677 iwl_write32(trans, inta_addr, inta_hw & sw_err_bit);
3669 inta_hw &
3670 MSIX_HW_INT_CAUSES_REG_SW_ERR);
3671 break; 3678 break;
3672 } 3679 }
3673 3680
diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c
index a85648342d15..d5a70340a945 100644
--- a/drivers/net/wireless/marvell/mwifiex/sdio.c
+++ b/drivers/net/wireless/marvell/mwifiex/sdio.c
@@ -181,7 +181,7 @@ static int mwifiex_sdio_resume(struct device *dev)
181 181
182 adapter = card->adapter; 182 adapter = card->adapter;
183 183
184 if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) { 184 if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
185 mwifiex_dbg(adapter, WARN, 185 mwifiex_dbg(adapter, WARN,
186 "device already resumed\n"); 186 "device already resumed\n");
187 return 0; 187 return 0;