Skip to content

Commit 6c1b6bd

Browse files
ij-intelbjorn-helgaas
authored andcommitted
wifi: ath11k: Use RMW accessors for changing LNKCTL
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: e9603f4 ("ath11k: pci: disable ASPM L0sLs before downloading firmware") Link: https://lore.kernel.org/r/20230717120503.15276-9-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>
1 parent 30de872 commit 6c1b6bd

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

  • drivers/net/wireless/ath/ath11k

drivers/net/wireless/ath/ath11k/pci.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -581,17 +581,19 @@ static void ath11k_pci_aspm_disable(struct ath11k_pci *ab_pci)
581581
u16_get_bits(ab_pci->link_ctl, PCI_EXP_LNKCTL_ASPM_L1));
582582

583583
/* disable L0s and L1 */
584-
pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL,
585-
ab_pci->link_ctl & ~PCI_EXP_LNKCTL_ASPMC);
584+
pcie_capability_clear_word(ab_pci->pdev, PCI_EXP_LNKCTL,
585+
PCI_EXP_LNKCTL_ASPMC);
586586

587587
set_bit(ATH11K_PCI_ASPM_RESTORE, &ab_pci->flags);
588588
}
589589

590590
static void ath11k_pci_aspm_restore(struct ath11k_pci *ab_pci)
591591
{
592592
if (test_and_clear_bit(ATH11K_PCI_ASPM_RESTORE, &ab_pci->flags))
593-
pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL,
594-
ab_pci->link_ctl);
593+
pcie_capability_clear_and_set_word(ab_pci->pdev, PCI_EXP_LNKCTL,
594+
PCI_EXP_LNKCTL_ASPMC,
595+
ab_pci->link_ctl &
596+
PCI_EXP_LNKCTL_ASPMC);
595597
}
596598

597599
static int ath11k_pci_power_up(struct ath11k_base *ab)

0 commit comments

Comments
 (0)