aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Keller <jacob.e.keller@intel.com>2016-09-09 12:10:51 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2016-09-27 22:00:52 -0400
commitac28b41aac35e1000712aaa3aee19bf30fd9a312 (patch)
treeb2cbfb10e945b8f88a7276aca18b66cde15476f8
parent0742337c1984c7cdbac9465cdda004cbdc69d41c (diff)
igb: restore PPS signal on igb_ptp_reset
When a reset occurs, the PPS SYS_WRAP interrupt was not re-enabled which resulted in disabling of the PPS signaling. Fix this by recording when the interrupt is on and ensuring that we re-enable it every time we reset. 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>
-rw-r--r--drivers/net/ethernet/intel/igb/igb.h1
-rw-r--r--drivers/net/ethernet/intel/igb/igb_ptp.c5
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 03fbe4b7663b..d11093dce1b9 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -489,6 +489,7 @@ struct igb_adapter {
489 struct timecounter tc; 489 struct timecounter tc;
490 u32 tx_hwtstamp_timeouts; 490 u32 tx_hwtstamp_timeouts;
491 u32 rx_hwtstamp_cleared; 491 u32 rx_hwtstamp_cleared;
492 bool pps_sys_wrap_on;
492 493
493 struct ptp_pin_desc sdp_config[IGB_N_SDP]; 494 struct ptp_pin_desc sdp_config[IGB_N_SDP];
494 struct { 495 struct {
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c
index 1dd14e166dc8..a7895c4cbcc3 100644
--- a/drivers/net/ethernet/intel/igb/igb_ptp.c
+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
@@ -591,6 +591,7 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp,
591 tsim |= TSINTR_SYS_WRAP; 591 tsim |= TSINTR_SYS_WRAP;
592 else 592 else
593 tsim &= ~TSINTR_SYS_WRAP; 593 tsim &= ~TSINTR_SYS_WRAP;
594 igb->pps_sys_wrap_on = !!on;
594 wr32(E1000_TSIM, tsim); 595 wr32(E1000_TSIM, tsim);
595 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 596 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
596 return 0; 597 return 0;
@@ -1235,7 +1236,9 @@ void igb_ptp_reset(struct igb_adapter *adapter)
1235 case e1000_i211: 1236 case e1000_i211:
1236 wr32(E1000_TSAUXC, 0x0); 1237 wr32(E1000_TSAUXC, 0x0);
1237 wr32(E1000_TSSDP, 0x0); 1238 wr32(E1000_TSSDP, 0x0);
1238 wr32(E1000_TSIM, TSYNC_INTERRUPTS); 1239 wr32(E1000_TSIM,
1240 TSYNC_INTERRUPTS |
1241 (adapter->pps_sys_wrap_on ? TSINTR_SYS_WRAP : 0));
1239 wr32(E1000_IMS, E1000_IMS_TS); 1242 wr32(E1000_IMS, E1000_IMS_TS);
1240 break; 1243 break;
1241 default: 1244 default: