xref: /linux/arch/arm64/boot/dts/marvell/cn9130-cf-pro.dts (revision c771600c6af14749609b49565ffb4cac2959710d)
11c510c7dSJosua Mayer// SPDX-License-Identifier: GPL-2.0+
21c510c7dSJosua Mayer/*
31c510c7dSJosua Mayer * Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
41c510c7dSJosua Mayer *
51c510c7dSJosua Mayer * DTS for SolidRun CN9130 Clearfog Pro.
61c510c7dSJosua Mayer *
71c510c7dSJosua Mayer */
81c510c7dSJosua Mayer
91c510c7dSJosua Mayer/dts-v1/;
101c510c7dSJosua Mayer
111c510c7dSJosua Mayer#include <dt-bindings/input/input.h>
121c510c7dSJosua Mayer#include <dt-bindings/leds/common.h>
131c510c7dSJosua Mayer
141c510c7dSJosua Mayer#include "cn9130.dtsi"
151c510c7dSJosua Mayer#include "cn9130-sr-som.dtsi"
161c510c7dSJosua Mayer#include "cn9130-cf.dtsi"
171c510c7dSJosua Mayer
181c510c7dSJosua Mayer/ {
191c510c7dSJosua Mayer	model = "SolidRun CN9130 Clearfog Pro";
201c510c7dSJosua Mayer	compatible = "solidrun,cn9130-clearfog-pro",
211c510c7dSJosua Mayer		     "solidrun,cn9130-sr-som", "marvell,cn9130";
221c510c7dSJosua Mayer
231c510c7dSJosua Mayer	gpio-keys {
241c510c7dSJosua Mayer		compatible = "gpio-keys";
251c510c7dSJosua Mayer		pinctrl-0 = <&rear_button_pins>;
261c510c7dSJosua Mayer		pinctrl-names = "default";
271c510c7dSJosua Mayer
281c510c7dSJosua Mayer		button-0 {
291c510c7dSJosua Mayer			/* The rear SW3 button */
301c510c7dSJosua Mayer			label = "Rear Button";
311c510c7dSJosua Mayer			gpios = <&cp0_gpio2 0 GPIO_ACTIVE_LOW>;
321c510c7dSJosua Mayer			linux,can-disable;
331c510c7dSJosua Mayer			linux,code = <BTN_0>;
341c510c7dSJosua Mayer		};
351c510c7dSJosua Mayer	};
361c510c7dSJosua Mayer};
371c510c7dSJosua Mayer
381c510c7dSJosua Mayer/* SRDS #3 - SGMII 1GE to L2 switch */
391c510c7dSJosua Mayer&cp0_eth1 {
401c510c7dSJosua Mayer	phys = <&cp0_comphy3 1>;
411c510c7dSJosua Mayer	phy-mode = "sgmii";
421c510c7dSJosua Mayer	status = "okay";
431c510c7dSJosua Mayer
441c510c7dSJosua Mayer	fixed-link {
451c510c7dSJosua Mayer		speed = <1000>;
461c510c7dSJosua Mayer		full-duplex;
471c510c7dSJosua Mayer	};
481c510c7dSJosua Mayer};
491c510c7dSJosua Mayer
501c510c7dSJosua Mayer&cp0_eth2_phy {
511c510c7dSJosua Mayer	/*
521c510c7dSJosua Mayer	 * Configure LEDs default behaviour similar to switch ports:
531c510c7dSJosua Mayer	 * - LED[0]: link/activity: On/blink (green)
541c510c7dSJosua Mayer	 * - LED[1]: link is 100/1000Mbps: On (red)
551c510c7dSJosua Mayer	 * - LED[2]: high impedance (floating)
561c510c7dSJosua Mayer	 *
571c510c7dSJosua Mayer	 * Switch port defaults:
581c510c7dSJosua Mayer	 * - LED0: link/activity: On/blink (green)
591c510c7dSJosua Mayer	 * - LED1: link is 1000Mbps: On (red)
601c510c7dSJosua Mayer	 *
611c510c7dSJosua Mayer	 * Identical configuration is impossible with hardware offload.
621c510c7dSJosua Mayer	 */
631c510c7dSJosua Mayer	marvell,reg-init = <3 16 0xf000 0x0a61>;
641c510c7dSJosua Mayer
651c510c7dSJosua Mayer	leds {
661c510c7dSJosua Mayer		#address-cells = <1>;
671c510c7dSJosua Mayer		#size-cells = <0>;
681c510c7dSJosua Mayer
691c510c7dSJosua Mayer		led@0 {
701c510c7dSJosua Mayer			reg = <0>;
711c510c7dSJosua Mayer			color = <LED_COLOR_ID_GREEN>;
721c510c7dSJosua Mayer			function = LED_FUNCTION_WAN;
731c510c7dSJosua Mayer			label = "LED2";
741c510c7dSJosua Mayer			default-state = "keep";
751c510c7dSJosua Mayer		};
761c510c7dSJosua Mayer
771c510c7dSJosua Mayer		led@1 {
781c510c7dSJosua Mayer			reg = <1>;
791c510c7dSJosua Mayer			color = <LED_COLOR_ID_RED>;
801c510c7dSJosua Mayer			function = LED_FUNCTION_WAN;
811c510c7dSJosua Mayer			label = "LED1";
821c510c7dSJosua Mayer			default-state = "keep";
831c510c7dSJosua Mayer		};
841c510c7dSJosua Mayer	};
851c510c7dSJosua Mayer};
861c510c7dSJosua Mayer
871c510c7dSJosua Mayer&cp0_mdio {
881c510c7dSJosua Mayer	ethernet-switch@4 {
891c510c7dSJosua Mayer		compatible = "marvell,mv88e6085";
901c510c7dSJosua Mayer		reg = <4>;
911c510c7dSJosua Mayer		pinctrl-0 = <&dsa_clk_pins &dsa_pins>;
921c510c7dSJosua Mayer		pinctrl-names = "default";
931c510c7dSJosua Mayer		reset-gpios = <&cp0_gpio1 27 GPIO_ACTIVE_LOW>;
941c510c7dSJosua Mayer		interrupt-parent = <&cp0_gpio1>;
951c510c7dSJosua Mayer		interrupts = <29 IRQ_TYPE_EDGE_FALLING>;
961c510c7dSJosua Mayer
971c510c7dSJosua Mayer		ethernet-ports {
981c510c7dSJosua Mayer			#address-cells = <1>;
991c510c7dSJosua Mayer			#size-cells = <0>;
1001c510c7dSJosua Mayer
1011c510c7dSJosua Mayer			ethernet-port@0 {
1021c510c7dSJosua Mayer				reg = <0>;
1031c510c7dSJosua Mayer				label = "lan5";
1041c510c7dSJosua Mayer				phy = <&switch0phy0>;
1051c510c7dSJosua Mayer
1061c510c7dSJosua Mayer				leds {
1071c510c7dSJosua Mayer					#address-cells = <1>;
1081c510c7dSJosua Mayer					#size-cells = <0>;
1091c510c7dSJosua Mayer
1101c510c7dSJosua Mayer					led@0 {
1111c510c7dSJosua Mayer						reg = <0>;
1121c510c7dSJosua Mayer						color = <LED_COLOR_ID_GREEN>;
1131c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1141c510c7dSJosua Mayer						label = "LED12";
1151c510c7dSJosua Mayer						default-state = "keep";
1161c510c7dSJosua Mayer					};
1171c510c7dSJosua Mayer
1181c510c7dSJosua Mayer					led@1 {
1191c510c7dSJosua Mayer						reg = <1>;
1201c510c7dSJosua Mayer						color = <LED_COLOR_ID_RED>;
1211c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1221c510c7dSJosua Mayer						label = "LED11";
1231c510c7dSJosua Mayer						default-state = "keep";
1241c510c7dSJosua Mayer					};
1251c510c7dSJosua Mayer				};
1261c510c7dSJosua Mayer			};
1271c510c7dSJosua Mayer
1281c510c7dSJosua Mayer			ethernet-port@1 {
1291c510c7dSJosua Mayer				reg = <1>;
1301c510c7dSJosua Mayer				label = "lan4";
1311c510c7dSJosua Mayer				phy = <&switch0phy1>;
1321c510c7dSJosua Mayer
1331c510c7dSJosua Mayer				leds {
1341c510c7dSJosua Mayer					#address-cells = <1>;
1351c510c7dSJosua Mayer					#size-cells = <0>;
1361c510c7dSJosua Mayer
1371c510c7dSJosua Mayer					led@0 {
1381c510c7dSJosua Mayer						reg = <0>;
1391c510c7dSJosua Mayer						color = <LED_COLOR_ID_GREEN>;
1401c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1411c510c7dSJosua Mayer						label = "LED10";
1421c510c7dSJosua Mayer						default-state = "keep";
1431c510c7dSJosua Mayer					};
1441c510c7dSJosua Mayer
1451c510c7dSJosua Mayer					led@1 {
1461c510c7dSJosua Mayer						reg = <1>;
1471c510c7dSJosua Mayer						color = <LED_COLOR_ID_RED>;
1481c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1491c510c7dSJosua Mayer						label = "LED9";
1501c510c7dSJosua Mayer						default-state = "keep";
1511c510c7dSJosua Mayer					};
1521c510c7dSJosua Mayer				};
1531c510c7dSJosua Mayer			};
1541c510c7dSJosua Mayer
1551c510c7dSJosua Mayer			ethernet-port@2 {
1561c510c7dSJosua Mayer				reg = <2>;
1571c510c7dSJosua Mayer				label = "lan3";
1581c510c7dSJosua Mayer				phy = <&switch0phy2>;
1591c510c7dSJosua Mayer
1601c510c7dSJosua Mayer				leds {
1611c510c7dSJosua Mayer					#address-cells = <1>;
1621c510c7dSJosua Mayer					#size-cells = <0>;
1631c510c7dSJosua Mayer
1641c510c7dSJosua Mayer					led@0 {
1651c510c7dSJosua Mayer						reg = <0>;
1661c510c7dSJosua Mayer						color = <LED_COLOR_ID_GREEN>;
1671c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1681c510c7dSJosua Mayer						label = "LED8";
1691c510c7dSJosua Mayer						default-state = "keep";
1701c510c7dSJosua Mayer					};
1711c510c7dSJosua Mayer
1721c510c7dSJosua Mayer					led@1 {
1731c510c7dSJosua Mayer						reg = <1>;
1741c510c7dSJosua Mayer						color = <LED_COLOR_ID_RED>;
1751c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1761c510c7dSJosua Mayer						label = "LED7";
1771c510c7dSJosua Mayer						default-state = "keep";
1781c510c7dSJosua Mayer					};
1791c510c7dSJosua Mayer				};
1801c510c7dSJosua Mayer			};
1811c510c7dSJosua Mayer
1821c510c7dSJosua Mayer			ethernet-port@3 {
1831c510c7dSJosua Mayer				reg = <3>;
1841c510c7dSJosua Mayer				label = "lan2";
1851c510c7dSJosua Mayer				phy = <&switch0phy3>;
1861c510c7dSJosua Mayer
1871c510c7dSJosua Mayer				leds {
1881c510c7dSJosua Mayer					#address-cells = <1>;
1891c510c7dSJosua Mayer					#size-cells = <0>;
1901c510c7dSJosua Mayer
1911c510c7dSJosua Mayer					led@0 {
1921c510c7dSJosua Mayer						reg = <0>;
1931c510c7dSJosua Mayer						color = <LED_COLOR_ID_GREEN>;
1941c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
1951c510c7dSJosua Mayer						label = "LED6";
1961c510c7dSJosua Mayer						default-state = "keep";
1971c510c7dSJosua Mayer					};
1981c510c7dSJosua Mayer
1991c510c7dSJosua Mayer					led@1 {
2001c510c7dSJosua Mayer						reg = <1>;
2011c510c7dSJosua Mayer						color = <LED_COLOR_ID_RED>;
2021c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
2031c510c7dSJosua Mayer						label = "LED5";
2041c510c7dSJosua Mayer						default-state = "keep";
2051c510c7dSJosua Mayer					};
2061c510c7dSJosua Mayer				};
2071c510c7dSJosua Mayer			};
2081c510c7dSJosua Mayer
2091c510c7dSJosua Mayer			ethernet-port@4 {
2101c510c7dSJosua Mayer				reg = <4>;
2111c510c7dSJosua Mayer				label = "lan1";
2121c510c7dSJosua Mayer				phy = <&switch0phy4>;
2131c510c7dSJosua Mayer
2141c510c7dSJosua Mayer				leds {
2151c510c7dSJosua Mayer					#address-cells = <1>;
2161c510c7dSJosua Mayer					#size-cells = <0>;
2171c510c7dSJosua Mayer
2181c510c7dSJosua Mayer					led@0 {
2191c510c7dSJosua Mayer						reg = <0>;
2201c510c7dSJosua Mayer						color = <LED_COLOR_ID_GREEN>;
2211c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
2221c510c7dSJosua Mayer						label = "LED4";
2231c510c7dSJosua Mayer						default-state = "keep";
2241c510c7dSJosua Mayer					};
2251c510c7dSJosua Mayer
2261c510c7dSJosua Mayer					led@1 {
2271c510c7dSJosua Mayer						reg = <1>;
2281c510c7dSJosua Mayer						color = <LED_COLOR_ID_RED>;
2291c510c7dSJosua Mayer						function = LED_FUNCTION_LAN;
2301c510c7dSJosua Mayer						label = "LED3";
2311c510c7dSJosua Mayer						default-state = "keep";
2321c510c7dSJosua Mayer					};
2331c510c7dSJosua Mayer				};
2341c510c7dSJosua Mayer			};
2351c510c7dSJosua Mayer
2361c510c7dSJosua Mayer			ethernet-port@5 {
2371c510c7dSJosua Mayer				reg = <5>;
2381c510c7dSJosua Mayer				label = "cpu";
2391c510c7dSJosua Mayer				ethernet = <&cp0_eth1>;
2401c510c7dSJosua Mayer				phy-mode = "sgmii";
2411c510c7dSJosua Mayer
2421c510c7dSJosua Mayer				fixed-link {
2431c510c7dSJosua Mayer					speed = <1000>;
2441c510c7dSJosua Mayer					full-duplex;
2451c510c7dSJosua Mayer				};
2461c510c7dSJosua Mayer			};
2471c510c7dSJosua Mayer
2481c510c7dSJosua Mayer			ethernet-port@6 {
2491c510c7dSJosua Mayer				reg = <6>;
2501c510c7dSJosua Mayer				label = "lan6";
2511c510c7dSJosua Mayer				phy-mode = "rgmii";
2521c510c7dSJosua Mayer
2531c510c7dSJosua Mayer				/*
2541c510c7dSJosua Mayer				 * Because of mdio address conflict the
2551c510c7dSJosua Mayer				 * external phy is not readable.
2561c510c7dSJosua Mayer				 * Force a fixed link instead.
2571c510c7dSJosua Mayer				 */
2581c510c7dSJosua Mayer				fixed-link {
2591c510c7dSJosua Mayer					speed = <1000>;
2601c510c7dSJosua Mayer					full-duplex;
2611c510c7dSJosua Mayer				};
2621c510c7dSJosua Mayer			};
2631c510c7dSJosua Mayer		};
2641c510c7dSJosua Mayer
2651c510c7dSJosua Mayer		mdio {
2661c510c7dSJosua Mayer			#address-cells = <1>;
2671c510c7dSJosua Mayer			#size-cells = <0>;
2681c510c7dSJosua Mayer
2691c510c7dSJosua Mayer			switch0phy0: ethernet-phy@0 {
2701c510c7dSJosua Mayer				reg = <0x0>;
2711c510c7dSJosua Mayer			};
2721c510c7dSJosua Mayer
2731c510c7dSJosua Mayer			switch0phy1: ethernet-phy@1 {
2741c510c7dSJosua Mayer				reg = <0x1>;
2751c510c7dSJosua Mayer				/*
2761c510c7dSJosua Mayer				 * Indirectly configure default behaviour
2771c510c7dSJosua Mayer				 * for port lan6 leds behind external phy.
2781c510c7dSJosua Mayer				 * Internal PHYs are not using page 3,
2791c510c7dSJosua Mayer				 * therefore writing to it is safe.
2801c510c7dSJosua Mayer				 */
2811c510c7dSJosua Mayer				marvell,reg-init = <3 16 0xf000 0x0a61>;
2821c510c7dSJosua Mayer			};
2831c510c7dSJosua Mayer
2841c510c7dSJosua Mayer			switch0phy2: ethernet-phy@2 {
2851c510c7dSJosua Mayer				reg = <0x2>;
2861c510c7dSJosua Mayer			};
2871c510c7dSJosua Mayer
2881c510c7dSJosua Mayer			switch0phy3: ethernet-phy@3 {
2891c510c7dSJosua Mayer				reg = <0x3>;
2901c510c7dSJosua Mayer			};
2911c510c7dSJosua Mayer
2921c510c7dSJosua Mayer			switch0phy4: ethernet-phy@4 {
2931c510c7dSJosua Mayer				reg = <0x4>;
2941c510c7dSJosua Mayer			};
2951c510c7dSJosua Mayer		};
2961c510c7dSJosua Mayer
2971c510c7dSJosua Mayer		/*
2981c510c7dSJosua Mayer		 * There is an external phy on the switch mdio bus.
2991c510c7dSJosua Mayer		 * Because its mdio address collides with internal phys,
3001c510c7dSJosua Mayer		 * it is not readable.
3011c510c7dSJosua Mayer		 *
3021c510c7dSJosua Mayer		 * mdio-external {
3031c510c7dSJosua Mayer		 *	compatible = "marvell,mv88e6xxx-mdio-external";
3041c510c7dSJosua Mayer		 *	#address-cells = <1>;
3051c510c7dSJosua Mayer		 *	#size-cells = <0>;
3061c510c7dSJosua Mayer		 *
3071c510c7dSJosua Mayer		 *	ethernet-phy@1 {
3081c510c7dSJosua Mayer		 *		reg = <0x1>;
3091c510c7dSJosua Mayer		 *	};
3101c510c7dSJosua Mayer		 * };
3111c510c7dSJosua Mayer		 */
3121c510c7dSJosua Mayer	};
3131c510c7dSJosua Mayer};
3141c510c7dSJosua Mayer
3151c510c7dSJosua Mayer/* SRDS #4 - miniPCIe (CON2) */
3161c510c7dSJosua Mayer&cp0_pcie1 {
3171c510c7dSJosua Mayer	num-lanes = <1>;
3181c510c7dSJosua Mayer	phys = <&cp0_comphy4 1>;
3191c510c7dSJosua Mayer	/* dw-pcie inverts internally */
3201c510c7dSJosua Mayer	reset-gpios = <&expander0 2 GPIO_ACTIVE_HIGH>;
3211c510c7dSJosua Mayer	status = "okay";
3221c510c7dSJosua Mayer};
3231c510c7dSJosua Mayer
3241c510c7dSJosua Mayer&cp0_pinctrl {
3251c510c7dSJosua Mayer	dsa_clk_pins: cp0-dsa-clk-pins {
3261c510c7dSJosua Mayer		marvell,pins = "mpp40";
3271c510c7dSJosua Mayer		marvell,function = "synce1";
3281c510c7dSJosua Mayer	};
3291c510c7dSJosua Mayer
3301c510c7dSJosua Mayer	dsa_pins: cp0-dsa-pins {
3311c510c7dSJosua Mayer		marvell,pins = "mpp27", "mpp29";
3321c510c7dSJosua Mayer		marvell,function = "gpio";
3331c510c7dSJosua Mayer	};
3341c510c7dSJosua Mayer
3351c510c7dSJosua Mayer	rear_button_pins: cp0-rear-button-pins {
3361c510c7dSJosua Mayer		marvell,pins = "mpp32";
3371c510c7dSJosua Mayer		marvell,function = "gpio";
3381c510c7dSJosua Mayer	};
3391c510c7dSJosua Mayer
3401c510c7dSJosua Mayer	cp0_spi1_cs1_pins: cp0-spi1-cs1-pins {
3411c510c7dSJosua Mayer		marvell,pins = "mpp12";
3421c510c7dSJosua Mayer		marvell,function = "spi1";
3431c510c7dSJosua Mayer	};
3441c510c7dSJosua Mayer};
3451c510c7dSJosua Mayer
3461c510c7dSJosua Mayer&cp0_spi1 {
3471c510c7dSJosua Mayer	/* add pin for chip-select 1 on mikrobus */
3481c510c7dSJosua Mayer	pinctrl-0 = <&cp0_spi1_pins &cp0_spi1_cs1_pins>;
3491c510c7dSJosua Mayer};
3501c510c7dSJosua Mayer
3511c510c7dSJosua Mayer/* USB-2.0 Host on Type-A connector */
3521c510c7dSJosua Mayer&cp0_usb3_1 {
3531c510c7dSJosua Mayer	phys = <&cp0_utmi1>;
3541c510c7dSJosua Mayer	phy-names = "utmi";
3551c510c7dSJosua Mayer	dr_mode = "host";
3561c510c7dSJosua Mayer	status = "okay";
3571c510c7dSJosua Mayer};
3581c510c7dSJosua Mayer
3591c510c7dSJosua Mayer&expander0 {
3601c510c7dSJosua Mayer	/* CON2 */
3611c510c7dSJosua Mayer	pcie1-0-clkreq-hog {
3621c510c7dSJosua Mayer		gpio-hog;
3631c510c7dSJosua Mayer		gpios = <4 GPIO_ACTIVE_LOW>;
3641c510c7dSJosua Mayer		input;
3651c510c7dSJosua Mayer		line-name = "pcie1.0-clkreq";
3661c510c7dSJosua Mayer	};
3671c510c7dSJosua Mayer
3681c510c7dSJosua Mayer	/* CON2 */
3691c510c7dSJosua Mayer	pcie1-0-w-disable-hog {
3701c510c7dSJosua Mayer		gpio-hog;
3711c510c7dSJosua Mayer		gpios = <7 GPIO_ACTIVE_LOW>;
3721c510c7dSJosua Mayer		output-low;
3731c510c7dSJosua Mayer		line-name = "pcie1.0-w-disable";
3741c510c7dSJosua Mayer	};
3751c510c7dSJosua Mayer};
376