Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6f68b1e authored by Sujith Manoharan's avatar Sujith Manoharan Committed by Kalle Valo
Browse files

ath9k: Program AR_WA correctly



Setting the required configuration in the PCIE
WorkAround register needs to be done after all the
WoW parameters have been set.

Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent bb631314
Loading
Loading
Loading
Loading
+22 −17
Original line number Original line Diff line number Diff line
@@ -219,30 +219,33 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah)
}
}
EXPORT_SYMBOL(ath9k_hw_wow_wakeup);
EXPORT_SYMBOL(ath9k_hw_wow_wakeup);


void ath9k_hw_wow_enable(struct ath_hw *ah, u32 pattern_enable)
static void ath9k_hw_wow_set_arwr_reg(struct ath_hw *ah)
{
{
	u32 wow_event_mask;
	u32 wa_reg;
	u32 keep_alive, magic_pattern, host_pm_ctrl;
	u32 set, clr;


	wow_event_mask = ah->wow.wow_event_mask;
	if (!ah->is_pciexpress)
		return;


	/*
	/*
	 * Untie Power-on-Reset from the PCI-E-Reset. When we are in
	 * We need to untie the internal POR (power-on-reset)
	 * WOW sleep, we do want the Reset from the PCI-E to disturb
	 * our hw state
	 */
	if (ah->is_pciexpress) {
		/*
		 * we need to untie the internal POR (power-on-reset)
	 * to the external PCI-E reset. We also need to tie
	 * to the external PCI-E reset. We also need to tie
	 * the PCI-E Phy reset to the PCI-E reset.
	 * the PCI-E Phy reset to the PCI-E reset.
	 */
	 */
		set = AR_WA_RESET_EN | AR_WA_POR_SHORT;
	wa_reg = REG_READ(ah, AR_WA);
		clr = AR_WA_UNTIE_RESET_EN | AR_WA_D3_L1_DISABLE;
	wa_reg &= ~AR_WA_UNTIE_RESET_EN;
		REG_RMW(ah, AR_WA, set, clr);
	wa_reg |= AR_WA_RESET_EN;
	wa_reg |= AR_WA_POR_SHORT;

	REG_WRITE(ah, AR_WA, wa_reg);
}
}


void ath9k_hw_wow_enable(struct ath_hw *ah, u32 pattern_enable)
{
	u32 wow_event_mask;
	u32 keep_alive, magic_pattern, host_pm_ctrl;

	wow_event_mask = ah->wow.wow_event_mask;

	/*
	/*
	 * AR_PMCTRL_HOST_PME_EN - Override PME enable in configuration
	 * AR_PMCTRL_HOST_PME_EN - Override PME enable in configuration
	 *                         space and allow MAC to generate WoW anyway.
	 *                         space and allow MAC to generate WoW anyway.
@@ -390,6 +393,8 @@ void ath9k_hw_wow_enable(struct ath_hw *ah, u32 pattern_enable)
	/* To bring down WOW power low margin */
	/* To bring down WOW power low margin */
	REG_SET_BIT(ah, AR_PCIE_PHY_REG3, BIT(13));
	REG_SET_BIT(ah, AR_PCIE_PHY_REG3, BIT(13));


	ath9k_hw_wow_set_arwr_reg(ah);

	/* HW WoW */
	/* HW WoW */
	REG_CLR_BIT(ah, AR_PCU_MISC_MODE3, BIT(5));
	REG_CLR_BIT(ah, AR_PCU_MISC_MODE3, BIT(5));