-
Notifications
You must be signed in to change notification settings - Fork 6.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tests: pm: Adding tests based on new approach to PM testing. #80692
base: main
Are you sure you want to change the base?
tests: pm: Adding tests based on new approach to PM testing. #80692
Conversation
bb6e11e
to
cc760a2
Compare
data = current_measurement_output | ||
# Empirical RMS values in mA with descriptive keys | ||
rms_expected = { | ||
"k_cpu_idle":57.0, # K_cpu_idle |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we move those expected data to a yaml file for different platform?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Of course we can, the good hint. Thank you.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PS: Btw, Please take a look. #80989. Feel free to share ideas or warries. :)
while (1) { | ||
printk("\nGoing to k_cpu_idle.\n"); | ||
k_msleep(400); | ||
printk("\nWake Up.\n"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we use this tests\subsys\pm\power_mgmt_soc\src\power_mgmt.c, instead of the sleep time?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know yet, let me see.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, get the information from the device tree is the way to go imho, otherwise it will not be portable and the previous comment is useless.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ceolin I added the use of DTS, is this what you meant?
@@ -0,0 +1,30 @@ | |||
# Copyright (c) 2024 Intel Corporation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
would this be better to move this function to scripts/pm/pm_helper.py, and rms is not the only implement, e.g. we can have average mean
f959bb2
to
980a943
Compare
1f00e48
to
69e3a4f
Compare
2525c2f
to
dc18404
Compare
@hakehuang I've moved the hardcoded expected value to the appropriate yaml file. Please take a look. |
dc18404
to
cbc99c3
Compare
Introduces scripts for powerShiled on stm32l562e_dk board. Adds three new power management pytests based on a new approach. Signed-off-by: Arkadiusz Cholewinski <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good
pytest_args: [--powershield=<path_to>/STMicroelectronics_PowerShield__Virtual_ComPort, | ||
--expected-values=<path_to>/stm32l562e_dk.yaml] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IIUC these need to be set manually before testing, right ?
Any way we can spare the need for manual update ?
At least, <path_to>/stm32l562e_dk.yaml
is rather static, so it looks reachable.
For <path_to>/STMicroelectronics_PowerShield__Virtual_ComPort
maybe a dedicated twister configuration could be used or added ?
I believe the approach in this PR is too highly coupled to pm power states, a specific power monitor, and a specific test case. Measuring current/power or anything else is "generic", its measured in SI units, and can be performed by an "endless" variation of probes. I compare measuring power with "any probe" to flashing a board with "any runner", be it jlink, openocd, pyocd, or whatever. I believe it can and should be as simple to define a testcase requiring power measurements as this
The measurements could be anything, a mode, some peripheral being on, like a comparator in low power mode:
and that specific probes, like runners, should be defined like This is important, as the test case should not depend on any specific probe, if one developer has a This PR keeps a bunch of this local, using pytest, but I don't think that is a nice, scalable approach to power measurements. |
Introduces two scripts
abstract_power_monitor.py
andpwsh_stm32l562.py
.Adds three new power management pytests based on a new approach.
SETUP
TESTS
pm.states: Verifies the transition to all available power states on
stm32l562e_dk
.During the test, pytest detects each step and calculates the RMS (Root Mean Square) current for every detected state. The test then compares the calculated RMS values against the expected values, which have been determined manually through experimental observation
pm.residency_time: Tests the residency time of each power state.
This test evaluates the residency time of different power states on the
stm32l562e_dk
board.pm.wakeup_timer: Tests the RTC alarm’s ability to wake the CPU from the lowest power state.
Each test calculates RMS current values for each detected state and compares them to expected values, which were manually set based on experimental data.
To Reproduce
Power Monitor: e.g.,
/dev/ttyACM0
or/dev/serial/by-id/usb-STMicroelectronics_PowerShield__Virtual_ComPort_in_FS_Mode__FFFFFFFEFFFF-if00
Target: e.g.,
/dev/ttyACM1
or/dev/serial/by-id/usb-STMicroelectronics_STLINK-V3_004##############39-if02
<path_to_power_monitor>
in thetests/subsys/pm/power_states/testcase.yaml
file under the pytest_args section as follows:pytest_args: [--powershield=<path_to_power_monitor>]
twister --device-testing --device-serial <path_to_target> -p stm32l562e_dk -s <test_name> -x=CONFIG_BOOT_DELAY=500