mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-24 21:02:35 +00:00
This series is based on * 2020-07-10 ipq6018-ilq-11-0_qca_oem-034672b0676c37b1f4519e5720e18e95fe6236ef Add support for * qsdk kernel/v4.4 * qsdk ethernet subsystem * v5.7 ath11k backport + QualComm staging patches (wlan_ap_1.0) * ath11k-firmware * hostapd/iw/... Feature support * full boot, system detection * sysupgrade to nand * HE support via latest hostapd * driver support for usb, crypto, hwmon, cpufreq, ... Missing * NSS/HW flow offloading - FW blob is not redistributable Using the qsdk v4.4 is an intermediate solution while the vanilla is being tested. Vanilla kernel is almost on feature par. Work has already started to upstream the ethernet and switch drivers. Once complete the target will be fully upstream. Signed-off-by: John Crispin <john@phrozen.org>
140 lines
4.2 KiB
Diff
140 lines
4.2 KiB
Diff
From 71a30ae0880a98f59149cf1af31c45138c0ec6df Mon Sep 17 00:00:00 2001
|
|
From: Anilkumar Kolli <akolli@codeaurora.org>
|
|
Date: Fri, 15 May 2020 14:55:26 +0530
|
|
Subject: [PATCH 182/187] ath11k: support board-2.bin for qcn9000
|
|
|
|
Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
|
|
---
|
|
drivers/net/wireless/ath/ath11k/core.c | 7 +++----
|
|
drivers/net/wireless/ath/ath11k/core.h | 12 ++++++++++++
|
|
drivers/net/wireless/ath/ath11k/hw.h | 3 +++
|
|
drivers/net/wireless/ath/ath11k/qmi.c | 31 +++++++++----------------------
|
|
4 files changed, 27 insertions(+), 26 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
@@ -88,11 +88,9 @@ static const struct ath11k_hw_params ath
|
|
static int ath11k_core_create_board_name(struct ath11k_base *ab, char *name,
|
|
size_t name_len)
|
|
{
|
|
- /* Note: bus is fixed to ahb. When other bus type supported,
|
|
- * make it to dynamic.
|
|
- */
|
|
scnprintf(name, name_len,
|
|
- "bus=ahb,qmi-chip-id=%d,qmi-board-id=%d",
|
|
+ "bus=%s,qmi-chip-id=%d,qmi-board-id=%d",
|
|
+ ath11k_bus_str(ab->hif.bus),
|
|
ab->qmi.target.chip_id,
|
|
ab->qmi.target.board_id);
|
|
|
|
@@ -1164,6 +1162,7 @@ struct ath11k_base *ath11k_core_alloc(st
|
|
INIT_WORK(&ab->restart_work, ath11k_core_restart);
|
|
timer_setup(&ab->rx_replenish_retry, ath11k_ce_rx_replenish_retry, 0);
|
|
ab->dev = dev;
|
|
+ ab->hif.bus = bus;
|
|
|
|
return ab;
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
|
@@ -741,6 +741,7 @@ struct ath11k_base {
|
|
unsigned long mem_len;
|
|
|
|
struct {
|
|
+ enum ath11k_bus bus;
|
|
const struct ath11k_hif_ops *ops;
|
|
} hif;
|
|
|
|
@@ -1008,4 +1009,15 @@ static inline struct ath11k_vif *ath11k_
|
|
return (struct ath11k_vif *)vif->drv_priv;
|
|
}
|
|
|
|
+static inline const char *ath11k_bus_str(enum ath11k_bus bus)
|
|
+{
|
|
+ switch (bus) {
|
|
+ case ATH11K_BUS_PCI:
|
|
+ return "pci";
|
|
+ case ATH11K_BUS_AHB:
|
|
+ return "ahb";
|
|
+ }
|
|
+
|
|
+ return "unknown";
|
|
+}
|
|
#endif /* _CORE_H_ */
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
|
@@ -83,6 +83,9 @@
|
|
#define QCN90XX_MAX_BOARD_DATA_SZ (256 * 1024)
|
|
#define QCN90XX_MAX_CAL_DATA_SZ QCN90XX_MAX_BOARD_DATA_SZ
|
|
|
|
+#define QCA6x90_FW_DIR "QCA6x90"
|
|
+#define QCA6x90_MAX_BOARD_DATA_SZ (256 * 1024)
|
|
+
|
|
#define ATH11K_BOARD_MAGIC "QCA-ATH11K-BOARD"
|
|
#define ATH11K_BOARD_API2_FILE "board-2.bin"
|
|
#define ATH11K_DEFAULT_BOARD_FILE "bdwlan.bin"
|
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
|
@@ -2321,9 +2321,7 @@ static int ath11k_qmi_load_bdf_target_me
|
|
{
|
|
struct qmi_wlanfw_bdf_download_req_msg_v01 *req;
|
|
struct qmi_wlanfw_bdf_download_resp_msg_v01 resp;
|
|
- char filename[ATH11K_QMI_MAX_BDF_FILE_NAME_SIZE];
|
|
- const struct firmware *fw_entry;
|
|
- struct device *dev = ab->dev;
|
|
+ struct ath11k_board_data bd;
|
|
unsigned int remaining;
|
|
struct qmi_txn txn = {};
|
|
int ret;
|
|
@@ -2334,34 +2332,22 @@ static int ath11k_qmi_load_bdf_target_me
|
|
return -ENOMEM;
|
|
memset(&resp, 0, sizeof(resp));
|
|
|
|
-
|
|
- if (ab->qmi.target.board_id == 0xFF)
|
|
- snprintf(filename, sizeof(filename), BIN_BDF_FILE_NAME);
|
|
- else if (ab->qmi.target.board_id < 0xFF)
|
|
- snprintf(filename, sizeof(filename), "%s/%s%02x", ab->hw_params.fw.dir,
|
|
- BIN_BDF_FILE_NAME_PREFIX,
|
|
- ab->qmi.target.board_id);
|
|
- else
|
|
- snprintf(filename, sizeof(filename),
|
|
- BDF_FILE_NAME_PREFIX "%02x.b%02x",
|
|
- ab->qmi.target.board_id >> 8 & 0xFF,
|
|
- ab->qmi.target.board_id & 0xFF);
|
|
-
|
|
- ret = request_firmware(&fw_entry, filename, dev);
|
|
+ memset(&bd, 0, sizeof(bd));
|
|
+ ret = ath11k_core_fetch_bdf(ab, &bd);
|
|
if (ret) {
|
|
- ath11k_warn(ab, "qmi failed to load bdf: %s\n", filename);
|
|
+ ath11k_warn(ab, "qmi failed to load bdf\n");
|
|
goto out;
|
|
}
|
|
|
|
- temp = fw_entry->data;
|
|
- remaining = fw_entry->size;
|
|
+ temp = bd.data;
|
|
+ remaining = bd.len;
|
|
|
|
while (remaining) {
|
|
req->valid = 1;
|
|
req->file_id_valid = 1;
|
|
req->file_id = ab->qmi.target.board_id;
|
|
req->total_size_valid = 1;
|
|
- req->total_size = fw_entry->size;
|
|
+ req->total_size = bd.len;
|
|
req->seg_id_valid = 1;
|
|
req->data_valid = 1;
|
|
req->data_len = ATH11K_QMI_MAX_BDF_FILE_NAME_SIZE;
|
|
@@ -2411,7 +2397,8 @@ static int ath11k_qmi_load_bdf_target_me
|
|
ath11k_info(ab, "qmi BDF download\n");
|
|
|
|
out_qmi_bdf:
|
|
- release_firmware(fw_entry);
|
|
+ ath11k_core_free_bdf(ab, &bd);
|
|
+
|
|
out:
|
|
kfree(req);
|
|
return ret;
|