On Mon, Jan 13, 2025 at 10:43:23PM +0800, Zijun Hu wrote: > From: Zijun Hu <quic_zijuhu@xxxxxxxxxxx> > > For WCN6855, board ID specific NVM needs to be downloaded once board ID > is available, but the default NVM is always downloaded currently. > > The wrong NVM causes poor RF performance, and effects user experience > for several types of laptop with WCN6855 on the market. > > Fix by downloading board ID specific NVM if board ID is available. > > Fixes: 095327fede00 ("Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6855") > Cc: stable@xxxxxxxxxxxxxxx # 6.4 > Signed-off-by: Zijun Hu <quic_zijuhu@xxxxxxxxxxx> > --- > Changes in v3: > - Rework over tip of bluetooth-next tree. > - Remove both Reviewed-by and Tested-by tags. > - Link to v2: https://lore.kernel.org/r/20241116-x13s_wcn6855_fix-v2-1-c08c298d5fbf@xxxxxxxxxxx Thanks for the quick update. I'm fine with dropping the fallback logic, but you should have mentioned that here. This still works fine on X13s and sc8280xp crd (hpnv21g.b8c and hpnv20.b8c): Tested-by: Johan Hovold <johan+linaro@xxxxxxxxxx> > 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@xxxxxxxxxxx > --- > drivers/bluetooth/btqca.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c > index a6b53d1f23dbd4666b93e10635f5f154f38d80a5..cdf09d9a9ad27c080f27c5fe8d61d76085e1fd2c 100644 > --- a/drivers/bluetooth/btqca.c > +++ b/drivers/bluetooth/btqca.c > @@ -909,8 +909,9 @@ 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_read_fw_board_id(hdev, &boardid); For consistency, this should probably have been handled by amending the conditional above the switch: if (soc_type == QCA_QCA2066 || soc_type == QCA_WCN7850) qca_read_fw_board_id(hdev, &boardid); but long term that should probably be moved into qca_get_nvm_name_by_board() to avoid sprinkling conditionals all over the driver. I'm fine with this as a stop gap unless you want to move the call to the QCA2066/WCN7850 conditional: Reviewed-by: Johan Hovold <johan+linaro@xxxxxxxxxx> > + qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname), > + "hpnv", soc_type, ver, rom_ver, boardid); > break; > case QCA_WCN7850: > qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname), Johan