[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