ARM BCM53573 SoC hangs/lockups caused by locks/clock/random changes

Linus Walleij linus.walleij at linaro.org
Fri Sep 8 01:10:55 PDT 2023


Hi Rafal,

On Mon, Sep 4, 2023 at 10:34 AM Rafał Miłecki <zajec5 at gmail.com> wrote:

> I'm clueless at this point.
> Maybe someone can come up with an idea of actual issue & ideally a
> solution.

Damn this is frustrating.

> 2. Clock (arm,armv7-timer)
>
> While comparing main clock in Broadcom's SDK with upstream one I noticed
> a tiny difference: mask value. I don't know it it makes any sense but
> switching from CLOCKSOURCE_MASK(56) to CLOCKSOURCE_MASK(64) in
> arm_arch_timer.c (to match SDK) increases average uptime (time before a
> hang/lockup happens) from 4 minutes to 36 minutes.

This could be related to how often the system goes to idle.

> +       if (cpu_idle_force_poll == 1234)
> +               arch_cpu_idle();
> +       if (cpu_idle_force_poll == 5678)
> +               arch_cpu_idle();
> +       if (cpu_idle_force_poll == 1234)
> +               arch_cpu_idle();
> +       if (cpu_idle_force_poll == 5678)
> +               arch_cpu_idle();
> +       if (cpu_idle_force_poll == 1234)
> +               arch_cpu_idle();
> +       if (cpu_idle_force_poll == 5678)
> +               arch_cpu_idle();
> +       if (cpu_idle_force_poll == 1234)
> +               arch_cpu_idle();

Idle again.

I would have tried to see what arch_cpu_idle() is doing.

arm_pm_idle() or cpu_do_idle()?

What happens if you just put return in arch_cpu_idle()
so it does nothing?

Yours,
Linus Walleij



More information about the openwrt-devel mailing list