Skip to content

Commit

Permalink
Bluetooth: Controller: Update Zephyr PM policy function call parameter.
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
KyraLengfeld authored and rlubos committed Oct 4, 2024
1 parent ca2219e commit f7258d0
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 18 deletions.
16 changes: 7 additions & 9 deletions subsys/mpsl/pm/mpsl_pm_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down
17 changes: 8 additions & 9 deletions tests/subsys/mpsl/pm/pm_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
#include <zephyr/kernel.h>


#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)
Expand Down Expand Up @@ -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},
Expand All @@ -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},
Expand All @@ -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},
Expand All @@ -254,15 +253,15 @@ 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},
EVENT_FUNC_NONE, 0,
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));
Expand All @@ -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},
Expand Down

0 comments on commit f7258d0

Please sign in to comment.