Message ID | 20221212023706.13384-4-muhammad.husaini.zulkifli@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | igc: Qbv Feature Improvement for I226 | expand |
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); >
> -----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 --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);
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(-)