Re: [PATCH v2 3/3] arm64: dts: allwinner: h616: Add OrangePi Zero 3 board support

From: Jernej Škrabec
Date: Sat Aug 05 2023 - 02:32:44 EST


Dne sobota, 05. avgust 2023 ob 00:58:27 CEST je Andre Przywara napisal(a):
> On Fri, 04 Aug 2023 21:05:36 +0200
> Jernej Škrabec <jernej.skrabec@xxxxxxxxx> wrote:
>
> Hi Jernej,
>
> > Dne petek, 04. avgust 2023 ob 19:08:56 CEST je Andre Przywara napisal(a):
> > > The OrangePi Zero 3 is a development board based on the Allwinner H618
> > > SoC,
> > > which seems to be just an H616 with more L2 cache. The board itself is a
> > > slightly updated version of the Orange Pi Zero 2. It features:
> > > - Four ARM Cortex-A53 cores, Mali-G31 MP2 GPU
> > > - 1/1.5/2/4 GiB LPDDR4 DRAM SKUs (only up to 1GB on the Zero2)
> > > - AXP313a PMIC (more capable AXP305 on the Zero2)
> > > - Raspberry-Pi-1 compatible GPIO header
> > > - extra 13 pin expansion header, exposing pins for 2x USB 2.0 ports
> > > - 1 USB 2.0 host port
> > > - 1 USB 2.0 type C port (power supply + OTG)
> > > - MicroSD slot
> > > - on-board 16MiB bootable SPI NOR flash (only 2MB on the Zero2)
> > > - 1Gbps Ethernet port (via Motorcomm YT8531 PHY) (RTL8211 on the Zero2)
> > > - micro-HDMI port
> > > - (yet) unsupported Allwinner WiFi/BT chip
> > >
> > > Add the devicetree file describing the currently supported features,
> > > namely LEDs, SD card, PMIC, SPI flash, USB. Ethernet seems unstable at
> > > the moment, though the basic functionality works.
> > >
> > > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
> > > ---
> > >
> > > arch/arm64/boot/dts/allwinner/Makefile | 1 +
> > > .../allwinner/sun50i-h618-orangepi-zero3.dts | 94 +++++++++++++++++++
> > > 2 files changed, 95 insertions(+)
> > > create mode 100644
> > >
> > > arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts
> > >
> > > diff --git a/arch/arm64/boot/dts/allwinner/Makefile
> > > b/arch/arm64/boot/dts/allwinner/Makefile index
> > > 6a96494a2e0a3..3b0ad54062381
> > > 100644
> > > --- a/arch/arm64/boot/dts/allwinner/Makefile
> > > +++ b/arch/arm64/boot/dts/allwinner/Makefile
> > > @@ -40,3 +40,4 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb
> > >
> > > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb
> > > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb
> > > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb
> > >
> > > +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-orangepi-zero3.dtb
> > > diff --git
> > > a/arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts
> > > b/arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts new file
> > > mode 100644
> > > index 0000000000000..96a6851728111
> > > --- /dev/null
> > > +++ b/arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts
> > > @@ -0,0 +1,94 @@
> > > +// SPDX-License-Identifier: (GPL-2.0+ or MIT)
> > > +/*
> > > + * Copyright (C) 2023 Arm Ltd.
> > > + */
> > > +
> > > +/dts-v1/;
> > > +
> > > +#include "sun50i-h616-orangepi-zero.dtsi"
> > > +
> > > +/ {
> > > + model = "OrangePi Zero3";
> > > + compatible = "xunlong,orangepi-zero3", "allwinner,sun50i-h618";
> > > +};
> > > +
> > > +&emac0 {
> > > + phy-supply = <&reg_dldo1>;
> > > +};
> > > +
> > > +&ext_rgmii_phy {
> > > + motorcomm,clk-out-frequency-hz = <125000000>;
> > > +};
> > > +
> > > +&mmc0 {
> > > + /*
> > > + * The schematic shows the card detect pin wired up to PF6, via an
> > > + * inverter, but it just doesn't work.
> > > + */
> > > + broken-cd;
> > > + vmmc-supply = <&reg_dldo1>;
> > > +};
> > > +
> > > +&r_i2c {
> > > + status = "okay";
> > > +
> > > + axp313: pmic@36 {
> > > + compatible = "x-powers,axp313a";
> > > + reg = <0x36>;
> > > + #interrupt-cells = <1>;
> > > + interrupt-controller;
> > > + interrupt-parent = <&pio>;
> > > + interrupts = <2 9 IRQ_TYPE_LEVEL_LOW>; /* PC9
*/
> > > +
> > > + vin1-supply = <&reg_vcc5v>;
> > > + vin2-supply = <&reg_vcc5v>;
> > > + vin3-supply = <&reg_vcc5v>;
> > > +
> > > + regulators {
> > > + /* Supplies VCC-PLL, so needs to be always
> >
> > on. */
> >
> > > + reg_aldo1: aldo1 {
> > > + regulator-always-on;
> > > + regulator-min-microvolt =
> >
> > <1800000>;
> >
> > > + regulator-max-microvolt =
> >
> > <1800000>;
> >
> > > + regulator-name = "vcc1v8";
> > > + };
> > > +
> > > + /* Supplies VCC-IO, so needs to be always
on.
> >
> > */
> >
> > > + reg_dldo1: dldo1 {
> > > + regulator-always-on;
> > > + regulator-min-microvolt =
> >
> > <3300000>;
> >
> > > + regulator-max-microvolt =
> >
> > <3300000>;
> >
> > > + regulator-name = "vcc3v3";
> > > + };
> > > +
> > > + reg_dcdc1: dcdc1 {
> > > + regulator-always-on;
> > > + regulator-min-microvolt =
> >
> > <810000>;
> >
> > > + regulator-max-microvolt =
> >
> > <990000>;
> >
> > > + regulator-name = "vdd-gpu-sys";
> > > + };
> >
> > Is it safe to change sys voltage when system is running?
>
> I don't know. All I know is that the H616 datasheet lists VDD_SYS as
> having the exact same range as VDD_GPU, and that is does not give a
> "typical" voltage value. As this DT stands at the moment, this doesn't
> really matter, since nothing will change DCDC1.
>
> I see that the Orange Pi Zero 2 (with a "proper" PMIC) also ties SYS and
> GPU together, so it's not just because of the few rails of the AXP313.
>
> I'd say we will figure that out once we start experimenting with GPU
> DVFS, but meanwhile nothing references DCDC1, so it will just stay put
> at the AXP313's 0.9V reset value.
>
> Does that make sense?

Yeah, I'm fine with it.

Reviewed-by: Jernej Skrabec <jernej.skrabec@xxxxxxxxx>

Best regards,
Jernej

>
> Cheers,
> Andre
>
> > > +
> > > + reg_dcdc2: dcdc2 {
> > > + regulator-always-on;
> > > + regulator-min-microvolt =
> >
> > <810000>;
> >
> > > + regulator-max-microvolt =
> >
> > <1100000>;
> >
> > > + regulator-name = "vdd-cpu";
> > > + };
> > > +
> > > + reg_dcdc3: dcdc3 {
> > > + regulator-always-on;
> > > + regulator-min-microvolt =
> >
> > <1100000>;
> >
> > > + regulator-max-microvolt =
> >
> > <1100000>;
> >
> > > + regulator-name = "vdd-dram";
> > > + };
> > > + };
> > > + };
> > > +};
> > > +
> > > +&pio {
> > > + vcc-pc-supply = <&reg_dldo1>;
> > > + vcc-pf-supply = <&reg_dldo1>;
> > > + vcc-pg-supply = <&reg_aldo1>;
> > > + vcc-ph-supply = <&reg_dldo1>;
> > > + vcc-pi-supply = <&reg_dldo1>;
> > > +};