Lines Matching +full:ns +full:- +full:config
1 // SPDX-License-Identifier: GPL-2.0
27 struct igc_hw *hw = &adapter->hw; in igc_ptp_read()
34 ts->tv_sec = sec; in igc_ptp_read()
35 ts->tv_nsec = nsec; in igc_ptp_read()
41 struct igc_hw *hw = &adapter->hw; in igc_ptp_write_i225()
43 wr32(IGC_SYSTIML, ts->tv_nsec); in igc_ptp_write_i225()
44 wr32(IGC_SYSTIMH, ts->tv_sec); in igc_ptp_write_i225()
51 struct igc_hw *hw = &igc->hw; in igc_ptp_adjfine_i225()
58 scaled_ppm = -scaled_ppm; in igc_ptp_adjfine_i225()
80 spin_lock_irqsave(&igc->tmreg_lock, flags); in igc_ptp_adjtime_i225()
86 spin_unlock_irqrestore(&igc->tmreg_lock, flags); in igc_ptp_adjtime_i225()
97 struct igc_hw *hw = &igc->hw; in igc_ptp_gettimex64_i225()
100 spin_lock_irqsave(&igc->tmreg_lock, flags); in igc_ptp_gettimex64_i225()
103 ts->tv_nsec = rd32(IGC_SYSTIML); in igc_ptp_gettimex64_i225()
104 ts->tv_sec = rd32(IGC_SYSTIMH); in igc_ptp_gettimex64_i225()
107 spin_unlock_irqrestore(&igc->tmreg_lock, flags); in igc_ptp_gettimex64_i225()
119 spin_lock_irqsave(&igc->tmreg_lock, flags); in igc_ptp_settime_i225()
123 spin_unlock_irqrestore(&igc->tmreg_lock, flags); in igc_ptp_settime_i225()
175 struct igc_hw *hw = &igc->hw; in igc_pin_perout()
221 struct igc_hw *hw = &igc->hw; in igc_pin_extts()
251 struct igc_hw *hw = &igc->hw; in igc_ptp_feature_enable_i225()
254 int use_freq = 0, pin = -1; in igc_ptp_feature_enable_i225()
256 s64 ns; in igc_ptp_feature_enable_i225() local
258 switch (rq->type) { in igc_ptp_feature_enable_i225()
261 if ((rq->extts.flags & PTP_STRICT_FLAGS) && in igc_ptp_feature_enable_i225()
262 (rq->extts.flags & PTP_ENABLE_FEATURE) && in igc_ptp_feature_enable_i225()
263 (rq->extts.flags & PTP_EXTTS_EDGES) != PTP_EXTTS_EDGES) in igc_ptp_feature_enable_i225()
264 return -EOPNOTSUPP; in igc_ptp_feature_enable_i225()
267 pin = ptp_find_pin(igc->ptp_clock, PTP_PF_EXTTS, in igc_ptp_feature_enable_i225()
268 rq->extts.index); in igc_ptp_feature_enable_i225()
270 return -EBUSY; in igc_ptp_feature_enable_i225()
272 if (rq->extts.index == 1) { in igc_ptp_feature_enable_i225()
279 spin_lock_irqsave(&igc->tmreg_lock, flags); in igc_ptp_feature_enable_i225()
283 igc_pin_extts(igc, rq->extts.index, pin); in igc_ptp_feature_enable_i225()
292 spin_unlock_irqrestore(&igc->tmreg_lock, flags); in igc_ptp_feature_enable_i225()
297 pin = ptp_find_pin(igc->ptp_clock, PTP_PF_PEROUT, in igc_ptp_feature_enable_i225()
298 rq->perout.index); in igc_ptp_feature_enable_i225()
300 return -EBUSY; in igc_ptp_feature_enable_i225()
302 ts.tv_sec = rq->perout.period.sec; in igc_ptp_feature_enable_i225()
303 ts.tv_nsec = rq->perout.period.nsec; in igc_ptp_feature_enable_i225()
304 ns = timespec64_to_ns(&ts); in igc_ptp_feature_enable_i225()
305 ns = ns >> 1; in igc_ptp_feature_enable_i225()
306 if (on && (ns <= 70000000LL || ns == 125000000LL || in igc_ptp_feature_enable_i225()
307 ns == 250000000LL || ns == 500000000LL)) { in igc_ptp_feature_enable_i225()
308 if (ns < 8LL) in igc_ptp_feature_enable_i225()
309 return -EINVAL; in igc_ptp_feature_enable_i225()
312 ts = ns_to_timespec64(ns); in igc_ptp_feature_enable_i225()
313 if (rq->perout.index == 1) { in igc_ptp_feature_enable_i225()
336 spin_lock_irqsave(&igc->tmreg_lock, flags); in igc_ptp_feature_enable_i225()
339 if (rq->perout.index == 1) { in igc_ptp_feature_enable_i225()
350 int i = rq->perout.index; in igc_ptp_feature_enable_i225()
367 if (rq->perout.start.sec < safe_start.tv_sec) in igc_ptp_feature_enable_i225()
368 igc->perout[i].start.tv_sec = safe_start.tv_sec; in igc_ptp_feature_enable_i225()
370 igc->perout[i].start.tv_sec = rq->perout.start.sec; in igc_ptp_feature_enable_i225()
371 igc->perout[i].start.tv_nsec = rq->perout.start.nsec; in igc_ptp_feature_enable_i225()
372 igc->perout[i].period.tv_sec = ts.tv_sec; in igc_ptp_feature_enable_i225()
373 igc->perout[i].period.tv_nsec = ts.tv_nsec; in igc_ptp_feature_enable_i225()
374 wr32(trgttimh, (u32)igc->perout[i].start.tv_sec); in igc_ptp_feature_enable_i225()
376 wr32(trgttiml, (u32)(igc->perout[i].start.tv_nsec | in igc_ptp_feature_enable_i225()
379 wr32(freqout, ns); in igc_ptp_feature_enable_i225()
385 spin_unlock_irqrestore(&igc->tmreg_lock, flags); in igc_ptp_feature_enable_i225()
389 spin_lock_irqsave(&igc->tmreg_lock, flags); in igc_ptp_feature_enable_i225()
395 igc->pps_sys_wrap_on = on; in igc_ptp_feature_enable_i225()
397 spin_unlock_irqrestore(&igc->tmreg_lock, flags); in igc_ptp_feature_enable_i225()
404 return -EOPNOTSUPP; in igc_ptp_feature_enable_i225()
416 return -1; in igc_ptp_verify_pin()
422 * igc_ptp_systim_to_hwtstamp - convert system time value to HW timestamp
436 switch (adapter->hw.mac.type) { in igc_ptp_systim_to_hwtstamp()
439 /* Upper 32 bits contain s, lower 32 bits contain ns. */ in igc_ptp_systim_to_hwtstamp()
440 hwtstamps->hwtstamp = ktime_set(systim >> 32, in igc_ptp_systim_to_hwtstamp()
444 return -EINVAL; in igc_ptp_systim_to_hwtstamp()
450 * igc_ptp_rx_pktstamp - Retrieve timestamp from Rx packet buffer
452 * @buf: Pointer to start of timestamp in HW format (2 32-bit words)
471 switch (adapter->link_speed) { in igc_ptp_rx_pktstamp()
486 netdev_warn_once(adapter->netdev, "Imprecise timestamp\n"); in igc_ptp_rx_pktstamp()
495 struct igc_hw *hw = &adapter->hw; in igc_ptp_disable_rx_timestamp()
501 for (i = 0; i < adapter->num_rx_queues; i++) { in igc_ptp_disable_rx_timestamp()
514 struct igc_hw *hw = &adapter->hw; in igc_ptp_enable_rx_timestamp()
522 for (i = 0; i < adapter->num_rx_queues; i++) { in igc_ptp_enable_rx_timestamp()
541 if (tstamp->buffer_type == IGC_TX_BUFFER_TYPE_XSK) { in igc_ptp_free_tx_buffer()
543 tstamp->xsk_tx_buffer->xsk_pending_ts = false; in igc_ptp_free_tx_buffer()
545 /* Note: tstamp->skb and tstamp->xsk_tx_buffer are in union. in igc_ptp_free_tx_buffer()
546 * By setting tstamp->xsk_tx_buffer to NULL, tstamp->skb will in igc_ptp_free_tx_buffer()
549 tstamp->xsk_tx_buffer = NULL; in igc_ptp_free_tx_buffer()
550 tstamp->buffer_type = 0; in igc_ptp_free_tx_buffer()
553 igc_xsk_wakeup(adapter->netdev, tstamp->xsk_queue_index, 0); in igc_ptp_free_tx_buffer()
558 dev_kfree_skb_any(tstamp->skb); in igc_ptp_free_tx_buffer()
559 tstamp->skb = NULL; in igc_ptp_free_tx_buffer()
567 spin_lock_irqsave(&adapter->ptp_tx_lock, flags); in igc_ptp_clear_tx_tstamp()
570 struct igc_tx_timestamp_request *tstamp = &adapter->tx_tstamp[i]; in igc_ptp_clear_tx_tstamp()
572 if (tstamp->skb) in igc_ptp_clear_tx_tstamp()
576 spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); in igc_ptp_clear_tx_tstamp()
581 struct igc_hw *hw = &adapter->hw; in igc_ptp_disable_tx_timestamp()
587 for (i = 0; i < adapter->num_tx_queues; i++) { in igc_ptp_disable_tx_timestamp()
588 struct igc_ring *tx_ring = adapter->tx_ring[i]; in igc_ptp_disable_tx_timestamp()
590 clear_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags); in igc_ptp_disable_tx_timestamp()
601 struct igc_hw *hw = &adapter->hw; in igc_ptp_enable_tx_timestamp()
613 for (i = 0; i < adapter->num_tx_queues; i++) { in igc_ptp_enable_tx_timestamp()
614 struct igc_ring *tx_ring = adapter->tx_ring[i]; in igc_ptp_enable_tx_timestamp()
616 set_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags); in igc_ptp_enable_tx_timestamp()
622 * igc_ptp_set_timestamp_mode - setup hardware for timestamping
624 * @config: hwtstamp configuration
629 struct kernel_hwtstamp_config *config) in igc_ptp_set_timestamp_mode() argument
631 switch (config->tx_type) { in igc_ptp_set_timestamp_mode()
639 return -ERANGE; in igc_ptp_set_timestamp_mode()
642 switch (config->rx_filter) { in igc_ptp_set_timestamp_mode()
661 config->rx_filter = HWTSTAMP_FILTER_ALL; in igc_ptp_set_timestamp_mode()
664 return -ERANGE; in igc_ptp_set_timestamp_mode()
670 /* Requires adapter->ptp_tx_lock held by caller. */
674 if (tstamp->skb) in igc_ptp_tx_timeout()
677 adapter->tx_hwtstamp_timeouts++; in igc_ptp_tx_timeout()
679 netdev_warn(adapter->netdev, "Tx timestamp timeout\n"); in igc_ptp_tx_timeout()
685 struct igc_hw *hw = &adapter->hw; in igc_ptp_tx_hang()
690 spin_lock_irqsave(&adapter->ptp_tx_lock, flags); in igc_ptp_tx_hang()
693 tstamp = &adapter->tx_tstamp[i]; in igc_ptp_tx_hang()
695 if (!tstamp->skb) in igc_ptp_tx_hang()
698 if (time_is_after_jiffies(tstamp->start + IGC_PTP_TX_TIMEOUT)) in igc_ptp_tx_hang()
712 spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); in igc_ptp_tx_hang()
722 skb = tstamp->skb; in igc_ptp_tx_reg_to_stamp()
729 switch (adapter->link_speed) { in igc_ptp_tx_reg_to_stamp()
748 if (tstamp->buffer_type == IGC_TX_BUFFER_TYPE_XSK) { in igc_ptp_tx_reg_to_stamp()
751 xsk_pool = adapter->tx_ring[tstamp->xsk_queue_index]->xsk_pool; in igc_ptp_tx_reg_to_stamp()
753 xsk_tx_metadata_complete(&tstamp->xsk_meta, in igc_ptp_tx_reg_to_stamp()
765 * igc_ptp_tx_hwtstamp - utility function which checks for TX time stamp
772 * Context: Expects adapter->ptp_tx_lock to be held by caller.
776 struct igc_hw *hw = &adapter->hw; in igc_ptp_tx_hwtstamp()
817 igc_ptp_tx_reg_to_stamp(adapter, &adapter->tx_tstamp[0], regval); in igc_ptp_tx_hwtstamp()
825 struct igc_tx_timestamp_request *tstamp = &adapter->tx_tstamp[i]; in igc_ptp_tx_hwtstamp()
827 if (!(tstamp->mask & mask)) in igc_ptp_tx_hwtstamp()
830 regval = rd32(tstamp->regl); in igc_ptp_tx_hwtstamp()
831 regval |= (u64)rd32(tstamp->regh) << 32; in igc_ptp_tx_hwtstamp()
848 spin_lock_irqsave(&adapter->ptp_tx_lock, flags); in igc_ptp_tx_tstamp_event()
852 spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); in igc_ptp_tx_tstamp_event()
856 * igc_ptp_hwtstamp_set - set hardware time stamping config
858 * @config: timestamping configuration structure
863 struct kernel_hwtstamp_config *config, in igc_ptp_hwtstamp_set() argument
869 err = igc_ptp_set_timestamp_mode(adapter, config); in igc_ptp_hwtstamp_set()
874 adapter->tstamp_config = *config; in igc_ptp_hwtstamp_set()
880 * igc_ptp_hwtstamp_get - get hardware time stamping config
882 * @config: timestamping configuration structure
889 struct kernel_hwtstamp_config *config) in igc_ptp_hwtstamp_get() argument
893 *config = adapter->tstamp_config; in igc_ptp_hwtstamp_get()
913 * some i225-V models could cause lockups when bringing the in igc_is_crosststamp_supported()
915 * disabling crosstimestamping support for i225-V, as it in igc_is_crosststamp_supported()
919 if (adapter->pdev->device == IGC_DEV_ID_I225_V) in igc_is_crosststamp_supported()
922 return pcie_ptm_enabled(adapter->pdev); in igc_is_crosststamp_supported()
940 struct net_device *netdev = adapter->netdev; in igc_ptm_log_error()
956 netdev_err(netdev, "PTM Error: 1588 timer adjusted during non-first PTM cycle\n"); in igc_ptm_log_error()
964 /* The PTM lock: adapter->ptm_lock must be held when calling igc_ptm_trigger() */
981 /* The PTM lock: adapter->ptm_lock must be held when calling igc_ptm_reset() */
998 struct igc_hw *hw = &adapter->hw; in igc_phc_get_syncdevicetime()
1011 ktime_get_snapshot(&adapter->snapshot); in igc_phc_get_syncdevicetime()
1021 netdev_err(adapter->netdev, "Timeout reading IGC_PTM_STAT register\n"); in igc_phc_get_syncdevicetime()
1029 } while (--count); in igc_phc_get_syncdevicetime()
1032 netdev_err(adapter->netdev, "Exceeded number of tries for PTM cycle\n"); in igc_phc_get_syncdevicetime()
1033 return -ETIMEDOUT; in igc_phc_get_syncdevicetime()
1063 mutex_lock(&adapter->ptm_lock); in igc_ptp_getcrosststamp()
1066 adapter, &adapter->snapshot, cts); in igc_ptp_getcrosststamp()
1067 mutex_unlock(&adapter->ptm_lock); in igc_ptp_getcrosststamp()
1077 struct igc_hw *hw = &igc->hw; in igc_ptp_getcyclesx64()
1080 spin_lock_irqsave(&igc->free_timer_lock, flags); in igc_ptp_getcyclesx64()
1083 ts->tv_nsec = rd32(IGC_SYSTIML_1); in igc_ptp_getcyclesx64()
1084 ts->tv_sec = rd32(IGC_SYSTIMH_1); in igc_ptp_getcyclesx64()
1087 spin_unlock_irqrestore(&igc->free_timer_lock, flags); in igc_ptp_getcyclesx64()
1093 * igc_ptp_init - Initialize PTP functionality
1101 struct net_device *netdev = adapter->netdev; in igc_ptp_init()
1103 struct igc_hw *hw = &adapter->hw; in igc_ptp_init()
1106 tstamp = &adapter->tx_tstamp[0]; in igc_ptp_init()
1107 tstamp->mask = IGC_TSYNCTXCTL_TXTT_0; in igc_ptp_init()
1108 tstamp->regl = IGC_TXSTMPL_0; in igc_ptp_init()
1109 tstamp->regh = IGC_TXSTMPH_0; in igc_ptp_init()
1110 tstamp->flags = 0; in igc_ptp_init()
1112 tstamp = &adapter->tx_tstamp[1]; in igc_ptp_init()
1113 tstamp->mask = IGC_TSYNCTXCTL_TXTT_1; in igc_ptp_init()
1114 tstamp->regl = IGC_TXSTMPL_1; in igc_ptp_init()
1115 tstamp->regh = IGC_TXSTMPH_1; in igc_ptp_init()
1116 tstamp->flags = IGC_TX_FLAGS_TSTAMP_1; in igc_ptp_init()
1118 tstamp = &adapter->tx_tstamp[2]; in igc_ptp_init()
1119 tstamp->mask = IGC_TSYNCTXCTL_TXTT_2; in igc_ptp_init()
1120 tstamp->regl = IGC_TXSTMPL_2; in igc_ptp_init()
1121 tstamp->regh = IGC_TXSTMPH_2; in igc_ptp_init()
1122 tstamp->flags = IGC_TX_FLAGS_TSTAMP_2; in igc_ptp_init()
1124 tstamp = &adapter->tx_tstamp[3]; in igc_ptp_init()
1125 tstamp->mask = IGC_TSYNCTXCTL_TXTT_3; in igc_ptp_init()
1126 tstamp->regl = IGC_TXSTMPL_3; in igc_ptp_init()
1127 tstamp->regh = IGC_TXSTMPH_3; in igc_ptp_init()
1128 tstamp->flags = IGC_TX_FLAGS_TSTAMP_3; in igc_ptp_init()
1130 switch (hw->mac.type) { in igc_ptp_init()
1133 struct ptp_pin_desc *ppd = &adapter->sdp_config[i]; in igc_ptp_init()
1135 snprintf(ppd->name, sizeof(ppd->name), "SDP%d", i); in igc_ptp_init()
1136 ppd->index = i; in igc_ptp_init()
1137 ppd->func = PTP_PF_NONE; in igc_ptp_init()
1139 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); in igc_ptp_init()
1140 adapter->ptp_caps.owner = THIS_MODULE; in igc_ptp_init()
1141 adapter->ptp_caps.max_adj = 62499999; in igc_ptp_init()
1142 adapter->ptp_caps.adjfine = igc_ptp_adjfine_i225; in igc_ptp_init()
1143 adapter->ptp_caps.adjtime = igc_ptp_adjtime_i225; in igc_ptp_init()
1144 adapter->ptp_caps.gettimex64 = igc_ptp_gettimex64_i225; in igc_ptp_init()
1145 adapter->ptp_caps.getcyclesx64 = igc_ptp_getcyclesx64; in igc_ptp_init()
1146 adapter->ptp_caps.settime64 = igc_ptp_settime_i225; in igc_ptp_init()
1147 adapter->ptp_caps.enable = igc_ptp_feature_enable_i225; in igc_ptp_init()
1148 adapter->ptp_caps.pps = 1; in igc_ptp_init()
1149 adapter->ptp_caps.pin_config = adapter->sdp_config; in igc_ptp_init()
1150 adapter->ptp_caps.n_ext_ts = IGC_N_EXTTS; in igc_ptp_init()
1151 adapter->ptp_caps.n_per_out = IGC_N_PEROUT; in igc_ptp_init()
1152 adapter->ptp_caps.supported_extts_flags = PTP_RISING_EDGE | in igc_ptp_init()
1155 adapter->ptp_caps.n_pins = IGC_N_SDP; in igc_ptp_init()
1156 adapter->ptp_caps.verify = igc_ptp_verify_pin; in igc_ptp_init()
1161 adapter->ptp_caps.getcrosststamp = igc_ptp_getcrosststamp; in igc_ptp_init()
1164 adapter->ptp_clock = NULL; in igc_ptp_init()
1168 spin_lock_init(&adapter->ptp_tx_lock); in igc_ptp_init()
1169 spin_lock_init(&adapter->free_timer_lock); in igc_ptp_init()
1170 spin_lock_init(&adapter->tmreg_lock); in igc_ptp_init()
1171 mutex_init(&adapter->ptm_lock); in igc_ptp_init()
1173 adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; in igc_ptp_init()
1174 adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF; in igc_ptp_init()
1176 adapter->prev_ptp_time = ktime_to_timespec64(ktime_get_real()); in igc_ptp_init()
1177 adapter->ptp_reset_start = ktime_get(); in igc_ptp_init()
1179 adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps, in igc_ptp_init()
1180 &adapter->pdev->dev); in igc_ptp_init()
1181 if (IS_ERR(adapter->ptp_clock)) { in igc_ptp_init()
1182 adapter->ptp_clock = NULL; in igc_ptp_init()
1184 mutex_destroy(&adapter->ptm_lock); in igc_ptp_init()
1185 } else if (adapter->ptp_clock) { in igc_ptp_init()
1187 adapter->ptp_flags |= IGC_PTP_ENABLED; in igc_ptp_init()
1193 igc_ptp_read(adapter, &adapter->prev_ptp_time); in igc_ptp_time_save()
1194 adapter->ptp_reset_start = ktime_get(); in igc_ptp_time_save()
1199 struct timespec64 ts = adapter->prev_ptp_time; in igc_ptp_time_restore()
1202 delta = ktime_sub(ktime_get(), adapter->ptp_reset_start); in igc_ptp_time_restore()
1211 struct igc_hw *hw = &adapter->hw; in igc_ptm_stop()
1214 mutex_lock(&adapter->ptm_lock); in igc_ptm_stop()
1219 mutex_unlock(&adapter->ptm_lock); in igc_ptm_stop()
1223 * igc_ptp_suspend - Disable PTP work items and prepare for suspend
1231 if (!(adapter->ptp_flags & IGC_PTP_ENABLED)) in igc_ptp_suspend()
1236 if (pci_device_is_present(adapter->pdev)) { in igc_ptp_suspend()
1243 * igc_ptp_stop - Disable PTP device and stop the overflow check.
1250 if (!(adapter->ptp_flags & IGC_PTP_ENABLED)) in igc_ptp_stop()
1255 adapter->ptp_flags &= ~IGC_PTP_ENABLED; in igc_ptp_stop()
1256 if (adapter->ptp_clock) { in igc_ptp_stop()
1257 ptp_clock_unregister(adapter->ptp_clock); in igc_ptp_stop()
1258 netdev_info(adapter->netdev, "PHC removed\n"); in igc_ptp_stop()
1259 adapter->ptp_flags &= ~IGC_PTP_ENABLED; in igc_ptp_stop()
1261 mutex_destroy(&adapter->ptm_lock); in igc_ptp_stop()
1265 * igc_ptp_reset - Re-enable the adapter for PTP following a reset.
1268 * This function handles the reset work required to re-enable the PTP device.
1272 struct igc_hw *hw = &adapter->hw; in igc_ptp_reset()
1277 if (!(adapter->ptp_flags & IGC_PTP_ENABLED)) in igc_ptp_reset()
1281 igc_ptp_set_timestamp_mode(adapter, &adapter->tstamp_config); in igc_ptp_reset()
1283 mutex_lock(&adapter->ptm_lock); in igc_ptp_reset()
1285 spin_lock_irqsave(&adapter->tmreg_lock, flags); in igc_ptp_reset()
1287 switch (adapter->hw.mac.type) { in igc_ptp_reset()
1297 (adapter->pps_sys_wrap_on ? IGC_TSICR_SYS_WRAP : 0)); in igc_ptp_reset()
1323 netdev_err(adapter->netdev, "Timeout reading IGC_PTM_STAT register\n"); in igc_ptp_reset()
1332 /* Re-initialize the timer. */ in igc_ptp_reset()
1333 if (hw->mac.type == igc_i225) { in igc_ptp_reset()
1336 timecounter_init(&adapter->tc, &adapter->cc, in igc_ptp_reset()
1340 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); in igc_ptp_reset()
1342 mutex_unlock(&adapter->ptm_lock); in igc_ptp_reset()