This patch series adds support for mqprio rate limiters and multi-TC: * max_rate is supported on both A1 and A2; * min_rate is supported on A2 only;
This is a joint work of Mark and Dmitry. To implement this feature, a couple of rearrangements and code improvements were done, in areas of TC/ring management, allocation control, etc. One of the problems we faced is conflicting ptp functionality, which due to hardware limitations consumes whole traffic class. Patches below has more detailed description on how this coexist now. Dmitry Bezrukov (4): net: atlantic: changes for multi-TC support net: atlantic: move PTP TC initialization to a separate function net: atlantic: changes for multi-TC support net: atlantic: QoS implementation: multi-TC support Mark Starovoytov (8): net: atlantic: per-TC queue statistics net: atlantic: make TCVEC2RING accept nic_cfg net: atlantic: QoS implementation: max_rate net: atlantic: automatically downgrade the number of queues if necessary net: atlantic: always use random TC-queue mapping for TX on A2. net: atlantic: change the order of arguments for TC weight/credit setters net: atlantic: QoS implementation: min_rate net: atlantic: proper rss_ctrl1 (54c0) initialization .../net/ethernet/aquantia/atlantic/aq_cfg.h | 3 + .../ethernet/aquantia/atlantic/aq_ethtool.c | 74 +++-- .../ethernet/aquantia/atlantic/aq_filters.c | 11 +- .../net/ethernet/aquantia/atlantic/aq_hw.h | 20 +- .../ethernet/aquantia/atlantic/aq_hw_utils.c | 26 ++ .../ethernet/aquantia/atlantic/aq_hw_utils.h | 2 + .../net/ethernet/aquantia/atlantic/aq_main.c | 72 ++++- .../net/ethernet/aquantia/atlantic/aq_nic.c | 266 ++++++++++++---- .../net/ethernet/aquantia/atlantic/aq_nic.h | 27 +- .../ethernet/aquantia/atlantic/aq_pci_func.c | 3 + .../net/ethernet/aquantia/atlantic/aq_ptp.c | 27 +- .../net/ethernet/aquantia/atlantic/aq_ring.c | 19 +- .../net/ethernet/aquantia/atlantic/aq_vec.c | 72 +++-- .../net/ethernet/aquantia/atlantic/aq_vec.h | 8 +- .../aquantia/atlantic/hw_atl/hw_atl_a0.c | 10 +- .../aquantia/atlantic/hw_atl/hw_atl_b0.c | 255 ++++++++++----- .../aquantia/atlantic/hw_atl/hw_atl_b0.h | 2 + .../atlantic/hw_atl/hw_atl_b0_internal.h | 6 +- .../aquantia/atlantic/hw_atl/hw_atl_llh.c | 65 +++- .../aquantia/atlantic/hw_atl/hw_atl_llh.h | 32 +- .../atlantic/hw_atl/hw_atl_llh_internal.h | 101 +++++- .../aquantia/atlantic/hw_atl2/hw_atl2.c | 301 +++++++++++++----- .../atlantic/hw_atl2/hw_atl2_internal.h | 12 +- .../aquantia/atlantic/hw_atl2/hw_atl2_llh.c | 36 ++- .../aquantia/atlantic/hw_atl2/hw_atl2_llh.h | 19 +- .../atlantic/hw_atl2/hw_atl2_llh_internal.h | 111 +++++-- 26 files changed, 1200 insertions(+), 380 deletions(-) -- 2.25.1