linux6.12: load good bluetooth firmware on x13s
this patch missed the 6.12 merge window because it was waiting on linux-firmware 20241210, which is now available. This allows the x13s to select the greatly improved bluetooth firmware.
This commit is contained in:
parent
6a4c56b2b4
commit
46e06acc14
112
srcpkgs/linux6.12/patches/x13s-bluetooth-fw.patch
Normal file
112
srcpkgs/linux6.12/patches/x13s-bluetooth-fw.patch
Normal file
@ -0,0 +1,112 @@
|
||||
From 12d8f091a79829e79dead7d87a353aa019415b2b Mon Sep 17 00:00:00 2001
|
||||
From: Zijun Hu <quic_zijuhu@quicinc.com>
|
||||
Date: Sat, 16 Nov 2024 07:49:23 -0800
|
||||
Subject: [PATCH] Bluetooth: qca: Support downloading board ID specific NVM for
|
||||
WCN6855
|
||||
|
||||
For WCN6855, board ID specific NVM needs to be downloaded once board ID
|
||||
is available, but the default NVM is always downloaded currently, and
|
||||
the wrong NVM causes poor RF performance which effects user experience.
|
||||
|
||||
Fix by downloading board ID specific NVM if board ID is available.
|
||||
|
||||
Cc: Bjorn Andersson <bjorande@quicinc.com>
|
||||
Cc: Aiqun Yu (Maria) <quic_aiquny@quicinc.com>
|
||||
Cc: Cheng Jiang <quic_chejiang@quicinc.com>
|
||||
Cc: Johan Hovold <johan@kernel.org>
|
||||
Cc: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
|
||||
Cc: Steev Klimaszewski <steev@kali.org>
|
||||
Cc: Paul Menzel <pmenzel@molgen.mpg.de>
|
||||
Fixes: 095327fede00 ("Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6855")
|
||||
Cc: stable@vger.kernel.org # 6.4
|
||||
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
|
||||
Tested-by: Johan Hovold <johan+linaro@kernel.org>
|
||||
Tested-by: Steev Klimaszewski <steev@kali.org>
|
||||
Tested-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
|
||||
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20241116-x13s_wcn6855_fix-v2-1-c08c298d5fbf@quicinc.com
|
||||
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
|
||||
---
|
||||
drivers/bluetooth/btqca.c | 44 ++++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 41 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
|
||||
index dfbbac92242a84..ddfe7e3c9b5003 100644
|
||||
--- a/drivers/bluetooth/btqca.c
|
||||
+++ b/drivers/bluetooth/btqca.c
|
||||
@@ -717,6 +717,29 @@ static void qca_generate_hsp_nvm_name(char *fwname, size_t max_size,
|
||||
snprintf(fwname, max_size, "qca/hpnv%02x%s.%x", rom_ver, variant, bid);
|
||||
}
|
||||
|
||||
+static void qca_get_hsp_nvm_name_generic(struct qca_fw_config *cfg,
|
||||
+ struct qca_btsoc_version ver,
|
||||
+ u8 rom_ver, u16 bid)
|
||||
+{
|
||||
+ const char *variant;
|
||||
+
|
||||
+ /* hsp gf chip */
|
||||
+ if ((le32_to_cpu(ver.soc_id) & QCA_HSP_GF_SOC_MASK) == QCA_HSP_GF_SOC_ID)
|
||||
+ variant = "g";
|
||||
+ else
|
||||
+ variant = "";
|
||||
+
|
||||
+ if (bid == 0x0)
|
||||
+ snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.bin",
|
||||
+ rom_ver, variant);
|
||||
+ else if (bid & 0xff00)
|
||||
+ snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.b%x",
|
||||
+ rom_ver, variant, bid);
|
||||
+ else
|
||||
+ snprintf(cfg->fwname, sizeof(cfg->fwname), "qca/hpnv%02x%s.b%02x",
|
||||
+ rom_ver, variant, bid);
|
||||
+}
|
||||
+
|
||||
static inline void qca_get_nvm_name_generic(struct qca_fw_config *cfg,
|
||||
const char *stem, u8 rom_ver, u16 bid)
|
||||
{
|
||||
@@ -810,8 +833,15 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
||||
/* Give the controller some time to get ready to receive the NVM */
|
||||
msleep(10);
|
||||
|
||||
- if (soc_type == QCA_QCA2066 || soc_type == QCA_WCN7850)
|
||||
+ switch (soc_type) {
|
||||
+ case QCA_QCA2066:
|
||||
+ case QCA_WCN6855:
|
||||
+ case QCA_WCN7850:
|
||||
qca_read_fw_board_id(hdev, &boardid);
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
/* Download NVM configuration */
|
||||
config.type = TLV_TYPE_NVM;
|
||||
@@ -848,8 +878,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
||||
"qca/msnv%02x.bin", rom_ver);
|
||||
break;
|
||||
case QCA_WCN6855:
|
||||
- snprintf(config.fwname, sizeof(config.fwname),
|
||||
- "qca/hpnv%02x.bin", rom_ver);
|
||||
+ qca_get_hsp_nvm_name_generic(&config, ver, rom_ver, boardid);
|
||||
break;
|
||||
case QCA_WCN7850:
|
||||
qca_get_nvm_name_generic(&config, "hmt", rom_ver, boardid);
|
||||
@@ -861,9 +890,18 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
||||
}
|
||||
}
|
||||
|
||||
+download_nvm:
|
||||
err = qca_download_firmware(hdev, &config, soc_type, rom_ver);
|
||||
if (err < 0) {
|
||||
bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
|
||||
+ if (err == -ENOENT && boardid != 0 &&
|
||||
+ soc_type == QCA_WCN6855) {
|
||||
+ boardid = 0;
|
||||
+ qca_get_hsp_nvm_name_generic(&config, ver,
|
||||
+ rom_ver, boardid);
|
||||
+ bt_dev_warn(hdev, "QCA fallback to default NVM");
|
||||
+ goto download_nvm;
|
||||
+ }
|
||||
return err;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Template file for 'linux6.12'
|
||||
pkgname=linux6.12
|
||||
version=6.12.6
|
||||
revision=1
|
||||
revision=2
|
||||
short_desc="Linux kernel and modules (${version%.*} series)"
|
||||
maintainer="Duncaen <duncaen@voidlinux.org>"
|
||||
license="GPL-2.0-only"
|
||||
|
Loading…
Reference in New Issue
Block a user