From 252fbf2074fd8a42c6ef466d6a7ed7fc326ae077 Mon Sep 17 00:00:00 2001 From: Bjarki Arge Andreasen Date: Tue, 27 Aug 2024 11:22:44 +0200 Subject: [PATCH 1/2] Revert "[nrf fromlist] samples: boards: nrf: Add nrf2_clock_control sample" This reverts commit 074a5176c2588cf0008999159d58958fc788f935. Signed-off-by: Bjarki Arge Andreasen --- .../nrf/nrf2_clock_control/CMakeLists.txt | 8 -- samples/boards/nrf/nrf2_clock_control/Kconfig | 24 ----- .../configs/cpuapp_hsfll.conf | 6 -- .../configs/cpuapp_hsfll.overlay | 11 --- .../nrf2_clock_control/configs/fll16m.conf | 6 -- .../nrf2_clock_control/configs/fll16m.overlay | 11 --- .../nrf/nrf2_clock_control/configs/lfclk.conf | 6 -- .../nrf2_clock_control/configs/lfclk.overlay | 11 --- .../nrf2_clock_control/configs/uart135.conf | 6 -- .../configs/uart135.overlay | 15 --- .../boards/nrf/nrf2_clock_control/prj.conf | 1 - .../boards/nrf/nrf2_clock_control/sample.yaml | 31 ------ .../boards/nrf/nrf2_clock_control/src/main.c | 98 ------------------- 13 files changed, 234 deletions(-) delete mode 100644 samples/boards/nrf/nrf2_clock_control/CMakeLists.txt delete mode 100644 samples/boards/nrf/nrf2_clock_control/Kconfig delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/uart135.conf delete mode 100644 samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay delete mode 100644 samples/boards/nrf/nrf2_clock_control/prj.conf delete mode 100644 samples/boards/nrf/nrf2_clock_control/sample.yaml delete mode 100644 samples/boards/nrf/nrf2_clock_control/src/main.c diff --git a/samples/boards/nrf/nrf2_clock_control/CMakeLists.txt b/samples/boards/nrf/nrf2_clock_control/CMakeLists.txt deleted file mode 100644 index 36173b99bb2..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 - -cmake_minimum_required(VERSION 3.20.0) -find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) -project(nrf_clock_control) - -FILE(GLOB app_sources src/*.c) -target_sources(app PRIVATE ${app_sources}) diff --git a/samples/boards/nrf/nrf2_clock_control/Kconfig b/samples/boards/nrf/nrf2_clock_control/Kconfig deleted file mode 100644 index 9ade1ddad1d..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/Kconfig +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -config SAMPLE_CLOCK_FREQUENCY_HZ - int "Frequency specification to request from clock in Hz" - -config SAMPLE_CLOCK_ACCURACY_PPM - int "Accuracy specification to request from clock in PPM" - -config SAMPLE_CLOCK_PRECISION - int "Precision specification to request from clock" - -config SAMPLE_PRE_REQUEST_TIMEOUT - int "Time to wait after boot before requesting clock specs in seconds" - default 2 - help - The distributed clock domains may need time to initialize - before a clock request can be met. - -config SAMPLE_KEEP_REQUEST_TIMEOUT - int "Time to keep request alive in seconds" - default 2 - -source "Kconfig.zephyr" diff --git a/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf b/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf deleted file mode 100644 index 94a782328bb..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=320000000 -CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=0 -CONFIG_SAMPLE_CLOCK_PRECISION=0 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay b/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay deleted file mode 100644 index 651f8567b7a..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/{ - aliases { - sample-clock = &cpuapp_hsfll; - }; -}; diff --git a/samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf b/samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf deleted file mode 100644 index 9d8dac91c55..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=32000000 -CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=30 -CONFIG_SAMPLE_CLOCK_PRECISION=0 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay b/samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay deleted file mode 100644 index 0169c5a2574..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/{ - aliases { - sample-clock = &fll16m; - }; -}; diff --git a/samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf b/samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf deleted file mode 100644 index 59937b26d7b..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=32768 -CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=20 -CONFIG_SAMPLE_CLOCK_PRECISION=1 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay b/samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay deleted file mode 100644 index 6a04c2de706..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/{ - aliases { - sample-clock = &lfclk; - }; -}; diff --git a/samples/boards/nrf/nrf2_clock_control/configs/uart135.conf b/samples/boards/nrf/nrf2_clock_control/configs/uart135.conf deleted file mode 100644 index 9d8dac91c55..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/uart135.conf +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2024 Nordic Semiconductor ASA -# SPDX-License-Identifier: Apache-2.0 - -CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=32000000 -CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=30 -CONFIG_SAMPLE_CLOCK_PRECISION=0 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay b/samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay deleted file mode 100644 index 0e81f4cd2aa..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/{ - aliases { - sample-device = &uart135; - }; -}; - -&uart135 { - status = "okay"; -}; diff --git a/samples/boards/nrf/nrf2_clock_control/prj.conf b/samples/boards/nrf/nrf2_clock_control/prj.conf deleted file mode 100644 index 1bb8bf6d7fd..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/prj.conf +++ /dev/null @@ -1 +0,0 @@ -# empty diff --git a/samples/boards/nrf/nrf2_clock_control/sample.yaml b/samples/boards/nrf/nrf2_clock_control/sample.yaml deleted file mode 100644 index e0769c26104..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/sample.yaml +++ /dev/null @@ -1,31 +0,0 @@ -sample: - name: nRF2 clock control sample -common: - platform_allow: - - nrf54h20dk/nrf54h20/cpuapp - harness: console - harness_config: - type: one_line - regex: - - "clock spec request released" -tests: - sample.boards.nrf.nrf2_clock_control.fll16m: - filter: dt_nodelabel_enabled("fll16m") - extra_args: - - CONF_FILE="configs/fll16m.conf" - - DTC_OVERLAY_FILE="configs/fll16m.overlay" - sample.boards.nrf.nrf2_clock_control.lfclk: - filter: dt_nodelabel_enabled("lfclk") - extra_args: - - CONF_FILE="configs/lfclk.conf" - - DTC_OVERLAY_FILE="configs/lfclk.overlay" - sample.boards.nrf.nrf2_clock_control.uart135: - filter: dt_nodelabel_enabled("uart135") - extra_args: - - CONF_FILE="configs/uart135.conf" - - DTC_OVERLAY_FILE="configs/uart135.overlay" - sample.boards.nrf.nrf2_clock_control.cpuapp_hsfll: - filter: dt_nodelabel_enabled("cpuapp_hsfll") - extra_args: - - CONF_FILE="configs/cpuapp_hsfll.conf" - - DTC_OVERLAY_FILE="configs/cpuapp_hsfll.overlay" diff --git a/samples/boards/nrf/nrf2_clock_control/src/main.c b/samples/boards/nrf/nrf2_clock_control/src/main.c deleted file mode 100644 index 62dd7840e6e..00000000000 --- a/samples/boards/nrf/nrf2_clock_control/src/main.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include - -#if DT_NODE_EXISTS(DT_ALIAS(sample_device)) -#define SAMPLE_CLOCK_NODE DT_CLOCKS_CTLR(DT_ALIAS(sample_device)) -#elif DT_NODE_EXISTS(DT_ALIAS(sample_clock)) -#define SAMPLE_CLOCK_NODE DT_ALIAS(sample_clock) -#endif - -#define SAMPLE_CLOCK_NAME DT_NODE_FULL_NAME(SAMPLE_CLOCK_NODE) - -#define SAMPLE_NOTIFY_TIMEOUT K_SECONDS(2) -#define SAMPLE_PRE_REQUEST_TIMEOUT K_SECONDS(CONFIG_SAMPLE_PRE_REQUEST_TIMEOUT) -#define SAMPLE_KEEP_REQUEST_TIMEOUT K_SECONDS(CONFIG_SAMPLE_KEEP_REQUEST_TIMEOUT) - -const struct device *sample_clock_dev = DEVICE_DT_GET(SAMPLE_CLOCK_NODE); - -static K_SEM_DEFINE(sample_sem, 0, 1); - -static void sample_notify_cb(void) -{ - k_sem_give(&sample_sem); -} - -int main(void) -{ - struct onoff_client cli; - int ret; - int res; - int64_t req_start_uptime; - int64_t req_stop_uptime; - - printk("\n"); - printk("clock name: %s\n", SAMPLE_CLOCK_NAME); - printk("minimum frequency request: %uHz\n", CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ); - printk("minimum accuracy request: %uPPM\n", CONFIG_SAMPLE_CLOCK_ACCURACY_PPM); - printk("minimum precision request: %u\n", CONFIG_SAMPLE_CLOCK_PRECISION); - - const struct nrf_clock_spec spec = { - .frequency = CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ, - .accuracy = CONFIG_SAMPLE_CLOCK_ACCURACY_PPM, - .precision = CONFIG_SAMPLE_CLOCK_PRECISION, - }; - - sys_notify_init_callback(&cli.notify, sample_notify_cb); - - k_sleep(SAMPLE_PRE_REQUEST_TIMEOUT); - - printk("\n"); - printk("requesting minimum clock specs\n"); - req_start_uptime = k_uptime_get(); - ret = nrf_clock_control_request(sample_clock_dev, &spec, &cli); - if (ret < 0) { - printk("minimum clock specs could not be met\n"); - return 0; - } - - ret = k_sem_take(&sample_sem, SAMPLE_NOTIFY_TIMEOUT); - if (ret < 0) { - printk("timed out waiting for clock to meet request\n"); - return 0; - } - - req_stop_uptime = k_uptime_get(); - - ret = sys_notify_fetch_result(&cli.notify, &res); - if (ret < 0) { - printk("sys notify fetch failed\n"); - return 0; - } - - if (res < 0) { - printk("failed to apply request to clock\n"); - return 0; - } - - printk("request applied to clock in %llims\n", req_stop_uptime - req_start_uptime); - k_sleep(SAMPLE_KEEP_REQUEST_TIMEOUT); - - printk("\n"); - printk("releasing requested clock specs\n"); - ret = nrf_clock_control_release(sample_clock_dev, &spec); - if (ret < 0) { - printk("failed to release requested clock specs\n"); - return 0; - } - - printk("clock spec request released\n"); - return 0; -} From 6c712880a145fc80c9297d7162b201ef9c8da514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20G=C5=82=C4=85bek?= Date: Mon, 29 Jul 2024 13:50:54 +0200 Subject: [PATCH 2/2] [nrf fromlist] samples: boards: nrf: Add nrf2_clock_control sample MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a sample that presents how the custom nrf2_clock_control API introduced for nRF54H20 can be used for the various clocks which are supported by it. Upstream PR: https://github.com/zephyrproject-rtos/zephyr/pull/77365 Signed-off-by: Andrzej Głąbek Signed-off-by: Bjarki Arge Andreasen --- .../nrf/nrf2_clock_control/CMakeLists.txt | 8 ++ samples/boards/nrf/nrf2_clock_control/Kconfig | 24 +++++ .../configs/cpuapp_hsfll.conf | 6 ++ .../configs/cpuapp_hsfll.overlay | 11 +++ .../nrf2_clock_control/configs/fll16m.conf | 6 ++ .../nrf2_clock_control/configs/fll16m.overlay | 11 +++ .../nrf/nrf2_clock_control/configs/lfclk.conf | 6 ++ .../nrf2_clock_control/configs/lfclk.overlay | 11 +++ .../nrf2_clock_control/configs/uart135.conf | 6 ++ .../configs/uart135.overlay | 15 +++ .../boards/nrf/nrf2_clock_control/prj.conf | 1 + .../boards/nrf/nrf2_clock_control/sample.yaml | 31 ++++++ .../boards/nrf/nrf2_clock_control/src/main.c | 98 +++++++++++++++++++ 13 files changed, 234 insertions(+) create mode 100644 samples/boards/nrf/nrf2_clock_control/CMakeLists.txt create mode 100644 samples/boards/nrf/nrf2_clock_control/Kconfig create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/uart135.conf create mode 100644 samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay create mode 100644 samples/boards/nrf/nrf2_clock_control/prj.conf create mode 100644 samples/boards/nrf/nrf2_clock_control/sample.yaml create mode 100644 samples/boards/nrf/nrf2_clock_control/src/main.c diff --git a/samples/boards/nrf/nrf2_clock_control/CMakeLists.txt b/samples/boards/nrf/nrf2_clock_control/CMakeLists.txt new file mode 100644 index 00000000000..36173b99bb2 --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/CMakeLists.txt @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(nrf_clock_control) + +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) diff --git a/samples/boards/nrf/nrf2_clock_control/Kconfig b/samples/boards/nrf/nrf2_clock_control/Kconfig new file mode 100644 index 00000000000..9ade1ddad1d --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/Kconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +config SAMPLE_CLOCK_FREQUENCY_HZ + int "Frequency specification to request from clock in Hz" + +config SAMPLE_CLOCK_ACCURACY_PPM + int "Accuracy specification to request from clock in PPM" + +config SAMPLE_CLOCK_PRECISION + int "Precision specification to request from clock" + +config SAMPLE_PRE_REQUEST_TIMEOUT + int "Time to wait after boot before requesting clock specs in seconds" + default 2 + help + The distributed clock domains may need time to initialize + before a clock request can be met. + +config SAMPLE_KEEP_REQUEST_TIMEOUT + int "Time to keep request alive in seconds" + default 2 + +source "Kconfig.zephyr" diff --git a/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf b/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf new file mode 100644 index 00000000000..94a782328bb --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.conf @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=320000000 +CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=0 +CONFIG_SAMPLE_CLOCK_PRECISION=0 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay b/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay new file mode 100644 index 00000000000..651f8567b7a --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/cpuapp_hsfll.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/{ + aliases { + sample-clock = &cpuapp_hsfll; + }; +}; diff --git a/samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf b/samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf new file mode 100644 index 00000000000..a1a74e0a29a --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/fll16m.conf @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=16000000 +CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=30 +CONFIG_SAMPLE_CLOCK_PRECISION=0 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay b/samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay new file mode 100644 index 00000000000..0169c5a2574 --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/fll16m.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/{ + aliases { + sample-clock = &fll16m; + }; +}; diff --git a/samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf b/samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf new file mode 100644 index 00000000000..59937b26d7b --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/lfclk.conf @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=32768 +CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=20 +CONFIG_SAMPLE_CLOCK_PRECISION=1 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay b/samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay new file mode 100644 index 00000000000..6a04c2de706 --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/lfclk.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/{ + aliases { + sample-clock = &lfclk; + }; +}; diff --git a/samples/boards/nrf/nrf2_clock_control/configs/uart135.conf b/samples/boards/nrf/nrf2_clock_control/configs/uart135.conf new file mode 100644 index 00000000000..a1a74e0a29a --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/uart135.conf @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ=16000000 +CONFIG_SAMPLE_CLOCK_ACCURACY_PPM=30 +CONFIG_SAMPLE_CLOCK_PRECISION=0 diff --git a/samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay b/samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay new file mode 100644 index 00000000000..0e81f4cd2aa --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/configs/uart135.overlay @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/{ + aliases { + sample-device = &uart135; + }; +}; + +&uart135 { + status = "okay"; +}; diff --git a/samples/boards/nrf/nrf2_clock_control/prj.conf b/samples/boards/nrf/nrf2_clock_control/prj.conf new file mode 100644 index 00000000000..1bb8bf6d7fd --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/prj.conf @@ -0,0 +1 @@ +# empty diff --git a/samples/boards/nrf/nrf2_clock_control/sample.yaml b/samples/boards/nrf/nrf2_clock_control/sample.yaml new file mode 100644 index 00000000000..e0769c26104 --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/sample.yaml @@ -0,0 +1,31 @@ +sample: + name: nRF2 clock control sample +common: + platform_allow: + - nrf54h20dk/nrf54h20/cpuapp + harness: console + harness_config: + type: one_line + regex: + - "clock spec request released" +tests: + sample.boards.nrf.nrf2_clock_control.fll16m: + filter: dt_nodelabel_enabled("fll16m") + extra_args: + - CONF_FILE="configs/fll16m.conf" + - DTC_OVERLAY_FILE="configs/fll16m.overlay" + sample.boards.nrf.nrf2_clock_control.lfclk: + filter: dt_nodelabel_enabled("lfclk") + extra_args: + - CONF_FILE="configs/lfclk.conf" + - DTC_OVERLAY_FILE="configs/lfclk.overlay" + sample.boards.nrf.nrf2_clock_control.uart135: + filter: dt_nodelabel_enabled("uart135") + extra_args: + - CONF_FILE="configs/uart135.conf" + - DTC_OVERLAY_FILE="configs/uart135.overlay" + sample.boards.nrf.nrf2_clock_control.cpuapp_hsfll: + filter: dt_nodelabel_enabled("cpuapp_hsfll") + extra_args: + - CONF_FILE="configs/cpuapp_hsfll.conf" + - DTC_OVERLAY_FILE="configs/cpuapp_hsfll.overlay" diff --git a/samples/boards/nrf/nrf2_clock_control/src/main.c b/samples/boards/nrf/nrf2_clock_control/src/main.c new file mode 100644 index 00000000000..62dd7840e6e --- /dev/null +++ b/samples/boards/nrf/nrf2_clock_control/src/main.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include + +#if DT_NODE_EXISTS(DT_ALIAS(sample_device)) +#define SAMPLE_CLOCK_NODE DT_CLOCKS_CTLR(DT_ALIAS(sample_device)) +#elif DT_NODE_EXISTS(DT_ALIAS(sample_clock)) +#define SAMPLE_CLOCK_NODE DT_ALIAS(sample_clock) +#endif + +#define SAMPLE_CLOCK_NAME DT_NODE_FULL_NAME(SAMPLE_CLOCK_NODE) + +#define SAMPLE_NOTIFY_TIMEOUT K_SECONDS(2) +#define SAMPLE_PRE_REQUEST_TIMEOUT K_SECONDS(CONFIG_SAMPLE_PRE_REQUEST_TIMEOUT) +#define SAMPLE_KEEP_REQUEST_TIMEOUT K_SECONDS(CONFIG_SAMPLE_KEEP_REQUEST_TIMEOUT) + +const struct device *sample_clock_dev = DEVICE_DT_GET(SAMPLE_CLOCK_NODE); + +static K_SEM_DEFINE(sample_sem, 0, 1); + +static void sample_notify_cb(void) +{ + k_sem_give(&sample_sem); +} + +int main(void) +{ + struct onoff_client cli; + int ret; + int res; + int64_t req_start_uptime; + int64_t req_stop_uptime; + + printk("\n"); + printk("clock name: %s\n", SAMPLE_CLOCK_NAME); + printk("minimum frequency request: %uHz\n", CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ); + printk("minimum accuracy request: %uPPM\n", CONFIG_SAMPLE_CLOCK_ACCURACY_PPM); + printk("minimum precision request: %u\n", CONFIG_SAMPLE_CLOCK_PRECISION); + + const struct nrf_clock_spec spec = { + .frequency = CONFIG_SAMPLE_CLOCK_FREQUENCY_HZ, + .accuracy = CONFIG_SAMPLE_CLOCK_ACCURACY_PPM, + .precision = CONFIG_SAMPLE_CLOCK_PRECISION, + }; + + sys_notify_init_callback(&cli.notify, sample_notify_cb); + + k_sleep(SAMPLE_PRE_REQUEST_TIMEOUT); + + printk("\n"); + printk("requesting minimum clock specs\n"); + req_start_uptime = k_uptime_get(); + ret = nrf_clock_control_request(sample_clock_dev, &spec, &cli); + if (ret < 0) { + printk("minimum clock specs could not be met\n"); + return 0; + } + + ret = k_sem_take(&sample_sem, SAMPLE_NOTIFY_TIMEOUT); + if (ret < 0) { + printk("timed out waiting for clock to meet request\n"); + return 0; + } + + req_stop_uptime = k_uptime_get(); + + ret = sys_notify_fetch_result(&cli.notify, &res); + if (ret < 0) { + printk("sys notify fetch failed\n"); + return 0; + } + + if (res < 0) { + printk("failed to apply request to clock\n"); + return 0; + } + + printk("request applied to clock in %llims\n", req_stop_uptime - req_start_uptime); + k_sleep(SAMPLE_KEEP_REQUEST_TIMEOUT); + + printk("\n"); + printk("releasing requested clock specs\n"); + ret = nrf_clock_control_release(sample_clock_dev, &spec); + if (ret < 0) { + printk("failed to release requested clock specs\n"); + return 0; + } + + printk("clock spec request released\n"); + return 0; +}