blob: a27fe00428670170a385ac42d4bb5a1f2a04baa6 [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
* DTS for SolidRun CN9130 Clearfog Pro.
*
*/
/dts-v1/;
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "cn9130.dtsi"
#include "cn9130-sr-som.dtsi"
#include "cn9130-cf.dtsi"
/ {
model = "SolidRun CN9130 Clearfog Pro";
compatible = "solidrun,cn9130-clearfog-pro",
"solidrun,cn9130-sr-som", "marvell,cn9130";
gpio-keys {
compatible = "gpio-keys";
pinctrl-0 = <&rear_button_pins>;
pinctrl-names = "default";
button-0 {
/* The rear SW3 button */
label = "Rear Button";
gpios = <&cp0_gpio2 0 GPIO_ACTIVE_LOW>;
linux,can-disable;
linux,code = <BTN_0>;
};
};
};
/* SRDS #3 - SGMII 1GE to L2 switch */
&cp0_eth1 {
phys = <&cp0_comphy3 1>;
phy-mode = "sgmii";
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};
&cp0_eth2_phy {
/*
* Configure LEDs default behaviour similar to switch ports:
* - LED[0]: link/activity: On/blink (green)
* - LED[1]: link is 100/1000Mbps: On (red)
* - LED[2]: high impedance (floating)
*
* Switch port defaults:
* - LED0: link/activity: On/blink (green)
* - LED1: link is 1000Mbps: On (red)
*
* Identical configuration is impossible with hardware offload.
*/
marvell,reg-init = <3 16 0xf000 0x0a61>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
label = "LED2";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_WAN;
label = "LED1";
default-state = "keep";
};
};
};
&cp0_mdio {
ethernet-switch@4 {
compatible = "marvell,mv88e6085";
reg = <4>;
pinctrl-0 = <&dsa_clk_pins &dsa_pins>;
pinctrl-names = "default";
reset-gpios = <&cp0_gpio1 27 GPIO_ACTIVE_LOW>;
interrupt-parent = <&cp0_gpio1>;
interrupts = <29 IRQ_TYPE_EDGE_FALLING>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
ethernet-port@0 {
reg = <0>;
label = "lan5";
phy = <&switch0phy0>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED12";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED11";
default-state = "keep";
};
};
};
ethernet-port@1 {
reg = <1>;
label = "lan4";
phy = <&switch0phy1>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED10";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED9";
default-state = "keep";
};
};
};
ethernet-port@2 {
reg = <2>;
label = "lan3";
phy = <&switch0phy2>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED8";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED7";
default-state = "keep";
};
};
};
ethernet-port@3 {
reg = <3>;
label = "lan2";
phy = <&switch0phy3>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED6";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED5";
default-state = "keep";
};
};
};
ethernet-port@4 {
reg = <4>;
label = "lan1";
phy = <&switch0phy4>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED4";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED3";
default-state = "keep";
};
};
};
ethernet-port@5 {
reg = <5>;
label = "cpu";
ethernet = <&cp0_eth1>;
phy-mode = "sgmii";
fixed-link {
speed = <1000>;
full-duplex;
};
};
ethernet-port@6 {
reg = <6>;
label = "lan6";
phy-mode = "rgmii";
/*
* Because of mdio address conflict the
* external phy is not readable.
* Force a fixed link instead.
*/
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy0: ethernet-phy@0 {
reg = <0x0>;
};
switch0phy1: ethernet-phy@1 {
reg = <0x1>;
/*
* Indirectly configure default behaviour
* for port lan6 leds behind external phy.
* Internal PHYs are not using page 3,
* therefore writing to it is safe.
*/
marvell,reg-init = <3 16 0xf000 0x0a61>;
};
switch0phy2: ethernet-phy@2 {
reg = <0x2>;
};
switch0phy3: ethernet-phy@3 {
reg = <0x3>;
};
switch0phy4: ethernet-phy@4 {
reg = <0x4>;
};
};
/*
* There is an external phy on the switch mdio bus.
* Because its mdio address collides with internal phys,
* it is not readable.
*
* mdio-external {
* compatible = "marvell,mv88e6xxx-mdio-external";
* #address-cells = <1>;
* #size-cells = <0>;
*
* ethernet-phy@1 {
* reg = <0x1>;
* };
* };
*/
};
};
/* SRDS #4 - miniPCIe (CON2) */
&cp0_pcie1 {
num-lanes = <1>;
phys = <&cp0_comphy4 1>;
/* dw-pcie inverts internally */
reset-gpios = <&expander0 2 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&cp0_pinctrl {
dsa_clk_pins: cp0-dsa-clk-pins {
marvell,pins = "mpp40";
marvell,function = "synce1";
};
dsa_pins: cp0-dsa-pins {
marvell,pins = "mpp27", "mpp29";
marvell,function = "gpio";
};
rear_button_pins: cp0-rear-button-pins {
marvell,pins = "mpp32";
marvell,function = "gpio";
};
cp0_spi1_cs1_pins: cp0-spi1-cs1-pins {
marvell,pins = "mpp12";
marvell,function = "spi1";
};
};
&cp0_spi1 {
/* add pin for chip-select 1 on mikrobus */
pinctrl-0 = <&cp0_spi1_pins &cp0_spi1_cs1_pins>;
};
/* USB-2.0 Host on Type-A connector */
&cp0_usb3_1 {
phys = <&cp0_utmi1>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&expander0 {
/* CON2 */
pcie1-0-clkreq-hog {
gpio-hog;
gpios = <4 GPIO_ACTIVE_LOW>;
input;
line-name = "pcie1.0-clkreq";
};
/* CON2 */
pcie1-0-w-disable-hog {
gpio-hog;
gpios = <7 GPIO_ACTIVE_LOW>;
output-low;
line-name = "pcie1.0-w-disable";
};
};