From: Chen-Yu Tsai <wens@kernel.org>
To: Andre Przywara <andre.przywara@arm.com>
Cc: Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Jernej Skrabec <jernej@kernel.org>,
Samuel Holland <samuel@sholland.org>,
devicetree@vger.kernel.org, linux-sunxi@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Subject: Re: [PATCH 5/5] arm64: dts: allwinner: t527: Add OrangePi 4A board
Date: Sat, 21 Jun 2025 23:39:27 +0800 [thread overview]
Message-ID: <CAGb2v65-KNN2x+HNE7cSPiTRyo0s5O_yiC147YKDkMhVJjW7Qw@mail.gmail.com> (raw)
In-Reply-To: <20250621153229.6796e824@minigeek.lan>
On Sat, Jun 21, 2025 at 10:33 PM Andre Przywara <andre.przywara@arm.com> wrote:
>
> On Fri, 20 Jun 2025 01:30:07 +0800
> Chen-Yu Tsai <wens@kernel.org> wrote:
>
> Hi Chen-Yu,
>
> many thanks for piecing this together!
> I compared this against the schematic, and found only some minor nits,
> see below.
>
> > From: Chen-Yu Tsai <wens@csie.org>
> >
> > The OrangePi 4A is a typical Raspberry Pi model B sized development
> > board from Xunlong designed around an Allwinner T527 SoC.
> >
> > The board has the following features:
> > - Allwinner T527 SoC
> > - AXP717B + AXP323 PMICs
> > - Up to 4GB LPDDR4 DRAM
> > - micro SD slot
> > - optional eMMC module
> > - M.2 slot for PCIe 2.0 x1
> > - 16 MB SPI-NOR flash
> > - 4x USB 2.0 type-A ports (one can be used in gadget mode)
> > - 1x Gigabit ethernet w/ Motorcomm PHY (through yet to be supported GMAC200)
> > - 3.5mm audio jack via internal audio codec
> > - HDMI 2.0 output
> > - eDP, MIPI CSI (2-lane and 4-lane) and MIPI DSI (4-lane) connectors
> > - USB type-C port purely for power
> > - AP6256 (Broadcom BCM4345) WiFi 5.0 + BT 5.0
> > - unsoldered headers for ADC and an additional USB 2.0 host port
> > - 40-pin GPIO header
> >
> > Add a device tree for it, enabling all peripherals currently supported.
> >
> > Signed-off-by: Chen-Yu Tsai <wens@csie.org>
> > ---
> > arch/arm64/boot/dts/allwinner/Makefile | 1 +
> > .../dts/allwinner/sun55i-t527-orangepi-4a.dts | 378 ++++++++++++++++++
> > 2 files changed, 379 insertions(+)
> > create mode 100644 arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts
> >
> > diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile
> > index 773cc02a13d0..780aeba0f3a4 100644
> > --- a/arch/arm64/boot/dts/allwinner/Makefile
> > +++ b/arch/arm64/boot/dts/allwinner/Makefile
> > @@ -57,3 +57,4 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h700-anbernic-rg35xx-sp.dtb
> > dtb-$(CONFIG_ARCH_SUNXI) += sun55i-a527-cubie-a5e.dtb
> > dtb-$(CONFIG_ARCH_SUNXI) += sun55i-h728-x96qpro+.dtb
> > dtb-$(CONFIG_ARCH_SUNXI) += sun55i-t527-avaota-a1.dtb
> > +dtb-$(CONFIG_ARCH_SUNXI) += sun55i-t527-orangepi-4a.dtb
> > diff --git a/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts b/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts
> > new file mode 100644
> > index 000000000000..8a62607e584c
> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/allwinner/sun55i-t527-orangepi-4a.dts
> > @@ -0,0 +1,378 @@
> > +// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
> > +/*
> > + * Copyright (C) 2025 Chen-Yu Tsai <wens@csie.org>
> > + */
> > +
> > +/dts-v1/;
> > +
> > +#include "sun55i-a523.dtsi"
> > +
> > +#include <dt-bindings/gpio/gpio.h>
> > +#include <dt-bindings/leds/common.h>
> > +
> > +/ {
> > + model = "OrangePi 4A";
> > + compatible = "xunlong,orangepi-4a", "allwinner,sun55i-t527";
> > +
> > + aliases {
> > + serial0 = &uart0;
> > + };
> > +
> > + chosen {
> > + stdout-path = "serial0:115200n8";
> > + };
> > +
> > + ext_osc32k: ext-osc32k-clk {
> > + #clock-cells = <0>;
> > + compatible = "fixed-clock";
> > + clock-frequency = <32768>;
> > + clock-output-names = "ext_osc32k";
> > + };
> > +
> > + leds {
> > + compatible = "gpio-leds";
> > +
> > + /* PWM capable pin, but PWM isn't supported yet. */
> > + led {
> > + function = LED_FUNCTION_STATUS;
> > + color = <LED_COLOR_ID_GREEN>;
> > + gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
> > + };
> > + };
> > +
> > + wifi_pwrseq: pwrseq {
> > + compatible = "mmc-pwrseq-simple";
> > + reset-gpios = <&r_pio 1 1 GPIO_ACTIVE_LOW>; /* PM1 */
> > + clocks = <&rtc CLK_OSC32K_FANOUT>;
> > + clock-names = "ext_clock";
> > + };
> > +
> > + reg_otg_vbus: regulator-otg-vbus {
> > + compatible = "regulator-fixed";
> > + regulator-name = "otg-vbus";
> > + regulator-min-microvolt = <5000000>;
> > + regulator-max-microvolt = <5000000>;
> > + vin-supply = <®_vcc5v>;
> > + gpio = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
> > + enable-active-high;
> > + };
> > +
> > + reg_pcie_vcc3v3: regulator-pcie-vcc3v3 {
> > + compatible = "regulator-fixed";
> > + regulator-name = "vcc-pcie-3v3";
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + vin-supply = <®_vcc5v>;
> > + gpio = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */
> > + enable-active-high;
> > + };
> > +
> > + reg_usb_vbus: regulator-usb-vbus {
> > + compatible = "regulator-fixed";
> > + regulator-name = "usb-vbus";
> > + regulator-min-microvolt = <5000000>;
> > + regulator-max-microvolt = <5000000>;
> > + vin-supply = <®_vcc5v>;
> > + gpio = <&r_pio 0 12 GPIO_ACTIVE_HIGH>; /* PL12 */
> > + enable-active-high;
> > + };
> > +
> > + reg_vcc5v: regulator-vcc5v {
> > + /* board wide 5V supply from USB type-C port */
> > + compatible = "regulator-fixed";
> > + regulator-name = "vcc-5v";
> > + regulator-min-microvolt = <5000000>;
> > + regulator-max-microvolt = <5000000>;
> > + regulator-always-on;
> > + };
> > +};
> > +
> > +&ehci0 {
> > + status = "okay";
> > +};
> > +
> > +&ehci1 {
> > + status = "okay";
> > +};
> > +
> > +&mmc0 {
> > + vmmc-supply = <®_cldo3>;
> > + cd-gpios = <&pio 5 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PF6 */
> > + bus-width = <4>;
> > + status = "okay";
> > +};
> > +
> > +&mmc1 {
> > + bus-width = <4>;
> > + mmc-pwrseq = <&wifi_pwrseq>;
> > + non-removable;
> > + vmmc-supply = <®_dldo1_323>;
> > + vqmmc-supply = <®_bldo1>;
> > + status = "okay";
> > +
> > + brcmf: wifi@1 {
> > + compatible = "brcm,bcm4329-fmac";
> > + reg = <1>;
> > + interrupt-parent = <&r_pio>;
> > + interrupts = <1 0 IRQ_TYPE_LEVEL_LOW>; /* PM0 */
> > + interrupt-names = "host-wake";
> > + };
> > +};
> > +
> > +&mmc2 {
> > + bus-width = <8>;
> > + cap-mmc-hw-reset;
> > + mmc-ddr-1_8v;
> > + mmc-hs200-1_8v;
> > + non-removable;
> > + vmmc-supply = <®_cldo3>;
> > + vqmmc-supply = <®_cldo1>;
> > + status = "okay";
> > +};
> > +
> > +&ohci0 {
> > + status = "okay";
> > +};
> > +
> > +&ohci1 {
> > + status = "okay";
> > +};
> > +
> > +&pio {
> > + vcc-pb-supply = <®_cldo3>; /* via VCC-IO */
> > + vcc-pc-supply = <®_cldo1>;
> > + vcc-pd-supply = <®_cldo3>;
> > + vcc-pe-supply = <®_aldo2>;
> > + vcc-pf-supply = <®_cldo3>; /* VCC-IO for 3.3v; VCC-MCSI for 1.8v */
> > + vcc-pg-supply = <®_bldo1>;
> > + vcc-ph-supply = <®_cldo3>; /* via VCC-IO */
> > + vcc-pi-supply = <®_cldo3>;
> > + vcc-pj-supply = <®_cldo1>;
> > + vcc-pk-supply = <®_cldo1>;
> > +};
> > +
> > +&r_i2c0 {
> > + status = "okay";
> > +
> > + axp717: pmic@35 {
> > + compatible = "x-powers,axp717";
> > + reg = <0x35>;
> > + interrupt-controller;
> > + #interrupt-cells = <1>;
> > + interrupts-extended = <&nmi_intc 0 IRQ_TYPE_LEVEL_LOW>;
> > +
> > + vin1-supply = <®_vcc5v>;
> > + vin2-supply = <®_vcc5v>;
> > + vin3-supply = <®_vcc5v>;
> > + vin4-supply = <®_vcc5v>;
> > + aldoin-supply = <®_vcc5v>;
> > + bldoin-supply = <®_vcc5v>;
> > + cldoin-supply = <®_vcc5v>;
> > +
> > + regulators {
> > + /* Supplies the "little" cluster (1.4 GHz cores) */
> > + reg_dcdc1: dcdc1 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <900000>;
> > + regulator-max-microvolt = <1160000>;
> > + regulator-name = "vdd-cpul";
> > + };
> > +
> > + reg_dcdc2: dcdc2 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <920000>;
> > + regulator-max-microvolt = <920000>;
> > + regulator-name = "vdd-gpu-sys";
> > + };
> > +
> > + reg_dcdc3: dcdc3 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <1160000>;
> > + regulator-max-microvolt = <1160000>;
> > + regulator-name = "vcc-dram";
> > + };
> > +
> > + reg_dcdc4: dcdc4 {
> > + /* feeds 3.3V pin on GPIO header */
> > + regulator-always-on;
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vdd-io";
> > + };
> > +
> > + reg_aldo1: aldo1 {
> > + regulator-name = "avdd-csi";
> > + };
> > +
> > + reg_aldo2: aldo2 {
> > + regulator-name = "vcc-pe";
> > + };
> > +
> > + reg_aldo3: aldo3 {
> > + /* supplies the I2C pins for this PMIC */
> > + regulator-always-on;
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vcc-pl-usb";
> > + };
> > +
> > + reg_aldo4: aldo4 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <1800000>;
> > + regulator-max-microvolt = <1800000>;
> > + regulator-name = "vcc-pll-dxco-avcc";
> > + };
> > +
> > + reg_bldo1: bldo1 {
> > + regulator-min-microvolt = <1800000>;
> > + regulator-max-microvolt = <1800000>;
> > + regulator-name = "vcc-pg-wifi";
> > + };
> > +
> > + reg_bldo2: bldo2 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <1800000>;
> > + regulator-max-microvolt = <1800000>;
> > + regulator-name = "vcc-pm-lpddr";
> > + };
> > +
> > + reg_bldo3: bldo3 {
> > + regulator-name = "dvdd-csi";
>
> In my version of the schematic this is AFVCC-CSI (whatever that means),
I believe it's power for the autofocus part, if one is included.
> and ...
>
> > + };
> > +
> > + reg_bldo4: bldo4 {
>
> ... BLDO4 is DVDD-CSI.
You are right. I must've edited the wrong entry.
> Not that it really matters, since both are not used yet ...
Actually, I believe the names you gave are from the first page, but if
you look at the page with the camera connectors, neither of them are used.
The connectors both get power only from VCC3V3-CSI, which is CLDO2.
So neither of them are connected.
> > + /* not connected */
> > + };
> > +
> > + reg_cldo1: cldo1 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <1800000>;
> > + regulator-max-microvolt = <1800000>;
> > + regulator-name = "vcc-cvp-pc-lvds-mcsi-pk-efuse-pcie-edp-1v8";
> > + };
> > +
> > + reg_cldo2: cldo2 {
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vcc3v3-csi";
> > + };
> > +
> > + reg_cldo3: cldo3 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vcc-io-mmc-nand-pd-pi-usb";
> > + };
> > +
> > + reg_cldo4: cldo4 {
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vcc-3v3-phy1-lcd";
> > + };
> > +
> > + reg_cpusldo: cpusldo {
> > + /* supplies the management core */
> > + regulator-always-on;
> > + regulator-min-microvolt = <900000>;
> > + regulator-max-microvolt = <900000>;
> > + regulator-name = "vdd-cpus";
>
> This also supplies some 0.9V USB circuitry, so maybe add this to the
> name?
Sure.
> > + };
> > + };
> > + };
> > +
> > + axp323: pmic@36 {
> > + compatible = "x-powers,axp323";
> > + reg = <0x36>;
> > + #interrupt-cells = <1>;
> > + interrupt-controller;
> > + status = "okay";
> > +
> > + vin1-supply = <®_vcc5v>;
> > + vin2-supply = <®_vcc5v>;
> > + vin3-supply = <®_vcc5v>;
> > +
> > + regulators {
> > + reg_aldo1_323: aldo1 {
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vcc-wifi";
> > + };
> > +
> > + reg_dldo1_323: dldo1 {
> > + regulator-min-microvolt = <3300000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-name = "vcc-wifi2";
> > + };
> > +
> > + /* Supplies the "big" cluster (1.8 GHz cores) */
> > + reg_dcdc1_323: dcdc1 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <900000>;
> > + regulator-max-microvolt = <1150000>;
> > + regulator-name = "vdd-cpub";
> > + };
> > +
> > + /* DCDC2 is polyphased with DCDC1 */
> > +
> > + /* Some RISC-V management core related voltage */
> > + reg_dcdc3_323: dcdc3 {
> > + regulator-always-on;
> > + regulator-min-microvolt = <900000>;
> > + regulator-max-microvolt = <900000>;
> > + regulator-name = "vdd-dnr";
> > + };
> > + };
> > + };
> > +};
> > +
> > +&r_pio {
> > +/*
> > + * Specifying the supply would create a circular dependency.
> > + *
> > + * vcc-pl-supply = <®_aldo3>;
> > + */
> > + vcc-pm-supply = <®_bldo2>;
> > +};
> > +
> > +&uart0 {
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&uart0_pb_pins>;
> > + status = "okay";
> > +};
> > +
> > +&uart1 {
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
> > + uart-has-rtscts;
> > + status = "okay";
> > +
> > + bluetooth {
> > + compatible = "brcm,bcm4345c5";
> > + clocks = <&rtc CLK_OSC32K_FANOUT>;
> > + clock-names = "lpo";
> > + vbat-supply = <®_aldo1_323>;
>
> Is that some kind of trick, to accommodate *two* power rails for the
> chip? Because to me it looks like the AXP323 ALDO1 and DLDO1 are
> connected together and both supply the WiFi-BT-combo chip.
> It's probably fine to model this way, since ALDO1 is the weaker of
> the two, and I'd guess the WiFi needs more power, but worth a comment, I
> guess.
Yeah, it's mostly a trick. I suppose we can use the regulator coupler
thing to couple them together, but the kernel coupler driver currently
doesn't do non-always-on regulator coupling. I would need to look into
why that's the case.
Mark (CC-ed), do you have any idea off the top of your head?
> Rest looks good to me.
Thanks.
ChenYu
> Cheers,
> Andre
>
>
> > + vddio-supply = <®_bldo1>;
> > + device-wakeup-gpios = <&r_pio 1 3 GPIO_ACTIVE_HIGH>; /* PM3 */
> > + host-wakeup-gpios = <&r_pio 1 4 GPIO_ACTIVE_HIGH>; /* PM4 */
> > + shutdown-gpios = <&r_pio 1 2 GPIO_ACTIVE_HIGH>; /* PM2 */
> > + };
> > +};
> > +
> > +&usb_otg {
> > + /*
> > + * The OTG controller is connected to one of the type-A ports.
> > + * There is a regulator, controlled by a GPIO, to provide VBUS power
> > + * to the port, and a VBUSDET GPIO, to detect externally provided
> > + * power. But without ID or CC pins there is no real way to do a
> > + * runtime role detection.
> > + */
> > + dr_mode = "host";
> > + status = "okay";
> > +};
> > +
> > +&usbphy {
> > + usb0_vbus-supply = <®_otg_vbus>;
> > + usb0_vbus_det-gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
> > + usb1_vbus-supply = <®_usb_vbus>;
> > + status = "okay";
> > +};
>
prev parent reply other threads:[~2025-06-21 15:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-19 17:30 [PATCH 0/5] arm64: allwinner: t527: Add OrangePi 4A board Chen-Yu Tsai
2025-06-19 17:30 ` [PATCH 1/5] dt-bindings: arm: sunxi: Add Xunlong " Chen-Yu Tsai
2025-06-20 13:54 ` Andre Przywara
2025-06-20 14:17 ` Conor Dooley
2025-06-19 17:30 ` [PATCH 2/5] arm64: dts: allwinner: a523: Move mmc nodes to correct position Chen-Yu Tsai
2025-06-20 13:54 ` Andre Przywara
2025-06-19 17:30 ` [PATCH 3/5] arm64: dts: allwinner: a523: Move rgmii0 pins to correct location Chen-Yu Tsai
2025-06-20 13:54 ` Andre Przywara
2025-06-19 17:30 ` [PATCH 4/5] arm64: dts: allwinner: a523: Add UART1 pins Chen-Yu Tsai
2025-06-20 13:55 ` Andre Przywara
2025-06-20 14:10 ` Chen-Yu Tsai
2025-06-19 17:30 ` [PATCH 5/5] arm64: dts: allwinner: t527: Add OrangePi 4A board Chen-Yu Tsai
2025-06-21 14:32 ` Andre Przywara
2025-06-21 15:39 ` Chen-Yu Tsai [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAGb2v65-KNN2x+HNE7cSPiTRyo0s5O_yiC147YKDkMhVJjW7Qw@mail.gmail.com \
--to=wens@kernel.org \
--cc=andre.przywara@arm.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jernej@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=robh@kernel.org \
--cc=samuel@sholland.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).