[PATCH ath-next 16/16] wifi: ath11k: add QCN6122 device support
From: George Moussalem via B4 Relay
Date: Wed Sep 23 2026 - 08:21:10 EST
From: George Moussalem <george.moussalem@xxxxxxxxxxx>
QCN6122 is a 2x2 11AX PCIe based chipset, but it is attached to the WPSS
(Wireless Processor SubSystem) Q6 processor, hence it is enumerated
by the Q6 processor. It is registered to the APSS processor as a
platform device (AHB).
Q6 firmware segments for QCN6122 are contained within the multi-PD
version of the shared firmware package for IPQ5018. Each (up to 2)
QCN6122 radio present runs in its own user PD which the ath11k driver
manages to power it up or down.
Also, device information like BAR and its size is not known to the APSS
processor as the chip is enumerated by WPSS Q6. These details are
fetched over QMI.
The QCN6122 chip supports STA, AP, and MESH modes.
Tested on: Linksys MX2000 and GLiNET B3000 wireless access points for
prolonged duration tests spanning multiple days with multiple clients
connected with firmware WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
---
drivers/net/wireless/ath/ath11k/ahb.c | 7 +++++++
drivers/net/wireless/ath/ath11k/pcic.c | 9 +++++++++
2 files changed, 16 insertions(+)
diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c
index 26110c927577..51908e779b7c 100644
--- a/drivers/net/wireless/ath/ath11k/ahb.c
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
@@ -46,6 +46,9 @@ static const struct of_device_id ath11k_ahb_of_match[] = {
{ .compatible = "qcom,ipq5018-wifi",
.data = (void *)ATH11K_HW_IPQ5018_HW10,
},
+ { .compatible = "qcom,qcn6122-wifi",
+ .data = (void *)ATH11K_HW_QCN6122_HW10,
+ },
{ }
};
@@ -1395,6 +1398,10 @@ static int ath11k_ahb_setup_msi_resources(struct ath11k_base *ab)
ab->pci.msi.addr_hi = upper_32_bits(msi_addr_iova);
ret = of_property_read_u32_index(ab->dev->of_node, "interrupts", 1, &int_prop);
+ if (ret == -EINVAL)
+ ret = of_property_read_u32_index(ab->dev->of_node,
+ "interrupts-extended", 2,
+ &int_prop);
if (ret)
return ret;
diff --git a/drivers/net/wireless/ath/ath11k/pcic.c b/drivers/net/wireless/ath/ath11k/pcic.c
index 2259adc3bbdc..cdcf3df26438 100644
--- a/drivers/net/wireless/ath/ath11k/pcic.c
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
@@ -138,6 +138,15 @@ static const struct ath11k_msi_config ath11k_msi_config[] = {
},
.hw_rev = ATH11K_HW_QCA6698AQ_HW21,
},
+ {
+ .total_vectors = 13,
+ .total_users = 2,
+ .users = (struct ath11k_msi_user[]) {
+ { .name = "CE", .num_vectors = 5, .base_vector = 0 },
+ { .name = "DP", .num_vectors = 8, .base_vector = 5 },
+ },
+ .hw_rev = ATH11K_HW_QCN6122_HW10,
+ },
};
int ath11k_pcic_init_msi_config(struct ath11k_base *ab)
--
2.53.0