ARMADA 370 - Distributed Switch Architecture (dsa) - device tree
post at twien.net
post at twien.net
Wed Oct 15 06:42:26 PDT 2014
Thanks, using the fixed-link option made me "talk" to the switch.
Now I have to work on 88e6352 driver :-)
Tormod
On 2014-10-14 18:14, Florian Fainelli wrote:
> On 10/14/2014 04:14 AM, post at twien.net wrote:
>> Hello Florian,
>> Thanks for the tip. If you wouldn't mind share your Device Tree source
>> I
>> would be pleased.
>
> Here is the DTS for the network controller:
>
> ethernet at f04a0000 {
> local-mac-address = [ 00 10 18 a2 23 7b ];
> systemport,num-txq = <0x20>;
> #size-cells = <0x1>;
> systemport,num-rxq = <0x1>;
> systemport,num-tier2-arb = <0x1>;
> device_type = "network";
> fixed-link = <0x0 0x1 0x3e8 0x0 0x0>;
> phy-mode = "gmii";
> compatible = "brcm,systemport-v1.00",
> "brcm,systemport";
> systemport,num-tier1-arb = <0x4>;
> #address-cells = <0x1>;
> reg = <0xf04a0000 0x4650>;
> interrupts = <0x0 0x16 0x0 0x0 0x17 0x0>;
> interrupts-extended = <0x1 0x0 0x16 0x0 0x1 0x0
> 0x17 0x0 0x9 0x7>;
> interrupt-names = "systemport_0",
> "systemport_1", "wol_systemport";
> clocks = <0x1a 0x1b>;
> clock-names = "sw_sysport", "sw_sysportwol";
> linux,phandle = <0x1c>;
> phandle = <0x1c>;
> };
>
>
> Here is the DTS for the switch, it's a little complex, but the node
> with
> "brcm,bcm7445-switch-v4.0" is the one we match in net/dsa/dsa.c.
>
> switch_top at f0b00000 {
> compatible = "brcm,bcm7445-switch-top-v2.0",
> "simple-bus";
> #size-cells = <0x1>;
> #address-cells = <0x1>;
> ranges = <0x0 0xf0b00000 0x40804>;
>
> ethernet_switch at 0 {
> dsa,ethernet = <0x1c>;
> brcm,num-gphy = <0x1>;
> compatible =
> "brcm,bcm7445-switch-v4.0",
> "brcm,bcm53012";
> brcm,num-rgmii-ports = <0x2>;
> #address-cells = <0x2>;
> brcm,num-acb-queues = <0x40>;
> #size-cells = <0x0>;
> dsa,mii-bus = <0x1d>;
> reg = <0x0 0x40000 0x40000 0x110
> 0x40340
> 0x30 0x40380 0x30 0x40400 0x34 0x40600 0x208>;
> reg-names = "core", "reg", "intrl2_0",
> "intrl2_1", "fcb", "acb";
> interrupts = <0x0 0x18 0x0 0x0 0x19
> 0x0>;
> interrupt-names = "switch_0",
> "switch_1";
> brcm,fcb-pause-override;
> brcm,acb-packets-inflight;
> clocks = <0x1e 0x1f>;
> clock-names = "sw_switch",
> "sw_switch_mdiv";
>
> switch at 0 {
> #size-cells = <0x0>;
> reg = <0x0 0x0>;
> #address-cells = <0x1>;
>
> port at 0 {
> phy-mode = "internal";
> phy-handle = <0x8c>;
> linux,phandle = <0x8a>;
> phandle = <0x8a>;
> reg = <0x0>;
> label = "gphy";
> };
>
> port at 1 {
> phy-mode =
> "rgmii-txid";
> phy-handle = <0x8e>;
> linux,phandle = <0x8d>;
> phandle = <0x8d>;
> reg = <0x1>;
> label = "rgmii_1";
> };
>
> port at 2 {
> phy-mode =
> "rgmii-txid";
> fixed-link = <0x2 0x1
> 0x3e8 0x0 0x0>;
> linux,phandle = <0x8f>;
> phandle = <0x8f>;
> reg = <0x2>;
> label = "rgmii_2";
> };
>
> port at 7 {
> phy-mode = "moca";
> fixed-link = <0x7 0x1
> 0x3e8 0x0 0x0>;
> linux,phandle = <0x90>;
> phandle = <0x90>;
> reg = <0x7>;
> label = "moca";
> };
>
> port at 8 {
> linux,phandle = <0x91>;
> phandle = <0x91>;
> reg = <0x8>;
> label = "cpu";
> };
> };
> };
>
> mdio at 403c0 {
> reg = <0x403c0 0x8 0x40300 0x18>;
> #size-cells = <0x1>;
> compatible = "brcm,bcm7445-mdio-v4.0",
> "brcm,unimac-mdio";
> reg-names = "mdio", "mdio_indir_rw";
> #address-cells = <0x0>;
> linux,phandle = <0x1d>;
> phandle = <0x1d>;
>
> phy0: ethernet-phy at 0 {
> linux,phandle = <0x8e>;
> phandle = <0x8e>;
> device_type = "ethernet-phy";
> max-speed = <0x3e8>;
> reg = <0x0>;
> compatible = "brcm,bcm53125",
> "ethernet-phy-ieee802.3-c22";
> };
>
> phy5: ethernet-phy at 5 {
> linux,phandle = <0x8c>;
> phandle = <0x8c>;
> clock-names = "sw_gphy";
> clocks = <0x8b>;
> device_type = "ethernet-phy";
> max-speed = <0x3e8>;
> reg = <0x5>;
> compatible = "brcm,28nm-gphy",
> "ethernet-phy-ieee802.3-c22";
> };
> };
> };
>
>> Best,
>> Tormod
>>
>> On 2014-10-14 04:08, Florian Fainelli wrote:
>>> 2014-10-13 3:14 GMT-07:00 <post at twien.net>:
>>>> Dear all,
>>>> I have a custom board equipped with an ARMADA 370 SoC (88f6W11) and
>>>> a
>>>> Marvell switch chip (88e6352) (I have written a device driver for
>>>> the
>>>> latter).
>>>> My question is how to set up a proper device tree specification for
>>>> the
>>>> board. The device tree specification is listed below. This is based
>>>> on a
>>>> similar .dts-file for the kirkwood SoC.
>>>> Further down is a excerpt of the start up sequence. I would imagine
>>>> the
>>>> switch would be installed as the "PHY" for eth0 (which seems not to
>>>> be the
>>>> case). I added some additional printout messages, and from what I
>>>> can
>>>> see a
>>>> generic device driver is loaded, and eventually the
>>>> mvneta_open/-probe
>>>> function states that the PHY can not be found. I have read the
>>>> "examples" in
>>>> the ../boot/dts directory and also read the documentation. There are
>>>> some
>>>> confusing things, for example the "dsa,mii-bus;" specification where
>>>> I
>>>> eventually put in "dsa,mii-bus = <&mdio_bus>;". From both the
>>>> examples and
>>>> the documentation it seemed I should specify a device on the
>>>> mdio_bus, e.g.
>>>> "phy0", but when I did the whole thing crashed.
>>>> So specifying "mdio_bus" at least got me running a bit further, and
>>>> the dsa
>>>> driver was detected and the proper switch device was identified.
>>>> What I would like to achieve is to get eth0 to connect to port 5 on
>>>> the
>>>> switch using SGMII.
>>>> Any advice on how to proceed would be appreciated.
>>>
>>> At this point, what I would do is create a fixed-phy Device Tree node
>>> for mvneta to hardcode the link indication/speed/duplex, and specify
>>> the 'phy-mode' property to be "sgmii", and of course, remove the
>>> 'phy-handle' property such that the fixed PHY is used instead.
>>>
>>> Right now, DSA drivers are not created as regular PHY drivers (which
>>> is something on my TODO list), such that they do not provide link
>>> indication towards the CPU Ethernet MAC. Except for the front-panel
>>> external ports, Ethernet switches does not report standardized link
>>> parameters through the standard MII registers for the CPU port, which
>>> is why we have to find another way to do that.
>>>
>>> In case that helps, I could copy/paste a Device Tree source for a
>>> Broadcom SoC I use which has both of its DSA switch driver (bcm_sf2)
>>> and Ethernet MAC (bcmsysport) drivers mainline.
>>>
>>> Please note that, in order to boot from the network with DSA-enabled
>>> devices, you need such a patch:
>>> http://patchwork.ozlabs.org/patch/354293/
>>>
>>> which I should re-submit eventually
>>>
>>>
>>>>
>>>>
>>>> +---------+
>>>> | | +--------+
>>>> | | SGMII | |----- p0
>>>> | eth0|-----------|p5 | . .
>>>> | | | |----- p4
>>>> +---------+ +--------+
>>>> ARMADA 370 88e6352
>>>>
>>>>
>>>> Tormod
>>>>
>>>>
>>>>
>>>> /*
>>>> * Device Tree file for Marvell Armada 370 Ethernet Prototype board
>>>> * ()
>>>> *
>>>> * Copied from arch/arm/boot/dts/armada-370-rd.dts
>>>> *
>>>> * Copyright (C) 2014 ...
>>>> *
>>>> * This file is licensed under the terms of the GNU General Public
>>>> * License version 2. This program is licensed "as is" without any
>>>> * warranty of any kind, whether express or implied.
>>>> */
>>>>
>>>> /dts-v1/;
>>>> #include <dt-bindings/input/input.h>
>>>> #include <dt-bindings/gpio/gpio.h>
>>>> #include "armada-370.dtsi"
>>>>
>>>> / {
>>>> model = "Marvell Armada 370 Ethernet Prototype";
>>>> compatible = "marvell,armada370", "marvell,armada-370-xp";
>>>>
>>>> chosen {
>>>> bootargs = "console=ttyS0,115200 earlyprintk";
>>>> };
>>>>
>>>> memory {
>>>> device_type = "memory";
>>>> reg = <0x00000000 0x40000000>; /* 1 GB */
>>>> };
>>>>
>>>> soc {
>>>> ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
>>>> MBUS_ID(0x01, 0xe0) 0 0xfff00000
>>>> 0x100000>;
>>>>
>>>>
>>>> pcie-controller {
>>>> status = "okay";
>>>>
>>>> /* Internal mini-PCIe connector */
>>>> pcie at 1,0 {
>>>> /* Port 0, Lane 0 */
>>>> status = "okay";
>>>> };
>>>>
>>>> /* Internal mini-PCIe connector */
>>>> pcie at 2,0 {
>>>> /* Port 1, Lane 0 */
>>>> status = "okay";
>>>> };
>>>> };
>>>>
>>>> internal-regs {
>>>> serial at 12000 {
>>>> status = "okay";
>>>> };
>>>>
>>>> mdio_bus: mdio {
>>>> phy0: ethernet-phy at ff {
>>>> /* compatible =
>>>> "ethernet-phy-id5043.0eb0", "ethernet-phy-ieee802.3-c22";
>>>> */
>>>> reg = <0xff>; /* no PHY
>>>> connected
>>>> */
>>>> speed = <1000>;
>>>> duplex = <1>;
>>>> };
>>>>
>>>> /* phy1: ethernet-phy at 1 {
>>>> reg = <0x1>;
>>>> };
>>>> */
>>>> };
>>>>
>>>> ethernet at 70000 {
>>>> status = "okay";
>>>> phy = <&phy0>;
>>>> phy-mode = "sgmii";
>>>> };
>>>>
>>>> /* ethernet at 74000 {
>>>> status = "okay";
>>>> phy = <&phy1>;
>>>> phy-mode = "rgmii-id";
>>>> };
>>>> */
>>>> mvsdio at d4000 {
>>>> pinctrl-0 = <&sdio_pins1>;
>>>> pinctrl-names = "default";
>>>> status = "okay";
>>>> /* No CD or WP GPIOs */
>>>> broken-cd;
>>>> };
>>>>
>>>> usb at 50000 {
>>>> status = "okay";
>>>> };
>>>>
>>>>
>>>> /* usb at 51000 {
>>>> status = "okay";
>>>> };
>>>> */
>>>> spi0: spi at 10600 {
>>>> status = "okay";
>>>> };
>>>>
>>>> i2c at 11000 {
>>>> pinctrl-0 = <&i2c0_pins>;
>>>> pinctrl-names = "default";
>>>> clock-frequency = <100000>;
>>>> status = "okay";
>>>> };
>>>>
>>>> nand at d0000 {
>>>> status = "okay";
>>>> num-cs = <1>;
>>>> marvell,nand-keep-config;
>>>> marvell,nand-enable-arbiter;
>>>> nand-on-flash-bbt;
>>>>
>>>> partition at 0 {
>>>> label = "U-Boot";
>>>> reg = <0 0x800000>;
>>>> };
>>>> partition at 800000 {
>>>> label = "Linux";
>>>> reg = <0x800000 0x800000>;
>>>> };
>>>> partition at 1000000 {
>>>> label = "Filesystem";
>>>> reg = <0x1000000
>>>> 0x3f000000>;
>>>> };
>>>> };
>>>> };
>>>> };
>>>>
>>>> dsa at 0 {
>>>> compatible = "marvell,dsa";
>>>> #address-cells = <2>;
>>>> #size-cells = <0>;
>>>> dsa,ethernet = <ð0>;
>>>> dsa,mii-bus = <&mdio_bus>;
>>>>
>>>> switch at 0 {
>>>> #address-cells = <1>;
>>>> #size-cells = <0>;
>>>>
>>>> reg = <0 0>;
>>>>
>>>> port at 0 {
>>>> reg = <0>;
>>>> label = "lan1";
>>>> };
>>>>
>>>> port at 1 {
>>>> reg = <1>;
>>>> label = "lan2";
>>>> };
>>>>
>>>> port at 2 {
>>>> reg = <2>;
>>>> label = "lan3";
>>>> };
>>>>
>>>> port at 3 {
>>>> reg = <3>;
>>>> label = "lan4";
>>>> };
>>>>
>>>> port at 5 {
>>>> reg = <5>;
>>>> label = "cpu";
>>>> };
>>>>
>>>> port at 6 {
>>>> reg = <6>;
>>>> label = "lan6";
>>>> };
>>>> };
>>>> };
>>>>
>>>> };
>>>>
>>>>
>>>> nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x38
>>>> nand: Micron MT29F8G08ABABAWP
>>>> nand: 1024MiB, SLC, page size: 4096, OOB size: 224
>>>> pxa3xx-nand f10d0000.nand: ECC strength 16, ECC step size 2048
>>>> Bad block table found at page 262016, version 0x01
>>>> Bad block table found at page 261888, version 0x01
>>>> 3 ofpart partitions found on MTD device pxa3xx_nand-0
>>>> Creating 3 MTD partitions on "pxa3xx_nand-0":
>>>> 0x000000000000-0x000000800000 : "U-Boot"
>>>> 0x000000800000-0x000001000000 : "Linux"
>>>> 0x000001000000-0x000040000000 : "Filesystem"
>>>> mdiobus register device_node: mdio
>>>> libphy: orion_mdio_bus: probed
>>>> mdio_bus f1072004.mdio-mi: /soc/internal-regs/mdio/ethernet-phy at ff
>>>> PHY
>>>> address 255 is too large
>>>> mvneta_probe: ethernet device: eth%d
>>>> mvneta_probe: phy_node: ethernet-phy
>>>> mvneta f1070000.ethernet eth0: Using hardware mac address
>>>> 00:50:43:02:02:00
>>>> ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
>>>> ehci-pci: EHCI PCI platform driver
>>>> ehci-orion: EHCI orion driver
>>>> orion-ehci f1050000.usb: EHCI Host Controller
>>>> orion-ehci f1050000.usb: new USB bus registered, assigned bus number
>>>> 1
>>>> orion-ehci f1050000.usb: irq 26, io mem 0xf1050000
>>>> orion-ehci f1050000.usb: USB 2.0 started, EHCI 1.00
>>>> hub 1-0:1.0: USB hub found
>>>> hub 1-0:1.0: 1 port detected
>>>> usbcore: registered new interface driver usb-storage
>>>> mousedev: PS/2 mouse device common for all mice
>>>> rtc-mv f1010300.rtc: internal RTC not ticking
>>>> orion_wdt: Initial timeout 229 sec
>>>> usbcore: registered new interface driver usbhid
>>>> usbhid: USB HID core driver
>>>> TCP: cubic registered
>>>> Distributed Switch Architecture driver version 0.1
>>>> eth0[0]: detected a Marvell 88E6352 switch
>>>> libphy: dsa slave smi: probed
>>>> ThumbEE CPU extension supported.
>>>> drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
>>>> mvneta_mdio_probe: mvneta_probe: ethernet-phy
>>>> mvneta f1070000.ethernet eth0: could not find the PHY
>>>> mvneta f1070000.ethernet eth0: cannot probe MDIO bus
>>>> IP-Config: Failed to open eth0
>>>> IP-Config: Failed to open lan1
>>>> IP-Config: Failed to open lan2
>>>> IP-Config: Failed to open lan3
>>>> IP-Config: Failed to open lan4
>>>> IP-Config: Failed to open lan6
>>>> IP-Config: No network devices available
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> linux-arm-kernel mailing list
>>>> linux-arm-kernel at lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
More information about the linux-arm-kernel
mailing list