diff options
| author | Alastair D'Silva <alastair@d-silva.org> | 2026-09-16 14:29:10 +1000 |
|---|---|---|
| committer | Chen-Yu Tsai <wens@kernel.org> | 2026-09-20 17:32:54 +0800 |
| commit | 9ef62592b80c7ffb8cd987d889f659c1dc4f9f16 (patch) | |
| tree | 290e95d2f743cdf173817111ba23355bbc842b18 /include/uapi/linux | |
| parent | 1002cc9d60942f8f294d8de7f2805f82f4ebdda0 (diff) | |
| download | linux-next-9ef62592b80c7ffb8cd987d889f659c1dc4f9f16.tar.gz linux-next-9ef62592b80c7ffb8cd987d889f659c1dc4f9f16.zip | |
clk: sunxi-ng: ccu_common: Use readl_relaxed_poll_timeout_atomic for PLL lock
The Allwinner sunxi-ng CCU driver currently uses
readl_relaxed_poll_timeout() in ccu_helper_wait_for_lock() to wait for
PLLs to lock.
This non-atomic poll macro relies on ktime_get() and the kernel
timekeeping infrastructure. During early boot or sensitive clock
transitions (such as CPUfreq DVFS scaling) where timer interrupts or
timekeeping may be suspended or unstable, ktime_get() fails to advance.
This turns the timeout calculation into an infinite busy-wait loop,
causing RCU stalls and system freezes if the PLL lock bit does not
assert immediately.
Switch to readl_relaxed_poll_timeout_atomic(). This atomic variant relies
on udelay() rather than timekeeping, making it safe to execute even when
timekeeping is suspended or uninitialized.
Assisted-by: LLM
Signed-off-by: Alastair D'Silva <alastair@d-silva.org>
Link: https://patch.msgid.link/20260916042910.382744-1-alastair@d-silva.org
Signed-off-by: Chen-Yu Tsai <wens@kernel.org>
Diffstat (limited to 'include/uapi/linux')
0 files changed, 0 insertions, 0 deletions
