[U-Boot] [RFC PATCH v3 0/3] Felix Eth switch driver and questions on DSA switches

Alex Marginean alexandru.marginean at nxp.com
Fri Nov 15 12:57:12 UTC 2019


The driver sets up the switch during probe making external and internal ports
available to use.  It does not support direct I/O through these switch ports
in this version, instead ENETC ethernet interfaces that are internally linked to
the switch can be used after the switch is set up.

This is where the RFC part comes in.  Both the switch as a device and its ports
are probed as ethernet devices.  That's handy as accessors to connect to the PHY
can be used on switch ports, but otherwise they are useless as the user can't
ping to these interfaces directly.  We're not running STP in U-Boot either, so
turning on the switch is a problem if there are loops in the network.
The Linux driver for this piece of HW is now moving under DSA and this leads to
my question.  Does anyone here think that DSA support is something useful in
U-Boot?

DSA is described here:
https://www.kernel.org/doc/Documentation/networking/dsa/dsa.txt

>From the doc:

	Summarized, this is basically how DSA looks like from a network device
	perspective:


		    |---------------------------
		    | CPU network device (eth0)|
		    ----------------------------
		    | <tag added by switch     |
		    |                          |
		    |                          |
		    |        tag added by CPU> |
		|--------------------------------------------|
		| Switch driver				     |
		|--------------------------------------------|
			    ||        ||         ||
		|-------|  |-------|  |-------|
		| sw0p0 |  | sw0p1 |  | sw0p2 |
		|-------|  |-------|  |-------|


If we do DSA in U-Boot we would use the same bindings as in Linux.  The switch
would be associated with a master network device which is a regular ethernet,
this is part of the DSA binding in Linux.
Whenever the user pings through swp0pN in background that would _start swp0pN,
the switch port connected to the master network device and the master network
device (eth0 in the picture above).  Any frames sent through a switch port would
have the DSA tag inserted and then actually sent though the mater network
device.  Similarly for Rx, polling swp0pN would in fact poll on the master
network device and for any frame received the DSA code would check and remove
the DSA tag.
Switching between switch ports would be by default disabled.
This kind of switch drivers should go under a new class, DSA or ETH_DSA, or
something along those lines.

I'd like to get some feedback from networking people on this list, if adding DSA
support in U-Boot is something that could be useful, or the existing support is
good enough.  Currently U-Boot does support a few switches either as PHYs or
as ETH devices with various limitations.  Feel free to share any thoughts on
this topic. 

With these patches applied the switch on LS1028A looks like this:

=> dm tree
 Class     Index  Probed  Driver                Name
-----------------------------------------------------------
....
 pci          2  [ + ]   pci_generic_ecam      |-- pcie at 1f0000000
 eth          1  [ + ]   enetc_eth             |   |-- enetc-0
 eth          2  [ + ]   enetc_eth             |   |-- enetc-1
 eth          3  [ + ]   enetc_eth             |   |-- enetc-2
 mdio         5  [ + ]   enetc_mdio            |   |-- emdio-3
 pci_generi   0  [   ]   pci_generic_drv       |   |-- pci_3:0.4
 eth          4  [ + ]   felix_ethsw           |   |-- felix_ethsw
 eth          6  [ + ]   felix-port            |   |   |-- port at 0
 eth          7  [ + ]   felix-port            |   |   |-- port at 1
 eth          8  [ + ]   felix-port            |   |   |-- port at 2
 eth          9  [ + ]   felix-port            |   |   |-- port at 3
 eth         10  [ + ]   felix-port            |   |   |-- port at 4
 eth         11  [ + ]   felix-port            |   |   `-- port at 5
 eth          5  [ + ]   enetc_eth             |   |-- enetc-6
 pci_generi   1  [   ]   pci_generic_drv       |   `-- pci_3:1f.0

=> mdio list
felix_ethsw:
emdio-3:
mdio at 50:
0 - Aquantia AQR412 <--> port at 0
1 - Aquantia AQR412 <--> port at 1
2 - Aquantia AQR412 <--> port at 2
3 - Aquantia AQR412 <--> port at 3
mdio at 00:
5 - AR8035 <--> enetc-1
mdio at 40:
2 - Aquantia AQR112 <--> enetc-0
mdio at 60:
mdio at 70:

Any feedback is welcome, of course 


This patch set replaces this v2 series:
https://patchwork.ozlabs.org/project/uboot/list/?series=126977&state=*
and depends on:
https://patchwork.ozlabs.org/project/uboot/list/?series=142858
https://patchwork.ozlabs.org/project/uboot/list/?series=142879

Thank you!


Alex Marginean (3):
  drivers: net: Add a driver for the Felix Ethernet switch on NXP
    LS1028A
  arm: dts: ls1028a: add node for the integrated Ethernet switch
  configs: ls1028a: enable FSL_FELIX switch driver

 arch/arm/dts/fsl-ls1028a-rdb.dts             |  36 ++
 arch/arm/dts/fsl-ls1028a.dtsi                |  31 ++
 configs/ls1028aqds_tfa_SECURE_BOOT_defconfig |   1 +
 configs/ls1028aqds_tfa_defconfig             |   1 +
 configs/ls1028ardb_tfa_SECURE_BOOT_defconfig |   1 +
 configs/ls1028ardb_tfa_defconfig             |   1 +
 drivers/net/Kconfig                          |   7 +
 drivers/net/Makefile                         |   1 +
 drivers/net/fsl_enetc.h                      |   5 +
 drivers/net/fsl_felix.c                      | 421 +++++++++++++++++++
 10 files changed, 505 insertions(+)
 create mode 100644 drivers/net/fsl_felix.c

-- 
2.17.1



More information about the U-Boot mailing list