The purpose of this patch is to add more comprehensive support for flow offloading in the mscc_ocelot library and switch drivers.
The design (with chains) is the result of this discussion: https://lkml.org/lkml/2020/6/2/203 Still posting as RFC because there might still be some bugs and missing checks, and I would not like this to get merged before hearing some feedback. I have tested it on Seville VSC9953 and Felix VSC9959, but it should also work on Ocelot-1 VSC7514. Vladimir Oltean (17): net: mscc: ocelot: introduce a new ocelot_target_{read,write} API net: mscc: ocelot: generalize existing code for VCAP net: mscc: ocelot: auto-detect packet buffer size and number of frame references net: mscc: ocelot: automatically detect VCAP IS2 constants net: mscc: ocelot: add definitions for VCAP IS1 keys, actions and target net: mscc: ocelot: add definitions for VCAP ES0 keys, actions and target net: mscc: ocelot: auto-detect VCAP ES0 and IS1 parameters net: mscc: ocelot: parse flower action before key net: mscc: ocelot: offload multiple tc-flower actions in same rule net: mscc: ocelot: add a new ocelot_vcap_block_find_filter_by_id function net: mscc: ocelot: look up the filters in flower_stats() and flower_destroy() net: mscc: ocelot: introduce conversion helpers between port and netdev net: mscc: ocelot: create TCAM skeleton from tc filter chains net: mscc: ocelot: only install TCAM entries into a specific lookup and PAG net: mscc: ocelot: relax ocelot_exclusive_mac_etype_filter_rules() net: mscc: ocelot: offload redirect action to VCAP IS2 selftests: ocelot: add some example VCAP IS1, IS2 and ES0 tc offloads Xiaoliang Yang (4): net: mscc: ocelot: return error if VCAP filter is not found net: mscc: ocelot: change vcap to be compatible with full and quad entry net: mscc: ocelot: offload ingress skbedit and vlan actions to VCAP IS1 net: mscc: ocelot: offload egress VLAN rewriting to VCAP ES0 MAINTAINERS | 1 + arch/mips/boot/dts/mscc/ocelot.dtsi | 4 +- drivers/net/dsa/ocelot/felix.c | 25 +- drivers/net/dsa/ocelot/felix.h | 8 +- drivers/net/dsa/ocelot/felix_vsc9959.c | 196 ++++- drivers/net/dsa/ocelot/seville_vsc9953.c | 196 ++++- drivers/net/ethernet/mscc/ocelot.c | 103 ++- drivers/net/ethernet/mscc/ocelot.h | 2 + drivers/net/ethernet/mscc/ocelot_flower.c | 559 +++++++++++++- drivers/net/ethernet/mscc/ocelot_io.c | 17 + drivers/net/ethernet/mscc/ocelot_net.c | 30 + drivers/net/ethernet/mscc/ocelot_s2.h | 64 -- drivers/net/ethernet/mscc/ocelot_vcap.c | 713 ++++++++++++------ drivers/net/ethernet/mscc/ocelot_vcap.h | 98 ++- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 187 ++++- include/soc/mscc/ocelot.h | 59 +- include/soc/mscc/ocelot_qsys.h | 3 + include/soc/mscc/ocelot_vcap.h | 200 ++++- .../drivers/net/ocelot/test_tc_chains.sh | 179 +++++ 19 files changed, 2193 insertions(+), 451 deletions(-) delete mode 100644 drivers/net/ethernet/mscc/ocelot_s2.h create mode 100755 tools/testing/selftests/drivers/net/ocelot/test_tc_chains.sh -- 2.25.1