wlan-ap-Telecominfraproject/feeds/ipq807x/mac80211/patches/182-ath11k-verify-board-2.bin-qcn9000.patch
John Crispin 3affbc1cad QualComm/AX: add Hawkeye and Cypress support
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>
2020-07-23 18:54:03 +02:00

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;