forked from Openwrt-EcoNet/openwrt
Add QCN6122 platform support. QCN6122 is a PCIe based solution that is attached to and enumerated by the WPSS (Wireless Processor SubSystem) Q6 processor. Though it is a PCIe device, since it is not attached to APSS processor (Application Processor SubSystem), APSS will be unaware of such a decice and hence it is registered to the APSS processor as a platform device(AHB). Because of this hybrid nature, it is called as a hybrid bus device. As such, QCN6122 is a hybrid bus type device and follows the same codepath as for WCN6750. This is a reversed engineered and heavily simplified version of below downstream patch: https://git.codelinaro.org/clo/qsdk/oss/system/feeds/wlan-open/-/ \ blob/NHSS.QSDK.12.4.5.r2/mac80211/patches/232-ath11k-qcn6122-support.patch Co-developed-by: George Moussalem <george.moussalem@outlook.com> Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org> Signed-off-by: George Moussalem <george.moussalem@outlook.com> Link: https://github.com/openwrt/openwrt/pull/17182 Signed-off-by: Robert Marko <robimarko@gmail.com>
56 lines
1.9 KiB
Diff
56 lines
1.9 KiB
Diff
From: George Moussalem <george.moussalem@outlook.com>
|
|
Date: Wed, 27 Oct 2024 16:34:11 +0400
|
|
Subject: [PATCH] wifi: ath11k: add QCN6122 device support
|
|
|
|
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
|
|
(Application Processor SubSystem) as a platform device (AHB) and remoteproc
|
|
APIs are used to boot up or shutdown the device like other AHB devices.
|
|
|
|
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.
|
|
|
|
STA, AP, and MESH modes are supported.
|
|
Tested on: Linksys MX2000 and GLiNET B3000 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
|
|
|
|
An important point to note is that though QCN6122 is a PCIe device,
|
|
it is an IPQ5018 SoC specific solution and cannot be attached to any other
|
|
platform.
|
|
|
|
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
|
|
---
|
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
|
@@ -37,6 +37,9 @@ static const struct of_device_id ath11k_
|
|
{ .compatible = "qcom,ipq5018-wifi",
|
|
.data = (void *)ATH11K_HW_IPQ5018_HW10,
|
|
},
|
|
+ { .compatible = "qcom,qcn6122-wifi",
|
|
+ .data = (void *)ATH11K_HW_QCN6122_HW10,
|
|
+ },
|
|
{ }
|
|
};
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/pcic.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
|
|
@@ -126,6 +126,15 @@ static const struct ath11k_msi_config at
|
|
},
|
|
.hw_rev = ATH11K_HW_QCA2066_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)
|