]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fixes for 4.4
authorSasha Levin <sashal@kernel.org>
Sun, 1 Dec 2019 17:02:55 +0000 (12:02 -0500)
committerSasha Levin <sashal@kernel.org>
Sun, 1 Dec 2019 17:02:55 +0000 (12:02 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.4/ath10k-restore-qca9880-ar1a-v1-detection.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/ath10k-restore-qca9880-ar1a-v1-detection.patch b/queue-4.4/ath10k-restore-qca9880-ar1a-v1-detection.patch
new file mode 100644 (file)
index 0000000..41a561b
--- /dev/null
@@ -0,0 +1,81 @@
+From f2d15dee3c98df2bf315aab121c49a4bbdea237b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Nov 2019 21:53:50 +0100
+Subject: ath10k: restore QCA9880-AR1A (v1) detection
+
+From: Christian Lamparter <chunkeey@gmail.com>
+
+commit f8914a14623a79b73f72b2b1ee4cd9b2cb91b735 upstream
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath10k/pci.c | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
+index 907fd60c42415..5814050250215 100644
+--- a/drivers/net/wireless/ath/ath10k/pci.c
++++ b/drivers/net/wireless/ath/ath10k/pci.c
+@@ -2988,12 +2988,13 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
+       struct ath10k_pci *ar_pci;
+       enum ath10k_hw_rev hw_rev;
+       u32 chip_id;
+-      bool pci_ps;
++      bool pci_ps, is_qca988x = false;
+       switch (pci_dev->device) {
+       case QCA988X_2_0_DEVICE_ID:
+               hw_rev = ATH10K_HW_QCA988X;
+               pci_ps = false;
++              is_qca988x = true;
+               break;
+       case QCA6164_2_1_DEVICE_ID:
+       case QCA6174_2_1_DEVICE_ID:
+@@ -3087,6 +3088,19 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
+               goto err_deinit_irq;
+       }
++      /* Read CHIP_ID before reset to catch QCA9880-AR1A v1 devices that
++       * fall off the bus during chip_reset. These chips have the same pci
++       * device id as the QCA9880 BR4A or 2R4E. So that's why the check.
++       */
++      if (is_qca988x) {
++              chip_id = ath10k_pci_soc_read32(ar, SOC_CHIP_ID_ADDRESS);
++              if (chip_id != 0xffffffff) {
++                      if (!ath10k_pci_chip_is_supported(pdev->device,
++                                                        chip_id))
++                              goto err_unsupported;
++              }
++      }
++
+       ret = ath10k_pci_chip_reset(ar);
+       if (ret) {
+               ath10k_err(ar, "failed to reset chip: %d\n", ret);
+@@ -3099,11 +3113,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
+               goto err_free_irq;
+       }
+-      if (!ath10k_pci_chip_is_supported(pdev->device, chip_id)) {
+-              ath10k_err(ar, "device %04x with chip_id %08x isn't supported\n",
+-                         pdev->device, chip_id);
+-              goto err_free_irq;
+-      }
++      if (!ath10k_pci_chip_is_supported(pdev->device, chip_id))
++              goto err_unsupported;
+       ret = ath10k_core_register(ar, chip_id);
+       if (ret) {
+@@ -3113,6 +3124,10 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
+       return 0;
++err_unsupported:
++      ath10k_err(ar, "device %04x with chip_id %08x isn't supported\n",
++                 pdev->device, bus_params.chip_id);
++
+ err_free_irq:
+       ath10k_pci_free_irq(ar);
+       ath10k_pci_kill_tasklet(ar);
+-- 
+2.20.1
+
index f9a264d7944a38e005c3dd5e6bf445e27f2fce16..e75936f0ae3e40b1f3a1db80557382f4e1686ae6 100644 (file)
@@ -74,3 +74,4 @@ acpi-apei-switch-estatus-pool-to-use-vmalloc-memory.patch
 scsi-libsas-check-smp-phy-control-function-result.patch
 powerpc-pseries-dlpar-fix-a-missing-check-in-dlpar_p.patch
 mtd-remove-a-debug-trace-in-mtdpart.c.patch
+ath10k-restore-qca9880-ar1a-v1-detection.patch