提交 ac28b41a 编写于 作者: J Jacob Keller 提交者: Jeff Kirsher

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: NJacob Keller <jacob.e.keller@intel.com>
Tested-by: NAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
上级 0742337c
...@@ -489,6 +489,7 @@ struct igb_adapter { ...@@ -489,6 +489,7 @@ struct igb_adapter {
struct timecounter tc; struct timecounter tc;
u32 tx_hwtstamp_timeouts; u32 tx_hwtstamp_timeouts;
u32 rx_hwtstamp_cleared; u32 rx_hwtstamp_cleared;
bool pps_sys_wrap_on;
struct ptp_pin_desc sdp_config[IGB_N_SDP]; struct ptp_pin_desc sdp_config[IGB_N_SDP];
struct { struct {
......
...@@ -591,6 +591,7 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp, ...@@ -591,6 +591,7 @@ static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp,
tsim |= TSINTR_SYS_WRAP; tsim |= TSINTR_SYS_WRAP;
else else
tsim &= ~TSINTR_SYS_WRAP; tsim &= ~TSINTR_SYS_WRAP;
igb->pps_sys_wrap_on = !!on;
wr32(E1000_TSIM, tsim); wr32(E1000_TSIM, tsim);
spin_unlock_irqrestore(&igb->tmreg_lock, flags); spin_unlock_irqrestore(&igb->tmreg_lock, flags);
return 0; return 0;
...@@ -1235,7 +1236,9 @@ void igb_ptp_reset(struct igb_adapter *adapter) ...@@ -1235,7 +1236,9 @@ void igb_ptp_reset(struct igb_adapter *adapter)
case e1000_i211: case e1000_i211:
wr32(E1000_TSAUXC, 0x0); wr32(E1000_TSAUXC, 0x0);
wr32(E1000_TSSDP, 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); wr32(E1000_IMS, E1000_IMS_TS);
break; break;
default: default:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册