aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch
diff options
context:
space:
mode:
authorRobert Marko <robimarko@gmail.com>2022-12-13 23:55:26 +0100
committerRobert Marko <robimarko@gmail.com>2023-01-16 12:42:23 +0100
commit35f28f2838948e33f46c60b966a48a7e78ae8743 (patch)
treead56989de04f8e1f6ca85f49e8b39ec56f76e98b /package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch
parent4359d10b0112127d8c0835ee670e4de3952ae0b2 (diff)
downloadupstream-35f28f2838948e33f46c60b966a48a7e78ae8743.tar.gz
upstream-35f28f2838948e33f46c60b966a48a7e78ae8743.tar.bz2
upstream-35f28f2838948e33f46c60b966a48a7e78ae8743.zip
mac80211: add ath11k AHB support
This is the follow up to the PCI support commit now providing support for AHB variant as well, though currently only for ipq807x as that is only OpenWrt supported SoC ath11k supports as well. Currently, we are disabling coldboot calibration on ipq807x as it does not work, there is a remoteproc bug that makes it come late out of reset so disable coldboot until that is fixed. Also, as ath11k is quite memory hungry, we are introducing a config option to use the limits for 512MB of RAM, similar to what QCA does downstream but in way simpler and cleaner way so that 512MB save some RAM. 512MB profile is also set as the default for now. Signed-off-by: Robert Marko <robimarko@gmail.com>
Diffstat (limited to 'package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch')
-rw-r--r--package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch b/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch
new file mode 100644
index 0000000000..c854de586a
--- /dev/null
+++ b/package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch
@@ -0,0 +1,74 @@
+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",
+@@ -1826,7 +1826,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];
+@@ -1842,7 +1843,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;
+ }