Broadcom Bluetooth

Broadcom Article description::Bluetooth 4.x devices mostly based on BCM20702, BCM4354, and BCM4356 chipsets. They are also used in various devices including USB-dongles, hybrid WIFI+Bluetooth embedded chipsets, etc.

Hardware
Mostly complete list of supported devices can be found upstream.

Security considerations
Recently several vulnerabilities have been discovered in the Bluetooth stack such as CVE-2018-5383, CVE-2019-9506 (KNOB), CVE-2020-10135 (BIAS) and others. Since Broadcom has stopped active support for its consumer devices, systems utilizing this software may be subject to security risks. It is wise to access the risk before moving forward, since the repository maintainer cannot provide security fixes.

Firmware
Mostly Broadcom Bluetooth stack requires external firmware, supplied with Windows drivers. This can be verified by using following commands:

Luckily, the package can be used to install the most recent firmware files for Broadcom Bluetooth:

After installation, reinsert Bluetooth device or reboot system for applying firmware. After the reboot the output should look something like the following:

Configuration
After enabling the kernel options and installing firmware, proceed to the Bluetooth article.

Kernel requires BCM.hcd or BCM.hcd
Some VID/PIDs not yet defined in kernel driver so btbcm cannot properly identify the device:

In this case VID/PID will be manually retrieved via the or  commands:

Here the VID/PID -. Next, check Devices list and choose firmware as appropriate. After that just copy firmware file into name that requires kernel:

After that reinsert device or reboot system.

After installing firmware device still won't work
Some Bluetooth controller (for example, BCM4354 and BCM4356) are integrated to WiFi chipset (this can be BCM43XX 802.11ac Wireless Network Adapter or just simple generic Broadcom PCIE Wireless). These devices requires two kinds of firmware - first for WiFi, and second for Bluetooth. Without WiFi firmware Bluetooth will not initialize and will not work properly. Firmware for WiFi already included to kernel, but some additional work may be necessary to place correct NVRAM.

Here example how it can looks (note about loading - this is the customized NVRAM):