Skip to content

arm64: amlogic: t7: describe the VIM4 supplies and keep the fabric clocks running

Lucas Tanure linux-amlogic linux-arm-kernel linux-clk linux-devicetree lkml 1 version Applied

Status from this message: Applied to clk-meson (clk-meson-next), thanks!

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest4 patches 7 repliesApplied

Patches in v1 Applied

#Subject and filesSizeRepliesApplied
1/4clk: meson: t7: keep the memory fabric clocks runningdrivers/clk/meson/t7-peripherals.c+9 -40 replies
2/4arm64: dts: amlogic: t7: fix the pin groups of two PWM outputsarch/arm64/boot/dts/amlogic/amlogic-t7.dtsi+28 -41 reply
3/4arm64: dts: amlogic: t7: khadas-vim4: add the PWM-driven suppliesarch/arm64/boot/dts/amlogic/amlogic-t7-a311d2-khadas-vim4.dts+109 -11 reply
4/4arm64: dts: amlogic: t7: fix the pin groups of the vsync PWMarch/arm64/boot/dts/amlogic/amlogic-t7.dtsi+10 -21 reply

Reviews trailers per patch

3 of 4 patches have a Reviewed-by or Acked-by.

PatchNeil Armstrong
1/4
2/4R-b
3/4R-b
4/4R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 0/4] arm64: amlogic: t7: describe the VIM4 supplies and keep the fabric clocks running

The Khadas VIM4 has needed clk_ignore_unused to boot reliably. Without it the board hangs at random, loses storage and corrupts memory, and the failures move around from boot to boot.

Six of the SoC's PWM outputs drive the board's voltage regulators: the always-on domain, both CPU clusters, the GPU, the NPU and the DRAM. None of them were described, so Linux saw the outputs as unused and switched them off about a second into boot. The regulators then drifted away from the levels the bootloader had set, which is where the corruption and the random hangs came from.
Thanks to Chuan Liu from Amlogic for helping me indetify which clocks are critical.

Separately, four clocks feed the bus that carries data between the peripherals and memory. Nothing claims those either, and switching them off leaves any device that starts a transfer afterwards stuck. The SD card comes up about two seconds into boot, so it was the visible victim.

Two of the patches are pin group fixes. The description named groups that do not exist in the pinctrl driver, so anything referencing them refused to probe. That is what the supplies patch needs in order to work, and it had a second effect worth mentioning: the failing probe left one device unbound, which kept the clock controller's sync_state() deferred forever and quietly stopped every peripheral clock from ever being switched off. The board looked healthy for entirely the wrong reason.

Tested on a VIM4 booting from SD with no clk_ignore_unused: 74 clocks are still switched off, but the card enumerates and the root filesystem mounts and memtest runs clean over 512 MiB.

Thread about these issues in Vim4:

https://lore.kernel.org/linux-clk/[email protected]/

Lucas Tanure (4):
clk: meson: t7: keep the memory fabric clocks running
arm64: dts: amlogic: t7: fix the pin groups of two PWM outputs
arm64: dts: amlogic: t7: khadas-vim4: add the PWM-driven supplies
arm64: dts: amlogic: t7: fix the pin groups of the vsync PWM

 .../amlogic/amlogic-t7-a311d2-khadas-vim4.dts | 110 +++++++++++++++++-
 arch/arm64/boot/dts/amlogic/amlogic-t7.dtsi   |  44 ++++++-
 drivers/clk/meson/t7-peripherals.c            |  13 ++-
 3 files changed, 156 insertions(+), 11 deletions(-)
Signature · 1 line
2.55.0