2021-11-30 09:37:41 +00:00
|
|
|
From f2a7064a78b22f2b68b9fcbc8a6f4c5e61c5ba64 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Robert Marko <robimarko@gmail.com>
|
|
|
|
Date: Sun, 10 Oct 2021 00:17:11 +0200
|
|
|
|
Subject: [PATCH] ath10k: support bus and device specific API 1 BDF selection
|
|
|
|
|
|
|
|
Some ath10k IPQ40xx devices like the MikroTik hAP ac2 and ac3 require the
|
|
|
|
BDF-s to be extracted from the device storage instead of shipping packaged
|
|
|
|
API 2 BDF-s.
|
|
|
|
|
|
|
|
This is required as MikroTik has started shipping boards that require BDF-s
|
|
|
|
to be updated, as otherwise their WLAN performance really suffers.
|
|
|
|
This is however impossible as the devices that require this are release
|
|
|
|
under the same revision and its not possible to differentiate them from
|
|
|
|
devices using the older BDF-s.
|
|
|
|
|
|
|
|
In OpenWrt we are extracting the calibration data during runtime and we are
|
|
|
|
able to extract the BDF-s in the same manner, however we cannot package the
|
|
|
|
BDF-s to API 2 format on the fly and can only use API 1 to provide BDF-s on
|
|
|
|
the fly.
|
|
|
|
This is an issue as the ath10k driver explicitly looks only for the
|
|
|
|
board.bin file and not for something like board-bus-device.bin like it does
|
|
|
|
for pre-cal data.
|
|
|
|
Due to this we have no way of providing correct BDF-s on the fly, so lets
|
|
|
|
extend the ath10k driver to first look for BDF-s in the
|
|
|
|
board-bus-device.bin format, for example: board-ahb-a800000.wifi.bin
|
|
|
|
If that fails, look for the default board file name as defined previously.
|
|
|
|
|
|
|
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
|
|
Link: https://lore.kernel.org/r/20211009221711.2315352-1-robimarko@gmail.com
|
|
|
|
---
|
|
|
|
drivers/net/wireless/ath/ath10k/core.c | 13 ++++++++++++-
|
|
|
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/ath/ath10k/core.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
2022-06-16 07:07:07 +00:00
|
|
|
@@ -1202,6 +1202,7 @@ success:
|
2021-11-30 09:37:41 +00:00
|
|
|
static int ath10k_core_fetch_board_data_api_1(struct ath10k *ar, int bd_ie_type)
|
|
|
|
{
|
|
|
|
const struct firmware *fw;
|
|
|
|
+ char boardname[100];
|
|
|
|
|
|
|
|
if (bd_ie_type == ATH10K_BD_IE_BOARD) {
|
|
|
|
if (!ar->hw_params.fw.board) {
|
2022-06-16 07:07:07 +00:00
|
|
|
@@ -1209,9 +1210,19 @@ static int ath10k_core_fetch_board_data_
|
2021-11-30 09:37:41 +00:00
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ scnprintf(boardname, sizeof(boardname), "board-%s-%s.bin",
|
|
|
|
+ ath10k_bus_str(ar->hif.bus), dev_name(ar->dev));
|
|
|
|
+
|
|
|
|
ar->normal_mode_fw.board = ath10k_fetch_fw_file(ar,
|
|
|
|
ar->hw_params.fw.dir,
|
|
|
|
- ar->hw_params.fw.board);
|
|
|
|
+ boardname);
|
|
|
|
+ if (IS_ERR(ar->normal_mode_fw.board)) {
|
|
|
|
+ fw = ath10k_fetch_fw_file(ar,
|
|
|
|
+ ar->hw_params.fw.dir,
|
|
|
|
+ ar->hw_params.fw.board);
|
|
|
|
+ ar->normal_mode_fw.board = fw;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
if (IS_ERR(ar->normal_mode_fw.board))
|
|
|
|
return PTR_ERR(ar->normal_mode_fw.board);
|
|
|
|
|