summaryrefslogtreecommitdiffstats
path: root/drivers/clk/socfpga
diff options
context:
space:
mode:
authorAidan MacDonald <aidanmacdonald.0x0@gmail.com>2022-06-17 13:22:54 +0100
committerStephen Boyd <sboyd@kernel.org>2022-08-31 18:28:20 -0700
commit6726d552a6912e88cf63fe2bda87b2efa0efc7d0 (patch)
treeace0c32df47e554166f4e75e6b3a224cad60c276 /drivers/clk/socfpga
parentabb5f3f4b1f5f0ad50eb067a00051d3587dec9fb (diff)
downloadlinux-6726d552a6912e88cf63fe2bda87b2efa0efc7d0.tar.gz
linux-6726d552a6912e88cf63fe2bda87b2efa0efc7d0.tar.bz2
linux-6726d552a6912e88cf63fe2bda87b2efa0efc7d0.zip
clk: ingenic-tcu: Properly enable registers before accessing timers
Access to registers is guarded by ingenic_tcu_{enable,disable}_regs() so the stop bit can be cleared before accessing a timer channel, but those functions did not clear the stop bit on SoCs with a global TCU clock gate. Testing on the X1000 has revealed that the stop bits must be cleared _and_ the global TCU clock must be ungated to access timer registers. This appears to be the norm on Ingenic SoCs, and is specified in the documentation for the X1000 and numerous JZ47xx SoCs. If the stop bit isn't cleared, register writes don't take effect and the system can be left in a broken state, eg. the watchdog timer may not run. The bug probably went unnoticed because stop bits are zeroed when the SoC is reset, and the kernel does not set them unless a timer gets disabled at runtime. However, it is possible that a bootloader or a previous kernel (if using kexec) leaves the stop bits set and we should not rely on them being cleared. Fixing this is easy: have ingenic_tcu_{enable,disable}_regs() always clear the stop bit, regardless of the presence of a global TCU gate. Reviewed-by: Paul Cercueil <paul@crapouillou.net> Tested-by: Paul Cercueil <paul@crapouillou.net> Fixes: 4f89e4b8f121 ("clk: ingenic: Add driver for the TCU clocks") Cc: stable@vger.kernel.org Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com> Link: https://lore.kernel.org/r/20220617122254.738900-1-aidanmacdonald.0x0@gmail.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Diffstat (limited to 'drivers/clk/socfpga')
0 files changed, 0 insertions, 0 deletions