Skip to content
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

Bluetooth: Controller: Update Zephyr PM policy function call parameter. #17543

Merged
merged 1 commit into from
Oct 4, 2024

Conversation

KyraLengfeld
Copy link
Contributor

This commit changes the input parameter of event time from relative to absolute time according to recent Zephyr RTOS changes. As an upmerge is imminent and we don't have any system tests in place, this can be merged as is.

@KyraLengfeld KyraLengfeld requested a review from a team as a code owner September 30, 2024 06:34
@github-actions github-actions bot added the changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. label Sep 30, 2024
@NordicBuilder
Copy link
Contributor

NordicBuilder commented Sep 30, 2024

CI Information

To view the history of this post, clich the 'edited' button above
Build number: 4

Inputs:

Sources:

sdk-nrf: PR head: d4214b56d427daabc733c399763d6e28f26dea60

more details

sdk-nrf:

PR head: d4214b56d427daabc733c399763d6e28f26dea60
merge base: ca2219e2b85e60fd6e9d948f0f059eeb97dd27a3
target head (main): ca2219e2b85e60fd6e9d948f0f059eeb97dd27a3
Diff

Github labels

Enabled Name Description
ci-disabled Disable the ci execution
ci-all-test Run all of ci, no test spec filtering will be done
ci-force-downstream Force execution of downstream even if twister fails
ci-run-twister Force run twister
ci-run-zephyr-twister Force run zephyr twister
List of changed files detected by CI (2)
subsys
│  ├── mpsl
│  │  ├── pm
│  │  │  │ mpsl_pm_utils.c
tests
│  ├── subsys
│  │  ├── mpsl
│  │  │  ├── pm
│  │  │  │  │ pm_test.c

Outputs:

Toolchain

Version: 9583beca34
Build docker image: docker-dtr.nordicsemi.no/sw-production/ncs-build:9583beca34_81ed5a52d6

Test Spec & Results: ✅ Success; ❌ Failure; 🟠 Queued; 🟡 Progress; ◻️ Skipped; ⚠️ Quarantine

  • ◻️ Toolchain - Skipped: existing toolchain is used
  • ✅ Build twister
    • sdk-nrf test count: 811
  • ❌ Integration tests
    • ❌ test_ble_nrf_config
    • ✅ test-fw-nrfconnect-ble_samples
    • ❌ test-fw-nrfconnect-chip
    • ✅ test-fw-nrfconnect-rs
    • ✅ test-fw-nrfconnect-fem
    • ✅ test-fw-nrfconnect-thread
    • ✅ test-fw-nrfconnect-zigbee
    • ✅ test-sdk-find-my
Disabled integration tests
    • desktop52_verification
    • doc-internal
    • test-fw-nrfconnect-apps
    • test-fw-nrfconnect-ble_mesh
    • test-fw-nrfconnect-boot
    • test-fw-nrfconnect-nfc
    • test-fw-nrfconnect-nrf-iot_cloud
    • test-fw-nrfconnect-nrf-iot_libmodem-nrf
    • test-fw-nrfconnect-nrf-iot_lwm2m
    • test-fw-nrfconnect-nrf-iot_mosh
    • test-fw-nrfconnect-nrf-iot_nrf_provisioning
    • test-fw-nrfconnect-nrf-iot_positioning
    • test-fw-nrfconnect-nrf-iot_samples
    • test-fw-nrfconnect-nrf-iot_serial_lte_modem
    • test-fw-nrfconnect-nrf-iot_thingy91
    • test-fw-nrfconnect-nrf-iot_zephyr_lwm2m
    • test-fw-nrfconnect-nrf_crypto
    • test-fw-nrfconnect-proprietary_esb
    • test-fw-nrfconnect-ps
    • test-fw-nrfconnect-rpc
    • test-fw-nrfconnect-tfm
    • test-low-level
    • test-sdk-audio
    • test-sdk-dfu
    • test-sdk-mcuboot
    • test-sdk-pmic-samples
    • test-sdk-sidewalk
    • test-sdk-wifi
    • test-secdom-samples-public

Note: This message is automatically posted and updated by the CI

@KyraLengfeld KyraLengfeld force-pushed the fix_pm_nrf_implementation branch 2 times, most recently from 7f694ad to de0b665 Compare October 4, 2024 08:55
This commit changes the input parameter of event time from relative to
absolute time according to recent Zephyr RTOS changes. As an upmerge is
imminent and we don't have any system tests in place, this can be merged
as is.

Signed-off-by: Kyra Lengfeld <[email protected]>
@KyraLengfeld KyraLengfeld force-pushed the fix_pm_nrf_implementation branch from de0b665 to d4214b5 Compare October 4, 2024 10:20
@KyraLengfeld KyraLengfeld removed the DNM label Oct 4, 2024
/* In case we missed a state and are in zero-latency, set low-latency.*/
m_update_latency_request(PM_MAX_LATENCY_HCI_COMMANDS_US);

if (event_time_us > UINT32_MAX) {
/* Event scheduled */
if (params.event_time_abs_us > UINT32_MAX) {
Copy link
Contributor

@knutel-nordic knutel-nordic Oct 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will always be true after 2**32 microseconds. The check was meant to verify that the relative time did not overflow, but does not make sense now.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isnt the parameter to pm_policy_event_update in cycles anyway so does checking if µs overflow make sense?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this check does not make sense now. The old API used relative time in microseconds, hence the check to see if we needed to reschedule registering the event closer to the event time.

Copy link
Contributor Author

@KyraLengfeld KyraLengfeld Oct 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@knutel-nordic is it ok to shift this to a follow up PR? missed that with the MPSL changes now in nrfxlib those UT will fail on nrf main, and are blocking the upmerge. ( merging this PR would fix it)

Copy link
Contributor

@knutel-nordic knutel-nordic Oct 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@KyraLengfeld For the followup PR:

Note that CONFIG_NRF_GRTC_TIMER also selects TIMER_HAS_64BIT_CYCLE_COUNTER, SYS_CLOCK_HW_CYCLES_PER_SEC will be 1000000 and SYS_CLOCK_TICKS_PER_SEC will be 10000. CONFIG_TIMEOUT_64BIT is probably also "y".

This means that in this particular case, 1 cycle is 1 us. The time parameter to pm_policy_event_register etc is 32 bits and will therefore overflow if the event is too far into the future ( close to overflowing, which happens every ~4294 seconds), so we still need to reschedule ourselves closer to the event time and try again.

CONFIG_TIMEOUT_64BIT=y will affect the bit width of the timeout given to mpsl_work_schedule, which will in this case be 64 bits, too. I think we can schedule the retry only once, since (event_time_abs_us - now_us) converted to ticks will not overflow.

Also note that we need to handle running on bsim, and possibly other socs, which has other values for these constants.

Copy link
Contributor

@knutel-nordic knutel-nordic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comment about abs time overflow.

@knutel-nordic
Copy link
Contributor

Discussed offline to remove the overflow check after upmerge.

@rlubos rlubos merged commit f7258d0 into nrfconnect:main Oct 4, 2024
11 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants