[PATCH v4 0/7] Introduce DSA Ethernet switch class and Felix driver
Michael Walle
michael at walle.cc
Mon Jan 25 14:02:07 CET 2021
Am 2021-01-25 13:23, schrieb Vladimir Oltean:
> From: Vladimir Oltean <vladimir.oltean at nxp.com>
>
> DSA stands for Distributed Switch Architecture and it is a subsystem
> introduced in the Linux kernel to support switches that:
> - have an Ethernet link up to the CPU
> - use some form of tagging to identify the source/destination port for
> Rx/Tx
> - may be cascaded in tree-like structures.
>
> DSA is described in depth here:
> https://www.kernel.org/doc/Documentation/networking/dsa/dsa.txt
>
> This patch set introduces a DSA class in U-Boot to support drivers of
> DSA
> switches. DSA drivers have to implement the following ops:
> - enable/disable of switch ports,
> - insert a tag in frames being transmitted, used by the switch to
> select
> the egress port,
> - parse a tag in frames being received, used for Rx traffic.
>
> DSA class code deals with presentation of switch ports as Ethernet
> interfaces, deals with the master Ethernet device for I/O and helps
> with
> parsing of the DT assuming the structure follows the DSA kernel
> binding.
>
> Support for switch cascading is not included yet.
>
> In the sandbox environment, the DSA sandbox driver, the switch ports
> and
> master eth interface look like this:
> => dm tree
> Class Index Probed Driver Name
> -----------------------------------------------------------
> [...]
> eth 4 [ + ] eth_sandbox |-- dsa-test-eth
> dsa 0 [ + ] dsa_sandbox |-- dsa-test
> eth 5 [ + ] dsa-port | |-- lan0
> eth 6 [ + ] dsa-port | `-- lan1
>
> => setenv ethact lan1
> => ping 1.2.3.5
> Using lan1 device
> host 1.2.3.5 is alive
> =>
>
> This patch set also introduces a driver for the Ethernet switch
> integrated
> into NXP LS1028A, called Felix. The switch has 4 front panel ports,
> I/O
> to/from it is done though an ENETC Ethernet interface and meta-data is
> carried between the switch and the driver though an additional header
> pre-pended to the original frame.
> Network commands like tftp can be used on these front panel ports. The
> ports are disabled unless used so they do not cause issues on network
> topologies that include loops.
>
> Felix as seen on LS1028A RDB:
> => dm tree
> Class Index Probed Driver Name
> -----------------------------------------------------------
> [...]
> dsa 0 [ + ] felix-switch | |-- felix-switch
> eth 4 [ + ] dsa-port | | |-- swp0
> eth 5 [ + ] dsa-port | | |-- swp1
> eth 6 [ + ] dsa-port | | |-- swp2
> eth 7 [ + ] dsa-port | | `-- swp3
>
> => mdio list
> [...]
> 10 - Vitesse VSC8514 <--> swp0
> 11 - Vitesse VSC8514 <--> swp1
> 12 - Vitesse VSC8514 <--> swp2
> 13 - Vitesse VSC8514 <--> swp3
>
> NOTE:
> This patchset is a major rework of the dsa-class code since the last
> submission from May 5th:
> https://patchwork.ozlabs.org/project/uboot/cover/1588700588-8587-1-git-send-email-claudiu.manoil@nxp.com/
> The basic concepts and data path operation (tagging) in the DSA class
> code remain the same as in the initial patchset from Alex, however the
> external API has been changed significantly (simplified), the driver
> model integration has been improved to the point that the DSA class
> code no longer needs to allocate extra memory internally (via malloc),
> reduced memory footprint, internal state data moved from the external
> API and internalized, cleaner external API, internal code reworked,
> completely reworked DSA sandbox driver and unit tests for better
> coverage
> and to integrate better with the eth sandbox driver and tests, etc.
>
> v4:
> - Implemented the TODO for having a phy_device on the CPU port.
> - Enabled CONFIG_PHY_FIXED which is a new dependency of CONFIG_DM_DSA.
>
> v3:
> - Removed all infrastructure associated with dsa_foreach_port, which
> is no longer needed.
> - Only inherit the DSA master's MAC address if the environment does not
> already have a specific MAC address that should be used for the DSA
> port.
> - Be compatible with the new "ethernet-ports" container name which has
> been introduced in the Linux kernel as commit 85e05d263ed2 ("net:
> dsa:
> of: Allow ethernet-ports as encapsulating node") in v5.9.
> - Fixed the felix driver not getting its ports initialized, due to
> dsa_foreach_port() being actually unusable when called from the probe
> function of the DSA udevice - the eth port udevices are _not_ yet
> probed at that point. We are now initializing all ports from the
> .port_enable() callback of each eth udevice.
> - Deleted the unit tests associated with the infrastructure for
> dsa_foreach_port, since that function no longer exists.
> - Enabled the config options for the Kontron LS1028A board too.
>
> v2: Switch node structure defined in dtsi now consistent with the Linux
> switch node definition. Moved aliases from dtsi to the RDB dts to
> minimize impact on other boards (and for improved flexibility).
>
> Alex Marginean (3):
> drivers: net: Add Felix DSA switch driver
> arm: dts: ls1028a: Add Ethernet switch node and dependencies
> configs: ls1028a: Enable the Ethernet switch driver in defconfig
>
> Claudiu Manoil (2):
> net: Introduce DSA class for Ethernet switches
> sandbox: Add a DSA sandbox driver and unit test
>
> Vladimir Oltean (2):
> net: phy: fixed: support speeds of 2500 and 10000
> net: phy: introduce fixed_phy_create for DSA CPU ports
Works now. Tested on Kontron sl28 var2 with two switch
ports routed to two SGMII lanes.
Tested-by: Michael Walle <michael at walle.cc> [on kontron_sl28]
Thanks,
-michael
More information about the U-Boot
mailing list