mirror of
https://github.com/void-linux/void-packages.git
synced 2025-06-05 06:33:50 +02:00
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
2 changed files with 113 additions and 1 deletions
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'
|
# Template file for 'linux6.12'
|
||||||
pkgname=linux6.12
|
pkgname=linux6.12
|
||||||
version=6.12.6
|
version=6.12.6
|
||||||
revision=1
|
revision=2
|
||||||
short_desc="Linux kernel and modules (${version%.*} series)"
|
short_desc="Linux kernel and modules (${version%.*} series)"
|
||||||
maintainer="Duncaen <duncaen@voidlinux.org>"
|
maintainer="Duncaen <duncaen@voidlinux.org>"
|
||||||
license="GPL-2.0-only"
|
license="GPL-2.0-only"
|
||||||
|
|
Loading…
Add table
Reference in a new issue