mirror of https://github.com/thesofproject/sof.git
wait: add a function to wait for a register ready by pulling method
The register status is checked by polling its value in request time Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
This commit is contained in:
parent
3b966f3d57
commit
a2f0dd0931
|
@ -36,6 +36,7 @@
|
|||
#include <stdint.h>
|
||||
#include <errno.h>
|
||||
#include <arch/wait.h>
|
||||
#include <sof/io.h>
|
||||
#include <sof/debug.h>
|
||||
#include <sof/work.h>
|
||||
#include <sof/timer.h>
|
||||
|
@ -186,4 +187,27 @@ static inline int poll_for_completion_delay(completion_t *comp, uint64_t us)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int poll_for_register_delay(uint32_t reg,
|
||||
uint32_t mask,
|
||||
uint32_t val, uint64_t us)
|
||||
{
|
||||
uint64_t tick = clock_us_to_ticks(CLK_CPU, us);
|
||||
uint32_t tries = DEFAULT_TRY_TIMES;
|
||||
uint64_t delta = tick / tries;
|
||||
|
||||
if (!delta) {
|
||||
delta = us;
|
||||
tries = 1;
|
||||
}
|
||||
|
||||
while ((io_reg_read(reg) & mask) != val) {
|
||||
if (!tries--) {
|
||||
trace_error(TRACE_CLASS_WAIT, "ewt");
|
||||
return -EIO;
|
||||
}
|
||||
wait_delay(delta);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue