On 7/23/26 10:41 PM, Emanuele Ghidoli wrote:
On 7/23/26 20:35, Marek Vasut wrote:
On 7/23/26 4:53 PM, Emanuele Ghidoli wrote:
Hello everyone,
I found that Colibri iMX7 no longer boots when commit 9c1b13b3fd27
("cyclic: reduce get_timer_us() calls inside hlist_for_each_entry_safe()")
is applied. Nothing is printed on the serial.
I bisected the issue: booting the parent commit works fine, and
reverting this patch on top of current main also restores
boot. It's not yet obvious to me what in this change causes the
regression.
Would it make sense to revert it until the root cause is found?
Give Patrice a bit of time to analyze the problem.
Hello,
after the regression, get_timer_us() is called on every cyclic_run() call,
even when the cyclic list is empty. On imx7 this happens earlier than before,
when the timer has not yet been initialized: get_timer_us() calls get_tbclk(),
whose value is zero, and uses it as a divisor in tick_to_time_us(), leading to
a division by zero.
I would fix this by ensuring get_tbclk() returns at least 1 on imx7, but we
could hide bugs in this way. However, this bug could also be present on other
architectures, so I would just guard against entering the cyclic loop by
checking whether the list is empty before doing anything else, so
get_timer_us() is called "at the same point in time" as before.
Something like:
if (hlist_empty(cyclic_get_list())) {
gd->flags &= ~GD_FLG_CYCLIC_RUNNING;
return;
}
It looks like there are two topics -- optimize the cyclic run and fix
the MX7 timer.
I agree the cyclic run should exit if the list is empty, but please wait
for input from Rasmus on that.
Regarding the timer, how come the timer is initialized so late on MX7 ?
The Cortex-A7 should have its own ARM timer, that should be available
right from the beginning. Is that ARM timer in use on your system, or
does your system use GPT timer ?
Which board is this ?
+CC Peng