driver: bluetooth: hci: Support NXP BT CTLR FW blobs

Add Kconfig.nxp to support NXP Bluetooth Chipset.
Current only NXP IW612 Chipset (BT_NXP_NW612) has
been supported.

Add modules/hal_nxp/bt_controller/CMakeLists.txt to
determine whether any firmware is selected, and
check whether the firmware exists.

If the firmware exists, copy the firmware to the
temporary folder ${ZEPHYR_BINARY_DIR}/include/
generated/bt_nxp_ctlr_fw.h. OR, raise a fatal error.

In file hci_nxp_setup.c, includes the temporary file
bt_nxp_ctlr_fw.h.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
This commit is contained in:
Lyle Zhu 2024-06-05 16:11:02 +08:00 committed by Anas Nashif
commit d74698a36b
5 changed files with 44 additions and 18 deletions

View file

@ -250,29 +250,14 @@ config BT_SILABS_HCI_BUFFER_MEMORY
Bluetooth Library. Bluetooth Library.
config BT_H4_NXP_CTLR config BT_H4_NXP_CTLR
bool "NXP Bluetooth Controller [EXPERIMENTAL]" bool "NXP Bluetooth Controller"
select GPIO select GPIO
# select UART_USE_RUNTIME_CONFIGURE
select EXPERIMENTAL
depends on BT_H4 depends on BT_H4
select CRC select CRC
default y default y
depends on DT_HAS_NXP_BT_HCI_UART_ENABLED depends on DT_HAS_NXP_BT_HCI_UART_ENABLED
help help
Enables support for NXP Bluetooth Controller. Enables support for NXP Bluetooth Controller.
Murata 2EL M.2 Moudle base on NXP IW612 Chipset which supports
Wi-Fi® 802.11a/b/g/n/ac/ax + Bluetooth® 5.3 BR/EDR/LE + IEEE802.1.5.4
up to 601 Mbps data rate on Wi-Fi® and 2Mbps data rate on Bluetooth®.
4-wire UART@3M baud is supported. PCM for audio is also supported.
Details of the module could be fond on
https://www.embeddedartists.com/products/2el-m-2-module/
The configuration depends on the firmware (named uart_nw61x_se.h)
of Murata 2EL M.2 Moudle. It could be downloaded here
https://github.com/NXP/wifi_nxp/blob/MCUX_2.15.000/wifi_bt_firmware/nw61x/uart_nw61x_se.h
And it needs to be placed into the folder <zephyrproject>/zephyr/
drivers/bluetooth/hci.
More inforamtion about NXP Bluetooth profuct could be found on More inforamtion about NXP Bluetooth profuct could be found on
https://www.nxp.com/products/wireless-connectivity/wi-fi-plus-bluetooth-plus-802-15-4:WIFI-BLUETOOTH https://www.nxp.com/products/wireless-connectivity/wi-fi-plus-bluetooth-plus-802-15-4:WIFI-BLUETOOTH

View file

@ -1,5 +1,5 @@
# #
# Copyright 2023 NXP # Copyright 2023-2024 NXP
# #
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# #
@ -22,3 +22,19 @@ config HCI_NXP_SET_CAL_DATA_ANNEX100
help help
If enabled, the Host will send calibration data annex 100 to the BLE Controller during HCI If enabled, the Host will send calibration data annex 100 to the BLE Controller during HCI
init. init.
if BT_H4_NXP_CTLR
config BT_NXP_NW612
bool "NXP IW612 Chipset"
help
NXP IW612 Chipset supports Wi-Fi? 802.11a/b/g/n/ac/ax + Bluetooth? 5.3
BR/EDR/LE + IEEE802.1.5.4 up to 601 Mbps data rate on Wi-Fi? and 2Mbps
data rate on Bluetooth?. 4-wire UART@3M baud is supported. PCM for
audio is also supported.
Details of the module could be fond on https://www.nxp.com/products/
wireless-connectivity/wi-fi-plus-bluetooth-plus-802-15-4/2-4-5-ghz-
dual-band-1x1-wi-fi-6-802-11ax-plus-bluetooth-5-4-plus-802-15-4-tri-
radio-solution:IW612.
endif # BT_H4_NXP_CTLR

View file

@ -24,7 +24,7 @@ LOG_MODULE_REGISTER(bt_nxp_ctlr);
#include "common/bt_str.h" #include "common/bt_str.h"
#include "uart_nw61x_se.h" #include "bt_nxp_ctlr_fw.h"
#define DT_DRV_COMPAT nxp_bt_hci_uart #define DT_DRV_COMPAT nxp_bt_hci_uart

View file

@ -23,4 +23,6 @@ if(CONFIG_HAS_MCUX OR CONFIG_HAS_IMX_HAL OR CONFIG_HAS_NXP_S32_HAL)
if(CONFIG_NOCACHE_MEMORY) if(CONFIG_NOCACHE_MEMORY)
zephyr_compile_definitions_ifdef(CONFIG_USB_DEVICE_DRIVER DATA_SECTION_IS_CACHEABLE=1) zephyr_compile_definitions_ifdef(CONFIG_USB_DEVICE_DRIVER DATA_SECTION_IS_CACHEABLE=1)
endif() endif()
add_subdirectory_ifdef(CONFIG_BT_H4_NXP_CTLR bt_controller)
endif() endif()

View file

@ -0,0 +1,23 @@
#
# Copyright 2024 NXP
#
# SPDX-License-Identifier: Apache-2.0
#
set(hal_nxp_dir ${ZEPHYR_HAL_NXP_MODULE_DIR})
set(hal_nxp_blobs_dir ${hal_nxp_dir}/zephyr/blobs)
set(blob_gen_file ${ZEPHYR_BINARY_DIR}/include/generated/bt_nxp_ctlr_fw.h)
if(CONFIG_BT_NXP_NW612)
set(blob_file ${hal_nxp_blobs_dir}/iw612/uart_nw61x_se.h)
endif()
if (NOT DEFINED blob_file)
message(FATAL_ERROR "Unsupported controller. Please select a BT conntroller, refer to ./driver/bluetooth/hci/Kconfig.nxp")
endif()
if(EXISTS ${blob_file})
configure_file(${blob_file} ${blob_gen_file} COPYONLY)
else()
message(FATAL_ERROR "Can't find controller firmware, please fetch blobs by using command: \'west blobs fetch hal_nxp\'")
endif()