Message ID | 20241116-x13s_wcn6855_fix-v2-1-c08c298d5fbf@quicinc.com |
---|---|
State | New |
Headers | show |
Series | [v2] Bluetooth: qca: Support downloading board ID specific NVM for WCN6855 | expand |
This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=910294 ---Test result--- Test Summary: CheckPatch PENDING 0.27 seconds GitLint PENDING 0.26 seconds SubjectPrefix PASS 0.11 seconds BuildKernel PASS 26.04 seconds CheckAllWarning PASS 28.50 seconds CheckSparse PASS 32.35 seconds BuildKernel32 PASS 28.73 seconds TestRunnerSetup PASS 455.88 seconds TestRunner_l2cap-tester PASS 22.26 seconds TestRunner_iso-tester FAIL 33.51 seconds TestRunner_bnep-tester PASS 5.00 seconds TestRunner_mgmt-tester FAIL 120.78 seconds TestRunner_rfcomm-tester PASS 7.87 seconds TestRunner_sco-tester PASS 11.71 seconds TestRunner_ioctl-tester PASS 8.45 seconds TestRunner_mesh-tester PASS 6.24 seconds TestRunner_smp-tester PASS 7.48 seconds TestRunner_userchan-tester PASS 7.67 seconds IncrementalBuild PENDING 0.49 seconds Details ############################## Test: CheckPatch - PENDING Desc: Run checkpatch.pl script Output: ############################## Test: GitLint - PENDING Desc: Run gitlint Output: ############################## Test: TestRunner_iso-tester - FAIL Desc: Run iso-tester with test-runner Output: WARNING: possible circular locking dependency detected Total: 124, Passed: 120 (96.8%), Failed: 0, Not Run: 4 ############################## Test: TestRunner_mgmt-tester - FAIL Desc: Run mgmt-tester with test-runner Output: Total: 492, Passed: 487 (99.0%), Failed: 1, Not Run: 4 Failed Test Cases LL Privacy - Add Device 7 (AL is full) Failed 0.208 seconds ############################## Test: IncrementalBuild - PENDING Desc: Incremental build with the patches in the series Output: --- Regards, Linux Bluetooth
On Sat, Nov 16, 2024 at 07:49:23AM -0800, Zijun Hu wrote: > 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> Nit: These Cc tags should typically not be here in the commit message, and should at least not be needed for people who git-send-email will already include because of Tested-by and Reviewed-by tags. If they help with your workflow then perhaps you can just put them below the cut-off (---) line. > 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> When making non-trivial changes, like the addition of the fallback NVM feature in v2, you should probably have dropped any previous Reviewed-by tags. The fallback handling looks good to me though (and also works as expected). > 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> > Changes in v2: > - Correct subject and commit message > - Temporarily add nvm fallback logic to speed up backport. > — Add fix/stable tags as suggested by Luiz and Johan > - Link to v1: https://lore.kernel.org/r/20241113-x13s_wcn6855_fix-v1-1-15af0aa2549c@quicinc.com > +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; If you think it's ok for people to continue using the wrong (default) NVM file for a while still until their distros ship the board-specific ones, then this looks good to me and should ease the transition: [ 6.125626] Bluetooth: hci0: QCA Downloading qca/hpnv21g.b8c [ 6.126730] bluetooth hci0: Direct firmware load for qca/hpnv21g.b8c failed with error -2 [ 6.126826] Bluetooth: hci0: QCA Failed to request file: qca/hpnv21g.b8c (-2) [ 6.126894] Bluetooth: hci0: QCA Failed to download NVM (-2) [ 6.126951] Bluetooth: hci0: QCA fallback to default NVM [ 6.127003] Bluetooth: hci0: QCA Downloading qca/hpnv21g.bin [ 6.309322] Bluetooth: hci0: QCA setup on UART is completed Johan
diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c index dfbbac92242a..ddfe7e3c9b50 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; }