From f0c12dbb82085f701b918ed515fde94d6fe6adc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Rist=20Sk=C3=B8ien?= Date: Tue, 30 Aug 2022 15:30:49 +0200 Subject: [PATCH] boards: Added nRF5340 Audio DK (PCA10121) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copied from nRF Connect SDK and edited Co-authored-by: Grzegorz Ferenc Signed-off-by: Kristoffer Rist Skøien --- .../nrf5340_audio_dk_nrf5340/CMakeLists.txt | 15 ++ boards/arm/nrf5340_audio_dk_nrf5340/Kconfig | 58 +++++ .../nrf5340_audio_dk_nrf5340/Kconfig.board | 18 ++ .../Kconfig.defconfig | 96 ++++++++ .../arm/nrf5340_audio_dk_nrf5340/board.cmake | 16 ++ .../doc/img/nrf5340_audio_dk.jpg | Bin 0 -> 42829 bytes .../nrf5340_audio_dk_nrf5340/doc/index.rst | 110 +++++++++ .../nrf5340_audio_dk_cpunet_reset.c | 83 +++++++ .../nrf5340_audio_dk_nrf5340_cpuapp.dts | 22 ++ .../nrf5340_audio_dk_nrf5340_cpuapp.yaml | 19 ++ ...udio_dk_nrf5340_cpuapp_common-pinctrl.dtsi | 91 +++++++ ...rf5340_audio_dk_nrf5340_cpuapp_common.dtsi | 224 ++++++++++++++++++ .../nrf5340_audio_dk_nrf5340_cpuapp_defconfig | 24 ++ .../nrf5340_audio_dk_nrf5340_cpuapp_ns.dts | 20 ++ .../nrf5340_audio_dk_nrf5340_cpuapp_ns.yaml | 18 ++ ...f5340_audio_dk_nrf5340_cpuapp_ns_defconfig | 24 ++ ...udio_dk_nrf5340_cpuapp_partition_conf.dtsi | 60 +++++ ...f5340_audio_dk_nrf5340_cpunet-pinctrl.dtsi | 29 +++ .../nrf5340_audio_dk_nrf5340_cpunet.dts | 89 +++++++ .../nrf5340_audio_dk_nrf5340_cpunet.yaml | 12 + .../nrf5340_audio_dk_nrf5340_cpunet_defconfig | 24 ++ .../nrf5340_audio_dk_nrf5340_shared.dtsi | 84 +++++++ ..._dk_nrf5340_shared_sram_planning_conf.dtsi | 30 +++ .../pre_dt_board.cmake | 8 + samples/bluetooth/hci_rpmsg/sample.yaml | 3 + .../iso_broadcast_benchmark/sample.yaml | 2 +- .../iso_connected_benchmark/sample.yaml | 2 +- 27 files changed, 1179 insertions(+), 2 deletions(-) create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/CMakeLists.txt create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/Kconfig create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.board create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.defconfig create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/board.cmake create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/doc/img/nrf5340_audio_dk.jpg create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/doc/index.rst create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_cpunet_reset.c create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.dts create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.yaml create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common-pinctrl.dtsi create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_defconfig create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.dts create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.yaml create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns_defconfig create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_partition_conf.dtsi create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet-pinctrl.dtsi create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.dts create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.yaml create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet_defconfig create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared.dtsi create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi create mode 100644 boards/arm/nrf5340_audio_dk_nrf5340/pre_dt_board.cmake diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/CMakeLists.txt b/boards/arm/nrf5340_audio_dk_nrf5340/CMakeLists.txt new file mode 100644 index 00000000000..c950fd91724 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (c) 2021 Nordic Semiconductor ASA. +# SPDX-License-Identifier: Apache-2.0 + +if ((CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP OR CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS) + AND CONFIG_BOARD_ENABLE_CPUNET) + zephyr_library() + zephyr_library_sources(nrf5340_audio_dk_cpunet_reset.c) + + if (CONFIG_BUILD_WITH_TFM) + zephyr_library_include_directories( + $/install/interface/include + ) + endif() + +endif() diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig b/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig new file mode 100644 index 00000000000..fc237786896 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig @@ -0,0 +1,58 @@ +# nRF5340 Audio DK board configuration + +# Copyright (c) 2019 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +config BOARD_ENABLE_DCDC_APP + bool "Application MCU DCDC converter" + select SOC_DCDC_NRF53X_APP + default y + +config BOARD_ENABLE_DCDC_NET + bool "Network MCU DCDC converter" + select SOC_DCDC_NRF53X_NET + default y + +config BOARD_ENABLE_DCDC_HV + bool "High Voltage DCDC converter" + select SOC_DCDC_NRF53X_HV + default y + +config BOARD_ENABLE_CPUNET + bool "nRF53 Network MCU" + select SOC_NRF_GPIO_FORWARDER_FOR_NRF5340 if \ + $(dt_compat_enabled,$(DT_COMPAT_NORDIC_NRF_GPIO_FORWARDER)) + help + This option enables releasing the Network 'force off' signal, which + as a consequence will power up the Network MCU during system boot. + Additionally, the option allocates GPIO pins that will be used by UARTE + of the Network MCU. + Note: GPIO pin allocation can only be configured by the secure Application + MCU firmware, so when this option is used with the non-secure version of + the board, the application needs to take into consideration, that the + secure firmware image must already have configured GPIO allocation for the + Network MCU. + default y if (BT || NRF_802154_SER_HOST) + +config DOMAIN_CPUNET_BOARD + string + default "nrf5340_audio_dk_nrf5340_cpunet" + depends on BOARD_ENABLE_CPUNET + help + The board which will be used for CPUNET domain when creating a multi + image application where one or more images should be located on + another board. For example hci_rpmsg on the nRF5340_cpunet for + Bluetooth applications. + +endif # BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +config DOMAIN_CPUAPP_BOARD + string + default "nrf5340_audio_dk_nrf5340_cpuapp" + depends on BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET + help + The board which will be used for CPUAPP domain when creating a multi + image application where one or more images should be located on + another board. diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.board b/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.board new file mode 100644 index 00000000000..5b407f03564 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.board @@ -0,0 +1,18 @@ +# nRF5340 Audio DK board configuration + +# Copyright (c) 2019 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +if SOC_NRF5340_CPUAPP_QKAA + +config BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP + bool "nrf5340 Audio DK nRF5340 Application MCU" + +config BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + bool "nrf5340 Audio DK nRF5340 Application MCU non-secure" + +endif # SOC_NRF5340_CPUAPP_QKAA + +config BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET + bool "nrf5340 Audio DK NRF5340 Network MCU" + depends on SOC_NRF5340_CPUNET_QKAA diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.defconfig b/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.defconfig new file mode 100644 index 00000000000..c433ed87468 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/Kconfig.defconfig @@ -0,0 +1,96 @@ +# nRF5340 Audio DK board configuration + +# Copyright (c) 2019 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +config BOARD + default "nrf5340_audio_dk_nrf5340_cpuapp" if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +# Code Partition: +# +# For the secure version of the board the firmware is linked at the beginning +# of the flash, or into the code-partition defined in DT if it is intended to +# be loaded by MCUboot. If the secure firmware is to be combined with a non- +# secure image (TRUSTED_EXECUTION_SECURE=y), the secure FW image shall always +# be restricted to the size of its code partition. +# +# For the non-secure version of the board, the firmware +# must be linked into the code-partition (non-secure) defined in DT, regardless. +# Apply this configuration below by setting the Kconfig symbols used by +# the linker according to the information extracted from DT partitions. + +# SRAM Partition: +# +# If the secure firmware is to be combined with a non-secure image +# (TRUSTED_EXECUTION_SECURE=y), the secure FW image SRAM shall always +# be restricted to the secure image SRAM partition (sram-secure-partition). +# Otherwise (if TRUSTED_EXECUTION_SECURE is not set) the whole zephyr,sram +# may be used by the image. +# +# For the non-secure version of the board, the firmware image SRAM is +# always restricted to the allocated non-secure SRAM partition. +# +# Workaround for not being able to have commas in macro arguments +DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition +DT_CHOSEN_Z_SRAM_PARTITION := zephyr,sram-secure-partition + +if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP && TRUSTED_EXECUTION_SECURE + +config FLASH_LOAD_SIZE + default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +config SRAM_SIZE + default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_SRAM_PARTITION),0,K) + +endif # BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP && TRUSTED_EXECUTION_SECURE + +if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +config FLASH_LOAD_OFFSET + default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +config FLASH_LOAD_SIZE + default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +endif # BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +endif # BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +config BOARD + default "nrf5340_audio_dk_nrf5340_cpunet" if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET + +config IPM_NRFX + default IPM + +config MBOX_NRFX_IPC + default MBOX + +if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +choice BT_HCI_BUS_TYPE + default BT_RPMSG if BT +endchoice + +config HEAP_MEM_POOL_SIZE + default 4096 if BT_RPMSG + +endif # BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP || BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS + +if BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET + +config BT_CTLR + default y if BT + +endif # BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET + +config UART_NRF_DK_SERIAL_WORKAROUND + default y if ZTEST + +# When the nRF DK serial workaround is enabled, increase the stack size in +# tests built with no optimizations, as the standard size may be insufficient +# then. Use 512 to align with the FPU_SHARING case, where the default value +# is also modified. +config TEST_EXTRA_STACK_SIZE + default 512 if UART_NRF_DK_SERIAL_WORKAROUND && NO_OPTIMIZATIONS diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/board.cmake b/boards/arm/nrf5340_audio_dk_nrf5340/board.cmake new file mode 100644 index 00000000000..4c67981c71a --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/board.cmake @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS) + set(TFM_PUBLIC_KEY_FORMAT "full") +endif() + +if(CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP OR CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS) + board_runner_args(jlink "--device=nrf5340_xxaa_app" "--speed=4000") +endif() + +if(CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET) + board_runner_args(jlink "--device=nrf5340_xxaa_net" "--speed=4000") +endif() + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/doc/img/nrf5340_audio_dk.jpg b/boards/arm/nrf5340_audio_dk_nrf5340/doc/img/nrf5340_audio_dk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40944f961ef413f0db31391b2a6002015b7c02e0 GIT binary patch literal 42829 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, run + this command for more details on the related ``--recover`` option: + + .. code-block:: console + + west flash -H -r nrfjprog --skip-rebuild + +.. note:: + + Flashing and debugging applications on the nRF5340 Audio DK requires + upgrading the nRF Command Line Tools to version 10.12.0. Further + information on how to install the nRF Command Line Tools can be + found in :ref:`nordic_segger_flashing`. + +Debugging +========= + +Refer to the :ref:`nordic_segger` page to learn about debugging Nordic +boards with a Segger IC. + +References +********** + +.. target-notes:: + +.. _nRF5340 Audio DK website: + https://www.nordicsemi.com/Products/Development-hardware/nrf5340-audio-dk +.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_cpunet_reset.c b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_cpunet_reset.c new file mode 100644 index 00000000000..2d2dce5d162 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_cpunet_reset.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#include + +#include + +LOG_MODULE_REGISTER(nrf5340_audio_dk_nrf5340_cpuapp, CONFIG_LOG_DEFAULT_LEVEL); + +#if defined(CONFIG_BT_CTLR_DEBUG_PINS_CPUAPP) +#include <../subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/debug.h> +#else +#define DEBUG_SETUP() +#endif + +static int core_config(void) +{ + nrf_gpiote_latency_t latency; + + latency = nrfx_gpiote_latency_get(); + + if (latency != NRF_GPIOTE_LATENCY_LOWPOWER) { + LOG_DBG("Setting gpiote latency to low power"); + nrfx_gpiote_latency_set(NRF_GPIOTE_LATENCY_LOWPOWER); + } + + return 0; +} + +static void remoteproc_mgr_config(void) +{ +#if !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) || defined(CONFIG_BUILD_WITH_TFM) + /* Route Bluetooth Controller Debug Pins */ + DEBUG_SETUP(); +#endif /* !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) || defined(CONFIG_BUILD_WITH_TFM) */ + +#if !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) + /* Retain nRF5340 Network MCU in Secure domain (bus + * accesses by Network MCU will have Secure attribute set). + */ + NRF_SPU->EXTDOMAIN[0].PERM = 1 << 4; +#endif /* !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) */ +} + +static int remoteproc_mgr_boot(const struct device *dev) +{ + int ret; + + ARG_UNUSED(dev); + + ret = core_config(); + if (ret) { + return ret; + } + + /* Secure domain may configure permissions for the Network MCU. */ + remoteproc_mgr_config(); + +#if !defined(CONFIG_TRUSTED_EXECUTION_SECURE) + /* + * Building Zephyr with CONFIG_TRUSTED_EXECUTION_SECURE=y implies + * building also a Non-Secure image. The Non-Secure image will, in + * this case do the remainder of actions to properly configure and + * boot the Network MCU. + */ + + /* Release the Network MCU, 'Release force off signal' */ + NRF_RESET->NETWORK.FORCEOFF = RESET_NETWORK_FORCEOFF_FORCEOFF_Release; + + LOG_DBG("Network MCU released."); +#endif /* !CONFIG_TRUSTED_EXECUTION_SECURE */ + + return 0; +} + +SYS_INIT(remoteproc_mgr_boot, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE); diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.dts b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.dts new file mode 100644 index 00000000000..8fe46bdd7a3 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.dts @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi" + +/ { + model = "Nordic nRF5340 Audio DK NRF5340 Application"; + compatible = "nordic,nrf5340-audio-dk-nrf5340-cpuapp"; + + chosen { + zephyr,sram = &sram0_image; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,sram-secure-partition = &sram0_s; + zephyr,sram-non-secure-partition = &sram0_ns; + }; +}; diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.yaml b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.yaml new file mode 100644 index 00000000000..5d752b69566 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp.yaml @@ -0,0 +1,19 @@ +identifier: nrf5340_audio_dk_nrf5340_cpuapp +name: NRF5340-AUDIO-DK-NRF5340-application-MCU +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 448 +flash: 1024 +supported: + - gpio + - i2s + - spi + - i2c + - pwm + - watchdog + - usb_cdc + - usb_device diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common-pinctrl.dtsi b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common-pinctrl.dtsi new file mode 100644 index 00000000000..65c5880e395 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common-pinctrl.dtsi @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2022 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + i2s0_default: i2s0_default { + group1 { + psels = ; + nordic,drive-mode = ; + }; + group2 { + psels = , + , + , + ; + }; + }; + + i2s0_sleep: i2s0_sleep { + group1 { + psels = , + , + , + , + ; + low-power-enable; + }; + }; + + uart0_default: uart0_default { + group1 { + psels = , + ; + }; + group2 { + psels = , + ; + bias-pull-up; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + i2c1_default: i2c1_default { + group1 { + psels = , + ; + }; + }; + + i2c1_sleep: i2c1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + spi4_default: spi4_default { + group1 { + psels = , + ; + /* Workaround for issue with PCA10121 v0.7.0 + * related to SD-card + */ + nordic,drive-mode = ; + }; + group2 { + psels = ; + }; + }; + + spi4_sleep: spi4_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi new file mode 100644 index 00000000000..ff73f9780b0 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2020-2022 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include "nrf5340_audio_dk_nrf5340_cpuapp_common-pinctrl.dtsi" +#include + +/ { + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,bt-hci-rpmsg-ipc = &ipc0; + watchdog0 = &wdt0; + }; + + gpio_fwd: nrf-gpio-forwarder { + compatible = "nordic,nrf-gpio-forwarder"; + status = "okay"; + uart { + gpios = <&gpio1 9 0>, <&gpio1 8 0>, <&gpio1 11 0>, <&gpio1 10 0>; + }; + }; + + pmic { + compatible = "nordic,npm1100"; + nordic,iset-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2s0 { + compatible = "nordic,nrf-i2s"; + status = "okay"; + pinctrl-0 = <&i2s0_default>; + pinctrl-1 = <&i2s0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&i2c1 { + compatible = "nordic,nrf-twim"; + status = "okay"; + pinctrl-0 = <&i2c1_default>; + pinctrl-1 = <&i2c1_sleep>; + pinctrl-names = "default", "sleep"; + + vbat_sensor: ina231@44 { + compatible = "ti,ina230"; + reg = <0x44>; + config = ; + current-lsb-microamps = <1>; + rshunt-milliohms = <510>; + }; + + vdd1_codec_sensor: ina231@45 { + compatible = "ti,ina230"; + reg = <0x45>; + config = ; + current-lsb-microamps = <1>; + rshunt-milliohms = <2200>; + }; + + vdd2_codec_sensor: ina231@41 { + compatible = "ti,ina230"; + reg = <0x41>; + config = ; + current-lsb-microamps = <1>; + rshunt-milliohms = <2200>; + }; + + vdd2_nrf_sensor: ina231@40 { + compatible = "ti,ina230"; + reg = <0x40>; + config = ; + current-lsb-microamps = <1>; + rshunt-milliohms = <1000>; + }; +}; + +&spi4 { + compatible = "nordic,nrf-spim"; + status = "okay"; + cs-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>, <&gpio0 17 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&spi4_default>; + pinctrl-1 = <&spi4_sleep>; + pinctrl-names = "default", "sleep"; + sdhc0: sdhc@0 { + compatible = "zephyr,sdhc-spi-slot"; + reg = <0>; + status = "okay"; + sdmmc { + compatible = "zephyr,sdmmc-disk"; + status = "okay"; + }; + + spi-max-frequency = <8000000>; + }; + cs47l63: cs47l63@1 { + reg = <1>; + }; +}; + +&pwm0 { + status = "okay"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&timer2 { + status = "okay"; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x00010000>; + }; + slot0_partition: partition@10000 { + label = "image-0"; + }; + slot0_ns_partition: partition@50000 { + label = "image-0-nonsecure"; + }; + slot1_partition: partition@80000 { + label = "image-1"; + }; + slot1_ns_partition: partition@c0000 { + label = "image-1-nonsecure"; + }; + storage_partition: partition@fa000 { + label = "storage"; + reg = <0x000fa000 0x00006000>; + }; + }; +}; + +/ { + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + sram0_image: image@20000000 { + /* Zephyr image(s) memory */ + }; + + sram0_s: image_s@20000000 { + /* Secure image memory */ + }; + + sram0_ns: image_ns@20040000 { + /* Non-Secure image memory */ + }; + }; +}; + +zephyr_udc0: &usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; + + hs_0: hs_0 { + compatible = "usb-audio-hs"; + mic-feature-mute; + mic-channel-l; + mic-channel-r; + + hp-feature-mute; + hp-channel-l; + hp-channel-r; + }; +}; + +/* Include partition configuration file */ +#include "nrf5340_audio_dk_nrf5340_cpuapp_partition_conf.dtsi" +#include "nrf5340_audio_dk_nrf5340_shared.dtsi" diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_defconfig b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_defconfig new file mode 100644 index 00000000000..0f5f1991b6d --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_defconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2020 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF53X=y +CONFIG_SOC_NRF5340_CPUAPP_QKAA=y +CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP=y + +CONFIG_ARM_MPU=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_ARM_TRUSTZONE_M=y + +CONFIG_GPIO=y +CONFIG_NFCT_PINS_AS_GPIOS=y + +CONFIG_SERIAL=y + +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_PINCTRL=y + +CONFIG_REGULATOR=y diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.dts b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.dts new file mode 100644 index 00000000000..74b120d452b --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.dts @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi" + +/ { + model = "Nordic nRF5340 Audio DK NRF5340 Application"; + compatible = "nordic,nrf5340-audio-dk-nrf5340-cpuapp"; + + chosen { + zephyr,sram = &sram0_ns; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_ns_partition; + }; +}; diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.yaml b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.yaml new file mode 100644 index 00000000000..a094083158b --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns.yaml @@ -0,0 +1,18 @@ +identifier: nrf5340_audio_dk_nrf5340_cpuapp_ns +name: NRF5340-AUDIO-DK-NRF5340-application-MCU-Non-Secure +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 192 +flash: 192 +supported: + - i2c + - i2s + - spi + - pwm + - watchdog + - usb_cdc + - usb_device diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns_defconfig b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns_defconfig new file mode 100644 index 00000000000..f0d723ad450 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_ns_defconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2020 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF53X=y +CONFIG_SOC_NRF5340_CPUAPP_QKAA=y +CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUAPP_NS=y + +CONFIG_ARM_MPU=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_ARM_TRUSTZONE_M=y +CONFIG_TRUSTED_EXECUTION_NONSECURE=y + +CONFIG_GPIO=y + +CONFIG_SERIAL=y + +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_PINCTRL=y + +CONFIG_REGULATOR=y diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_partition_conf.dtsi b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_partition_conf.dtsi new file mode 100644 index 00000000000..d2d81e728fc --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpuapp_partition_conf.dtsi @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * Default Flash planning for nrf5340_audio_dk_nrf5340 CPUAPP (Application MCU). + * + * Zephyr build for nRF5340 with ARM TrustZone-M support, + * implies building Secure and Non-Secure Zephyr images. + * + * Secure image will be placed, by default, in flash0 + * (or in slot0, if MCUboot is present). + * Secure image will use sram0 for system memory. + * + * Non-Secure image will be placed in slot0_ns, and use + * sram0_ns for system memory. + * + * Note that the Secure image only requires knowledge of + * the beginning of the Non-Secure image (not its size). + */ + +&slot0_partition { + reg = <0x00010000 0x40000>; +}; + +&slot0_ns_partition { + reg = <0x00050000 0x30000>; +}; + +&slot1_partition { + reg = <0x00080000 0x40000>; +}; + +&slot1_ns_partition { + reg = <0x000c0000 0x30000>; +}; + +/* Default SRAM planning when building for nRF5340 with + * ARM TrustZone-M support + * - Lowest 256 kB SRAM allocated to Secure image (sram0_s) + * - Middle 192 kB allocated to Non-Secure image (sram0_ns) + * - Upper 64 kB SRAM allocated as Shared memory (sram0_shared) + * (see nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi) + */ +&sram0_image { + reg = <0x20000000 DT_SIZE_K(448)>; +}; + +&sram0_s { + reg = <0x20000000 0x40000>; +}; + +&sram0_ns { + reg = <0x20040000 0x30000>; +}; + +/* Include shared RAM configuration file */ +#include "nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi" diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet-pinctrl.dtsi b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet-pinctrl.dtsi new file mode 100644 index 00000000000..ada32e709ac --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet-pinctrl.dtsi @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + ; + }; + group2 { + psels = , + ; + bias-pull-up; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + +}; diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.dts b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.dts new file mode 100644 index 00000000000..100216f1a43 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.dts @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "nrf5340_audio_dk_nrf5340_cpunet-pinctrl.dtsi" + +/ { + model = "Nordic nRF5340 Audio DK NRF5340 Network"; + compatible = "nordic,nrf5340-audio-dk-nrf5340-cpunet"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,bt-hci-rpmsg-ipc = &ipc0; + zephyr,sram = &sram1; + zephyr,flash = &flash1; + zephyr,code-partition = &slot0_partition; + watchdog0 = &wdt0; + }; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&timer2 { + status = "okay"; +}; + +&flash1 { + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0xc000>; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000C000 0x12000>; + }; + slot1_partition: partition@1e000 { + label = "image-1"; + reg = <0x0001E000 0x12000>; + }; + storage_partition: partition@3a000 { + label = "storage"; + reg = <0x0003a000 0x6000>; + }; + }; +}; + +/* Include shared RAM configuration file */ +#include "nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi" +#include "nrf5340_audio_dk_nrf5340_shared.dtsi" diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.yaml b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.yaml new file mode 100644 index 00000000000..7a28066f0a1 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet.yaml @@ -0,0 +1,12 @@ +identifier: nrf5340_audio_dk_nrf5340_cpunet +name: NRF5340-AUDIO-DK-NRF5340-network-MCU +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 64 +flash: 256 +supported: + - watchdog diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet_defconfig b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet_defconfig new file mode 100644 index 00000000000..0450bb97797 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_cpunet_defconfig @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF53X=y +CONFIG_SOC_NRF5340_CPUNET_QKAA=y +CONFIG_BOARD_NRF5340_AUDIO_DK_NRF5340_CPUNET=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable PINCTRL +CONFIG_PINCTRL=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable uart driver +CONFIG_SERIAL=y + +# enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared.dtsi b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared.dtsi new file mode 100644 index 00000000000..7a363d58700 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared.dtsi @@ -0,0 +1,84 @@ +/ { + leds: leds { + compatible = "gpio-leds"; + rgb1_red: led_0 { + gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>; + label = "0 LED_RGB_RED"; + }; + rgb1_green: led_1 { + gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; + label = "0 LED_RGB_GREEN"; + }; + rgb1_blue: led_2 { + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + label = "0 LED_RGB_BLUE"; + }; + rgb2_red: led_3 { + gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>; + label = "1 LED_RGB_RED"; + }; + rgb2_green: led_4 { + gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>; + label = "1 LED_RGB_GREEN"; + }; + rgb2_blue: led_5 { + gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>; + label = "1 LED_RGB_BLUE"; + }; + led1_blue: led_6 { + gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; + label = "2 LED_MONO_BLUE"; + }; + led2_green: led_7 { + gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; + label = "3 LED_MONO_GREEN"; + }; + led3_green: led_8 { + gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>; + label = "4 LED_MONO_GREEN"; + }; + + }; + + buttons { + compatible = "gpio-keys"; + button_1_vol_dn: button_1_vol_dn { + gpios = <&gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 1"; + }; + button_2_vol_up: button_2_vol_up { + gpios = <&gpio0 3 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 2"; + }; + button3: button_3 { + gpios = <&gpio0 4 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 3"; + }; + button4: button_4 { + gpios = <&gpio0 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 4"; + }; + button5: button_5 { + gpios = <&gpio0 5 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 5"; + }; + }; + + aliases { + led0 = &rgb1_red; + led1 = &rgb1_green; + led2 = &rgb1_blue; + led3 = &rgb2_red; + led4 = &rgb2_green; + led5 = &rgb2_blue; + led6 = &led1_blue; + led7 = &led2_green; + led8 = &led3_green; + sw0 = &button_1_vol_dn; + sw1 = &button_2_vol_up; + sw2 = &button3; + sw3 = &button4; + sw4 = &button5; + watchdog0 = &wdt0; + }; +}; diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi new file mode 100644 index 00000000000..2a96677a9dc --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/nrf5340_audio_dk_nrf5340_shared_sram_planning_conf.dtsi @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* Default shared SRAM planning when building for nRF5340. + * This file is included by both nRF5340 CPUAPP (Application MCU) + * and nRF5340 CPUNET (Network MCU). + * - 64 kB SRAM allocated as Shared memory (sram0_shared) + * - Region defined after the image SRAM of Application MCU + */ + +/ { + chosen { + /* shared memory reserved for the inter-processor communication */ + zephyr,ipc_shm = &sram0_shared; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + sram0_shared: memory@20070000 { + /* SRAM allocated to shared memory */ + reg = <0x20070000 0x10000>; + }; + }; +}; diff --git a/boards/arm/nrf5340_audio_dk_nrf5340/pre_dt_board.cmake b/boards/arm/nrf5340_audio_dk_nrf5340/pre_dt_board.cmake new file mode 100644 index 00000000000..fb045e38545 --- /dev/null +++ b/boards/arm/nrf5340_audio_dk_nrf5340/pre_dt_board.cmake @@ -0,0 +1,8 @@ +# Copyright (c) 2021 Linaro Limited +# SPDX-License-Identifier: Apache-2.0 + +# Suppress "unique_unit_address_if_enabled" to handle the following overlaps: +# - flash-controller@39000 & kmu@39000 +# - power@5000 & clock@5000 +# - /reserved-memory/image@20000000 & /reserved-memory/image_s@20000000 +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") diff --git a/samples/bluetooth/hci_rpmsg/sample.yaml b/samples/bluetooth/hci_rpmsg/sample.yaml index 48334b8e395..634aded259e 100644 --- a/samples/bluetooth/hci_rpmsg/sample.yaml +++ b/samples/bluetooth/hci_rpmsg/sample.yaml @@ -9,6 +9,7 @@ tests: tags: bluetooth integration_platforms: - nrf5340dk_nrf5340_cpunet + - nrf5340_audio_dk_nrf5340_cpunet sample.bluetooth.hci_rpmsg.iso_broadcast.bt_ll_sw_split: harness: bluetooth extra_args: CONF_FILE="nrf5340_cpunet_iso_broadcast-bt_ll_sw_split.conf" @@ -16,6 +17,7 @@ tests: tags: bluetooth integration_platforms: - nrf5340dk_nrf5340_cpunet + - nrf5340_audio_dk_nrf5340_cpunet sample.bluetooth.hci_rpmsg.iso_receive.bt_ll_sw_split: harness: bluetooth extra_args: CONF_FILE="nrf5340_cpunet_iso_receive-bt_ll_sw_split.conf" @@ -23,3 +25,4 @@ tests: tags: bluetooth integration_platforms: - nrf5340dk_nrf5340_cpunet + - nrf5340_audio_dk_nrf5340_cpunet diff --git a/samples/bluetooth/iso_broadcast_benchmark/sample.yaml b/samples/bluetooth/iso_broadcast_benchmark/sample.yaml index fb8674604db..945b30f681f 100644 --- a/samples/bluetooth/iso_broadcast_benchmark/sample.yaml +++ b/samples/bluetooth/iso_broadcast_benchmark/sample.yaml @@ -4,7 +4,7 @@ sample: tests: sample.bluetooth.iso_broadcast_benchmark: build_only: true - platform_allow: nrf52840dk_nrf52840 nrf5340dk_nrf5340_cpuapp + platform_allow: nrf52840dk_nrf52840 nrf5340dk_nrf5340_cpuapp nrf5340_audio_dk_nrf5340_cpuapp integration_platforms: - nrf52840dk_nrf52840 tags: bluetooth diff --git a/samples/bluetooth/iso_connected_benchmark/sample.yaml b/samples/bluetooth/iso_connected_benchmark/sample.yaml index c3c35d74c62..0dc19828259 100644 --- a/samples/bluetooth/iso_connected_benchmark/sample.yaml +++ b/samples/bluetooth/iso_connected_benchmark/sample.yaml @@ -4,5 +4,5 @@ sample: tests: sample.bluetooth.iso_connected_benchmark: build_only: true - platform_allow: nrf5340dk_nrf5340_cpuapp + platform_allow: nrf5340dk_nrf5340_cpuapp nrf5340_audio_dk_nrf5340_cpuapp tags: bluetooth