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 consumes a whole traffic class due to hardware limitations. Patches below have a more detailed description on how PTP and multi-TC co-exist right now. v2: * accommodated review comments (-Wmissing-prototypes and -Wunused-but-set-variable findings); * added user notification in case of conflicting multi-TC<->PTP configuration; * added automatic PTP disabling, if a conflicting configuration is detected; * removed module param, which was used for PTP disabling in v1; v1: https://patchwork.ozlabs.org/cover/1294380/ 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 .../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 + .../ethernet/aquantia/atlantic/aq_macsec.c | 2 +- .../net/ethernet/aquantia/atlantic/aq_main.c | 72 ++++- .../net/ethernet/aquantia/atlantic/aq_nic.c | 265 +++++++++++---- .../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, 1197 insertions(+), 381 deletions(-) -- 2.25.1