diff --git a/src/idc/idc.c b/src/idc/idc.c index 3661900164b2..7fe0988788ea 100644 --- a/src/idc/idc.c +++ b/src/idc/idc.c @@ -88,7 +88,7 @@ int idc_wait_in_blocking_mode(uint32_t target_core, bool (*cond)(int)) while (!cond(target_core)) { /* spin here so other core can access IO and timers freely */ - idelay(8192); + wait_delay(8192); if (deadline < sof_cycle_get_64()) break; diff --git a/src/samples/audio/detect_test.c b/src/samples/audio/detect_test.c index 0b7d12d8914c..35270b60f275 100644 --- a/src/samples/audio/detect_test.c +++ b/src/samples/audio/detect_test.c @@ -223,7 +223,7 @@ static void default_detect_test(struct comp_dev *dev, /* assuming count is a processing frame size in samples */ cycles_per_frame = (cd->config.load_mips * 1000000 * count) / audio_stream_get_rate(source); - idelay(cycles_per_frame); + wait_delay(cycles_per_frame); } /* perform detection within current period */ diff --git a/zephyr/include/rtos/wait.h b/zephyr/include/rtos/wait.h index f57e963fd1ed..4741e0c9aa8c 100644 --- a/zephyr/include/rtos/wait.h +++ b/zephyr/include/rtos/wait.h @@ -11,34 +11,22 @@ #include #include #include +#include #include -/* TODO: use equivalent Zephyr */ -static inline void idelay(int n) +static inline void wait_delay_us(uint64_t us) { - while (n--) - __asm__ volatile("nop"); + k_busy_wait(us); } -/* DSP default delay in cycles - all platforms use this today */ -#define PLATFORM_DEFAULT_DELAY 12 - static inline void wait_delay(uint64_t number_of_clks) { - uint64_t timeout = sof_cycle_get_64() + number_of_clks; - - while (sof_cycle_get_64() < timeout) - idelay(PLATFORM_DEFAULT_DELAY); + k_busy_wait(k_cyc_to_us_floor64(number_of_clks)); } static inline void wait_delay_ms(uint64_t ms) { - wait_delay(k_ms_to_cyc_ceil64(ms)); -} - -static inline void wait_delay_us(uint64_t us) -{ - wait_delay(k_us_to_cyc_ceil64(us)); + k_busy_wait(ms * 1000); } int poll_for_register_delay(uint32_t reg, uint32_t mask, diff --git a/zephyr/lib/cpu.c b/zephyr/lib/cpu.c index ef6ad5529f89..79946cc039f1 100644 --- a/zephyr/lib/cpu.c +++ b/zephyr/lib/cpu.c @@ -235,7 +235,7 @@ void cpu_disable_core(int id) /* Waiting for secondary core to enter idle state */ while (arch_cpu_active(id) && (k_cycle_get_64() < timeout)) - idelay(PLATFORM_DEFAULT_DELAY); + k_busy_wait(1); if (arch_cpu_active(id)) { tr_err(&zephyr_tr, "core %d did not enter idle state", id);