This is my effort to get the VSC73xx switch chips working with Linux. It works for me with this device: https://dflund.se/~triad/krad/itian-squareone/ Which has Vitesse VSC7395 embedded in it.
I got this device from Florian Fainelli who got it from Tomasz Figa I think. It's cute. The device has been run with custom firmware blobs in OpenWRT ar71xx for years. Those download some code to the 8051 CPU and that starts to run the show. https://github.com/openwrt/openwrt/blob/master/target/linux/ar71xx/files/drivers/spi/spi-vsc7385.c I strongly suspect these devices can just use this driver as well and toss out that firmware, Linux will just step in and take control instead. It's not even much traffic over SPI going on. It also makes it possible for us to implement VLAN support on top of this if there is interest. The firmware mostly makes sense when using this device with an EEPROM inside a stand-alone switch anyway. Linux should be in control when we use it. We can write our own firmware for this thing if we want. It's not even hard (well for some definition of hard) it just requires patience and time. Until then, just taking control of it using SPI and disabling the 8051 CPU works just fine. The target device was using exactly this method: SPI nothing else. I boot it: vsc73xx spi0.0: VSC7395 (rev: 0) switch found vsc73xx spi0.0: iCPU disabled, no external memory vsc73xx spi0.0: MAC for control frames: B2:BF:79:2F:A3:E1 vsc73xx spi0.0: set up the switch libphy: dsa slave smi: probed vsc73xx spi0.0: reset PHY - disallowed Vitesse VSC7395 dsa-0.0:00: attached PHY driver [Vitesse VSC7395] (mii_bus:phy_addr=dsa-0.0:00, irq=POLL) vsc73xx spi0.0: reset PHY - disallowed Vitesse VSC7395 dsa-0.0:01: attached PHY driver [Vitesse VSC7395] (mii_bus:phy_addr=dsa-0.0:01, irq=POLL) vsc73xx spi0.0: reset PHY - disallowed Vitesse VSC7395 dsa-0.0:02: attached PHY driver [Vitesse VSC7395] (mii_bus:phy_addr=dsa-0.0:02, irq=POLL) vsc73xx spi0.0: reset PHY - disallowed Vitesse VSC7395 dsa-0.0:03: attached PHY driver [Vitesse VSC7395] (mii_bus:phy_addr=dsa-0.0:03, irq=POLL) vsc73xx spi0.0: port 6: 1000 Mbit mode full duplex DSA: tree 0 setup Then I do like this: ifconfig eth1 169.254.1.2 netmask 255.255.255.0 up gemini-ethernet-port 6000c000.ethernet-port eth1: connected to PHY "fixed-0:00" Generic PHY fixed-0:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=fixed-0:00, irq=POLL) phy_id=0x00000000, phy_mode=rgmii gemini-ethernet-port 6000c000.ethernet-port: set GMAC0 and GMAC1 to MII/RGMII mode gemini-ethernet-port 6000c000.ethernet-port eth1: connect to RGMII gemini-ethernet-port 6000c000.ethernet-port eth1: gmac_enable_irq device 1 enable gemini-ethernet-port 6000c000.ethernet-port eth1: opened IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready root@gemini:/ gemini-ethernet-port 6000c000.ethernet-port eth1: connect to RGMII @ 1Gbit IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready Hey it works. ifconfig lan1 up vsc73xx spi0.0: enable port 0 IPv6: ADDRCONF(NETDEV_UP): lan1: link is not ready IPv6: ADDRCONF(NETDEV_CHANGE): lan1: link becomes ready vsc73xx spi0.0: port 0: 100 Mbit mode full duplex vsc73xx spi0.0 lan1: Link is Up - 100Mbps/Full - flow control rx/tx ifconfig eth0 Link encap:Ethernet HWaddr F2:07:A7:EC:84:88 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:28 eth1 Link encap:Ethernet HWaddr FE:7F:EB:C9:05:DF inet addr:169.254.1.2 Bcast:169.254.1.255 Mask:255.255.255.0 inet6 addr: fe80::fe7f:eb00:1c9:5df/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:58 errors:0 dropped:6 overruns:0 frame:0 TX packets:75 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5532 (5.4 KiB) TX bytes:6814 (6.6 KiB) Interrupt:29 lan1 Link encap:Ethernet HWaddr FE:7F:EB:C9:05:DF inet6 addr: fe80::fc7f:ebff:fec9:5df/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:726 (726.0 B) ethtool -S lan1 NIC statistics: tx_packets: 13 tx_bytes: 1006 rx_packets: 0 rx_bytes: 0 RxEtherStatsOctets: 88396 RxEtherStatsPkts: 887 RxBroadcast+MulticastPkts: 34 RxTotalErrorPackets: 0 TxEtherStatsOctets: 86860 TxEtherStatsPkts: 874 TxBroadcast+MulticastPkts: 20 TxTotalErrorPackets: 0 Linus Walleij (3): net: dsa: Add DT bindings for Vitesse VSC73xx switches net: phy: vitesse: Add support for VSC73xx net: dsa: Add Vitesse VSC73xx DSA router driver .../bindings/net/dsa/vitesse,vsc73xx.txt | 81 + .../devicetree/bindings/vendor-prefixes.txt | 1 + drivers/net/dsa/Kconfig | 12 + drivers/net/dsa/Makefile | 1 + drivers/net/dsa/vitesse-vsc73xx.c | 1362 +++++++++++++++++ drivers/net/phy/vitesse.c | 162 ++ 6 files changed, 1619 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/dsa/vitesse,vsc73xx.txt create mode 100644 drivers/net/dsa/vitesse-vsc73xx.c -- 2.17.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/listinfo/openwrt-devel