* [PATCH v3 0/3] arm64: dts: allwinner: add A733/Cubie A7S support
@ 2026-11-10 4:45 Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 1/3] dt-bindings: arm: sunxi: document Radxa Cubie A7S Enzo Adriano
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Enzo Adriano @ 2026-11-10 4:45 UTC (permalink / raw)
To: andre.przywara, robh, krzk+dt, conor+dt, wens, jernej.skrabec, samuel
Cc: Maxime Ripard, devicetree, linux-arm-kernel, linux-sunxi,
linux-kernel, Junhui Liu, Jerome Brunet, Pablo Mazzini,
Vinicius Pedrosa, Alexander Sverdlin, Jun Yan, Lukas Schmid
This series adds the initial Allwinner A733 and Radxa Cubie A7S device
trees, enabling UART0, the AXP318W PMIC and the 3.3 V microSD path.
Base: v7.4-rc1 (6628e7d4c6b25c8d18f1345e3a20d21829aae7e4).
Previous posting (v2):
https://lore.kernel.org/r/20261031020640-263f7b05-a7s-dt-v2-0@gmail.com
Changes in v3:
- Defer SMHC3/mmc3 until it has a tested user; omit binding, node and pins.
- Rebase on v7.4-rc1 and list public schema prerequisites.
Dependencies, in application order:
[1] A733 CCU v6:
https://lore.kernel.org/r/20261009-a733-clk-v6-0-ae8178fce7e8@pigmoral.tech
[2] AXP318W PMIC v8:
https://lore.kernel.org/r/20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com
[3] Pinctrl IRQ-bank v3:
https://lore.kernel.org/r/20261025142412.112216-1-pmazzini@gmail.com
[4] A733 8250_dw v2, patches 2-4:
https://lore.kernel.org/r/cover.1792439398.git.vinicius.eduardo.pedrosa@gmail.com
[5] Firmware clocks (separate from CCU v6):
https://lore.kernel.org/r/20261031020640-263f7b05-a7s-clock@gmail.com
[6] Pinctrl voltage-mode fix v3:
https://lore.kernel.org/r/20261109-a733-pinctrl-v3@gmail.com
DTB/schema checks need only [1] 1/8, [2] 3/5, [3] 2/3 and [4] 3/4,
applied in that order before this series. Runtime needs the full CCU,
PMIC and IRQ-bank series, [4] patches 2-4, and [5]-[6]. The clock helpers
listed in v2 are already in v7.4-rc1.
Validation: arm/sunxi.yaml schema check, W=2 CHECK_DTBS=y DTB build
and clean git-am reader test passed. The November 4 DT v2 RAM boot
exercised UART0, PMIC and MMC0 reads on Cubie A7S with vendor firmware
and pinctrl v2; v3 removes a disabled controller and unused pin group.
Untested: boot with pinctrl v3, card writes, hotplug, 1.8 V switching,
other UART/I2C and storage instances, RTC alarms, EL2/ITS/MSI, and
physical BLDO2 voltage.
Enzo Adriano (3):
dt-bindings: arm: sunxi: document Radxa Cubie A7S
arm64: dts: allwinner: add A733 SoC description
arm64: dts: allwinner: add Radxa Cubie A7S board
.../devicetree/bindings/arm/sunxi.yaml | 5 +
arch/arm64/boot/dts/allwinner/Makefile | 1 +
.../dts/allwinner/sun60i-a733-cubie-a7s.dts | 284 +++++++++
.../arm64/boot/dts/allwinner/sun60i-a733.dtsi | 601 ++++++++++++++++++
4 files changed, 891 insertions(+)
create mode 100644 arch/arm64/boot/dts/allwinner/sun60i-a733-cubie-a7s.dts
create mode 100644 arch/arm64/boot/dts/allwinner/sun60i-a733.dtsi
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 1/3] dt-bindings: arm: sunxi: document Radxa Cubie A7S
2026-11-10 4:45 [PATCH v3 0/3] arm64: dts: allwinner: add A733/Cubie A7S support Enzo Adriano
@ 2026-11-10 4:45 ` Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 2/3] arm64: dts: allwinner: add A733 SoC description Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 3/3] arm64: dts: allwinner: add Radxa Cubie A7S board Enzo Adriano
2 siblings, 0 replies; 4+ messages in thread
From: Enzo Adriano @ 2026-11-10 4:45 UTC (permalink / raw)
To: andre.przywara, robh, krzk+dt, conor+dt, wens, jernej.skrabec, samuel
Cc: Maxime Ripard, devicetree, linux-arm-kernel, linux-sunxi,
linux-kernel, Junhui Liu, Jerome Brunet, Pablo Mazzini,
Vinicius Pedrosa, Alexander Sverdlin, Jun Yan, Lukas Schmid,
Krzysztof Kozlowski
Document the Radxa Cubie A7S board and Allwinner A733 SoC compatibles
for the accompanying initial board device tree, so it can be identified
and validated.
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Enzo Adriano <enzo.adriano.code@gmail.com>
---
Documentation/devicetree/bindings/arm/sunxi.yaml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/sunxi.yaml b/Documentation/devicetree/bindings/arm/sunxi.yaml
index 28437c47ac01..37a7d713ac71 100644
--- a/Documentation/devicetree/bindings/arm/sunxi.yaml
+++ b/Documentation/devicetree/bindings/arm/sunxi.yaml
@@ -857,6 +857,11 @@ properties:
- const: radxa,cubie-a5e
- const: allwinner,sun55i-a527
+ - description: Radxa Cubie A7S
+ items:
+ - const: radxa,cubie-a7s
+ - const: allwinner,sun60i-a733
+
- description: Remix Mini PC
items:
- const: jide,remix-mini-pc
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 2/3] arm64: dts: allwinner: add A733 SoC description
2026-11-10 4:45 [PATCH v3 0/3] arm64: dts: allwinner: add A733/Cubie A7S support Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 1/3] dt-bindings: arm: sunxi: document Radxa Cubie A7S Enzo Adriano
@ 2026-11-10 4:45 ` Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 3/3] arm64: dts: allwinner: add Radxa Cubie A7S board Enzo Adriano
2 siblings, 0 replies; 4+ messages in thread
From: Enzo Adriano @ 2026-11-10 4:45 UTC (permalink / raw)
To: andre.przywara, robh, krzk+dt, conor+dt, wens, jernej.skrabec, samuel
Cc: Maxime Ripard, devicetree, linux-arm-kernel, linux-sunxi,
linux-kernel, Junhui Liu, Jerome Brunet, Pablo Mazzini,
Vinicius Pedrosa, Alexander Sverdlin, Jun Yan, Lukas Schmid
Provide the SoC description needed for the Cubie A7S console, PMIC and
microSD support. Describe the CPUs, PSCI, architectural timers, GIC,
RTC, main and always-on clock/reset and pin controllers. Include the
main and R-domain UART/I2C instances and MMC0-2 with their pin groups.
The GIC maintenance PPI 9 and ARMv8.2 EL2 virtual-timer PPI 12 follow
the A733 User Manual v1.00, section 12.2.3. The GICD/GICR/ITS windows
and noncoherent attributes follow Andre Przywara's public A733
reference and the A523 precedent. The CPUX interconnect diagram in
section 5.1.2 supports noncoherency as an integration inference. The
ITS stays disabled pending its clock/reset and MSI integration.
The enabled console, R-I2C0/PMIC and MMC0 paths were exercised on a
Cubie A7S with vendor firmware in the November 4 RAM boot of DT v2.
EL2 interrupt delivery and ITS/MSI were not tested.
Link: https://gist.githubusercontent.com/apritzel/60fd7379b9560a15b8b352986b69d39f/raw/efd9cdf8f26ba5b0c7e138f093af44a1cf322469/sun60i-a733.dts
Signed-off-by: Enzo Adriano <enzo.adriano.code@gmail.com>
---
.../arm64/boot/dts/allwinner/sun60i-a733.dtsi | 601 ++++++++++++++++++
1 file changed, 601 insertions(+)
create mode 100644 arch/arm64/boot/dts/allwinner/sun60i-a733.dtsi
diff --git a/arch/arm64/boot/dts/allwinner/sun60i-a733.dtsi b/arch/arm64/boot/dts/allwinner/sun60i-a733.dtsi
new file mode 100644
index 000000000000..d0b9f432e3ab
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun60i-a733.dtsi
@@ -0,0 +1,601 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
+
+#include <dt-bindings/clock/sun6i-rtc.h>
+#include <dt-bindings/clock/allwinner,sun60i-a733-ccu.h>
+#include <dt-bindings/clock/allwinner,sun60i-a733-r-ccu.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/reset/allwinner,sun60i-a733-ccu.h>
+#include <dt-bindings/reset/allwinner,sun60i-a733-r-ccu.h>
+
+/ {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ interrupt-parent = <&gic>;
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu@0 {
+ compatible = "arm,cortex-a55";
+ device_type = "cpu";
+ reg = <0x0>;
+ 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-a76";
+ device_type = "cpu";
+ reg = <0x600>;
+ enable-method = "psci";
+ };
+
+ cpu7: cpu@700 {
+ compatible = "arm,cortex-a76";
+ device_type = "cpu";
+ reg = <0x700>;
+ enable-method = "psci";
+ };
+ };
+
+ osc: osc-clk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ };
+
+ psci {
+ compatible = "arm,psci-0.2";
+ method = "smc";
+ };
+
+ timer {
+ compatible = "arm,armv8-timer";
+ 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>,
+ <GIC_PPI 12 IRQ_TYPE_LEVEL_HIGH>;
+ arm,no-tick-in-suspend;
+ };
+
+ soc@0 {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x0 0x0 0x40000000>;
+
+ pio: pinctrl@2000000 {
+ compatible = "allwinner,sun60i-a733-pinctrl";
+ reg = <0x02000000 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 87 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_APB1>, <&osc>, <&rtc CLK_OSC32K>;
+ clock-names = "apb", "hosc", "losc";
+ gpio-controller;
+ #gpio-cells = <3>;
+ interrupt-controller;
+ #interrupt-cells = <3>;
+
+ mmc0_pins: mmc0-pins {
+ pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
+ function = "mmc0";
+ allwinner,pinmux = <2>;
+ drive-strength = <30>;
+ bias-pull-up;
+ };
+
+ mmc1_pins: mmc1-pins {
+ pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5";
+ function = "mmc1";
+ allwinner,pinmux = <2>;
+ drive-strength = <30>;
+ bias-pull-up;
+ };
+
+ mmc2_pins: mmc2-pins {
+ pins = "PC5", "PC6", "PC8", "PC9", "PC10", "PC11",
+ "PC13", "PC14", "PC15", "PC16";
+ function = "mmc2";
+ allwinner,pinmux = <3>;
+ drive-strength = <30>;
+ bias-pull-up;
+ };
+
+ uart0_pb_pins: uart0-pb-pins {
+ pins = "PB9", "PB10";
+ function = "uart0";
+ allwinner,pinmux = <2>;
+ };
+ };
+
+ ccu: clock-controller@2002000 {
+ compatible = "allwinner,sun60i-a733-ccu";
+ reg = <0x02002000 0x2000>;
+ clocks = <&osc>, <&rtc CLK_OSC32K>, <&rtc CLK_IOSC>,
+ <&rtc CLK_OSC32K_FANOUT>;
+ clock-names = "hosc", "losc", "iosc", "losc-fanout";
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ };
+
+ uart0: serial@2500000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "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@2501000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x02501000 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@2502000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x02502000 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@2503000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x02503000 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@2504000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x02504000 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@2505000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x02505000 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@2506000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x02506000 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";
+ };
+
+ i2c0: i2c@2510000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02510000 0x400>;
+ interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C0>;
+ resets = <&ccu RST_BUS_I2C0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c1: i2c@2511000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02511000 0x400>;
+ interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C1>;
+ resets = <&ccu RST_BUS_I2C1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c2: i2c@2512000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02512000 0x400>;
+ interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C2>;
+ resets = <&ccu RST_BUS_I2C2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c3: i2c@2513000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02513000 0x400>;
+ interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C3>;
+ resets = <&ccu RST_BUS_I2C3>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c4: i2c@2514000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02514000 0x400>;
+ interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C4>;
+ resets = <&ccu RST_BUS_I2C4>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c5: i2c@2515000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02515000 0x400>;
+ interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C5>;
+ resets = <&ccu RST_BUS_I2C5>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c6: i2c@2516000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02516000 0x400>;
+ interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C6>;
+ resets = <&ccu RST_BUS_I2C6>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c7: i2c@2517000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02517000 0x400>;
+ interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C7>;
+ resets = <&ccu RST_BUS_I2C7>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c8: i2c@2518000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02518000 0x400>;
+ interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C8>;
+ resets = <&ccu RST_BUS_I2C8>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c9: i2c@2519000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x02519000 0x400>;
+ interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C9>;
+ resets = <&ccu RST_BUS_I2C9>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c10: i2c@251a000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x0251a000 0x400>;
+ interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C10>;
+ resets = <&ccu RST_BUS_I2C10>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c11: i2c@251b000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x0251b000 0x400>;
+ interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C11>;
+ resets = <&ccu RST_BUS_I2C11>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c12: i2c@251c000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x0251c000 0x400>;
+ interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_I2C12>;
+ resets = <&ccu RST_BUS_I2C12>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ gic: interrupt-controller@3400000 {
+ compatible = "arm,gic-v3";
+ reg = <0x03400000 0x10000>, <0x03460000 0x100000>;
+ interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+ dma-noncoherent;
+ interrupt-controller;
+ #interrupt-cells = <3>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ its: msi-controller@3440000 {
+ compatible = "arm,gic-v3-its";
+ reg = <0x03440000 0x20000>;
+ msi-controller;
+ #msi-cells = <1>;
+ dma-noncoherent;
+ status = "disabled";
+ };
+ };
+
+ mmc0: mmc@4020000 {
+ compatible = "allwinner,sun60i-a733-mmc",
+ "allwinner,sun20i-d1-mmc";
+ reg = <0x04020000 0x1000>;
+ interrupts = <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>;
+ clock-names = "ahb", "mmc";
+ resets = <&ccu RST_BUS_MMC0>;
+ reset-names = "ahb";
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ mmc1: mmc@4021000 {
+ compatible = "allwinner,sun60i-a733-mmc",
+ "allwinner,sun20i-d1-mmc";
+ reg = <0x04021000 0x1000>;
+ interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
+ clock-names = "ahb", "mmc";
+ resets = <&ccu RST_BUS_MMC1>;
+ reset-names = "ahb";
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ mmc2: mmc@4022000 {
+ compatible = "allwinner,sun60i-a733-mmc",
+ "allwinner,sun20i-d1-mmc";
+ reg = <0x04022000 0x1000>;
+ interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
+ clock-names = "ahb", "mmc";
+ resets = <&ccu RST_BUS_MMC2>;
+ reset-names = "ahb";
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc2_pins>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ r_ccu: clock-controller@7010000 {
+ compatible = "allwinner,sun60i-a733-r-ccu";
+ reg = <0x07010000 0x250>;
+ clocks = <&osc>, <&rtc CLK_OSC32K>, <&rtc CLK_IOSC>,
+ <&ccu CLK_SYS_24M>, <&ccu CLK_PLL_PERIPH0_200M>,
+ <&ccu CLK_PLL_PERIPH0_300M>,
+ <&ccu CLK_PLL_PERIPH1_300M>;
+ clock-names = "hosc", "losc", "iosc", "sys-24m",
+ "pll-periph0-200m", "pll-periph0-300m",
+ "pll-periph1-300m";
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ };
+
+ nmi_intc: interrupt-controller@7010320 {
+ compatible = "allwinner,sun60i-a733-nmi",
+ "allwinner,sun55i-a523-nmi";
+ reg = <0x07010320 0xc>;
+ interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ };
+
+ r_pio: pinctrl@7025000 {
+ compatible = "allwinner,sun60i-a733-r-pinctrl";
+ reg = <0x07025000 0x800>;
+ interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&r_ccu CLK_R_APB0>, <&osc>, <&rtc CLK_OSC32K>;
+ clock-names = "apb", "hosc", "losc";
+ gpio-controller;
+ #gpio-cells = <3>;
+ interrupt-controller;
+ #interrupt-cells = <3>;
+
+ r_i2c0_pl_pins: r-i2c0-pl-pins {
+ pins = "PL0", "PL1";
+ function = "r_i2c0";
+ allwinner,pinmux = <2>;
+ };
+ };
+
+ r_uart0: serial@7080000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x07080000 0x400>;
+ interrupts = <GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ clocks = <&r_ccu CLK_BUS_R_UART0>;
+ resets = <&r_ccu RST_BUS_R_UART0>;
+ status = "disabled";
+ };
+
+ r_uart1: serial@7081000 {
+ compatible = "allwinner,sun60i-a733-uart",
+ "snps,dw-apb-uart";
+ reg = <0x07081000 0x400>;
+ interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>;
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ clocks = <&r_ccu CLK_BUS_R_UART1>;
+ resets = <&r_ccu RST_BUS_R_UART1>;
+ status = "disabled";
+ };
+
+ r_i2c0: i2c@7083000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x07083000 0x400>;
+ interrupts = <GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&r_ccu CLK_BUS_R_I2C0>;
+ resets = <&r_ccu RST_BUS_R_I2C0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ r_i2c1: i2c@7084000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x07084000 0x400>;
+ interrupts = <GIC_SPI 204 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&r_ccu CLK_BUS_R_I2C1>;
+ resets = <&r_ccu RST_BUS_R_I2C1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ r_i2c2: i2c@7085000 {
+ compatible = "allwinner,sun60i-a733-i2c",
+ "allwinner,sun8i-v536-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x07085000 0x400>;
+ interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&r_ccu CLK_BUS_R_I2C2>;
+ resets = <&r_ccu RST_BUS_R_I2C2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ rtc: rtc@7090000 {
+ compatible = "allwinner,sun60i-a733-rtc",
+ "allwinner,sun50i-r329-rtc";
+ reg = <0x07090000 0x400>;
+ interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&r_ccu CLK_BUS_R_RTC>, <&osc>, <&r_ccu CLK_R_AHB>;
+ clock-names = "bus", "hosc", "ahb";
+ #clock-cells = <1>;
+ };
+ };
+};
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 3/3] arm64: dts: allwinner: add Radxa Cubie A7S board
2026-11-10 4:45 [PATCH v3 0/3] arm64: dts: allwinner: add A733/Cubie A7S support Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 1/3] dt-bindings: arm: sunxi: document Radxa Cubie A7S Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 2/3] arm64: dts: allwinner: add A733 SoC description Enzo Adriano
@ 2026-11-10 4:45 ` Enzo Adriano
2 siblings, 0 replies; 4+ messages in thread
From: Enzo Adriano @ 2026-11-10 4:45 UTC (permalink / raw)
To: andre.przywara, robh, krzk+dt, conor+dt, wens, jernej.skrabec, samuel
Cc: Maxime Ripard, devicetree, linux-arm-kernel, linux-sunxi,
linux-kernel, Junhui Liu, Jerome Brunet, Pablo Mazzini,
Vinicius Pedrosa, Alexander Sverdlin, Jun Yan, Lukas Schmid
Enable the Cubie A7S serial console, PMIC and microSD slot to provide
an initial usable board configuration. Supply the 26 MHz crystal and
32768 Hz RTC input, enable UART0 and the AXP318W on R-I2C0, and describe
the PMIC input/output and CPU supply connections from the Radxa Cubie
A7S schematic v1.10. Preserve firmware settings on rails whose working
voltage is not established. BLDO2 has no programmed voltage constraint:
its software 3.3 V selector does not establish its physical output with
the schematic's nominal 2.4 V input.
Describe the card's SWOUT2 supply and PF6 active-high detect with an
internal pull-down. Enable MMC0 at up to 50 MHz using 3.3 V signaling
only. Its high-voltage path uses VCCIO; CLDO5 also feeds PC and the PF
1.8 V input and must not be raised for SD signaling. Firmware must
select the 3.3 V PF path; dynamic voltage switching is not provided.
Keep other storage off.
Connect the documented bank supplies. PL's self-supply phandle is
omitted to avoid the PMIC/I2C/pinctrl bootstrap cycle, as on the
upstream Cubie A5E; ALDO1 is retained always-on. The separate pinctrl
voltage-mode fix is required for these bank-supply connections.
These board DTS bytes were RAM-booted on a Cubie A7S with vendor
firmware on November 4: UART0, PMIC registration and MMC0 read-only
transfers worked. Card writes, physical hotplug, 1.8 V signaling and
physical BLDO2 voltage were not tested.
Signed-off-by: Enzo Adriano <enzo.adriano.code@gmail.com>
---
arch/arm64/boot/dts/allwinner/Makefile | 1 +
.../dts/allwinner/sun60i-a733-cubie-a7s.dts | 284 ++++++++++++++++++
2 files changed, 285 insertions(+)
create mode 100644 arch/arm64/boot/dts/allwinner/sun60i-a733-cubie-a7s.dts
diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile
index d1f768dd6461..792152525b43 100644
--- a/arch/arm64/boot/dts/allwinner/Makefile
+++ b/arch/arm64/boot/dts/allwinner/Makefile
@@ -68,3 +68,4 @@ 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
+dtb-$(CONFIG_ARCH_SUNXI) += sun60i-a733-cubie-a7s.dtb
diff --git a/arch/arm64/boot/dts/allwinner/sun60i-a733-cubie-a7s.dts b/arch/arm64/boot/dts/allwinner/sun60i-a733-cubie-a7s.dts
new file mode 100644
index 000000000000..341c24360ce2
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun60i-a733-cubie-a7s.dts
@@ -0,0 +1,284 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
+/dts-v1/;
+
+#include "sun60i-a733.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+ model = "Radxa Cubie A7S";
+ compatible = "radxa,cubie-a7s", "allwinner,sun60i-a733";
+
+ aliases {
+ mmc0 = &mmc0;
+ serial0 = &uart0;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ reg_ps: regulator-system-power {
+ compatible = "regulator-fixed";
+ regulator-name = "ps";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-always-on;
+ };
+
+ reg_ldo_input: regulator-ldo-input {
+ compatible = "regulator-fixed";
+ regulator-name = "ldo-input";
+ /* ETA3521: 0.6 V * (1 + RP298 / RP299), 30k / 10k. */
+ regulator-min-microvolt = <2400000>;
+ regulator-max-microvolt = <2400000>;
+ regulator-always-on;
+ vin-supply = <®_ps>;
+ };
+
+ osc32k: osc32k-clk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <32768>;
+ };
+};
+
+&cpu0 {
+ cpu-supply = <®_dcdc5>;
+};
+
+&cpu1 {
+ cpu-supply = <®_dcdc5>;
+};
+
+&cpu2 {
+ cpu-supply = <®_dcdc5>;
+};
+
+&cpu3 {
+ cpu-supply = <®_dcdc5>;
+};
+
+&cpu4 {
+ cpu-supply = <®_dcdc5>;
+};
+
+&cpu5 {
+ cpu-supply = <®_dcdc5>;
+};
+
+&cpu6 {
+ cpu-supply = <®_dcdc3>;
+};
+
+&cpu7 {
+ cpu-supply = <®_dcdc3>;
+};
+
+&mmc0 {
+ bus-width = <4>;
+ cap-sd-highspeed;
+ cd-gpios = <&pio 5 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
+ disable-wp;
+ max-frequency = <50000000>;
+ no-1-8-v;
+ vmmc-supply = <®_swout2>;
+ /* The 3.3 V path uses VCC-IO; no Port F voltage switching yet. */
+ vqmmc-supply = <®_swout2>;
+ status = "okay";
+};
+
+&osc {
+ clock-frequency = <26000000>;
+};
+
+&pio {
+ vcc-pb-supply = <®_swout2>;
+ vcc-pc-supply = <®_cldo5>;
+ vcc-pd-supply = <®_swout1>;
+ vcc-pe-supply = <®_bldo1>;
+ vcc-pf-supply = <®_cldo5>;
+ vcc-pg-supply = <®_aldo1>;
+ vcc-ph-supply = <®_swout2>;
+ vcc-pj-supply = <®_swout1>;
+ vcc-pk-supply = <®_bldo1>;
+};
+
+&r_i2c0 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&r_i2c0_pl_pins>;
+
+ axp318w: pmic@36 {
+ compatible = "x-powers,axp318w";
+ reg = <0x36>;
+ interrupt-parent = <&nmi_intc>;
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+
+ aldo156in-supply = <®_ps>;
+ aldo234in-supply = <®_aldo1>;
+ bldoin-supply = <®_ldo_input>;
+ cldoin-supply = <®_ldo_input>;
+ dldoin-supply = <®_ps>;
+ eldoin-supply = <®_dcdc9>;
+ ips-supply = <®_ps>;
+ vin19-supply = <®_ps>;
+ vin23-supply = <®_ps>;
+ vin45-supply = <®_ps>;
+ vin678-supply = <®_ps>;
+
+ regulators {
+ reg_dcdc1: dcdc1 {
+ regulator-name = "vcc-3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
+
+ reg_dcdc2: dcdc2 {
+ regulator-name = "vdd-sys";
+ regulator-always-on;
+ };
+
+ reg_dcdc3: dcdc3 {
+ regulator-name = "vdd-cpub";
+ regulator-always-on;
+ };
+
+ reg_dcdc4: dcdc4 {
+ regulator-name = "vdd-gpu";
+ regulator-always-on;
+ };
+
+ reg_dcdc5: dcdc5 {
+ regulator-name = "vdd-cpul";
+ regulator-always-on;
+ };
+
+ reg_dcdc6: dcdc6 {
+ regulator-name = "vcc-draml";
+ regulator-always-on;
+ };
+
+ reg_dcdc7: dcdc7 {
+ regulator-name = "vcc-dram";
+ regulator-always-on;
+ };
+
+ reg_dcdc8: dcdc8 {
+ regulator-name = "vcc-ufs-io";
+ regulator-always-on;
+ };
+
+ reg_dcdc9: dcdc9 {
+ regulator-name = "eldo-input";
+ regulator-always-on;
+ };
+
+ reg_swout1: swout1 {
+ regulator-name = "vcc33-lcd";
+ regulator-always-on;
+ };
+
+ reg_swout2: swout2 {
+ regulator-name = "vcc-io-card";
+ regulator-always-on;
+ };
+
+ reg_aldo1: aldo1 {
+ regulator-name = "vcc-pl";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
+
+ reg_bldo1: bldo1 {
+ regulator-name = "vcc-pe-pk-mcsi";
+ };
+
+ reg_bldo2: bldo2 {
+ regulator-name = "vcc-lvds0";
+ regulator-always-on;
+ };
+
+ reg_bldo4: bldo4 {
+ regulator-name = "vcc18-codec";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ reg_cldo1: cldo1 {
+ regulator-name = "vcc33-18-usb";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+
+ reg_cldo2: cldo2 {
+ regulator-name = "vcc18-hdmi";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ reg_cldo3: cldo3 {
+ regulator-name = "vcc-pll-dram";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+
+ reg_cldo5: cldo5 {
+ regulator-name = "vcc18-pf-pc";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+
+ reg_dldo1: dldo1 {
+ regulator-name = "vcc-efuse";
+ regulator-always-on;
+ };
+
+ reg_dldo6: dldo6 {
+ regulator-name = "vcc-ufs";
+ regulator-always-on;
+ };
+
+ reg_eldo1: eldo1 {
+ regulator-name = "vcc09-vdd2l";
+ regulator-always-on;
+ };
+
+ reg_eldo6: eldo6 {
+ regulator-name = "vdd-cpus";
+ regulator-always-on;
+ };
+
+ reg_rtc_ldo: rtc-ldo {
+ regulator-name = "vcc-rtc";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+ };
+ };
+};
+
+&r_pio {
+ /* PL powers the PMIC bus itself; firmware must keep ALDO1 enabled. */
+ vcc-pm-supply = <®_aldo1>;
+};
+
+&rtc {
+ clocks = <&r_ccu CLK_BUS_R_RTC>, <&osc>, <&r_ccu CLK_R_AHB>,
+ <&osc32k>;
+ clock-names = "bus", "hosc", "ahb", "ext-osc32k";
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pb_pins>;
+ status = "okay";
+};
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-11-10 4:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-10 4:45 [PATCH v3 0/3] arm64: dts: allwinner: add A733/Cubie A7S support Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 1/3] dt-bindings: arm: sunxi: document Radxa Cubie A7S Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 2/3] arm64: dts: allwinner: add A733 SoC description Enzo Adriano
2026-11-10 4:45 ` [PATCH v3 3/3] arm64: dts: allwinner: add Radxa Cubie A7S board Enzo Adriano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®