mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-02 02:37:05 +08:00
140 lines
4.8 KiB
Diff
140 lines
4.8 KiB
Diff
From beefee71336bfb406c3e37a0de8a12881424e78c Mon Sep 17 00:00:00 2001
|
|
From: Seevalamuthu Mariappan <seevalam@codeaurora.org>
|
|
Date: Mon, 13 Dec 2021 11:53:08 +0200
|
|
Subject: [PATCH] ath11k: Change qcn9074 fw to operate in mode-2
|
|
|
|
In mode-2 QCN9074 firmware uses 15MB of host memory and firmware
|
|
request 1MB size segements in QMI, whereas in mode-0 firmware
|
|
uses 45MB of host memory and each segment is of 2MB size.
|
|
In mode-2 firmware operates with reduced number of vdevs and peers.
|
|
|
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01838-QCAHKSWPL_SILICONZ-1
|
|
|
|
Signed-off-by: Seevalamuthu Mariappan <seevalam@codeaurora.org>
|
|
Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/20211209104351.9811-3-kvalo@kernel.org
|
|
---
|
|
drivers/net/wireless/ath/ath11k/core.c | 18 ++++++++++++++++++
|
|
drivers/net/wireless/ath/ath11k/hw.h | 9 ++++++---
|
|
drivers/net/wireless/ath/ath11k/qmi.c | 2 +-
|
|
drivers/net/wireless/ath/ath11k/qmi.h | 1 -
|
|
4 files changed, 25 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
@@ -79,6 +79,9 @@ static const struct ath11k_hw_params ath
|
|
.idle_ps = false,
|
|
.supports_sta_ps = false,
|
|
.cold_boot_calib = true,
|
|
+ .fw_mem_mode = 0,
|
|
+ .num_vdevs = 16 + 1,
|
|
+ .num_peers = 512,
|
|
.supports_suspend = false,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_ipq8074),
|
|
.fix_l1ss = true,
|
|
@@ -134,6 +137,9 @@ static const struct ath11k_hw_params ath
|
|
.idle_ps = false,
|
|
.supports_sta_ps = false,
|
|
.cold_boot_calib = true,
|
|
+ .fw_mem_mode = 0,
|
|
+ .num_vdevs = 16 + 1,
|
|
+ .num_peers = 512,
|
|
.supports_suspend = false,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_ipq8074),
|
|
.fix_l1ss = true,
|
|
@@ -188,6 +194,9 @@ static const struct ath11k_hw_params ath
|
|
.idle_ps = true,
|
|
.supports_sta_ps = true,
|
|
.cold_boot_calib = false,
|
|
+ .fw_mem_mode = 0,
|
|
+ .num_vdevs = 16 + 1,
|
|
+ .num_peers = 512,
|
|
.supports_suspend = true,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_ipq8074),
|
|
.fix_l1ss = true,
|
|
@@ -242,6 +251,9 @@ static const struct ath11k_hw_params ath
|
|
.idle_ps = false,
|
|
.supports_sta_ps = false,
|
|
.cold_boot_calib = false,
|
|
+ .fw_mem_mode = 2,
|
|
+ .num_vdevs = 8,
|
|
+ .num_peers = 128,
|
|
.supports_suspend = false,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
|
|
.fix_l1ss = true,
|
|
@@ -296,6 +308,9 @@ static const struct ath11k_hw_params ath
|
|
.idle_ps = true,
|
|
.supports_sta_ps = true,
|
|
.cold_boot_calib = false,
|
|
+ .fw_mem_mode = 0,
|
|
+ .num_vdevs = 16 + 1,
|
|
+ .num_peers = 512,
|
|
.supports_suspend = true,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
|
|
.fix_l1ss = false,
|
|
@@ -349,6 +364,9 @@ static const struct ath11k_hw_params ath
|
|
.idle_ps = true,
|
|
.supports_sta_ps = true,
|
|
.cold_boot_calib = false,
|
|
+ .fw_mem_mode = 0,
|
|
+ .num_vdevs = 16 + 1,
|
|
+ .num_peers = 512,
|
|
.supports_suspend = true,
|
|
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
|
|
.fix_l1ss = false,
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
|
@@ -12,9 +12,9 @@
|
|
/* Target configuration defines */
|
|
|
|
/* Num VDEVS per radio */
|
|
-#define TARGET_NUM_VDEVS(ab) (16 + 1)
|
|
+#define TARGET_NUM_VDEVS(ab) (ab->hw_params.num_vdevs)
|
|
|
|
-#define TARGET_NUM_PEERS_PDEV(ab) (512 + TARGET_NUM_VDEVS(ab))
|
|
+#define TARGET_NUM_PEERS_PDEV(ab) (ab->hw_params.num_peers + TARGET_NUM_VDEVS(ab))
|
|
|
|
/* Num of peers for Single Radio mode */
|
|
#define TARGET_NUM_PEERS_SINGLE(ab) (TARGET_NUM_PEERS_PDEV(ab))
|
|
@@ -26,7 +26,7 @@
|
|
#define TARGET_NUM_PEERS_DBS_SBS(ab) (3 * TARGET_NUM_PEERS_PDEV(ab))
|
|
|
|
/* Max num of stations (per radio) */
|
|
-#define TARGET_NUM_STATIONS(ab) 512
|
|
+#define TARGET_NUM_STATIONS(ab) (ab->hw_params.num_peers)
|
|
|
|
#define TARGET_NUM_PEERS(ab, x) TARGET_NUM_PEERS_##x(ab)
|
|
#define TARGET_NUM_PEER_KEYS 2
|
|
@@ -173,6 +173,9 @@ struct ath11k_hw_params {
|
|
bool idle_ps;
|
|
bool supports_sta_ps;
|
|
bool cold_boot_calib;
|
|
+ int fw_mem_mode;
|
|
+ u32 num_vdevs;
|
|
+ u32 num_peers;
|
|
bool supports_suspend;
|
|
u32 hal_desc_sz;
|
|
bool fix_l1ss;
|
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
|
@@ -2830,7 +2830,7 @@ int ath11k_qmi_init_service(struct ath11
|
|
memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk));
|
|
ab->qmi.ab = ab;
|
|
|
|
- ab->qmi.target_mem_mode = ATH11K_QMI_TARGET_MEM_MODE_DEFAULT;
|
|
+ ab->qmi.target_mem_mode = ab->hw_params.fw_mem_mode;
|
|
ret = qmi_handle_init(&ab->qmi.handle, ATH11K_QMI_RESP_LEN_MAX,
|
|
&ath11k_qmi_ops, ath11k_qmi_msg_handlers);
|
|
if (ret < 0) {
|
|
--- a/drivers/net/wireless/ath/ath11k/qmi.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.h
|
|
@@ -34,7 +34,6 @@
|
|
|
|
#define QMI_WLANFW_MAX_DATA_SIZE_V01 6144
|
|
#define ATH11K_FIRMWARE_MODE_OFF 4
|
|
-#define ATH11K_QMI_TARGET_MEM_MODE_DEFAULT 0
|
|
#define ATH11K_COLD_BOOT_FW_RESET_DELAY (40 * HZ)
|
|
|
|
struct ath11k_base;
|