zephyr: move timer domain away from a legacy API

The delayed work API is deprecated, convert to use the replacement
delayable work API.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
This commit is contained in:
Guennadi Liakhovetski 2021-05-07 16:02:54 +02:00 committed by Liam Girdwood
parent f2f75740f5
commit f8172a9b87
1 changed files with 10 additions and 9 deletions

View File

@ -68,7 +68,7 @@ struct timer_domain {
#ifdef __ZEPHYR__
struct timer_zdata {
struct k_delayed_work work;
struct k_work_delayable work;
void (*handler)(void *arg);
void *arg;
};
@ -103,7 +103,8 @@ static inline void timer_report_delay(int id, uint64_t delay)
#ifdef __ZEPHYR__
static void timer_z_handler(struct k_work *work)
{
struct timer_zdata *zd = CONTAINER_OF(work, struct timer_zdata, work);
struct k_work_delayable *dwork = k_work_delayable_from_work(work);
struct timer_zdata *zd = CONTAINER_OF(dwork, struct timer_zdata, work);
zd->handler(zd->arg);
}
@ -160,8 +161,8 @@ static int timer_domain_register(struct ll_schedule_domain *domain,
zdata[core].handler = handler;
zdata[core].arg = arg;
k_work_q_start(&timer_domain->ll_workq[core], stack,
ZEPHYR_LL_WORKQ_SIZE, -CONFIG_NUM_COOP_PRIORITIES);
k_work_queue_start(&timer_domain->ll_workq[core], stack,
ZEPHYR_LL_WORKQ_SIZE, -CONFIG_NUM_COOP_PRIORITIES, NULL);
thread = &timer_domain->ll_workq[core].thread;
@ -175,7 +176,7 @@ static int timer_domain_register(struct ll_schedule_domain *domain,
timer_domain->ll_workq_registered[core] = 1;
k_delayed_work_init(&zdata[core].work, timer_z_handler);
k_work_init_delayable(&zdata[core].work, timer_z_handler);
#else
/* tasks already registered on this core */
@ -280,15 +281,15 @@ static void timer_domain_set(struct ll_schedule_domain *domain, uint64_t start)
/* using K_CYC(ticks_delta - 885) brings "requested - set" to about 180-700
* cycles, audio sounds very slow and distorted.
*/
ret = k_delayed_work_submit_to_queue(&timer_domain->ll_workq[core],
&zdata[core].work,
K_CYC(ticks_delta - ZEPHYR_SCHED_COST));
ret = k_work_reschedule_for_queue(&timer_domain->ll_workq[core],
&zdata[core].work,
K_CYC(ticks_delta - ZEPHYR_SCHED_COST));
if (ret < 0) {
tr_err(&ll_tr, "queue submission error %d", ret);
return;
}
ticks_set = k_delayed_work_remaining_ticks(&zdata[core].work) * CYC_PER_TICK +
ticks_set = k_work_delayable_remaining_get(&zdata[core].work) * CYC_PER_TICK +
current - current % CYC_PER_TICK;
#endif