// 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 = <500000000>;

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

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

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

	intc: rtlintc {
		#address-cells = <0>;
		#interrupt-cells = <1>;
		interrupt-controller;
		compatible = "realtek,rt8380-intc";
		reg = <0xb8003000 0x20>;
	};

	spi0: spi@b8001200 {
		status = "okay";

		compatible = "realtek,rtl838x-nor";
		reg = <0xb8001200 0x100>;

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

	uart0: uart@b8002000 {
		status = "okay";

		compatible = "ns16550a";
		reg = <0xb8002000 0x100>;

		clock-frequency = <200000000>;

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

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

	uart1: uart@b8002100 {
		pinctrl-names = "default";
		pinctrl-0 = <&enable_uart1>;

		status = "okay";

		compatible = "ns16550a";
		reg = <0xb8002100 0x100>;

		clock-frequency = <200000000>;

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

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

	gpio0: gpio-controller@b8003500 {
		compatible = "realtek,rtl838x-gpio";
		reg = <0xb8003500 0x20>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-parent = <&intc>;
		interrupts = <23>;
	};

	gpio1: rtl8231-gpio {
		status = "disabled";
		compatible = "realtek,rtl8231-gpio";
		#gpio-cells = <2>;
		indirect-access-bus-id = <0>;
		gpio-controller;
	};

	pinmux: pinmux@bb001000 {
		compatible = "pinctrl-single";
		reg = <0xbb001000 0x4>;

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

		enable_uart1: pinmux_enable_uart1 {
			pinctrl-single,bits = <0x0 0x10 0x10>;
		};
	};

	ethernet0: ethernet@bb00a300 {
		status = "okay";

		compatible = "realtek,rtl838x-eth";
		reg = <0xbb00a300 0x100>;
		interrupt-parent = <&intc>;
		interrupts = <24>;
		#interrupt-cells = <1>;
		phy-mode = "internal";

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

	switch0: switch@bb000000 {
		status = "okay";

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

		compatible = "realtek,rtl83xx-switch";
	};
};