From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Walle Date: Mon, 25 Jan 2021 14:02:07 +0100 Subject: [PATCH v4 0/7] Introduce DSA Ethernet switch class and Felix driver In-Reply-To: <20210125122357.414742-1-olteanv@gmail.com> References: <20210125122357.414742-1-olteanv@gmail.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Am 2021-01-25 13:23, schrieb Vladimir Oltean: > From: Vladimir Oltean > > 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 at 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 [on kontron_sl28] Thanks, -michael