|
@@ -840,31 +840,35 @@ void ath10k_pci_rx_replenish_retry(unsigned long ptr)
|
|
|
ath10k_pci_rx_post(ar);
|
|
|
}
|
|
|
|
|
|
-static u32 ath10k_pci_targ_cpu_to_ce_addr(struct ath10k *ar, u32 addr)
|
|
|
+static u32 ath10k_pci_qca988x_targ_cpu_to_ce_addr(struct ath10k *ar, u32 addr)
|
|
|
{
|
|
|
- u32 val = 0;
|
|
|
+ u32 val = 0, region = addr & 0xfffff;
|
|
|
|
|
|
- switch (ar->hw_rev) {
|
|
|
- case ATH10K_HW_QCA988X:
|
|
|
- case ATH10K_HW_QCA9887:
|
|
|
- case ATH10K_HW_QCA6174:
|
|
|
- case ATH10K_HW_QCA9377:
|
|
|
- val = (ath10k_pci_read32(ar, SOC_CORE_BASE_ADDRESS +
|
|
|
- CORE_CTRL_ADDRESS) &
|
|
|
- 0x7ff) << 21;
|
|
|
- break;
|
|
|
- case ATH10K_HW_QCA9888:
|
|
|
- case ATH10K_HW_QCA99X0:
|
|
|
- case ATH10K_HW_QCA9984:
|
|
|
- case ATH10K_HW_QCA4019:
|
|
|
- val = ath10k_pci_read32(ar, PCIE_BAR_REG_ADDRESS);
|
|
|
- break;
|
|
|
- }
|
|
|
+ val = (ath10k_pci_read32(ar, SOC_CORE_BASE_ADDRESS + CORE_CTRL_ADDRESS)
|
|
|
+ & 0x7ff) << 21;
|
|
|
+ val |= 0x100000 | region;
|
|
|
+ return val;
|
|
|
+}
|
|
|
+
|
|
|
+static u32 ath10k_pci_qca99x0_targ_cpu_to_ce_addr(struct ath10k *ar, u32 addr)
|
|
|
+{
|
|
|
+ u32 val = 0, region = addr & 0xfffff;
|
|
|
|
|
|
- val |= 0x100000 | (addr & 0xfffff);
|
|
|
+ val = ath10k_pci_read32(ar, PCIE_BAR_REG_ADDRESS);
|
|
|
+ val |= 0x100000 | region;
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
+static u32 ath10k_pci_targ_cpu_to_ce_addr(struct ath10k *ar, u32 addr)
|
|
|
+{
|
|
|
+ struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
|
|
+
|
|
|
+ if (WARN_ON_ONCE(!ar_pci->targ_cpu_to_ce_addr))
|
|
|
+ return -ENOTSUPP;
|
|
|
+
|
|
|
+ return ar_pci->targ_cpu_to_ce_addr(ar, addr);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Diagnostic read/write access is provided for startup/config/debug usage.
|
|
|
* Caller must guarantee proper alignment, when applicable, and single user
|
|
@@ -3170,6 +3174,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|
|
bool pci_ps;
|
|
|
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);
|
|
|
|
|
|
switch (pci_dev->device) {
|
|
|
case QCA988X_2_0_DEVICE_ID:
|
|
@@ -3177,12 +3182,14 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|
|
pci_ps = false;
|
|
|
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;
|
|
|
break;
|
|
|
case QCA9887_1_0_DEVICE_ID:
|
|
|
hw_rev = ATH10K_HW_QCA9887;
|
|
|
pci_ps = false;
|
|
|
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;
|
|
|
break;
|
|
|
case QCA6164_2_1_DEVICE_ID:
|
|
|
case QCA6174_2_1_DEVICE_ID:
|
|
@@ -3190,30 +3197,35 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|
|
pci_ps = true;
|
|
|
pci_soft_reset = ath10k_pci_warm_reset;
|
|
|
pci_hard_reset = ath10k_pci_qca6174_chip_reset;
|
|
|
+ targ_cpu_to_ce_addr = ath10k_pci_qca988x_targ_cpu_to_ce_addr;
|
|
|
break;
|
|
|
case QCA99X0_2_0_DEVICE_ID:
|
|
|
hw_rev = ATH10K_HW_QCA99X0;
|
|
|
pci_ps = false;
|
|
|
pci_soft_reset = ath10k_pci_qca99x0_soft_chip_reset;
|
|
|
pci_hard_reset = ath10k_pci_qca99x0_chip_reset;
|
|
|
+ targ_cpu_to_ce_addr = ath10k_pci_qca99x0_targ_cpu_to_ce_addr;
|
|
|
break;
|
|
|
case QCA9984_1_0_DEVICE_ID:
|
|
|
hw_rev = ATH10K_HW_QCA9984;
|
|
|
pci_ps = false;
|
|
|
pci_soft_reset = ath10k_pci_qca99x0_soft_chip_reset;
|
|
|
pci_hard_reset = ath10k_pci_qca99x0_chip_reset;
|
|
|
+ targ_cpu_to_ce_addr = ath10k_pci_qca99x0_targ_cpu_to_ce_addr;
|
|
|
break;
|
|
|
case QCA9888_2_0_DEVICE_ID:
|
|
|
hw_rev = ATH10K_HW_QCA9888;
|
|
|
pci_ps = false;
|
|
|
pci_soft_reset = ath10k_pci_qca99x0_soft_chip_reset;
|
|
|
pci_hard_reset = ath10k_pci_qca99x0_chip_reset;
|
|
|
+ targ_cpu_to_ce_addr = ath10k_pci_qca99x0_targ_cpu_to_ce_addr;
|
|
|
break;
|
|
|
case QCA9377_1_0_DEVICE_ID:
|
|
|
hw_rev = ATH10K_HW_QCA9377;
|
|
|
pci_ps = true;
|
|
|
pci_soft_reset = NULL;
|
|
|
pci_hard_reset = ath10k_pci_qca6174_chip_reset;
|
|
|
+ targ_cpu_to_ce_addr = ath10k_pci_qca988x_targ_cpu_to_ce_addr;
|
|
|
break;
|
|
|
default:
|
|
|
WARN_ON(1);
|
|
@@ -3240,6 +3252,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|
|
ar_pci->bus_ops = &ath10k_pci_bus_ops;
|
|
|
ar_pci->pci_soft_reset = pci_soft_reset;
|
|
|
ar_pci->pci_hard_reset = pci_hard_reset;
|
|
|
+ ar_pci->targ_cpu_to_ce_addr = targ_cpu_to_ce_addr;
|
|
|
|
|
|
ar->id.vendor = pdev->vendor;
|
|
|
ar->id.device = pdev->device;
|