Commit 417a9e81 authored by Rubin Gerritsen's avatar Rubin Gerritsen Committed by Fabio Baltieri
Browse files

Bluetooth: Controller: Add device tree dependency to selection

This commit makes the device tree configuration decide
which link layer is compiled in. We do this to avoid
hard-to-understand linker errors referencing device tree nodes.

The following configuration creates a difficult to parse
linker error:
* BT_LL_CHOICE contains multiple entries, BT_LL_SW_SPLIT
  is selected.
* Each BT_LL_CHOICE has its own unique device tree node with its
  own "compatible".
* Only one of the link layer device tree nodes has status "okay",
  but not the one corresponding to BT_LL_SW_SPLIT.

The linker error indicates that code using the HCI driver fails
to link with the controller. This because the HCI driver device
tree node references the link layer selected in devicetree which
is not compiled in.

By adding a dependendency to the device tree node, this can no longer
happen. Instead, if BT_LL_SW_SPLIT is now selected in a configuration
file, a Kconfig warning will be issued:

```
warning: The choice symbol BT_LL_SW_SPLIT
(defined at subsys/bluetooth/controller/Kconfig:129) was
selected (set =y), but BT_LL_SOFTDEVICE (defined at
/home/ruge/ncs/nrf/subsys/bluetooth/controller/Kconfig:11)
ended up as the choice selection.
```

This should be easier to understand than:

```
...(hci_core.c.obj):(.data.bt_dev+0x16c):
undefined reference to `__device_dts_ord_132'
```

After this commit we should consider getting rid of link layer
selection from Kconfig completely as the link layer is in practice
selected through device tree.

Unit tests have been updated to satisfy the dts dependency.

Signed-off-by: default avatarRubin Gerritsen <rubin.gerritsen@nordicsemi.no>
parent 26684766
Loading
Loading
Loading
Loading
+1 −0
Changes for subsys/bluetooth/controller/Kconfig: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ choice BT_LL_CHOICE

config BT_LL_SW_SPLIT
	bool "Software-based BLE Link Layer"
	depends on DT_HAS_ZEPHYR_BT_HCI_LL_SW_SPLIT_ENABLED
	help
	  Use Zephyr software BLE Link Layer ULL LLL split implementation.

+9 −0
Changes for tests/bluetooth/controller/common/Kconfig: 9 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

# The link layer requires a corresponding device tree node to be enabled
# The corresponding Kconfig entry is not generated for unit tests,
# so we add it here.
config DT_HAS_ZEPHYR_BT_HCI_LL_SW_SPLIT_ENABLED
	bool
	default y
+2 −0
Changes for tests/bluetooth/controller/ctrl_api/Kconfig: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -25,5 +25,7 @@ config ENTROPY_NRF_FORCE_ALT
config ENTROPY_NRF5_RNG
	default n

source "tests/bluetooth/controller/common/Kconfig"

# Include Zephyr's Kconfig
source "Kconfig"
+2 −0
Changes for tests/bluetooth/controller/ctrl_chmu/Kconfig: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -25,5 +25,7 @@ config ENTROPY_NRF_FORCE_ALT
config ENTROPY_NRF5_RNG
	default n

source "tests/bluetooth/controller/common/Kconfig"

# Include Zephyr's Kconfig
source "Kconfig"
+2 −0
Changes for tests/bluetooth/controller/ctrl_cis_create/Kconfig: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -25,5 +25,7 @@ config ENTROPY_NRF_FORCE_ALT
config ENTROPY_NRF5_RNG
	default n

source "tests/bluetooth/controller/common/Kconfig"

# Include Zephyr's Kconfig
source "Kconfig"
Loading