[LEDE-DEV] [PATCH] imx6: add DSA driver for MV88E6176 switch

Florian Fainelli f.fainelli at gmail.com
Fri Mar 10 12:44:14 PST 2017


On 03/10/2017 08:28 AM, Tim Harvey wrote:
> On Fri, Mar 10, 2017 at 7:49 AM, Rafał Miłecki <zajec5 at gmail.com> wrote:
>> On 10 March 2017 at 16:01, Tim Harvey <tharvey at gateworks.com> wrote:
>>> The MV88E6176 switch is present on the GW16083 and the GW5904
>>>
>>> As of a5c32a1f1996f4f75504c4a9abd1c99eaa598df1 these drivers are to be
>>> enabled static in per-target kernels.
>>
>> A standard kernel syntax may be preferred:
>> commit a5c32a1f1996 ("kernel: remove switch driver kmod packages")
> 
> I can update the commit log if the patch requires rework.
> 
> honestly, I'm not all that happy about 'commit a5c32a1f1996 ("kernel:
> remove switch driver kmod packages")' which removed selecting dsa
> kernel modules because of perceived bloat but instead this puts bloat
> into the static kernel of other imx6 boards that dont' have DSA. At
> least before the modules were selectable.
> 
>>
>> So does imx6 already work with DSA/switchdev driver? Can you configure
>> switch in /etc/config/network? I didn't track recent progress on this.
> 
> With DSA/switchdev the uplink CPU port must be up first, then the port
> interfaces can come up.
> 
> There are two hardware examples of this currently on IMX6 I know of:
> 
> 1. GW5904 (patch just posted) with IMX6 FEC (eth0) to switch and 4
> ports on front panel (lan1, lan2, lan3, lan4). So in this case eth0
> must be up first (with no IP config), then lan1-lan4 can be brought
> up. I'm not sure how to best handle this in /etc/config/network
> 
> 2. GW5xxx baseboard + GW16083 Ethernet expansion board (patches not
> posted to LEDE yet). The GW16083 expansion board has an i210 on the
> PCIe bus as the CPU uplink, 4 phy-less ports to RJ45's, and 2
> phy-ports to RJ45/SFP. Various GW5xxx boards a PCIe switch and an
> expansion connector providing PCI/I2C on a connector to support this.
> Depending on the baseboard the GW16083 is added to the cpu uplink port
> may be eth1, or eth2.

Ideally we should keep the same configuration syntax that we already
have, and replace swconfig calls with bridge + bridge vlan calls.

The key difference with DSA is going to be that there is no "switchX"
device that we are going to be referencing, instead, individual ports
will be there.

For instance, if you previously configured your switch with:

- Port 0 through 3, in VLAN 1, untagged
- Port 4 in VLAN 2, untagged
- CPU port in VLAN 1 tagged and VLAN 2 tagged

This will be something like:

brctl addbr br0
for port in $(seq 0 4)
do
	brctl addif br0 lan$port
	bridge vlan add vid 1 pvid untagged dev lan$port
done
bridge vlan add vid 2 pvid untagged dev lan4
vconfig br0 2

And that should do it.

NB: depending on whether the switch has Marvell/Broadcom/QCA tags
enabled or not, traffic is received/sent either through br* devices
(tagged), or eth* devices (non tagged), that's a bit inconsistent. The
way you could tell is by trying to add eth* to a bridge, when it's
tagged, it won't be allowed because the DSA hook in the network stack
conflicts with bridge packets reception. Or you can just know what is
configured by the DSA switch driver.
-- 
Florian



More information about the Lede-dev mailing list