Drivers: Bluetooth: Infineon: Updating CYW920829 Bluetooth for B1
- Updates Bluetooth driver to include bluetooth firmware for B1 device
revision.
- Changes build behavior to allow building without blobs being fetched
to allow CI to verify build.
- Adds cmake warning if blobs are not present.
Signed-off-by: John Batch <john.batch@infineon.com>
diff --git a/drivers/bluetooth/hci/Kconfig.infineon b/drivers/bluetooth/hci/Kconfig.infineon
index c9ba3b9..9e7e8c2 100644
--- a/drivers/bluetooth/hci/Kconfig.infineon
+++ b/drivers/bluetooth/hci/Kconfig.infineon
@@ -1,5 +1,6 @@
-# Copyright (c) 2023 Cypress Semiconductor Corporation (an Infineon company) or
-# an affiliate of Cypress Semiconductor Corporation
+# Copyright (c) 2025 Infineon Technologies AG,
+# or an affiliate of Infineon Technologies AG.
+#
# SPDX-License-Identifier: Apache-2.0
if BT_AIROC
@@ -136,6 +137,10 @@
if CYW20829
+# We can't have commas in macro arguments
+DT_COMPAT_INFINEON_CYW20829_B0 := infineon,cyw20829-b0
+DT_COMPAT_INFINEON_CYW20829_B1 := infineon,cyw20829-b1
+
config CYW20829_BT_FW_TX10DBM_POWER
bool "CYW20829_BT_FW_TX10DBM_POWER"
default y
@@ -144,49 +149,81 @@
choice CYW20829_BT_FW
prompt "Select variant of default CYW20829 BT FW"
- default CYW20829_BT_FW_ISOC_TX10 if BT_ISO && CYW20829_BT_FW_TX10DBM_POWER
- default CYW20829_BT_FW_ISOC_TX0 if BT_ISO && !CYW20829_BT_FW_TX10DBM_POWER
- default CYW20829_BT_FW_PAWR_TX10 if (BT_PER_ADV_RSP || BT_PER_ADV_SYNC_RSP) && CYW20829_BT_FW_TX10DBM_POWER
- default CYW20829_BT_FW_PAWR_TX0 if (BT_PER_ADV_RSP || BT_PER_ADV_SYNC_RSP) && !CYW20829_BT_FW_TX10DBM_POWER
- default CYW20829_BT_FW_TX10 if CYW20829_BT_FW_TX10DBM_POWER
- default CYW20829_BT_FW_TX0
+ default CYW20829B0_BT_FW_ISOC_TX10 if BT_ISO && \
+ CYW20829_BT_FW_TX10DBM_POWER && \
+ $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
+ default CYW20829B0_BT_FW_ISOC_TX0 if BT_ISO && \
+ !CYW20829_BT_FW_TX10DBM_POWER && \
+ $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
+ default CYW20829B0_BT_FW_PAWR_TX10 if (BT_PER_ADV_RSP || BT_PER_ADV_SYNC_RSP) && \
+ CYW20829_BT_FW_TX10DBM_POWER && \
+ $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
+ default CYW20829B0_BT_FW_PAWR_TX0 if (BT_PER_ADV_RSP || BT_PER_ADV_SYNC_RSP) && \
+ !CYW20829_BT_FW_TX10DBM_POWER && \
+ $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
+ default CYW20829B0_BT_FW_TX10 if CYW20829_BT_FW_TX10DBM_POWER && \
+ $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
+ default CYW20829B0_BT_FW_TX0 if $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
+ default CYW20829B1_BT_FW_TX10 if CYW20829_BT_FW_TX10DBM_POWER && \
+ $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B1))
+ default CYW20829B1_BT_FW_TX0 if $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B1))
-config CYW20829_BT_FW_TX0
- bool "CYW20829_BT_FW_TX0"
+config CYW20829B0_BT_FW_TX0
+ bool "CYW20829B0_BT_FW_TX0"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
help
- Enable CYW20829 FW patch for 0dBm TX Power.
+ Enable CYW20829B0 FW patch for 0dBm TX Power.
This configuration should be used with non-PAWR and non-ISOC applications.
-config CYW20829_BT_FW_TX10
- bool "CYW20829_BT_FW_TX10"
+config CYW20829B0_BT_FW_TX10
+ bool "CYW20829B0_BT_FW_TX10"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
help
- Enable CYW20829 FW patch for 10dBm TX Power.
+ Enable CYW20829B0 FW patch for 10dBm TX Power.
This configuration should be used with non-PAwR and non-ISOC applications.
-config CYW20829_BT_FW_PAWR_TX0
- bool "CYW20829_BT_FW_PAWR_TX0"
+config CYW20829B0_BT_FW_PAWR_TX0
+ bool "CYW20829B0_BT_FW_PAWR_TX0"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
help
- Enable CYW20829 FW patch with PAwR support for 0dBm TX Power.
+ Enable CYW20829B0 FW patch with PAwR support for 0dBm TX Power.
This configuration should be used with PAwR applications.
-config CYW20829_BT_FW_PAWR_TX10
- bool "CYW20829_BT_FW_PAWR_TX10"
+config CYW20829B0_BT_FW_PAWR_TX10
+ bool "CYW20829B0_BT_FW_PAWR_TX10"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
help
- Enable CYW20829 FW patch for 10dBm TX Power.
+ Enable CYW20829B0 FW patch for 10dBm TX Power.
This configuration should be used with PAwR applications.
-config CYW20829_BT_FW_ISOC_TX0
- bool "CYW20829_BT_FW_ISOC_TX0"
+config CYW20829B0_BT_FW_ISOC_TX0
+ bool "CYW20829B0_BT_FW_ISOC_TX0"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
help
- Enable CYW20829 FW patch for 0dBm TX Power.
+ Enable CYW20829B0 FW patch for 0dBm TX Power.
This configuration should be used with ISOC applications.
-config CYW20829_BT_FW_ISOC_TX10
- bool "CYW20829_BT_FW_ISOC_TX10"
+config CYW20829B0_BT_FW_ISOC_TX10
+ bool "CYW20829B0_BT_FW_ISOC_TX10"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B0))
help
- Enable CYW20829 FW patch for 10dBm TX Power.
+ Enable CYW20829B0 FW patch for 10dBm TX Power.
This configuration should be used with ISOC applications.
+config CYW20829B1_BT_FW_TX0
+ bool "CYW20829B1_BT_FW_TX0"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B1))
+ help
+ Enable CYW20829B1 FW patch for 0dBm TX Power.
+ This configuration should be used with non-PAWR and non-ISOC applications.
+
+config CYW20829B1_BT_FW_TX10
+ bool "CYW20829B1_BT_FW_TX10"
+ depends on $(dt_compat_enabled,$(DT_COMPAT_INFINEON_CYW20829_B1))
+ help
+ Enable CYW20829B1 FW patch for 10dBm TX Power.
+ This configuration should be used with non-PAwR and non-ISOC applications.
+
endchoice
endif # CYW20829
diff --git a/drivers/bluetooth/hci/hci_ifx_cyw208xx.c b/drivers/bluetooth/hci/hci_ifx_cyw208xx.c
index f41cfe1..ac9c3fc 100644
--- a/drivers/bluetooth/hci/hci_ifx_cyw208xx.c
+++ b/drivers/bluetooth/hci/hci_ifx_cyw208xx.c
@@ -89,7 +89,7 @@
BT_HCI_VND_OP_SET_LOCAL_DEV_ADDR = 0xFC01,
};
-/* Externs for CY43xxx controller FW */
+/* Externs for CY208xx controller FW */
extern const uint8_t brcm_patchram_buf[];
extern const int brcm_patch_ram_length;
diff --git a/modules/hal_infineon/btstack-integration/CMakeLists.txt b/modules/hal_infineon/btstack-integration/CMakeLists.txt
index 8033fe3..5b42178 100644
--- a/modules/hal_infineon/btstack-integration/CMakeLists.txt
+++ b/modules/hal_infineon/btstack-integration/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Copyright (c) 2022 Cypress Semiconductor Corporation.
+# Copyright (c) 2025 Infineon Technologies AG,
+# or an affiliate of Infineon Technologies AG.
#
# SPDX-License-Identifier: Apache-2.0
@@ -37,63 +38,73 @@
# HCD files for CYW43xx devices
# CYW43012 modules
if(CONFIG_CYW43012_MURATA_1LV)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_43012/COMPONENT_MURATA-1LV/bt_firmware.hcd)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_43012/COMPONENT_MURATA-1LV/bt_firmware.hcd)
endif()
# CYW4343W modules
if(CONFIG_CYW4343W_MURATA_1DX)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_4343W/COMPONENT_MURATA-1DX/bt_firmware.hcd)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_4343W/COMPONENT_MURATA-1DX/bt_firmware.hcd)
endif()
# CYW43439 modules
if(CONFIG_CYW43439_MURATA_1YN)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_43439/COMPONENT_MURATA-1YN/bt_firmware.hcd)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_43439/COMPONENT_MURATA-1YN/bt_firmware.hcd)
endif()
# CYW4373 modules
if(CONFIG_CYW4373_STERLING_LWB5PLUS)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_4373/COMPONENT_STERLING-LWB5plus/bt_firmware.hcd)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_4373/COMPONENT_STERLING-LWB5plus/bt_firmware.hcd)
endif()
# HCD files for CYW208xx
-# CYW20829 device (FW patch for 0dBm TX Power)
-if(CONFIG_CYW20829_BT_FW_TX0)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-TX0/bt_firmware.hcd)
+# CYW20829B0 device (FW patch for 0dBm TX Power)
+if(CONFIG_CYW20829B0_BT_FW_TX0)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-TX0/bt_firmware.hcd)
endif()
-# CYW20829 device (FW patch for 10dBm TX Power)
-if(CONFIG_CYW20829_BT_FW_TX10)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-TX10/bt_firmware.hcd)
+# CYW20829B0 device (FW patch for 10dBm TX Power)
+if(CONFIG_CYW20829B0_BT_FW_TX10)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-TX10/bt_firmware.hcd)
endif()
-# CYW20829 device (FW patch with PAwR support for 0dBm TX Power)
-if(CONFIG_CYW20829_BT_FW_PAWR_TX0)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-PAWR-TX0/bt_firmware.hcd)
+# CYW20829B0 device (FW patch with PAwR support for 0dBm TX Power)
+if(CONFIG_CYW20829B0_BT_FW_PAWR_TX0)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-PAWR-TX0/bt_firmware.hcd)
endif()
-# CYW20829 device (FW patch with PAwR support for 10dBm TX Power)
-if(CONFIG_CYW20829_BT_FW_PAWR_TX10)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-PAWR-TX10/bt_firmware.hcd)
+# CYW20829B0 device (FW patch with PAwR support for 10dBm TX Power)
+if(CONFIG_CYW20829B0_BT_FW_PAWR_TX10)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-PAWR-TX10/bt_firmware.hcd)
endif()
-# CYW20829 device (FW patch with ISOC support for 0dBm TX Power)
-if(CONFIG_CYW20829_BT_FW_ISOC_TX0)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-ISOC-TX0/bt_firmware.hcd)
+# CYW20829B0 device (FW patch with ISOC support for 0dBm TX Power)
+if(CONFIG_CYW20829B0_BT_FW_ISOC_TX0)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-ISOC-TX0/bt_firmware.hcd)
endif()
-# CYW20829 device (FW patch with ISOC support for 10dBm TX Power)
-if(CONFIG_CYW20829_BT_FW_ISOC_TX10)
- set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-ISOC-TX10/bt_firmware.hcd)
+# CYW20829B0 device (FW patch with ISOC support for 10dBm TX Power)
+if(CONFIG_CYW20829B0_BT_FW_ISOC_TX10)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B0/COMPONENT_BTFW-ISOC-TX10/bt_firmware.hcd)
+endif()
+
+# CYW20829B1 device (FW patch for 0dBm TX Power)
+if(CONFIG_CYW20829B1_BT_FW_TX0)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B1/COMPONENT_BTFW-TX0/bt_firmware.hcd)
+endif()
+
+# CYW20829B1 device (FW patch for 10dBm TX Power)
+if(CONFIG_CYW20829B1_BT_FW_TX10)
+ set(blob_hcd_file ${hal_blobs_dir}/COMPONENT_CYW20829B1/COMPONENT_BTFW-TX10/bt_firmware.hcd)
endif()
# use user provided FIRMWARE HCD file (path must be defined in CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB)
if(CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB)
# Allowed to pass absolute path to HCD blob file, or relative path from Application folder.
if(IS_ABSOLUTE ${CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB})
- set(blob_hcd_file ${CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB})
+ set(blob_hcd_file ${CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB})
else()
- set(blob_hcd_file ${APPLICATION_SOURCE_DIR}/${CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB})
+ set(blob_hcd_file ${APPLICATION_SOURCE_DIR}/${CONFIG_AIROC_CUSTOM_FIRMWARE_HCD_BLOB})
endif()
endif()
@@ -102,5 +113,12 @@
message(INFO " generate include of blob Bluetooth file: ${blob_hcd_file}")
generate_inc_file_for_target(app ${blob_hcd_file} ${blob_gen_inc_file})
- zephyr_library_sources(${CMAKE_CURRENT_SOURCE_DIR}/w_bt_firmware_controller.c)
+else()
+ message(WARNING "
+ Bluetooth firmware file not found: ${blob_hcd_file}.
+ Please download the Binary Blobs: west blobs fetch hal_infineon")
endif()
+
+# Always compile the firmware controller file.
+# If no blob file is available, an empty array will be used.
+zephyr_library_sources(${CMAKE_CURRENT_SOURCE_DIR}/w_bt_firmware_controller.c)
diff --git a/modules/hal_infineon/btstack-integration/w_bt_firmware_controller.c b/modules/hal_infineon/btstack-integration/w_bt_firmware_controller.c
index 1fd05cb..d7c9b48 100644
--- a/modules/hal_infineon/btstack-integration/w_bt_firmware_controller.c
+++ b/modules/hal_infineon/btstack-integration/w_bt_firmware_controller.c
@@ -7,11 +7,16 @@
#include <stdint.h>
const uint8_t brcm_patchram_format = 0x01;
+
/* Configuration Data Records (Write_RAM) */
#ifndef FW_DATBLOCK_SEPARATE_FROM_APPLICATION
+
const uint8_t brcm_patchram_buf[] = {
- #include <bt_firmware.hcd.inc>
+#if __has_include(<bt_firmware.hcd.inc>)
+#include <bt_firmware.hcd.inc>
+#endif /* __has_include(<bt_firmware.hcd.inc>) */
};
const int brcm_patch_ram_length = sizeof(brcm_patchram_buf);
+
#endif /* FW_DATBLOCK_SEPARATE_FROM_APPLICATION */