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

ixgbe: separate the PTP suspend and stop actions

Since we are adding proper support for suspend of PTP, extract out of
ixgbe_ptp_stop those things relevant to suspend. Then, have
ixgbe_ptp_stop call ixgbe_ptp_suspend. The next patch in the series will
have ixgbe_ptp_suspend called from the ixgbe_suspend path.
Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
Tested-by: NPhil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
上级 63328ada
...@@ -957,6 +957,7 @@ static inline struct netdev_queue *txring_txq(const struct ixgbe_ring *ring) ...@@ -957,6 +957,7 @@ static inline struct netdev_queue *txring_txq(const struct ixgbe_ring *ring)
} }
void ixgbe_ptp_init(struct ixgbe_adapter *adapter); void ixgbe_ptp_init(struct ixgbe_adapter *adapter);
void ixgbe_ptp_suspend(struct ixgbe_adapter *adapter);
void ixgbe_ptp_stop(struct ixgbe_adapter *adapter); void ixgbe_ptp_stop(struct ixgbe_adapter *adapter);
void ixgbe_ptp_overflow_check(struct ixgbe_adapter *adapter); void ixgbe_ptp_overflow_check(struct ixgbe_adapter *adapter);
void ixgbe_ptp_rx_hang(struct ixgbe_adapter *adapter); void ixgbe_ptp_rx_hang(struct ixgbe_adapter *adapter);
......
...@@ -960,28 +960,45 @@ void ixgbe_ptp_init(struct ixgbe_adapter *adapter) ...@@ -960,28 +960,45 @@ void ixgbe_ptp_init(struct ixgbe_adapter *adapter)
} }
/** /**
* ixgbe_ptp_stop - disable ptp device and stop the overflow check * ixgbe_ptp_suspend - stop PTP work items
* @adapter: pointer to adapter struct * @ adapter: pointer to adapter struct
* *
* this function stops the ptp support, and cancels the delayed work. * this function suspends PTP activity, and prevents more PTP work from being
* generated, but does not destroy the PTP clock device.
*/ */
void ixgbe_ptp_stop(struct ixgbe_adapter *adapter) void ixgbe_ptp_suspend(struct ixgbe_adapter *adapter)
{ {
/* Leave the IXGBE_PTP_RUNNING state. */ /* Leave the IXGBE_PTP_RUNNING state. */
if (!test_and_clear_bit(__IXGBE_PTP_RUNNING, &adapter->state)) if (!test_and_clear_bit(__IXGBE_PTP_RUNNING, &adapter->state))
return; return;
/* stop the PPS signal */ /* since this might be called in suspend, we don't clear the state,
adapter->flags2 &= ~IXGBE_FLAG2_PTP_PPS_ENABLED; * but simply reset the auxiliary PPS signal control register
ixgbe_ptp_setup_sdp(adapter); */
IXGBE_WRITE_REG(&adapter->hw, IXGBE_TSAUXC, 0x0);
/* ensure that we cancel any pending PTP Tx work item in progress */
cancel_work_sync(&adapter->ptp_tx_work); cancel_work_sync(&adapter->ptp_tx_work);
if (adapter->ptp_tx_skb) { if (adapter->ptp_tx_skb) {
dev_kfree_skb_any(adapter->ptp_tx_skb); dev_kfree_skb_any(adapter->ptp_tx_skb);
adapter->ptp_tx_skb = NULL; adapter->ptp_tx_skb = NULL;
clear_bit_unlock(__IXGBE_PTP_TX_IN_PROGRESS, &adapter->state); clear_bit_unlock(__IXGBE_PTP_TX_IN_PROGRESS, &adapter->state);
} }
}
/**
* ixgbe_ptp_stop - close the PTP device
* @adapter: pointer to adapter struct
*
* completely destroy the PTP device, should only be called when the device is
* being fully closed.
*/
void ixgbe_ptp_stop(struct ixgbe_adapter *adapter)
{
/* first, suspend PTP activity */
ixgbe_ptp_suspend(adapter);
/* disable the PTP clock device */
if (adapter->ptp_clock) { if (adapter->ptp_clock) {
ptp_clock_unregister(adapter->ptp_clock); ptp_clock_unregister(adapter->ptp_clock);
adapter->ptp_clock = NULL; adapter->ptp_clock = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册