+++ /dev/null
-From d705560bc42836428cdd6dff5e04f6c010c3e4ae Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 29 Nov 2019 21:52:14 +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 50a801a5d4f15..b74d7b99cf899 100644
---- a/drivers/net/wireless/ath/ath10k/pci.c
-+++ b/drivers/net/wireless/ath/ath10k/pci.c
-@@ -3482,7 +3482,7 @@ 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;
- int (*pci_soft_reset)(struct ath10k *ar);
- int (*pci_hard_reset)(struct ath10k *ar);
- u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr);
-@@ -3492,6 +3492,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
- case QCA988X_2_0_DEVICE_ID:
- hw_rev = ATH10K_HW_QCA988X;
- pci_ps = false;
-+ is_qca988x = true;
- pci_soft_reset = ath10k_pci_warm_reset;
- pci_hard_reset = ath10k_pci_qca988x_chip_reset;
- targ_cpu_to_ce_addr = ath10k_pci_qca988x_targ_cpu_to_ce_addr;
-@@ -3611,6 +3612,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);
-@@ -3623,11 +3637,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) {
-@@ -3637,6 +3648,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_rx_retry_sync(ar);
---
-2.20.1
-