From 92ee7eb77a6707ea15985b65e320641c3ca8c52c Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Sat, 3 Apr 2021 00:43:50 +0100
Subject: [PATCH] mediatek: add alternative bootchain variant for UniFi 6 LR

Builds images for the Ubiquiti Network UniFi 6 LR device running the
U-Boot build added by the previous commits.
Everything but MTD partitions is moved to dtsi.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: maurerr <mariusd84@gmail.com>
---
 .../dts/mt7622-ubnt-unifi-6-lr-ubootmod.dts   |  68 ++++
 .../mediatek/dts/mt7622-ubnt-unifi-6-lr.dts   | 337 +++---------------
 .../mediatek/dts/mt7622-ubnt-unifi-6-lr.dtsi  | 253 +++++++++++++
 target/linux/mediatek/image/mt7622.mk         |  18 +
 .../mt7622/base-files/etc/board.d/02_network  |   3 +-
 5 files changed, 388 insertions(+), 291 deletions(-)
 create mode 100644 target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr-ubootmod.dts
 create mode 100644 target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dtsi

diff --git a/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr-ubootmod.dts b/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr-ubootmod.dts
new file mode 100644
index 00000000000..0d566f8ea85
--- /dev/null
+++ b/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr-ubootmod.dts
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/dts-v1/;
+#include "mt7622-ubnt-unifi-6-lr.dtsi"
+
+/ {
+	model = "Ubiquiti UniFi 6 LR (U-Boot mod)";
+	compatible = "ubnt,unifi-6-lr-ubootmod", "mediatek,mt7622";
+};
+
+&nor_partitions {
+	partition@0 {
+		label = "bl2";
+		reg = <0x0 0x20000>;
+	};
+
+	partition@20000 {
+		label = "fip";
+		reg = <0x20000 0xa0000>;
+	};
+
+	partition@c0000 {
+		label = "u-boot-env";
+		reg = <0xc0000 0x10000>;
+	};
+
+	factory: partition@d0000 {
+		label = "factory";
+		reg = <0xd0000 0x40000>;
+		read-only;
+	};
+
+	eeprom: partition@110000 {
+		label = "eeprom";
+		reg = <0x110000 0x10000>;
+		read-only;
+	};
+
+	partition@120000 {
+		label = "recovery";
+		reg = <0x120000 0xee0000>;
+	};
+
+	partition@1000000 {
+		compatible = "denx,fit";
+		label = "firmware";
+		reg = <0x1000000 0x3000000>;
+	};
+};
+
+&wmac {
+	mediatek,mtd-eeprom = <&factory 0x0>;
+	mtd-mac-address = <&eeprom 0x0>;
+	status = "okay";
+};
+
+&slot0 {
+	wifi@0,0 {
+		reg = <0x0 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x20000>;
+		mtd-mac-address = <&eeprom 0x6>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
+
+&gmac0 {
+	mtd-mac-address = <&eeprom 0x0>;
+};
diff --git a/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dts b/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dts
index 1f410b1d47f..268ff712aba 100644
--- a/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dts
+++ b/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dts
@@ -1,78 +1,72 @@
 // SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 
 /dts-v1/;
-#include <dt-bindings/input/input.h>
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/leds/common.h>
-
-#include "mt7622.dtsi"
-#include "mt6380.dtsi"
+#include "mt7622-ubnt-unifi-6-lr.dtsi"
 
 / {
 	model = "Ubiquiti UniFi 6 LR";
 	compatible = "ubnt,unifi-6-lr", "mediatek,mt7622";
+};
 
-	aliases {
-		led-boot = &led_blue;
-		led-failsafe = &led_blue;
-		led-running = &led_blue;
-		led-upgrade = &led_blue;
-		label-mac-device = &gmac0;
-		serial0 = &uart0;
+&nor_partitions {
+	partition@0 {
+		label = "preloader";
+		reg = <0x0 0x40000>;
 	};
 
-	chosen {
-		stdout-path = "serial0:115200n8";
-		bootargs = "earlycon=uart8250,mmio32,0x11002000 swiotlb=512 console=ttyS0,115200n8";
+	partition@40000 {
+		label = "atf";
+		reg = <0x40000 0x20000>;
 	};
 
-	cpus {
-		cpu@0 {
-			proc-supply = <&mt6380_vcpu_reg>;
-			sram-supply = <&mt6380_vm_reg>;
-		};
-
-		cpu@1 {
-			proc-supply = <&mt6380_vcpu_reg>;
-			sram-supply = <&mt6380_vm_reg>;
-		};
+	partition@60000 {
+		label = "u-boot";
+		reg = <0x60000 0x60000>;
 	};
 
-	gpio-keys {
-		compatible = "gpio-keys";
-
-		reset {
-			label = "reset";
-			linux,code = <KEY_RESTART>;
-			gpios = <&pio 62 GPIO_ACTIVE_LOW>;
-		};
+	partition@c0000 {
+		label = "u-boot-env";
+		reg = <0xc0000 0x10000>;
 	};
 
-	memory {
-		reg = <0 0x40000000 0 0x3f000000>;
+	factory: partition@d0000 {
+		label = "factory";
+		reg = <0xd0000 0x40000>;
+		read-only;
 	};
 
-	reg_1p8v: regulator-1p8v {
-		compatible = "regulator-fixed";
-		regulator-name = "fixed-1.8V";
-		regulator-min-microvolt = <1800000>;
-		regulator-max-microvolt = <1800000>;
-		regulator-always-on;
+	eeprom: partition@110000 {
+		label = "eeprom";
+		reg = <0x110000 0x10000>;
+		read-only;
 	};
 
-	reg_3p3v: regulator-3p3v {
-		compatible = "regulator-fixed";
-		regulator-name = "fixed-3.3V";
-		regulator-min-microvolt = <3300000>;
-		regulator-max-microvolt = <3300000>;
-		regulator-boot-on;
-		regulator-always-on;
+	partition@120000 {
+		label = "bs";
+		reg = <0x120000 0x10000>;
+	};
+
+	partition@130000 {
+		label = "cfg";
+		reg = <0x130000 0x100000>;
+		read-only;
+	};
+
+	partition@230000 {
+		compatible = "denx,fit";
+		label = "firmware";
+		reg = <0x230000 0x1ee0000>;
+	};
+
+	partition@2110000 {
+		label = "kernel1";
+		reg = <0x2110000 0x1ee0000>;
 	};
 };
 
-&pcie0 {
-	pinctrl-names = "default";
-	pinctrl-0 = <&pcie0_pins>;
+&wmac {
+	mediatek,mtd-eeprom = <&factory 0x0>;
+	mtd-mac-address = <&eeprom 0x0>;
 	status = "okay";
 };
 
@@ -85,243 +79,6 @@
 	};
 };
 
-&pio {
-	eth_pins: eth-pins {
-		mux {
-			function = "eth";
-			groups = "mdc_mdio", "rgmii_via_gmac2";
-		};
-	};
-
-	pcie0_pins: pcie0-pins {
-		mux {
-			function = "pcie";
-			groups = "pcie0_pad_perst",
-				 "pcie0_1_waken",
-				 "pcie0_1_clkreq";
-		};
-	};
-
-	pcie1_pins: pcie1-pins {
-		mux {
-			function = "pcie";
-			groups = "pcie1_pad_perst",
-				 "pcie1_0_waken",
-				 "pcie1_0_clkreq";
-		};
-	};
-
-	pmic_bus_pins: pmic-bus-pins {
-		mux {
-			function = "pmic";
-			groups = "pmic_bus";
-		};
-	};
-
-	spi_nor_pins: spi-nor-pins {
-		mux {
-			function = "flash";
-			groups = "spi_nor";
-		};
-	};
-
-	uart0_pins: uart0-pins {
-		mux {
-			function = "uart";
-			groups = "uart0_0_tx_rx" ;
-		};
-	};
-
-	uart3_pins: uart3-pins {
-		mux {
-			function = "uart";
-			groups = "uart3_1_tx_rx" ;
-		};
-	};
-
-	i2c0_pins: i2c0-pins {
-		mux {
-			function = "i2c";
-			groups =  "i2c0";
-		};
-	};
-
-	watchdog_pins: watchdog-pins {
-		mux {
-			function = "watchdog";
-			groups = "watchdog";
-		};
-	};
-};
-
-&bch {
-	status = "okay";
-};
-
-&btif {
-	status = "disabled";
-};
-
-&eth {
-	status = "okay";
-	pinctrl-names = "default";
-	pinctrl-0 = <&eth_pins>;
-
-	gmac0: mac@0 {
-		compatible = "mediatek,eth-mac";
-		reg = <0>;
-
-		phy-mode = "2500base-x";
-		mtd-mac-address = <&eeprom 0x0>;
-
-		fixed-link {
-			speed = <2500>;
-			full-duplex;
-		};
-	};
-
-	mdio: mdio-bus {
-		#address-cells = <1>;
-		#size-cells = <0>;
-
-		ethernet-phy@8 {
-			/* Marvell AQRate AQR112W - no driver */
-			compatible = "ethernet-phy-ieee802.3-c45";
-			reg = <0x8>;
-		};
-	};
-};
-
-&pwrap {
-	pinctrl-names = "default";
-	pinctrl-0 = <&pmic_bus_pins>;
-
-	status = "okay";
-};
-
-&nor_flash {
-	pinctrl-names = "default";
-	pinctrl-0 = <&spi_nor_pins>;
-
-	status = "okay";
-
-	flash@0 {
-		compatible = "jedec,spi-nor";
-		reg = <0>;
-		spi-max-frequency = <50000000>;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			partition@0 {
-				label = "preloader";
-				reg = <0x0 0x40000>;
-				read-only;
-			};
-
-			partition@40000 {
-				label = "atf";
-				reg = <0x40000 0x20000>;
-				read-only;
-			};
-
-			partition@60000 {
-				label = "u-boot";
-				reg = <0x60000 0x60000>;
-				read-only;
-			};
-
-			partition@c0000 {
-				label = "u-boot-env";
-				reg = <0xc0000 0x10000>;
-			};
-
-			factory: partition@d0000 {
-				label = "factory";
-				reg = <0xd0000 0x40000>;
-				read-only;
-			};
-
-			eeprom: partition@110000 {
-				label = "eeprom";
-				reg = <0x110000 0x10000>;
-				read-only;
-			};
-
-			partition@120000 {
-				label = "bs";
-				reg = <0x120000 0x10000>;
-			};
-
-			partition@130000 {
-				label = "cfg";
-				reg = <0x130000 0x100000>;
-				read-only;
-			};
-
-			partition@230000 {
-				compatible = "denx,fit";
-				label = "firmware";
-				reg = <0x230000 0x1ee0000>;
-			};
-
-			partition@2110000 {
-				label = "kernel1";
-				reg = <0x2110000 0x1ee0000>;
-			};
-		};
-	};
-};
-
-&uart0 {
-	pinctrl-names = "default";
-	pinctrl-0 = <&uart0_pins>;
-	status = "okay";
-};
-
-&uart3 {
-	pinctrl-names = "default";
-	pinctrl-0 = <&uart3_pins>;
-	status = "okay";
-
-	/* MT7915 Bluetooth */
-};
-
-&i2c0 {
-	pinctrl-names = "default";
-	pinctrl-0 = <&i2c0_pins>;
-	status = "okay";
-
-	led-controller@30 {
-		compatible = "ubnt,ledbar";
-		reg = <0x30>;
-
-		enable-gpio = <&pio 59 0>;
-
-		red {
-			label = "red";
-		};
-
-		green {
-			label = "green";
-		};
-
-		led_blue: blue {
-			label = "blue";
-		};
-	};
-};
-
-&watchdog {
-	pinctrl-names = "default";
-	pinctrl-0 = <&watchdog_pins>;
-	status = "okay";
-};
-
-&wmac {
-	mediatek,mtd-eeprom = <&factory 0x0>;
+&gmac0 {
 	mtd-mac-address = <&eeprom 0x0>;
-	status = "okay";
 };
diff --git a/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dtsi b/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dtsi
new file mode 100644
index 00000000000..33eb9aaf532
--- /dev/null
+++ b/target/linux/mediatek/dts/mt7622-ubnt-unifi-6-lr.dtsi
@@ -0,0 +1,253 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/dts-v1/;
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+#include "mt7622.dtsi"
+#include "mt6380.dtsi"
+
+/ {
+	aliases {
+		led-boot = &led_blue;
+		led-failsafe = &led_blue;
+		led-running = &led_blue;
+		led-upgrade = &led_blue;
+		label-mac-device = &gmac0;
+		serial0 = &uart0;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+		bootargs = "earlycon=uart8250,mmio32,0x11002000 swiotlb=512 console=ttyS0,115200n8";
+	};
+
+	cpus {
+		cpu@0 {
+			proc-supply = <&mt6380_vcpu_reg>;
+			sram-supply = <&mt6380_vm_reg>;
+		};
+
+		cpu@1 {
+			proc-supply = <&mt6380_vcpu_reg>;
+			sram-supply = <&mt6380_vm_reg>;
+		};
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&pio 62 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	memory {
+		reg = <0 0x40000000 0 0x3f000000>;
+	};
+
+	reg_1p8v: regulator-1p8v {
+		compatible = "regulator-fixed";
+		regulator-name = "fixed-1.8V";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+		regulator-always-on;
+	};
+
+	reg_3p3v: regulator-3p3v {
+		compatible = "regulator-fixed";
+		regulator-name = "fixed-3.3V";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
+};
+
+&pcie0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie0_pins>;
+	status = "okay";
+};
+
+
+&pio {
+	eth_pins: eth-pins {
+		mux {
+			function = "eth";
+			groups = "mdc_mdio", "rgmii_via_gmac2";
+		};
+	};
+
+	pcie0_pins: pcie0-pins {
+		mux {
+			function = "pcie";
+			groups = "pcie0_pad_perst",
+				 "pcie0_1_waken",
+				 "pcie0_1_clkreq";
+		};
+	};
+
+	pcie1_pins: pcie1-pins {
+		mux {
+			function = "pcie";
+			groups = "pcie1_pad_perst",
+				 "pcie1_0_waken",
+				 "pcie1_0_clkreq";
+		};
+	};
+
+	pmic_bus_pins: pmic-bus-pins {
+		mux {
+			function = "pmic";
+			groups = "pmic_bus";
+		};
+	};
+
+	spi_nor_pins: spi-nor-pins {
+		mux {
+			function = "flash";
+			groups = "spi_nor";
+		};
+	};
+
+	uart0_pins: uart0-pins {
+		mux {
+			function = "uart";
+			groups = "uart0_0_tx_rx" ;
+		};
+	};
+
+	uart3_pins: uart3-pins {
+		mux {
+			function = "uart";
+			groups = "uart3_1_tx_rx" ;
+		};
+	};
+
+	i2c0_pins: i2c0-pins {
+		mux {
+			function = "i2c";
+			groups =  "i2c0";
+		};
+	};
+
+	watchdog_pins: watchdog-pins {
+		mux {
+			function = "watchdog";
+			groups = "watchdog";
+		};
+	};
+};
+
+&bch {
+	status = "okay";
+};
+
+&btif {
+	status = "disabled";
+};
+
+&eth {
+	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&eth_pins>;
+
+	gmac0: mac@0 {
+		compatible = "mediatek,eth-mac";
+		reg = <0>;
+
+		phy-mode = "2500base-x";
+
+		fixed-link {
+			speed = <2500>;
+			full-duplex;
+		};
+	};
+
+	mdio: mdio-bus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		ethernet-phy@8 {
+			/* Marvell AQRate AQR112W - no driver */
+			compatible = "ethernet-phy-ieee802.3-c45";
+			reg = <0x8>;
+		};
+	};
+};
+
+&pwrap {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pmic_bus_pins>;
+
+	status = "okay";
+};
+
+&nor_flash {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi_nor_pins>;
+
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <50000000>;
+
+		nor_partitions: partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+		};
+	};
+};
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_pins>;
+	status = "okay";
+};
+
+&uart3 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart3_pins>;
+	status = "okay";
+
+	/* MT7915 Bluetooth */
+};
+
+&i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c0_pins>;
+	status = "okay";
+
+	led-controller@30 {
+		compatible = "ubnt,ledbar";
+		reg = <0x30>;
+
+		enable-gpio = <&pio 59 0>;
+
+		red {
+			label = "red";
+		};
+
+		green {
+			label = "green";
+		};
+
+		led_blue: blue {
+			label = "blue";
+		};
+	};
+};
+
+&watchdog {
+	pinctrl-names = "default";
+	pinctrl-0 = <&watchdog_pins>;
+	status = "okay";
+};
diff --git a/target/linux/mediatek/image/mt7622.mk b/target/linux/mediatek/image/mt7622.mk
index 143db964db9..255b75983d4 100644
--- a/target/linux/mediatek/image/mt7622.mk
+++ b/target/linux/mediatek/image/mt7622.mk
@@ -204,3 +204,21 @@ define Device/ubnt_unifi-6-lr
   DEVICE_PACKAGES := kmod-mt7915e
 endef
 TARGET_DEVICES += ubnt_unifi-6-lr
+
+define Device/ubnt_unifi-6-lr-ubootmod
+  DEVICE_VENDOR := Ubiquiti
+  DEVICE_MODEL := UniFi 6 LR
+  DEVICE_VARIANT := U-Boot mod
+  DEVICE_DTS := mt7622-ubnt-unifi-6-lr-ubootmod
+  DEVICE_DTS_DIR := ../dts
+  DEVICE_PACKAGES := kmod-mt7915e
+  KERNEL := kernel-bin | lzma
+  KERNEL_INITRAMFS_SUFFIX := -recovery.itb
+  KERNEL_INITRAMFS := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k
+  IMAGES := sysupgrade.itb
+  IMAGE/sysupgrade.itb := append-kernel | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-static-with-rootfs | pad-rootfs | append-metadata
+  ARTIFACTS := preloader.bin bl31-uboot.fip
+  ARTIFACT/preloader.bin := bl2 nor-2ddr
+  ARTIFACT/bl31-uboot.fip := bl31-uboot ubnt_unifi-6-lr
+endef
+TARGET_DEVICES += ubnt_unifi-6-lr-ubootmod
diff --git a/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network b/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network
index f1daa2fae15..361d60e92b9 100644
--- a/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network
+++ b/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network
@@ -18,7 +18,8 @@ mediatek_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "6@eth0"
 		;;
-	ubnt,unifi-6-lr)
+	ubnt,unifi-6-lr|\
+	ubnt,unifi-6-lr-ubootmod)
 		ucidef_set_interfaces_lan "eth0"
 		;;
 	*)