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

/dts-v1/;

#define STRINGIZE(s) #s
#define LAN_LABEL(p, s) STRINGIZE(p ## s)
#define SWITCH_PORT_LABEL(n) LAN_LABEL(lan, n)

#define INTERNAL_PHY(n) \
	phy##n: ethernet-phy@##n { \
		reg = <##n>; \
		compatible = "ethernet-phy-ieee802.3-c22"; \
		phy-is-integrated; \
	};

#define EXTERNAL_PHY(n) \
	phy##n: ethernet-phy@##n { \
		reg = <##n>; \
		compatible = "ethernet-phy-ieee802.3-c22"; \
	};

#define EXTERNAL_SFP_PHY(n) \
	phy##n: ethernet-phy@##n { \
		compatible = "ethernet-phy-ieee802.3-c22"; \
		sfp; \
		media = "fibre"; \
		reg = <##n>; \
	};

#define SWITCH_PORT(n, s, m) \
	port@##n { \
		reg = <##n>; \
		label = SWITCH_PORT_LABEL(s) ; \
		phy-handle = <&phy##n>; \
		phy-mode = #m ; \
	};

#define SWITCH_SFP_PORT(n, s, m) \
	port@##n { \
		reg = <##n>; \
		label = SWITCH_PORT_LABEL(s) ; \
		phy-handle = <&phy##n>; \
		phy-mode = #m ; \
		fixed-link { \
			speed = <1000>; \
			full-duplex; \
		}; \
	};

/ {
	#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>;
	};

	chosen {
		bootargs = "console=ttyS0,38400";
	};

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

	osc: oscillator {
		compatible = "fixed-clock";
		#clock-cells = <1>;
		clock-frequency  = <175000000>;
		clock-output-names = "osc";
	};

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

		intc: rtlintc@3000 {
			compatible = "realtek,rtl-intc";
			reg = <0x3000 0x20>;
			#address-cells = <0>;
			#interrupt-cells = <1>;
			interrupt-controller;
			interrupt-map =
				<31 &cpuintc 1>, /* UART1 */
				<30 &cpuintc 2>, /* UART0 */
				<28 &cpuintc 1>, /* USB_H2 */
				<24 &cpuintc 4>, /* NIC */
				<23 &cpuintc 3>, /* SWCORE */
				<13 &cpuintc 4>, /* GPIO_ABCD */
				<11 &cpuintc 1>, /* TC4 */
				<10 &cpuintc 1>, /* TC3 */
				<9 &cpuintc 1>,  /* TC2 */
				<8 &cpuintc 1>,  /* TC1 */
				<7 &cpuintc 5>;  /* TC0 */
		};

		timer: timer@3200 {
			compatible = "realtek,rtl9300-timer";
			reg = <0x3200 0x60>;
			interrupt-parent = <&intc>;
			interrupts = <8>;
			interrupt-names = "ostimer";
			clocks = <&osc 0>;
		};

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

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

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

			clock-frequency = <175000000>;

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

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

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

			clock-frequency = <175000000>;

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

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

			status = "disabled";
		};

		gpio0: gpio-controller@3500 {
			compatible = "realtek,rtl8380-gpio", "realtek,otto-gpio";
			reg = <0x3500 0x20>;
			gpio-controller;
			#gpio-cells = <2>;
			ngpios = <32>;
			interrupt-parent = <&intc>;
			interrupts = <31>;

			/*
			 * currently, RTL930x GPIO is not supported in
			 * upstreamed driver (gpio-realtek-otto)
			 */
			status = "disabled";
		};
	};

	ethernet0: ethernet@1b00a300 {
		compatible = "realtek,rtl838x-eth";
		reg = <0x1b00a300 0x100>;
		interrupt-parent = <&intc>;
		interrupts = <24>;
		#interrupt-cells = <1>;
		phy-mode = "internal";

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

	switch0: switch@1b000000 {
		compatible = "realtek,rtl83xx-switch";

		interrupt-parent = <&intc>;
		interrupts = <20>;
	};
};