// SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * Copyright (C) 2024 Josua Mayer * * DTS for SolidRun CN9132 Clearfog. * */ /dts-v1/; #include #include #include "cn9130.dtsi" #include "cn9132-sr-cex7.dtsi" / { model = "SolidRun CN9132 Clearfog"; compatible = "solidrun,cn9132-clearfog", "solidrun,cn9132-sr-cex7", "marvell,cn9130"; aliases { ethernet1 = &cp0_eth2; ethernet2 = &cp0_eth0; ethernet3 = &cp2_eth0; ethernet4 = &cp1_eth0; i2c7 = &carrier_mpcie_i2c; i2c8 = &carrier_ptp_i2c; mmc1 = &cp0_sdhci0; }; gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&cp1_wake0_pins>; button-0 { label = "SW2"; gpios = <&cp1_gpio2 8 GPIO_ACTIVE_LOW>; linux,can-disable; linux,code = ; }; }; leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&cp1_batlow_pins &cp2_rsvd4_pins>; /* LED11 */ led-io-0 { color = ; function = LED_FUNCTION_DISK; function-enumerator = <0>; default-state = "off"; gpios = <&cp1_gpio1 11 GPIO_ACTIVE_HIGH>; }; /* LED12 */ led-io-1 { color = ; function = LED_FUNCTION_DISK; function-enumerator = <1>; default-state = "off"; gpios = <&cp2_gpio1 4 GPIO_ACTIVE_HIGH>; }; }; /* CON4 W_DISABLE1/W_DISABLE2 */ rfkill-m2-wlan { compatible = "rfkill-gpio"; label = "m.2 wlan (CON4)"; radio-type = "wlan"; pinctrl-names = "default"; pinctrl-0 = <&cp1_10g_phy_rst_01_pins>; /* rfkill-gpio inverts internally */ shutdown-gpios = <&cp1_gpio2 11 GPIO_ACTIVE_HIGH>; }; /* CON5 W_DISABLE1/W_DISABLE2 */ rfkill-m2-wlan { compatible = "rfkill-gpio"; label = "m.2 wlan (CON5)"; radio-type = "wlan"; pinctrl-names = "default"; pinctrl-0 = <&cp1_10g_phy_rst_23_pins>; /* rfkill-gpio inverts internally */ shutdown-gpios = <&cp1_gpio2 10 GPIO_ACTIVE_HIGH>; }; /* J21 W_DISABLE1 */ rfkill-m2-wwan { compatible = "rfkill-gpio"; label = "m.2 wwan (J21)"; radio-type = "wwan"; pinctrl-names = "default"; pinctrl-0 = <&cp2_rsvd3_pins>; /* rfkill-gpio inverts internally */ shutdown-gpios = <&cp2_gpio1 3 GPIO_ACTIVE_HIGH>; }; /* J21 W_DISABLE1 */ rfkill-m2-gnss { compatible = "rfkill-gpio"; label = "m.2 gnss (J21)"; radio-type = "gps"; pinctrl-names = "default"; pinctrl-0 = <&cp2_rsvd8_pins>; /* rfkill-gpio inverts internally */ shutdown-gpios = <&cp2_gpio1 8 GPIO_ACTIVE_HIGH>; }; /* J14 W_DISABLE */ rfkill-mpcie-wlan { compatible = "rfkill-gpio"; label = "mpcie wlan (J14)"; radio-type = "wlan"; pinctrl-names = "default"; pinctrl-0 = <&cp2_rsvd2_pins>; /* rfkill-gpio inverts internally */ shutdown-gpios = <&cp2_gpio1 2 GPIO_ACTIVE_HIGH>; }; sfp: sfp { compatible = "sff,sfp"; i2c-bus = <&com_10g_sfp_i2c0>; pinctrl-names = "default"; pinctrl-0 = <&com_10g_int0_pins>; mod-def0-gpios = <&cp0_gpio1 24 GPIO_ACTIVE_LOW>; maximum-power-milliwatt = <2000>; }; }; &com_smbus { /* This bus is also routed to STM32 BMC Microcontroller (U2) */ power-sensor@40 { compatible = "ti,ina220"; reg = <0x40>; #io-channel-cells = <1>; label = "vdd_12v0"; shunt-resistor = <2000>; }; adc@48 { compatible = "ti,tla2021"; reg = <0x48>; #address-cells = <1>; #size-cells = <0>; /* supplied by chaoskey hardware noise generator circuit */ channel@0 { reg = <0>; }; }; }; &cp0_eth_phy0 { /* * Configure LEDs default behaviour: * - LED[0]: link is 1000Mbps: On (yellow): 0111 * - LED[1]: link/activity: On/Blink (green): 0001 * - LED[2]: Off (green): 1000 */ marvell,reg-init = <3 16 0xf000 0x0817>; leds { #address-cells = <1>; #size-cells = <0>; led@0 { /* link */ reg = <0>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@1 { /* act */ reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@2 { /* 1000 */ reg = <2>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; /* SRDS #4 - 10GE */ &cp0_eth0 { phys = <&cp0_comphy4 0>; phy-mode = "10gbase-r"; managed = "in-band-status"; sfp = <&sfp>; status = "okay"; }; &cp0_eth2 { phy-mode = "2500base-x"; phys = <&cp0_comphy5 2>; status = "okay"; fixed-link { speed = <2500>; full-duplex; pause; }; }; &cp0_i2c1 { /* * Both COM and Carrier Board have a PCA9547 i2c mux at 0x77. * Describe them as a single device merging each child bus. */ i2c-mux@77 { i2c@0 { /* Routed to Full PCIe (J4) */ }; i2c@1 { /* Routed to USB Hub (U29) */ }; i2c@2 { /* Routed to M.2 (CON4) */ }; i2c@3 { /* Routed to M.2 (CON5) */ }; i2c@4 { /* Routed to M.2 (J21) */ }; carrier_mpcie_i2c: i2c@5 { #address-cells = <1>; #size-cells = <0>; reg = <5>; /* Routed to mini-PCIe (J14) */ }; carrier_ptp_i2c: i2c@6 { #address-cells = <1>; #size-cells = <0>; reg = <6>; /* Routed to various optional PTP related components */ }; }; }; &cp0_mdio { ethernet-switch@4 { compatible = "marvell,mv88e6085"; reg = <4>; mdio { #address-cells = <1>; #size-cells = <0>; sw_phy1: ethernet-phy@1 { reg = <0x11>; }; sw_phy2: ethernet-phy@2 { reg = <0x12>; }; sw_phy3: ethernet-phy@3 { reg = <0x13>; }; sw_phy4: ethernet-phy@4 { reg = <0x14>; }; }; ethernet-ports { #address-cells = <1>; #size-cells = <0>; ethernet-port@1 { reg = <1>; label = "lan1"; phy-handle = <&sw_phy1>; phy-mode = "internal"; leds { #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@1 { reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; ethernet-port@2 { reg = <2>; label = "lan2"; phy-handle = <&sw_phy2>; phy-mode = "internal"; leds { #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@1 { reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; ethernet-port@3 { reg = <3>; label = "lan3"; phy-handle = <&sw_phy3>; phy-mode = "internal"; leds { #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@1 { reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; ethernet-port@4 { reg = <4>; label = "lan4"; phy-handle = <&sw_phy4>; phy-mode = "internal"; leds { #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@1 { reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; ethernet-port@5 { reg = <5>; label = "cpu"; ethernet = <&cp0_eth2>; phy-mode = "2500base-x"; fixed-link { speed = <2500>; full-duplex; pause; }; }; }; }; }; /* SRDS #0,#1,#2,#3 - PCIe */ &cp0_pcie0 { num-lanes = <4>; phys = <&cp0_comphy0 0>, <&cp0_comphy1 0>, <&cp0_comphy2 0>, <&cp0_comphy3 0>; status = "okay"; }; &cp0_pinctrl { /* * configure unused gpios exposed via pin headers: * - J7-10: PWRBTN */ pinctrl-names = "default"; pinctrl-0 = <&cp0_pwrbtn_pins>; }; /* microSD */ &cp0_sdhci0 { pinctrl-0 = <&cp0_mmc0_pins>, <&cp0_mmc0_cd_pins>; pinctrl-names = "default"; bus-width = <4>; no-1-8-v; status = "okay"; }; &cp0_spi1 { /* add CS1 */ pinctrl-0 = <&cp0_spi1_pins>, <&cp0_spi1_cs1_pins>; flash@1 { compatible = "jedec,spi-nor"; reg = <1>; /* read command supports max. 50MHz */ spi-max-frequency = <50000000>; }; }; /* J38 */ &cp0_uart2 { pinctrl-names = "default"; pinctrl-0 = <&cp0_uart2_pins>; status = "okay"; }; &cp0_utmi { /* M.2 "CON5" swaps D+/D- */ swap-dx-lanes = <1>; }; &cp1_ethernet { status = "okay"; }; /* SRDS #2 - 5GE */ &cp1_eth0 { phys = <&cp1_comphy2 0>; phy-mode = "5gbase-r"; phy = <&cp1_eth_phy0>; managed = "in-band-status"; status = "okay"; }; /* SRDS #0,#1 - PCIe */ &cp1_pcie0 { num-lanes = <2>; phys = <&cp1_comphy0 0>, <&cp1_comphy1 0>; status = "okay"; }; /* SRDS #4 - PCIe */ &cp1_pcie1 { num-lanes = <1>; phys = <&cp1_comphy4 1>; status = "okay"; }; /* SRDS #5 - PCIe */ &cp1_pcie2 { num-lanes = <1>; phys = <&cp1_comphy5 2>; status = "okay"; }; &cp1_pinctrl { /* * configure unused gpios exposed via pin headers: * - J7-8: RSVD16 * - J7-10: THRM * - J10-1: WAKE1 * - J10-2: SATA_ACT * - J10-8: THERMTRIP */ pinctrl-names = "default"; pinctrl-0 = <&cp1_rsvd16_pins &cp1_sata_act_pins &cp1_thrm_irq_pins>, <&cp1_thrm_trip_pins &cp1_wake1_pins>; }; /* SRDS #3 - SATA */ &cp1_sata0 { status = "okay"; /* only port 1 is available */ /delete-node/ sata-port@0; sata-port@1 { phys = <&cp1_comphy3 1>; }; }; &cp1_utmi { /* M.2 "CON4" swaps D+/D- */ swap-dx-lanes = <0>; }; &cp1_xmdio { pinctrl-names = "default"; pinctrl-0 = <&cp1_xmdio_pins>; status = "okay"; cp1_eth_phy0: ethernet-phy@8 { compatible = "ethernet-phy-ieee802.3-c45"; reg = <8>; pinctrl-names = "default"; pinctrl-0 = <&com_10g_int1_pins>; interrupt-parent = <&cp1_gpio2>; interrupts = <18 IRQ_TYPE_EDGE_FALLING>; leds { #address-cells = <1>; #size-cells = <0>; led@1 { reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@2 { reg = <2>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; }; &cp2_ethernet { status = "okay"; }; /* SRDS #2 - 5GE */ &cp2_eth0 { phys = <&cp2_comphy2 0>; phy-mode = "5gbase-r"; phy = <&cp2_eth_phy0>; managed = "in-band-status"; status = "okay"; }; &cp2_gpio1 { pinctrl-names= "default"; pinctrl-0 = <&cp2_rsvd9_pins>; /* J21 */ m2-wwan-reset-hog { gpio-hog; gpios = <9 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; output-low; line-name = "m2-wwan-reset"; }; }; /* SRDS #0 - PCIe */ &cp2_pcie0 { num-lanes = <1>; phys = <&cp2_comphy0 0>; status = "okay"; }; /* SRDS #4 - PCIe */ &cp2_pcie1 { num-lanes = <1>; phys = <&cp2_comphy4 1>; status = "okay"; }; /* SRDS #5 - PCIe */ &cp2_pcie2 { num-lanes = <1>; phys = <&cp2_comphy5 2>; status = "okay"; }; &cp2_pinctrl { /* * configure unused gpios exposed via pin headers: * - J7-1: RSVD10 * - J7-3: RSVD11 * - J7-5: RSVD56 * - J7-6: RSVD7 * - J7-7: RSVD27 * - J10-3: RSVD31 * - J10-5: RSVD5 * - J10-6: RSVD32 * - J10-7: RSVD0 * - J10-9: RSVD1 */ pinctrl-names = "default"; pinctrl-0 = <&cp2_rsvd0_pins &cp2_rsvd1_pins &cp2_rsvd5_pins>, <&cp2_rsvd7_pins &cp2_rsvd10_pins &cp2_rsvd11_pins>, <&cp2_rsvd27_pins &cp2_rsvd31_pins &cp2_rsvd32_pins>, <&cp2_rsvd56_pins>; }; /* SRDS #3 - SATA */ &cp2_sata0 { status = "okay"; /* only port 1 is available */ /delete-node/ sata-port@0; sata-port@1 { phys = <&cp2_comphy3 1>; }; }; &cp2_xmdio { pinctrl-names = "default"; pinctrl-0 = <&cp2_xmdio_pins>; status = "okay"; cp2_eth_phy0: ethernet-phy@8 { compatible = "ethernet-phy-ieee802.3-c45"; reg = <8>; pinctrl-names = "default"; pinctrl-0 = <&com_10g_int2_pins>; interrupt-parent = <&cp2_gpio2>; interrupts = <18 IRQ_TYPE_EDGE_FALLING>; leds { #address-cells = <1>; #size-cells = <0>; led@1 { reg = <1>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; led@2 { reg = <2>; color = ; function = LED_FUNCTION_LAN; default-state = "keep"; }; }; }; };