PKG_DRIVERS += \
ath ath5k ath6kl ath6kl-sdio ath6kl-usb ath9k ath9k-common ath9k-htc ath10k ath10k-smallbuffers \
- ath11k ath11k-pci carl9170 owl-loader ar5523 wil6210
+ ath11k ath11k-ahb ath11k-pci carl9170 owl-loader ar5523 wil6210
PKG_CONFIG_DEPENDS += \
CONFIG_PACKAGE_ATH_DEBUG \
config-$(call config_package,ath10k) += ATH10K ATH10K_PCI
config-$(call config_package,ath10k-smallbuffers) += ATH10K ATH10K_PCI ATH10K_SMALLBUFFERS
config-$(call config_package,ath11k) += ATH11K
+config-$(call config_package,ath11k-ahb) += ATH11K_AHB
config-$(call config_package,ath11k-pci) += ATH11K_PCI
config-$(call config_package,ath5k) += ATH5K
config ATH11K_THERMAL
bool "Enable thermal sensors and throttling support"
depends on PACKAGE_kmod-ath11k
+ default y if TARGET_ipq807x
endef
+define KernelPackage/ath11k-ahb
+ $(call KernelPackage/mac80211/Default)
+ TITLE:=Qualcomm 802.11ax AHB wireless chipset support
+ URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath11k
+ DEPENDS+= @TARGET_ipq807x +kmod-ath11k +kmod-qrtr-smd
+ FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath11k/ath11k_ahb.ko
+ AUTOLOAD:=$(call AutoProbe,ath11k_ahb)
+endef
+
+define KernelPackage/ath11k-ahb/description
+This module adds support for Qualcomm Technologies 802.11ax family of
+chipsets with AHB bus.
+endef
+
define KernelPackage/ath11k-pci
$(call KernelPackage/mac80211/Default)
TITLE:=Qualcomm 802.11ax PCI wireless chipset support
--- /dev/null
+From dd3b9c59cfa1e9e0b73a575f4646be905691eaef Mon Sep 17 00:00:00 2001
+From: Robert Marko <robimarko@gmail.com>
+Date: Sat, 16 Oct 2021 19:34:10 +0200
+Subject: [PATCH 241/241] ath11k: Disable coldboot calibration for IPQ8074
+
+There is a bug with the remoteproc reset after coldboot calibration,
+so until that is resolved disabled it to allow using the radio.
+
+Signed-off-by: Robert Marko <robimarko@gmail.com>
+---
+ drivers/net/wireless/ath/ath11k/core.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/ath/ath11k/core.c
++++ b/drivers/net/wireless/ath/ath11k/core.c
+@@ -81,7 +81,7 @@ static const struct ath11k_hw_params ath
+ .supports_shadow_regs = false,
+ .idle_ps = false,
+ .supports_sta_ps = false,
+- .cold_boot_calib = true,
++ .cold_boot_calib = false,
+ .cbcal_restart_fw = true,
+ .fw_mem_mode = 0,
+ .num_vdevs = 16 + 1,
--- /dev/null
+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;
+ }