From patchwork Thu Feb 20 11:41:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Neeraj Sanjay Kale X-Patchwork-Id: 13983860 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2065.outbound.protection.outlook.com [40.107.241.65]) (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 884081F3FCB; Thu, 20 Feb 2025 11:40:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740051626; cv=fail; b=m0P9Kh3qEt90A58RQTr8AxraMdUOho+rx9Sg9jvUTPQOYPLffPfezewfVC7tpHv+bEaOXnGGKxr4h8avj3hHTnF/fNSuqDmKgrAncnTmA9hnrGYrmokvYNDXKdIokl4zqK8nbir5TBaSWyoO/Y7OdzozlUxu8VCWLdWGW1iow2o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740051626; c=relaxed/simple; bh=wtpNaREMXoeKvZyK2KJIhERJ8JA2vNi/7MLQlh7aSvE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=UPvIrmC+q6T7eft9YLApVbUX/+rSFvogVXlyA8CAwXJMp2pjkDSVmA+vGB3Pta1d64kBd54qwVTWEFRI252UL1NChmKX27F/OjmDtIhpGbf2BE3n2wE6wS0RnMMfHa8IyCB1RrrZWpy3jHjN3RjRJ7R2LMiHALKPkMj/hHdKmJM= 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=nWPD0SYZ; arc=fail smtp.client-ip=40.107.241.65 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="nWPD0SYZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wlZy2pv2OQbmRS5G7S9f0oGfPvesPW7lC1C41MkYvFGAW+b8DetPPe5HoqSQfVyoiD4KD3Qrjwn2ofaCRh0C2h2Wr2ZX0qj2BGYnXqPvJXZfZNHF9/LtBJVELLGx6jlKRMgfPsbmJl3Em7vvXm5kxz7CdKW7YIEyZJ3wV25uQj4+ST/aNpSH1sAOb/Gx2b4hLjjo0YbzXH/x7eXJbNre+vJ1BR/t8oCX2AjUX4BXDag+2fm3DwBDrDMiQkl2KQid5vYdPnzA8q+l/LPQx92TFb3Iwobpk9mffFc3IvS/BGUqp76bIuNp3WX2v4TyHb9Wf8/mnxK+l4wDiKhz2oAszQ== 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=jRe9+lZM2I1aLDz7V8EYgNMomijvzqACZ8+BxPNAUmg=; b=eLk4su0lzzeihpuc6wMxgqL+f/5QQ9TJ7h6mzZYCpQsAqksz5u208+2tSbvB72wyjqKO9Z6v9vilh7Uisd3B52eayKRzwXfwRKVv0fmyPi0Fh5lhLb7ox3XXJDdHA+w4+fydCrcVqJZ6bEzQRJ8qXZyKLE5Nt+Aajw3Nyem5IfGDGwhUVM0wO9wOxFZWvSEwC9j4oADtm+z0QpPG6zE/8YYqOfL/aghxM48GI90pYTw6mSKNnDC8cd7r4N9LlW7D4qPqislh87qRfKIjWHG83tk9sDxdoFAqbNqbj4ZlIEcJQ+uowqUOfbdE5K0y4+Q5ZyZT9lPhCpilUdcsEXRq4Q== 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=jRe9+lZM2I1aLDz7V8EYgNMomijvzqACZ8+BxPNAUmg=; b=nWPD0SYZh/h5dw/HEjpjzzySrNKDHixBaKELYeJBS4dcAMLq9K+bP3G1VCMeTBJeaH7WuUQG6MN+UmhVOz8zGEKiRJZxsHG6ohWE6pHRoiZMxk6UXsFnttxNT+EqApfu/hxeT5dXRRgfQ0Jaw3WpgZCdx8oLm7ONs3AhRwx9WD+ImZ7OtMQQKQG/od7agJ+g67FYi56S4/FROL1khSOHU5HZO5n6BtVtTjWgMGxT9bhMlMtd4n1rNKAcOapTZrK3bxrnH7et/emNAYgZpbf/2afLj9PO+GLukcYIWZtdZDGZVpIb2zb6POIAWp0gBtuIRm3htFDyAsVfQPnW1KFhTw== 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 AM9PR04MB8827.eurprd04.prod.outlook.com (2603:10a6:20b:40a::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.16; Thu, 20 Feb 2025 11:40:23 +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.8445.017; Thu, 20 Feb 2025 11:40:23 +0000 From: Neeraj Sanjay Kale To: marcel@holtmann.org, luiz.dentz@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, amitkumar.karwar@nxp.com, neeraj.sanjaykale@nxp.com, sherry.sun@nxp.com, ziniu.wang_1@nxp.com, johan.korsnes@remarkable.no, kristian.krohn@remarkable.no, manjeet.gupta@nxp.com Subject: [PATCH v5 2/2] Bluetooth: btnxpuart: Add support for set BD address Date: Thu, 20 Feb 2025 17:11:57 +0530 Message-Id: <20250220114157.232997-2-neeraj.sanjaykale@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250220114157.232997-1-neeraj.sanjaykale@nxp.com> References: <20250220114157.232997-1-neeraj.sanjaykale@nxp.com> X-ClientProxiedBy: SI2PR01CA0027.apcprd01.prod.exchangelabs.com (2603:1096:4:192::7) 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_|AM9PR04MB8827:EE_ X-MS-Office365-Filtering-Correlation-Id: da905a00-9b84-4a2e-0741-08dd51a35c73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?nljMdiC70LIV7skkQH6WGq0jqfvPwtc?= =?utf-8?q?UD4cOHo3NDoWxW8pZW+JQ7cyXm6OGbnuOcW9m74+6/njL/iQ+Alalrsvqf+hr2yOu?= =?utf-8?q?77Oq2l9bZDA+GrLPP3Gq6HU4UOTbwUyTPbmBdokO+8ttnOT38SWCiT3I4yvGmQR5I?= =?utf-8?q?R8x8QD4JoudFWcwDM3Kl6YVU1oI+cU/qAmfrJN1gj/gbM5DlU56ukFVwAzoiDpyvP?= =?utf-8?q?2Y2eAXcr+SlFcDvzgs59KXrsvZ7+wRd3IBgq2Ebux7UrgvJFXzm6gnaRUIv8BuvPv?= =?utf-8?q?QTz6NSS271U7cqgciDkn8udVQ5omCKOZyuWNSjpgZk1YR+ig/jOnsL0zVaM8uTqE0?= =?utf-8?q?XRQcVpclruJ4oAOS6za6+LY6aRZqkx45HtkfEeRSncTbhfSkpjAoT1OdoWvdl+WxF?= =?utf-8?q?1Yim5oGMD1cLvIsaX/o/rZWllLba9xtuChHPVcqq2SD8otpNgkfSLFmYApaRT+cGJ?= =?utf-8?q?+23te3jnA6pC7iT21FGIUYI4T3eqFW3NuWwxIe4N6he3kl8KKK0lx29XuXKXBV/WE?= =?utf-8?q?pvGj7a7vXCP+C7dzTm+N0iabYU1apGSJTiueqF7/gPZ2rmhgpZ5CXNseMW5WyPupU?= =?utf-8?q?kiHEqT5nWGJ1D7frhyu31v4PwP30ZqwQxKfXn7qSRWn61c8tPYAt1dyoxA2fSoU1Z?= =?utf-8?q?fg2g6CPJsZcgiaDUWEvIkcCf4WWjCDHewnEaRQ/vrQ90+FzpwJyY8VZ94Oy3dQaGS?= =?utf-8?q?MHsUJ25Y293Ci/XlhIW7OHeXccLUx64ELI4tp1g52WC1JWr25OtePcuz1iNoJ2a1p?= =?utf-8?q?DxSpx+7N3LGf6D1eHAgVFF/EZmFSo0jmaMXP3pBPA3uC8BV+UYC0Q8d0vwhh7gTVT?= =?utf-8?q?KfkdC0ubzj0rYS3RuyVzU+e5Y67iH2Gt3cTzFsjDULwLaoaWqUtIKpKR2KUYyaP8d?= =?utf-8?q?9BB/DcBxtQFPM+mTfYGlfP0pj+j7ed6t2uH7XOzMyoxdlDHew6JOslBk2CABJ37Kg?= =?utf-8?q?cWb7WTb4Nas3l3o8rhCo51u1/8ASopMGWlef3VlPYc5ao4BvmLr0JCFOomkMNfuux?= =?utf-8?q?sXcNWfBA8ozFxe8X9PoD2o/uCVQfz0aQqXCLXS7NxZiJG5B7v9XM88mifNR6m2jog?= =?utf-8?q?x5r3V/QpPlcNzxynPwhm7aJDaZpYsvZ5RdstNYR98d0KTVvvSbaO0p+jHU4A08mZc?= =?utf-8?q?UIlZqJSHXzSynF4PbfWLC7a94AWjfwc/GoqgVte+Y+SUOC3dfEhXndU/za04kltq9?= =?utf-8?q?FH/Cz5+eDPzG8iuSLxJ7jQU+EENEJpV4E28SRHlWyyUiJbNR4bahn06DnYtIBNxXR?= =?utf-8?q?ecT4tJysuc5l9v+lKpESawrdzPf2JMevuAh+035j+Vl3CmK9ahm0zPOyTTgv9NKG+?= =?utf-8?q?u0AunQ8TekYf4B/37f9SXzpAw/CNjVcR/XbVy3zRYcluIiLjHjT7DhC25IodkkI8n?= =?utf-8?q?aFEdZnjSxLs?= 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)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?rBIZmIxVVL/p2slcIAHeNGmjVeB6?= =?utf-8?q?W2rvylHMVLwzg9ROq1gijGfhzkfZgMoo2P8yJaacEtuJImydgeGKYvm6Jzyc5QDO3?= =?utf-8?q?CJJDkX/QRewAKHuMtUmYDtlQVx2kcG7Jo923tQbLa2cwPjLQ8Dz+47NQXGTSVYqUF?= =?utf-8?q?ugVlpa9g+sUuqKox2ZsXXZJ0k7DCZjm6fVdOoiD6qtU4DhdegLR85AMoRcR05f9Kz?= =?utf-8?q?7b2SKnfk6No3vRI5flD059/5AMGD9LXOQ9HcsxteHu5bGPkbVOSUWnTYk447ro6as?= =?utf-8?q?y+vBeKTgfx4ca44PsuPtpktyVXc3tTPUAu7jOTkxEFLV/u3IO2Yn3paVOT6L7xhiS?= =?utf-8?q?Q9syPyaaBFeJ/qMFYlkQTaYjji/Ly+nLP4wUCbs0tLAOAo3PI6UhomGf1PVLdmQt0?= =?utf-8?q?gsZD7owhZ55g3YmbEPVhRnKgiVY/yOzmNeY3YvHtrq+frzMukA0AkJL595JFV3Rzq?= =?utf-8?q?ogDN//3P7xWpKy69YsBH4U0PF24MQfblOdgnqaovLMie7CC7Yo5fAZup/Co+UuOG4?= =?utf-8?q?pDRi7fYIF+YuTlKFRhrD5pKcGA/Ty4H2EhjJ+VKbplxl9hPLgh7/VNzdQ+yKMH1JY?= =?utf-8?q?sT3c0K6gg+BwLFmvZoxqQnyrTeBWWGOo57HwkHkWIPXvey1AFrQZIiPG+TbAwm31C?= =?utf-8?q?WjrgK1LytalUJ4mU5rRiaU8L4AolFhUZY8BA3RpIPSJCZ5FO9cAB/OfbgtqCPG0bP?= =?utf-8?q?ktVyPlKObis/EMZK7ycne7fcl7rEsUNitwFLmDCIdKWmXGw0kOo7L/ezj4NetIZxH?= =?utf-8?q?eAnMsgL4vQu8bC6lRIdr0kFR6Hu6GNlHhiUqxuFCLEMpHi7Tn/wR+o/Um9ln+/oQ9?= =?utf-8?q?JLbF6luYOpFqdz2XKB1BY6WPuFCprPu+zqWu8NHV3b146ibDNXzNR5aQr6dyIOVeV?= =?utf-8?q?p4JZM4R71wydT9gsfEH2IUYm/z+eujQnXN789yGyB6Xt3Fwwo/0UEHgiuROEyGQB1?= =?utf-8?q?XeHjcjCN6tl+WXCA5vtaDOJgqxvq331i0rOu8vIoBVlZlYI5PTLS0A4Qm46BqijXa?= =?utf-8?q?L7tZc5NIz28gClRB6OpCDh65QdPy8eFLl2sYwrqmt8Q0obtEcOhs/NcuEt2QcCSG1?= =?utf-8?q?dBYg5ORpCsh4YrYYDFMM/a2sjmd5Sly9CEhPT1ElPJSC60z7+N1VA75kR0BWx75tF?= =?utf-8?q?qiHo+srtVk6wG0Bslfe43D4/f0EewushJiZkLqr+rgr63x+fWbte64a7K0beCr14K?= =?utf-8?q?zdBv4t3Hg+vTzvTnETHXtg1Xd9FPuwj1A+vCB3GViduNQn2O0nBc9EaaH0vp/oUOc?= =?utf-8?q?wMKx3OF3eoUALdLFa/4BIIGqsnM2NOd8uOw+5ipP+RGmb/XaiDh+RCjka7mSZRWvs?= =?utf-8?q?WuZRA2lbRe/Dr231pWRkpj6iuxGVHeKB7G+SaapSWymnUN7fZ0BYuTztbTSKqoX/m?= =?utf-8?q?CTkP4qloJ+tAmyx/4s0b2TtjS8q6vRGT1lg+EwRLgT5ZJE6PHZjq4ItB05sLbJX9H?= =?utf-8?q?6P15811CguvRcOWA3VyO4nCu+Htw0hT+08LqvcxP1YBNHRD1tgFhRM8NFf1a5hzmr?= =?utf-8?q?6zhLypUiDTif9FqWLvSnknosM9+9YoiMYA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: da905a00-9b84-4a2e-0741-08dd51a35c73 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9692.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Feb 2025 11:40:23.0866 (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: fxLOvJXGdKhi4+HraetaszLOX+kKlKA+dEXpC4/BABhvOKgzzkWw/YcMrNsP/GvyO0iPtrOpvTfWP0BwOZ/7u4zUDvfnP5vrBWRvQ8GlqzQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8827 This adds support for setting BD address during hci registration. NXP FW does not allow vendor commands unless it receives a reset command after FW download and initialization done. As a workaround, the .set_bdaddr callback function will first send the HCI reset command, followed by the actual vendor command to set BD address. Signed-off-by: Loic Poulain Signed-off-by: Johan Korsnes Signed-off-by: Kristian Husevåg Krohn Tested-by: Neeraj Sanjay Kale Signed-off-by: Neeraj Sanjay Kale --- v4: hci0 interface shows RAW mode if 'local-bd-address' not defined and HCI_QUIRK_USE_BDADDR_PROPERTY is set. Add Quirk only if device tree property 'local-bd-address' found. (Neeraj) v5: Initialize local variable ba, update Copywrite year. (Kristian) --- drivers/bluetooth/btnxpuart.c | 39 ++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c index 1230045d78a5..dd9161bfd52c 100644 --- a/drivers/bluetooth/btnxpuart.c +++ b/drivers/bluetooth/btnxpuart.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* * NXP Bluetooth driver - * Copyright 2023 NXP + * Copyright 2023-2025 NXP */ #include @@ -1197,6 +1197,34 @@ static int nxp_set_ind_reset(struct hci_dev *hdev, void *data) return hci_recv_frame(hdev, skb); } +static int nxp_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) +{ + u8 data[8] = { 0xfe, 0x06, 0, 0, 0, 0, 0, 0 }; + struct sk_buff *skb; + int err; + + memcpy(data + 2, bdaddr, 6); + + skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); + if (IS_ERR(skb)) { + err = PTR_ERR(skb); + bt_dev_err(hdev, "Reset before setting local-bd-addr failed (%ld)", + PTR_ERR(skb)); + return err; + } + kfree_skb(skb); + + skb = __hci_cmd_sync(hdev, 0xfc22, sizeof(data), data, HCI_CMD_TIMEOUT); + if (IS_ERR(skb)) { + err = PTR_ERR(skb); + bt_dev_err(hdev, "Changing device address failed (%d)", err); + return err; + } + kfree_skb(skb); + + return 0; +} + /* NXP protocol */ static int nxp_setup(struct hci_dev *hdev) { @@ -1500,6 +1528,7 @@ static int nxp_serdev_probe(struct serdev_device *serdev) { struct hci_dev *hdev; struct btnxpuart_dev *nxpdev; + bdaddr_t ba = {0}; nxpdev = devm_kzalloc(&serdev->dev, sizeof(*nxpdev), GFP_KERNEL); if (!nxpdev) @@ -1547,8 +1576,16 @@ static int nxp_serdev_probe(struct serdev_device *serdev) hdev->send = nxp_enqueue; hdev->hw_error = nxp_hw_err; hdev->shutdown = nxp_shutdown; + hdev->set_bdaddr = nxp_set_bdaddr; + SET_HCIDEV_DEV(hdev, &serdev->dev); + device_property_read_u8_array(&nxpdev->serdev->dev, + "local-bd-address", + (u8 *)&ba, sizeof(ba)); + if (bacmp(&ba, BDADDR_ANY)) + set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); + if (hci_register_dev(hdev) < 0) { dev_err(&serdev->dev, "Can't register HCI device\n"); goto probe_fail;