mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
0742337c19
commit
ac28b41aac
|
@ -489,6 +489,7 @@ struct igb_adapter {
|
|||
struct timecounter tc;
|
||||
u32 tx_hwtstamp_timeouts;
|
||||
u32 rx_hwtstamp_cleared;
|
||||
bool pps_sys_wrap_on;
|
||||
|
||||
struct ptp_pin_desc sdp_config[IGB_N_SDP];
|
||||
struct {
|
||||
|
|
|
@ -591,6 +591,7 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp,
|
|||
tsim |= TSINTR_SYS_WRAP;
|
||||
else
|
||||
tsim &= ~TSINTR_SYS_WRAP;
|
||||
igb->pps_sys_wrap_on = !!on;
|
||||
wr32(E1000_TSIM, tsim);
|
||||
spin_unlock_irqrestore(&igb->tmreg_lock, flags);
|
||||
return 0;
|
||||
|
@ -1235,7 +1236,9 @@ void igb_ptp_reset(struct igb_adapter *adapter)
|
|||
case e1000_i211:
|
||||
wr32(E1000_TSAUXC, 0x0);
|
||||
wr32(E1000_TSSDP, 0x0);
|
||||
wr32(E1000_TSIM, TSYNC_INTERRUPTS);
|
||||
wr32(E1000_TSIM,
|
||||
TSYNC_INTERRUPTS |
|
||||
(adapter->pps_sys_wrap_on ? TSINTR_SYS_WRAP : 0));
|
||||
wr32(E1000_IMS, E1000_IMS_TS);
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue