The current MQPRIO offload implementation uses the legacy TSN Tx mode. In
this mode the hardware uses four packet buffers and considers queue
priorities.

In order to harmonize the TAPRIO implementation with MQPRIO, switch to the
regular TSN Tx mode. This mode also uses four packet buffers and considers
queue priorities. In addition to the legacy mode, transmission is always
coupled to Qbv. The driver already has mechanisms to use a dummy schedule
of 1 second with all gates open for ETF. Simply use this for MQPRIO too.

This reduces code and makes it easier to add support for frame preemption
later.

Tested on i225 with real time application using high priority queue, iperf3
using low priority queue and network TAP device.

Acked-by: Faizal Rahim <faizal.abdul.ra...@linux.intel.com>
Signed-off-by: Kurt Kanzenbach <k...@linutronix.de>
---
 drivers/net/ethernet/intel/igc/igc.h     |  4 +---
 drivers/net/ethernet/intel/igc/igc_tsn.c | 20 ++------------------
 2 files changed, 3 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc.h 
b/drivers/net/ethernet/intel/igc/igc.h
index 
cd1d7b6c1782352094f6867a31b6958c929bbbf4..16d85bdf55a7e9c412c47acf727bca6bc7154c61
 100644
--- a/drivers/net/ethernet/intel/igc/igc.h
+++ b/drivers/net/ethernet/intel/igc/igc.h
@@ -388,11 +388,9 @@ extern char igc_driver_name[];
 #define IGC_FLAG_RX_LEGACY             BIT(16)
 #define IGC_FLAG_TSN_QBV_ENABLED       BIT(17)
 #define IGC_FLAG_TSN_QAV_ENABLED       BIT(18)
-#define IGC_FLAG_TSN_LEGACY_ENABLED    BIT(19)
 
 #define IGC_FLAG_TSN_ANY_ENABLED                               \
-       (IGC_FLAG_TSN_QBV_ENABLED | IGC_FLAG_TSN_QAV_ENABLED |  \
-        IGC_FLAG_TSN_LEGACY_ENABLED)
+       (IGC_FLAG_TSN_QBV_ENABLED | IGC_FLAG_TSN_QAV_ENABLED)
 
 #define IGC_FLAG_RSS_FIELD_IPV4_UDP    BIT(6)
 #define IGC_FLAG_RSS_FIELD_IPV6_UDP    BIT(7)
diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c 
b/drivers/net/ethernet/intel/igc/igc_tsn.c
index 
67632356083708f82a099141a4b68ba10e06f952..7c28f3e7bb576f0e6a21c883e934ede4d53096f4
 100644
--- a/drivers/net/ethernet/intel/igc/igc_tsn.c
+++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
@@ -37,18 +37,13 @@ static unsigned int igc_tsn_new_flags(struct igc_adapter 
*adapter)
 {
        unsigned int new_flags = adapter->flags & ~IGC_FLAG_TSN_ANY_ENABLED;
 
-       if (adapter->taprio_offload_enable)
-               new_flags |= IGC_FLAG_TSN_QBV_ENABLED;
-
-       if (is_any_launchtime(adapter))
+       if (adapter->taprio_offload_enable || is_any_launchtime(adapter) ||
+           adapter->strict_priority_enable)
                new_flags |= IGC_FLAG_TSN_QBV_ENABLED;
 
        if (is_cbs_enabled(adapter))
                new_flags |= IGC_FLAG_TSN_QAV_ENABLED;
 
-       if (adapter->strict_priority_enable)
-               new_flags |= IGC_FLAG_TSN_LEGACY_ENABLED;
-
        return new_flags;
 }
 
@@ -163,7 +158,6 @@ static int igc_tsn_disable_offload(struct igc_adapter 
*adapter)
        igc_tsn_tx_arb(adapter, queue_per_tc);
 
        adapter->flags &= ~IGC_FLAG_TSN_QBV_ENABLED;
-       adapter->flags &= ~IGC_FLAG_TSN_LEGACY_ENABLED;
 
        return 0;
 }
@@ -207,16 +201,6 @@ static int igc_tsn_enable_offload(struct igc_adapter 
*adapter)
                 * mapping.
                 */
                igc_tsn_tx_arb(adapter, adapter->queue_per_tc);
-
-               /* Enable legacy TSN mode which will do strict priority without
-                * any other TSN features.
-                */
-               tqavctrl = rd32(IGC_TQAVCTRL);
-               tqavctrl |= IGC_TQAVCTRL_TRANSMIT_MODE_TSN;
-               tqavctrl &= ~IGC_TQAVCTRL_ENHANCED_QAV;
-               wr32(IGC_TQAVCTRL, tqavctrl);
-
-               return 0;
        }
 
        for (i = 0; i < adapter->num_tx_queues; i++) {

-- 
2.39.5

Reply via email to