From patchwork Wed Mar 5 13:45:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj Sanjay Kale X-Patchwork-Id: 14002740 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11012038.outbound.protection.outlook.com [52.101.66.38]) (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 5CED824A07E; Wed, 5 Mar 2025 13:44:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741182255; cv=fail; b=hrtC+TUiXZ8ozvOJOfUzIjrnNWHgPhy0/Tp5i/Ks0qSXZq5DMBpBXBaxNgnUBFGf2t+flwJ0/PtAn/jewzCJjUdq0e1CBHxEvjeTk/+qKOLCy6AKNCOSCjfx4cHcPPrQUMG/VqJ+GC+pUeRYJh42uwMV6xuvJUpPwiMviS566y8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741182255; c=relaxed/simple; bh=1/jR9CYISle8eUo4WHf9ycLSTcDJYf+Ly+Gn3OEJzZQ=; h=From:To:Cc:Subject:Date:Message-Id:Content-Type:MIME-Version; b=GDP9BP+eFlEdfKKyDI0+mhZIXgjx9BS0u8/4frsgodi8rh0xiEzs67KEGI9uGlwx6wnAptb85kCr3ttNTSUdN/cNykkYkPBnzF++fPKPhJguMFWMV7TMO2rzVFlczyWsOWpjkpSibow6WdrZoI75Z3IDK/WDqpDx7845RgDabVg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=hWNtlI5h; arc=fail smtp.client-ip=52.101.66.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="hWNtlI5h" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BFPq4Dkv01yCr7pG2PkQRptu+T2fneNPgO9gdFGz+SjuM5Iiq9Qbs6sxBOgT8acdsB1pkDBm02q57+AeW1SdVK/jsVjG8v+aAqurIsoxekg73UsrnmoJgK5ruvfc3hCvB3ZsXsvE1gfza5Iq64XEdgr/c4kA/gvoSoGOMFfdGt2Q7fk2hYuYX19VBTSgAaYhY2R3CDzQWqvAPcu40tq44lb2ka4VF2kqNrRNzH/vFFJFV+U+FaDWUXoulI5XOjg6oNqVvsKHYbELXkFb6CNvconcaqTR9MW80ZbgRY151tciMrWai2ovNcAH9PFftpuCpIXXbwN92uZArPiiu7/o+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XirvluISeAskvpLn4Zp9T7aOtGLrRQbthOjlybDRx7k=; b=qW16Ww4Yn6czk5OAmLmWg6y3VK3d4kuYxiPJ6lOElsB09dbiv1l8bYmNDbPBSf2lEataWKUog4BaiuTxMiVT27oXQp3RwOVVZrSQsOCMAHSsZfhnitsbVBiRNzS0z5qirLPWBWVfSa7hj47EHX0O6YrE06CD8W3SfrIOCstbGJ3VYJZgD4ZLnRd7JLyuIwWqbOcTR4g2P6w7B305e/UMSRQBsdHrHj48EfOJC83TxAM1E1fCSe6YrrxdmsnRSDam5yQ3PytWc6Zqg4m0l/PGyJwy0PGi5doa2eBysN25sTTl/PTJL7jR9Sx9DnGnsbrxrghP/iJBxhDlt9pMeRQjeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XirvluISeAskvpLn4Zp9T7aOtGLrRQbthOjlybDRx7k=; b=hWNtlI5h1Z9YYuKCQZKvQMDmEsSezdQHoQhGM7OWBZRs3zd5wvi11Z51QOPY7kemjPvo39W8g/QUrEjOFlY01ATuwoJZyZLIRIXCl/JKe3k6rnsw/S2VUjc2QOOR8Dv826/CqUlqBlE5inqbgxZYwcfneU4S59N8Ysura++nMhNG6qlfeeIUVvMubf8xADA3y+7tIvLlR65gXHmFFFhymJgSawanv7ZxIRLxm3nBFCWf6tYZEUX1Ye1TWgBtzmAcibSTqjBEhTW2DIZP/5bC3gKt9I+cQKpLj1asCw2NFX0ALL8mupdThqlA8howkQCMIRJDCwY1wTfRO4bNN1Fccw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9692.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::20) by GV1PR04MB10965.eurprd04.prod.outlook.com (2603:10a6:150:207::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.17; Wed, 5 Mar 2025 13:44:10 +0000 Received: from AS4PR04MB9692.eurprd04.prod.outlook.com ([fe80::a2bf:4199:6415:f299]) by AS4PR04MB9692.eurprd04.prod.outlook.com ([fe80::a2bf:4199:6415:f299%4]) with mapi id 15.20.8511.017; Wed, 5 Mar 2025 13:44:09 +0000 From: Neeraj Sanjay Kale To: marcel@holtmann.org, luiz.dentz@gmail.com Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, amitkumar.karwar@nxp.com, neeraj.sanjaykale@nxp.com Subject: [PATCH v1 1/3] Bluetooth: btnxpuart: Add correct bootloader error codes Date: Wed, 5 Mar 2025 19:15:21 +0530 Message-Id: <20250305134523.40111-1-neeraj.sanjaykale@nxp.com> X-Mailer: git-send-email 2.25.1 X-ClientProxiedBy: SG2PR01CA0141.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::21) To AS4PR04MB9692.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::20) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9692:EE_|GV1PR04MB10965:EE_ X-MS-Office365-Filtering-Correlation-Id: 23ec7988-aba6-46d7-2ef2-08dd5bebce58 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|52116014|38350700014; X-Microsoft-Antispam-Message-Info: he9m9j6/iOxIc3w42CkArbhuJZ7p6WOdhB41Sbdy71pfLqs2k1S7AwFYrpRTh9GEpZ4rP4t5JUkiLWEVZSYxSgtr0+qLYDFBU5nrAeUHWrhuV3Ijb10qLn7kJqnxrebAnlRtg39DGKSUJnTC2zXFaqiJft51qsPGuPip9huHmgB0M5cf6HWuwqJAWejnJe1Y2SETFWm+Bvebbu5rIqKw4rrAGvWoZt+ZegsfrKVX+Mf+mSOu5uJU5fdv3n3BthfyPXoYcsywqjJIgWT9UZMaIOjRsC2eZtyCpeBIPnBQEg2qcf+UfQnRckBTMheifhsOECds/sp+5j/Pob4bJFg1YgTpwj0W5VmwHoAPWs9HIzsNWsD5fHxrqHQZrL98QIeOhiGEL/VPJxfZSfmtkfF71zuUz6FQbXtaA0dqzLXCOxKW/B1pur3fas4WUlC9zQj6HF0NjrJ8QhRm3nsS6PqqgyUqqwrPVhjR+vrFzinI1e31GrxVygUWN0DIUkOP/x4BK+CWJx7YSB7FRZJZ2pYAw7nUwZvE+ZG54HmgRGLisR6vm1jMGiMVvZQwujPyIQLRPOovKVQPvqR+X7K7QZciVo04NTRfl51AuTMmtPSbtpf+QHkjSO/rNEP/WIaoDKXVhZifJzoKw7ukZHLiUxqz83YqSivct9i+UVc6TGNogR9Qt3u+miVzqQEY+D3lE94lgHNC4uIf9eIbhb3jYRDDnQ6VJGpxDxem+zhD7FMIrBHDLq8JMQR/eIZmZcLiHhv0SRvGyk3VavXgvb/g0QDzkAU51x0EjHi389jXQrZ+0onG8bXv1W9Itqlmlnqf/X7a6BgEqSjst7zN7yVXmKw86BuNL3xOelqsdm81OFThsLTfP2eKy3HHOTC3Hd8cJh3xdsWGf4frm251vvZnYt3Eh3uSnaknUd5YHE80wANpb+93hzTwTOOGnBVxt6qCNs3VIUNUXPWx4dEC+eljKaY2HORkUszwl+cRl2plJJabOpJUxr4wqLNT6b5o4Pd9PRCALGp06itRuAcDaJ+svqZH90RcGuO0m67Qu7JUxA/ZNJL0PmvPitFIisa74vCwBq/Y5bKAutfvpkzd+y877aoAnat49ZrOMxPLealOx7iLanAX0Th74kpWdOVtDGq5KEhU53db7JgfUpqB0wkyKju038xBhDZZQdZ/BgaPhozZP9D8x3I632KsKyHHAzWtDt5suicttudqXEwPPGfCfEHniHg/a/st+eKgJ92szOuJrtvRsopICqejDAbgZs5XqTJcVxClWBYe7kRe0lJgSEm0Zd/gBoJrhCqLkmxU6yiZBLMJ7CKel6d+nOspVQtvvsgCq65t5O9YjLJuqcwlUNhKGKYu59r7kWmdzDVBwIeDEJzNs75W/SQlbPD7NvSnSC/xMILGHj+83kdFZAyK+P+tvofjLJnjKFt5AXMznzvhInm48ZfSfJOuineXadjOQAgX X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9692.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Iqof/E9M21/EZMPW8j1nebLDOnQckRJshx8EjYN/CVAykRQ+KcjbtwFPZShWNpKjveyirNxAnv6gMgjnxYzLButwdG3reX88xEgJBByufeafWZLtjQDJxhEXIWYFi9nQlWsWSFneLPhuo0unlAq6jFTSewugO05t9vdz4Q6WejvLhBS+7G1DEo3xDIggPjRNuk9pJnlx+DGc6KNvptzghhf+gDbnMVxYsAX0Gzq2zpUZ6LjMSGCdP71LjhBo4d3aipVynaf0rCVsG0mesYCBbV+MhgD5hoIibU4wAhExPr3whEWSQ0cGs1hpcMuiZoxlE1g0U5M0s1Bd0IiYB7K4nGOUwf94noOd9awjVfos295J0W1RVyoUtOMVZmXJEzRTuldYsqZopFTd5aQMVl6YDF41MVKBBUHDnAtjqCH24tjykreCgiDobt5Dk6/LlHZJqwJAW2l9q4UKIGjJW6WKvQn3N4P+9lMaRm3W9MCZDC3hmBoloXnNdyyvdalfvumazSZq0GWcSQH5egBQsNZePlF4f5zR09mgUxYWsS/8hhYsxt9wxHemnllu5hogJowBuyhCTGAY4DiGCpLnAw/cuKyyM60E2/P4eTcianRXE1zD1uZuofR1+jPZd8VHsLv2C4D8jpXkQzlr9yeRuNhhEhzrP6TA4o3rJExp3QpvnDyBtbZxKCmnsH3EaNd4sV3LFSeiuUEFavmIOpiIhgxZJzMUJBGpwlhWXpfeCh7bZtQYeMAGpFTm0BSRNfT8bmRdP5VXjYYEHDzyB8+/4SSE9WJjEegekTN8Sbo2HsbxhJej2pkn3KYW8u3ykzLxGcvkA5DLLJeg6Dibo/eNNS/chx+/VybVoaghjrY2VrnkQqf3gxAJvvUn6i4KxlRKSa0nU51f2ZHaz3QafUtk+7lAFR/gVQ5WVFHImktdA5wXDyIW7RkGseiRDSj9KmlDbvfKEYbGpIbaYVYkmhfMT7Dls6ffVrRmeNFzlpOAxyMJ7AneNDWHBU3m4nKS9RUP20e5g2wbRG9epcA5oES6+dG6u3W+t8Vj7UQelfGxxPZBzsEgF0EX2K5KHnG3emyUk6YrOI67G6jq65W8h5+fxTuYH+hYkaXyB8w/UfSkCWWXcjLfROQKW7alcspVefT5y3vpkYmz/N83AkzczodIu6KyolF3OltYP5z1tJxl81RpLzdTmayucF3OTKlD7cEooIe7l2FCgZh4smQdORi9tf4y5k47QorFN5hjaLYnz3BohIj9hC/U+EQk8D2r4lXD/dLrYafrbNvQYhAvAt4rWIVB9zqBcXt+yaNiIcx/R1T5opQCdGbwPFMYCn/gc4Mxb16f78R6tppAgwZSDxmMtvNpUIMNkJgtpX44l+KKfCF04LkquhNe/JwX5Ynm/fOR4UHwmpVwTN4iUfwchNuNbR3elAflO/qu/lyQSc0JqcDO7gS3RKHG1BHbg0uwuLjUn+C7oyLJhxdVF8wVwIEsIUb5xks9skIDOIB8A0OWWJfytPft+yw0lc5aOXYz3NyEegKHAHf80axq6T41q65tSAc2hZpnl42bCfonBmti6s0jGtqZOO1ZJy/81YFDqx76QtE8mNKC3il2dOQtTI+u62gBaw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23ec7988-aba6-46d7-2ef2-08dd5bebce58 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9692.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2025 13:44:09.6425 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1G2uw0bqiSi0Cze95XkyIZOh9VkWYmwppnWPCjeVjJrKfDVMANkdRcllYqovRyhopzK+vFh0FaQJrd4X7NQPZI5Q5AN0Yofu/uZYXpr6WJ0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10965 This corrects the bootloader error codes for NXP chipsets. Since we have a common handling for all error codes, there is no backward compatibility issue. Added error handling for CRC error code in V3 bootloader signature. Fixes: 27489364299a ("Bluetooth: btnxpuart: Add handling for boot-signature timeout errors") Signed-off-by: Neeraj Sanjay Kale --- drivers/bluetooth/btnxpuart.c | 57 +++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c index 021983686cb3..b8a00bf062e2 100644 --- a/drivers/bluetooth/btnxpuart.c +++ b/drivers/bluetooth/btnxpuart.c @@ -204,10 +204,11 @@ struct btnxpuart_dev { #define NXP_NAK_V3 0x7b #define NXP_CRC_ERROR_V3 0x7c -/* Bootloader signature error codes */ -#define NXP_ACK_RX_TIMEOUT 0x0002 /* ACK not received from host */ -#define NXP_HDR_RX_TIMEOUT 0x0003 /* FW Header chunk not received */ -#define NXP_DATA_RX_TIMEOUT 0x0004 /* FW Data chunk not received */ +/* Bootloader signature error codes: Refer AN12820 from nxp.com */ +#define NXP_CRC_RX_ERROR BIT(0) /* CRC error in previous packet */ +#define NXP_ACK_RX_TIMEOUT BIT(2) /* ACK not received from host */ +#define NXP_HDR_RX_TIMEOUT BIT(3) /* FW Header chunk not received */ +#define NXP_DATA_RX_TIMEOUT BIT(4) /* FW Data chunk not received */ #define HDR_LEN 16 @@ -310,6 +311,16 @@ union nxp_v3_rx_timeout_nak_u { u8 buf[6]; }; +struct nxp_v3_crc_nak { + u8 nak; + u8 crc; +} __packed; + +union nxp_v3_crc_nak_u { + struct nxp_v3_crc_nak pkt; + u8 buf[2]; +}; + static u8 crc8_table[CRC8_TABLE_SIZE]; /* Default configurations */ @@ -1059,25 +1070,27 @@ static void nxp_handle_fw_download_error(struct hci_dev *hdev, struct v3_data_re struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev); __u32 offset = __le32_to_cpu(req->offset); __u16 err = __le16_to_cpu(req->error); - union nxp_v3_rx_timeout_nak_u nak_tx_buf; - - switch (err) { - case NXP_ACK_RX_TIMEOUT: - case NXP_HDR_RX_TIMEOUT: - case NXP_DATA_RX_TIMEOUT: - nak_tx_buf.pkt.nak = NXP_NAK_V3; - nak_tx_buf.pkt.offset = __cpu_to_le32(offset); - nak_tx_buf.pkt.crc = crc8(crc8_table, nak_tx_buf.buf, - sizeof(nak_tx_buf) - 1, 0xff); - serdev_device_write_buf(nxpdev->serdev, nak_tx_buf.buf, - sizeof(nak_tx_buf)); - break; - default: - bt_dev_dbg(hdev, "Unknown bootloader error code: %d", err); - break; - + union nxp_v3_rx_timeout_nak_u timeout_nak_buf; + union nxp_v3_crc_nak_u crc_nak_buf; + + if (err & NXP_CRC_RX_ERROR) { + crc_nak_buf.pkt.nak = NXP_CRC_ERROR_V3; + crc_nak_buf.pkt.crc = crc8(crc8_table, crc_nak_buf.buf, + sizeof(crc_nak_buf) - 1, 0xff); + serdev_device_write_buf(nxpdev->serdev, crc_nak_buf.buf, + sizeof(crc_nak_buf)); + } else if (err & NXP_ACK_RX_TIMEOUT || + err & NXP_HDR_RX_TIMEOUT || + err & NXP_DATA_RX_TIMEOUT) { + timeout_nak_buf.pkt.nak = NXP_NAK_V3; + timeout_nak_buf.pkt.offset = __cpu_to_le32(offset); + timeout_nak_buf.pkt.crc = crc8(crc8_table, timeout_nak_buf.buf, + sizeof(timeout_nak_buf) - 1, 0xff); + serdev_device_write_buf(nxpdev->serdev, timeout_nak_buf.buf, + sizeof(timeout_nak_buf)); + } else { + bt_dev_err(hdev, "Unknown bootloader error code: %d", err); } - } static int nxp_recv_fw_req_v3(struct hci_dev *hdev, struct sk_buff *skb) From patchwork Wed Mar 5 13:45:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj Sanjay Kale X-Patchwork-Id: 14002741 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11012038.outbound.protection.outlook.com [52.101.66.38]) (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 11A9824BBF2; Wed, 5 Mar 2025 13:44:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741182258; cv=fail; b=sjEVoA+v1Wc8BNLHiKcjjPBecj12QPJZvxebtdG5WIQUq+UGLocrE2smc0sJwvpBRAF8n2QCkbFmYO23imMS52vRn9pdq9S6LrQfkTReKBQM+JFdyjDuglcBybiUiN1jJPzRVQlI7uqfp8hzrWXJ8jLjdTp9i9WxSXiOkK3RKtQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741182258; c=relaxed/simple; bh=OAS4tiDCqh/KCmq2ZFiUokh7ieYJeBKlwjL72OvK3Dk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=vAtFOXSIBylzKHo5Zzm60deTK7KD3zZqwMCKnlCrbps/FqS30LeSNbd1aR3MR3TMoCCexPlxbxtDUDl2SFd5lB8CBM77AfVXtiLYhlDVhRHO9BwrInvRXiuO6KEZRKeGA08b/zYryVDzE/3mSz3boFpCi2dBPf59OEVhFDK3Vww= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=dOpl0Yow; arc=fail smtp.client-ip=52.101.66.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="dOpl0Yow" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cmrTaF33QZz0bQXo+sPGWoz+XT9BDS2YNTkOHQrW74lQ0Ok9Z06DQa2XrnmxG9k5EAl06sYglnBmpHndrBC2GU+p6d/fA0+3p76jQGBRIdekabXomyG8CR+ncYIS410xQXPJvaZ9iiKrtFOY9wthdQ/aOor48nunGP1t7iYKiZbKZDuk7s46oo5lgwKa0WHG77hAda/qzQ72GNGEGtxvzo1FxTyCLzXJEZo90rW7ZbMvKMEqmP8voiuvk8JywaU+j1VrdpzfrGKMh2U03JNqWm8q4Om6UCdINbEQE0V+YoK2c0QwRtXlIMaN+beXPNUOkBlaJmXnIoJp2y9VsWTCsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KsxETw81uy2sK6QNUYY/zk16nH3R7fgf/DKqzG9SXiY=; b=ffQyBTwcVfAOaJwaFJUU3JwezQZCVKvEz1UHx7xkxM/pz0XQ7QiYaAJ0eZSIbnezrJ1lU4ZiUu62sWBlSkltvNIZM+l717EhmkvCn3jBSWH8QoFC3cZKSR9q2wDup5IXRe9G2qlRjgNJoMQvv4vz9BNmch/bAR12cBouFIBDYUNJvUSoV7COVAu/NQ6YtuDU8AseDW/wx9e7b5KYFgtyFKrN5LafwKmpRe7GpeUuXfJUuLykXNrABmH9agN+Lmp8CBZUdQnPRI1vhVnHeXICCqpMd7PHVCOybdmObTBkx7ioLjpTRTa9sL3da1lZlX/hwEZkChHS7/rkhaDE3RL8bw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KsxETw81uy2sK6QNUYY/zk16nH3R7fgf/DKqzG9SXiY=; b=dOpl0Yoww+7rT0zJ01nVRoqFStPb+5xv5AivcNYVJnsjaBcF4cB/85uhzBJM61iMzA+ZmvEU8HigkTpsK7JfNNzdsP80QhpFn6LRmjvuQsIp4lO+HEWU6XgsqGCb7CK6F3AbnKdQUiGJr58DuGy9oQN4Y0V8L0A0Dtxg0o8IMJ+B558elVfrbttlckrwXwaiYOp8YtjEZ3kn08HDB2Vsk+AwtnunJzivMGUMY97YJgQ0hDn81wK/40f6ZokJb3Naae4c21djGMRn+x6ceVGymmdlGrUaeAMkaNSGbH1+OTqQLuyjn0SEZn+f+vSOIatg2dLQltgrV2YATCYh9vJz+w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9692.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::20) by GV1PR04MB10965.eurprd04.prod.outlook.com (2603:10a6:150:207::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.17; Wed, 5 Mar 2025 13:44:12 +0000 Received: from AS4PR04MB9692.eurprd04.prod.outlook.com ([fe80::a2bf:4199:6415:f299]) by AS4PR04MB9692.eurprd04.prod.outlook.com ([fe80::a2bf:4199:6415:f299%4]) with mapi id 15.20.8511.017; Wed, 5 Mar 2025 13:44:12 +0000 From: Neeraj Sanjay Kale To: marcel@holtmann.org, luiz.dentz@gmail.com Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, amitkumar.karwar@nxp.com, neeraj.sanjaykale@nxp.com Subject: [PATCH v1 2/3] Bluetooth: btnxpuart: Handle bootloader error during change baudrate Date: Wed, 5 Mar 2025 19:15:22 +0530 Message-Id: <20250305134523.40111-2-neeraj.sanjaykale@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305134523.40111-1-neeraj.sanjaykale@nxp.com> References: <20250305134523.40111-1-neeraj.sanjaykale@nxp.com> X-ClientProxiedBy: SG2PR01CA0141.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::21) To AS4PR04MB9692.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::20) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9692:EE_|GV1PR04MB10965:EE_ X-MS-Office365-Filtering-Correlation-Id: dbbb119d-5ddb-493b-16c7-08dd5bebcfc9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|52116014|38350700014; X-Microsoft-Antispam-Message-Info: Ln9BoQDGomqGzYbDbzutfGUFt8BJ2+4K6HAfIIADhQu0hr+PS6VYh1phwEuLt8txpf/+/8SkqsZSWGQyTJ4S4gCdqcYR1GGMk7TZmDDkjZQtTTNzYdPlEQzqGR4alQ9VqLOOS5911V8ibLiiUx7LJvO7jEo9CcO/o2Wn+yQcnIW0VKQoxwTDYQV/s2/qwN8w7aARiBvPHvoFKm16HcGcczcqP7W9HZRTqWhh6Im1RiStKgCp5LRQBddhjo79Y2qvuCzLCu7YIGcvSa72MRNW8Aq5X/kxIJWihHCPRXixlB5pVVGM4vZqxO8vGwnST9yT1FZ8uP4zclSxTIeputVohy67yJk+k+EyLlG6E7J8V6Ab6gizuUiapTdsDOPxC+vQFXBu0QGinMZoxIxdsdid5u0qMCP11Y3S4pcGPKf7Rk/FVIB6rIPilhXixfVHj/zyR87Lu9xzktKSKH1M/ofvOMD07e5Ql6AzyR0l1Jn7iu+SWwDtXSkrnaXfLrQR1CLUZotUCp9FuTTbAGGHVcp7lKObhRYGT2UXat2Vt0wM1IpL2Sof9uPtqta8NQWnOdj0zysDroZorMFqPuzPRRLRaEP5MBhBzFrE0vkMnYGMq4lGdhcrqIrorH2luGV1r4Jrn3Cksl0GfeNW8QF1yL0oYSkxsInKPiGQQm6GFSSUFI/ibf30t7CIIHWqeqxRrZaGb9RdC4tZIkgd8Y+fGKpmf6H+kyThtHEQ7fyNXURWgX28sGkUNgGmj3tXBVcUb3eY0N2p9A+gvGsVzVsLLG3nb6l15sQPIB0H6VSflCg/xw8JYkAZmrxEX1s4SiKkLOgHqLDhabB6Sbxc65P24mi+vz1RIEW2X66FaRE5SWNXz9sf6TvjXkUZKLJtPARl2sGvS2D1u6Iuae3wfR1RcbdGrIhzn93xlcrfEvAg4Y9/4NjfDfBxNAowACIWw0ehTif+ZMTfvHeVpAdXsP3+1ipk9ARGCcEUn3ZZlJlgdVvQbnanrbRW9G4ebXwswZr/2t+mW3eUzYOvZnWx1iKJIUrdMnNNoyX1yALzCIHBeEzyEcaM9yUq+PG+xTAnA6tILpUF7OeQTLztbPu2Ykx/5i1+n8PRpaMBOP7hYKsNx9iQ3mU6xYKTZLhI8c5+nEWnIyJZ00a7n7zCMl/sHrQ137IBzjsvW6JjZEsP/+4daoKBL/ZNn1BdIdP87xMIibL9PYecpaE96CV44jLaSf9YE8jk0JIrW+vdtPBFdtdblpBwKuvL08ctf7EjPavqLltkCeDeo4XY/QKNpvRZLEfmQNJOAEAecSs9z7E8OjZYllr5cvWkzqdG++oCUtw+i2jEeVLbpJdlB4vkPkYmiduSctzrer4TKeIE1rUS5k8Fjrsu0ur3G2+k7gL5d5x7dJyQYMk8WcStrgJ+zt4MOjxcXdTs7QurcB7Z9FQZW5ps1lJ5pzd302IQ3h7KOPbWk0Y2qv0k X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9692.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Wofg4UEVoykZT43Aa3gS54PWVsHesuG9VmTblEHxf489I0vW6S2vo/yye9HnO/i85RznxbOnixyKiJRKRo9Yq/HdLHc6Rb/pPUf7UpON58gOjA+bK+Fbm8tPoinqzQJi2+URMamgx13ZdaLusI+Y9Z8gRzcR+R9UiikandFZOn12MM3nC1rZHt/mma4JsHaMdPl1rCU0wqOO/xfY4PRrInwBAX2SdJBMfbQEYufhzZI3APyOe9WWbDMztvgzXxGSO0la9Xgg3OTQ83FuhaWv/G/ktSQETv2rEeZ18wbUJ0M4PHDjJamimCvWDFvHt9nWk7NJI7EJpNQSXco3Rwyb85Uc2jFJWhRNYnMVzYuz49B6WA41cRfATfnnL9Agl217Ancw8raSlWC9OmJJwor6HZn6/bvi/hzghNURIKlcowH/tHwOWpgrMGVmr3mriW7tEbhTN8YX6kS7uuHoOe39Qzlz3lSgPALPAMziMYvmGm+lHQFztdGKknzBXxfzkiw8Nn1C93Ih9c5+FiYt4oPO+1fPxQzXNQ/+/57f/jkbE6ne/nqIRwnmY2vA4Dby/rTQ9NtgCr6y55Epim7qq8AR061KzhPoeVV7eJbygL3Zxk/9BQblljtsPgyj4Wf41RvE8rkbEZTQ6S69X6ZDDQrG8WmmrlM6XMq5zZRToVFmVicLLIhb6+7htNrASTeWXFy8yysEao9FjQ+br6nqBox7aai7Z3+CVEnqUCVSEgMIkMWecwxuHuVdAMSY/nRV9opT6GKYrLm6ieR5buP/Jhulk8KXaA6offtJrKHLXVB+F7VIB4Ku/sO733Gylv4a1Ls0TfE5vOaUrcvTgj2lhBiUmYvW1Cd3CrjG4Cu56U+sbePJu0UdBoajpmRhnYqkCfPYKsZm9lai65o44W0yu3PMSFfI6SqaTWm1VxpanjL6r/iz9BlJb0WMAMVd0hSmEXxtMWo7xJC2ZxL8BliVI2KceqCKbGd/bTju6CKSl0yuUgiJZy8TN1iWQ0MyuR9b/ww9z9b7LfUdPmRhW9+xYoqBiWAH3E/z6905trXwN0mUgkl5gb49jMkJyMm++iBsQ53SUDCFHW/PcE03u9za0z1PjH3ekFDi9rEVxZWBDra/s07Ftkjm2oOd+5cksYqwD+Mgd4Lgr/3ugrNL67DnhNQcRVB7AAxkY8SfG7Bw0yTn6LQVRaQK/OIa+lY9Ph/RgS/PDnAqY5iNQecwjlH6/+PfVTyZpyaTOQmE+rleKdNxkAbZncOkaIDMp0rwcdROAH6eOvxCbK0L/u8JC4+MvZ7YvlabFAQZDr2bPHmJNJAG7FmDwKZPHU+FdzDwQqN0IeIiXi8WjKcN2OTCFVbZpj4JkMvaM1H16f3jKkocc5EdCtpT0PS9ZVXmfWSxU9jBFu3Tz83rqnfdjv5QufD750RnezfCfL75HY+y024uqFcGJDgdaoP9jCrGFxNvONSQGOgy8v0y75haB+d1M0DC6HdrlpQQKTBbSp4k68LuQbClMw1/O8qr056m7f9nlkazMyu1BSNRaWHvsAKPdVYTm/TeKFpqfA+1dFIjRiJh2tuJqHoU84C3yY4GFRez79JnDtcaZwKmvOvqBDBBnuxyAK2Xbw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dbbb119d-5ddb-493b-16c7-08dd5bebcfc9 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9692.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2025 13:44:11.9917 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Vegt7Jj024NjhmmKfhadstcWtLZ+YAr9PMdVfYG1L6K+Hh22vCYJx+UF0g0QcLSWChgz52IBX7yoYem3pcuF4gbfbGHeVO23uAm170oPNUg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10965 This handles the scenario where the driver receives an error code after sending cmd5 or cmd7 in the bootloader signature during FW download. The bootloader error code is handled by the driver and FW offset is corrected accordingly, and the cmd5 or cmd7 is re-sent to the controller. Fixes: 689ca16e5232 ("Bluetooth: NXP: Add protocol support for NXP Bluetooth chipsets") Signed-off-by: Neeraj Sanjay Kale --- drivers/bluetooth/btnxpuart.c | 55 +++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c index b8a00bf062e2..4367d59b4653 100644 --- a/drivers/bluetooth/btnxpuart.c +++ b/drivers/bluetooth/btnxpuart.c @@ -162,6 +162,12 @@ struct btnxpuart_data { const char *fw_name_old; }; +enum bootloader_param_change { + not_changed, + cmd_sent, + changed +}; + struct btnxpuart_dev { struct hci_dev *hdev; struct serdev_device *serdev; @@ -177,6 +183,7 @@ struct btnxpuart_dev { u32 fw_v1_sent_bytes; u32 fw_dnld_v3_offset; u32 fw_v3_offset_correction; + u32 fw_v3_prev_sent; u32 fw_v1_expected_len; u32 boot_reg_offset; wait_queue_head_t fw_dnld_done_wait_q; @@ -185,8 +192,8 @@ struct btnxpuart_dev { u32 new_baudrate; u32 current_baudrate; u32 fw_init_baudrate; - bool timeout_changed; - bool baudrate_changed; + enum bootloader_param_change timeout_changed; + enum bootloader_param_change baudrate_changed; bool helper_downloaded; struct ps_data psdata; @@ -660,8 +667,8 @@ static int nxp_download_firmware(struct hci_dev *hdev) nxpdev->boot_reg_offset = 0; nxpdev->fw_dnld_v3_offset = 0; nxpdev->fw_v3_offset_correction = 0; - nxpdev->baudrate_changed = false; - nxpdev->timeout_changed = false; + nxpdev->baudrate_changed = not_changed; + nxpdev->timeout_changed = not_changed; nxpdev->helper_downloaded = false; serdev_device_set_baudrate(nxpdev->serdev, HCI_NXP_PRI_BAUDRATE); @@ -883,15 +890,14 @@ static int nxp_recv_fw_req_v1(struct hci_dev *hdev, struct sk_buff *skb) len = __le16_to_cpu(req->len); if (!nxp_data->helper_fw_name) { - if (!nxpdev->timeout_changed) { - nxpdev->timeout_changed = nxp_fw_change_timeout(hdev, - len); + if (nxpdev->timeout_changed != changed) { + nxp_fw_change_timeout(hdev, len); + nxpdev->timeout_changed = changed; goto free_skb; } - if (!nxpdev->baudrate_changed) { - nxpdev->baudrate_changed = nxp_fw_change_baudrate(hdev, - len); - if (nxpdev->baudrate_changed) { + if (nxpdev->baudrate_changed != changed) { + if (nxp_fw_change_baudrate(hdev, len)) { + nxpdev->baudrate_changed = changed; serdev_device_set_baudrate(nxpdev->serdev, HCI_NXP_SEC_BAUDRATE); serdev_device_set_flow_control(nxpdev->serdev, true); @@ -1109,21 +1115,37 @@ static int nxp_recv_fw_req_v3(struct hci_dev *hdev, struct sk_buff *skb) if (!req->error) { nxp_send_ack(NXP_ACK_V3, hdev); + if (nxpdev->timeout_changed == cmd_sent) + nxpdev->timeout_changed = changed; + if (nxpdev->baudrate_changed == cmd_sent) + nxpdev->baudrate_changed = changed; } else { nxp_handle_fw_download_error(hdev, req); + if (nxpdev->timeout_changed == cmd_sent && + req->error == NXP_CRC_RX_ERROR) { + nxpdev->fw_v3_offset_correction -= nxpdev->fw_v3_prev_sent; + nxpdev->timeout_changed = not_changed; + } + /* After baudrate change, it is normal to get ACK Timeout error */ + if (nxpdev->baudrate_changed == cmd_sent && + req->error == NXP_CRC_RX_ERROR) { + nxpdev->fw_v3_offset_correction -= nxpdev->fw_v3_prev_sent; + nxpdev->baudrate_changed = not_changed; + } goto free_skb; } len = __le16_to_cpu(req->len); - if (!nxpdev->timeout_changed) { - nxpdev->timeout_changed = nxp_fw_change_timeout(hdev, len); + if (nxpdev->timeout_changed != changed) { + nxp_fw_change_timeout(hdev, len); + nxpdev->timeout_changed = cmd_sent; goto free_skb; } - if (!nxpdev->baudrate_changed) { - nxpdev->baudrate_changed = nxp_fw_change_baudrate(hdev, len); - if (nxpdev->baudrate_changed) { + if (nxpdev->baudrate_changed != changed) { + if (nxp_fw_change_baudrate(hdev, len)) { + nxpdev->baudrate_changed = cmd_sent; serdev_device_set_baudrate(nxpdev->serdev, HCI_NXP_SEC_BAUDRATE); serdev_device_set_flow_control(nxpdev->serdev, true); @@ -1155,6 +1177,7 @@ static int nxp_recv_fw_req_v3(struct hci_dev *hdev, struct sk_buff *skb) nxpdev->fw_dnld_v3_offset, len); free_skb: + nxpdev->fw_v3_prev_sent = len; kfree_skb(skb); return 0; } From patchwork Wed Mar 5 13:45:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj Sanjay Kale X-Patchwork-Id: 14002742 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11012038.outbound.protection.outlook.com [52.101.66.38]) (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 BA5CB24CEFA; Wed, 5 Mar 2025 13:44:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741182260; cv=fail; b=SZ3Uj6vWmKNNQnvXlvCIdfYGju03uX3CqwsFy+3QBC/KwWyAme5mRZfFhtILNydMFrmHWAfKjdtcw6zY1n/z/x4LW+aUl5goYp110LK9z6KmoNJF4ivqy0x7FCBUL/ScRqdn/3WjkvfJMNZ/rWg19B9cs6RH8G8amvehdFbVuIg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741182260; c=relaxed/simple; bh=Ky//E9obdLg2cVGYDs+3YWEbbQkbV80BoxaTG8Rb5vo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=nMMiLPQY8LgDvam81qzq/A4RyTPDf/gL/+c4bVBIjGefvaQIStNqO4gwbkNzlqapeSXwtOAgAkcJzUBALU3Q5fW8guR9ES6eew2LHidjJnUYDd5nzFny6edk3qXQMdN6KIcrl+0NVojK1ajUnX9mFlbUk3Z8bHOWNrLGDbgzqr8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=aMI0741m; arc=fail smtp.client-ip=52.101.66.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="aMI0741m" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JgJ0oqDcxdSwRaNBByugWE7KwAxOOkKlhrIMRRh+TaVFgrpLWG+f2wNF+RSavceABadpPQJiO5a+mvQ3VXQHee++sbxDHRVwPf4xU+OzpmepQq8pQnDvOYfCcWLyD+xOrMfLFZXKpZofSzY91ofjBYRuPmXSQRmdLkwlIv0blSGOp1D6CZ6lBWjk3vSJXMvsGdbK/ZBJKftRNT9oaH/HoL689E5QaFkfCelea5PoruLOFVzIBGHFlrJMrPlqUBqnvFrJSEdVPCtBrn25gibJPclnGhr1pVD0BySN9Yh8sAwr1L/G2rdWR0zPwiQWYhqRUIdIFAGmqQMXdWKzpQDpGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WAfRswp/iM5QxMMVM9Sl4HvIcmfGlnv5isvXmjHHrCA=; b=yjiyf0whQ/d92rfYjDe1Te4s7xbbEuXC1dDXYq6HDGW/TeH46KUYQI0h84gLsXnCuyoUFWXlz3yFqzGwPT9soe+8zoQIsQ8ip4CyetUU0hsYth7peclEQbKG8XIh0LPJzmZlMtxSzVhqRL81T4xeS2MpLzsK6fKP8dsD3SHXq9wpVEWaQv6/K1ChL52+AZjeUSNC246gkgd8RoGCSse1sfCCu9XQmO+BKsXIkvENo4azygxUSBpDn+oyg84rWFku+TZ3dBnBvmeV8dr15lPYYw5+ehWdbY69T2JYHRkdq+lvYMZKJ1k4eKa7bqB9gIaueZvwsWdek7Q6I6uVLd3dpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WAfRswp/iM5QxMMVM9Sl4HvIcmfGlnv5isvXmjHHrCA=; b=aMI0741mkeX+gJiehSjdZSVhnUNP3d2K2rEZ7c7ZHbE23P/7hx3XfyeW8QeomkRxQayJiFJMSEjfWL8B0gxUSj7ebqQHc5CsoH+i5pjf8Bml9PW248ditSUGVfU0my4lHiBKd7nlkXMOHUQUVUZGpfOGNUaXnOntZNcnRZjffVTRx5NwfIKnDlbJLw12cEDVdJaYmXYN3N4uvCH9gqh0fO93bYCIPloCWx5CU5nQ02uh+V+nX8JlDREwJ5lzAH9A+TbnMV66Po92xDL9RT+86/fONil5HBehGRnT5sSAcRlk26E68t64YLShoz72xQGuGjtKEeLGIlpuBbSvqKa7Mg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9692.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::20) by GV1PR04MB10965.eurprd04.prod.outlook.com (2603:10a6:150:207::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.17; Wed, 5 Mar 2025 13:44:14 +0000 Received: from AS4PR04MB9692.eurprd04.prod.outlook.com ([fe80::a2bf:4199:6415:f299]) by AS4PR04MB9692.eurprd04.prod.outlook.com ([fe80::a2bf:4199:6415:f299%4]) with mapi id 15.20.8511.017; Wed, 5 Mar 2025 13:44:14 +0000 From: Neeraj Sanjay Kale To: marcel@holtmann.org, luiz.dentz@gmail.com Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, amitkumar.karwar@nxp.com, neeraj.sanjaykale@nxp.com Subject: [PATCH v1 3/3] Bluetooth: btnxpuart: Fix kernel panic during FW release Date: Wed, 5 Mar 2025 19:15:23 +0530 Message-Id: <20250305134523.40111-3-neeraj.sanjaykale@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250305134523.40111-1-neeraj.sanjaykale@nxp.com> References: <20250305134523.40111-1-neeraj.sanjaykale@nxp.com> X-ClientProxiedBy: SG2PR01CA0141.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::21) To AS4PR04MB9692.eurprd04.prod.outlook.com (2603:10a6:20b:4fe::20) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9692:EE_|GV1PR04MB10965:EE_ X-MS-Office365-Filtering-Correlation-Id: b7e2d57f-7f0a-4d8b-fe99-08dd5bebd129 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|52116014|38350700014; X-Microsoft-Antispam-Message-Info: gWw7ZDcfPDigWjYHjWP2bU+behLOSsNv8/cQBV/WTSxkDqdrcQJCjY5Qbh/dc/hc/fdWhAh2l9+Qymj4W90/g3nXG2DlIJeyDHWLKe4Mrs0hTfJbUbSClrWWYB+CJeY/zKSyf8RxBlEtxRB6zmN9l1QUd4LbbZJZIcUi67WkI0jyZ0whqy4TaVY6o7XY9s6qCyNGz1PmoSaIXbfhhaA37riEN/ylFdvRHs/wy6zutS+67AzM0cT0M9tH9DmznR4RWBLTSe2od7tBxdRiG53OMH8eB7oZr5uacSmeRWloFCHukZGKWTTPVeBX5GYBeZiMUqxGNdzn37Lvbn7lbLwa/HbGwqkeiA5dZEoMA2yJ1y2Bh2lpRya1C3gdjQJy7aj+pjPSgKBgssCerY46nHZ7TYGPHWTVOH4uXkXkmM2KtWx4q79IpQ9YHnGZ1ZfikFSYiJqGbBUZY5et94j/a84TKYhbSrFe6n+RlnQK+/tZ/lpM4gyiJPng9eDOz803hW1AjHmzRUkliiS0SKgL0h/erLxzYABnVpHIFMX2fHIKzCn2JJreLJFESN8Bb0j6KgLBZP8IWOnBKuFNvBzLocLt4GdyKHCr8rz666QorIvyaUl3sxsKvHu3rANaYdzB1rL6aFWr3ZIlsKaPa1i0iwUQ4ul//ZEKK+Hxnwez2P1ii/wEhFQUwLoMP2zDfOeUUK8k2z4qIN1/20WjW1ZHQJiNq9G+bZKoJl3Xwf8OcNWEl5XZlMO+9mQHuBVkf5EqXRP+9jt01YwH4jXDMK11gP9hrBpAx4OYEVZi1RFQE2vPRDriTH0+VLoYY/HQ8COHssJLIHbTG9KVrZi+wL9Spy81Sq4odJ/8yZLi/gtBhJo6G12vqW1Wj6YCCE5uuKKzX+7PLZ1aCmlJb7niDUtAetdeA6JSm8YjlkiET57U2hQAWR2ymnOvwVu5WrG3SI/VoylT/0jEXfsrl4BX1+jtwHSMtYkMEVtU2gS7uv1p0VkdRr3bDiUPDNcMZyWV1Ef3pD6cv2Ac4vesR46MAzHXks4kkOMTKkTpO2tr2+RevgFBBybbNK3S4RmTvprP2Q/dcdJIq/EipwGjRPZxTGo18anO4u3bdIcy2vbAgR44J4QCjN/IrMmh0Metcz7yV9+m4SRPO4/e/6MZ3xd41UDtFaM3+hzCPYljGGczJVG9GEeKNaF7NN8SEcHaZN1rzjaSwMR8JeN0qizM5KvYGvVk2VYuU6WwmmxiHidTvEkQHPclk/5ljbzXEBFUQ4tJ2HFMfQKGG0rQ4OlgVU/5NG7lApjArSgtWW3v+lGUhARbNxLXg975n9dR9rE2Vhoa2QkoFuh6M9A+aJcyuJrBczEfzcMXgM9i9nfZMSFGtYp9ahScue3Yg7yx5K8iWPbvb7T7voBE8OHcfOOOzhXcRJv6/3W1p60O3FNJRPINcdRoOv38vkPMu4H78G1XGErfCSn4L1fL X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9692.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7G4AHFRn6NFILXnds0HhNPh/UaFbytAGXXAC1jLvK16qZg2vmo/r8zmQzHY9AAOhDSoTHrFAWfOK8GksrVY9EiOn5X/oT8eD3jE1MSLgHCn4cJALFo2gFtzOX8CYx/GaT9hN2QVp9m9p5hLfBKFTdEa994uwcsXoFM5SVmcPAJNzbgnpRmJMu0DKISJm8y/GCfDKS+kUAHm0MMOcP+lsFL6wWt+dR3T+59sUmCB2v2kU/SFeOqvTwtt+kLRVCkiuMVh00jQHEQtVUM9tM+MmvjTXSfszut0sKPJpV26Mm+jqbO3fOP7LFFqrPgFkJXN3LBiGXYwcb3mfVhSIksjBxxsjeZryGAcvwKVW+yKITswUVPtqVgSjh2k68ik9w0IUSisHiUgFHYgC6nbrKUX96dCHsRgeUPRzujwS10jMC2/UIfVa7kueCda6ufkR83VSs+xzhD5lv2OiQnt3HwKXzgTF5OAGKWw6cRW1PT+dQZ5R3Rkr+HjlTHWAM+tTkQ+orWa63IIpSkHx5e+AwarjZS9ecNr7yuDFCHWXGYtOxl856ZiiApSwEjc3D+zL/3Oh8+FsBz0Og/gtsdQrZHt8/jqlf/pvYgEzj4SRbzMZRewJZi3vCD3XnxbSt/pvNH+v/FSwMEV2tiO6Qc37uA+cHWCSWnLbeDPgr+1+YS+pW/J88XxVrpqeHLlI72GmPF+odx8bf2M+V8MF5AjOEjASafhmxzMK3AXtWZPg3RqBmqpHQkPIFmtFbBgRdPz+xDnUW8Zycrehwbt7PL5qKXdeDEeaYgXGDr1u1jQab9uHt9mD5TRVWgVenQE8cXYl+/t3/TjUqopEnqsCeeCxkeuo66iDCAO3JzcnxLBn05dl++/cMzvgAKdU/NMDSuezNAaJptEhDjmKrg+NDeCZ7RJdC5n1vM5aJyo4JUuzBufRuOtszfWMK2113Z4bskgA6wxWmSQ4wnJVVkWwdyZ7rJ2axHDmUDHo0EuUNm3e23o7k8bcmEwpwIoq59H84zB0ULat2uxhYEKWDo5zgxEHUsZ5M7v0yQldSOOt5LPOC0Rb7J13mdUCrKHbIjUP1/wsIgwZw7FbUZzBF54F0XPwNEWoda1KrIzUD21vNjj/T6w2bz1BCh4qvOWqE/lvYgp0FZf8K0wPqy15PYUmOuZa9NUjOxOuWeLDO+enaWeC3/0wZCP21Em/0BxIqmFmJN6P/0LbXjyLeeh+CgSAsbGpsfOcGLp4Cnl5PVBiyZEsR5ZfqYzl3E0tC4GJWHNG/HPjnJfqvYTIbrXdsn9mbslaMD6syzdlj/NQwABXKmIakRNCEGNB5b85N2nZmieTUYHqYu+8dPNul8ZVRDhuuU5XrcmUu9XGmc8p4qvcH3IRMQ9fwnCjVfrpsKIYtLWARL8H4yMTYiYqe9/G7ulfLPa3AMQfGH+0heccnTCd370Vdsy8QnABBfjsZVGljuuxQICQnZt1ZUx7VzEqQfOpoKvi/bHfDui2D5WYhu6VZ3WzcWYY1YJg1o8nv7zcGIE6pXukEZGOKkIWh6Bmct2XFE0Jnx164k12RO3FJVVkB9zsUGfayD+Mur82mueq0jf+Dgevsnz7qhl9/rRylTaaIC0xn6Tx3Q== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b7e2d57f-7f0a-4d8b-fe99-08dd5bebd129 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9692.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2025 13:44:14.2681 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vjD0aMFgc6nuIpL/ElLANJgXjRFOsD5kmCWULpbpkTqEQoVjF7a05Vw8wdI/+FudSh/n1qvXVP0wTvPXJUyRGSiKRUCj96ARQWi7EBFSeNA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB10965 This fixes a kernel panic seen during release FW in a stress test scenario where WLAN and BT FW download occurs simultaneously, and due to a HW bug, chip sends out only 1 bootloader signatures. When driver receives the bootloader signature, it enters FW download mode, but since no consequtive bootloader signatures seen, FW file is not requested. After 60 seconds, when FW download times out, release_firmware causes a kernel panic. [ 2601.949184] Unable to handle kernel paging request at virtual address 0000312e6f006573 [ 2601.992076] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000111802000 [ 2601.992080] [0000312e6f006573] pgd=0000000000000000, p4d=0000000000000000 [ 2601.992087] Internal error: Oops: 0000000096000021 [#1] PREEMPT SMP [ 2601.992091] Modules linked in: algif_hash algif_skcipher af_alg btnxpuart(O) pciexxx(O) mlan(O) overlay fsl_jr_uio caam_jr caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine authenc libdes crct10dif_ce polyval_ce snd_soc_fsl_easrc snd_soc_fsl_asoc_card imx8_media_dev(C) snd_soc_fsl_micfil polyval_generic snd_soc_fsl_xcvr snd_soc_fsl_sai snd_soc_imx_audmux snd_soc_fsl_asrc snd_soc_imx_card snd_soc_imx_hdmi snd_soc_fsl_aud2htx snd_soc_fsl_utils imx_pcm_dma dw_hdmi_cec flexcan can_dev [ 2602.001825] CPU: 2 PID: 20060 Comm: hciconfig Tainted: G C O 6.6.23-lts-next-06236-gb586a521770e #1 [ 2602.010182] Hardware name: NXP i.MX8MPlus EVK board (DT) [ 2602.010185] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 2602.010191] pc : _raw_spin_lock+0x34/0x68 [ 2602.010201] lr : free_fw_priv+0x20/0xfc [ 2602.020561] sp : ffff800089363b30 [ 2602.020563] x29: ffff800089363b30 x28: ffff0000d0eb5880 x27: 0000000000000000 [ 2602.020570] x26: 0000000000000000 x25: ffff0000d728b330 x24: 0000000000000000 [ 2602.020577] x23: ffff0000dc856f38 [ 2602.033797] x22: ffff800089363b70 x21: ffff0000dc856000 [ 2602.033802] x20: ff00312e6f006573 x19: ffff0000d0d9ea80 x18: 0000000000000000 [ 2602.033809] x17: 0000000000000000 x16: 0000000000000000 x15: 0000aaaad80dd480 [ 2602.083320] x14: 0000000000000000 x13: 00000000000001b9 x12: 0000000000000002 [ 2602.083326] x11: 0000000000000000 x10: 0000000000000a60 x9 : ffff800089363a30 [ 2602.083333] x8 : ffff0001793d75c0 x7 : ffff0000d6dbc400 x6 : 0000000000000000 [ 2602.083339] x5 : 00000000410fd030 x4 : 0000000000000000 x3 : 0000000000000001 [ 2602.083346] x2 : 0000000000000000 x1 : 0000000000000001 x0 : ff00312e6f006573 [ 2602.083354] Call trace: [ 2602.083356] _raw_spin_lock+0x34/0x68 [ 2602.083364] release_firmware+0x48/0x6c [ 2602.083370] nxp_setup+0x3c4/0x540 [btnxpuart] [ 2602.083383] hci_dev_open_sync+0xf0/0xa34 [ 2602.083391] hci_dev_open+0xd8/0x178 [ 2602.083399] hci_sock_ioctl+0x3b0/0x590 [ 2602.083405] sock_do_ioctl+0x60/0x118 [ 2602.083413] sock_ioctl+0x2f4/0x374 [ 2602.091430] __arm64_sys_ioctl+0xac/0xf0 [ 2602.091437] invoke_syscall+0x48/0x110 [ 2602.091445] el0_svc_common.constprop.0+0xc0/0xe0 [ 2602.091452] do_el0_svc+0x1c/0x28 [ 2602.091457] el0_svc+0x40/0xe4 [ 2602.091465] el0t_64_sync_handler+0x120/0x12c [ 2602.091470] el0t_64_sync+0x190/0x194 Fixes: e3c4891098c8 ("Bluetooth: btnxpuart: Handle FW Download Abort scenario") Fixes: 689ca16e5232 ("Bluetooth: NXP: Add protocol support for NXP Bluetooth chipsets") Signed-off-by: Neeraj Sanjay Kale --- drivers/bluetooth/btnxpuart.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c index 4367d59b4653..ac8dbdc82255 100644 --- a/drivers/bluetooth/btnxpuart.c +++ b/drivers/bluetooth/btnxpuart.c @@ -681,8 +681,10 @@ static int nxp_download_firmware(struct hci_dev *hdev) &nxpdev->tx_state), msecs_to_jiffies(60000)); - release_firmware(nxpdev->fw); - memset(nxpdev->fw_name, 0, sizeof(nxpdev->fw_name)); + if (nxpdev->fw && strlen(nxpdev->fw_name)) { + release_firmware(nxpdev->fw); + memset(nxpdev->fw_name, 0, sizeof(nxpdev->fw_name)); + } if (err == 0) { bt_dev_err(hdev, "FW Download Timeout. offset: %d",