diff options
author | Jacob Keller <jacob.e.keller@intel.com> | 2016-05-24 16:56:28 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2016-06-29 13:51:34 -0400 |
commit | 63737166a056fdcc83be46175ad4f63538279d7c (patch) | |
tree | c06c8be6daec311cc9161637bec87638cc5ab27f /drivers/net/ethernet/intel/igb | |
parent | 462f11888207934bbecd0f154f6cf0bedac5ecd0 (diff) |
igb: introduce IGB_PTP_OVERFLOW_CHECK flag
Don't continue to use complex MAC type checks for handling various cases
where we have overflow check code. Make this code more obvious by
introducing a flag which is enabled for hardware that needs these
checks.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/igb')
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb_ptp.c | 21 |
2 files changed, 9 insertions, 13 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h index 1e18a9eb16e0..38daaaba0cdb 100644 --- a/drivers/net/ethernet/intel/igb/igb.h +++ b/drivers/net/ethernet/intel/igb/igb.h | |||
@@ -477,6 +477,7 @@ struct igb_adapter { | |||
477 | 477 | ||
478 | /* flags controlling PTP/1588 function */ | 478 | /* flags controlling PTP/1588 function */ |
479 | #define IGB_PTP_ENABLED BIT(0) | 479 | #define IGB_PTP_ENABLED BIT(0) |
480 | #define IGB_PTP_OVERFLOW_CHECK BIT(1) | ||
480 | 481 | ||
481 | #define IGB_FLAG_HAS_MSI BIT(0) | 482 | #define IGB_FLAG_HAS_MSI BIT(0) |
482 | #define IGB_FLAG_DCA_ENABLED BIT(1) | 483 | #define IGB_FLAG_DCA_ENABLED BIT(1) |
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index 504102ba4bfb..88d367d5a78d 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c | |||
@@ -1067,6 +1067,7 @@ void igb_ptp_init(struct igb_adapter *adapter) | |||
1067 | adapter->cc.shift = IGB_82576_TSYNC_SHIFT; | 1067 | adapter->cc.shift = IGB_82576_TSYNC_SHIFT; |
1068 | /* Dial the nominal frequency. */ | 1068 | /* Dial the nominal frequency. */ |
1069 | wr32(E1000_TIMINCA, INCPERIOD_82576 | INCVALUE_82576); | 1069 | wr32(E1000_TIMINCA, INCPERIOD_82576 | INCVALUE_82576); |
1070 | adapter->ptp_flags |= IGB_PTP_OVERFLOW_CHECK; | ||
1070 | break; | 1071 | break; |
1071 | case e1000_82580: | 1072 | case e1000_82580: |
1072 | case e1000_i354: | 1073 | case e1000_i354: |
@@ -1087,6 +1088,7 @@ void igb_ptp_init(struct igb_adapter *adapter) | |||
1087 | adapter->cc.shift = 0; | 1088 | adapter->cc.shift = 0; |
1088 | /* Enable the timer functions by clearing bit 31. */ | 1089 | /* Enable the timer functions by clearing bit 31. */ |
1089 | wr32(E1000_TSAUXC, 0x0); | 1090 | wr32(E1000_TSAUXC, 0x0); |
1091 | adapter->ptp_flags |= IGB_PTP_OVERFLOW_CHECK; | ||
1090 | break; | 1092 | break; |
1091 | case e1000_i210: | 1093 | case e1000_i210: |
1092 | case e1000_i211: | 1094 | case e1000_i211: |
@@ -1132,7 +1134,9 @@ void igb_ptp_init(struct igb_adapter *adapter) | |||
1132 | } else { | 1134 | } else { |
1133 | timecounter_init(&adapter->tc, &adapter->cc, | 1135 | timecounter_init(&adapter->tc, &adapter->cc, |
1134 | ktime_to_ns(ktime_get_real())); | 1136 | ktime_to_ns(ktime_get_real())); |
1137 | } | ||
1135 | 1138 | ||
1139 | if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK) { | ||
1136 | INIT_DELAYED_WORK(&adapter->ptp_overflow_work, | 1140 | INIT_DELAYED_WORK(&adapter->ptp_overflow_work, |
1137 | igb_ptp_overflow_check); | 1141 | igb_ptp_overflow_check); |
1138 | 1142 | ||
@@ -1169,20 +1173,11 @@ void igb_ptp_init(struct igb_adapter *adapter) | |||
1169 | **/ | 1173 | **/ |
1170 | void igb_ptp_stop(struct igb_adapter *adapter) | 1174 | void igb_ptp_stop(struct igb_adapter *adapter) |
1171 | { | 1175 | { |
1172 | switch (adapter->hw.mac.type) { | 1176 | if (!(adapter->ptp_flags & IGB_PTP_ENABLED)) |
1173 | case e1000_82576: | ||
1174 | case e1000_82580: | ||
1175 | case e1000_i354: | ||
1176 | case e1000_i350: | ||
1177 | cancel_delayed_work_sync(&adapter->ptp_overflow_work); | ||
1178 | break; | ||
1179 | case e1000_i210: | ||
1180 | case e1000_i211: | ||
1181 | /* No delayed work to cancel. */ | ||
1182 | break; | ||
1183 | default: | ||
1184 | return; | 1177 | return; |
1185 | } | 1178 | |
1179 | if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK) | ||
1180 | cancel_delayed_work_sync(&adapter->ptp_overflow_work); | ||
1186 | 1181 | ||
1187 | cancel_work_sync(&adapter->ptp_tx_work); | 1182 | cancel_work_sync(&adapter->ptp_tx_work); |
1188 | if (adapter->ptp_tx_skb) { | 1183 | if (adapter->ptp_tx_skb) { |