Skip to content

Commit 5eb1bd1

Browse files
nordic-seglnordic-piks
authored andcommitted
tests: benchmarks: multicore: Test fast PWM with different GD freq.
Default Global Domain frequency is 320 MHz. Validate fast PWM with 256 MHz, 128 MHz and 64 MHz. Signed-off-by: Sebastian Głąb <[email protected]>
1 parent 8a1d9ae commit 5eb1bd1

File tree

3 files changed

+144
-17
lines changed

3 files changed

+144
-17
lines changed

tests/benchmarks/multicore/idle_pwm_loopback/Kconfig

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,29 @@ config TEST_SLEEP_DURATION_MS
1212
Based on the value of 'min-residency-us' specified for each power state defined in the DTS,
1313
core enters the lowest possible power state.
1414

15+
choice GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION
16+
prompt "Global domain clock frequency"
17+
default GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_320MHZ
18+
19+
config GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_320MHZ
20+
bool "320MHz"
21+
22+
config GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_256MHZ
23+
bool "256MHz"
24+
25+
config GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_128MHZ
26+
bool "128MHz"
27+
28+
config GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_64MHZ
29+
bool "64MHz"
30+
31+
endchoice
32+
33+
config GLOBAL_DOMAIN_CLOCK_FREQUENCY_MHZ
34+
int
35+
default 320 if GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_320MHZ
36+
default 256 if GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_256MHZ
37+
default 128 if GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_128MHZ
38+
default 64 if GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_64MHZ
39+
1540
source "Kconfig.zephyr"

tests/benchmarks/multicore/idle_pwm_loopback/src/main.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ LOG_MODULE_REGISTER(idle_pwm_loop, LOG_LEVEL_INF);
1212
#include <zephyr/drivers/gpio.h>
1313
#include <zephyr/pm/device_runtime.h>
1414

15+
#if defined(CONFIG_CLOCK_CONTROL)
16+
#include <zephyr/devicetree/clocks.h>
17+
#include <zephyr/drivers/clock_control/nrf_clock_control.h>
18+
#endif
1519

1620
#if !DT_NODE_EXISTS(DT_NODELABEL(pwm_to_gpio_loopback))
1721
#error "Unsupported board: pwm_to_gpio_loopback node is not defined"
@@ -30,6 +34,41 @@ static volatile uint32_t high, low;
3034
static struct k_timer my_timer;
3135
static bool timer_expired;
3236

37+
38+
#if defined(CONFIG_CLOCK_CONTROL)
39+
const struct nrf_clock_spec clk_spec_global_hsfll = {
40+
.frequency = MHZ(CONFIG_GLOBAL_DOMAIN_CLOCK_FREQUENCY_MHZ)
41+
};
42+
43+
/*
44+
* Set Global Domain frequency (HSFLL120)
45+
* based on: CONFIG_GLOBAL_DOMAIN_CLOCK_FREQUENCY_MHZ
46+
*/
47+
void set_global_domain_frequency(void)
48+
{
49+
int err;
50+
int res;
51+
struct onoff_client cli;
52+
const struct device *hsfll_dev = DEVICE_DT_GET(DT_NODELABEL(hsfll120));
53+
54+
printk("Requested frequency [Hz]: %d\n", clk_spec_global_hsfll.frequency);
55+
sys_notify_init_spinwait(&cli.notify);
56+
err = nrf_clock_control_request(hsfll_dev, &clk_spec_global_hsfll, &cli);
57+
printk("Return code: %d\n", err);
58+
__ASSERT_NO_MSG(err < 3);
59+
__ASSERT_NO_MSG(err >= 0);
60+
do {
61+
err = sys_notify_fetch_result(&cli.notify, &res);
62+
k_yield();
63+
} while (err == -EAGAIN);
64+
printk("Clock control request return value: %d\n", err);
65+
printk("Clock control request response code: %d\n", res);
66+
__ASSERT_NO_MSG(err == 0);
67+
__ASSERT_NO_MSG(res == 0);
68+
}
69+
#endif /* CONFIG_CLOCK_CONTROL */
70+
71+
3372
void my_timer_handler(struct k_timer *dummy)
3473
{
3574
timer_expired = true;
@@ -58,6 +97,11 @@ int main(void)
5897
uint32_t tolerance;
5998
int ret;
6099

100+
#if defined(CONFIG_CLOCK_CONTROL)
101+
k_msleep(1000);
102+
set_global_domain_frequency();
103+
#endif
104+
61105
/* Set PWM fill ratio to 50% */
62106
pulse = pwm_out.period >> 1;
63107

tests/benchmarks/multicore/idle_pwm_loopback/testcase.yaml

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
common:
22
sysbuild: true
3-
tags: ci_build ci_tests_benchmarks_multicore
3+
tags:
4+
- ci_build
5+
- ci_tests_benchmarks_multicore
46
platform_allow:
57
- nrf54h20dk/nrf54h20/cpuapp
68
integration_platforms:
@@ -21,10 +23,10 @@ tests:
2123
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.idle:
2224
tags: ppk_power_measure
2325
extra_args:
24-
idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
25-
remote_CONF_FILE=prj_s2ram.conf
26-
idle_pwm_loopback_CONFIG_TEST_SLEEP_DURATION_MS=500
27-
remote_CONFIG_TEST_SLEEP_DURATION_MS=500
26+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
27+
- remote_CONF_FILE=prj_s2ram.conf
28+
- idle_pwm_loopback_CONFIG_TEST_SLEEP_DURATION_MS=500
29+
- remote_CONFIG_TEST_SLEEP_DURATION_MS=500
2830
harness: pytest
2931
harness_config:
3032
fixture: spi_loopback
@@ -34,8 +36,8 @@ tests:
3436
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram:
3537
tags: ppk_power_measure
3638
extra_args:
37-
idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
38-
remote_CONF_FILE=prj_s2ram.conf
39+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
40+
- remote_CONF_FILE=prj_s2ram.conf
3941
harness: pytest
4042
harness_config:
4143
fixture: spi_loopback
@@ -44,7 +46,7 @@ tests:
4446

4547
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.no_sleep_fast:
4648
extra_args:
47-
idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
49+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
4850
harness: console
4951
harness_config:
5052
type: multi_line
@@ -57,23 +59,79 @@ tests:
5759
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.idle_fast:
5860
tags: ppk_power_measure
5961
extra_args:
60-
idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
61-
remote_CONF_FILE=prj_s2ram.conf
62-
idle_pwm_loopback_CONFIG_TEST_SLEEP_DURATION_MS=500
63-
remote_CONFIG_TEST_SLEEP_DURATION_MS=500
64-
idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
62+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
63+
- remote_CONF_FILE=prj_s2ram.conf
64+
- idle_pwm_loopback_CONFIG_TEST_SLEEP_DURATION_MS=500
65+
- remote_CONFIG_TEST_SLEEP_DURATION_MS=500
66+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
6567
harness: pytest
6668
harness_config:
6769
fixture: spi_loopback
6870
pytest_root:
6971
- "${CUSTOM_ROOT_TEST_DIR}/test_measure_power_consumption.py::test_measure_and_data_dump_pwm_and_idle"
7072

71-
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram_fast:
73+
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram_fast.no_clock_control:
7274
tags: ppk_power_measure
7375
extra_args:
74-
idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
75-
remote_CONF_FILE=prj_s2ram.conf
76-
idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
76+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
77+
- remote_CONF_FILE=prj_s2ram.conf
78+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
79+
harness: pytest
80+
harness_config:
81+
fixture: spi_loopback
82+
pytest_root:
83+
- "${CUSTOM_ROOT_TEST_DIR}/test_measure_power_consumption.py::test_measure_and_data_dump_pwm_and_s2ram"
84+
85+
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram_fast.gd_freq_320MHz:
86+
tags: ppk_power_measure
87+
extra_args:
88+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
89+
- remote_CONF_FILE=prj_s2ram.conf
90+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
91+
- idle_pwm_loopback_CONFIG_CLOCK_CONTROL=y
92+
- idle_pwm_loopback_CONFIG_GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_320MHZ=y
93+
harness: pytest
94+
harness_config:
95+
fixture: spi_loopback
96+
pytest_root:
97+
- "${CUSTOM_ROOT_TEST_DIR}/test_measure_power_consumption.py::test_measure_and_data_dump_pwm_and_s2ram"
98+
99+
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram_fast.gd_freq_256MHz:
100+
tags: ppk_power_measure
101+
extra_args:
102+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
103+
- remote_CONF_FILE=prj_s2ram.conf
104+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
105+
- idle_pwm_loopback_CONFIG_CLOCK_CONTROL=y
106+
- idle_pwm_loopback_CONFIG_GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_256MHZ=y
107+
harness: pytest
108+
harness_config:
109+
fixture: spi_loopback
110+
pytest_root:
111+
- "${CUSTOM_ROOT_TEST_DIR}/test_measure_power_consumption.py::test_measure_and_data_dump_pwm_and_s2ram"
112+
113+
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram_fast.gd_freq_128MHz:
114+
tags: ppk_power_measure
115+
extra_args:
116+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
117+
- remote_CONF_FILE=prj_s2ram.conf
118+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
119+
- idle_pwm_loopback_CONFIG_CLOCK_CONTROL=y
120+
- idle_pwm_loopback_CONFIG_GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_128MHZ=y
121+
harness: pytest
122+
harness_config:
123+
fixture: spi_loopback
124+
pytest_root:
125+
- "${CUSTOM_ROOT_TEST_DIR}/test_measure_power_consumption.py::test_measure_and_data_dump_pwm_and_s2ram"
126+
127+
benchmarks.multicore.idle_pwm_loopback.nrf54h20dk_cpuapp_cpurad.s2ram_fast.gd_freq_64MHz:
128+
tags: ppk_power_measure
129+
extra_args:
130+
- idle_pwm_loopback_CONF_FILE=prj_s2ram.conf
131+
- remote_CONF_FILE=prj_s2ram.conf
132+
- idle_pwm_loopback_DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_p7_1.overlay"
133+
- idle_pwm_loopback_CONFIG_CLOCK_CONTROL=y
134+
- idle_pwm_loopback_CONFIG_GLOBAL_DOMAIN_CLOCK_FREQUENCY_OPTION_64MHZ=y
77135
harness: pytest
78136
harness_config:
79137
fixture: spi_loopback

0 commit comments

Comments
 (0)