diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile
index 7dcf90b32..8be674369 100644
--- a/arch/arm64/boot/dts/allwinner/Makefile
+++ b/arch/arm64/boot/dts/allwinner/Makefile
@@ -20,6 +20,10 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinephone-1.2.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinetab.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinetab-early-adopter.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-sopine-baseboard.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-recore.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-recore-a5.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-recore-a6.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-recore-a7.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-teres-i.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a100-allwinner-perf1.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-bananapi-m2-plus.dtb
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a5.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a5.dts
new file mode 100644
index 000000000..1920172d3
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a5.dts
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "sun50i-a64-recore.dtsi"
+
+/ {
+	model = "Recore-A5";
+	compatible = "iagent,recore-a5", "allwinner,sun50i-a64";
+
+	e0-consumer {
+		compatible = "custom,reg-userspace-consumer";
+		regulator-name = "e0-consumer";
+		controlled-supply = <&reg_aldo1>;
+	};
+
+	e1-consumer {
+		compatible = "custom,reg-userspace-consumer";
+		regulator-name = "e1-consumer";
+		controlled-supply = <&reg_aldo2>;
+	};
+
+	e2-consumer {
+		compatible = "custom,reg-userspace-consumer";
+		regulator-name = "e2-consumer";
+		controlled-supply = <&reg_dldo3>;
+	};
+
+	e3-consumer {
+		compatible = "custom,reg-userspace-consumer";
+		regulator-name = "e3-consumer";
+		controlled-supply = <&reg_dldo4>;
+	};
+};
+
+&reg_aldo1 {
+	regulator-min-microvolt = <700000>;
+	regulator-max-microvolt = <700000>;
+	regulator-name = "vcc-vref-e0";
+};
+
+&reg_aldo2 {
+	regulator-min-microvolt = <3200000>;
+	regulator-max-microvolt = <3200000>;
+	regulator-name = "vcc-vref-e1";
+};
+
+&reg_dldo3 {
+	regulator-min-microvolt = <700000>;
+	regulator-max-microvolt = <700000>;
+	regulator-name = "vcc-vref-e2";
+};
+
+&reg_dldo4 {
+	regulator-min-microvolt = <700000>;
+	regulator-max-microvolt = <700000>;
+	regulator-name = "vcc-vref-e3";
+};
+
+/* STM32 */
+&uart4 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart4_pins>;
+	status = "okay";
+};
\ No newline at end of file
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a6.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a6.dts
new file mode 100644
index 000000000..c5be6e937
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a6.dts
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "sun50i-a64-recore.dtsi"
+
+/ {
+	model = "Recore-A6";
+	compatible = "iagent,recore-a6", "allwinner,sun50i-a64";
+};
+
+&reg_aldo1 {
+	regulator-always-on;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-ext";
+};
+&uart4 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart4_pins>;
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a7.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a7.dts
new file mode 100644
index 000000000..5cf1bcca7
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore-a7.dts
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "sun50i-a64-recore.dtsi"
+#include <dt-bindings/usb/pd.h>
+
+/ {
+	model = "Recore-A7";
+	compatible = "iagent,recore-a7", "allwinner,sun50i-a64";
+};
+
+&reg_usb1_vbus3 {
+	gpio = <&pio 3 5 GPIO_ACTIVE_HIGH> ; /* PD5 */
+};
+
+&reg_usb1_vbus4 {
+	gpio = <&pio 3 6 GPIO_ACTIVE_HIGH> ; /* PD6 */
+};
+
+&reg_aldo1 {
+	regulator-always-on;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-ext";
+};
+
+/* Set over current to lowest value: 35 A = 700 mV */
+&reg_dldo2 {
+	regulator-min-microvolt = <700000>;
+	regulator-max-microvolt = <700000>;
+};
+
+&usbphy {
+	usb0_id_det-gpios   = <&pio 4 7 GPIO_ACTIVE_LOW>;
+};
+&uart2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart2_pins>;
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-recore.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore.dts
new file mode 100644
index 000000000..5cf1bcca7
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore.dts
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "sun50i-a64-recore.dtsi"
+
+/ {
+	model = "Recore-all";
+	compatible = "iagent,recore-all", "allwinner,sun50i-a64";
+
+   reg_usb1_vbus5: usb1-vbus5 {
+   	compatible = "regulator-fixed";
+   	regulator-name = "usb1-vbus5";
+   	gpio = <&pio 3 5 GPIO_ACTIVE_HIGH> ; /* PD5 */
+   	regulator-min-microvolt = <5000000>;
+   	regulator-max-microvolt = <5000000>;
+   	regulator-always-on;
+   	enable-active-high;
+   	vin-supply = <&reg_5v>;
+   };
+   reg_usb1_vbus6: usb1-vbus6 {
+   	compatible = "regulator-fixed";
+   	regulator-name = "usb1-vbus6";
+   	gpio = <&pio 3 6 GPIO_ACTIVE_HIGH> ; /* PD6 */
+   	regulator-min-microvolt = <5000000>;
+   	regulator-max-microvolt = <5000000>;
+   	regulator-always-on;
+   	enable-active-high;
+   	vin-supply = <&reg_5v>;
+   };
+};
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-recore.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore.dtsi
new file mode 100644
index 000000000..89fcf8ccb
--- /dev/null
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-recore.dtsi
@@ -0,0 +1,407 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "sun50i-a64.dtsi"
+#include "sun50i-a64-cpu-opp.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+	aliases {
+		ethernet0 = &emac;
+		serial0 = &uart0;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	hdmi-connector {
+		compatible = "hdmi-connector";
+		type = "a";
+
+		port {
+			hdmi_con_in: endpoint {
+				remote-endpoint = <&hdmi_out_con>;
+			};
+		};
+	};
+	leds {
+		compatible = "gpio-leds";
+
+		heartbeat-led {
+			label = "recore:white:heartbeat";
+			gpios = <&pio 1 7 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "heartbeat";
+			function = LED_FUNCTION_STATUS;
+			color = <LED_COLOR_ID_WHITE>;
+		};
+
+		emmc-led {
+			label = "recore:white:emmc";
+			gpios = <&pio 1 5 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "mmc0";
+		};
+
+		cpu-led {
+			label = "recore:white:cpu";
+			gpios = <&pio 1 6 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "activity";
+		};
+
+		usb-led {
+			label = "recore:white:usb";
+			function = LED_FUNCTION_USB;
+			gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>;
+			trigger-sources = <&ohci1>, <&ehci1>;
+			linux,default-trigger = "usb-host";
+		};
+	};
+
+	reg_5v: 5v-buck {
+		compatible = "regulator-fixed";
+		regulator-name = "5v-buck";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+	};
+
+	reg_usb1_vbus1: usb1-vbus1 {
+		compatible = "regulator-fixed";
+		regulator-name = "usb1-vbus1";
+		gpio = <&pio 7 0 GPIO_ACTIVE_HIGH> ; /* PH0 */
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+		regulator-boot-on;
+		enable-active-high;
+	};
+
+	reg_usb1_vbus2: usb1-vbus2 {
+		compatible = "regulator-fixed";
+		regulator-name = "usb1-vbus2";
+		gpio = <&pio 7 1 GPIO_ACTIVE_HIGH> ; /* PH1 */
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+		regulator-boot-on;
+		enable-active-high;
+	};
+
+	reg_usb1_vbus3: usb1-vbus3 {
+		compatible = "regulator-fixed";
+		regulator-name = "usb1-vbus3";
+		gpio = <&pio 7 2 GPIO_ACTIVE_HIGH> ; /* PH2 */
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+		enable-active-high;
+		vin-supply = <&reg_5v>;
+	};
+
+	reg_usb1_vbus4: usb1-vbus4 {
+		compatible = "regulator-fixed";
+		regulator-name = "usb1-vbus4";
+		gpio = <&pio 7 3 GPIO_ACTIVE_HIGH> ; /* PH3 */
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		startup-delay-us = <100000>;
+		regulator-always-on;
+		enable-active-high;
+		vin-supply = <&reg_5v>;
+	};
+
+	reg_hdmi_vbus: hdmi-vbus {
+		compatible = "regulator-fixed";
+		regulator-name = "hdmi-vbus";
+		gpio = <&pio 6 9 GPIO_ACTIVE_HIGH> ; /* PG9 */
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+		enable-active-high;
+	};
+};
+
+&de {
+	status = "okay";
+};
+
+&cpu0 {
+	cpu-supply = <&reg_dcdc2>;
+};
+
+&cpu1 {
+	cpu-supply = <&reg_dcdc2>;
+};
+
+&cpu2 {
+	cpu-supply = <&reg_dcdc2>;
+};
+
+&cpu3 {
+	cpu-supply = <&reg_dcdc2>;
+};
+
+&emac {
+	pinctrl-names = "default";
+	pinctrl-0 = <&rgmii_pins>;
+	phy-mode = "rgmii-txid";
+	phy-handle = <&ext_rgmii_phy>;
+	phy-supply = <&reg_dcdc1>;
+	phy-io-supply = <&reg_dcdc1>;
+	status = "okay";
+};
+
+&hdmi {
+	hvcc-supply = <&reg_dldo1>;
+	status = "okay";
+};
+
+&hdmi_out {
+	hdmi_out_con: endpoint {
+		remote-endpoint = <&hdmi_con_in>;
+	};
+};
+
+&mdio {
+	ext_rgmii_phy: ethernet-phy@1 {
+		compatible = "ethernet-phy-ieee802.3-c22";
+		reg = <7>;
+	};
+};
+
+&mixer0 {
+	status = "disabled";
+};
+
+&tcon0 {
+	status = "disabled";
+};
+
+&mmc2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&mmc2_pins>/*, <&mmc2_ds_pin>*/;
+	vmmc-supply = <&reg_dcdc1>;
+	vqmmc-supply = <&reg_eldo1>;
+	non-removable;
+	bus-width = <8>;
+	cap-mmc-hw-reset;
+	mmc-hs200-1_8v;
+	status = "okay";
+};
+
+&ohci0 {
+	status = "okay";
+};
+
+&ohci1 {
+	status = "okay";
+};
+
+&ehci0 {
+	status = "okay";
+};
+
+&ehci1 {
+	status = "okay";
+};
+
+&pio {
+	vcc-pb-supply = <&reg_dcdc1>;
+	vcc-pc-supply = <&reg_eldo1>;
+	vcc-pd-supply = <&reg_dcdc1>;
+	vcc-pe-supply = <&reg_dcdc1>;
+	vcc-pf-supply = <&reg_dcdc1>;
+	vcc-pg-supply = <&reg_dcdc1>;
+	vcc-ph-supply = <&reg_dcdc1>;
+	vcc-pl-supply = <&reg_dcdc1>;
+};
+
+&r_rsb {
+	status = "okay";
+	axp803: pmic@3a3 {
+		compatible = "x-powers,axp803";
+		reg = <0x3a3>;
+		interrupt-parent = <&r_intc>;
+		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
+	};
+};
+
+#include "axp803.dtsi"
+
+&ac_power_supply {
+	status = "okay";
+};
+
+&battery_power_supply {
+	status = "okay";
+};
+
+&reg_dc1sw {
+	regulator-always-on;
+	regulator-name = "vcc-phy";
+	regulator-enable-ramp-delay = <100000>;
+};
+
+&reg_dcdc1 {
+	regulator-always-on;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-3v3";
+};
+
+&reg_dcdc2 {
+	regulator-always-on;
+	regulator-min-microvolt = <1040000>;
+	regulator-max-microvolt = <1300000>;
+	regulator-name = "vdd-cpux";
+};
+
+&reg_dcdc5 {
+	regulator-always-on;
+	regulator-min-microvolt = <1360000>;
+	regulator-max-microvolt = <1360000>;
+	regulator-name = "vcc-dram";
+};
+
+&reg_dcdc6 {
+	regulator-always-on;
+	regulator-min-microvolt = <1100000>;
+	regulator-max-microvolt = <1100000>;
+	regulator-name = "vdd-sys";
+};
+
+&reg_aldo3 {
+	regulator-always-on;
+	regulator-min-microvolt = <3000000>;
+	regulator-max-microvolt = <3000000>;
+	regulator-name = "vcc-pll-avcc";
+};
+
+&reg_dldo1 {
+	regulator-always-on;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-hdmi";
+};
+
+/* Set over current to lowest value: 35 A = 700 mV, 50 A = 1000 mV */
+&reg_dldo2 {
+	regulator-always-on;
+	regulator-min-microvolt = <1000000>;
+	regulator-max-microvolt = <1000000>;
+	regulator-name = "current-control";
+};
+
+&reg_eldo1 {
+	regulator-always-on;
+	regulator-min-microvolt = <1800000>;
+	regulator-max-microvolt = <1800000>;
+	regulator-name = "emmc-io";
+};
+
+&reg_fldo1 {
+	regulator-name = "vdd-hsic";
+	status = "disabled";
+};
+
+&reg_fldo2 {
+	regulator-always-on;
+	regulator-min-microvolt = <1100000>;
+	regulator-max-microvolt = <1100000>;
+	regulator-name = "vdd-cpus";
+};
+
+&gpio0_ldo {
+	function = "ldo";
+};
+
+&gpio1_ldo {
+	function = "ldo";
+};
+
+&reg_ldo_io0 {
+	regulator-always-on;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-ref";
+	status = "okay";
+};
+
+&reg_ldo_io1 {
+	regulator-always-on;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-iref";
+	status = "okay";
+};
+
+&reg_rtc_ldo {
+	regulator-name = "vcc-rtc";
+};
+
+&simplefb_hdmi {
+	vcc-hdmi-supply = <&reg_hdmi_vbus>;
+};
+
+/* Debug port */
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_pb_pins>;
+	status = "okay";
+};
+
+/* AR100 null-modem */
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pins>;
+	status = "okay";
+};
+
+&usb_otg {
+	dr_mode = "peripheral";
+	vcc-supply = <&reg_dcdc1>;
+	status = "okay";
+};
+
+&usb_power_supply {
+	status = "okay";
+};
+
+&usbphy {
+	usb0_vbus_power-supply = <&usb_power_supply>;
+	vcc-supply = <&reg_dcdc1>;
+	status = "okay";
+};
+&cpu0 {
+	/delete-property/ cpu-idle-states;
+};
+
+&cpu1 {
+	/delete-property/ cpu-idle-states;
+};
+
+&cpu2 {
+	/delete-property/ cpu-idle-states;
+};
+
+&cpu3 {
+	/delete-property/ cpu-idle-states;
+};
+
+/ {
+	cpus {
+		/delete-node/ idle-states;
+	};
+	/delete-node/ scpi;
+};
+
+&mbus{
+    status="disabled";
+};
+
+&mali {
+	assigned-clock-rates = <297000000>;
+};
