Merge git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git
authorKalle Valo <kvalo@codeaurora.org>
Tue, 4 Aug 2020 11:02:54 +0000 (14:02 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 4 Aug 2020 11:02:54 +0000 (14:02 +0300)
mt76 driver had major conflicts within mt7615 directory. To make it easier for
every merge wireless-drivers to wireless-drivers-next and solve those
conflicts.

drivers/net/wireless/ath/ath10k/ahb.c
drivers/net/wireless/ath/ath10k/pci.c
drivers/net/wireless/ath/ath9k/hif_usb.c
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
drivers/net/wireless/intel/iwlwifi/mvm/sta.c
drivers/net/wireless/intel/iwlwifi/pcie/drv.c
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h
drivers/net/wireless/mediatek/mt76/mt7615/usb.c
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
drivers/net/wireless/mediatek/mt76/usb.c

index 342a7e5..05a6197 100644 (file)
@@ -820,7 +820,7 @@ err_free_irq:
        ath10k_ahb_release_irq_legacy(ar);
 
 err_free_pipes:
-       ath10k_pci_free_pipes(ar);
+       ath10k_pci_release_resource(ar);
 
 err_resource_deinit:
        ath10k_ahb_resource_deinit(ar);
index 1d941d5..cfde779 100644 (file)
@@ -3473,6 +3473,28 @@ int ath10k_pci_setup_resource(struct ath10k *ar)
 
        timer_setup(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry, 0);
 
+       ar_pci->attr = kmemdup(pci_host_ce_config_wlan,
+                              sizeof(pci_host_ce_config_wlan),
+                              GFP_KERNEL);
+       if (!ar_pci->attr)
+               return -ENOMEM;
+
+       ar_pci->pipe_config = kmemdup(pci_target_ce_config_wlan,
+                                     sizeof(pci_target_ce_config_wlan),
+                                     GFP_KERNEL);
+       if (!ar_pci->pipe_config) {
+               ret = -ENOMEM;
+               goto err_free_attr;
+       }
+
+       ar_pci->serv_to_pipe = kmemdup(pci_target_service_to_ce_map_wlan,
+                                      sizeof(pci_target_service_to_ce_map_wlan),
+                                      GFP_KERNEL);
+       if (!ar_pci->serv_to_pipe) {
+               ret = -ENOMEM;
+               goto err_free_pipe_config;
+       }
+
        if (QCA_REV_6174(ar) || QCA_REV_9377(ar))
                ath10k_pci_override_ce_config(ar);
 
@@ -3480,18 +3502,31 @@ int ath10k_pci_setup_resource(struct ath10k *ar)
        if (ret) {
                ath10k_err(ar, "failed to allocate copy engine pipes: %d\n",
                           ret);
-               return ret;
+               goto err_free_serv_to_pipe;
        }
 
        return 0;
+
+err_free_serv_to_pipe:
+       kfree(ar_pci->serv_to_pipe);
+err_free_pipe_config:
+       kfree(ar_pci->pipe_config);
+err_free_attr:
+       kfree(ar_pci->attr);
+       return ret;
 }
 
 void ath10k_pci_release_resource(struct ath10k *ar)
 {
+       struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
+
        ath10k_pci_rx_retry_sync(ar);
        netif_napi_del(&ar->napi);
        ath10k_pci_ce_deinit(ar);
        ath10k_pci_free_pipes(ar);
+       kfree(ar_pci->attr);
+       kfree(ar_pci->pipe_config);
+       kfree(ar_pci->serv_to_pipe);
 }
 
 static const struct ath10k_bus_ops ath10k_pci_bus_ops = {
@@ -3601,30 +3636,6 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
 
        timer_setup(&ar_pci->ps_timer, ath10k_pci_ps_timer, 0);
 
-       ar_pci->attr = kmemdup(pci_host_ce_config_wlan,
-                              sizeof(pci_host_ce_config_wlan),
-                              GFP_KERNEL);
-       if (!ar_pci->attr) {
-               ret = -ENOMEM;
-               goto err_free;
-       }
-
-       ar_pci->pipe_config = kmemdup(pci_target_ce_config_wlan,
-                                     sizeof(pci_target_ce_config_wlan),
-                                     GFP_KERNEL);
-       if (!ar_pci->pipe_config) {
-               ret = -ENOMEM;
-               goto err_free;
-       }
-
-       ar_pci->serv_to_pipe = kmemdup(pci_target_service_to_ce_map_wlan,
-                                      sizeof(pci_target_service_to_ce_map_wlan),
-                                      GFP_KERNEL);
-       if (!ar_pci->serv_to_pipe) {
-               ret = -ENOMEM;
-               goto err_free;
-       }
-
        ret = ath10k_pci_setup_resource(ar);
        if (ret) {
                ath10k_err(ar, "failed to setup resource: %d\n", ret);
@@ -3705,10 +3716,9 @@ err_unsupported:
 
 err_free_irq:
        ath10k_pci_free_irq(ar);
-       ath10k_pci_rx_retry_sync(ar);
 
 err_deinit_irq:
-       ath10k_pci_deinit_irq(ar);
+       ath10k_pci_release_resource(ar);
 
 err_sleep:
        ath10k_pci_sleep_sync(ar);
@@ -3720,29 +3730,18 @@ err_free_pipes:
 err_core_destroy:
        ath10k_core_destroy(ar);
 
-err_free:
-       kfree(ar_pci->attr);
-       kfree(ar_pci->pipe_config);
-       kfree(ar_pci->serv_to_pipe);
-
        return ret;
 }
 
 static void ath10k_pci_remove(struct pci_dev *pdev)
 {
        struct ath10k *ar = pci_get_drvdata(pdev);
-       struct ath10k_pci *ar_pci;
 
        ath10k_dbg(ar, ATH10K_DBG_PCI, "pci remove\n");
 
        if (!ar)
                return;
 
-       ar_pci = ath10k_pci_priv(ar);
-
-       if (!ar_pci)
-               return;
-
        ath10k_core_unregister(ar);
        ath10k_pci_free_irq(ar);
        ath10k_pci_deinit_irq(ar);
@@ -3750,9 +3749,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev)
        ath10k_pci_sleep_sync(ar);
        ath10k_pci_release(ar);
        ath10k_core_destroy(ar);
-       kfree(ar_pci->attr);
-       kfree(ar_pci->pipe_config);
-       kfree(ar_pci->serv_to_pipe);
 }
 
 MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table);
index 4ed21da..3f563e0 100644 (file)
@@ -733,11 +733,13 @@ static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
                        return;
                }
 
+               rx_buf->skb = nskb;
+
                usb_fill_int_urb(urb, hif_dev->udev,
                                 usb_rcvintpipe(hif_dev->udev,
                                                 USB_REG_IN_PIPE),
                                 nskb->data, MAX_REG_IN_BUF_SIZE,
-                                ath9k_hif_usb_reg_in_cb, nskb, 1);
+                                ath9k_hif_usb_reg_in_cb, rx_buf, 1);
        }
 
 resubmit:
index f180db2..9ce7207 100644 (file)
@@ -271,6 +271,8 @@ static int iwl_dbg_tlv_alloc_trigger(struct iwl_trans *trans,
 {
        struct iwl_fw_ini_trigger_tlv *trig = (void *)tlv->data;
        u32 tp = le32_to_cpu(trig->time_point);
+       struct iwl_ucode_tlv *dup = NULL;
+       int ret;
 
        if (le32_to_cpu(tlv->length) < sizeof(*trig))
                return -EINVAL;
@@ -283,10 +285,20 @@ static int iwl_dbg_tlv_alloc_trigger(struct iwl_trans *trans,
                return -EINVAL;
        }
 
-       if (!le32_to_cpu(trig->occurrences))
+       if (!le32_to_cpu(trig->occurrences)) {
+               dup = kmemdup(tlv, sizeof(*tlv) + le32_to_cpu(tlv->length),
+                               GFP_KERNEL);
+               if (!dup)
+                       return -ENOMEM;
+               trig = (void *)dup->data;
                trig->occurrences = cpu_to_le32(-1);
+               tlv = dup;
+       }
+
+       ret = iwl_dbg_tlv_add(tlv, &trans->dbg.time_point[tp].trig_list);
+       kfree(dup);
 
-       return iwl_dbg_tlv_add(tlv, &trans->dbg.time_point[tp].trig_list);
+       return ret;
 }
 
 static int (*dbg_tlv_alloc[])(struct iwl_trans *trans,
index 53af3c9..9e12475 100644 (file)
@@ -1189,17 +1189,15 @@ static int iwl_mvm_inactivity_check(struct iwl_mvm *mvm, u8 alloc_for_sta)
        for_each_set_bit(i, &changetid_queues, IWL_MAX_HW_QUEUES)
                iwl_mvm_change_queue_tid(mvm, i);
 
+       rcu_read_unlock();
+
        if (free_queue >= 0 && alloc_for_sta != IWL_MVM_INVALID_STA) {
                ret = iwl_mvm_free_inactive_queue(mvm, free_queue, queue_owner,
                                                  alloc_for_sta);
-               if (ret) {
-                       rcu_read_unlock();
+               if (ret)
                        return ret;
-               }
        }
 
-       rcu_read_unlock();
-
        return free_queue;
 }
 
index 65d65c6..e02bafb 100644 (file)
@@ -582,6 +582,8 @@ static const struct iwl_dev_info iwl_dev_info_table[] = {
        IWL_DEV_INFO(0x30DC, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
        IWL_DEV_INFO(0x31DC, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),
        IWL_DEV_INFO(0x31DC, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
+       IWL_DEV_INFO(0xA370, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),
+       IWL_DEV_INFO(0xA370, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
 
        IWL_DEV_INFO(0x271C, 0x0214, iwl9260_2ac_cfg, iwl9260_1_name),
 
index edac37e..22e4eab 100644 (file)
@@ -72,8 +72,7 @@ static int mt7615_eeprom_load(struct mt7615_dev *dev, u32 addr)
 {
        int ret;
 
-       ret = mt76_eeprom_init(&dev->mt76, MT7615_EEPROM_SIZE +
-                                          MT7615_EEPROM_EXTRA_DATA);
+       ret = mt76_eeprom_init(&dev->mt76, MT7615_EEPROM_FULL_SIZE);
        if (ret < 0)
                return ret;
 
index 40fed7a..a024dee 100644 (file)
@@ -17,7 +17,7 @@
 #define MT7615_EEPROM_TXDPD_SIZE               216
 #define MT7615_EEPROM_TXDPD_COUNT              (44 + 3)
 
-#define MT7615_EEPROM_EXTRA_DATA               (MT7615_EEPROM_TXDPD_OFFSET + \
+#define MT7615_EEPROM_FULL_SIZE                        (MT7615_EEPROM_TXDPD_OFFSET + \
                                                 MT7615_EEPROM_TXDPD_COUNT * \
                                                 MT7615_EEPROM_TXDPD_SIZE)
 
index f1b4a63..23a2133 100644 (file)
@@ -119,25 +119,26 @@ static int mt7663u_probe(struct usb_interface *usb_intf,
        if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON,
                            FW_STATE_PWR_ON << 1, 500)) {
                dev_err(dev->mt76.dev, "Timeout for power on\n");
-               return -EIO;
+               ret = -EIO;
+               goto error;
        }
 
 alloc_queues:
        ret = mt76u_alloc_mcu_queue(&dev->mt76);
        if (ret)
-               goto error;
+               goto error_free_q;
 
        ret = mt76u_alloc_queues(&dev->mt76);
        if (ret)
-               goto error;
+               goto error_free_q;
 
        ret = mt7663_usb_sdio_register_device(dev);
        if (ret)
-               goto error_freeq;
+               goto error_free_q;
 
        return 0;
 
-error_freeq:
+error_free_q:
        mt76u_queues_deinit(&dev->mt76);
 error:
        usb_set_intfdata(usb_intf, NULL);
index 9961151..bacb1f1 100644 (file)
@@ -456,8 +456,9 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)
        tasklet_disable(&dev->mt76.tx_tasklet);
        napi_disable(&dev->mt76.tx_napi);
 
-       for (i = 0; i < ARRAY_SIZE(dev->mt76.napi); i++)
+       mt76_for_each_q_rx(&dev->mt76, i) {
                napi_disable(&dev->mt76.napi[i]);
+       }
 
        mutex_lock(&dev->mt76.mutex);
 
@@ -515,7 +516,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)
 
        tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
 
-       for (i = 0; i < ARRAY_SIZE(dev->mt76.napi); i++) {
+       mt76_for_each_q_rx(&dev->mt76, i) {
                napi_enable(&dev->mt76.napi[i]);
                napi_schedule(&dev->mt76.napi[i]);
        }
index 5f19f9e..dcab599 100644 (file)
@@ -1021,11 +1021,16 @@ static int mt76u_alloc_tx(struct mt76_dev *dev)
 
 static void mt76u_free_tx(struct mt76_dev *dev)
 {
-       struct mt76_queue *q;
-       int i, j;
+       int i;
 
        for (i = 0; i < IEEE80211_NUM_ACS; i++) {
+               struct mt76_queue *q;
+               int j;
+
                q = dev->q_tx[i].q;
+               if (!q)
+                       continue;
+
                for (j = 0; j < q->ndesc; j++)
                        usb_free_urb(q->entry[j].urb);
        }
@@ -1033,17 +1038,22 @@ static void mt76u_free_tx(struct mt76_dev *dev)
 
 void mt76u_stop_tx(struct mt76_dev *dev)
 {
-       struct mt76_queue_entry entry;
-       struct mt76_queue *q;
-       int i, j, ret;
+       int ret;
 
        ret = wait_event_timeout(dev->tx_wait, !mt76_has_tx_pending(&dev->phy),
                                 HZ / 5);
        if (!ret) {
+               struct mt76_queue_entry entry;
+               struct mt76_queue *q;
+               int i, j;
+
                dev_err(dev->dev, "timed out waiting for pending tx\n");
 
                for (i = 0; i < IEEE80211_NUM_ACS; i++) {
                        q = dev->q_tx[i].q;
+                       if (!q)
+                               continue;
+
                        for (j = 0; j < q->ndesc; j++)
                                usb_kill_urb(q->entry[j].urb);
                }
@@ -1055,6 +1065,8 @@ void mt76u_stop_tx(struct mt76_dev *dev)
                 */
                for (i = 0; i < IEEE80211_NUM_ACS; i++) {
                        q = dev->q_tx[i].q;
+                       if (!q)
+                               continue;
 
                        /* Assure we are in sync with killed tasklet. */
                        spin_lock_bh(&q->lock);