mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
wifi: ath12k: Use RMW accessors for changing LNKCTL
[ Upstream commitf5a7ac118f] Don't assume that only the driver would be accessing LNKCTL. ASPM policy changes can trigger write to LNKCTL outside of driver's control. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. On restore, clear the ASPMC field properly. Suggested-by: Lukas Wunner <lukas@wunner.de> Fixes:d889913205("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices") Link: https://lore.kernel.org/r/20230717120503.15276-10-ilpo.jarvinen@linux.intel.com Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Simon Horman <simon.horman@corigine.com> Acked-by: Kalle Valo <kvalo@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9697dfa899
commit
f8dca9806d
@@ -794,8 +794,8 @@ static void ath12k_pci_aspm_disable(struct ath12k_pci *ab_pci)
|
||||
u16_get_bits(ab_pci->link_ctl, PCI_EXP_LNKCTL_ASPM_L1));
|
||||
|
||||
/* disable L0s and L1 */
|
||||
pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL,
|
||||
ab_pci->link_ctl & ~PCI_EXP_LNKCTL_ASPMC);
|
||||
pcie_capability_clear_word(ab_pci->pdev, PCI_EXP_LNKCTL,
|
||||
PCI_EXP_LNKCTL_ASPMC);
|
||||
|
||||
set_bit(ATH12K_PCI_ASPM_RESTORE, &ab_pci->flags);
|
||||
}
|
||||
@@ -803,8 +803,10 @@ static void ath12k_pci_aspm_disable(struct ath12k_pci *ab_pci)
|
||||
static void ath12k_pci_aspm_restore(struct ath12k_pci *ab_pci)
|
||||
{
|
||||
if (test_and_clear_bit(ATH12K_PCI_ASPM_RESTORE, &ab_pci->flags))
|
||||
pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL,
|
||||
ab_pci->link_ctl);
|
||||
pcie_capability_clear_and_set_word(ab_pci->pdev, PCI_EXP_LNKCTL,
|
||||
PCI_EXP_LNKCTL_ASPMC,
|
||||
ab_pci->link_ctl &
|
||||
PCI_EXP_LNKCTL_ASPMC);
|
||||
}
|
||||
|
||||
static void ath12k_pci_kill_tasklets(struct ath12k_base *ab)
|
||||
|
||||
Reference in New Issue
Block a user