On 21/06/2024 10:25, Kurt Kanzenbach wrote:
Add support for offloading MQPRIO. The hardware has four priorities as well
as four queues. Each queue must be a assigned with a unique priority.

However, the priorities are only considered in TSN Tx mode. There are two
TSN Tx modes. In case of MQPRIO the Qbv capability is not required.
Therefore, use the legacy TSN Tx mode, which performs strict priority
arbitration.

Example for mqprio with hardware offload:

|tc qdisc replace dev ${INTERFACE} handle 100 parent root mqprio num_tc 4 \
|   map 0 0 0 0 0 1 2 3 0 0 0 0 0 0 0 0 \
|   queues 1@0 1@1 1@2 1@3 \
|   hw 1

The mqprio Qdisc also allows to configure the `preemptible_tcs'. However,
frame preemption is not supported yet.

Tested on Intel i225 and implemented by following data sheet section 7.5.2,
Transmit Scheduling.

Signed-off-by: Kurt Kanzenbach <[email protected]>
Reviewed-by: Wojciech Drewek <[email protected]>
Acked-by: Vinicius Costa Gomes <[email protected]>
Reviewed-by: Simon Horman <[email protected]>
---
Changes in v3:
- Use FIELD_PREP for Tx ARB (Simon)
- Add helper for Tx ARB configuration (Simon)
- Limit ethtool_set_channels when mqprio is enabled (Jian)
- Link to v2: 
https://lore.kernel.org/r/[email protected]

Changes in v2:
- Improve changelog (Paul Menzel)
- Link to v1: 
https://lore.kernel.org/r/[email protected]
---
  drivers/net/ethernet/intel/igc/igc.h         | 10 +++-
  drivers/net/ethernet/intel/igc/igc_defines.h | 11 +++++
  drivers/net/ethernet/intel/igc/igc_ethtool.c |  4 ++
  drivers/net/ethernet/intel/igc/igc_main.c    | 69 +++++++++++++++++++++++++++
  drivers/net/ethernet/intel/igc/igc_regs.h    |  2 +
  drivers/net/ethernet/intel/igc/igc_tsn.c     | 70 +++++++++++++++++++++++++++-
  6 files changed, 163 insertions(+), 3 deletions(-)

Tested-by: Mor Bar-Gabay <[email protected]>

Reply via email to