Skip to content

Commit

Permalink
wifi: ath12k: restore ASPM for supported hardwares only
Browse files Browse the repository at this point in the history
During PCI based hardware device start up, ASPM is disabled for all. And
once firmware is ready, it is restored back. However, not all hardwares
(for example QCN9274) supports ASPM. Hence there is a need to conditionally
restore ASPM back. Or else, for such hardwares, issue can be seen during
sending and receiving packets.

Introduce a new hardware param supports_aspm which identifies whether a
given hardware supports ASPM or not and then accordingly restore it.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://patch.msgid.link/20240709055817.3371406-1-quic_adisi@quicinc.com
  • Loading branch information
Aditya Kumar Singh authored and kvalo committed Aug 7, 2024
1 parent f6ffe7f commit 8be1262
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 1 deletion.
6 changes: 6 additions & 0 deletions drivers/net/wireless/ath/ath12k/hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -924,6 +924,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {

.acpi_guid = NULL,
.supports_dynamic_smps_6ghz = true,

.supports_aspm = false,
},
{
.name = "wcn7850 hw2.0",
Expand Down Expand Up @@ -1000,6 +1002,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {

.acpi_guid = &wcn7850_uuid,
.supports_dynamic_smps_6ghz = false,

.supports_aspm = true,
},
{
.name = "qcn9274 hw2.0",
Expand Down Expand Up @@ -1072,6 +1076,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {

.acpi_guid = NULL,
.supports_dynamic_smps_6ghz = true,

.supports_aspm = false,
},
};

Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/ath/ath12k/hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ struct ath12k_hw_params {
bool tcl_ring_retry:1;
bool reoq_lut_support:1;
bool supports_shadow_regs:1;
bool supports_aspm:1;

u32 num_tcl_banks;
u32 max_tx_ring;
Expand Down
3 changes: 2 additions & 1 deletion drivers/net/wireless/ath/ath12k/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -953,7 +953,8 @@ static void ath12k_pci_update_qrtr_node_id(struct ath12k_base *ab)

static void ath12k_pci_aspm_restore(struct ath12k_pci *ab_pci)
{
if (test_and_clear_bit(ATH12K_PCI_ASPM_RESTORE, &ab_pci->flags))
if (ab_pci->ab->hw_params->supports_aspm &&
test_and_clear_bit(ATH12K_PCI_ASPM_RESTORE, &ab_pci->flags))
pcie_capability_clear_and_set_word(ab_pci->pdev, PCI_EXP_LNKCTL,
PCI_EXP_LNKCTL_ASPMC,
ab_pci->link_ctl &
Expand Down

0 comments on commit 8be1262

Please sign in to comment.