From 941a5489d30a0200f563aa1844fcd515671561bd Mon Sep 17 00:00:00 2001 From: Matthias Hauser Date: Mon, 31 Mar 2025 08:23:41 +0200 Subject: [PATCH] dts: boards: we: add board Ophelia-IV add new board Ophelia-IV Signed-off-by: Matthias Hauser --- boards/we/ophelia4ev/Kconfig.defconfig | 9 + boards/we/ophelia4ev/Kconfig.ophelia4ev | 6 + boards/we/ophelia4ev/board.cmake | 4 + boards/we/ophelia4ev/board.yml | 9 + boards/we/ophelia4ev/doc/img/ophelia4ev.webp | Bin 0 -> 52140 bytes boards/we/ophelia4ev/doc/index.rst | 90 +++++++++ boards/we/ophelia4ev/ophelia4ev_common.dtsi | 112 +++++++++++ .../ophelia4ev_nrf54l15-pinctrl.dtsi | 97 ++++++++++ .../ophelia4ev/ophelia4ev_nrf54l15_cpuapp.dts | 174 ++++++++++++++++++ .../ophelia4ev_nrf54l15_cpuapp.yaml | 24 +++ .../ophelia4ev_nrf54l15_cpuapp_defconfig | 21 +++ .../ophelia4ev_nrf54l15_cpuflpr.dts | 75 ++++++++ .../ophelia4ev_nrf54l15_cpuflpr.yaml | 18 ++ .../ophelia4ev_nrf54l15_cpuflpr_defconfig | 20 ++ samples/bluetooth/beacon/sample.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 12 ++ samples/bluetooth/peripheral_dis/sample.yaml | 1 + samples/bluetooth/peripheral_hr/sample.yaml | 2 + samples/bluetooth/peripheral_nus/sample.yaml | 1 + .../boards/nordic/nrf_sys_event/sample.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 55 ++++++ samples/drivers/adc/adc_dt/sample.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 61 ++++++ samples/drivers/adc/adc_sequence/sample.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 21 +++ .../boards/ophelia4ev_nrf54l15_cpuapp.conf | 4 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 67 +++++++ samples/drivers/i2c/rtio_loopback/sample.yaml | 1 + samples/drivers/mbox/Kconfig.sysbuild | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 8 + .../ophelia4ev_nrf54l15_cpuflpr.overlay | 8 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 45 +++++ samples/sensor/qdec/sample.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.conf | 12 ++ .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 47 +++++ samples/subsys/fs/fs_sample/sample.yaml | 3 + samples/subsys/fs/littlefs/sample.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 42 +++++ samples/sysbuild/hello_world/sample.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.conf | 26 +++ .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 14 ++ .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 27 +++ .../adc/adc_accuracy_test/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 43 +++++ .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 11 ++ .../drivers/adc/adc_error_cases/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 27 +++ .../build_all/comparator/testcase.yaml | 6 + .../clock_control_api/testcase.yaml | 2 + .../nrf_clock_calibration/testcase.yaml | 1 + .../nrf_lf_clock_start/testcase.yaml | 9 + .../drivers/clock_control/onoff/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 25 +++ .../snippets/nrf_comp/snippet.yml | 3 + .../snippets/nrf_lpcomp/snippet.yml | 3 + .../comparator/gpio_loopback/testcase.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 3 + .../ophelia4ev_nrf54l15_cpuflpr.overlay | 3 + tests/drivers/flash/common/testcase.yaml | 1 + .../flash/negative_tests/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 21 +++ .../ophelia4ev_nrf54l15_cpuflpr.overlay | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.conf | 4 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 74 ++++++++ .../drivers/i2c/i2c_target_api/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 30 +++ .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 30 +++ .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 25 +++ .../drivers/mbox/mbox_error_cases/sample.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.conf | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 14 ++ .../pwm/pwm_gpio_loopback/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.conf | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 22 +++ tests/drivers/retained_mem/api/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 3 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 76 ++++++++ .../spi_controller_peripheral/testcase.yaml | 3 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 74 ++++++++ .../drivers/spi/spi_error_cases/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 57 ++++++ tests/drivers/spi/spi_loopback/testcase.yaml | 3 + .../timer/nrf_grtc_timer/testcase.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 53 ++++++ .../ophelia4ev_nrf54l15_cpuflpr.overlay | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 31 ++++ .../ophelia4ev_nrf54l15_cpuflpr.overlay | 31 ++++ .../uart/uart_elementary/testcase.yaml | 6 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 55 ++++++ tests/drivers/uart/uart_errors/testcase.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 43 +++++ .../uart/uart_mix_fifo_poll/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 36 ++++ tests/drivers/uart/uart_pm/testcase.yaml | 5 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 9 + .../ophelia4ev_nrf54l15_cpuflpr.overlay | 8 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 9 + .../watchdog/wdt_error_cases/testcase.yaml | 2 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 9 + .../watchdog/wdt_variables/testcase.yaml | 2 + tests/subsys/fs/fcb/testcase.yaml | 1 + .../boards/ophelia4ev_nrf54l15_cpuapp.overlay | 22 +++ tests/subsys/fs/littlefs/testcase.yaml | 1 + .../secure_storage/psa/crypto/testcase.yaml | 1 + .../secure_storage/psa/its/testcase.yaml | 2 + .../subsys/settings/performance/testcase.yaml | 2 + .../storage/stream/stream_flash/testcase.yaml | 1 + 107 files changed, 2051 insertions(+) create mode 100644 boards/we/ophelia4ev/Kconfig.defconfig create mode 100644 boards/we/ophelia4ev/Kconfig.ophelia4ev create mode 100644 boards/we/ophelia4ev/board.cmake create mode 100644 boards/we/ophelia4ev/board.yml create mode 100644 boards/we/ophelia4ev/doc/img/ophelia4ev.webp create mode 100644 boards/we/ophelia4ev/doc/index.rst create mode 100644 boards/we/ophelia4ev/ophelia4ev_common.dtsi create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15-pinctrl.dtsi create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.dts create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.yaml create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp_defconfig create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.dts create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.yaml create mode 100644 boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr_defconfig create mode 100644 samples/bluetooth/hci_uart/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/drivers/adc/adc_dt/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/drivers/adc/adc_sequence/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/drivers/audio/dmic/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf create mode 100644 samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuflpr.overlay create mode 100644 samples/sensor/qdec/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.conf create mode 100644 samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 samples/subsys/ipc/ipc_service/icmsg/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.conf create mode 100644 tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/adc/adc_accuracy_test/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/adc/adc_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/adc/adc_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/audio/dmic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/comparator/gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay create mode 100644 tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.conf create mode 100644 tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/i2s/i2s_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/i2s/i2s_speed/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/mbox/mbox_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf create mode 100644 tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.conf create mode 100644 tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/sensor/temp_sensor/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/spi/spi_controller_peripheral/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/spi/spi_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/spi/spi_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay create mode 100644 tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuflpr.overlay create mode 100644 tests/drivers/uart/uart_errors/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/uart/uart_mix_fifo_poll/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/uart/uart_pm/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay create mode 100644 tests/drivers/watchdog/wdt_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/drivers/watchdog/wdt_variables/boards/ophelia4ev_nrf54l15_cpuapp.overlay create mode 100644 tests/subsys/fs/littlefs/boards/ophelia4ev_nrf54l15_cpuapp.overlay diff --git a/boards/we/ophelia4ev/Kconfig.defconfig b/boards/we/ophelia4ev/Kconfig.defconfig new file mode 100644 index 00000000000..ae367b374d7 --- /dev/null +++ b/boards/we/ophelia4ev/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_OPHELIA4EV_NRF54L15_CPUAPP + +config ROM_START_OFFSET + default 0x800 if BOOTLOADER_MCUBOOT + +endif # BOARD_OPHELIA4EV_NRF54L15_CPUAPP diff --git a/boards/we/ophelia4ev/Kconfig.ophelia4ev b/boards/we/ophelia4ev/Kconfig.ophelia4ev new file mode 100644 index 00000000000..70937963208 --- /dev/null +++ b/boards/we/ophelia4ev/Kconfig.ophelia4ev @@ -0,0 +1,6 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_OPHELIA4EV + select SOC_NRF54L15_CPUAPP if BOARD_OPHELIA4EV_NRF54L15_CPUAPP + select SOC_NRF54L15_CPUFLPR if BOARD_OPHELIA4EV_NRF54L15_CPUFLPR diff --git a/boards/we/ophelia4ev/board.cmake b/boards/we/ophelia4ev/board.cmake new file mode 100644 index 00000000000..69dfac8e45e --- /dev/null +++ b/boards/we/ophelia4ev/board.cmake @@ -0,0 +1,4 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +include(${ZEPHYR_BASE}/boards/nordic/nrf54l15dk/board.cmake) diff --git a/boards/we/ophelia4ev/board.yml b/boards/we/ophelia4ev/board.yml new file mode 100644 index 00000000000..22987b007cb --- /dev/null +++ b/boards/we/ophelia4ev/board.yml @@ -0,0 +1,9 @@ +board: + name: ophelia4ev + full_name: Ophelia-IV DK + vendor: we + socs: + - name: nrf54l15 + variants: + - name: xip + cpucluster: cpuflpr diff --git a/boards/we/ophelia4ev/doc/img/ophelia4ev.webp b/boards/we/ophelia4ev/doc/img/ophelia4ev.webp new file mode 100644 index 0000000000000000000000000000000000000000..07a2ced30b6b530d9bdec776188a949853312f04 GIT binary patch literal 52140 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
boap_6 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 + label = "Green LED 0"; + }; + + led1: led_1 { + gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>; + label = "Green LED 1"; + }; + + led2: led_2 { + gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>; + label = "Green LED 2"; + }; + + led3: led_3 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Green LED 3"; + }; + }; + + pwmleds { + compatible = "pwm-leds"; + + /* + * PWM signal can be exposed on GPIO pin only within same domain. + * There is only one domain which contains both PWM and GPIO: + * PWM20/21/22 and GPIO Port P1. + * Only LEDs connected to P1 can work with PWM, for example LED3. + */ + pwm_led3: pwm_led_3 { + pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + }; + }; + + buttons { + compatible = "gpio-keys"; + + button0: button_0 { + gpios = <&gpio2 3 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 0"; + zephyr,code = ; + }; + + button1: button_1 { + gpios = <&gpio1 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 1"; + zephyr,code = ; + }; + + button2: button_2 { + gpios = <&gpio1 13 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 2"; + zephyr,code = ; + }; + + button3: button_3 { + gpios = <&gpio1 14 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 3"; + zephyr,code = ; + }; + }; + + aliases { + led0 = &led0; + led1 = &led1; + led2 = &led2; + led3 = &led3; + pwm-led0 = &pwm_led3; + sw0 = &button0; + sw1 = &button1; + sw2 = &button2; + sw3 = &button3; + watchdog0 = &wdt31; + }; +}; + +&uart20 { + current-speed = <115200>; + pinctrl-0 = <&uart20_default>; + pinctrl-1 = <&uart20_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart30 { + current-speed = <115200>; + pinctrl-0 = <&uart30_default>; + pinctrl-1 = <&uart30_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&pwm20 { + status = "okay"; + pinctrl-0 = <&pwm20_default>; + pinctrl-1 = <&pwm20_sleep>; + pinctrl-names = "default", "sleep"; +}; + +/* Get a node label for wi-fi spi to use in shield files */ +wifi_spi: &spi22 {}; diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15-pinctrl.dtsi b/boards/we/ophelia4ev/ophelia4ev_nrf54l15-pinctrl.dtsi new file mode 100644 index 00000000000..4a3b761796b --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15-pinctrl.dtsi @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + /omit-if-no-ref/ uart20_default: uart20_default { + group1 { + psels = , + ; + }; + + group2 { + psels = , + ; + bias-pull-up; + }; + }; + + /omit-if-no-ref/ uart20_sleep: uart20_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + /omit-if-no-ref/ uart30_default: uart30_default { + group1 { + psels = , + ; + }; + + group2 { + psels = , + ; + bias-pull-up; + }; + }; + + /omit-if-no-ref/ uart30_sleep: uart30_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + /omit-if-no-ref/ spi00_default: spi00_default { + group1 { + psels = , + , + ; + }; + }; + + /omit-if-no-ref/ spi00_sleep: spi00_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + /omit-if-no-ref/ pwm20_default: pwm20_default { + group1 { + psels = ; + }; + }; + + /omit-if-no-ref/ pwm20_sleep: pwm20_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + + /omit-if-no-ref/ grtc_default: grtc_default { + group1 { + psels = , + ; + }; + }; + + /omit-if-no-ref/ grtc_sleep: grtc_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.dts b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.dts new file mode 100644 index 00000000000..73b135891a8 --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.dts @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "ophelia4ev_common.dtsi" + +/ { + model = "Ophelia-IV EV Application MCU"; + compatible = "we,ophelia4ev_nrf54l15-cpuapp"; + + chosen { + zephyr,console = &uart20; + zephyr,shell-uart = &uart20; + zephyr,code-partition = &slot0_partition; + zephyr,flash = &cpuapp_rram; + zephyr,sram = &cpuapp_sram; + zephyr,uart-mcumgr = &uart20; + zephyr,bt-mon-uart = &uart20; + zephyr,bt-c2h-uart = &uart20; + zephyr,flash-controller = &rram_controller; + zephyr,ieee802154 = &ieee802154; + }; +}; + +&cpuapp_rram { + partitions { + compatible = "fixed-partitions"; + + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x0 DT_SIZE_K(64)>; + }; + + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x10000 DT_SIZE_K(324)>; + }; + + slot0_ns_partition: partition@61000 { + label = "image-0-nonsecure"; + reg = <0x61000 DT_SIZE_K(324)>; + }; + + slot1_partition: partition@b2000 { + label = "image-1"; + reg = <0xb2000 DT_SIZE_K(324)>; + }; + + slot1_ns_partition: partition@103000 { + label = "image-1-nonsecure"; + reg = <0x103000 DT_SIZE_K(324)>; + }; + + /* 32k from 0x154000 to 0x15bfff reserved for TF-M partitions */ + storage_partition: partition@15c000 { + label = "storage"; + reg = <0x15c000 DT_SIZE_K(36)>; + }; + }; +}; + +&cpuapp_sram { + status = "okay"; +}; + +&lfxo { + load-capacitors = "internal"; + load-capacitance-femtofarad = <15500>; +}; + +&hfxo { + load-capacitors = "internal"; + load-capacitance-femtofarad = <15000>; +}; + +®ulators { + status = "okay"; +}; + +&vregmain { + status = "okay"; + + regulator-initial-mode = ; +}; + +&grtc { + owned-channels = <0 1 2 3 4 5 6 7 8 9 10 11>; + + /* Channels 7-11 reserved for Zero Latency IRQs, 3-4 for FLPR */ + child-owned-channels = <3 4 7 8 9 10 11>; + + status = "okay"; +}; + +&uart20 { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&gpio2 { + status = "okay"; +}; + +&gpiote20 { + status = "okay"; +}; + +&gpiote30 { + status = "okay"; +}; + +&radio { + status = "okay"; +}; + +&ieee802154 { + status = "okay"; +}; + +&temp { + status = "okay"; +}; + +&clock { + status = "okay"; +}; + +&spi00 { + status = "okay"; + + cs-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&spi00_default>; + pinctrl-1 = <&spi00_sleep>; + pinctrl-names = "default", "sleep"; + + mx25r64: mx25r6435f@0 { + compatible = "jedec,spi-nor"; + status = "okay"; + reg = <0>; + spi-max-frequency = <8000000>; + + jedec-id = [c2 28 17]; + + sfdp-bfp = [ + e5 20 f1 ff ff ff ff 03 44 eb 08 6b 08 3b 04 bb + ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 0f 52 + 10 d8 00 ff 23 72 f5 00 82 ed 04 cc 44 83 48 44 + 30 b0 30 b0 f7 c4 d5 5c 00 be 29 ff f0 d0 ff ff + ]; + + size = <67108864>; + has-dpd; + t-enter-dpd = <10000>; + t-exit-dpd = <35000>; + }; +}; + +&adc { + status = "okay"; +}; diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.yaml b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.yaml new file mode 100644 index 00000000000..87fee9c3d62 --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp.yaml @@ -0,0 +1,24 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +identifier: ophelia4ev/nrf54l15/cpuapp +name: Ophelia4-EV-nRF54l15-Application +type: mcu +arch: arm +toolchain: + - gnuarmemb + - zephyr +sysbuild: true +ram: 188 +flash: 324 +supported: + - adc + - counter + - dmic + - gpio + - i2c + - pwm + - retained_mem + - spi + - watchdog + - i2s diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp_defconfig b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp_defconfig new file mode 100644 index 00000000000..80a40b5a79d --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuapp_defconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable GPIO +CONFIG_GPIO=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Use internal LFCLK +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.dts b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.dts new file mode 100644 index 00000000000..b47b81affc4 --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.dts @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "ophelia4ev_common.dtsi" + +/ { + model = "Ophelia-IV EV FLPR MCU"; + compatible = "we,ophelia4ev_nrf54l15-cpuflpr"; + + chosen { + zephyr,console = &uart30; + zephyr,shell-uart = &uart30; + zephyr,code-partition = &cpuflpr_code_partition; + zephyr,flash = &cpuflpr_rram; + zephyr,sram = &cpuflpr_sram; + }; +}; + +&cpuflpr_sram { + status = "okay"; + + /* size must be increased due to booting from SRAM */ + reg = <0x20028000 DT_SIZE_K(96)>; + + ranges = <0x0 0x20028000 0x18000>; +}; + +&cpuflpr_rram { + partitions { + compatible = "fixed-partitions"; + + #address-cells = <1>; + #size-cells = <1>; + + cpuflpr_code_partition: partition@0 { + label = "image-0"; + reg = <0x0 DT_SIZE_K(96)>; + }; + }; +}; + +&grtc { + owned-channels = <3 4>; + + status = "okay"; +}; + +&uart30 { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&gpio2 { + status = "okay"; +}; + +&gpiote20 { + status = "okay"; +}; + +&gpiote30 { + status = "okay"; +}; diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.yaml b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.yaml new file mode 100644 index 00000000000..a302cf4a192 --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr.yaml @@ -0,0 +1,18 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +identifier: ophelia4ev/nrf54l15/cpuflpr +name: Ophelia4-EV-nRF54L15-Fast-Lightweight-Peripheral-Processor +type: mcu +arch: riscv +toolchain: + - zephyr +sysbuild: true +ram: 96 +flash: 96 +supported: + - counter + - gpio + - i2c + - spi + - watchdog diff --git a/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr_defconfig b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr_defconfig new file mode 100644 index 00000000000..a0e86949608 --- /dev/null +++ b/boards/we/ophelia4ev/ophelia4ev_nrf54l15_cpuflpr_defconfig @@ -0,0 +1,20 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +# Execute from SRAM +CONFIG_XIP=n + +# Use internal LFCLK +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/samples/bluetooth/beacon/sample.yaml b/samples/bluetooth/beacon/sample.yaml index e0bf6d22fb9..f6f08790092 100644 --- a/samples/bluetooth/beacon/sample.yaml +++ b/samples/bluetooth/beacon/sample.yaml @@ -9,12 +9,14 @@ tests: - nrf51dk/nrf51822 - nrf52dk/nrf52832 - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp tags: bluetooth integration_platforms: - qemu_cortex_m3 - nrf51dk/nrf51822 - nrf52dk/nrf52832 - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp sample.bluetooth.beacon-coex: extra_args: CONF_FILE="prj-coex.conf" harness: bluetooth diff --git a/samples/bluetooth/hci_uart/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/bluetooth/hci_uart/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..32ba7837840 --- /dev/null +++ b/samples/bluetooth/hci_uart/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&uart20 { + compatible = "nordic,nrf-uarte"; + current-speed = <1000000>; + status = "okay"; + hw-flow-control; +}; diff --git a/samples/bluetooth/peripheral_dis/sample.yaml b/samples/bluetooth/peripheral_dis/sample.yaml index 0521956f6e1..7a2bc6ca023 100644 --- a/samples/bluetooth/peripheral_dis/sample.yaml +++ b/samples/bluetooth/peripheral_dis/sample.yaml @@ -7,6 +7,7 @@ tests: platform_allow: - qemu_cortex_m3 - qemu_x86 + - ophelia4ev/nrf54l15/cpuapp tags: bluetooth integration_platforms: - qemu_cortex_m3 diff --git a/samples/bluetooth/peripheral_hr/sample.yaml b/samples/bluetooth/peripheral_hr/sample.yaml index b233fb48abc..8b0722d169f 100644 --- a/samples/bluetooth/peripheral_hr/sample.yaml +++ b/samples/bluetooth/peripheral_hr/sample.yaml @@ -14,6 +14,7 @@ tests: - nrf52840dk/nrf52840 - nrf5340dk/nrf5340/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - qemu_cortex_m3 - nrf52_bsim @@ -23,6 +24,7 @@ tests: - nrf52840dk/nrf52840 - nrf5340dk/nrf5340/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp tags: bluetooth sample.bluetooth.peripheral_hr.minimal: harness: bluetooth diff --git a/samples/bluetooth/peripheral_nus/sample.yaml b/samples/bluetooth/peripheral_nus/sample.yaml index af70193ec1e..0bb22b190e3 100644 --- a/samples/bluetooth/peripheral_nus/sample.yaml +++ b/samples/bluetooth/peripheral_nus/sample.yaml @@ -8,6 +8,7 @@ tests: - qemu_cortex_m3 - qemu_x86 - nrf52840dk/nrf52840 + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - qemu_cortex_m3 tags: bluetooth diff --git a/samples/boards/nordic/nrf_sys_event/sample.yaml b/samples/boards/nordic/nrf_sys_event/sample.yaml index c5ea3d8a23d..40e6d6d229b 100644 --- a/samples/boards/nordic/nrf_sys_event/sample.yaml +++ b/samples/boards/nordic/nrf_sys_event/sample.yaml @@ -19,6 +19,7 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf54h20dk/nrf54h20/cpurad - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf52840dk/nrf52840 - nrf5340dk/nrf5340/cpuapp @@ -26,3 +27,4 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf54h20dk/nrf54h20/cpurad - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/samples/drivers/adc/adc_dt/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/drivers/adc/adc_dt/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..321f7e6b05a --- /dev/null +++ b/samples/drivers/adc/adc_dt/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,55 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + */ + +/ { + zephyr,user { + io-channels = <&adc 0>, <&adc 1>, <&adc 2>, <&adc 7>; + }; +}; + +&adc { + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* P1.11 */ + zephyr,resolution = <10>; + }; + + channel@1 { + reg = <1>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* P1.06 */ + zephyr,resolution = <12>; + zephyr,oversampling = <8>; + }; + + channel@2 { + reg = <2>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <12>; + zephyr,oversampling = <8>; + }; + + channel@7 { + reg = <7>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* P1.13 */ + zephyr,input-negative = ; /* P1.14 */ + zephyr,resolution = <12>; + }; +}; diff --git a/samples/drivers/adc/adc_dt/sample.yaml b/samples/drivers/adc/adc_dt/sample.yaml index 8c0a93948f2..63cbdef98b9 100644 --- a/samples/drivers/adc/adc_dt/sample.yaml +++ b/samples/drivers/adc/adc_dt/sample.yaml @@ -17,6 +17,7 @@ tests: - nrf52840dk/nrf52840 - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp - mec172xevb_assy6906 - gd32f350r_eval - gd32f450i_eval diff --git a/samples/drivers/adc/adc_sequence/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/drivers/adc/adc_sequence/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..7fedbe52ad2 --- /dev/null +++ b/samples/drivers/adc/adc_sequence/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,61 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2024 Nordic Semiconductor ASA + */ + +/ { + zephyr,user { + io-channels = <&adc 0>, <&adc 1>, <&adc 2>, <&adc 7>; + }; +}; + +/ { + aliases { + adc0 = &adc; + }; +}; + +&adc { + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* P1.11 */ + zephyr,resolution = <10>; + }; + + channel@1 { + reg = <1>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* P1.06 */ + zephyr,resolution = <12>; + zephyr,oversampling = <8>; + }; + + channel@2 { + reg = <2>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* 0.9 V internal */ + zephyr,resolution = <12>; + zephyr,oversampling = <8>; + }; + + channel@7 { + reg = <7>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; /* P1.13 */ + zephyr,input-negative = ; /* P1.14 */ + zephyr,resolution = <12>; + }; +}; diff --git a/samples/drivers/adc/adc_sequence/sample.yaml b/samples/drivers/adc/adc_sequence/sample.yaml index 0461205a058..099cedca654 100644 --- a/samples/drivers/adc/adc_sequence/sample.yaml +++ b/samples/drivers/adc/adc_sequence/sample.yaml @@ -11,6 +11,7 @@ tests: - nrf52840dk/nrf52840 - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp - ucans32k1sic - frdm_mcxc242 - stm32f3_disco diff --git a/samples/drivers/audio/dmic/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/drivers/audio/dmic/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..45e09d9a0f3 --- /dev/null +++ b/samples/drivers/audio/dmic/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + pdm20_default_alt: pdm20_default_alt { + group1 { + psels = , + ; + }; + }; +}; + +dmic_dev: &pdm20 { + status = "okay"; + pinctrl-0 = <&pdm20_default_alt>; + pinctrl-names = "default"; + clock-source = "PCLK32M"; +}; diff --git a/samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf b/samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf new file mode 100644 index 00000000000..c8ffd42673e --- /dev/null +++ b/samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf @@ -0,0 +1,4 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_I2C_NRFX_TWIS_BUF_SIZE=256 diff --git a/samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..f47fe8bad2a --- /dev/null +++ b/samples/drivers/i2c/rtio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * SDA = P1.8 and P1.9 + * SCL = P1.10 and P1.11 + */ + +/ { + aliases { + i2c-controller = &i2c21; + i2c-controller-target = &i2c22; + }; +}; + +&pinctrl { + i2c21_default: i2c21_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; + + i2c21_sleep: i2c21_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c22_default: i2c22_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; + + i2c22_sleep: i2c22_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&i2c21 { + pinctrl-0 = <&i2c21_default>; + pinctrl-1 = <&i2c21_sleep>; + pinctrl-names = "default", "sleep"; + zephyr,concat-buf-size = <256>; + status = "okay"; +}; + +&i2c22 { + compatible = "nordic,nrf-twis"; + pinctrl-0 = <&i2c22_default>; + pinctrl-1 = <&i2c22_sleep>; + pinctrl-names = "default", "sleep"; + status = "okay"; +}; diff --git a/samples/drivers/i2c/rtio_loopback/sample.yaml b/samples/drivers/i2c/rtio_loopback/sample.yaml index a9d41fbf8cd..cf081c7670c 100644 --- a/samples/drivers/i2c/rtio_loopback/sample.yaml +++ b/samples/drivers/i2c/rtio_loopback/sample.yaml @@ -16,3 +16,4 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/samples/drivers/mbox/Kconfig.sysbuild b/samples/drivers/mbox/Kconfig.sysbuild index ce58f93763b..8155e2f3bc1 100644 --- a/samples/drivers/mbox/Kconfig.sysbuild +++ b/samples/drivers/mbox/Kconfig.sysbuild @@ -18,6 +18,7 @@ config REMOTE_BOARD default "frdm_mcxn947/mcxn947/cpu1" if $(BOARD) = "frdm_mcxn947" default "nrf54h20dk/nrf54h20/cpuapp" if "$(BOARD)${BOARD_QUALIFIERS}" = "nrf54h20dk/nrf54h20/cpurad" default "nrf54l15dk/nrf54l15/cpuflpr" if $(BOARD) = "nrf54l15dk" + default "ophelia4ev/cpuflpr" if $(BOARD) = "ophelia4ev" default "stm32h747i_disco/stm32h747xx/m4" if $(BOARD) = "stm32h747i_disco" default "esp32_devkitc_wroom/esp32/appcpu" if "$(BOARD)${BOARD_QUALIFIERS}" = "esp32_devkitc_wroom/esp32/procpu" default "esp32s3_devkitm/esp32s3/appcpu" if "$(BOARD)${BOARD_QUALIFIERS}" = "esp32s3_devkitm/esp32s3/procpu" diff --git a/samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..025e0b8aedb --- /dev/null +++ b/samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + */ + +&wdt31 { + status = "okay"; +}; diff --git a/samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuflpr.overlay b/samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuflpr.overlay new file mode 100644 index 00000000000..025e0b8aedb --- /dev/null +++ b/samples/drivers/watchdog/boards/ophelia4ev_nrf54l15_cpuflpr.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + */ + +&wdt31 { + status = "okay"; +}; diff --git a/samples/sensor/qdec/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/sensor/qdec/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..58cf87f20b1 --- /dev/null +++ b/samples/sensor/qdec/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + qdec0 = &qdec20; + qenca = &phase_a; + qencb = &phase_b; + }; + + encoder-emulate { + compatible = "gpio-leds"; + + phase_a: phase_a { + gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + }; + + phase_b: phase_b { + gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&pinctrl { + qdec_pinctrl: qdec_pinctrl { + group1 { + psels = , + ; + }; + }; +}; + +&gpio1 { + status = "okay"; +}; + +&qdec20 { + status = "okay"; + pinctrl-0 = <&qdec_pinctrl>; + pinctrl-names = "default"; + steps = <120>; + led-pre = <500>; +}; diff --git a/samples/sensor/qdec/sample.yaml b/samples/sensor/qdec/sample.yaml index d4d685c43fb..0cb399b21fc 100644 --- a/samples/sensor/qdec/sample.yaml +++ b/samples/sensor/qdec/sample.yaml @@ -43,11 +43,13 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf52840dk/nrf52840 - nrf5340dk/nrf5340/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp harness_config: fixture: gpio_loopback type: multi_line diff --git a/samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.conf b/samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.conf new file mode 100644 index 00000000000..e142dedd450 --- /dev/null +++ b/samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.conf @@ -0,0 +1,12 @@ +# +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_DISK_DRIVERS=y +CONFIG_DISK_DRIVER_FLASH=y +# There may be no files on internal SoC flash, so this Kconfig +# options has ben enabled to create some if listing does not +# find in the first place. +CONFIG_FS_SAMPLE_CREATE_SOME_ENTRIES=y diff --git a/samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..da13128938a --- /dev/null +++ b/samples/subsys/fs/fs_sample/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* Because FAT FS needs at least 64kiB partition and default + * storage_partition is 36kiB for this board, we need to reorganize + * partitions to get at least 64KiB. + */ +/delete-node/ &slot0_partition; +/delete-node/ &slot1_partition; +/delete-node/ &slot0_ns_partition; +/delete-node/ &slot1_ns_partition; +/delete-node/ &storage_partition; + +&cpuapp_rram { + partitions { + compatible = "fixed-partitions"; + + #address-cells = <1>; + #size-cells = <1>; + + slot0_partition: parition@10000 { + reg = <0x00010000 DT_SIZE_K(300)>; + }; + + slot1_partition: partition@5b000 { + reg = <0x0005b000 DT_SIZE_K(300)>; + }; + + storage_partition: partition@a6000 { + label = "storage"; + reg = <0x000a6000 DT_SIZE_K(128)>; + }; + }; +}; + +/ { + msc_disk0 { + status = "okay"; + compatible = "zephyr,flash-disk"; + partition = <&storage_partition>; + disk-name = "SD"; + cache-size = <512>; + }; +}; diff --git a/samples/subsys/fs/fs_sample/sample.yaml b/samples/subsys/fs/fs_sample/sample.yaml index af7e4913c6b..e62f32eaee8 100644 --- a/samples/subsys/fs/fs_sample/sample.yaml +++ b/samples/subsys/fs/fs_sample/sample.yaml @@ -58,6 +58,9 @@ tests: sample.filesystem.fat_fs.nrf54l15dk: build_only: true platform_allow: nrf54l15dk/nrf54l15/cpuapp + sample.filesystem.fat_fs.ophelia4ev: + build_only: true + platform_allow: ophelia4ev/nrf54l15/cpuapp sample.filesystem.fat_fs.nrf52840dk_nrf52840.qspi: build_only: true platform_allow: nrf52840dk/nrf52840 diff --git a/samples/subsys/fs/littlefs/sample.yaml b/samples/subsys/fs/littlefs/sample.yaml index 85fa6468ee4..2ab2b47a3c3 100644 --- a/samples/subsys/fs/littlefs/sample.yaml +++ b/samples/subsys/fs/littlefs/sample.yaml @@ -24,6 +24,7 @@ tests: - stm32h747i_disco/stm32h747xx/m7 - stm32h750b_dk - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - frdm_ke17z - frdm_ke17z512 - s32z2xxdc2/s32z270/rtu0 diff --git a/samples/subsys/ipc/ipc_service/icmsg/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/samples/subsys/ipc/ipc_service/icmsg/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..22c74fe1178 --- /dev/null +++ b/samples/subsys/ipc/ipc_service/icmsg/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + soc { + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + + sram_rx: memory@20018000 { + reg = <0x20018000 0x0800>; + }; + + sram_tx: memory@20020000 { + reg = <0x20020000 0x0800>; + }; + }; + }; + + ipc { + ipc0: ipc0 { + compatible = "zephyr,ipc-icmsg"; + dcache-alignment = <32>; + tx-region = <&sram_tx>; + rx-region = <&sram_rx>; + mboxes = <&cpuapp_vevif_rx 20>, <&cpuapp_vevif_tx 21>; + mbox-names = "rx", "tx"; + status = "okay"; + }; + }; +}; + +&cpuapp_vevif_rx { + status = "okay"; +}; + +&cpuapp_vevif_tx { + status = "okay"; +}; diff --git a/samples/sysbuild/hello_world/sample.yaml b/samples/sysbuild/hello_world/sample.yaml index 68eae58739c..545f8a0b756 100644 --- a/samples/sysbuild/hello_world/sample.yaml +++ b/samples/sysbuild/hello_world/sample.yaml @@ -48,8 +48,10 @@ tests: sample.sysbuild.hello_world.nrf54l15dk_nrf54l15_cpuflpr: platform_allow: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_args: - SB_CONF_FILE=sysbuild/nrf54l15dk_nrf54l15_cpuflpr.conf diff --git a/tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.conf b/tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.conf new file mode 100644 index 00000000000..b6a71cd1e6d --- /dev/null +++ b/tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.conf @@ -0,0 +1,26 @@ +# CONFIG_TEST enforces minimal logging, which we don't want +CONFIG_TEST=n + +CONFIG_ASSERT=y +# Enable the option below to measure stack usage +#CONFIG_INIT_STACKS=y +CONFIG_THREAD_NAME=y +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_LOG=y +CONFIG_LOG_BUFFER_SIZE=4096 +CONFIG_RTT_CONSOLE=y +CONFIG_LOG_BACKEND_RTT=y +CONFIG_LOG_BACKEND_RTT_MODE_DROP=y +CONFIG_LOG_BACKEND_RTT_MESSAGE_SIZE=256 +CONFIG_USE_SEGGER_RTT=y +CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096 +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1024 + +CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_BTTESTER_LOG_LEVEL_DBG=y + +CONFIG_UART_INTERRUPT_DRIVEN=y + +CONFIG_BTTESTER_BTP_CMD_THREAD_STACK_SIZE=3072 diff --git a/tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..979fa6cc5df --- /dev/null +++ b/tests/bluetooth/tester/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +/ { + chosen { + zephyr,uart-pipe = &uart20; + }; +}; + +&uart20 { + compatible = "nordic,nrf-uarte"; + current-speed = <115200>; + status = "okay"; + hw-flow-control; +}; diff --git a/tests/drivers/adc/adc_accuracy_test/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/adc/adc_accuracy_test/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..19f2b090d14 --- /dev/null +++ b/tests/drivers/adc/adc_accuracy_test/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,27 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + */ + +/ { + zephyr,user { + io-channels = <&adc 0>; + reference-mv = <1800>; + expected-accuracy = <64>; + }; +}; + +&adc { + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1_2"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <14>; + }; +}; diff --git a/tests/drivers/adc/adc_accuracy_test/testcase.yaml b/tests/drivers/adc/adc_accuracy_test/testcase.yaml index 110c95bffc0..51a4cd53e2a 100644 --- a/tests/drivers/adc/adc_accuracy_test/testcase.yaml +++ b/tests/drivers/adc/adc_accuracy_test/testcase.yaml @@ -23,6 +23,7 @@ tests: - nrf52840dk/nrf52840 - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp - ek_ra8d1 - mck_ra8t1 - ek_ra6e2 diff --git a/tests/drivers/adc/adc_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/adc/adc_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..ab90118d232 --- /dev/null +++ b/tests/drivers/adc/adc_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,43 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + */ + +/ { + zephyr,user { + io-channels = <&adc 0>, <&adc 1> , <&adc 2>; + }; +}; + +&adc { + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <10>; + }; + + channel@1 { + reg = <1>; + zephyr,gain = "ADC_GAIN_1_4"; + zephyr,reference = "ADC_REF_EXTERNAL0"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <12>; + }; + + channel@2 { + reg = <2>; + zephyr,gain = "ADC_GAIN_2_3"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,input-positive = ; + zephyr,resolution = <10>; + }; +}; diff --git a/tests/drivers/adc/adc_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/adc/adc_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..b44fc6070ac --- /dev/null +++ b/tests/drivers/adc/adc_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,11 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + */ + +/ { + aliases { + adc = &adc; + }; +}; diff --git a/tests/drivers/adc/adc_error_cases/testcase.yaml b/tests/drivers/adc/adc_error_cases/testcase.yaml index da93a20a1ea..e5c0225b28c 100644 --- a/tests/drivers/adc/adc_error_cases/testcase.yaml +++ b/tests/drivers/adc/adc_error_cases/testcase.yaml @@ -11,3 +11,4 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/tests/drivers/audio/dmic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/audio/dmic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..182a089b3d5 --- /dev/null +++ b/tests/drivers/audio/dmic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + dmic-dev = &pdm20; + }; +}; + +&pinctrl { + pdm20_default_alt: pdm20_default_alt { + group1 { + psels = , + ; + }; + }; +}; + +dmic_dev: &pdm20 { + status = "okay"; + pinctrl-0 = <&pdm20_default_alt>; + pinctrl-names = "default"; + clock-source = "PCLK32M"; +}; diff --git a/tests/drivers/build_all/comparator/testcase.yaml b/tests/drivers/build_all/comparator/testcase.yaml index 45c23989222..298dcc88410 100644 --- a/tests/drivers/build_all/comparator/testcase.yaml +++ b/tests/drivers/build_all/comparator/testcase.yaml @@ -27,6 +27,7 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - nrf9280pdk/nrf9280/cpuapp integration_platforms: - nrf52dk/nrf52810 @@ -44,6 +45,7 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - nrf9280pdk/nrf9280/cpuapp integration_platforms: - nrf52dk/nrf52810 @@ -61,6 +63,7 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - nrf9280pdk/nrf9280/cpuapp integration_platforms: - nrf52dk/nrf52810 @@ -74,10 +77,12 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - nrf9280pdk/nrf9280/cpuapp integration_platforms: - nrf51dk/nrf51822 - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.build_all.comparator.nrf_lpcomp.int_ref: extra_args: - DTC_OVERLAY_FILE="nrf_lpcomp/int_ref.overlay" @@ -88,6 +93,7 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf9280pdk/nrf9280/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 - nrf54h20dk/nrf54h20/cpuapp diff --git a/tests/drivers/clock_control/clock_control_api/testcase.yaml b/tests/drivers/clock_control/clock_control_api/testcase.yaml index 1b10b912b4c..972dcc1a1aa 100644 --- a/tests/drivers/clock_control/clock_control_api/testcase.yaml +++ b/tests/drivers/clock_control/clock_control_api/testcase.yaml @@ -25,6 +25,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 drivers.clock.clock_control_nrf5_lfclk_rc: @@ -35,6 +36,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_args: CONF_FILE="nrf_lfclk_rc.conf" diff --git a/tests/drivers/clock_control/nrf_clock_calibration/testcase.yaml b/tests/drivers/clock_control/nrf_clock_calibration/testcase.yaml index 963618c6f23..756a92a98e3 100644 --- a/tests/drivers/clock_control/nrf_clock_calibration/testcase.yaml +++ b/tests/drivers/clock_control/nrf_clock_calibration/testcase.yaml @@ -10,5 +10,6 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 diff --git a/tests/drivers/clock_control/nrf_lf_clock_start/testcase.yaml b/tests/drivers/clock_control/nrf_lf_clock_start/testcase.yaml index cad39c3625f..eeb034a8ec0 100644 --- a/tests/drivers/clock_control/nrf_lf_clock_start/testcase.yaml +++ b/tests/drivers/clock_control/nrf_lf_clock_start/testcase.yaml @@ -16,6 +16,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_configs: - CONFIG_SYSTEM_CLOCK_WAIT_FOR_STABILITY=y - CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y @@ -33,6 +34,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_configs: - CONFIG_SYSTEM_CLOCK_WAIT_FOR_AVAILABILITY=y - CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y @@ -48,6 +50,7 @@ tests: - nrf5340dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpunet - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: @@ -64,6 +67,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: @@ -80,6 +84,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: @@ -96,6 +101,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: @@ -112,6 +118,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: @@ -128,6 +135,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: @@ -144,6 +152,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 extra_configs: diff --git a/tests/drivers/clock_control/onoff/testcase.yaml b/tests/drivers/clock_control/onoff/testcase.yaml index 74d8a7f84d8..f24dce72a7a 100644 --- a/tests/drivers/clock_control/onoff/testcase.yaml +++ b/tests/drivers/clock_control/onoff/testcase.yaml @@ -11,5 +11,6 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf9160dk/nrf9160 + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf51dk/nrf51822 diff --git a/tests/drivers/comparator/gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/comparator/gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..0761a369b96 --- /dev/null +++ b/tests/drivers/comparator/gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/* + * P1.10 looped back to P1.11 + */ + +/ { + aliases { + test-comp = ∁ + }; + + zephyr,user { + test-gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + }; +}; + +&gpio1 { + status = "okay"; +}; diff --git a/tests/drivers/comparator/gpio_loopback/snippets/nrf_comp/snippet.yml b/tests/drivers/comparator/gpio_loopback/snippets/nrf_comp/snippet.yml index e030c0e5543..79fffefe7f4 100644 --- a/tests/drivers/comparator/gpio_loopback/snippets/nrf_comp/snippet.yml +++ b/tests/drivers/comparator/gpio_loopback/snippets/nrf_comp/snippet.yml @@ -10,6 +10,9 @@ boards: nrf54l15dk/nrf54l15/cpuapp: append: EXTRA_DTC_OVERLAY_FILE: boards/nrf54l15dk_nrf54l15_cpuapp.overlay + ophelia4ev/nrf54l15/cpuapp: + append: + EXTRA_DTC_OVERLAY_FILE: boards/nrf54l15dk_nrf54l15_cpuapp.overlay nrf5340dk/nrf5340/cpuapp: append: EXTRA_DTC_OVERLAY_FILE: boards/nrf5340dk_nrf5340_cpuapp.overlay diff --git a/tests/drivers/comparator/gpio_loopback/snippets/nrf_lpcomp/snippet.yml b/tests/drivers/comparator/gpio_loopback/snippets/nrf_lpcomp/snippet.yml index 70ff2a7e314..82a32cb517e 100644 --- a/tests/drivers/comparator/gpio_loopback/snippets/nrf_lpcomp/snippet.yml +++ b/tests/drivers/comparator/gpio_loopback/snippets/nrf_lpcomp/snippet.yml @@ -10,6 +10,9 @@ boards: nrf54l15dk/nrf54l15/cpuapp: append: EXTRA_DTC_OVERLAY_FILE: boards/nrf54l15dk_nrf54l15_cpuapp.overlay + ophelia4ev/nrf54l15/cpuapp: + append: + EXTRA_DTC_OVERLAY_FILE: boards/nrf54l15dk_nrf54l15_cpuapp.overlay nrf5340dk/nrf5340/cpuapp: append: EXTRA_DTC_OVERLAY_FILE: boards/nrf5340dk_nrf5340_cpuapp.overlay diff --git a/tests/drivers/comparator/gpio_loopback/testcase.yaml b/tests/drivers/comparator/gpio_loopback/testcase.yaml index c315101fecd..cfeeabe3a69 100644 --- a/tests/drivers/comparator/gpio_loopback/testcase.yaml +++ b/tests/drivers/comparator/gpio_loopback/testcase.yaml @@ -23,6 +23,7 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf5340dk/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.comparator.gpio_loopback.nrf_lpcomp: extra_args: - SNIPPET="gpio_loopback_nrf_lpcomp" @@ -30,3 +31,4 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf5340dk/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..6683b77837a --- /dev/null +++ b/tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +#include "nrf54l15dk_nrf54l15_common.dtsi" diff --git a/tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay b/tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay new file mode 100644 index 00000000000..6683b77837a --- /dev/null +++ b/tests/drivers/counter/counter_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +#include "nrf54l15dk_nrf54l15_common.dtsi" diff --git a/tests/drivers/flash/common/testcase.yaml b/tests/drivers/flash/common/testcase.yaml index 973fb95b223..4010b82b931 100644 --- a/tests/drivers/flash/common/testcase.yaml +++ b/tests/drivers/flash/common/testcase.yaml @@ -48,6 +48,7 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.flash.common.tfm_ns: build_only: true filter: (CONFIG_FLASH_HAS_DRIVER_ENABLED and CONFIG_TRUSTED_EXECUTION_NONSECURE diff --git a/tests/drivers/flash/negative_tests/testcase.yaml b/tests/drivers/flash/negative_tests/testcase.yaml index 11a669c981f..5d2441f002e 100644 --- a/tests/drivers/flash/negative_tests/testcase.yaml +++ b/tests/drivers/flash/negative_tests/testcase.yaml @@ -9,3 +9,4 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..db939435dd1 --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + resources { + compatible = "test-gpio-basic-api"; + out-gpios = <&gpio1 10 0>; + in-gpios = <&gpio1 11 0>; + }; +}; + +&gpiote20 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; diff --git a/tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay b/tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay new file mode 100644 index 00000000000..945d543e753 --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay @@ -0,0 +1 @@ +#include "ophelia4ev_nrf54l15_cpuapp.overlay" diff --git a/tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.conf b/tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.conf new file mode 100644 index 00000000000..c8ffd42673e --- /dev/null +++ b/tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.conf @@ -0,0 +1,4 @@ +# Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_I2C_NRFX_TWIS_BUF_SIZE=256 diff --git a/tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..8e70cb694e4 --- /dev/null +++ b/tests/drivers/i2c/i2c_target_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * SDA = P1.8 and P1.9 + * SCL = P1.10 and P1.11 + */ + +&pinctrl { + i2c21_default: i2c21_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; + + i2c21_sleep: i2c21_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c22_default: i2c22_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; + + i2c22_sleep: i2c22_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&i2c21 { + pinctrl-0 = <&i2c21_default>; + pinctrl-1 = <&i2c21_sleep>; + pinctrl-names = "default", "sleep"; + zephyr,concat-buf-size = <256>; + status = "okay"; + + eeprom1: eeprom@56 { + compatible = "zephyr,i2c-target-eeprom"; + reg = <0x56>; + address-width = <8>; + size = <256>; + }; +}; + +&i2c22 { + compatible = "nordic,nrf-twis"; + pinctrl-0 = <&i2c22_default>; + pinctrl-1 = <&i2c22_sleep>; + pinctrl-names = "default", "sleep"; + status = "okay"; + + eeprom0: eeprom@54 { + compatible = "zephyr,i2c-target-eeprom"; + reg = <0x54>; + address-width = <8>; + size = <256>; + }; +}; diff --git a/tests/drivers/i2c/i2c_target_api/testcase.yaml b/tests/drivers/i2c/i2c_target_api/testcase.yaml index 5e732c5456e..1a0991f77ca 100644 --- a/tests/drivers/i2c/i2c_target_api/testcase.yaml +++ b/tests/drivers/i2c/i2c_target_api/testcase.yaml @@ -60,5 +60,6 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - max32690evkit/max32690/m4 diff --git a/tests/drivers/i2s/i2s_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/i2s/i2s_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..5637a121224 --- /dev/null +++ b/tests/drivers/i2s/i2s_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* i2s-node0 is the transmitter/receiver */ + +/ { + aliases { + i2s-node0 = &i2s20; + }; +}; + +&pinctrl { + i2s20_default_alt: i2s20_default_alt { + group1 { + psels = , + , + , + ; + }; + }; +}; + +&i2s20 { + status = "okay"; + pinctrl-0 = <&i2s20_default_alt>; + pinctrl-names = "default"; +}; diff --git a/tests/drivers/i2s/i2s_speed/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/i2s/i2s_speed/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..5637a121224 --- /dev/null +++ b/tests/drivers/i2s/i2s_speed/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* i2s-node0 is the transmitter/receiver */ + +/ { + aliases { + i2s-node0 = &i2s20; + }; +}; + +&pinctrl { + i2s20_default_alt: i2s20_default_alt { + group1 { + psels = , + , + , + ; + }; + }; +}; + +&i2s20 { + status = "okay"; + pinctrl-0 = <&i2s20_default_alt>; + pinctrl-names = "default"; +}; diff --git a/tests/drivers/mbox/mbox_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/mbox/mbox_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..e9203a635a6 --- /dev/null +++ b/tests/drivers/mbox/mbox_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + mbox-consumer { + compatible = "vnd,mbox-consumer"; + + mboxes = <&cpuapp_vevif_tx 21>, <&cpuapp_vevif_tx 32>, + <&cpuapp_vevif_rx 20>, <&cpuapp_vevif_rx 32>; + + mbox-names = "remote_valid", "remote_incorrect", + "local_valid", "local_incorrect"; + + }; +}; + +&cpuapp_vevif_rx { + status = "okay"; +}; + +&cpuapp_vevif_tx { + status = "okay"; +}; diff --git a/tests/drivers/mbox/mbox_error_cases/sample.yaml b/tests/drivers/mbox/mbox_error_cases/sample.yaml index f8d9937d0cf..2746a1c2904 100644 --- a/tests/drivers/mbox/mbox_error_cases/sample.yaml +++ b/tests/drivers/mbox/mbox_error_cases/sample.yaml @@ -17,6 +17,8 @@ tests: tests.drivers.mbox_error_cases.nrf54l: platform_allow: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_args: SNIPPET=nordic-flpr diff --git a/tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf b/tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf new file mode 100644 index 00000000000..795414a504a --- /dev/null +++ b/tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.conf @@ -0,0 +1 @@ +CONFIG_SKIP_EDGE_NUM=4 diff --git a/tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..4d4e96aeacb --- /dev/null +++ b/tests/drivers/pwm/pwm_gpio_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + * + * Test requires jumper between: + * - PWM20 OUT[0] at P1.10 <-> GPIO input at P1.11 + */ + +/ { + zephyr,user { + pwms = <&pwm20 0 160000 PWM_POLARITY_NORMAL>; + gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>; + }; +}; diff --git a/tests/drivers/pwm/pwm_gpio_loopback/testcase.yaml b/tests/drivers/pwm/pwm_gpio_loopback/testcase.yaml index 45c18be499e..52a98cb14b0 100644 --- a/tests/drivers/pwm/pwm_gpio_loopback/testcase.yaml +++ b/tests/drivers/pwm/pwm_gpio_loopback/testcase.yaml @@ -20,3 +20,4 @@ tests: platform_allow: - nrf54h20dk/nrf54h20/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.conf b/tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.conf new file mode 100644 index 00000000000..c15ba3ed96d --- /dev/null +++ b/tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.conf @@ -0,0 +1 @@ +CONFIG_POWEROFF=y diff --git a/tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..e304ecbbfb1 --- /dev/null +++ b/tests/drivers/retained_mem/api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,22 @@ +/ { + cpuapp_sram@2002e000 { + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x2002e000 DT_SIZE_K(4)>; + zephyr,memory-region = "RetainedMem"; + status = "okay"; + + retainedmem0: retainedmem { + compatible = "zephyr,retained-ram"; + status = "okay"; + }; + }; + + aliases { + retainedmemtestdevice = &retainedmem0; + }; +}; + +&cpuapp_sram { + reg = <0x20000000 DT_SIZE_K(184)>; + ranges = <0x0 0x20000000 0x2e000>; +}; diff --git a/tests/drivers/retained_mem/api/testcase.yaml b/tests/drivers/retained_mem/api/testcase.yaml index 2ad60f6e3b4..7852742241b 100644 --- a/tests/drivers/retained_mem/api/testcase.yaml +++ b/tests/drivers/retained_mem/api/testcase.yaml @@ -15,6 +15,7 @@ tests: - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - qemu_cortex_m3 tags: diff --git a/tests/drivers/sensor/temp_sensor/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/sensor/temp_sensor/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..435e4f4a6cc --- /dev/null +++ b/tests/drivers/sensor/temp_sensor/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,3 @@ +temp_sensor: &temp { + status = "okay"; +}; diff --git a/tests/drivers/spi/spi_controller_peripheral/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/spi/spi_controller_peripheral/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..5b3a64e7fbc --- /dev/null +++ b/tests/drivers/spi/spi_controller_peripheral/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + spi22_default_alt: spi22_default_alt { + group1 { + psels = , + , + ; + }; + }; + + spi22_sleep_alt: spi22_sleep_alt { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + spi21_default_alt: spi21_default_alt { + group1 { + psels = , + , + , + ; + }; + }; + + spi21_sleep_alt: spi21_sleep_alt { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + +}; + +&gpio2 { + status = "okay"; +}; + +&spi22 { + status = "okay"; + pinctrl-0 = <&spi22_default_alt>; + pinctrl-1 = <&spi22_sleep_alt>; + pinctrl-names = "default", "sleep"; + overrun-character = <0x00>; + cs-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>; + zephyr,pm-device-runtime-auto; + + dut_spi_dt: test-spi-dev@0 { + compatible = "vnd,spi-device"; + reg = <0>; + spi-max-frequency = ; + }; +}; + +dut_spis: &spi21 { + compatible = "nordic,nrf-spis"; + status = "okay"; + def-char = <0x00>; + pinctrl-0 = <&spi21_default_alt>; + pinctrl-1 = <&spi21_sleep_alt>; + pinctrl-names = "default", "sleep"; + /delete-property/rx-delay-supported; + /delete-property/rx-delay; + zephyr,pm-device-runtime-auto; +}; diff --git a/tests/drivers/spi/spi_controller_peripheral/testcase.yaml b/tests/drivers/spi/spi_controller_peripheral/testcase.yaml index ca153293f57..c06c1c077fe 100644 --- a/tests/drivers/spi/spi_controller_peripheral/testcase.yaml +++ b/tests/drivers/spi/spi_controller_peripheral/testcase.yaml @@ -13,6 +13,7 @@ common: - nrf54h20dk/nrf54h20/cpuapp - nrf54h20dk/nrf54h20/cpurad - nrf54h20dk/nrf54h20/cpuppr + - ophelia4ev/nrf54l15/cpuapp tests: drivers.spi.spi_mode0: @@ -65,6 +66,7 @@ tests: - nrf54h20dk/nrf54h20/cpurad - nrf54h20dk/nrf54h20/cpuppr - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.spi.spis_fast: # SPIS120 instance occupies P6 which is not available on nRF54H20 DK pin headers @@ -77,6 +79,7 @@ tests: - nrf54h20dk/nrf54h20/cpurad - nrf54h20dk/nrf54h20/cpuppr - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.spi.pm_runtime: extra_configs: diff --git a/tests/drivers/spi/spi_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/spi/spi_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..6e272f3f2db --- /dev/null +++ b/tests/drivers/spi/spi_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + spi22_default_alt: spi22_default_alt { + group1 { + psels = , + , + ; + }; + }; + + spi22_sleep_alt: spi22_sleep_alt { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + spi21_default_alt: spi21_default_alt { + group1 { + psels = , + , + , + ; + }; + }; + + spi21_sleep_alt: spi21_sleep_alt { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + +}; + +&gpio2 { + status = "okay"; +}; + +&spi22 { + status = "okay"; + pinctrl-0 = <&spi22_default_alt>; + pinctrl-1 = <&spi22_sleep_alt>; + pinctrl-names = "default", "sleep"; + overrun-character = <0x00>; + cs-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>; + + dut_spi_dt: test-spi-dev@0 { + compatible = "vnd,spi-device"; + reg = <0>; + spi-max-frequency = <4000000>; + }; +}; + +dut_spis: &spi21 { + compatible = "nordic,nrf-spis"; + status = "okay"; + def-char = <0x00>; + pinctrl-0 = <&spi21_default_alt>; + pinctrl-1 = <&spi21_sleep_alt>; + pinctrl-names = "default", "sleep"; + /delete-property/rx-delay-supported; + /delete-property/rx-delay; +}; diff --git a/tests/drivers/spi/spi_error_cases/testcase.yaml b/tests/drivers/spi/spi_error_cases/testcase.yaml index 366b736d8fb..2f097fb072c 100644 --- a/tests/drivers/spi/spi_error_cases/testcase.yaml +++ b/tests/drivers/spi/spi_error_cases/testcase.yaml @@ -13,6 +13,7 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf52840dk/nrf52840 drivers.spi.spi_error_cases.fast: diff --git a/tests/drivers/spi/spi_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/spi/spi_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..4471d299ac1 --- /dev/null +++ b/tests/drivers/spi/spi_loopback/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KGs + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + spi00_default: spi00_default { + group1 { + psels = ; + }; + + group2 { + psels = , + ; + nordic,drive-mode = ; + }; + }; + + spi00_sleep: spi00_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; + +/delete-node/ &mx25r64; + +&spi00 { + status = "okay"; + + pinctrl-0 = <&spi00_default>; + pinctrl-1 = <&spi00_sleep>; + pinctrl-names = "default", "sleep"; + + overrun-character = <0x00>; + zephyr,pm-device-runtime-auto; + + slow@0 { + compatible = "test-spi-loopback-slow"; + reg = <0>; + spi-max-frequency = ; + }; + + dut_fast: fast@0 { + compatible = "test-spi-loopback-fast"; + reg = <0>; + spi-max-frequency = ; + }; +}; + +&gpio2 { + status = "okay"; +}; diff --git a/tests/drivers/spi/spi_loopback/testcase.yaml b/tests/drivers/spi/spi_loopback/testcase.yaml index 24368df2f7c..56a69c3e092 100644 --- a/tests/drivers/spi/spi_loopback/testcase.yaml +++ b/tests/drivers/spi/spi_loopback/testcase.yaml @@ -248,16 +248,19 @@ tests: platform_allow: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.spi.nrf54l_16mhz: extra_args: EXTRA_DTC_OVERLAY_FILE="boards/nrf_at_16mhz.overlay" platform_allow: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.spi.nrf54l_32mhz: extra_args: EXTRA_DTC_OVERLAY_FILE="boards/nrf_at_32mhz.overlay" platform_allow: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.spi.ke1xz_flexio_spi.loopback: extra_args: DTC_OVERLAY_FILE="boards/frdm_ke1xz_flexio_spi.overlay" filter: CONFIG_DT_HAS_NXP_FLEXIO_ENABLED and diff --git a/tests/drivers/timer/nrf_grtc_timer/testcase.yaml b/tests/drivers/timer/nrf_grtc_timer/testcase.yaml index 73dc8cc6170..a4716fb5446 100644 --- a/tests/drivers/timer/nrf_grtc_timer/testcase.yaml +++ b/tests/drivers/timer/nrf_grtc_timer/testcase.yaml @@ -10,5 +10,7 @@ tests: - nrf54h20dk/nrf54h20/cpurad - nrf54h20dk/nrf54h20/cpuppr - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuflpr integration_platforms: - nrf54l20pdk/nrf54l20/cpuapp diff --git a/tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..a1e29cbf0ff --- /dev/null +++ b/tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +&spi00 { + status = "disabled"; +}; + +&pinctrl { + uart21_default_alt: uart21_default_alt { + group1 { + psels = , + ; + }; + }; + + uart21_sleep_alt: uart21_sleep_alt { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + uart00_default_alt: uart00_default_alt { + group1 { + psels = , + ; + }; + }; + + uart00_sleep_alt: uart00_sleep_alt { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +dut: &uart21 { + status = "okay"; + pinctrl-0 = <&uart21_default_alt>; + pinctrl-1 = <&uart21_sleep_alt>; + pinctrl-names = "default", "sleep"; + current-speed = <115200>; +}; + +dut2: &uart00 { + status = "okay"; + pinctrl-0 = <&uart00_default_alt>; + pinctrl-1 = <&uart00_sleep_alt>; + pinctrl-names = "default", "sleep"; + current-speed = <4000000>; +}; diff --git a/tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay b/tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay new file mode 100644 index 00000000000..945d543e753 --- /dev/null +++ b/tests/drivers/uart/uart_async_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay @@ -0,0 +1 @@ +#include "ophelia4ev_nrf54l15_cpuapp.overlay" diff --git a/tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..cf481b7a161 --- /dev/null +++ b/tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +&pinctrl { + uart21_default: uart21_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart21_sleep: uart21_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; +}; + +dut: &uart21 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart21_default>; + pinctrl-1 = <&uart21_sleep>; + pinctrl-names = "default", "sleep"; + hw-flow-control; +}; diff --git a/tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuflpr.overlay b/tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuflpr.overlay new file mode 100644 index 00000000000..cf481b7a161 --- /dev/null +++ b/tests/drivers/uart/uart_elementary/boards/ophelia4ev_nrf54l15_cpuflpr.overlay @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +&pinctrl { + uart21_default: uart21_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart21_sleep: uart21_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; +}; + +dut: &uart21 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart21_default>; + pinctrl-1 = <&uart21_sleep>; + pinctrl-names = "default", "sleep"; + hw-flow-control; +}; diff --git a/tests/drivers/uart/uart_elementary/testcase.yaml b/tests/drivers/uart/uart_elementary/testcase.yaml index 659f721d9f5..0e1e38eb28c 100644 --- a/tests/drivers/uart/uart_elementary/testcase.yaml +++ b/tests/drivers/uart/uart_elementary/testcase.yaml @@ -16,6 +16,8 @@ tests: - nrf54l20pdk/nrf54l20/cpuapp - nrf54l15dk/nrf54l15/cpuflpr - nrf5340dk/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuflpr - esp32_devkitc_wrover/esp32/procpu - esp8684_devkitm - esp32c3_devkitm @@ -53,6 +55,7 @@ tests: platform_allow: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_args: DTC_OVERLAY_FILE="boards/nrf54l15dk_nrf54l15_cpuapp_dual_uart.overlay" extra_configs: - CONFIG_DUAL_UART_TEST=y @@ -61,6 +64,7 @@ tests: platform_allow: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_args: DTC_OVERLAY_FILE="boards/nrf54l15dk_nrf54l15_cpuapp_dual_uart.overlay" extra_configs: - CONFIG_DUAL_UART_TEST=y @@ -69,6 +73,7 @@ tests: filter: CONFIG_SERIAL_SUPPORT_INTERRUPT platform_allow: - nrf54l15dk/nrf54l15/cpuflpr + - ophelia4ev/nrf54l15/cpuflpr extra_args: DTC_OVERLAY_FILE="boards/nrf54l15dk_nrf54l15_cpuflpr_dual_uart.overlay" extra_configs: - CONFIG_DUAL_UART_TEST=y @@ -76,6 +81,7 @@ tests: filter: CONFIG_SERIAL_SUPPORT_INTERRUPT platform_allow: - nrf54l15dk/nrf54l15/cpuflpr + - ophelia4ev/nrf54l15/cpuflpr extra_args: DTC_OVERLAY_FILE="boards/nrf54l15dk_nrf54l15_cpuflpr_dual_uart.overlay" extra_configs: - CONFIG_DUAL_UART_TEST=y diff --git a/tests/drivers/uart/uart_errors/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/uart/uart_errors/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..a1748b3784b --- /dev/null +++ b/tests/drivers/uart/uart_errors/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +&pinctrl { + uart21_default: uart21_default { + group1 { + psels = , + ; + }; + }; + + uart21_sleep: uart21_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + uart22_default: uart22_default { + group1 { + psels = + ; + bias-pull-up; + }; + + group2 { + psels = ; + }; + }; + + uart22_sleep: uart22_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +dut: &uart21 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart21_default>; + pinctrl-1 = <&uart21_sleep>; + pinctrl-names = "default", "sleep"; +}; + +dut_aux: &uart22 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart22_default>; + pinctrl-1 = <&uart22_sleep>; + pinctrl-names = "default", "sleep"; + disable-rx; +}; diff --git a/tests/drivers/uart/uart_errors/testcase.yaml b/tests/drivers/uart/uart_errors/testcase.yaml index 9df414075b0..d303c73b600 100644 --- a/tests/drivers/uart/uart_errors/testcase.yaml +++ b/tests/drivers/uart/uart_errors/testcase.yaml @@ -14,6 +14,7 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf5340dk/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.uart.uart_errors.async: filter: CONFIG_SERIAL_SUPPORT_ASYNC platform_allow: @@ -21,6 +22,7 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf5340dk/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_configs: - CONFIG_UART_ASYNC_API=y - CONFIG_UART_INTERRUPT_DRIVEN=n diff --git a/tests/drivers/uart/uart_mix_fifo_poll/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/uart/uart_mix_fifo_poll/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..35378db2585 --- /dev/null +++ b/tests/drivers/uart/uart_mix_fifo_poll/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart21_default: uart21_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart21_sleep: uart21_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; +}; + +dut: &uart21 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart21_default>; + pinctrl-1 = <&uart21_sleep>; + pinctrl-names = "default", "sleep"; + hw-flow-control; +}; + +counter_dev: &timer00 { + status = "okay"; +}; + +&grtc { + interrupts = <228 2>; +}; diff --git a/tests/drivers/uart/uart_mix_fifo_poll/testcase.yaml b/tests/drivers/uart/uart_mix_fifo_poll/testcase.yaml index a5bee9fa9ec..0ff023748d2 100644 --- a/tests/drivers/uart/uart_mix_fifo_poll/testcase.yaml +++ b/tests/drivers/uart/uart_mix_fifo_poll/testcase.yaml @@ -15,6 +15,7 @@ common: - nrf54l15bsim/nrf54l15/cpuapp - nrf54h20dk/nrf54h20/cpuapp - nrf54h20dk/nrf54h20/cpurad + - ophelia4ev/nrf54l15/cpuapp - nrf52_bsim integration_platforms: - nrf52840dk/nrf52840 diff --git a/tests/drivers/uart/uart_pm/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/uart/uart_pm/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..fec91b746a2 --- /dev/null +++ b/tests/drivers/uart/uart_pm/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart21_default: uart21_default { + group1 { + psels = , + ; + }; + }; + + uart21_sleep: uart21_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +/ { + chosen { + zephyr,console = &uart20; + }; +}; + +dut: &uart21 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart21_default>; + pinctrl-1 = <&uart21_sleep>; + pinctrl-names = "default", "sleep"; +}; diff --git a/tests/drivers/uart/uart_pm/testcase.yaml b/tests/drivers/uart/uart_pm/testcase.yaml index 95cfd4a0ff6..329b5546b8b 100644 --- a/tests/drivers/uart/uart_pm/testcase.yaml +++ b/tests/drivers/uart/uart_pm/testcase.yaml @@ -12,6 +12,7 @@ common: - nrf54h20dk/nrf54h20/cpuapp - nrf52_bsim - nrf5340bsim/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp harness_config: fixture: gpio_loopback depends_on: gpio @@ -38,6 +39,7 @@ tests: - nrf54h20dk/nrf54h20/cpuapp - nrf52_bsim - nrf5340bsim/nrf5340/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.uart.pm.enhanced_poll: extra_configs: @@ -49,6 +51,7 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.uart.pm.int_driven: extra_configs: @@ -68,6 +71,7 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.uart.pm.async: extra_configs: @@ -87,3 +91,4 @@ tests: - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..cb831fea279 --- /dev/null +++ b/tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&wdt31 { + status = "okay"; +}; diff --git a/tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay b/tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay new file mode 100644 index 00000000000..025e0b8aedb --- /dev/null +++ b/tests/drivers/watchdog/wdt_basic_api/boards/ophelia4ev_nrf54l15_cpuflpr.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * SPDX-License-Identifier: Apache-2.0 + */ + +&wdt31 { + status = "okay"; +}; diff --git a/tests/drivers/watchdog/wdt_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/watchdog/wdt_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..cb831fea279 --- /dev/null +++ b/tests/drivers/watchdog/wdt_error_cases/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&wdt31 { + status = "okay"; +}; diff --git a/tests/drivers/watchdog/wdt_error_cases/testcase.yaml b/tests/drivers/watchdog/wdt_error_cases/testcase.yaml index 741b379caca..78bafd36729 100644 --- a/tests/drivers/watchdog/wdt_error_cases/testcase.yaml +++ b/tests/drivers/watchdog/wdt_error_cases/testcase.yaml @@ -16,5 +16,7 @@ tests: - nrf54h20dk/nrf54h20/cpurad - nrf9280pdk/nrf9280/cpuapp - nrf9280pdk/nrf9280/cpurad + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp diff --git a/tests/drivers/watchdog/wdt_variables/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/drivers/watchdog/wdt_variables/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..cb831fea279 --- /dev/null +++ b/tests/drivers/watchdog/wdt_variables/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&wdt31 { + status = "okay"; +}; diff --git a/tests/drivers/watchdog/wdt_variables/testcase.yaml b/tests/drivers/watchdog/wdt_variables/testcase.yaml index 3f230886acd..3ed2ad90b11 100644 --- a/tests/drivers/watchdog/wdt_variables/testcase.yaml +++ b/tests/drivers/watchdog/wdt_variables/testcase.yaml @@ -17,8 +17,10 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp integration_platforms: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp drivers.watchdog.wdt_variables.54h_flpr: platform_allow: diff --git a/tests/subsys/fs/fcb/testcase.yaml b/tests/subsys/fs/fcb/testcase.yaml index a7638b7d873..c8351b8dcf2 100644 --- a/tests/subsys/fs/fcb/testcase.yaml +++ b/tests/subsys/fs/fcb/testcase.yaml @@ -15,6 +15,7 @@ tests: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp - nrf54l20pdk/nrf54l20/cpuapp + - ophelia4ev/nrf54l15/cpuapp - native_sim integration_platforms: - nrf54l09pdk/nrf54l09/cpuapp diff --git a/tests/subsys/fs/littlefs/boards/ophelia4ev_nrf54l15_cpuapp.overlay b/tests/subsys/fs/littlefs/boards/ophelia4ev_nrf54l15_cpuapp.overlay new file mode 100644 index 00000000000..64bfe273c9d --- /dev/null +++ b/tests/subsys/fs/littlefs/boards/ophelia4ev_nrf54l15_cpuapp.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2025 Würth Elektronik eiSos GmbH & Co. KG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/delete-node/ &slot0_ns_partition; +/delete-node/ &slot1_partition; +/delete-node/ &slot1_ns_partition; + +&cpuapp_rram { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + small_partition: partition@67000 { + label = "small"; + reg = <0x00067000 0x00010000>; + }; + }; +}; diff --git a/tests/subsys/fs/littlefs/testcase.yaml b/tests/subsys/fs/littlefs/testcase.yaml index 9238188a334..5fd2ec5b765 100644 --- a/tests/subsys/fs/littlefs/testcase.yaml +++ b/tests/subsys/fs/littlefs/testcase.yaml @@ -17,6 +17,7 @@ tests: timeout: 60 platform_allow: - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - s32z2xxdc2/s32z270/rtu0 - s32z2xxdc2/s32z270/rtu1 - s32z2xxdc2@D/s32z270/rtu0 diff --git a/tests/subsys/secure_storage/psa/crypto/testcase.yaml b/tests/subsys/secure_storage/psa/crypto/testcase.yaml index 1482d23cb6c..8755a5a1935 100644 --- a/tests/subsys/secure_storage/psa/crypto/testcase.yaml +++ b/tests/subsys/secure_storage/psa/crypto/testcase.yaml @@ -8,6 +8,7 @@ tests: integration_platforms: - native_sim - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp secure_storage.psa.crypto.tfm: filter: CONFIG_BUILD_WITH_TFM extra_args: EXTRA_CONF_FILE=overlay-tfm.conf diff --git a/tests/subsys/secure_storage/psa/its/testcase.yaml b/tests/subsys/secure_storage/psa/its/testcase.yaml index d84a14dad84..05f1c1b9a6a 100644 --- a/tests/subsys/secure_storage/psa/its/testcase.yaml +++ b/tests/subsys/secure_storage/psa/its/testcase.yaml @@ -2,6 +2,7 @@ common: integration_platforms: - native_sim - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp platform_exclude: - qemu_cortex_m0 # settings subsystem initialization fails timeout: 600 @@ -23,6 +24,7 @@ tests: - nrf9151dk/nrf9151 - nrf9160dk/nrf9160 - nrf9161dk/nrf9161 + - ophelia4ev/nrf54l15/cpuapp extra_args: - EXTRA_DTC_OVERLAY_FILE=zms.overlay - EXTRA_CONF_FILE=overlay-secure_storage.conf;overlay-store_zms.conf;overlay-transform_default.conf diff --git a/tests/subsys/settings/performance/testcase.yaml b/tests/subsys/settings/performance/testcase.yaml index 24f0fc16f2d..efbd2115234 100644 --- a/tests/subsys/settings/performance/testcase.yaml +++ b/tests/subsys/settings/performance/testcase.yaml @@ -7,6 +7,7 @@ tests: platform_allow: - nrf52840dk/nrf52840 - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - mps2/an385 integration_platforms: - mps2/an385 @@ -26,6 +27,7 @@ tests: platform_allow: - nrf52840dk/nrf52840 - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp - mps2/an385 integration_platforms: - mps2/an385 diff --git a/tests/subsys/storage/stream/stream_flash/testcase.yaml b/tests/subsys/storage/stream/stream_flash/testcase.yaml index 02833dc6336..3dc0a660f2f 100644 --- a/tests/subsys/storage/stream/stream_flash/testcase.yaml +++ b/tests/subsys/storage/stream/stream_flash/testcase.yaml @@ -24,6 +24,7 @@ tests: platform_allow: - nrf54l09pdk/nrf54l09/cpuapp - nrf54l15dk/nrf54l15/cpuapp + - ophelia4ev/nrf54l15/cpuapp extra_configs: # Tests, currently, can only support single device testing # and platform enabling SPI NOR automatically brings in a device with