From bc9dcfb1ce656e1da694d9d9a6f927b3142ab76a Mon Sep 17 00:00:00 2001
From: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Date: Sat, 20 Aug 2022 16:10:42 -0500
Subject: [PATCH] realtek: split TP-Link SG2000 series devicetree

The TP-Link TL-SG2008, TL-SG2008P, and TL-SG2210P use the same board.
The main difference is that some footprints are not populated in the
lower-end models. To model this with minimal duplication, move the
devicetree to a common dtsi, leaving out just the board name.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
[remove port relabelling from commit message, already merged with commit
 18a2b29aa1c9 ("realtek: tl-sg2008p: fix labeling of lan ports")]
Signed-off-by: Sander Vanheule <sander@svanheule.net>
---
 .../dts-5.10/rtl8380_tplink_sg2008p-v1.dts    | 178 +----------------
 .../dts-5.10/rtl8380_tplink_sg2xxx.dtsi       | 181 ++++++++++++++++++
 2 files changed, 182 insertions(+), 177 deletions(-)
 create mode 100644 target/linux/realtek/dts-5.10/rtl8380_tplink_sg2xxx.dtsi

diff --git a/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2008p-v1.dts b/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2008p-v1.dts
index d464921e50..0fef52984c 100644
--- a/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2008p-v1.dts
+++ b/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2008p-v1.dts
@@ -1,184 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "rtl838x.dtsi"
-
-#include <dt-bindings/input/input.h>
-#include <dt-bindings/gpio/gpio.h>
+#include "rtl8380_tplink_sg2xxx.dtsi"
 
 / {
 	compatible = "tplink,sg2008p-v1", "realtek,rtl838x-soc";
 	model = "TP-Link SG2008P v1";
-
-	aliases {
-		led-boot = &led_power;
-		led-failsafe = &led_power;
-		led-running = &led_power;
-		led-upgrade = &led_power;
-	};
-
-	memory@0 {
-		device_type = "memory";
-		reg = <0x0 0x10000000>;
-	};
-
-	keys {
-		compatible = "gpio-keys";
-
-		reset {
-			label = "reset";
-			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_RESTART>;
-		};
-	};
-
-	gpio-restart {
-		compatible = "gpio-restart";
-		gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
-	};
-
-	leds {
-		compatible = "gpio-leds";
-
-		led_power: led-0 {
-			label = "green:power";
-			gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
-		};
-	};
-
-	i2c1: i2c-gpio-1 {
-		compatible = "i2c-gpio";
-		scl-gpios = <&gpio0 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
-		sda-gpios = <&gpio0 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
-		i2c-gpio,delay-us = <2>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-
-		tps23861@28 {
-			compatible = "ti,tps23861";
-			reg = <0x28>;
-			shunt-resistor-micro-ohms = <255000>;
-		};
-	};
-
-	watchdog {
-		compatible = "linux,wdt-gpio";
-		gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>;
-		hw_algo = "toggle";
-		/* SGM706 specs: typical 1.6s, but minimum 1.0s. */
-		hw_margin_ms = <1000>;
-	};
-
-	virtual_flash {
-		compatible = "mtd-concat";
-
-		devices = <&syspart &usrpart>;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			partition@0 {
-				compatible = "denx,uimage";
-				label = "firmware";
-				reg = <0x0 0x1a00000>;
-			};
-		};
-	};
-};
-
-&gpio0 {
-	watchdog-enable {
-		gpio-hog;
-		gpios = <14 GPIO_ACTIVE_LOW>;
-		output-low;
-		line-name = "watchdog-enable";
-	};
-};
-
-&spi0 {
-	status = "okay";
-
-	flash@0 {
-		compatible = "jedec,spi-nor";
-		reg = <0>;
-		spi-max-frequency = <10000000>;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			partition@0 {
-				label = "u-boot";
-				reg = <0x0 0xe0000>;
-				read-only;
-			};
-			partition@e0000 {
-				label = "u-boot-env";
-				reg = <0xe0000 0x20000>;
-			};
-			syspart: partition@100000 {
-				label = "sys";
-				reg = <0x100000 0x600000>;
-			};
-			usrpart: partition@700000 {
-				label = "usrimg1";
-				reg = <0x700000 0x1400000>;
-			};
-			partition@1b00000 {
-				label = "usrappfs";
-				reg = <0x1b00000 0x400000>;
-			};
-			partition@1f00000 {
-				label = "para";
-				reg = <0x1f00000 0x100000>;
-				read-only;
-			};
-		};
-	};
-};
-
-&ethernet0 {
-	mdio: mdio-bus {
-		compatible = "realtek,rtl838x-mdio";
-		#address-cells = <1>;
-		#size-cells = <0>;
-
-		INTERNAL_PHY(8)
-		INTERNAL_PHY(9)
-		INTERNAL_PHY(10)
-		INTERNAL_PHY(11)
-		INTERNAL_PHY(12)
-		INTERNAL_PHY(13)
-		INTERNAL_PHY(14)
-		INTERNAL_PHY(15)
-	};
-};
-
-&switch0 {
-	ports {
-		#address-cells = <1>;
-		#size-cells = <0>;
-
-		SWITCH_PORT(15, 1, internal)
-		SWITCH_PORT(14, 2, internal)
-		SWITCH_PORT(13, 3, internal)
-		SWITCH_PORT(12, 4, internal)
-		SWITCH_PORT(11, 5, internal)
-		SWITCH_PORT(10, 6, internal)
-		SWITCH_PORT(9, 7, internal)
-		SWITCH_PORT(8, 8, internal)
-
-		port@28 {
-			ethernet = <&ethernet0>;
-			reg = <28>;
-			phy-mode = "internal";
-
-			fixed-link {
-				speed = <1000>;
-				full-duplex;
-			};
-		};
-	};
 };
diff --git a/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2xxx.dtsi b/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2xxx.dtsi
new file mode 100644
index 0000000000..8aa82831ab
--- /dev/null
+++ b/target/linux/realtek/dts-5.10/rtl8380_tplink_sg2xxx.dtsi
@@ -0,0 +1,181 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rtl838x.dtsi"
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	aliases {
+		led-boot = &led_power;
+		led-failsafe = &led_power;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	memory@0 {
+		device_type = "memory";
+		reg = <0x0 0x10000000>;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	gpio-restart {
+		compatible = "gpio-restart";
+		gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: led-0 {
+			label = "green:power";
+			gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	i2c1: i2c-gpio-1 {
+		compatible = "i2c-gpio";
+		scl-gpios = <&gpio0 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		sda-gpios = <&gpio0 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		tps23861@28 {
+			compatible = "ti,tps23861";
+			reg = <0x28>;
+			shunt-resistor-micro-ohms = <255000>;
+		};
+	};
+
+	watchdog {
+		compatible = "linux,wdt-gpio";
+		gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+		hw_algo = "toggle";
+		/* SGM706 specs: typical 1.6s, but minimum 1.0s. */
+		hw_margin_ms = <1000>;
+	};
+
+	virtual_flash {
+		compatible = "mtd-concat";
+
+		devices = <&syspart &usrpart>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x0 0x1a00000>;
+			};
+		};
+	};
+};
+
+&gpio0 {
+	watchdog-enable {
+		gpio-hog;
+		gpios = <14 GPIO_ACTIVE_LOW>;
+		output-low;
+		line-name = "watchdog-enable";
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0xe0000>;
+				read-only;
+			};
+			partition@e0000 {
+				label = "u-boot-env";
+				reg = <0xe0000 0x20000>;
+			};
+			syspart: partition@100000 {
+				label = "sys";
+				reg = <0x100000 0x600000>;
+			};
+			usrpart: partition@700000 {
+				label = "usrimg1";
+				reg = <0x700000 0x1400000>;
+			};
+			partition@1b00000 {
+				label = "usrappfs";
+				reg = <0x1b00000 0x400000>;
+			};
+			partition@1f00000 {
+				label = "para";
+				reg = <0x1f00000 0x100000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&ethernet0 {
+	mdio: mdio-bus {
+		compatible = "realtek,rtl838x-mdio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		INTERNAL_PHY(8)
+		INTERNAL_PHY(9)
+		INTERNAL_PHY(10)
+		INTERNAL_PHY(11)
+		INTERNAL_PHY(12)
+		INTERNAL_PHY(13)
+		INTERNAL_PHY(14)
+		INTERNAL_PHY(15)
+	};
+};
+
+&switch0 {
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		SWITCH_PORT(15, 1, internal)
+		SWITCH_PORT(14, 2, internal)
+		SWITCH_PORT(13, 3, internal)
+		SWITCH_PORT(12, 4, internal)
+		SWITCH_PORT(11, 5, internal)
+		SWITCH_PORT(10, 6, internal)
+		SWITCH_PORT(9, 7, internal)
+		SWITCH_PORT(8, 8, internal)
+
+		port@28 {
+			ethernet = <&ethernet0>;
+			reg = <28>;
+			phy-mode = "internal";
+
+			fixed-link {
+				speed = <1000>;
+				full-duplex;
+			};
+		};
+	};
+};
-- 
2.30.2