From patchwork Tue Jan 4 03:27:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1574981 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=auGzTQig; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JSdN34shgz9sP7 for ; Tue, 4 Jan 2022 14:27:30 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1n4aTq-0003eC-Gh; Tue, 04 Jan 2022 03:27:22 +0000 Received: from mail-pj1-f51.google.com ([209.85.216.51]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1n4aTo-0003dr-Ua for kernel-team@lists.ubuntu.com; Tue, 04 Jan 2022 03:27:21 +0000 Received: by mail-pj1-f51.google.com with SMTP id r16-20020a17090a0ad000b001b276aa3aabso26247356pje.0 for ; Mon, 03 Jan 2022 19:27:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lVLWtiP9MZx2MIXvYVFS1g8FLdX2eXwbuUXLoekBGa8=; b=auGzTQigVqrjx4hNOescbWHkFI5C6B34OFoCrI8cIkVDi5W31dZK/wjepgWxK97ikJ NUgilDLYfqjMWtTBg4SqsrlLP0LMdhA6Ro9jP0ZoWfixMg7vsd8Pa5PrMmSzRwYQ/iIw A3UMifBFZmLbBugEheP7scIc4xtFoMowBRlnyOe3fJhT0x17hfmc4zo7FLttq/Z72Ky/ IQ/xF9gNn8ESQqILZJ8nrt9gBtQNWwtS4bTwDgEFr7BWCIinUpEqidxMu6XlJZvAaT9P GGve/FR+nyPG+fNwDSoBHE+cVk02qAjG8/qP2QS38bKCG14dOSCyG6VHlT1NwFBnbkxc cXXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=lVLWtiP9MZx2MIXvYVFS1g8FLdX2eXwbuUXLoekBGa8=; b=bumRzALwS6OwImB+5v9U+E9tg1/6iPvdwXpD+2GpgQY7iATtxV2YA56kNpjQzSgcHM JIVTAIEbOQRkeG55PCd9xiuOh+onetB/TCZvzksUwiWyKL/+sPT+jXTevcqNbvY/Zs8d yXZvJgifKcHCqimjhnLbvQt88FS0DUPOSFfN6O2H6B9g3JD18Kj2xMbfnd0Tux9pTa0E UnbkBfMbeAc4sLSOm5TLL/Jh5NBck6XdfzIi/hAaFes7nWL2uepPYwefUWiqlX4KzxmT CU81Ob5OqvNIXsQcoCzzJTAL+VIg4e6fRYG0TWJ4dQhtSwRJTM4TSncloOs3Ho6X1mn5 qBeg== X-Gm-Message-State: AOAM530Buv3XgveX8OsjPXavqbFwAESNA+MtXNFtZctKV33vH/BeQWHh 3nMbBsFWsob8//qibo9DvIaqqmhyEB0= X-Google-Smtp-Source: ABdhPJwrDwBNZ1IDhOoUSzvVLQtLgPO/ZMq1ps7LKlO0hf+lPBmC/t4vso0XlYPznDIA4q6Nk7vIWA== X-Received: by 2002:a17:90b:4a92:: with SMTP id lp18mr57704326pjb.123.1641266838436; Mon, 03 Jan 2022 19:27:18 -0800 (PST) Received: from localhost (220-135-95-34.hinet-ip.hinet.net. [220.135.95.34]) by smtp.gmail.com with ESMTPSA id x22sm32157163pjn.16.2022.01.03.19.27.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jan 2022 19:27:17 -0800 (PST) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/3][SRU][OEM-5.13] Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller Date: Tue, 4 Jan 2022 11:27:13 +0800 Message-Id: <20220104032715.73212-1-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211224023938.286186-1-kai.heng.feng@canonical.com> References: <20211224023938.286186-1-kai.heng.feng@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.216.51; envelope-from=acelan@gmail.com; helo=mail-pj1-f51.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Tim Jiang BugLink: https://bugs.launchpad.net/bugs/1955689 the RF performance of wcn6855 soc chip from different foundries will be difference, so we should use different nvm to configure them. Signed-off-by: Tim Jiang Reviewed-by: Matthias Kaehlcke Signed-off-by: Marcel Holtmann (cherry picked from commit d6cba4e6d0e202276b81117b96106859a4e2d56e linux-next) Signed-off-by: Kai-Heng Feng Signed-off-by: Chia-Lin Kao (AceLan) --- drivers/bluetooth/btusb.c | 53 ++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 18d8b75a475bf..ae7287195a9b7 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4072,6 +4072,9 @@ static int btusb_set_bdaddr_wcn6855(struct hci_dev *hdev, #define QCA_DFU_TIMEOUT 3000 #define QCA_FLAG_MULTI_NVM 0x80 +#define WCN6855_2_0_RAM_VERSION_GF 0x400c1200 +#define WCN6855_2_1_RAM_VERSION_GF 0x400c1211 + struct qca_version { __le32 rom_version; __le32 patch_version; @@ -4103,6 +4106,7 @@ static const struct qca_device_info qca_devices_table[] = { { 0x00000302, 28, 4, 16 }, /* Rome 3.2 */ { 0x00130100, 40, 4, 16 }, /* WCN6855 1.0 */ { 0x00130200, 40, 4, 16 }, /* WCN6855 2.0 */ + { 0x00130201, 40, 4, 16 }, /* WCN6855 2.1 */ }; static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request, @@ -4257,6 +4261,40 @@ static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev, return err; } +static void btusb_generate_qca_nvm_name(char *fwname, size_t max_size, + const struct qca_version *ver) +{ + u32 rom_version = le32_to_cpu(ver->rom_version); + u16 flag = le16_to_cpu(ver->flag); + + if (((flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) { + u16 board_id = le16_to_cpu(ver->board_id); + const char *variant; + + switch (le32_to_cpu(ver->ram_version)) { + case WCN6855_2_0_RAM_VERSION_GF: + case WCN6855_2_1_RAM_VERSION_GF: + variant = "_gf"; + break; + default: + variant = ""; + break; + } + + if (board_id == 0) { + snprintf(fwname, max_size, "qca/nvm_usb_%08x%s.bin", + rom_version, variant); + } else { + snprintf(fwname, max_size, "qca/nvm_usb_%08x%s_%04x.bin", + rom_version, variant, board_id); + } + } else { + snprintf(fwname, max_size, "qca/nvm_usb_%08x.bin", + rom_version); + } + +} + static int btusb_setup_qca_load_nvm(struct hci_dev *hdev, struct qca_version *ver, const struct qca_device_info *info) @@ -4265,20 +4303,7 @@ static int btusb_setup_qca_load_nvm(struct hci_dev *hdev, char fwname[64]; int err; - if (((ver->flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) { - /* if boardid equal 0, use default nvm without surfix */ - if (le16_to_cpu(ver->board_id) == 0x0) { - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", - le32_to_cpu(ver->rom_version)); - } else { - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x_%04x.bin", - le32_to_cpu(ver->rom_version), - le16_to_cpu(ver->board_id)); - } - } else { - snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", - le32_to_cpu(ver->rom_version)); - } + btusb_generate_qca_nvm_name(fwname, sizeof(fwname), ver); err = request_firmware(&fw, fwname, &hdev->dev); if (err) {