mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-06-11 00:32:05 +08:00
mac80211: add ath11k support
This commit is contained in:
parent
eac26cc353
commit
b3908e3b65
@ -1,6 +1,6 @@
|
||||
PKG_DRIVERS += \
|
||||
ath ath5k ath6kl ath6kl-sdio ath6kl-usb ath9k ath9k-common ath9k-htc ath10k \
|
||||
ath11k carl9170 owl-loader ar5523 wil6210
|
||||
ath11k ath11k-ahb ath11k-pci carl9170 owl-loader ar5523 wil6210
|
||||
|
||||
PKG_CONFIG_DEPENDS += \
|
||||
CONFIG_PACKAGE_ATH_DEBUG \
|
||||
@ -19,7 +19,7 @@ ifdef CONFIG_PACKAGE_MAC80211_DEBUGFS
|
||||
ATH9K_DEBUGFS \
|
||||
ATH9K_HTC_DEBUGFS \
|
||||
ATH10K_DEBUGFS \
|
||||
ATH11K_DEBUGFS \
|
||||
ATH11K_DEBUGFS \
|
||||
CARL9170_DEBUGFS \
|
||||
ATH5K_DEBUG \
|
||||
ATH6KL_DEBUG \
|
||||
@ -29,7 +29,7 @@ endif
|
||||
ifdef CONFIG_PACKAGE_MAC80211_TRACING
|
||||
config-y += \
|
||||
ATH10K_TRACING \
|
||||
ATH11K_TRACING \
|
||||
ATH11K_TRACING \
|
||||
ATH6KL_TRACING \
|
||||
ATH_TRACEPOINTS \
|
||||
ATH5K_TRACER \
|
||||
@ -39,7 +39,7 @@ endif
|
||||
config-$(call config_package,ath) += ATH_CARDS ATH_COMMON
|
||||
config-$(CONFIG_PACKAGE_ATH_DEBUG) += ATH_DEBUG ATH10K_DEBUG ATH11K_DEBUG ATH9K_STATION_STATISTICS
|
||||
config-$(CONFIG_PACKAGE_ATH_DFS) += ATH9K_DFS_CERTIFIED ATH10K_DFS_CERTIFIED
|
||||
config-$(CONFIG_PACKAGE_ATH_SPECTRAL) += ATH9K_COMMON_SPECTRAL ATH10K_SPECTRAL
|
||||
config-$(CONFIG_PACKAGE_ATH_SPECTRAL) += ATH9K_COMMON_SPECTRAL ATH10K_SPECTRAL ATH11K_SPECTRAL
|
||||
config-$(CONFIG_PACKAGE_ATH_DYNACK) += ATH9K_DYNACK
|
||||
config-$(call config_package,ath9k) += ATH9K
|
||||
config-$(call config_package,ath9k-common) += ATH9K_COMMON
|
||||
@ -58,6 +58,8 @@ config-$(CONFIG_ATH10K_THERMAL) += ATH10K_THERMAL
|
||||
config-$(call config_package,ath9k-htc) += ATH9K_HTC
|
||||
config-$(call config_package,ath10k) += ATH10K ATH10K_PCI
|
||||
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
|
||||
ifdef CONFIG_TARGET_ath25
|
||||
@ -280,16 +282,16 @@ define KernelPackage/ath10k/config
|
||||
|
||||
config ATH10K_THERMAL
|
||||
bool "Enable thermal sensors and throttling support"
|
||||
default y
|
||||
depends on PACKAGE_kmod-ath10k
|
||||
|
||||
endef
|
||||
|
||||
define KernelPackage/ath11k
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Qualcomm 802.11ax wireless chipset support
|
||||
TITLE:=Qualcomm 802.11ax wireless chipset support (common code)
|
||||
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath11k
|
||||
DEPENDS+= @TARGET_ipq807x +kmod-ath +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT +@DRIVER_11W_SUPPORT +kmod-crypto-michael-mic
|
||||
DEPENDS+= +kmod-ath +@DRIVER_11N_SUPPORT +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT \
|
||||
+kmod-crypto-michael-mic +ATH11K_THERMAL:kmod-hwmon-core +ATH11K_THERMAL:kmod-thermal
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath11k/ath11k.ko
|
||||
AUTOLOAD:=$(call AutoProbe,ath11k)
|
||||
endef
|
||||
@ -299,6 +301,43 @@ This module adds support for Qualcomm Technologies 802.11ax family of
|
||||
chipsets.
|
||||
endef
|
||||
|
||||
define KernelPackage/ath11k/config
|
||||
|
||||
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
|
||||
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
|
||||
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath11k
|
||||
DEPENDS+= @PCI_SUPPORT @TARGET_ipq807x +kmod-ath11k
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath11k/ath11k_pci.ko
|
||||
AUTOLOAD:=$(call AutoProbe,ath11k_pci)
|
||||
endef
|
||||
|
||||
define KernelPackage/ath11k-pci/description
|
||||
This module adds support for Qualcomm Technologies 802.11ax family of
|
||||
chipsets with PCI bus.
|
||||
endef
|
||||
|
||||
define KernelPackage/carl9170
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Driver for Atheros AR9170 USB sticks
|
||||
@ -338,4 +377,4 @@ define KernelPackage/wil6210
|
||||
DEPENDS+= @PCI_SUPPORT +kmod-mac80211 +wil6210-firmware
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/wil6210/wil6210.ko
|
||||
AUTOLOAD:=$(call AutoProbe,wil6210)
|
||||
endef
|
||||
endef
|
@ -0,0 +1,144 @@
|
||||
From da4ccc477bb46cc518991828ae8ac79e856f92ab Mon Sep 17 00:00:00 2001
|
||||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Thu, 15 Oct 2020 15:15:01 +0200
|
||||
Subject: [PATCH] ath11k: search DT for qcom,ath11k-calibration-variant
|
||||
|
||||
Board Data File (BDF) is loaded upon driver boot-up procedure. The right
|
||||
board data file is identified on IPQ6018 using bus, qmi-chip-id and
|
||||
qmi-board-id.
|
||||
|
||||
The problem, however, can occur when the (default) board data file cannot
|
||||
fulfill with the vendor requirements and it is necessary to use a different
|
||||
board data file.
|
||||
|
||||
This problem was already solved on ath10k by adding a ",variant=.*" at the
|
||||
end of the board name. The same functionality must also be provided for
|
||||
ath11k.
|
||||
|
||||
The device tree requires an additional string to define the variant name
|
||||
|
||||
wifi@c000000 {
|
||||
status = "okay";
|
||||
qcom,ath11k-calibration-variant = "Cigtech-WF-188";
|
||||
};
|
||||
|
||||
This would create the boarddata identifier for the board-2.bin search
|
||||
|
||||
* bus=ahb,qmi-chip-id=0,qmi-board-id=18,variant=Cigtech-WF-188
|
||||
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
Link: https://lore.kernel.org/r/20201015131501.1939685-2-sven@narfation.org
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 35 ++++++++++++++++++++++++--
|
||||
drivers/net/wireless/ath/ath11k/core.h | 1 +
|
||||
drivers/net/wireless/ath/ath11k/qmi.c | 5 ++++
|
||||
drivers/net/wireless/ath/ath11k/qmi.h | 2 ++
|
||||
4 files changed, 41 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/remoteproc.h>
|
||||
#include <linux/firmware.h>
|
||||
+#include <linux/of.h>
|
||||
#include "core.h"
|
||||
#include "dp_tx.h"
|
||||
#include "dp_rx.h"
|
||||
@@ -141,14 +142,44 @@ static const struct ath11k_hw_params ath
|
||||
},
|
||||
};
|
||||
|
||||
+int ath11k_core_check_dt(struct ath11k_base *ab)
|
||||
+{
|
||||
+ size_t max_len = sizeof(ab->qmi.target.bdf_ext);
|
||||
+ const char *variant = NULL;
|
||||
+ struct device_node *node;
|
||||
+
|
||||
+ node = ab->dev->of_node;
|
||||
+ if (!node)
|
||||
+ return -ENOENT;
|
||||
+
|
||||
+ of_property_read_string(node, "qcom,ath11k-calibration-variant",
|
||||
+ &variant);
|
||||
+ if (!variant)
|
||||
+ return -ENODATA;
|
||||
+
|
||||
+ if (strscpy(ab->qmi.target.bdf_ext, variant, max_len) < 0)
|
||||
+ ath11k_dbg(ab, ATH11K_DBG_BOOT,
|
||||
+ "bdf variant string is longer than the buffer can accommodate (variant: %s)\n",
|
||||
+ variant);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int ath11k_core_create_board_name(struct ath11k_base *ab, char *name,
|
||||
size_t name_len)
|
||||
{
|
||||
+ /* strlen(',variant=') + strlen(ab->qmi.target.bdf_ext) */
|
||||
+ char variant[9 + ATH11K_QMI_BDF_EXT_STR_LENGTH] = { 0 };
|
||||
+
|
||||
+ if (ab->qmi.target.bdf_ext[0] != '\0')
|
||||
+ scnprintf(variant, sizeof(variant), ",variant=%s",
|
||||
+ ab->qmi.target.bdf_ext);
|
||||
+
|
||||
scnprintf(name, name_len,
|
||||
- "bus=%s,qmi-chip-id=%d,qmi-board-id=%d",
|
||||
+ "bus=%s,qmi-chip-id=%d,qmi-board-id=%d%s",
|
||||
ath11k_bus_str(ab->hif.bus),
|
||||
ab->qmi.target.chip_id,
|
||||
- ab->qmi.target.board_id);
|
||||
+ ab->qmi.target.board_id, variant);
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_BOOT, "boot using board name '%s'\n", name);
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -886,6 +886,7 @@ void ath11k_core_free(struct ath11k_base
|
||||
int ath11k_core_fetch_bdf(struct ath11k_base *ath11k,
|
||||
struct ath11k_board_data *bd);
|
||||
void ath11k_core_free_bdf(struct ath11k_base *ab, struct ath11k_board_data *bd);
|
||||
+int ath11k_core_check_dt(struct ath11k_base *ath11k);
|
||||
|
||||
void ath11k_core_halt(struct ath11k *ar);
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -1815,6 +1815,7 @@ static int ath11k_qmi_request_target_cap
|
||||
struct qmi_wlanfw_cap_resp_msg_v01 resp;
|
||||
struct qmi_txn txn = {};
|
||||
int ret = 0;
|
||||
+ int r;
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
memset(&resp, 0, sizeof(resp));
|
||||
@@ -1880,6 +1881,10 @@ static int ath11k_qmi_request_target_cap
|
||||
ab->qmi.target.fw_build_timestamp,
|
||||
ab->qmi.target.fw_build_id);
|
||||
|
||||
+ r = ath11k_core_check_dt(ab);
|
||||
+ if (r)
|
||||
+ ath11k_dbg(ab, ATH11K_DBG_QMI, "DT bdf variant name not set.\n");
|
||||
+
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.h
|
||||
@@ -24,6 +24,7 @@
|
||||
#define ATH11K_QMI_RESP_LEN_MAX 8192
|
||||
#define ATH11K_QMI_WLANFW_MAX_NUM_MEM_SEG_V01 32
|
||||
#define ATH11K_QMI_CALDB_SIZE 0x480000
|
||||
+#define ATH11K_QMI_BDF_EXT_STR_LENGTH 0x20
|
||||
|
||||
#define QMI_WLFW_REQUEST_MEM_IND_V01 0x0035
|
||||
#define QMI_WLFW_FW_MEM_READY_IND_V01 0x0037
|
||||
@@ -101,6 +102,7 @@ struct target_info {
|
||||
u32 fw_version;
|
||||
char fw_build_timestamp[ATH11K_QMI_WLANFW_MAX_TIMESTAMP_LEN_V01 + 1];
|
||||
char fw_build_id[ATH11K_QMI_WLANFW_MAX_BUILD_ID_LEN_V01 + 1];
|
||||
+ char bdf_ext[ATH11K_QMI_BDF_EXT_STR_LENGTH];
|
||||
};
|
||||
|
||||
struct m3_mem_region {
|
@ -0,0 +1,47 @@
|
||||
From 89aec0a67ee30cd11762aede86b3edfdb2433663 Mon Sep 17 00:00:00 2001
|
||||
From: Venkateswara Naralasetty <vnaralas@codeaurora.org>
|
||||
Date: Thu, 2 Jul 2020 12:04:34 +0530
|
||||
Subject: [PATCH] ath11k: load appropriate board data based on board id
|
||||
|
||||
This patch adds support to read board id from dts and load
|
||||
appropriate board data.
|
||||
|
||||
Adding the patch which was removed as a part of commit id -
|
||||
Ib950b3271fede9ccf7d53fe9629c38ee729a0ef5
|
||||
|
||||
Signed-off-by: Venkateswara Naralasetty <vnaralas@codeaurora.org>
|
||||
Signed-off-by: Lavanya Suresh <lavaks@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/qmi.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -1811,9 +1811,11 @@ static int ath11k_qmi_assign_target_mem_
|
||||
|
||||
static int ath11k_qmi_request_target_cap(struct ath11k_base *ab)
|
||||
{
|
||||
+ struct device *dev = ab->dev;
|
||||
struct qmi_wlanfw_cap_req_msg_v01 req;
|
||||
struct qmi_wlanfw_cap_resp_msg_v01 resp;
|
||||
struct qmi_txn txn = {};
|
||||
+ unsigned int board_id;
|
||||
int ret = 0;
|
||||
int r;
|
||||
|
||||
@@ -1853,10 +1855,13 @@ static int ath11k_qmi_request_target_cap
|
||||
ab->qmi.target.chip_family = resp.chip_info.chip_family;
|
||||
}
|
||||
|
||||
- if (resp.board_info_valid)
|
||||
+ if (!of_property_read_u32(dev->of_node, "qcom,board_id", &board_id) && board_id != 0xFF) {
|
||||
+ ab->qmi.target.board_id = board_id;
|
||||
+ } else if (resp.board_info_valid) {
|
||||
ab->qmi.target.board_id = resp.board_info.board_id;
|
||||
- else
|
||||
+ } else {
|
||||
ab->qmi.target.board_id = 0xFF;
|
||||
+ }
|
||||
|
||||
if (resp.soc_info_valid)
|
||||
ab->qmi.target.soc_id = resp.soc_info.soc_id;
|
@ -0,0 +1,54 @@
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -1333,6 +1333,7 @@ int ath11k_wmi_pdev_bss_chan_info_reques
|
||||
WMI_TAG_PDEV_BSS_CHAN_INFO_REQUEST) |
|
||||
FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
|
||||
cmd->req_type = type;
|
||||
+ cmd->pdev_id = ar->pdev->pdev_id;
|
||||
|
||||
ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
|
||||
"WMI bss chan info req type %d\n", type);
|
||||
@@ -3122,7 +3123,7 @@ ath11k_wmi_copy_resource_config(struct w
|
||||
wmi_cfg->bpf_instruction_size = tg_cfg->bpf_instruction_size;
|
||||
wmi_cfg->max_bssid_rx_filters = tg_cfg->max_bssid_rx_filters;
|
||||
wmi_cfg->use_pdev_id = tg_cfg->use_pdev_id;
|
||||
- wmi_cfg->flag1 = tg_cfg->atf_config;
|
||||
+ wmi_cfg->flag1 |= WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64;
|
||||
wmi_cfg->peer_map_unmap_v2_support = tg_cfg->peer_map_unmap_v2_support;
|
||||
wmi_cfg->sched_params = tg_cfg->sched_params;
|
||||
wmi_cfg->twt_ap_pdev_count = tg_cfg->twt_ap_pdev_count;
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -2219,6 +2219,8 @@ struct wmi_init_cmd {
|
||||
u32 num_host_mem_chunks;
|
||||
} __packed;
|
||||
|
||||
+#define WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64 BIT(5)
|
||||
+
|
||||
struct wmi_resource_config {
|
||||
u32 tlv_header;
|
||||
u32 num_vdevs;
|
||||
@@ -2935,6 +2937,7 @@ struct wmi_pdev_bss_chan_info_req_cmd {
|
||||
u32 tlv_header;
|
||||
/* ref wmi_bss_chan_info_req_type */
|
||||
u32 req_type;
|
||||
+ u32 pdev_id;
|
||||
} __packed;
|
||||
|
||||
struct wmi_ap_ps_peer_cmd {
|
||||
@@ -4028,7 +4031,6 @@ struct wmi_vdev_stopped_event {
|
||||
} __packed;
|
||||
|
||||
struct wmi_pdev_bss_chan_info_event {
|
||||
- u32 pdev_id;
|
||||
u32 freq; /* Units in MHz */
|
||||
u32 noise_floor; /* units are dBm */
|
||||
/* rx clear - how often the channel was unused */
|
||||
@@ -4046,6 +4048,7 @@ struct wmi_pdev_bss_chan_info_event {
|
||||
/*rx_cycle cnt for my bss in 64bits format */
|
||||
u32 rx_bss_cycle_count_low;
|
||||
u32 rx_bss_cycle_count_high;
|
||||
+ u32 pdev_id;
|
||||
} __packed;
|
||||
|
||||
#define WMI_VDEV_INSTALL_KEY_COMPL_STATUS_SUCCESS 0
|
Loading…
x
Reference in New Issue
Block a user