• Home
  • Raw
  • Download

Lines Matching full:ptp

12  * PTP support is assisted by firmware running on the MC, which provides
14 * PTP event packets are queued onto internal queues for subsequent processing;
20 * with the hardware timestamp. The PTP receive packet queue is searched
24 * It is important for the operation of the PTP protocol that the ordering
52 /* Maximum number of events expected to make up a PTP event */
79 /* Offsets into PTP packet for identification. These offsets are from the
80 * start of the IP header, not the MAC header. Note that neither PTP V1 nor
81 * PTP V2 permit the use of IPV4 options.
94 /* The minimum length of a PTP V1 packet for offsets, etc. to be valid:
105 /* Although PTP V2 UUIDs are comprised a ClockIdentity (8) and PortNumber (2),
116 /* The minimum length of a PTP V2 packet for offsets, etc. to be valid:
178 * struct efx_ptp_event_rx - A PTP receive event (from MC)
179 * @seq0: First part of (PTP) UUID
180 * @seq1: Second part of (PTP) UUID and sequence number
212 * struct efx_ptp_data - Precision Time Protocol (PTP) state
214 * @channel: The PTP channel (Siena only)
223 * @workwq: Work queue for processing pending PTP operations
225 * @reset_required: A serious error has occurred and the PTP task needs to be
230 * @enabled: PTP operation enabled
231 * @mode: Mode in which PTP operating (PTP version)
245 * @ts_corrections.ptp_tx: Required driver correction of PTP packet transmit
247 * @ts_corrections.ptp_rx: Required driver correction of PTP packet receive
255 * @evt_frags: Partly assembled PTP events
268 * @txbuf: Buffer for use when transmitting (PTP) packets to MC (avoids
348 static int efx_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta);
349 static int efx_phc_adjtime(struct ptp_clock_info *ptp, s64 delta);
350 static int efx_phc_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts);
351 static int efx_phc_settime(struct ptp_clock_info *ptp,
353 static int efx_phc_enable(struct ptp_clock_info *ptp,
366 /* PTP 'extra' channel is still a traffic channel, but we only create TX queues
367 * if PTP uses MAC TX timestamps, not if PTP uses the MC directly to transmit.
562 struct efx_ptp_data *ptp, in efx_ptp_mac_nic_to_ktime_correction() argument
606 kt = ptp->nic_to_kernel_time(nic_major, nic_minor, in efx_ptp_mac_nic_to_ktime_correction()
615 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_nic_to_kernel_time() local
619 kt = efx_ptp_mac_nic_to_ktime_correction(efx, ptp, in efx_ptp_nic_to_kernel_time()
622 ptp->ts_corrections.general_tx); in efx_ptp_nic_to_kernel_time()
624 kt = ptp->nic_to_kernel_time( in efx_ptp_nic_to_kernel_time()
627 ptp->ts_corrections.general_tx); in efx_ptp_nic_to_kernel_time()
631 /* Get PTP attributes and set up time conversions */
636 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_get_attributes() local
641 /* Get the PTP attributes. If the NIC doesn't support the operation we in efx_ptp_get_attributes()
654 netif_info(efx, probe, efx->net_dev, "no PTP support\n"); in efx_ptp_get_attributes()
664 ptp->ns_to_nic_time = efx_ptp_ns_to_s27; in efx_ptp_get_attributes()
665 ptp->nic_to_kernel_time = efx_ptp_s27_to_ktime_correction; in efx_ptp_get_attributes()
666 ptp->nic_time.minor_max = 1 << 27; in efx_ptp_get_attributes()
667 ptp->nic_time.sync_event_minor_shift = 19; in efx_ptp_get_attributes()
670 ptp->ns_to_nic_time = efx_ptp_ns_to_s_ns; in efx_ptp_get_attributes()
671 ptp->nic_to_kernel_time = efx_ptp_s_ns_to_ktime_correction; in efx_ptp_get_attributes()
672 ptp->nic_time.minor_max = 1000000000; in efx_ptp_get_attributes()
673 ptp->nic_time.sync_event_minor_shift = 22; in efx_ptp_get_attributes()
676 ptp->ns_to_nic_time = efx_ptp_ns_to_s_qns; in efx_ptp_get_attributes()
677 ptp->nic_to_kernel_time = efx_ptp_s_qns_to_ktime_correction; in efx_ptp_get_attributes()
678 ptp->nic_time.minor_max = 4000000000UL; in efx_ptp_get_attributes()
679 ptp->nic_time.sync_event_minor_shift = 24; in efx_ptp_get_attributes()
691 ptp->nic_time.sync_event_diff_min = ptp->nic_time.minor_max in efx_ptp_get_attributes()
692 - (ptp->nic_time.minor_max / 10); in efx_ptp_get_attributes()
693 ptp->nic_time.sync_event_diff_max = (ptp->nic_time.minor_max / 4) in efx_ptp_get_attributes()
694 + (ptp->nic_time.minor_max / 10); in efx_ptp_get_attributes()
705 ptp->min_synchronisation_ns = in efx_ptp_get_attributes()
709 ptp->min_synchronisation_ns = DEFAULT_MIN_SYNCHRONISATION_NS; in efx_ptp_get_attributes()
713 ptp->capabilities = MCDI_DWORD(outbuf, in efx_ptp_get_attributes()
716 ptp->capabilities = 0; in efx_ptp_get_attributes()
722 if (ptp->capabilities & (1 << MC_CMD_PTP_OUT_GET_ATTRIBUTES_FP44_FREQ_ADJ_LBN)) in efx_ptp_get_attributes()
723 ptp->adjfreq_ppb_shift = PPB_SHIFT_FP44; in efx_ptp_get_attributes()
725 ptp->adjfreq_ppb_shift = PPB_SHIFT_FP40; in efx_ptp_get_attributes()
730 /* Get PTP timestamp corrections */
786 /* Enable MCDI PTP support. */
810 /* Disable MCDI PTP support.
826 /* If we get ENOSYS, the NIC doesn't support PTP, and thus this function in efx_ptp_disable()
830 netif_info(efx, probe, efx->net_dev, "no PTP support\n"); in efx_ptp_disable()
852 "ERROR: PTP requires MSI-X and 1 additional interrupt" in efx_ptp_handle_no_channel()
853 "vector. PTP disabled\n"); in efx_ptp_handle_no_channel()
864 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_send_times() local
865 int *mc_running = ptp->start.addr; in efx_ptp_send_times()
935 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_process_times() local
957 &ptp->timeset[i]); in efx_ptp_process_times()
960 ptp->nic_to_kernel_time(0, ptp->timeset[i].wait, 0)); in efx_ptp_process_times()
961 window = ptp->timeset[i].window; in efx_ptp_process_times()
974 ++ptp->invalid_sync_windows; in efx_ptp_process_times()
976 ++ptp->oversize_sync_windows; in efx_ptp_process_times()
977 } else if (corrected < ptp->min_synchronisation_ns) { in efx_ptp_process_times()
978 ++ptp->undersize_sync_windows; in efx_ptp_process_times()
987 "PTP no suitable synchronisations\n"); in efx_ptp_process_times()
997 start_sec = ptp->timeset[last_good].host_start >> MC_NANOSECOND_BITS; in efx_ptp_process_times()
1002 "PTP bad synchronisation seconds\n"); in efx_ptp_process_times()
1008 (ptp->timeset[last_good].host_start & MC_NANOSECOND_MASK); in efx_ptp_process_times()
1014 mc_time = ptp->nic_to_kernel_time(ptp->timeset[last_good].major, in efx_ptp_process_times()
1015 ptp->timeset[last_good].minor, 0); in efx_ptp_process_times()
1021 ptp->host_time_pps = *last_time; in efx_ptp_process_times()
1022 pps_sub_ts(&ptp->host_time_pps, delta); in efx_ptp_process_times()
1030 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_synchronize() local
1037 int *start = ptp->start.addr; in efx_ptp_synchronize()
1044 ptp->start.dma_addr); in efx_ptp_synchronize()
1060 ++ptp->fast_syncs; in efx_ptp_synchronize()
1062 ++ptp->sync_timeouts; in efx_ptp_synchronize()
1076 ++ptp->good_syncs; in efx_ptp_synchronize()
1078 ++ptp->no_time_syncs; in efx_ptp_synchronize()
1085 ++ptp->bad_syncs; in efx_ptp_synchronize()
1090 /* Transmit a PTP packet via the dedicated hardware timestamped queue. */
1101 WARN_ONCE(1, "PTP channel has no timestamped tx queue\n"); in efx_ptp_xmit_skb_queue()
1106 /* Transmit a PTP packet, via the MCDI interface, to the wire. */
1157 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_drop_time_expired_events() local
1161 if (ptp->rx_ts_inline) in efx_ptp_drop_time_expired_events()
1165 spin_lock_bh(&ptp->evt_lock); in efx_ptp_drop_time_expired_events()
1166 if (!list_empty(&ptp->evt_list)) { in efx_ptp_drop_time_expired_events()
1167 list_for_each_safe(cursor, next, &ptp->evt_list) { in efx_ptp_drop_time_expired_events()
1173 list_move(&evt->link, &ptp->evt_free_list); in efx_ptp_drop_time_expired_events()
1175 "PTP rx event dropped\n"); in efx_ptp_drop_time_expired_events()
1179 spin_unlock_bh(&ptp->evt_lock); in efx_ptp_drop_time_expired_events()
1185 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_match_rx() local
1192 WARN_ON_ONCE(ptp->rx_ts_inline); in efx_ptp_match_rx()
1194 spin_lock_bh(&ptp->evt_lock); in efx_ptp_match_rx()
1195 evts_waiting = !list_empty(&ptp->evt_list); in efx_ptp_match_rx()
1196 spin_unlock_bh(&ptp->evt_lock); in efx_ptp_match_rx()
1203 spin_lock_bh(&ptp->evt_lock); in efx_ptp_match_rx()
1204 list_for_each_safe(cursor, next, &ptp->evt_list) { in efx_ptp_match_rx()
1218 list_move(&evt->link, &ptp->evt_free_list); in efx_ptp_match_rx()
1222 spin_unlock_bh(&ptp->evt_lock); in efx_ptp_match_rx()
1233 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_process_events() local
1236 while ((skb = skb_dequeue(&ptp->rxq))) { in efx_ptp_process_events()
1247 ++ptp->rx_no_timestamp; in efx_ptp_process_events()
1251 skb_queue_head(&ptp->rxq, skb); in efx_ptp_process_events()
1267 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_remove_multicast_filters() local
1269 if (ptp->rxfilter_installed) { in efx_ptp_remove_multicast_filters()
1271 ptp->rxfilter_general); in efx_ptp_remove_multicast_filters()
1273 ptp->rxfilter_event); in efx_ptp_remove_multicast_filters()
1274 ptp->rxfilter_installed = false; in efx_ptp_remove_multicast_filters()
1280 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_insert_multicast_filters() local
1284 if (!ptp->channel || ptp->rxfilter_installed) in efx_ptp_insert_multicast_filters()
1292 efx_channel_get_rx_queue(ptp->channel))); in efx_ptp_insert_multicast_filters()
1302 ptp->rxfilter_event = rc; in efx_ptp_insert_multicast_filters()
1306 efx_channel_get_rx_queue(ptp->channel))); in efx_ptp_insert_multicast_filters()
1316 ptp->rxfilter_general = rc; in efx_ptp_insert_multicast_filters()
1318 ptp->rxfilter_installed = true; in efx_ptp_insert_multicast_filters()
1323 ptp->rxfilter_event); in efx_ptp_insert_multicast_filters()
1329 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_start() local
1332 ptp->reset_required = false; in efx_ptp_start()
1342 ptp->evt_frag_idx = 0; in efx_ptp_start()
1343 ptp->current_adjfreq = 0; in efx_ptp_start()
1354 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_stop() local
1359 if (ptp == NULL) in efx_ptp_stop()
1389 struct efx_ptp_data *ptp = in efx_ptp_pps_worker() local
1391 struct efx_nic *efx = ptp->efx; in efx_ptp_pps_worker()
1398 ptp_evt.pps_times = ptp->host_time_pps; in efx_ptp_pps_worker()
1399 ptp_clock_event(ptp->phc_clock, &ptp_evt); in efx_ptp_pps_worker()
1444 /* Initialise PTP state. */
1447 struct efx_ptp_data *ptp; in efx_ptp_probe() local
1451 ptp = kzalloc(sizeof(struct efx_ptp_data), GFP_KERNEL); in efx_ptp_probe()
1452 efx->ptp_data = ptp; in efx_ptp_probe()
1456 ptp->efx = efx; in efx_ptp_probe()
1457 ptp->channel = channel; in efx_ptp_probe()
1458 ptp->rx_ts_inline = efx_nic_rev(efx) >= EFX_REV_HUNT_A0; in efx_ptp_probe()
1460 rc = efx_nic_alloc_buffer(efx, &ptp->start, sizeof(int), GFP_KERNEL); in efx_ptp_probe()
1464 skb_queue_head_init(&ptp->rxq); in efx_ptp_probe()
1465 skb_queue_head_init(&ptp->txq); in efx_ptp_probe()
1466 ptp->workwq = create_singlethread_workqueue("sfc_ptp"); in efx_ptp_probe()
1467 if (!ptp->workwq) { in efx_ptp_probe()
1473 ptp->xmit_skb = efx_ptp_xmit_skb_queue; in efx_ptp_probe()
1477 ptp->xmit_skb = efx_ptp_xmit_skb_mc; in efx_ptp_probe()
1480 INIT_WORK(&ptp->work, efx_ptp_worker); in efx_ptp_probe()
1481 ptp->config.flags = 0; in efx_ptp_probe()
1482 ptp->config.tx_type = HWTSTAMP_TX_OFF; in efx_ptp_probe()
1483 ptp->config.rx_filter = HWTSTAMP_FILTER_NONE; in efx_ptp_probe()
1484 INIT_LIST_HEAD(&ptp->evt_list); in efx_ptp_probe()
1485 INIT_LIST_HEAD(&ptp->evt_free_list); in efx_ptp_probe()
1486 spin_lock_init(&ptp->evt_lock); in efx_ptp_probe()
1488 list_add(&ptp->rx_evts[pos].link, &ptp->evt_free_list); in efx_ptp_probe()
1490 /* Get the NIC PTP attributes and set up time conversions */ in efx_ptp_probe()
1502 ptp->phc_clock_info = efx_phc_clock_info; in efx_ptp_probe()
1503 ptp->phc_clock = ptp_clock_register(&ptp->phc_clock_info, in efx_ptp_probe()
1505 if (IS_ERR(ptp->phc_clock)) { in efx_ptp_probe()
1506 rc = PTR_ERR(ptp->phc_clock); in efx_ptp_probe()
1508 } else if (ptp->phc_clock) { in efx_ptp_probe()
1509 INIT_WORK(&ptp->pps_work, efx_ptp_pps_worker); in efx_ptp_probe()
1510 ptp->pps_workwq = create_singlethread_workqueue("sfc_pps"); in efx_ptp_probe()
1511 if (!ptp->pps_workwq) { in efx_ptp_probe()
1517 ptp->nic_ts_enabled = false; in efx_ptp_probe()
1527 efx_nic_free_buffer(efx, &ptp->start); in efx_ptp_probe()
1536 /* Initialise PTP channel.
1539 * overlap with 'rxq0' because ptp.c doesn't use skb_record_rx_queue.
1550 /* Failure to probe PTP is not fatal; this channel will just not be in efx_ptp_probe_channel()
1557 "Failed to probe PTP, rc=%d\n", rc); in efx_ptp_probe_channel()
1595 snprintf(buf, len, "%s-ptp", channel->efx->name); in efx_ptp_get_channel_name()
1598 /* Determine whether this packet should be processed by the PTP module
1616 /* Receive a PTP packet. Packets are queued until the arrival of
1623 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_rx() local
1632 if (ptp->mode == MC_CMD_PTP_MODE_V1) { in efx_ptp_rx()
1642 /* PTP V1 uses all six bytes of the UUID to match the packet in efx_ptp_rx()
1660 * to create the UUID (SF bug 33070). The PTP V2 in efx_ptp_rx()
1665 if (ptp->mode == MC_CMD_PTP_MODE_V2) { in efx_ptp_rx()
1669 BUG_ON(ptp->mode != MC_CMD_PTP_MODE_V2_ENHANCED); in efx_ptp_rx()
1678 * the packet for PTP V1 and V2 in efx_ptp_rx()
1697 skb_queue_tail(&ptp->rxq, skb); in efx_ptp_rx()
1698 queue_work(ptp->workwq, &ptp->work); in efx_ptp_rx()
1703 /* Transmit a PTP packet. This has to be transmitted by the MC
1709 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_tx() local
1711 skb_queue_tail(&ptp->txq, skb); in efx_ptp_tx()
1716 queue_work(ptp->workwq, &ptp->work); in efx_ptp_tx()
1790 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_get_ts_info() local
1795 if (!ptp) in efx_ptp_get_ts_info()
1816 ts_info->rx_filters = ptp->efx->type->hwtstamp_filters; in efx_ptp_get_ts_info()
1824 /* Not a PTP enabled port */ in efx_ptp_set_ts_config()
1850 struct efx_ptp_data *ptp = efx->ptp_data; in ptp_event_failure() local
1853 "PTP unexpected event length: got %d expected %d\n", in ptp_event_failure()
1854 ptp->evt_frag_idx, expected_frag_len); in ptp_event_failure()
1855 ptp->reset_required = true; in ptp_event_failure()
1856 queue_work(ptp->workwq, &ptp->work); in ptp_event_failure()
1863 static void ptp_event_rx(struct efx_nic *efx, struct efx_ptp_data *ptp) in ptp_event_rx() argument
1867 if (WARN_ON_ONCE(ptp->rx_ts_inline)) in ptp_event_rx()
1870 if (ptp->evt_frag_idx != 3) { in ptp_event_rx()
1875 spin_lock_bh(&ptp->evt_lock); in ptp_event_rx()
1876 if (!list_empty(&ptp->evt_free_list)) { in ptp_event_rx()
1877 evt = list_first_entry(&ptp->evt_free_list, in ptp_event_rx()
1881 evt->seq0 = EFX_QWORD_FIELD(ptp->evt_frags[2], MCDI_EVENT_DATA); in ptp_event_rx()
1882 evt->seq1 = (EFX_QWORD_FIELD(ptp->evt_frags[2], in ptp_event_rx()
1884 (EFX_QWORD_FIELD(ptp->evt_frags[1], in ptp_event_rx()
1886 (EFX_QWORD_FIELD(ptp->evt_frags[0], in ptp_event_rx()
1889 EFX_QWORD_FIELD(ptp->evt_frags[0], MCDI_EVENT_DATA), in ptp_event_rx()
1890 EFX_QWORD_FIELD(ptp->evt_frags[1], MCDI_EVENT_DATA), in ptp_event_rx()
1891 ptp->ts_corrections.ptp_rx); in ptp_event_rx()
1893 list_add_tail(&evt->link, &ptp->evt_list); in ptp_event_rx()
1895 queue_work(ptp->workwq, &ptp->work); in ptp_event_rx()
1898 netif_err(efx, rx_err, efx->net_dev, "PTP event queue overflow\n"); in ptp_event_rx()
1900 spin_unlock_bh(&ptp->evt_lock); in ptp_event_rx()
1903 static void ptp_event_fault(struct efx_nic *efx, struct efx_ptp_data *ptp) in ptp_event_fault() argument
1905 int code = EFX_QWORD_FIELD(ptp->evt_frags[0], MCDI_EVENT_DATA); in ptp_event_fault()
1906 if (ptp->evt_frag_idx != 1) { in ptp_event_fault()
1911 netif_err(efx, hw, efx->net_dev, "PTP error %d\n", code); in ptp_event_fault()
1914 static void ptp_event_pps(struct efx_nic *efx, struct efx_ptp_data *ptp) in ptp_event_pps() argument
1916 if (ptp->nic_ts_enabled) in ptp_event_pps()
1917 queue_work(ptp->pps_workwq, &ptp->pps_work); in ptp_event_pps()
1922 struct efx_ptp_data *ptp = efx->ptp_data; in efx_ptp_event() local
1925 if (!ptp) { in efx_ptp_event()
1928 "Received PTP event but PTP not set up\n"); in efx_ptp_event()
1934 if (!ptp->enabled) in efx_ptp_event()
1937 if (ptp->evt_frag_idx == 0) { in efx_ptp_event()
1938 ptp->evt_code = code; in efx_ptp_event()
1939 } else if (ptp->evt_code != code) { in efx_ptp_event()
1941 "PTP out of sequence event %d\n", code); in efx_ptp_event()
1942 ptp->evt_frag_idx = 0; in efx_ptp_event()
1945 ptp->evt_frags[ptp->evt_frag_idx++] = *ev; in efx_ptp_event()
1950 ptp_event_rx(efx, ptp); in efx_ptp_event()
1953 ptp_event_fault(efx, ptp); in efx_ptp_event()
1956 ptp_event_pps(efx, ptp); in efx_ptp_event()
1960 "PTP unknown event %d\n", code); in efx_ptp_event()
1963 ptp->evt_frag_idx = 0; in efx_ptp_event()
1964 } else if (MAX_EVENT_FRAGS == ptp->evt_frag_idx) { in efx_ptp_event()
1966 "PTP too many event fragments\n"); in efx_ptp_event()
1967 ptp->evt_frag_idx = 0; in efx_ptp_event()
1974 struct efx_ptp_data *ptp = efx->ptp_data; in efx_time_sync_event() local
1985 << ptp->nic_time.sync_event_minor_shift; in efx_time_sync_event()
2011 struct efx_ptp_data *ptp = efx->ptp_data; in __efx_rx_skb_attach_timestamp() local
2026 diff += ptp->nic_time.minor_max; in __efx_rx_skb_attach_timestamp()
2029 carry = (channel->sync_timestamp_minor >= ptp->nic_time.minor_max - diff) ? in __efx_rx_skb_attach_timestamp()
2032 if (diff <= ptp->nic_time.sync_event_diff_max) { in __efx_rx_skb_attach_timestamp()
2037 } else if (diff >= ptp->nic_time.sync_event_diff_min) { in __efx_rx_skb_attach_timestamp()
2059 ptp->nic_to_kernel_time(pkt_timestamp_major, in __efx_rx_skb_attach_timestamp()
2061 ptp->ts_corrections.general_rx); in __efx_rx_skb_attach_timestamp()
2064 static int efx_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta) in efx_phc_adjfreq() argument
2066 struct efx_ptp_data *ptp_data = container_of(ptp, in efx_phc_adjfreq()
2098 static int efx_phc_adjtime(struct ptp_clock_info *ptp, s64 delta) in efx_phc_adjtime() argument
2101 struct efx_ptp_data *ptp_data = container_of(ptp, in efx_phc_adjtime()
2118 static int efx_phc_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) in efx_phc_gettime() argument
2120 struct efx_ptp_data *ptp_data = container_of(ptp, in efx_phc_gettime()
2144 static int efx_phc_settime(struct ptp_clock_info *ptp, in efx_phc_settime() argument
2155 rc = efx_phc_gettime(ptp, &time_now); in efx_phc_settime()
2161 rc = efx_phc_adjtime(ptp, timespec64_to_ns(&delta)); in efx_phc_settime()
2168 static int efx_phc_enable(struct ptp_clock_info *ptp, in efx_phc_enable() argument
2172 struct efx_ptp_data *ptp_data = container_of(ptp, in efx_phc_enable()
2195 /* Check whether PTP is implemented on this NIC. The DISABLE in efx_ptp_defer_probe_with_channel()
2206 netif_err(efx, drv, efx->net_dev, "Failed to restart PTP.\n"); in efx_ptp_start_datapath()