net: dsa: felix: create a template for the DSA tags on xmit
With this patch we try to kill 2 birds with 1 stone. First of all, some switches that use tag_ocelot.c don't have the exact same bitfield layout for the DSA tags. The destination ports field is different for Seville VSC9953 for example. So the choices are to either duplicate tag_ocelot.c into a new tag_seville.c (sub-optimal) or somehow take into account a supposed ocelot->dest_ports_offset when packing this field into the DSA injection header (again not ideal). Secondly, tag_ocelot.c already needs to memset a 128-bit area to zero and call some packing() functions of dubious performance in the fastpath. And most of the values it needs to pack are pretty much constant (BYPASS=1, SRC_PORT=CPU, DEST=port index). So it would be good if we could improve that. The proposed solution is to allocate a memory area per port at probe time, initialize that with the statically defined bits as per chip hardware revision, and just perform a simpler memcpy in the fastpath. Other alternatives have been analyzed, such as: - Create a separate tag_seville.c: too much code duplication for just 1 bit field difference. - Create a separate DSA_TAG_PROTO_SEVILLE under tag_ocelot.c, just like tag_brcm.c, which would have a separate .xmit function. Again, too much code duplication for just 1 bit field difference. - Allocate the template from the init function of the tag_ocelot.c module, instead of from the driver: couldn't figure out a method of accessing the correct port template corresponding to the correct tagger in the .xmit function. Signed-off-by:Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by:
Florian Fainelli <f.fainelli@gmail.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- drivers/net/dsa/ocelot/felix.c 13 additions, 0 deletionsdrivers/net/dsa/ocelot/felix.c
- drivers/net/dsa/ocelot/felix.h 1 addition, 0 deletionsdrivers/net/dsa/ocelot/felix.h
- drivers/net/dsa/ocelot/felix_vsc9959.c 20 additions, 0 deletionsdrivers/net/dsa/ocelot/felix_vsc9959.c
- include/soc/mscc/ocelot.h 2 additions, 0 deletionsinclude/soc/mscc/ocelot.h
- net/dsa/tag_ocelot.c 8 additions, 13 deletionsnet/dsa/tag_ocelot.c
Loading
Please register or sign in to comment