Allwinner device tree changes for 6.16

Introduce Allwinner A523 / A527 / T527 SoC family w/ three new devices:
 - Radxa Cubie A5E
 - X96Q-Pro+
 - Avaota-A1
 
 Also enable EMAC0 ethernet MAC on A523 family for Cubie A5E & Avaota-A1.
 Note: the SoC has two different ethernet controllers.
 
 Changes to existing SoCs:
 - Enable GPU on H616 with all boards enabled
 - Set maximum MMC frequency for the A100
 
 Changes to existing boards:
 - Add WiFi/BT header on PINE64 A64 boards
 - Add hp-det-gpios for Anbernic RG35XX
 - Add support for PHY LEDs on Bananapi (the original one)
 
 Add new devices for existing SoCs:
 - YuzukiHD Chameleon based on H6
 - Liontron H-A133L based on A133 (compatible with A100)
 
 Tree wide cleanups:
 - Use preferred node names for cooling maps
 - Align wifi node name with bindings
 - Drop spurious 'clock-latency-ns' properties for H5 & H6
 -----BEGIN PGP SIGNATURE-----
 
 iQJCBAABCgAsFiEE2nN1m/hhnkhOWjtHOJpUIZwPJDAFAmgmm8kOHHdlbnNAY3Np
 ZS5vcmcACgkQOJpUIZwPJDCeKw//dU9nOV3IL027SSzBc/1acvGD7t+o3O9neNlt
 4W02QAwTeANCCUM4OYIUCmNn71gFlcEOfVmLlJXAEFJCz6kPP8RSh+IL1LdSQydf
 NJMFnnvpVScwUjDSOPAowuqR91OQIHm7nWJvVzo022c8zsQE1iNv7Aeg66Swf0ai
 HRuwLveOjVRrVLe4mwwa5/LHTNSZLk1e5si441C86PHHf5+s3x4JnJzTMvYosZbM
 3ekjGc6f9evx+7k7bAfQ9UrJ6avtoq5ars+Js+RFjMx0bW6dCLa1EvLa3V2JcEcR
 tSI7dwiqLyD2q9tulxVG5kFLTNPdXK+BI9tO96xCbkJ/j0V9ubNToq23ltyuzOVJ
 ha8n8e1kb1tOg7HR8B5eV1xN+ZSZL6NvvZoiyPPklML0hmT95Lwi0uVhfnNT0EC9
 VjiBBBeP26U0y9005nAzblLUTeKv4pFaRHD7j+MVtDk6IsNwMxGo27KPrkpf6FMM
 UgbXSiurdQIXToUuQL+DuGFZZwnu1MN008ZUV/hqEfzWpeH/GQxN+YMbEuuvaKJk
 3r0nDM9Wbnjdvs/qhrDZRwKccQOBLMwkZN8JKWyKAoe1mVoFZa9VyyKWuT5qXOee
 5E5rwxwFne8BpkDyfmCyHXKVjeGGiVky11roO9/9IchjgJe9j+4hLaCvr8mhTvl2
 p4tiVxQ=
 =4JrL
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmguSzAACgkQmmx57+YA
 GNnCIA//R7syl7Mu+cJ88VxKhrInFf5F5vngrtrh+o9w5Jk50BY87WX0qT16Zgt6
 /jHLLYkjXiv0FA0PJQmeZQKxhYQnGqRqzAgBG41Db6ulbot8cHDNCwbc2J+HPvXe
 DibTOayckm23HJQyPXgTBhFC8GnjCOxzpt7mSP7+NlL2QcHGuNABP/Z0R8ra4Evr
 rw7GYpmCCuc0O7LdhnGzUpy+QT3SRedq0MPhj59mFn4VYQUCFRnHiYfPUjMjPw4m
 dfFAPE6PaZlgIfPLH0s5t8hwZCbOtLkuMUriZPw9iYLN+KXLHRrbprNlPqVH+LC3
 VuCUXsokwjr/yeWJ9pzmuRi6kCg2MDooY1i0T2GHfoIr2Sb3cOc7lrjyczMp4ovn
 snk370g2qZ9jYOgCOUlNSpI76/OF04/MTOm/IF8yAuWtr2Qkqa7sqwf0dgP1gcQc
 FuDgRw/uh2dG51tPV8xYfFvNG0+rSJh7y7M2m76cNG6A/OmI1WJOoRT/WNqvqTxN
 y7iZY7aKnML8pDQgoRFeferR5oUfEx4yAIFTA2130U+KtVDiq8/+3pv5DCyGx9/6
 dXs0T2LndrDV9DRaSQZ45spHP8sMSFbWbBX3qvQEj9Q8j2QdTSNu4hSi4/P3jQ0U
 W5azgGfeL2dH1m+RhJaqpZQTwZH1lVUfIcj2Dpdbk768xkD+UKM=
 =/9N8
 -----END PGP SIGNATURE-----

Merge tag 'sunxi-dt-for-6.16' of https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux into soc/dt

Allwinner device tree changes for 6.16

Introduce Allwinner A523 / A527 / T527 SoC family w/ three new devices:
- Radxa Cubie A5E
- X96Q-Pro+
- Avaota-A1

Also enable EMAC0 ethernet MAC on A523 family for Cubie A5E & Avaota-A1.
Note: the SoC has two different ethernet controllers.

Changes to existing SoCs:
- Enable GPU on H616 with all boards enabled
- Set maximum MMC frequency for the A100

Changes to existing boards:
- Add WiFi/BT header on PINE64 A64 boards
- Add hp-det-gpios for Anbernic RG35XX
- Add support for PHY LEDs on Bananapi (the original one)

Add new devices for existing SoCs:
- YuzukiHD Chameleon based on H6
- Liontron H-A133L based on A133 (compatible with A100)

Tree wide cleanups:
- Use preferred node names for cooling maps
- Align wifi node name with bindings
- Drop spurious 'clock-latency-ns' properties for H5 & H6

* tag 'sunxi-dt-for-6.16' of https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux: (27 commits)
  arm64: dts: allwinner: a100: add Liontron H-A133L board support
  dt-bindings: arm: sunxi: Add Liontron H-A133L board name
  dt-bindings: vendor-prefixes: Add Liontron name
  ARM: dts: bananapi: add support for PHY LEDs
  arm64: dts: allwinner: a100: set maximum MMC frequency
  arm64: dts: allwinner: t527: add EMAC0 to Avaota-A1 board
  arm64: dts: allwinner: a527: add EMAC0 to Radxa A5E board
  arm64: dts: allwinner: a523: Add EMAC0 ethernet MAC
  dt-bindings: sram: sunxi-sram: Add A523 compatible
  arm64: dts: allwinner: a64: Add WiFi/BT header on SOPINE Baseboard
  arm64: dts: allwinner: a64: Add WiFi/BT header on PINE A64
  arm64: dts: allwinner: correct the model name for Radxa Cubie A5E
  ARM: dts: allwinner: Align wifi node name with bindings
  arm64: dts: allwinner: Align wifi node name with bindings
  arm64: dts: allwinner: h616: enable Mali GPU for all boards
  arm64: dts: allwinner: h616: Add Mali GPU node
  arm64: dts: allwinner: h700: Add hp-det-gpios for Anbernic RG35XX
  arm64: dts: allwinner: h5/h6: Drop spurious 'clock-latency-ns' properties
  arm/arm64: dts: allwinner: Use preferred node names for cooling maps
  arm64: dts: allwinner: h616: add YuzukiHD Chameleon support
  ...

Link: https://lore.kernel.org/r/aCaeZJ2t4S_xhgjp@wens.tw
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2025-05-21 23:52:34 +02:00
commit 0feaf3c056
33 changed files with 2180 additions and 17 deletions

View File

@ -492,6 +492,11 @@ properties:
- const: lamobo,lamobo-r1
- const: allwinner,sun7i-a20
- description: Liontron H-A133L
items:
- const: liontron,h-a133l
- const: allwinner,sun50i-a100
- description: HAOYU Electronics Marsboard A10
items:
- const: haoyu,a10-marsboard
@ -845,6 +850,11 @@ properties:
- const: allwinner,r7-tv-dongle
- const: allwinner,sun5i-a10s
- description: Radxa Cubie A5E
items:
- const: radxa,cubie-a5e
- const: allwinner,sun55i-a527
- description: Remix Mini PC
items:
- const: jide,remix-mini-pc
@ -966,6 +976,11 @@ properties:
- const: hechuang,x96-mate
- const: allwinner,sun50i-h616
- description: X96Q Pro+
items:
- const: amediatech,x96q-pro-plus
- const: allwinner,sun55i-h728
- description: Xunlong OrangePi
items:
- const: xunlong,orangepi
@ -1081,4 +1096,14 @@ properties:
- const: xunlong,orangepi-zero3
- const: allwinner,sun50i-h618
- description: YuzukiHD Avaota A1
items:
- const: yuzukihd,avaota-a1
- const: allwinner,sun55i-t527
- description: YuzukiHD Chameleon
items:
- const: yuzukihd,chameleon
- const: allwinner,sun50i-h618
additionalProperties: true

View File

@ -50,6 +50,7 @@ properties:
- enum:
- allwinner,sun50i-a100-system-control
- allwinner,sun50i-h6-system-control
- allwinner,sun55i-a523-system-control
- const: allwinner,sun50i-a64-system-control
reg:

View File

@ -864,6 +864,8 @@ patternProperties:
description: Linux-specific binding
"^linx,.*":
description: Linx Technologies
"^liontron,.*":
description: Shenzhen Liontron Technology Co., Ltd
"^liteon,.*":
description: LITE-ON Technology Corp.
"^litex,.*":
@ -1755,6 +1757,8 @@ patternProperties:
description: Y Soft Corporation a.s.
"^yuridenki,.*":
description: Yuridenki-Shokai Co. Ltd.
"^yuzukihd,.*":
description: YuzukiHD Open Source Hardware
"^zarlink,.*":
description: Zarlink Semiconductor
"^zealz,.*":

View File

@ -48,6 +48,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
/ {
model = "LeMaker Banana Pi";
@ -169,6 +170,32 @@ &ir0 {
&gmac_mdio {
phy1: ethernet-phy@1 {
reg = <1>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
linux,default-trigger = "netdev";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_LAN;
linux,default-trigger = "netdev";
};
led@2 {
reg = <2>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
linux,default-trigger = "netdev";
};
};
};
};

View File

@ -1225,7 +1225,7 @@ cpu0_very_hot: cpu-very-hot {
};
cooling-maps {
cpu-hot-limit {
map0 {
trip = <&cpu0_hot>;
cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
@ -1255,7 +1255,7 @@ cpu1_very_hot: cpu-very-hot {
};
cooling-maps {
cpu-hot-limit {
map0 {
trip = <&cpu1_hot>;
cooling-device = <&cpu100 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu101 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,

View File

@ -94,7 +94,7 @@ &mmc1 {
non-removable;
status = "okay";
brcmf: bcrmf@1 {
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
interrupt-parent = <&pio>;

View File

@ -262,7 +262,7 @@ cpu_very_hot_trip: cpu-very-hot {
};
cooling-maps {
cpu-hot-limit {
map0 {
trip = <&cpu_hot_trip>;
cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,

View File

@ -146,7 +146,7 @@ cpu_very_hot_trip: cpu-very-hot {
};
cooling-maps {
cpu-hot-limit {
map0 {
trip = <&cpu_hot_trip>;
cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,

View File

@ -18,6 +18,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-sopine-baseboard.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-teres-i.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h64-remix-mini-pc.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a100-allwinner-perf1.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a133-liontron-h-a133l.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-bananapi-m2-plus.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-bananapi-m2-plus-v1.2.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-emlid-neutis-n5-devboard.dtb
@ -48,7 +49,11 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-longanpi-3h.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-orangepi-zero2w.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-orangepi-zero3.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-transpeed-8k618-t.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-yuzukihd-chameleon.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h700-anbernic-rg35xx-2024.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h700-anbernic-rg35xx-h.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h700-anbernic-rg35xx-plus.dtb
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

View File

@ -252,6 +252,7 @@ mmc0: mmc@4020000 {
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins>;
max-frequency = <150000000>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
@ -267,6 +268,7 @@ mmc1: mmc@4021000 {
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
max-frequency = <150000000>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
@ -282,6 +284,7 @@ mmc2: mmc@4022000 {
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>;
max-frequency = <150000000>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;

View File

@ -0,0 +1,211 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2025 Arm Ltd.
*/
/dts-v1/;
#include "sun50i-a100.dtsi"
#include "sun50i-a100-cpu-opp.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
/{
model = "Liontron H-A133L";
compatible = "liontron,h-a133l", "allwinner,sun50i-a100";
aliases {
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
leds {
compatible = "gpio-leds";
led {
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_BLUE>;
gpios = <&pio 7 16 GPIO_ACTIVE_LOW>; /* PH16 */
};
};
reg_vcc5v: vcc5v {
/* board wide 5V supply from a 12V->5V regulator */
compatible = "regulator-fixed";
regulator-name = "vcc-5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
reg_usb1_vbus: regulator-usb1-vbus {
compatible = "regulator-fixed";
regulator-name = "usb1-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&reg_vcc5v>;
enable-active-high;
gpio = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */
};
};
&cpu0 {
cpu-supply = <&reg_dcdc2>;
};
&ehci0 {
status = "okay";
};
&ehci1 {
status = "okay";
};
&mmc0 {
vmmc-supply = <&reg_dcdc1>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
bus-width = <4>;
status = "okay";
};
&mmc2 {
vmmc-supply = <&reg_dcdc1>;
vqmmc-supply = <&reg_eldo1>;
cap-mmc-hw-reset;
non-removable;
bus-width = <8>;
mmc-ddr-1_8v;
mmc-hs200-1_8v;
status = "okay";
};
&ohci0 {
status = "okay";
};
&ohci1 {
status = "okay";
};
&pio {
vcc-pb-supply = <&reg_dcdc1>;
vcc-pc-supply = <&reg_eldo1>;
vcc-pf-supply = <&reg_dcdc1>;
vcc-ph-supply = <&reg_dcdc1>;
};
&r_i2c0 {
status = "okay";
axp803: pmic@34 {
compatible = "x-powers,axp803";
reg = <0x34>;
interrupt-parent = <&r_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
};
};
#include "axp803.dtsi"
&ac_power_supply {
status = "okay";
};
&reg_aldo1 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-codec-avcc";
};
&reg_aldo2 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-dram-1";
};
&reg_aldo3 {
regulator-always-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-usb-pl";
};
&reg_dcdc1 {
regulator-always-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-io-usb-pd-emmc";
};
&reg_dcdc2 {
regulator-always-on;
regulator-min-microvolt = <810000>;
regulator-max-microvolt = <1200000>;
regulator-name = "vdd-cpux";
};
&reg_dcdc3 {
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdd-usb-cpus";
};
&reg_dcdc4 {
regulator-always-on;
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <950000>;
regulator-name = "vdd-sys";
};
&reg_dcdc5 {
regulator-always-on;
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
regulator-name = "vcc-dram";
};
/* DCDC6 unused */
/* DLDO3 unused */
/* DLDO4 unused */
&reg_eldo1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-pc-emmc";
};
/* ELDO2 unused */
/* ELDO3 unused */
&reg_fldo1 {
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdd-cpus-usb";
};
/* reg_drivevbus unused */
/* dc1sw unused */
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pb_pins>;
status = "okay";
};
&usb_otg {
dr_mode = "host"; /* USB A type receptacle, always powered */
status = "okay";
};
&usbphy {
usb1_vbus-supply = <&reg_usb1_vbus>;
status = "okay";
};

View File

@ -124,6 +124,17 @@ &mmc0 {
status = "okay";
};
/* On Wifi/BT connector */
&mmc1 {
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
vmmc-supply = <&reg_dldo4>;
vqmmc-supply = <&reg_eldo1>;
bus-width = <4>;
non-removable;
status = "disabled";
};
&ohci0 {
status = "okay";
};
@ -286,6 +297,7 @@ &uart0 {
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
uart-has-rtscts;
status = "disabled";
};

View File

@ -103,6 +103,17 @@ ext_rgmii_phy: ethernet-phy@1 {
};
};
/* On Wifi/BT connector */
&mmc1 {
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
vmmc-supply = <&reg_dldo4>;
vqmmc-supply = <&reg_eldo1>;
bus-width = <4>;
non-removable;
status = "disabled";
};
&mmc2 {
pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>;
@ -175,6 +186,14 @@ &uart0 {
status = "okay";
};
/* On Wifi/BT connector, with RTS/CTS */
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
uart-has-rtscts;
status = "disabled";
};
/* On Pi-2 connector */
&uart2 {
pinctrl-names = "default";

View File

@ -79,6 +79,11 @@ &ehci0 {
status = "okay";
};
&gpu {
mali-supply = <&reg_dcdc1>;
status = "okay";
};
&ir {
status = "okay";
};

View File

@ -16,7 +16,6 @@ cpu0: cpu@0 {
reg = <0>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
};
@ -26,7 +25,6 @@ cpu1: cpu@1 {
reg = <1>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
};
@ -36,7 +34,6 @@ cpu2: cpu@2 {
reg = <2>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
};
@ -46,7 +43,6 @@ cpu3: cpu@3 {
reg = <3>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
};
};
@ -207,7 +203,7 @@ cpu_very_hot_trip: cpu-very-hot {
};
cooling-maps {
cpu-hot-limit {
map0 {
trip = <&cpu_hot_trip>;
cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,

View File

@ -144,7 +144,7 @@ &mmc1 {
non-removable;
status = "okay";
brcm: sdio-wifi@1 {
brcm: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
interrupt-parent = <&r_pio>;

View File

@ -28,7 +28,7 @@ &mmc1 {
non-removable;
status = "okay";
brcm: sdio-wifi@1 {
brcm: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
interrupt-parent = <&r_pio>;

View File

@ -27,7 +27,6 @@ cpu0: cpu@0 {
reg = <0>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
i-cache-size = <0x8000>;
i-cache-line-size = <64>;
@ -44,7 +43,6 @@ cpu1: cpu@1 {
reg = <1>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
i-cache-size = <0x8000>;
i-cache-line-size = <64>;
@ -61,7 +59,6 @@ cpu2: cpu@2 {
reg = <2>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
i-cache-size = <0x8000>;
i-cache-line-size = <64>;
@ -78,7 +75,6 @@ cpu3: cpu@3 {
reg = <3>;
enable-method = "psci";
clocks = <&ccu CLK_CPUX>;
clock-latency-ns = <244144>; /* 8 32k periods */
#cooling-cells = <2>;
i-cache-size = <0x8000>;
i-cache-line-size = <64>;

View File

@ -67,6 +67,11 @@ &cpu0 {
cpu-supply = <&reg_dcdc2>;
};
&gpu {
mali-supply = <&reg_dcdc1>;
status = "okay";
};
&mmc0 {
vmmc-supply = <&reg_dldo1>;
/* Card detection pin is not connected */

View File

@ -77,6 +77,10 @@ &emac0 {
status = "okay";
};
&gpu {
status = "okay";
};
&mdio0 {
ext_rgmii_phy: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";

View File

@ -24,6 +24,10 @@ &emac0 {
phy-supply = <&reg_dcdce>;
};
&gpu {
mali-supply = <&reg_dcdcc>;
};
&mmc0 {
vmmc-supply = <&reg_dcdce>;
};

View File

@ -50,6 +50,11 @@ &ehci2 {
status = "okay";
};
&gpu {
mali-supply = <&reg_dcdcc>;
status = "okay";
};
&ir {
status = "okay";
};

View File

@ -150,6 +150,21 @@ soc {
#size-cells = <1>;
ranges = <0x0 0x0 0x0 0x40000000>;
gpu: gpu@1800000 {
compatible = "allwinner,sun50i-h616-mali",
"arm,mali-bifrost";
reg = <0x1800000 0x40000>;
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "job", "mmu", "gpu";
clocks = <&ccu CLK_GPU0>, <&ccu CLK_BUS_GPU>;
clock-names = "core", "bus";
power-domains = <&prcm_ppu 2>;
resets = <&ccu RST_BUS_GPU>;
status = "disabled";
};
crypto: crypto@1904000 {
compatible = "allwinner,sun50i-h616-crypto";
reg = <0x01904000 0x800>;
@ -874,6 +889,12 @@ r_ccu: clock@7010000 {
#reset-cells = <1>;
};
prcm_ppu: power-controller@7010250 {
compatible = "allwinner,sun50i-h616-prcm-ppu";
reg = <0x07010250 0x10>;
#power-domain-cells = <1>;
};
nmi_intc: interrupt-controller@7010320 {
compatible = "allwinner,sun50i-h616-nmi",
"allwinner,sun9i-a80-nmi";

View File

@ -10,6 +10,11 @@ &cpu0 {
cpu-supply = <&reg_dcdc2>;
};
&gpu {
mali-supply = <&reg_dcdc1>;
status = "okay";
};
&mmc2 {
pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>;

View File

@ -69,6 +69,11 @@ &ehci1 {
/* USB 2 & 3 are on the FPC connector (or the exansion board) */
&gpu {
mali-supply = <&reg_dcdc1>;
status = "okay";
};
&mmc0 {
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
bus-width = <4>;

View File

@ -27,6 +27,10 @@ &ext_rgmii_phy {
motorcomm,clk-out-frequency-hz = <125000000>;
};
&gpu {
mali-supply = <&reg_dcdc1>;
};
&mmc0 {
/*
* The schematic shows the card detect pin wired up to PF6, via an

View File

@ -69,6 +69,11 @@ &ehci1 {
status = "okay";
};
&gpu {
mali-supply = <&reg_dcdc1>;
status = "okay";
};
&ir {
status = "okay";
};

View File

@ -0,0 +1,222 @@
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
* Copyright (C) 2024 Arm Ltd.
*/
/dts-v1/;
#include "sun50i-h616.dtsi"
#include "sun50i-h616-cpu-opp.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
/ {
model = "Yuzuki Chameleon";
compatible = "yuzukihd,chameleon", "allwinner,sun50i-h618";
aliases {
ethernet1 = &sdio_wifi;
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
reg_vcc5v: vcc5v {
/* board wide 5V supply directly from the USB-C socket */
compatible = "regulator-fixed";
regulator-name = "vcc-5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
wifi_pwrseq: pwrseq {
compatible = "mmc-pwrseq-simple";
clocks = <&rtc CLK_OSC32K_FANOUT>;
clock-names = "ext_clock";
pinctrl-0 = <&x32clk_fanout_pin>;
pinctrl-names = "default";
reset-gpios = <&pio 6 11 GPIO_ACTIVE_LOW>; /* PG11 */
};
};
&codec {
allwinner,audio-routing = "Line Out", "LINEOUT";
status = "okay";
};
&cpu0 {
cpu-supply = <&reg_dcdc2>;
};
&ehci0 {
status = "okay";
};
&ehci1 {
status = "okay";
};
&ehci2 {
status = "okay";
};
&ehci3 {
status = "okay";
};
&mmc0 {
bus-width = <4>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
disable-wp;
vmmc-supply = <&reg_dldo1>;
status = "okay";
};
&mmc1 {
bus-width = <4>;
mmc-pwrseq = <&wifi_pwrseq>;
non-removable;
vmmc-supply = <&reg_dldo1>;
vqmmc-supply = <&reg_dldo1>;
status = "okay";
sdio_wifi: wifi@1 {
reg = <1>;
interrupt-parent = <&pio>;
interrupts = <6 12 IRQ_TYPE_LEVEL_LOW>; /* PG12 */
interrupt-names = "host-wake";
};
};
&mmc2 {
bus-width = <8>;
cap-mmc-hw-reset;
mmc-ddr-3_3v;
non-removable;
vmmc-supply = <&reg_dldo1>;
vqmmc-supply = <&reg_dldo1>;
status = "okay";
};
&ohci0 {
status = "okay";
};
&ohci1 {
status = "okay";
};
&ohci2 {
status = "okay";
};
&ohci3 {
status = "okay";
};
&pio {
vcc-pc-supply = <&reg_dldo1>;
vcc-pf-supply = <&reg_dldo1>; /* via VCC_IO */
vcc-pg-supply = <&reg_dldo1>;
vcc-ph-supply = <&reg_dldo1>; /* via VCC_IO */
vcc-pi-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 2 IRQ_TYPE_LEVEL_LOW>; /* PC2 */
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";
};
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 = <1500000>;
regulator-max-microvolt = <1500000>;
regulator-name = "vdd-dram";
};
};
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_ph_pins>;
status = "okay";
};
/* Connected to the Bluetooth UART pins of the XR829 Wifi/BT chip. */
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
uart-has-rtscts;
status = "okay";
};
&usbotg {
/*
* PHY0 pins are connected to a USB-C socket, but a role switch
* is not implemented: both CC pins are pulled to GND.
* The VBUS pins power the device, so a fixed peripheral mode
* is the best choice.
* The board can be powered via GPIOs, in this case port0 *can*
* act as a host (with a cable/adapter ignoring CC), as VBUS is
* then provided by the GPIOs. Any user of this setup would
* need to adjust the DT accordingly: dr_mode set to "host",
* enabling OHCI0 and EHCI0.
*/
dr_mode = "peripheral";
status = "okay";
};
&usbphy {
usb0_id_det-gpios = <&pio 6 18 GPIO_ACTIVE_HIGH>; /* PG18 */
usb0_vbus-supply = <&reg_vcc5v>;
usb1_vbus-supply = <&reg_vcc5v>;
usb2_vbus-supply = <&reg_vcc5v>;
usb3_vbus-supply = <&reg_vcc5v>;
status = "okay";
};

View File

@ -184,8 +184,11 @@ reg_vcc5v: regulator-vcc5v { /* USB-C power input */
};
&codec {
allwinner,audio-routing = "Line Out", "LINEOUT";
/* Both speakers and headphone jack connected to 74HC4052D analog mux*/
allwinner,audio-routing = "Speaker", "LINEOUT",
"Headphone", "LINEOUT";
allwinner,pa-gpios = <&pio 8 5 GPIO_ACTIVE_HIGH>; // PI5
hp-det-gpios = <&pio 8 3 GPIO_ACTIVE_HIGH>; // PI3
status = "okay";
};
@ -197,6 +200,11 @@ &ehci0 {
status = "okay";
};
&gpu {
mali-supply = <&reg_dcdc2>;
status = "okay";
};
&mmc0 {
vmmc-supply = <&reg_cldo3>;
disable-wp;

View File

@ -0,0 +1,639 @@
// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
// Copyright (C) 2023-2024 Arm Ltd.
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/sun6i-rtc.h>
#include <dt-bindings/clock/sun55i-a523-ccu.h>
#include <dt-bindings/clock/sun55i-a523-r-ccu.h>
#include <dt-bindings/reset/sun55i-a523-ccu.h>
#include <dt-bindings/reset/sun55i-a523-r-ccu.h>
/ {
interrupt-parent = <&gic>;
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x000>;
enable-method = "psci";
};
cpu1: cpu@100 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x100>;
enable-method = "psci";
};
cpu2: cpu@200 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x200>;
enable-method = "psci";
};
cpu3: cpu@300 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x300>;
enable-method = "psci";
};
cpu4: cpu@400 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x400>;
enable-method = "psci";
};
cpu5: cpu@500 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x500>;
enable-method = "psci";
};
cpu6: cpu@600 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x600>;
enable-method = "psci";
};
cpu7: cpu@700 {
compatible = "arm,cortex-a55";
device_type = "cpu";
reg = <0x700>;
enable-method = "psci";
};
};
osc24M: osc24M-clk {
#clock-cells = <0>;
compatible = "fixed-clock";
clock-frequency = <24000000>;
clock-output-names = "osc24M";
};
pmu {
compatible = "arm,cortex-a55-pmu";
interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
timer {
compatible = "arm,armv8-timer";
arm,no-tick-in-suspend;
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>;
};
soc {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x0 0x0 0x40000000>;
pio: pinctrl@2000000 {
compatible = "allwinner,sun55i-a523-pinctrl";
reg = <0x2000000 0x800>;
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_APB1>, <&osc24M>, <&rtc CLK_OSC32K>;
clock-names = "apb", "hosc", "losc";
gpio-controller;
#gpio-cells = <3>;
interrupt-controller;
#interrupt-cells = <3>;
rgmii0_pins: rgmii0-pins {
pins = "PH0", "PH1", "PH2", "PH3", "PH4",
"PH5", "PH6", "PH7", "PH9", "PH10",
"PH14", "PH15", "PH16", "PH17", "PH18";
allwinner,pinmux = <5>;
function = "emac0";
drive-strength = <40>;
bias-disable;
};
mmc0_pins: mmc0-pins {
pins = "PF0" ,"PF1", "PF2", "PF3", "PF4", "PF5";
allwinner,pinmux = <2>;
function = "mmc0";
drive-strength = <30>;
bias-pull-up;
};
/omit-if-no-ref/
mmc1_pins: mmc1-pins {
pins = "PG0" ,"PG1", "PG2", "PG3", "PG4", "PG5";
allwinner,pinmux = <2>;
function = "mmc1";
drive-strength = <30>;
bias-pull-up;
};
mmc2_pins: mmc2-pins {
pins = "PC0", "PC1" ,"PC5", "PC6", "PC8",
"PC9", "PC10", "PC11", "PC13", "PC14",
"PC15", "PC16";
allwinner,pinmux = <3>;
function = "mmc2";
drive-strength = <30>;
bias-pull-up;
};
uart0_pb_pins: uart0-pb-pins {
pins = "PB9", "PB10";
allwinner,pinmux = <2>;
function = "uart0";
};
};
ccu: clock-controller@2001000 {
compatible = "allwinner,sun55i-a523-ccu";
reg = <0x02001000 0x1000>;
clocks = <&osc24M>, <&rtc CLK_OSC32K>,
<&rtc CLK_IOSC>, <&rtc CLK_OSC32K_FANOUT>;
clock-names = "hosc", "losc",
"iosc", "losc-fanout";
#clock-cells = <1>;
#reset-cells = <1>;
};
mmc0: mmc@4020000 {
compatible = "allwinner,sun55i-a523-mmc",
"allwinner,sun20i-d1-mmc";
reg = <0x04020000 0x1000>;
clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>;
clock-names = "ahb", "mmc";
resets = <&ccu RST_BUS_MMC0>;
reset-names = "ahb";
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins>;
status = "disabled";
max-frequency = <150000000>;
cap-sd-highspeed;
cap-mmc-highspeed;
cap-sdio-irq;
#address-cells = <1>;
#size-cells = <0>;
};
mmc1: mmc@4021000 {
compatible = "allwinner,sun55i-a523-mmc",
"allwinner,sun20i-d1-mmc";
reg = <0x04021000 0x1000>;
clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
clock-names = "ahb", "mmc";
resets = <&ccu RST_BUS_MMC1>;
reset-names = "ahb";
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
status = "disabled";
max-frequency = <150000000>;
cap-sd-highspeed;
cap-mmc-highspeed;
cap-sdio-irq;
#address-cells = <1>;
#size-cells = <0>;
};
mmc2: mmc@4022000 {
compatible = "allwinner,sun55i-a523-mmc",
"allwinner,sun20i-d1-mmc";
reg = <0x04022000 0x1000>;
clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
clock-names = "ahb", "mmc";
resets = <&ccu RST_BUS_MMC2>;
reset-names = "ahb";
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>;
status = "disabled";
max-frequency = <150000000>;
cap-sd-highspeed;
cap-mmc-highspeed;
cap-sdio-irq;
#address-cells = <1>;
#size-cells = <0>;
};
wdt: watchdog@2050000 {
compatible = "allwinner,sun55i-a523-wdt";
reg = <0x2050000 0x20>;
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&osc24M>, <&rtc CLK_OSC32K>;
clock-names = "hosc", "losc";
status = "okay";
};
uart0: serial@2500000 {
compatible = "snps,dw-apb-uart";
reg = <0x02500000 0x400>;
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART0>;
resets = <&ccu RST_BUS_UART0>;
status = "disabled";
};
uart1: serial@2500400 {
compatible = "snps,dw-apb-uart";
reg = <0x02500400 0x400>;
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART1>;
resets = <&ccu RST_BUS_UART1>;
status = "disabled";
};
uart2: serial@2500800 {
compatible = "snps,dw-apb-uart";
reg = <0x02500800 0x400>;
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART2>;
resets = <&ccu RST_BUS_UART2>;
status = "disabled";
};
uart3: serial@2500c00 {
compatible = "snps,dw-apb-uart";
reg = <0x02500c00 0x400>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART3>;
resets = <&ccu RST_BUS_UART3>;
status = "disabled";
};
uart4: serial@2501000 {
compatible = "snps,dw-apb-uart";
reg = <0x02501000 0x400>;
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART4>;
resets = <&ccu RST_BUS_UART4>;
status = "disabled";
};
uart5: serial@2501400 {
compatible = "snps,dw-apb-uart";
reg = <0x02501400 0x400>;
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART5>;
resets = <&ccu RST_BUS_UART5>;
status = "disabled";
};
uart6: serial@2501800 {
compatible = "snps,dw-apb-uart";
reg = <0x02501800 0x400>;
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART6>;
resets = <&ccu RST_BUS_UART6>;
status = "disabled";
};
uart7: serial@2501c00 {
compatible = "snps,dw-apb-uart";
reg = <0x02501c00 0x400>;
interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
reg-shift = <2>;
reg-io-width = <4>;
clocks = <&ccu CLK_BUS_UART7>;
resets = <&ccu RST_BUS_UART7>;
status = "disabled";
};
i2c0: i2c@2502000 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x2502000 0x400>;
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C0>;
resets = <&ccu RST_BUS_I2C0>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
i2c1: i2c@2502400 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x2502400 0x400>;
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C1>;
resets = <&ccu RST_BUS_I2C1>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
i2c2: i2c@2502800 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x2502800 0x400>;
interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C2>;
resets = <&ccu RST_BUS_I2C2>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
i2c3: i2c@2502c00 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x2502c00 0x400>;
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C3>;
resets = <&ccu RST_BUS_I2C3>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
i2c4: i2c@2503000 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x2503000 0x400>;
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C4>;
resets = <&ccu RST_BUS_I2C4>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
i2c5: i2c@2503400 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x2503400 0x400>;
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C5>;
resets = <&ccu RST_BUS_I2C5>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
syscon: syscon@3000000 {
compatible = "allwinner,sun55i-a523-system-control",
"allwinner,sun50i-a64-system-control";
reg = <0x03000000 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
ranges;
};
gic: interrupt-controller@3400000 {
compatible = "arm,gic-v3";
#address-cells = <1>;
#interrupt-cells = <3>;
#size-cells = <1>;
ranges;
interrupt-controller;
reg = <0x3400000 0x10000>,
<0x3460000 0x100000>;
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
dma-noncoherent;
its: msi-controller@3440000 {
compatible = "arm,gic-v3-its";
reg = <0x3440000 0x20000>;
msi-controller;
#msi-cells = <1>;
dma-noncoherent;
};
};
usb_otg: usb@4100000 {
compatible = "allwinner,sun55i-a523-musb",
"allwinner,sun8i-a33-musb";
reg = <0x4100000 0x400>;
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "mc";
clocks = <&ccu CLK_BUS_OTG>;
resets = <&ccu RST_BUS_OTG>;
extcon = <&usbphy 0>;
phys = <&usbphy 0>;
phy-names = "usb";
status = "disabled";
};
usbphy: phy@4100400 {
compatible = "allwinner,sun55i-a523-usb-phy",
"allwinner,sun20i-d1-usb-phy";
reg = <0x4100400 0x100>,
<0x4101800 0x100>,
<0x4200800 0x100>;
reg-names = "phy_ctrl",
"pmu0",
"pmu1";
clocks = <&osc24M>,
<&osc24M>;
clock-names = "usb0_phy",
"usb1_phy";
resets = <&ccu RST_USB_PHY0>,
<&ccu RST_USB_PHY1>;
reset-names = "usb0_reset",
"usb1_reset";
status = "disabled";
#phy-cells = <1>;
};
ehci0: usb@4101000 {
compatible = "allwinner,sun55i-a523-ehci",
"generic-ehci";
reg = <0x4101000 0x100>;
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_OHCI0>,
<&ccu CLK_BUS_EHCI0>,
<&ccu CLK_USB_OHCI0>;
resets = <&ccu RST_BUS_OHCI0>,
<&ccu RST_BUS_EHCI0>;
phys = <&usbphy 0>;
phy-names = "usb";
status = "disabled";
};
ohci0: usb@4101400 {
compatible = "allwinner,sun55i-a523-ohci",
"generic-ohci";
reg = <0x4101400 0x100>;
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_OHCI0>,
<&ccu CLK_USB_OHCI0>;
resets = <&ccu RST_BUS_OHCI0>;
phys = <&usbphy 0>;
phy-names = "usb";
status = "disabled";
};
ehci1: usb@4200000 {
compatible = "allwinner,sun55i-a523-ehci",
"generic-ehci";
reg = <0x4200000 0x100>;
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_OHCI1>,
<&ccu CLK_BUS_EHCI1>,
<&ccu CLK_USB_OHCI1>;
resets = <&ccu RST_BUS_OHCI1>,
<&ccu RST_BUS_EHCI1>;
phys = <&usbphy 1>;
phy-names = "usb";
status = "disabled";
};
ohci1: usb@4200400 {
compatible = "allwinner,sun55i-a523-ohci",
"generic-ohci";
reg = <0x4200400 0x100>;
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_OHCI1>,
<&ccu CLK_USB_OHCI1>;
resets = <&ccu RST_BUS_OHCI1>;
phys = <&usbphy 1>;
phy-names = "usb";
status = "disabled";
};
emac0: ethernet@4500000 {
compatible = "allwinner,sun55i-a523-emac0",
"allwinner,sun50i-a64-emac";
reg = <0x04500000 0x10000>;
clocks = <&ccu CLK_BUS_EMAC0>;
clock-names = "stmmaceth";
resets = <&ccu RST_BUS_EMAC0>;
reset-names = "stmmaceth";
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq";
pinctrl-names = "default";
pinctrl-0 = <&rgmii0_pins>;
syscon = <&syscon>;
status = "disabled";
mdio0: mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
};
};
r_ccu: clock-controller@7010000 {
compatible = "allwinner,sun55i-a523-r-ccu";
reg = <0x7010000 0x250>;
clocks = <&osc24M>,
<&rtc CLK_OSC32K>,
<&rtc CLK_IOSC>,
<&ccu CLK_PLL_PERIPH0_200M>,
<&ccu CLK_PLL_AUDIO0_4X>;
clock-names = "hosc",
"losc",
"iosc",
"pll-periph",
"pll-audio";
#clock-cells = <1>;
#reset-cells = <1>;
};
nmi_intc: interrupt-controller@7010320 {
compatible = "allwinner,sun55i-a523-nmi";
reg = <0x07010320 0xc>;
interrupt-controller;
#interrupt-cells = <2>;
interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
};
r_pio: pinctrl@7022000 {
compatible = "allwinner,sun55i-a523-r-pinctrl";
reg = <0x7022000 0x800>;
interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&r_ccu CLK_R_APB0>,
<&osc24M>,
<&rtc CLK_OSC32K>;
clock-names = "apb", "hosc", "losc";
gpio-controller;
#gpio-cells = <3>;
interrupt-controller;
#interrupt-cells = <3>;
r_i2c_pins: r-i2c-pins {
pins = "PL0" ,"PL1";
allwinner,pinmux = <2>;
function = "r_i2c0";
};
};
r_i2c0: i2c@7081400 {
compatible = "allwinner,sun55i-a523-i2c",
"allwinner,sun8i-v536-i2c",
"allwinner,sun6i-a31-i2c";
reg = <0x07081400 0x400>;
interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&r_ccu CLK_BUS_R_I2C0>;
resets = <&r_ccu RST_BUS_R_I2C0>;
pinctrl-names = "default";
pinctrl-0 = <&r_i2c_pins>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
rtc: rtc@7090000 {
compatible = "allwinner,sun55i-a523-rtc",
"allwinner,sun50i-r329-rtc";
reg = <0x7090000 0x400>;
interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&r_ccu CLK_BUS_R_RTC>,
<&osc24M>,
<&r_ccu CLK_R_AHB>;
clock-names = "bus", "hosc", "ahb";
#clock-cells = <1>;
};
};
};

View File

@ -0,0 +1,318 @@
// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
// Copyright (C) 2025 Arm Ltd.
/dts-v1/;
#include "sun55i-a523.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
model = "Radxa Cubie A5E";
compatible = "radxa,cubie-a5e", "allwinner,sun55i-a527";
aliases {
ethernet0 = &emac0;
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";
};
reg_vcc5v: vcc5v {
/* board wide 5V supply from the USB-C connector */
compatible = "regulator-fixed";
regulator-name = "vcc-5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
reg_usb_vbus: vbus {
compatible = "regulator-fixed";
regulator-name = "usb-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&reg_vcc5v>;
gpio = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */
enable-active-high;
};
};
&ehci0 {
status = "okay";
};
&ehci1 {
status = "okay";
};
&emac0 {
phy-mode = "rgmii-id";
phy-handle = <&ext_rgmii_phy>;
phy-supply = <&reg_cldo3>;
allwinner,tx-delay-ps = <300>;
allwinner,rx-delay-ps = <400>;
status = "okay";
};
&mdio0 {
ext_rgmii_phy: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
};
&mmc0 {
vmmc-supply = <&reg_cldo3>;
cd-gpios = <&pio 5 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PF6 */
bus-width = <4>;
status = "okay";
};
&ohci0 {
status = "okay";
};
&ohci1 {
status = "okay";
};
&pio {
vcc-pb-supply = <&reg_cldo3>; /* via VCC-IO */
vcc-pc-supply = <&reg_cldo1>;
vcc-pd-supply = <&reg_cldo3>;
vcc-pe-supply = <&reg_aldo2>;
vcc-pf-supply = <&reg_cldo3>; /* actually switchable */
vcc-pg-supply = <&reg_bldo1>;
vcc-ph-supply = <&reg_cldo3>; /* via VCC-IO */
vcc-pi-supply = <&reg_cldo3>;
vcc-pj-supply = <&reg_cldo4>;
vcc-pk-supply = <&reg_cldo1>;
};
&r_i2c0 {
status = "okay";
axp717: pmic@34 {
compatible = "x-powers,axp717";
reg = <0x34>;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
vin1-supply = <&reg_vcc5v>;
vin2-supply = <&reg_vcc5v>;
vin3-supply = <&reg_vcc5v>;
vin4-supply = <&reg_vcc5v>;
aldoin-supply = <&reg_vcc5v>;
bldoin-supply = <&reg_vcc5v>;
cldoin-supply = <&reg_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 = <1100000>;
regulator-max-microvolt = <1100000>;
regulator-name = "vdd-dram";
};
reg_aldo1: aldo1 {
/* not connected */
};
reg_aldo2: aldo2 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
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-iowifi";
};
reg_bldo2: bldo2 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-pm-lpddr4";
};
reg_bldo3: bldo3 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-mipi-cam";
};
reg_bldo4: bldo4 {
/* not connected */
};
reg_cldo1: cldo1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-pc-and-their-dog";
};
reg_cldo2: cldo2 {
/* not connected */
};
reg_cldo3: cldo3 {
/* IO, USB-2, 3V3, card, NAND, sensor, PI */
regulator-always-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-io-mmc-spi-ana";
};
reg_cldo4: cldo4 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-pj-phy";
};
reg_cpusldo: cpusldo {
/* supplies the management core */
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdd-cpus";
};
};
};
axp323: pmic@36 {
compatible = "x-powers,axp323";
reg = <0x36>;
#interrupt-cells = <1>;
interrupt-controller;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
status = "okay";
vin1-supply = <&reg_vcc5v>;
vin2-supply = <&reg_vcc5v>;
vin3-supply = <&reg_vcc5v>;
regulators {
aldo1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-mipi-dsi";
};
dldo1 {
/* not connected */
};
/* Supplies the "big" cluster (1.8 GHz cores) */
reg_dcdc1_323: dcdc1 {
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1160000>;
regulator-name = "vdd-cpub";
};
/* DCDC2 is polyphased with DCDC1 */
/* RISC-V management core supply */
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 = <&reg_aldo3>;
*/
vcc-pm-supply = <&reg_aldo3>;
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pb_pins>;
status = "okay";
};
&usb_otg {
/*
* The USB-C port is the primary power supply, so in this configuration
* relies on the other end of the USB cable to supply the VBUS power.
* So use this port in peripheral mode.
* It is possible to supply the board with the 5V pins on the GPIO
* header, and since the DCIN_5V line is hardwired to the USB-C VBUS
* pins, the port turns into a host port, unconditionally supplying
* power. The dr_mode property should be changed to "host" here, if
* users choose this setup.
*/
dr_mode = "peripheral";
status = "okay";
};
/*
* The schematic describes USB0_ID (PL10), measuring VBUS_5V, which looks to
* be always on. Also there is USB-VBUSDET (PL2), which is measuring the same
* VBUS_5V. There is also DCIN_DET, which measures DCIN_5V, so the power
* input rail.
* None of them seem to make any sense in relation to detecting USB devices
* or whether there is power provided via any USB pins: they would always
* report high, otherwise the system wouldn't be running.
* The AXP717C provides proper USB-C CC pin functionality, but the PMIC is
* not connected to those pins of the USB-C connector.
*/
&usbphy {
usb0_vbus-supply = <&reg_vcc5v>;
usb1_vbus-supply = <&reg_usb_vbus>;
status = "okay";
};

View File

@ -0,0 +1,287 @@
// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
// Copyright (C) 2024 Arm Ltd.
/dts-v1/;
#include "sun55i-a523.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
model = "X96Q Pro+";
compatible = "amediatech,x96q-pro-plus", "allwinner,sun55i-h728";
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";
};
reg_vcc5v: vcc5v {
/* board wide 5V supply from the barrel plug */
compatible = "regulator-fixed";
regulator-name = "vcc-5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
reg_vcc3v3: vcc3v3 {
/* 3.3V dummy supply for the SD card */
compatible = "regulator-fixed";
regulator-name = "vcc-3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&reg_vcc5v>;
regulator-always-on;
};
};
&ehci0 {
status = "okay";
};
&ehci1 {
status = "okay";
};
&mmc0 {
vmmc-supply = <&reg_vcc3v3>;
cd-gpios = <&pio 5 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PF6 */
bus-width = <4>;
disable-wp;
status = "okay";
};
&mmc2 {
vmmc-supply = <&reg_cldo3>;
vqmmc-supply = <&reg_cldo1>;
bus-width = <8>;
non-removable;
cap-mmc-hw-reset;
mmc-ddr-1_8v;
mmc-hs200-1_8v;
status = "okay";
};
&ohci0 {
status = "okay";
};
&ohci1 {
status = "okay";
};
&pio {
vcc-pb-supply = <&reg_cldo3>; /* via VCC-IO */
vcc-pc-supply = <&reg_cldo1>;
vcc-pd-supply = <&reg_dcdc4>;
vcc-pe-supply = <&reg_dcdc4>;
vcc-pf-supply = <&reg_cldo3>; /* actually switchable */
vcc-pg-supply = <&reg_bldo1>;
vcc-ph-supply = <&reg_cldo3>; /* via VCC-IO */
vcc-pi-supply = <&reg_dcdc4>;
vcc-pj-supply = <&reg_dcdc4>;
vcc-pk-supply = <&reg_bldo3>;
};
&r_i2c0 {
status = "okay";
axp717: pmic@34 {
compatible = "x-powers,axp717";
reg = <0x34>;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
vin1-supply = <&reg_vcc5v>;
vin2-supply = <&reg_vcc5v>;
vin3-supply = <&reg_vcc5v>;
vin4-supply = <&reg_vcc5v>;
aldoin-supply = <&reg_vcc5v>;
bldoin-supply = <&reg_vcc5v>;
cldoin-supply = <&reg_vcc5v>;
regulators {
/* Supplies the "little" cluster (1.0(?) 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 = <1360000>;
regulator-max-microvolt = <1360000>;
regulator-name = "vdd-dram";
};
reg_dcdc4: dcdc4 {
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-name = "vdd-dcdc4";
};
reg_aldo1: aldo1 {
/* not connected */
};
reg_aldo2: aldo2 {
/* not connected */
};
reg_aldo3: aldo3 {
regulator-always-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-aldo3";
};
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-lvds";
};
reg_bldo2: bldo2 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-dram-1v8";
};
reg_bldo3: bldo3 {
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-name = "vcc-bldo3";
};
reg_bldo4: bldo4 {
/* not connected */
};
reg_cldo1: cldo1 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-codec-sd";
};
reg_cldo2: cldo2 {
};
reg_cldo3: cldo3 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-codec-eth-sd";
};
reg_cldo4: cldo4 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-eth-phy";
};
reg_cpusldo: cpusldo {
/* supplies the management core */
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdd-cpus";
};
};
};
axp323: pmic@36 {
compatible = "x-powers,axp323";
reg = <0x36>;
#interrupt-cells = <1>;
interrupt-controller;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
status = "okay";
vin1-supply = <&reg_vcc5v>;
vin2-supply = <&reg_vcc5v>;
vin3-supply = <&reg_vcc5v>;
regulators {
aldo1 {
/* not connected */
};
dldo1 {
/* not connected */
};
/* Supplies the "big" cluster (1.8 GHz cores) */
reg_dcdc1_323: dcdc1 {
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1160000>;
regulator-name = "vdd-cpub";
};
/* DCDC2 is polyphased with DCDC1 */
reg_dcdc3_323: dcdc3 {
regulator-always-on;
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <1050000>;
regulator-name = "vdd-dcdc3";
};
};
};
};
&r_pio {
/*
* Specifying the supply would create a circular dependency.
*
* vcc-pl-supply = <&reg_aldo3>;
*/
vcc-pm-supply = <&reg_aldo3>;
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pb_pins>;
status = "okay";
};
&usb_otg {
/* USB0 is a USB-A receptacle, always powered, so force host mode. */
dr_mode = "host";
status = "okay";
};
&usbphy {
status = "okay";
};

View File

@ -0,0 +1,327 @@
// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
// Copyright (C) 2024 Arm Ltd.
/dts-v1/;
#include "sun55i-a523.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
model = "Avaota A1";
compatible = "yuzukihd,avaota-a1", "allwinner,sun55i-t527";
aliases {
ethernet0 = &emac0;
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";
};
reg_vcc12v: vcc12v {
/* DC input jack */
compatible = "regulator-fixed";
regulator-name = "vcc-12v";
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
regulator-always-on;
};
reg_vcc5v: vcc5v {
/* board wide 5V supply from the 12V->5V regulator */
compatible = "regulator-fixed";
regulator-name = "vcc-5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&reg_vcc12v>;
regulator-always-on;
};
reg_usb_vbus: vbus {
compatible = "regulator-fixed";
regulator-name = "usb-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&reg_vcc5v>;
gpio = <&pio 8 12 GPIO_ACTIVE_HIGH>; /* PI12 */
enable-active-high;
};
};
&ehci0 {
status = "okay";
};
&ehci1 {
status = "okay";
};
&emac0 {
phy-mode = "rgmii-id";
phy-handle = <&ext_rgmii_phy>;
phy-supply = <&reg_dcdc4>;
allwinner,tx-delay-ps = <100>;
allwinner,rx-delay-ps = <300>;
status = "okay";
};
&mdio0 {
ext_rgmii_phy: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
};
&mmc0 {
vmmc-supply = <&reg_cldo3>;
cd-gpios = <&pio 5 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PF6 */
bus-width = <4>;
status = "okay";
};
&mmc2 {
bus-width = <8>;
cap-mmc-hw-reset;
mmc-ddr-1_8v;
mmc-hs200-1_8v;
non-removable;
vmmc-supply = <&reg_cldo3>;
vqmmc-supply = <&reg_cldo1>;
status = "okay";
};
&ohci0 {
status = "okay";
};
&ohci1 {
status = "okay";
};
&pio {
vcc-pb-supply = <&reg_cldo3>; /* via VCC-IO */
vcc-pc-supply = <&reg_cldo1>;
vcc-pd-supply = <&reg_dcdc4>;
vcc-pe-supply = <&reg_dcdc4>;
vcc-pf-supply = <&reg_cldo3>; /* actually switchable */
vcc-pg-supply = <&reg_bldo1>;
vcc-ph-supply = <&reg_cldo3>; /* via VCC-IO */
vcc-pi-supply = <&reg_dcdc4>;
vcc-pj-supply = <&reg_dcdc4>;
vcc-pk-supply = <&reg_bldo3>;
};
&r_i2c0 {
status = "okay";
axp717: pmic@35 {
compatible = "x-powers,axp717";
reg = <0x35>;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
vin1-supply = <&reg_vcc5v>;
vin2-supply = <&reg_vcc5v>;
vin3-supply = <&reg_vcc5v>;
vin4-supply = <&reg_vcc5v>;
aldoin-supply = <&reg_vcc5v>;
bldoin-supply = <&reg_vcc5v>;
cldoin-supply = <&reg_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 = "vdd-dram";
};
reg_dcdc4: dcdc4 {
regulator-always-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vdd-io";
};
reg_aldo1: aldo1 {
/* not connected */
};
reg_aldo2: aldo2 {
/* not connected */
};
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-pm";
};
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-lvds";
};
reg_bldo2: bldo2 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-dram-1v8";
};
reg_bldo3: bldo3 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-cvp-pk-vid1v8";
};
reg_bldo4: bldo4 {
/* not connected */
};
reg_cldo1: cldo1 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-pc";
};
reg_cldo2: cldo2 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc-efuse";
};
reg_cldo3: cldo3 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc-io-mmc-spi-ana";
};
reg_cldo4: cldo4 {
/* not connected */
};
reg_cpusldo: cpusldo {
/* supplies the management core */
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-name = "vdd-cpus";
};
};
};
axp323: pmic@36 {
compatible = "x-powers,axp323";
reg = <0x36>;
#interrupt-cells = <1>;
interrupt-controller;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
status = "okay";
vin1-supply = <&reg_vcc5v>;
vin2-supply = <&reg_vcc5v>;
vin3-supply = <&reg_vcc5v>;
regulators {
aldo1 {
/* not connected */
};
dldo1 {
/* not connected */
};
/* Supplies the "big" cluster (1.8 GHz cores) */
reg_dcdc1_323: dcdc1 {
regulator-always-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1160000>;
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 = <&reg_aldo3>;
*/
vcc-pm-supply = <&reg_aldo3>;
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pb_pins>;
status = "okay";
};
&usb_otg {
/*
* The CC pins of the USB-C port have two pull-down resistors
* connected to GND, which fixes this port to a peripheral role.
* 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 the CC pins there is no real way to do a
* runtime role detection.
*/
dr_mode = "peripheral";
status = "okay";
};
&usbphy {
usb0_vbus-supply = <&reg_usb_vbus>;
usb0_vbus_det-gpios = <&pio 8 13 GPIO_ACTIVE_HIGH>; /* PI13 */
status = "okay";
};