From d4214b56d427daabc733c399763d6e28f26dea60 Mon Sep 17 00:00:00 2001 From: Kyra Lengfeld Date: Mon, 30 Sep 2024 08:17:28 +0200 Subject: [PATCH] Bluetooth: Controller: Update Zephyr PM policy function call parameter. 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 --- subsys/mpsl/pm/mpsl_pm_utils.c | 16 +++++++--------- tests/subsys/mpsl/pm/pm_test.c | 17 ++++++++--------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/subsys/mpsl/pm/mpsl_pm_utils.c b/subsys/mpsl/pm/mpsl_pm_utils.c index c606bf261bed..9e5925d7003a 100644 --- a/subsys/mpsl/pm/mpsl_pm_utils.c +++ b/subsys/mpsl/pm/mpsl_pm_utils.c @@ -20,9 +20,8 @@ LOG_MODULE_REGISTER(mpsl_pm_utils, CONFIG_MPSL_LOG_LEVEL); * absolute time instead of relative time. This would remove the need for safety * margins and allow optimal power savings. */ -#define MAX_DELAY_SINCE_READING_PARAMS_US 50 #define TIME_TO_REGISTER_EVENT_IN_ZEPHYR_US 1000 -#define PM_MAX_LATENCY_HCI_COMMANDS_US 4999999 +#define PM_MAX_LATENCY_HCI_COMMANDS_US 499999 static void m_work_handler(struct k_work *work); static K_WORK_DELAYABLE_DEFINE(pm_work, m_work_handler); @@ -71,22 +70,21 @@ void mpsl_pm_utils_work_handler(void) } case MPSL_PM_EVENT_STATE_BEFORE_EVENT: { - /* Event scheduled */ - uint64_t event_time_us = params.event_time_rel_us - - MAX_DELAY_SINCE_READING_PARAMS_US; - /* 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) { mpsl_work_schedule(&pm_work, K_USEC(RETRY_TIME_MAX_US)); return; } if (m_pm_event_is_registered) { - pm_policy_event_update(&m_evt, event_time_us); + pm_policy_event_update(&m_evt, + k_us_to_cyc_floor32(params.event_time_abs_us)); } else { - pm_policy_event_register(&m_evt, event_time_us); + pm_policy_event_register(&m_evt, + k_us_to_cyc_floor32(params.event_time_abs_us)); m_pm_event_is_registered = true; } break; diff --git a/tests/subsys/mpsl/pm/pm_test.c b/tests/subsys/mpsl/pm/pm_test.c index ce8ff4ed4536..c0e81dfb73db 100644 --- a/tests/subsys/mpsl/pm/pm_test.c +++ b/tests/subsys/mpsl/pm/pm_test.c @@ -19,8 +19,7 @@ #include -#define PM_MAX_LATENCY_HCI_COMMANDS_US 4999999 -#define MAX_DELAY_SINCE_READING_PARAMS_US 50 +#define PM_MAX_LATENCY_HCI_COMMANDS_US 499999 #define TIME_TO_REGISTER_EVENT_IN_ZEPHYR_US 1000 #define RETRY_TIME_MAX_US (UINT32_MAX - TIME_TO_REGISTER_EVENT_IN_ZEPHYR_US) @@ -185,7 +184,7 @@ void test_register_and_derigster_event(void) LATENCY_FUNC_REGISTER, PM_MAX_LATENCY_HCI_COMMANDS_US}, /* Register event. */ {false, true, {10000, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 1}, - EVENT_FUNC_REGISTER, 10000 - MAX_DELAY_SINCE_READING_PARAMS_US, + EVENT_FUNC_REGISTER, 10000, LATENCY_FUNC_NONE, 0}, /* Deregister event. */ {false, true, {0, MPSL_PM_EVENT_STATE_NO_EVENTS_LEFT, 2}, @@ -204,7 +203,7 @@ void test_register_enter_and_derigster_event(void) LATENCY_FUNC_REGISTER, PM_MAX_LATENCY_HCI_COMMANDS_US}, /* Register event. */ {false, true, {10000, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 1}, - EVENT_FUNC_REGISTER, 10000 - MAX_DELAY_SINCE_READING_PARAMS_US, + EVENT_FUNC_REGISTER, 10000, LATENCY_FUNC_NONE, 0}, /* Pretend to be in event */ {false, true, {0, MPSL_PM_EVENT_STATE_IN_EVENT, 2}, @@ -227,11 +226,11 @@ void test_register_update_enter_and_deregister_event(void) LATENCY_FUNC_REGISTER, PM_MAX_LATENCY_HCI_COMMANDS_US}, /* Register event. */ {false, true, {10000, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 1}, - EVENT_FUNC_REGISTER, 10000 - MAX_DELAY_SINCE_READING_PARAMS_US, + EVENT_FUNC_REGISTER, 10000, LATENCY_FUNC_NONE, 0}, /* Update event. */ {false, true, {15000, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 2}, - EVENT_FUNC_UPDATE, 15000 - MAX_DELAY_SINCE_READING_PARAMS_US, + EVENT_FUNC_UPDATE, 15000, LATENCY_FUNC_NONE, 0}, /* Pretend to be in event */ {false, true, {0, MPSL_PM_EVENT_STATE_IN_EVENT, 3}, @@ -254,7 +253,7 @@ void test_register_enter_and_update_event(void) LATENCY_FUNC_REGISTER, PM_MAX_LATENCY_HCI_COMMANDS_US}, /* Register event. */ {false, true, {10000, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 1}, - EVENT_FUNC_REGISTER, 10000 - MAX_DELAY_SINCE_READING_PARAMS_US, + EVENT_FUNC_REGISTER, 10000, LATENCY_FUNC_NONE, 0}, /* Pretend to be in event */ {false, true, {0, MPSL_PM_EVENT_STATE_IN_EVENT, 2}, @@ -262,7 +261,7 @@ void test_register_enter_and_update_event(void) LATENCY_FUNC_UPDATE, 0}, /* Update event (before we get the state no events left). */ {false, true, {15000, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 3}, - EVENT_FUNC_UPDATE, 15000 - MAX_DELAY_SINCE_READING_PARAMS_US, + EVENT_FUNC_UPDATE, 15000, LATENCY_FUNC_UPDATE, PM_MAX_LATENCY_HCI_COMMANDS_US}, }; run_test(&test_vectors[0], ARRAY_SIZE(test_vectors)); @@ -289,7 +288,7 @@ void test_event_delayed_work(void) {false, true, {retry_evt_time - RETRY_TIME_MAX_US - RETRY_TIME_MAX_US, MPSL_PM_EVENT_STATE_BEFORE_EVENT, 3}, EVENT_FUNC_REGISTER, retry_evt_time - RETRY_TIME_MAX_US - - RETRY_TIME_MAX_US - MAX_DELAY_SINCE_READING_PARAMS_US, + RETRY_TIME_MAX_US, LATENCY_FUNC_NONE, 0}, /* Pretend to be in event */ {false, true, {0, MPSL_PM_EVENT_STATE_IN_EVENT, 4},