mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
930e702d72
Synchronize the ath11k backports with the current ath-next tree. This replaces the management TLV pending fix with the upstreamed one, fixes traffic flooding when AP and monitor modes are used at the same time, fixes QCN9074 always showing -95 dBm for station RSSI in dumps, fixes potential crash on boot if spectral scan is enabled due to writing to unitialized memory and adds 11d scan offloading for WCN6750 and WCN6855. Signed-off-by: Robert Marko <robimarko@gmail.com>
75 lines
2.4 KiB
Diff
75 lines
2.4 KiB
Diff
From fb1c40c225cbc413d82c872dd8c8af3469b2b921 Mon Sep 17 00:00:00 2001
|
|
From: Robert Marko <robimarko@gmail.com>
|
|
Date: Fri, 16 Dec 2022 17:17:52 +0100
|
|
Subject: [PATCH] ath11k: support setting FW memory mode via DT
|
|
|
|
ath11k is really memory intensive for devices with less that 1GB of RAM,
|
|
so lets allow saving a significant amount of memory by setting the FW to
|
|
Mode-1 via DTS for devices that need it.
|
|
|
|
However the drawback is reduced number of VDEV-s and peers which is a
|
|
reasonable tradeoff.
|
|
|
|
Mode-2 allows for further reduction, but it has further restrictions.
|
|
|
|
While we are here, lets add a print to be able to easily determine what
|
|
FW memory mode is being used.
|
|
|
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
---
|
|
drivers/net/wireless/ath/ath11k/core.c | 28 ++++++++++++++++++++++++--
|
|
1 file changed, 26 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
@@ -32,7 +32,7 @@ module_param_named(frame_mode, ath11k_fr
|
|
MODULE_PARM_DESC(frame_mode,
|
|
"Datapath frame mode (0: raw, 1: native wifi (default), 2: ethernet)");
|
|
|
|
-static const struct ath11k_hw_params ath11k_hw_params[] = {
|
|
+static struct ath11k_hw_params ath11k_hw_params[] = {
|
|
{
|
|
.hw_rev = ATH11K_HW_IPQ8074,
|
|
.name = "ipq8074 hw2.0",
|
|
@@ -1911,7 +1911,8 @@ static void ath11k_core_reset(struct wor
|
|
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
|
{
|
|
const struct ath11k_hw_params *hw_params = NULL;
|
|
- int i;
|
|
+ u32 fw_mem_mode;
|
|
+ int i, ret;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
|
hw_params = &ath11k_hw_params[i];
|
|
@@ -1927,7 +1928,30 @@ static int ath11k_init_hw_params(struct
|
|
|
|
ab->hw_params = *hw_params;
|
|
|
|
+ ret = of_property_read_u32(ab->dev->of_node,
|
|
+ "qcom,ath11k-fw-memory-mode",
|
|
+ &fw_mem_mode);
|
|
+ if (!ret) {
|
|
+ if (fw_mem_mode == 0) {
|
|
+ ab->hw_params.fw_mem_mode = 0;
|
|
+ ab->hw_params.num_vdevs = 16 + 1;
|
|
+ ab->hw_params.num_peers = 512;
|
|
+ }
|
|
+ else if (fw_mem_mode == 1) {
|
|
+ ab->hw_params.fw_mem_mode = 1;
|
|
+ ab->hw_params.num_vdevs = 8;
|
|
+ ab->hw_params.num_peers = 128;
|
|
+ } else if (fw_mem_mode == 2) {
|
|
+ ab->hw_params.fw_mem_mode = 2;
|
|
+ ab->hw_params.num_vdevs = 8;
|
|
+ ab->hw_params.num_peers = 128;
|
|
+ ab->hw_params.cold_boot_calib = false;
|
|
+ } else
|
|
+ ath11k_info(ab, "Unsupported FW memory mode: %u\n", fw_mem_mode);
|
|
+ }
|
|
+
|
|
ath11k_info(ab, "%s\n", ab->hw_params.name);
|
|
+ ath11k_info(ab, "FW memory mode: %d\n", ab->hw_params.fw_mem_mode);
|
|
|
|
return 0;
|
|
}
|