@@ -342,6 +342,20 @@ static void ath11k_pci_clear_all_intrs(struct ath11k_base *ab)
ath11k_pci_write32(ab, PCIE_PCIE_INT_ALL_CLEAR, PCIE_INT_CLEAR_ALL);
}
+static void ath11k_pci_set_wlaon_pwr_ctrl(struct ath11k_base *ab, bool set_vdd4blow)
+{
+ u32 val;
+
+ val = ath11k_pci_read32(ab, WLAON_QFPROM_PWR_CTRL_REG);
+
+ if (set_vdd4blow)
+ val |= QFPROM_PWR_CTRL_VDD4BLOW_MASK;
+ else
+ val &= ~QFPROM_PWR_CTRL_VDD4BLOW_MASK;
+
+ ath11k_pci_write32(ab, WLAON_QFPROM_PWR_CTRL_REG, val);
+}
+
static void ath11k_pci_force_wake(struct ath11k_base *ab)
{
int val;
@@ -358,6 +372,7 @@ static void ath11k_pci_sw_reset(struct ath11k_base *ab, bool power_on)
if (power_on) {
ath11k_pci_enable_LTSSM(ab);
ath11k_pci_clear_all_intrs(ab);
+ ath11k_pci_set_wlaon_pwr_ctrl(ab, false);
ath11k_pci_fix_l1ss(ab);
}
@@ -34,6 +34,10 @@
#define PCIE_SMLH_REQ_RST_LINK_DOWN 0x2
#define PCIE_INT_CLEAR_ALL 0xFFFFFFFF
+#define WLAON_QFPROM_PWR_CTRL_REG 0x01F8031C
+#define QFPROM_PWR_CTRL_VDD4BLOW_MASK 0x4
+#define QFPROM_PWR_CTRL_SHUTDOWN_MASK 0x1
+
#define PCIE_QSERDES_COM_SYSCLK_EN_SEL_REG 0x01E0C0AC
#define PCIE_QSERDES_COM_SYSCLK_EN_SEL_VAL 0x10
#define PCIE_QSERDES_COM_SYSCLK_EN_SEL_MSK 0xFFFFFFFF