From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7BD304048BB; Mon, 29 Jun 2026 13:02:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782738120; cv=none; b=FXx3ULzsgiivvkV0vIGJHT2eBgnKc2PWf5qLSpTe0de+dJHwsSWj+RD7snsjSyzkSjXeXsLt9b4u71IYxciQF9wdCZ2+uSaQ4a4OeUcN024smhgfvrGV0gKRv0Ltyt/Kzsx56jHgq00f7jQTVmh0fEK239J+evrEIczRTtSgvE0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782738120; c=relaxed/simple; bh=yrszS7W1eAEcg3XdaKP+FpRzs0RmFdVuiIWNio6sCbU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jBqFCr8yWm0Lh6kyfFv7UbAZiFWnZkLkV5fv9qHjeqmcQsN+iELKMK+3pleq3CzOtXeAdBxa9Mg4TtVuV1Pmb4qv1SnsaKlpPFOMeAOffssz3qKuree4xoCYkhPyudu/2fmmvlujKr1nRXVN6NrSq31wfyTclyAYJ2xKaGfJKeQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bdjgiswW; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bdjgiswW" Received: by smtp.kernel.org (Postfix) with ESMTPS id 11A72C2BCB8; Mon, 29 Jun 2026 13:02:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1782738120; bh=yrszS7W1eAEcg3XdaKP+FpRzs0RmFdVuiIWNio6sCbU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=bdjgiswWxd9qlgjkePnEiBMzqPrcn3UBFsBZhnU7IrJvVd7HuIMNAYjZ57PDmFYJS jaKKs28owv+8RN3sQinPNaBYY4FR2V4j+ApUAfV/hzgr9H2QUdVeS7CBESIFBeBY2G FRguPqRKx4mcIo7Xk+V7S6MSEuk206eApBZOfMf7UsTwwVLtS/R9HrErLsdmzVylLY TOHofkQenYkXngyBGkpn0Q+ArCD9HalxX5EbGbp1vUPHLqJi0r/F87VdLxmQBmYThP TfFdWx4TZayoljWr6I7/bKokX3wz/wIlbvO4RajdGI6cjRGllOlyKuUhRn1aeipZ6+ yxOmmIskh/p9g== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA9A3C43638; Mon, 29 Jun 2026 13:01:59 +0000 (UTC) From: George Moussalem via B4 Relay Date: Mon, 29 Jun 2026 17:01:45 +0400 Subject: [PATCH v2 2/6] Bluetooth: btqca: Add IPQ5018 support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260629-ipq5018-bluetooth-v2-2-02770f03b6bb@outlook.com> References: <20260629-ipq5018-bluetooth-v2-0-02770f03b6bb@outlook.com> In-Reply-To: <20260629-ipq5018-bluetooth-v2-0-02770f03b6bb@outlook.com> To: Jens Axboe , Ulf Hansson , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Johannes Berg , Jeff Johnson , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz , Balakrishna Godavarthi , Rocky Liao , Saravana Kannan , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Bjorn Andersson , Konrad Dybcio , Mathieu Poirier , Philipp Zabel Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, linux-remoteproc@vger.kernel.org, George Moussalem X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1782738117; l=3109; i=george.moussalem@outlook.com; s=20250321; h=from:subject:message-id; bh=YfdZYTMB/SghkLi82xybv2Ru5WS6Sv6NKlsHcB3g49A=; b=Nw6cBjKIbNmSGJM/6hYHABBugLTPDUY9I6mr0h6yomRmqT6ka/s01wy86eqLkS+plmGGiO/1P 2geBwiF5BYfCdEPrWQm60oZLNutoyskB47de2TchQFysdSohMCw5dOR X-Developer-Key: i=george.moussalem@outlook.com; a=ed25519; pk=/PuRTSI9iYiHwcc6Nrde8qF4ZDhJBlUgpHdhsIjnqIk= X-Endpoint-Received: by B4 Relay for george.moussalem@outlook.com/20250321 with auth_id=364 X-Original-From: George Moussalem Reply-To: george.moussalem@outlook.com From: George Moussalem Add the IPQ5018 SoC type and support for loading its firmware. The firmware tested has been taken from GPL sources of various router boards. Firmware files needed are: - qca/bt_fw_patch.mbn - qca/mpnv10.bin Signed-off-by: George Moussalem --- drivers/bluetooth/btqca.c | 16 ++++++++++++++++ drivers/bluetooth/btqca.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c index 04ebe290bc78..e136e91976cf 100644 --- a/drivers/bluetooth/btqca.c +++ b/drivers/bluetooth/btqca.c @@ -380,6 +380,9 @@ static int qca_tlv_check_data(struct hci_dev *hdev, break; case TLV_TYPE_NVM: + if (soc_type == QCA_IPQ5018) + break; + if (fw_size < sizeof(struct tlv_type_hdr)) return -EINVAL; @@ -794,6 +797,9 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, else rom_ver = ((soc_ver & 0x00000f00) >> 0x04) | (soc_ver & 0x0000000f); + if (soc_type == QCA_IPQ5018) + goto download_nvm; + if (soc_type == QCA_WCN6750) qca_send_patch_config_cmd(hdev); @@ -881,6 +887,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, if (soc_type == QCA_QCA2066 || soc_type == QCA_WCN7850) qca_read_fw_board_id(hdev, &boardid); +download_nvm: /* Download NVM configuration */ config.type = TLV_TYPE_NVM; if (firmware_name) { @@ -939,6 +946,10 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, qca_get_nvm_name_by_board(config.fwname, sizeof(config.fwname), "hmtnv", soc_type, ver, rom_ver, boardid); break; + case QCA_IPQ5018: + snprintf(config.fwname, sizeof(config.fwname), + "qca/mpnv%02x.bin", rom_ver); + break; default: snprintf(config.fwname, sizeof(config.fwname), "qca/nvm_%08x.bin", soc_ver); @@ -958,6 +969,9 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, return err; } + if (soc_type == QCA_IPQ5018) + msleep(NVM_READY_DELAY_MS); + switch (soc_type) { case QCA_QCA2066: case QCA_QCA6390: @@ -965,6 +979,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, case QCA_WCN6750: case QCA_WCN6855: case QCA_WCN7850: + case QCA_IPQ5018: err = qca_disable_soc_logging(hdev); if (err < 0) return err; @@ -1001,6 +1016,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate, case QCA_WCN6750: case QCA_WCN6855: case QCA_WCN7850: + case QCA_IPQ5018: /* get fw build info */ err = qca_read_fw_build_info(hdev); if (err < 0) diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h index 8f3c1b1c77b3..343cd62d1137 100644 --- a/drivers/bluetooth/btqca.h +++ b/drivers/bluetooth/btqca.h @@ -54,6 +54,8 @@ #define QCA_HSP_GF_SOC_ID 0x1200 #define QCA_HSP_GF_SOC_MASK 0x0000ff00 +#define NVM_READY_DELAY_MS 1500 + enum qca_baudrate { QCA_BAUDRATE_115200 = 0, QCA_BAUDRATE_57600, @@ -158,6 +160,7 @@ enum qca_btsoc_type { QCA_WCN6750, QCA_WCN6855, QCA_WCN7850, + QCA_IPQ5018, }; #if IS_ENABLED(CONFIG_BT_QCA) -- 2.53.0