// SPDX-License-Identifier: GPL-2.0 /* * Devicetree for the Inteno XG6846 router, mostly used as a * media converter from fiber to twisted pair ethernet * "fiber modem" in many households in Sweden. The Marvell * switch has one of its ports connected to an SFP (Small Form * Factor pluggable) optical fiber receiver, which is bridged * to the twisted pair connector LAN1. * * This device tree is inspired by research from the OpenWrt * and Sweclockers forums, including contributions from * NPeca75, mrhaav and csom. * * Some devices have a USB type A host receptacle mounted, * some do not. */ #include "bcm6328.dtsi" / { model = "Inteno XG6846"; compatible = "inteno,xg6846", "brcm,bcm6328"; aliases { led-boot = &led_power_red; led-failsafe = &led_power_red; led-running = &led_power_green; led-upgrade = &led_power_red; }; /* * This I2C port is connected to the SFP and reflects the EEPROM etc * inside the SFP module. If the module is not plugged in, consequently * nothing will be found on the bus. */ i2c0: i2c-sfp { compatible = "i2c-gpio"; sda-gpios = <&gpio 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; scl-gpios = <&gpio 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; #address-cells = <1>; #size-cells = <0>; sfp_eeprom: eeprom@50 { compatible = "atmel,24c02"; reg = <0x50>; read-only; }; }; /* This I2C bus is used for the external CATV connector (usually unused) */ i2c1: i2c-catv { compatible = "i2c-gpio"; sda-gpios = <&gpio 23 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; scl-gpios = <&gpio 7 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; #address-cells = <1>; #size-cells = <0>; }; keys { compatible = "gpio-keys-polled"; poll-interval = <100>; reset { label = "reset"; gpios = <&gpio 24 GPIO_ACTIVE_LOW>; linux,code = ; debounce-interval = <60>; }; }; sfp0: sfp0 { compatible = "sff,sfp"; i2c-bus = <&i2c0>; los-gpios = <&gpio 29 GPIO_ACTIVE_HIGH>; }; }; &hsspi { status = "okay"; flash@0 { compatible = "jedec,spi-nor"; /* * HW 1.0-1.1: Spansion S25FL128S1 * HW 1.3: Winbond W25Q128 * * Fast Read Data max speed is 50MHz, see the Winbond W25Q128 * datasheet table 9.5 "AC Electrical Characteristics", we can * use this speed because the chip supports fast reads. Older * HW has different NOR chips, I assume they can all do fast * reads. */ spi-max-frequency = <104000000>; spi-tx-bus-width = <2>; spi-rx-bus-width = <2>; m25p,fast-read; reg = <0>; #address-cells = <1>; #size-cells = <1>; partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; partition@0 { label = "cfe"; reg = <0x0000000 0x0010000>; read-only; nvmem-layout { compatible = "fixed-layout"; #address-cells = <1>; #size-cells = <1>; macaddr_cfe_6a0: macaddr@6a0 { reg = <0x6a0 0x6>; }; }; }; partition@10000 { compatible = "openwrt,uimage", "denx,uimage"; reg = <0x010000 0xfe0000>; label = "firmware"; openwrt,offset = <0x30000>; }; partition@ff0000 { reg = <0xff0000 0x010000>; label = "nvram"; }; }; }; }; &ehci { status = "okay"; }; ðernet { status = "okay"; nvmem-cells = <&macaddr_cfe_6a0>; nvmem-cell-names = "mac-address"; }; &leds { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_leds>, <&pinctrl_ephy1_spd_led>, <&pinctrl_ephy3_spd_led>; led@16 { reg = <16>; active-low; function = LED_FUNCTION_USB; color = ; }; led_power_red: led@18 { reg = <18>; active-low; function = LED_FUNCTION_POWER; color = ; panic-indicator; }; led_power_green: led@20 { reg = <20>; active-low; function = LED_FUNCTION_POWER; color = ; }; }; &mdio_ext { switch1: switch@0 { /* The switch is not using any external IRQ, sadly */ compatible = "marvell,mv88e6085"; #address-cells = <1>; #size-cells = <0>; reg = <0>; interrupt-controller; #interrupt-cells = <2>; dsa,member = <1 0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; label = "lan1"; phy-handle = <&lan1phy>; 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; }; }; }; port@1 { reg = <1>; label = "lan2"; phy-handle = <&lan2phy>; 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; }; }; }; port@2 { reg = <2>; label = "lan3"; phy-handle = <&lan3phy>; 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; }; }; }; port@3 { reg = <3>; label = "lan4"; phy-handle = <&lan4phy>; 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; }; }; }; port@4 { reg = <4>; label = "ext1"; phy-handle = <&ext1phy>; leds { #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_WAN; default-state = "keep"; }; led@1 { reg = <1>; color = ; function = LED_FUNCTION_WAN; }; }; }; port@5 { reg = <5>; label = "wan"; phy-mode = "rgmii-id"; sfp = <&sfp0>; fixed-link { speed = <1000>; full-duplex; }; leds { #address-cells = <1>; #size-cells = <0>; led@0 { reg = <0>; color = ; function = LED_FUNCTION_WAN; default-state = "keep"; }; led@1 { reg = <1>; color = ; function = LED_FUNCTION_WAN; }; }; }; port@6 { reg = <6>; phy-mode = "rgmii-id"; ethernet = <&switch0port4>; fixed-link { speed = <1000>; full-duplex; }; }; }; mdio { #address-cells = <1>; #size-cells = <0>; lan1phy: ethernet-phy@0 { reg = <0>; interrupt-parent = <&switch1>; interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; }; lan2phy: ethernet-phy@1 { reg = <1>; interrupt-parent = <&switch1>; interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; }; lan3phy: ethernet-phy@2 { reg = <2>; interrupt-parent = <&switch1>; interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; }; lan4phy: ethernet-phy@3 { reg = <3>; interrupt-parent = <&switch1>; interrupts = <3 IRQ_TYPE_LEVEL_HIGH>; }; ext1phy: ethernet-phy@4 { reg = <4>; interrupt-parent = <&switch1>; interrupts = <4 IRQ_TYPE_LEVEL_HIGH>; }; }; }; }; &ohci { status = "okay"; }; &pinctrl { pinctrl_leds: leds { function = "led"; pins = "gpio16", "gpio18", "gpio20"; }; }; &switch0 { dsa,member = <0 0>; ports { switch0port4: port@4 { reg = <4>; label = "extsw"; phy-mode = "rgmii"; fixed-link { speed = <1000>; full-duplex; }; }; }; }; &uart0 { status = "okay"; }; &usbh { status = "okay"; };