[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241025100419.2128604-3-quic_miaoqing@quicinc.com>
Date: Fri, 25 Oct 2024 18:04:19 +0800
From: Miaoqing Pan <quic_miaoqing@...cinc.com>
To: <kvalo@...nel.org>, <robh@...nel.org>, <krzk+dt@...nel.org>,
<conor+dt@...nel.org>
CC: <quic_jjohnson@...cinc.com>, <ath11k@...ts.infradead.org>,
<linux-wireless@...r.kernel.org>, <devicetree@...r.kernel.org>,
<dmitry.baryshkov@...aro.org>, <krzk@...nel.org>,
<linux-arm-msm@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
Miaoqing Pan
<quic_miaoqing@...cinc.com>
Subject: [PATCH v3 2/2] wifi: ath11k: support board-specific firmware overrides
QCA6698AQ IP core is the same as WCN6855 hw2.1, but it has different RF,
IPA, thermal, RAM size and etc, so new firmware files used. This change
allows board DT files to override the subdir of the firmware directory
used to lookup the amss.bin and m3.bin.
For example:
- ath11k/WCN6855/hw2.1/amss.bin,
ath11k/WCN6855/hw2.1/m3.bin: main firmware files, used by default
- ath11k/WCN6855/hw2.1/qca6698aq/amss.bin,
ath11k/WCN6855/hw2.1/qca6698aq/m3.bin
Tested-on: QCA6698AQ hw2.1 PCI WLAN.HSP.1.1-04479-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1
Signed-off-by: Miaoqing Pan <quic_miaoqing@...cinc.com>
---
drivers/net/wireless/ath/ath11k/core.h | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h
index 09c37e19a168..664eb244a989 100644
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
@@ -16,6 +16,7 @@
#include <linux/rhashtable.h>
#include <linux/average.h>
#include <linux/firmware.h>
+#include <linux/of.h>
#include "qmi.h"
#include "htc.h"
@@ -1299,8 +1300,16 @@ static inline void ath11k_core_create_firmware_path(struct ath11k_base *ab,
const char *filename,
void *buf, size_t buf_len)
{
- snprintf(buf, buf_len, "%s/%s/%s", ATH11K_FW_DIR,
- ab->hw_params.fw.dir, filename);
+ const char *fw_name = NULL;
+
+ of_property_read_string(ab->dev->of_node, "firmware-name", &fw_name);
+
+ if (fw_name)
+ snprintf(buf, buf_len, "%s/%s/%s/%s", ATH11K_FW_DIR,
+ ab->hw_params.fw.dir, fw_name, filename);
+ else
+ snprintf(buf, buf_len, "%s/%s/%s", ATH11K_FW_DIR,
+ ab->hw_params.fw.dir, filename);
}
static inline const char *ath11k_bus_str(enum ath11k_bus bus)
--
2.25.1
Powered by blists - more mailing lists