// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "macros.dtsi"

/dts-v1/;

/ {
	#address-cells = <1>;
	#size-cells = <1>;

	compatible = "realtek,rtl838x-soc";

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;
		frequency = <800000000>;

		cpu@0 {
			compatible = "mips,mips34Kc";
			reg = <0>;
		};
	};

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x8000000>;
	};

	aliases {
		serial0 = &uart0;
		serial1 = &uart1;
	};

	chosen {
		bootargs = "earlycon";
		stdout-path = "serial0:115200n8";
	};

	cpuintc: cpuintc {
		compatible = "mti,cpu-interrupt-controller";
		#address-cells = <0>;
		#interrupt-cells = <1>;
		interrupt-controller;
	};

	lx_clk: lx_clk {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency  = <175000000>;
	};

	soc: soc {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0x0 0x18000000 0x20000>;

		ecc0: ecc@1a600 {
			compatible = "realtek,rtl9301-ecc";
			reg = <0x1a600 0x54>;

			status = "disabled";
		};

		intc: interrupt-controller@3000 {
			compatible = "realtek,rtl9300-intc", "realtek,rtl-intc";
			reg = <0x3000 0x18>, <0x3018 0x18>;
			interrupt-controller;
			#interrupt-cells = <2>;

			interrupt-parent = <&cpuintc>;
			interrupts = <2>, <3>, <4>, <5>, <6>, <7>;
		};

		snand: spi@1a400 {
			compatible = "realtek,rtl9301-snand";
			reg = <0x1a400 0x44>;
			interrupt-parent = <&intc>;
			interrupts = <19 2>;
			clocks = <&lx_clk>;
			#address-cells = <1>;
			#size-cells = <0>;

			status = "disabled";
		};

		spi0: spi@1200 {
			compatible = "realtek,rtl8380-spi";
			reg = <0x1200 0x100>;

			#address-cells = <1>;
			#size-cells = <0>;
		};

		timer0: timer@3200 {
			compatible = "realtek,rtl930x-timer", "realtek,otto-timer";
			reg = <0x3200 0x10>, <0x3210 0x10>, <0x3220 0x10>,
			      <0x3230 0x10>, <0x3240 0x10>;

			interrupt-parent = <&intc>;
			interrupts = <7 4>, <8 4>, <9 4>, <10 4>, <11 4>;
			clocks = <&lx_clk>;
		};

		uart0: uart@2000 {
			compatible = "ns16550a";
			reg = <0x2000 0x100>;

			clocks = <&lx_clk>;

			interrupt-parent = <&intc>;
			interrupts = <30 1>;

			reg-io-width = <1>;
			reg-shift = <2>;
			fifo-size = <1>;
			no-loopback-test;
		};

		uart1: uart@2100 {
			compatible = "ns16550a";
			reg = <0x2100 0x100>;

			clocks = <&lx_clk>;

			interrupt-parent = <&intc>;
			interrupts = <31 0>;

			reg-io-width = <1>;
			reg-shift = <2>;
			fifo-size = <1>;
			no-loopback-test;

			pinctrl-0 = <&pinmux_enable_uart1>;
			pinctrl-names = "default";

			status = "disabled";
		};

		watchdog0: watchdog@3260 {
			compatible = "realtek,rtl9300-wdt";
			reg = <0x3260 0xc>;

			realtek,reset-mode = "soc";

			clocks = <&lx_clk>;
			timeout-sec = <30>;

			interrupt-parent = <&intc>;
			interrupt-names = "phase1", "phase2";
			interrupts = <5 4>, <6 4>;
		};

		gpio0: gpio-controller@3300 {
			compatible = "realtek,rtl9300-gpio", "realtek,otto-gpio";
			reg = <0x3300 0x1c>, <0x3338 0x8>;

			gpio-controller;
			#gpio-cells = <2>;
			ngpios = <24>;

			interrupt-controller;
			#interrupt-cells = <2>;
			interrupt-parent = <&intc>;
			interrupts = <13 1>;
		};

	};

	switch0: ethernet-switch@1b000000 {
		compatible = "realtek,rtl9301-switch", "realtek,otto-switch", "syscon", "simple-mfd";
		reg = <0x1b000000 0x10000>;
		interrupt-parent = <&intc>;
		interrupts = <23 2>;
		#address-cells = <1>;
		#size-cells = <1>;

		ethernet0: ethernet {
			compatible = "realtek,rtl9301-eth";
			interrupt-parent = <&intc>;
			interrupts = <24 3>;
			#interrupt-cells = <1>;
			phy-mode = "internal";

			fixed-link {
				speed = <1000>;
				full-duplex;
			};
		};

		i2c_mst1: i2c@36c {
			compatible = "realtek,rtl9301-i2c";
			reg = <0x36c 0x18>;
			#address-cells = <1>;
			#size-cells = <0>;

			status = "disabled";
		};

		i2c_mst2: i2c@388 {
			compatible = "realtek,rtl9301-i2c";
			reg = <0x388 0x18>;
			#address-cells = <1>;
			#size-cells = <0>;

			status = "disabled";
		};

		mdio_ctrl: mdio-controller {
			compatible = "realtek,rtl9301-mdio", "realtek,otto-mdio";
			#address-cells = <1>;
			#size-cells = <0>;

			mdio_bus0: mdio-bus@0 {
				reg = <0>;
				#address-cells = <1>;
				#size-cells = <0>;
			};
			mdio_bus1: mdio-bus@1 {
				reg = <1>;
				#address-cells = <1>;
				#size-cells = <0>;
			};
			mdio_bus2: mdio-bus@2 {
				reg = <2>;
				#address-cells = <1>;
				#size-cells = <0>;
			};
			mdio_bus3: mdio-bus@3 {
				reg = <3>;
				#address-cells = <1>;
				#size-cells = <0>;
			};
		};

		mdio_aux: mdio-aux {
			compatible = "realtek,rtl9300-aux-mdio";
			#address-cells = <1>;
			#size-cells = <0>;
			pinctrl-0 = <&pinmux_gpio_mdio_en>;
			pinctrl-names = "default";

			status = "disabled";
		};

		mdio_serdes: mdio-serdes {
			compatible = "realtek,rtl9301-serdes-mdio", "realtek,otto-serdes-mdio";
		};

		pcs {
			compatible = "realtek,rtl9301-pcs", "realtek,otto-pcs";
			#address-cells = <1>;
			#size-cells = <0>;

			serdes0: serdes@0 {
				reg = <0>;
				#pcs-cells = <1>;
			};
			serdes1: serdes@1 {
				reg = <1>;
				#pcs-cells = <1>;
			};
			serdes2: serdes@2 {
				reg = <2>;
				#pcs-cells = <1>;
			};
			serdes3: serdes@3 {
				reg = <3>;
				#pcs-cells = <1>;
			};
			serdes4: serdes@4 {
				reg = <4>;
				#pcs-cells = <1>;
			};
			serdes5: serdes@5 {
				reg = <5>;
				#pcs-cells = <1>;
			};
			serdes6: serdes@6 {
				reg = <6>;
				#pcs-cells = <1>;
			};
			serdes7: serdes@7 {
				reg = <7>;
				#pcs-cells = <1>;
			};
			serdes8: serdes@8 {
				reg = <8>;
				#pcs-cells = <1>;
			};
			serdes9: serdes@9 {
				reg = <9>;
				#pcs-cells = <1>;
			};
			serdes10: serdes@10 {
				reg = <10>;
				#pcs-cells = <1>;
			};
			serdes11: serdes@11 {
				reg = <11>;
				#pcs-cells = <1>;
			};
		};

		soc_thermal: thermal {
			compatible = "realtek,rtl9300-thermal";
			#thermal-sensor-cells = <0>;
		};
	};

	pinmux@1b000200 {
		compatible = "pinctrl-single";
		reg = <0x1b000200 0x4>;

		pinctrl-single,bit-per-mux;
		pinctrl-single,register-width = <32>;
		pinctrl-single,function-mask = <0x1>;
		#pinctrl-cells = <2>;

		/* Enable GPIO 19 */
		pinmux_disable_led_sync: disable-led-sync {
			pinctrl-single,bits = <0x0 0x0 0x800>;
		};

		pinmux_enable_led_sync: enable-led-sync {
			pinctrl-single,bits = <0x0 0x800 0x800>;
		};

		/* Enable GPIO 18 */
		pinmux_disable_usb_led: disable-usb-led {
			pinctrl-single,bits = <0x0 0x0 0x400>;
		};

		pinmux_enable_usb_led: enable-usb-led {
			pinctrl-single,bits = <0x0 0x400 0x400>;
		};

		/* Disable SLV SPI CS - freeing any associated GPIOs */
		pinmux_disable_slv_spi_cs: disable-slv-spi-cs {
			pinctrl-single,bits = <0x0 0x0 0x3E0>;
		};

		/* Disable SLV SPI SDO - freeing any associated GPIOs */
		pinmux_disable_slv_spi_sdo: disable-slv-spi-sdo {
			pinctrl-single,bits = <0x0 0x0 0x1F>;
		};
	};

	pinmux@1b000204 {
		compatible = "pinctrl-single";
		reg = <0x1b000204 0x4>;

		pinctrl-single,bit-per-mux;
		pinctrl-single,register-width = <32>;
		pinctrl-single,function-mask = <0x1>;
		#pinctrl-cells = <2>;

		pinmux_enable_uart1: enable-uart1 {
			pinctrl-single,bits = <0x0 0x1 0x3>;
		};
	};

	pinmux@1b00c600 {
		compatible = "pinctrl-single";
		reg = <0x1b00c600 0x4>;

		pinctrl-single,bit-per-mux;
		pinctrl-single,register-width = <32>;
		pinctrl-single,function-mask = <0x1>;
		#pinctrl-cells = <2>;

		pinmux_gpio_mdio_en: gpio-mdio-en {
			pinctrl-single,bits = <0x0 0x100 0x100>;
		};
	};

	pinmux_led: pinmux@1b00cc00 {
		compatible = "pinctrl-single";
		reg = <0x1b00cc00 0x4>;

		pinctrl-single,bit-per-mux;
		pinctrl-single,register-width = <32>;
		pinctrl-single,function-mask = <0x1>;
		#pinctrl-cells = <2>;

		/* enable GPIO 0 */
		pinmux_disable_sys_led: disable_sys_led {
			pinctrl-single,bits = <0x0 0x0 0x1000>;
		};
	};

	thermal_zones: thermal-zones {
		cpu-thermal {
			polling-delay-passive = <1000>;
			polling-delay = <1000>;
			coefficients = <1000 0>;
			thermal-sensors = <&soc_thermal>;
			trips {
				critical {
					temperature = <105000>;
					hysteresis = <2000>;
					type = "critical";
				};
			};
		};
	};
};
