diff mbox series

[net-next,v1,3/3] igc: Remove reset adapter task for i226 during disable tsn config

Message ID 20221212023706.13384-4-muhammad.husaini.zulkifli@intel.com
State Superseded
Headers show
Series igc: Qbv Feature Improvement for I226 | expand

Commit Message

Zulkifli, Muhammad Husaini Dec. 12, 2022, 2:37 a.m. UTC
I225 have limitation when programming the BaseTime register which required
a power cycle of the controller. This limitation already lifted in I226.
This patch removes the restriction so that when user configure/remove any
TSN mode, it would not go into power cycle reset adapter.

How to test:

Schedule any gate control list configuration or delete it.

Example:

1)

BASE_TIME=$(date +%s%N)
tc qdisc replace dev $interface_name parent root handle 100 taprio \
    num_tc 4 \
    map 3 1 0 2 3 3 3 3 3 3 3 3 3 3 3 3 \
    queues 1@0 1@1 1@2 1@3 \
    base-time $BASE_TIME \
    sched-entry S 0F 1000000 \
    flags 0x2

2) tc qdisc del dev $intername_name root

Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_main.c |  6 +++---
 drivers/net/ethernet/intel/igc/igc_tsn.c  | 11 +++--------
 drivers/net/ethernet/intel/igc/igc_tsn.h  |  2 +-
 3 files changed, 7 insertions(+), 12 deletions(-)

Comments

Tony Nguyen Dec. 13, 2022, 10:37 p.m. UTC | #1
On 12/11/2022 6:37 PM, Muhammad Husaini Zulkifli wrote:
> I225 have limitation when programming the BaseTime register which required
> a power cycle of the controller. This limitation already lifted in I226.
> This patch removes the restriction so that when user configure/remove any
> TSN mode, it would not go into power cycle reset adapter.

This patch is mostly undoing changes made in patch 2. Is there a reason 
you don't squash the two and mention the net change in the previous patch?

> How to test:
> 
> Schedule any gate control list configuration or delete it.
> 
> Example:
> 
> 1)
> 
> BASE_TIME=$(date +%s%N)
> tc qdisc replace dev $interface_name parent root handle 100 taprio \
>      num_tc 4 \
>      map 3 1 0 2 3 3 3 3 3 3 3 3 3 3 3 3 \
>      queues 1@0 1@1 1@2 1@3 \
>      base-time $BASE_TIME \
>      sched-entry S 0F 1000000 \
>      flags 0x2
> 
> 2) tc qdisc del dev $intername_name root
> 
> Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
> ---
>   drivers/net/ethernet/intel/igc/igc_main.c |  6 +++---
>   drivers/net/ethernet/intel/igc/igc_tsn.c  | 11 +++--------
>   drivers/net/ethernet/intel/igc/igc_tsn.h  |  2 +-
>   3 files changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
> index bf66395a59bb..fdb7f0b26ed0 100644
> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> @@ -6003,7 +6003,7 @@ static int igc_tsn_enable_launchtime(struct igc_adapter *adapter,
>   	if (err)
>   		return err;
>   
> -	return igc_tsn_offload_apply(adapter, qopt->enable);
> +	return igc_tsn_offload_apply(adapter);
>   }
>   
>   static int igc_tsn_clear_schedule(struct igc_adapter *adapter)
> @@ -6117,7 +6117,7 @@ static int igc_tsn_enable_qbv_scheduling(struct igc_adapter *adapter,
>   	if (err)
>   		return err;
>   
> -	return igc_tsn_offload_apply(adapter, qopt->enable);
> +	return igc_tsn_offload_apply(adapter);
>   }
>   
>   static int igc_save_cbs_params(struct igc_adapter *adapter, int queue,
> @@ -6185,7 +6185,7 @@ static int igc_tsn_enable_cbs(struct igc_adapter *adapter,
>   	if (err)
>   		return err;
>   
> -	return igc_tsn_offload_apply(adapter, qopt->enable);
> +	return igc_tsn_offload_apply(adapter);
>   }
>   
>   static int igc_setup_tc(struct net_device *dev, enum tc_setup_type type,
> diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c b/drivers/net/ethernet/intel/igc/igc_tsn.c
> index c2cc5d406213..b03c6168bd23 100644
> --- a/drivers/net/ethernet/intel/igc/igc_tsn.c
> +++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
> @@ -289,21 +289,16 @@ int igc_tsn_reset(struct igc_adapter *adapter)
>   	return err;
>   }
>   
> -int igc_tsn_offload_apply(struct igc_adapter *adapter, bool enable)
> +int igc_tsn_offload_apply(struct igc_adapter *adapter)
>   {
>   	struct igc_hw *hw = &adapter->hw;
> -	int err;
>   
> -	if (netif_running(adapter->netdev) &&
> -	    (igc_is_device_id_i225(hw) || !enable)) {
> +	if (netif_running(adapter->netdev) && igc_is_device_id_i225(hw)) {
>   		schedule_work(&adapter->reset_task);
>   		return 0;
>   	}
>   
> -	err = igc_tsn_enable_offload(adapter);
> -	if (err < 0)
> -		return err;
> +	igc_tsn_reset(adapter);
>   
> -	adapter->flags = igc_tsn_new_flags(adapter);
>   	return 0;
>   }
> diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.h b/drivers/net/ethernet/intel/igc/igc_tsn.h
> index 631222bb6eb5..b53e6af560b7 100644
> --- a/drivers/net/ethernet/intel/igc/igc_tsn.h
> +++ b/drivers/net/ethernet/intel/igc/igc_tsn.h
> @@ -4,7 +4,7 @@
>   #ifndef _IGC_TSN_H_
>   #define _IGC_TSN_H_
>   
> -int igc_tsn_offload_apply(struct igc_adapter *adapter, bool enable);
> +int igc_tsn_offload_apply(struct igc_adapter *adapter);
>   int igc_tsn_reset(struct igc_adapter *adapter);
>   void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter);
>
Zulkifli, Muhammad Husaini Dec. 13, 2022, 10:56 p.m. UTC | #2
> -----Original Message-----
> From: Nguyen, Anthony L <anthony.l.nguyen@intel.com>
> Sent: Wednesday, 14 December, 2022 6:37 AM
> To: Zulkifli, Muhammad Husaini <muhammad.husaini.zulkifli@intel.com>;
> intel-wired-lan@osuosl.org; Gomes, Vinicius <vinicius.gomes@intel.com>
> Cc: tee.min.tan@linux.intel.com; naamax.meir@linux.intel.com
> Subject: Re: [PATCH net-next v1 3/3] igc: Remove reset adapter task for i226
> during disable tsn config
> 
> 
> 
> On 12/11/2022 6:37 PM, Muhammad Husaini Zulkifli wrote:
> > I225 have limitation when programming the BaseTime register which
> > required a power cycle of the controller. This limitation already lifted in
> I226.
> > This patch removes the restriction so that when user configure/remove
> > any TSN mode, it would not go into power cycle reset adapter.
> 
> This patch is mostly undoing changes made in patch 2. Is there a reason you
> don't squash the two and mention the net change in the previous patch?

Tee Min and I have discussed this topic, and we've thought about separating this 
fix if we ever encounter a situation where removing the tsn configuration requires
 a power cycle. In that case, we can just remove this patch.

> 
> > How to test:
> >
> > Schedule any gate control list configuration or delete it.
> >
> > Example:
> >
> > 1)
> >
> > BASE_TIME=$(date +%s%N)
> > tc qdisc replace dev $interface_name parent root handle 100 taprio \
> >      num_tc 4 \
> >      map 3 1 0 2 3 3 3 3 3 3 3 3 3 3 3 3 \
> >      queues 1@0 1@1 1@2 1@3 \
> >      base-time $BASE_TIME \
> >      sched-entry S 0F 1000000 \
> >      flags 0x2
> >
> > 2) tc qdisc del dev $intername_name root
> >
> > Signed-off-by: Muhammad Husaini Zulkifli
> > <muhammad.husaini.zulkifli@intel.com>
> > ---
> >   drivers/net/ethernet/intel/igc/igc_main.c |  6 +++---
> >   drivers/net/ethernet/intel/igc/igc_tsn.c  | 11 +++--------
> >   drivers/net/ethernet/intel/igc/igc_tsn.h  |  2 +-
> >   3 files changed, 7 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/intel/igc/igc_main.c
> > b/drivers/net/ethernet/intel/igc/igc_main.c
> > index bf66395a59bb..fdb7f0b26ed0 100644
> > --- a/drivers/net/ethernet/intel/igc/igc_main.c
> > +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> > @@ -6003,7 +6003,7 @@ static int igc_tsn_enable_launchtime(struct
> igc_adapter *adapter,
> >   	if (err)
> >   		return err;
> >
> > -	return igc_tsn_offload_apply(adapter, qopt->enable);
> > +	return igc_tsn_offload_apply(adapter);
> >   }
> >
> >   static int igc_tsn_clear_schedule(struct igc_adapter *adapter) @@
> > -6117,7 +6117,7 @@ static int igc_tsn_enable_qbv_scheduling(struct
> igc_adapter *adapter,
> >   	if (err)
> >   		return err;
> >
> > -	return igc_tsn_offload_apply(adapter, qopt->enable);
> > +	return igc_tsn_offload_apply(adapter);
> >   }
> >
> >   static int igc_save_cbs_params(struct igc_adapter *adapter, int
> > queue, @@ -6185,7 +6185,7 @@ static int igc_tsn_enable_cbs(struct
> igc_adapter *adapter,
> >   	if (err)
> >   		return err;
> >
> > -	return igc_tsn_offload_apply(adapter, qopt->enable);
> > +	return igc_tsn_offload_apply(adapter);
> >   }
> >
> >   static int igc_setup_tc(struct net_device *dev, enum tc_setup_type
> > type, diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c
> > b/drivers/net/ethernet/intel/igc/igc_tsn.c
> > index c2cc5d406213..b03c6168bd23 100644
> > --- a/drivers/net/ethernet/intel/igc/igc_tsn.c
> > +++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
> > @@ -289,21 +289,16 @@ int igc_tsn_reset(struct igc_adapter *adapter)
> >   	return err;
> >   }
> >
> > -int igc_tsn_offload_apply(struct igc_adapter *adapter, bool enable)
> > +int igc_tsn_offload_apply(struct igc_adapter *adapter)
> >   {
> >   	struct igc_hw *hw = &adapter->hw;
> > -	int err;
> >
> > -	if (netif_running(adapter->netdev) &&
> > -	    (igc_is_device_id_i225(hw) || !enable)) {
> > +	if (netif_running(adapter->netdev) && igc_is_device_id_i225(hw)) {
> >   		schedule_work(&adapter->reset_task);
> >   		return 0;
> >   	}
> >
> > -	err = igc_tsn_enable_offload(adapter);
> > -	if (err < 0)
> > -		return err;
> > +	igc_tsn_reset(adapter);
> >
> > -	adapter->flags = igc_tsn_new_flags(adapter);
> >   	return 0;
> >   }
> > diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.h
> > b/drivers/net/ethernet/intel/igc/igc_tsn.h
> > index 631222bb6eb5..b53e6af560b7 100644
> > --- a/drivers/net/ethernet/intel/igc/igc_tsn.h
> > +++ b/drivers/net/ethernet/intel/igc/igc_tsn.h
> > @@ -4,7 +4,7 @@
> >   #ifndef _IGC_TSN_H_
> >   #define _IGC_TSN_H_
> >
> > -int igc_tsn_offload_apply(struct igc_adapter *adapter, bool enable);
> > +int igc_tsn_offload_apply(struct igc_adapter *adapter);
> >   int igc_tsn_reset(struct igc_adapter *adapter);
> >   void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter);
> >
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index bf66395a59bb..fdb7f0b26ed0 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -6003,7 +6003,7 @@  static int igc_tsn_enable_launchtime(struct igc_adapter *adapter,
 	if (err)
 		return err;
 
-	return igc_tsn_offload_apply(adapter, qopt->enable);
+	return igc_tsn_offload_apply(adapter);
 }
 
 static int igc_tsn_clear_schedule(struct igc_adapter *adapter)
@@ -6117,7 +6117,7 @@  static int igc_tsn_enable_qbv_scheduling(struct igc_adapter *adapter,
 	if (err)
 		return err;
 
-	return igc_tsn_offload_apply(adapter, qopt->enable);
+	return igc_tsn_offload_apply(adapter);
 }
 
 static int igc_save_cbs_params(struct igc_adapter *adapter, int queue,
@@ -6185,7 +6185,7 @@  static int igc_tsn_enable_cbs(struct igc_adapter *adapter,
 	if (err)
 		return err;
 
-	return igc_tsn_offload_apply(adapter, qopt->enable);
+	return igc_tsn_offload_apply(adapter);
 }
 
 static int igc_setup_tc(struct net_device *dev, enum tc_setup_type type,
diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c b/drivers/net/ethernet/intel/igc/igc_tsn.c
index c2cc5d406213..b03c6168bd23 100644
--- a/drivers/net/ethernet/intel/igc/igc_tsn.c
+++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
@@ -289,21 +289,16 @@  int igc_tsn_reset(struct igc_adapter *adapter)
 	return err;
 }
 
-int igc_tsn_offload_apply(struct igc_adapter *adapter, bool enable)
+int igc_tsn_offload_apply(struct igc_adapter *adapter)
 {
 	struct igc_hw *hw = &adapter->hw;
-	int err;
 
-	if (netif_running(adapter->netdev) &&
-	    (igc_is_device_id_i225(hw) || !enable)) {
+	if (netif_running(adapter->netdev) && igc_is_device_id_i225(hw)) {
 		schedule_work(&adapter->reset_task);
 		return 0;
 	}
 
-	err = igc_tsn_enable_offload(adapter);
-	if (err < 0)
-		return err;
+	igc_tsn_reset(adapter);
 
-	adapter->flags = igc_tsn_new_flags(adapter);
 	return 0;
 }
diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.h b/drivers/net/ethernet/intel/igc/igc_tsn.h
index 631222bb6eb5..b53e6af560b7 100644
--- a/drivers/net/ethernet/intel/igc/igc_tsn.h
+++ b/drivers/net/ethernet/intel/igc/igc_tsn.h
@@ -4,7 +4,7 @@ 
 #ifndef _IGC_TSN_H_
 #define _IGC_TSN_H_
 
-int igc_tsn_offload_apply(struct igc_adapter *adapter, bool enable);
+int igc_tsn_offload_apply(struct igc_adapter *adapter);
 int igc_tsn_reset(struct igc_adapter *adapter);
 void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter);