diff --git a/target/linux/bmips/bcm6328/base-files/etc/board.d/02_network b/target/linux/bmips/bcm6328/base-files/etc/board.d/02_network index 104f20ef0e2..78c0794f231 100644 --- a/target/linux/bmips/bcm6328/base-files/etc/board.d/02_network +++ b/target/linux/bmips/bcm6328/base-files/etc/board.d/02_network @@ -9,6 +9,9 @@ arcadyan,ar7516) ucidef_set_bridge_device switch ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan" ;; +inteno,xg6846) + ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan ext1" + ;; comtrend,ar-5381u |\ comtrend,ar-5387un |\ innacomm,w3400v6 |\ diff --git a/target/linux/bmips/dts/bcm6328-inteno-xg6846.dts b/target/linux/bmips/dts/bcm6328-inteno-xg6846.dts new file mode 100644 index 00000000000..ee9d19839cc --- /dev/null +++ b/target/linux/bmips/dts/bcm6328-inteno-xg6846.dts @@ -0,0 +1,312 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; + +/* + * 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" +#include +#include + +/ { + model = "Inteno XG6846"; + compatible = "inteno,xg6846", "brcm,bcm6328"; + + /* OpenWrt-specific aliases */ + aliases { + led-boot = &led_pwr_red; + led-failsafe = &led_pwr_red; + led-running = &led_pwr_green; + led-upgrade = &led_pwr_red; + led-usb = &led_usb_green; + }; + + chosen { + bootargs = "rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200"; + stdout-path = "serial0:115200n8"; + }; + + /* + * 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>; + }; + + /* 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>; + }; + + sfp0: sfp0 { + compatible = "sff,sfp"; + i2c-bus = <&i2c0>; + los-gpios = <&gpio 29 GPIO_ACTIVE_HIGH>; + }; + + keys { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <20>; + + reset { + label = "reset"; + gpios = <&gpio 24 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + }; +}; + +&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>; + + cfe: partition@0 { + label = "cfe"; + reg = <0x0000000 0x0010000>; + read-only; + }; + + partition@10000 { + compatible = "brcm,bcm963xx-imagetag"; + reg = <0x010000 0xfe0000>; + label = "firmware"; + }; + + partition@ff0000 { + reg = <0xff0000 0x010000>; + label = "nvram"; + }; + }; + }; +}; + +&cfe { + compatible = "nvmem-cells"; + #address-cells = <1>; + #size-cells = <1>; + + macaddr_cfe_6a0: macaddr@6a0 { + reg = <0x6a0 0x6>; + }; +}; + +ðernet { + status = "okay"; + + nvmem-cells = <&macaddr_cfe_6a0>; + nvmem-cell-names = "mac-address"; +}; + +&switch0 { + dsa,member = <0 0>; + + ports { + switch0port4: port@4 { + reg = <4>; + label = "extsw"; + + phy-mode = "rgmii"; + fixed-link { + speed = <1000>; + full-duplex; + }; + }; + }; +}; + +&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>; + }; + + port@1 { + reg = <1>; + label = "lan2"; + phy-handle = <&lan2phy>; + }; + + port@2 { + reg = <2>; + label = "lan3"; + phy-handle = <&lan3phy>; + }; + + port@3 { + reg = <3>; + label = "lan4"; + phy-handle = <&lan4phy>; + }; + + port@4 { + reg = <4>; + label = "ext1"; + phy-handle = <&ext1phy>; + }; + + port@5 { + reg = <5>; + phy-mode = "rgmii-id"; + label = "wan"; + sfp = <&sfp0>; + fixed-link { + speed = <1000>; + full-duplex; + }; + }; + + port@6 { + reg = <6>; + phy-mode = "rgmii-id"; + label = "cpu"; + 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>; + }; + }; + }; +}; + +&uart0 { + status = "okay"; +}; + +&pinctrl { + pinctrl_xg6846_usb_spd_led: xg6846_usb_spd_led-pins { + function = "led"; + pins = "gpio17"; + }; +}; + +&leds { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_xg6846_usb_spd_led>, /* GPIO16 LED USB */ + <&pinctrl_ephy1_spd_led>, /* GPIO18 LED PWR red */ + <&pinctrl_ephy3_spd_led>; /* GPIO20 LED PWR green */ + + /* On board variants without USB this LED is not mounted */ + led_usb_green: led@16 { + reg = <16>; + active-low; + label = "green:usb"; + default-state = "off"; + }; + + /* + * LED 18 and 20 drive the same physical LED, the PWR + * LED that can be both red and green. + */ + led_pwr_red: led@18 { + reg = <18>; + active-low; + label = "red:pwr"; + default-state = "off"; + }; + + led_pwr_green: led@20 { + reg = <20>; + active-low; + label = "green:pwr"; + default-state = "off"; + }; + +}; diff --git a/target/linux/bmips/image/bcm6328.mk b/target/linux/bmips/image/bcm6328.mk index b28926b1e71..0e249fa96e4 100644 --- a/target/linux/bmips/image/bcm6328.mk +++ b/target/linux/bmips/image/bcm6328.mk @@ -51,6 +51,20 @@ define Device/innacomm_w3400v6 endef TARGET_DEVICES += innacomm_w3400v6 +define Device/inteno_xg6846 + $(Device/bcm63xx-cfe-legacy) + DEVICE_VENDOR := Inteno + DEVICE_MODEL := XG6846 + CHIP_ID := 6328 + CFE_BOARD_ID := 96328avng + FLASH_MB := 16 + DEVICE_PACKAGES := $(USB2_PACKAGES) \ + kmod-i2c-core kmod-i2c-gpio \ + kmod-leds-bcm6328 kmod-dsa-mv88e6xxx \ + kmod-sfp +endef +TARGET_DEVICES += inteno_xg6846 + define Device/nucom_r5010unv2 $(Device/bcm63xx-cfe) DEVICE_VENDOR := NuCom