[PATCH 3/4] arm64: dts: amlogic: t7: khadas-vim4: add the PWM-driven supplies
Neil Armstrong
neil.armstrong at linaro.org
Sun Aug 30 06:01:53 PDT 2026
On 8/29/26 11:47, Lucas Tanure wrote:
> The board powers its two CPU clusters, the GPU, the NPU, the memory and
> the always-on domain from regulators steered by PWM outputs. None of
> them were described, so Linux treated those outputs as unused and
> switched them off part way through boot. The supplies then drifted away
> from the levels the bootloader had set, which showed up as random hangs
> and memory corruption.
>
> Describe each supply so it has an owner and is left alone.
>
> The voltage ranges are read off the feedback networks on the board
> schematic. VDDNPU is deliberately not the range in Amlogic's own
> device tree: this board fits a different feedback resistor, which
> puts it about 40mV higher at both ends.
>
> Fixes: 8c45bf9ae4ef ("arm64: dts: amlogic: t7: khadas-vim4: Add power regulators")
> Assisted-by: Claude:claude-opus-5
> Signed-off-by: Lucas Tanure <tanure at linux.com>
> ---
> .../amlogic/amlogic-t7-a311d2-khadas-vim4.dts | 110 +++++++++++++++++-
> 1 file changed, 109 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/amlogic/amlogic-t7-a311d2-khadas-vim4.dts b/arch/arm64/boot/dts/amlogic/amlogic-t7-a311d2-khadas-vim4.dts
> index c94afaaf8826..77abfd555ec5 100644
> --- a/arch/arm64/boot/dts/amlogic/amlogic-t7-a311d2-khadas-vim4.dts
> +++ b/arch/arm64/boot/dts/amlogic/amlogic-t7-a311d2-khadas-vim4.dts
> @@ -104,6 +104,66 @@ vcc5v0_usb: regulator-vcc-usb {
> enable-active-high;
> };
>
> + vdd_ddr: regulator-vddddr {
> + /*
> + * SY8003ADFC Regulator.
> + */
> + compatible = "pwm-regulator";
> + regulator-name = "VDDDDR";
> + regulator-min-microvolt = <690000>;
> + regulator-max-microvolt = <890000>;
> + pwm-supply = <&dc_in>;
> + pwms = <&pwm_ao_gh 0 1500 0>;
> + pwm-dutycycle-range = <100 0>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + vdd_ee: regulator-vddee {
> + /*
> + * MP8756GD Regulator.
> + */
> + compatible = "pwm-regulator";
> + regulator-name = "VDDEE";
> + regulator-min-microvolt = <700000>;
> + regulator-max-microvolt = <922000>;
> + pwm-supply = <&dc_in>;
> + pwms = <&pwm_ao_ab 0 1500 0>;
> + pwm-dutycycle-range = <100 0>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + vdd_gpu: regulator-vddgpu {
> + /*
> + * SY8003ADFC Regulator.
> + */
> + compatible = "pwm-regulator";
> + regulator-name = "VDDGPU";
> + regulator-min-microvolt = <700000>;
> + regulator-max-microvolt = <922000>;
> + pwm-supply = <&dc_in>;
> + pwms = <&pwm_ao_ef 0 1500 0>;
> + pwm-dutycycle-range = <100 0>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + vdd_npu: regulator-vddnpu {
> + /*
> + * SY8003ADFC Regulator.
> + */
> + compatible = "pwm-regulator";
> + regulator-name = "VDDNPU";
> + regulator-min-microvolt = <733000>;
> + regulator-max-microvolt = <933000>;
> + pwm-supply = <&dc_in>;
> + pwms = <&pwm_ao_ef 1 1500 0>;
> + pwm-dutycycle-range = <100 0>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> vddao_1v8: regulator-vddao-1v8 {
> compatible = "regulator-fixed";
> regulator-name = "VDDAO_1V8";
> @@ -122,6 +182,36 @@ vddao_3v3: regulator-vddao-3v3 {
> regulator-always-on;
> };
>
> + vddcpu_a: regulator-vddcpu-a {
> + /*
> + * MP8756GD Regulator.
> + */
> + compatible = "pwm-regulator";
> + regulator-name = "VDDCPU_A";
> + regulator-min-microvolt = <689000>;
> + regulator-max-microvolt = <1049000>;
> + pwm-supply = <&dc_in>;
> + pwms = <&pwm_ao_cd 1 1500 0>;
> + pwm-dutycycle-range = <100 0>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + vddcpu_b: regulator-vddcpu-b {
> + /*
> + * MP8756GD Regulator.
> + */
> + compatible = "pwm-regulator";
> + regulator-name = "VDDCPU_B";
> + regulator-min-microvolt = <689000>;
> + regulator-max-microvolt = <1049000>;
> + pwm-supply = <&dc_in>;
> + pwms = <&pwm_ao_ab 1 1500 0>;
> + pwm-dutycycle-range = <100 0>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> vddio_1v8: regulator-vddio-1v8 {
> compatible = "regulator-fixed";
> regulator-name = "VDDIO_1V8";
> @@ -172,9 +262,27 @@ &pwm_ab {
> pinctrl-names = "default";
> };
>
> +&pwm_ao_ab {
> + status = "okay";
> + pinctrl-0 = <&pwm_ao_a_pins>, <&pwm_ao_b_pins>;
> + pinctrl-names = "default";
> +};
> +
> &pwm_ao_cd {
> status = "okay";
> - pinctrl-0 = <&pwm_ao_c_d_pins>;
> + pinctrl-0 = <&pwm_ao_c_d_pins>, <&pwm_ao_d_pins>;
> + pinctrl-names = "default";
> +};
> +
> +&pwm_ao_ef {
> + status = "okay";
> + pinctrl-0 = <&pwm_ao_e_pins>, <&pwm_ao_f_pins>;
> + pinctrl-names = "default";
> +};
> +
> +&pwm_ao_gh {
> + status = "okay";
> + pinctrl-0 = <&pwm_ao_g_e_pins>;
> pinctrl-names = "default";
> };
>
Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>
Thanks,
Neil
More information about the linux-amlogic
mailing list