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>
75 lines
2.3 KiB
Diff
75 lines
2.3 KiB
Diff
From: George Moussalem <george.moussalem@outlook.com>
|
|
Date: Wed, 27 Oct 2024 16:34:11 +0400
|
|
Subject: [PATCH] wifi: ath11k: add hw ring mask for QCN6122
|
|
|
|
Add ring mask for QCN6122 and register them in hw params.
|
|
|
|
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
|
|
---
|
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
@@ -821,6 +821,7 @@ static struct ath11k_hw_params ath11k_hw
|
|
.max_radios = MAX_RADIOS_5018,
|
|
.bdf_addr = 0x4D200000,
|
|
.hw_ops = &ipq5018_ops,
|
|
+ .ring_mask = &ath11k_hw_ring_mask_qcn6122,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
|
|
.regs = &qcn6122_regs,
|
|
.qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCN6122,
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
|
@@ -2070,6 +2070,43 @@ const struct ath11k_hw_ring_mask ath11k_
|
|
},
|
|
};
|
|
|
|
+const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn6122 = {
|
|
+ .tx = {
|
|
+ ATH11K_TX_RING_MASK_0,
|
|
+ ATH11K_TX_RING_MASK_1,
|
|
+ ATH11K_TX_RING_MASK_2,
|
|
+ },
|
|
+ .rx_mon_status = {
|
|
+ 0, 0, 0,
|
|
+ ATH11K_RX_MON_STATUS_RING_MASK_0,
|
|
+ },
|
|
+ .rx = {
|
|
+ 0, 0, 0, 0,
|
|
+ ATH11K_RX_RING_MASK_0,
|
|
+ ATH11K_RX_RING_MASK_1,
|
|
+ ATH11K_RX_RING_MASK_2,
|
|
+ ATH11K_RX_RING_MASK_3,
|
|
+ },
|
|
+ .rx_err = {
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
+ ATH11K_RX_ERR_RING_MASK_0,
|
|
+ },
|
|
+ .rx_wbm_rel = {
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
+ ATH11K_RX_WBM_REL_RING_MASK_0,
|
|
+ },
|
|
+ .reo_status = {
|
|
+ 0, 0, 0,
|
|
+ ATH11K_REO_STATUS_RING_MASK_0,
|
|
+ },
|
|
+ .rxdma2host = {
|
|
+ ATH11K_RXDMA2HOST_RING_MASK_0,
|
|
+ },
|
|
+ .host2rxdma = {
|
|
+ ATH11K_HOST2RXDMA_RING_MASK_0,
|
|
+ },
|
|
+};
|
|
+
|
|
/* Target firmware's Copy Engine configuration for IPQ5018 */
|
|
const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[] = {
|
|
/* CE0: host->target HTC control and raw streams */
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
|
@@ -289,6 +289,7 @@ extern const struct ath11k_hw_ring_mask
|
|
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390;
|
|
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn9074;
|
|
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_wcn6750;
|
|
+extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn6122;
|
|
|
|
extern const struct ce_ie_addr ath11k_ce_ie_addr_ipq8074;
|
|
extern const struct ce_ie_addr ath11k_ce_ie_addr_ipq5018;
|