• Home
  • Raw
  • Download

Lines Matching refs:pf

59 static void i40e_ptp_read(struct i40e_pf *pf, struct timespec64 *ts)  in i40e_ptp_read()  argument
61 struct i40e_hw *hw = &pf->hw; in i40e_ptp_read()
83 static void i40e_ptp_write(struct i40e_pf *pf, const struct timespec64 *ts) in i40e_ptp_write() argument
85 struct i40e_hw *hw = &pf->hw; in i40e_ptp_write()
122 struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps); in i40e_ptp_adjfreq() local
123 struct i40e_hw *hw = &pf->hw; in i40e_ptp_adjfreq()
133 adj = ACCESS_ONCE(pf->ptp_base_adj); in i40e_ptp_adjfreq()
160 struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps); in i40e_ptp_adjtime() local
163 mutex_lock(&pf->tmreg_lock); in i40e_ptp_adjtime()
165 i40e_ptp_read(pf, &now); in i40e_ptp_adjtime()
167 i40e_ptp_write(pf, (const struct timespec64 *)&now); in i40e_ptp_adjtime()
169 mutex_unlock(&pf->tmreg_lock); in i40e_ptp_adjtime()
184 struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps); in i40e_ptp_gettime() local
186 mutex_lock(&pf->tmreg_lock); in i40e_ptp_gettime()
187 i40e_ptp_read(pf, ts); in i40e_ptp_gettime()
188 mutex_unlock(&pf->tmreg_lock); in i40e_ptp_gettime()
204 struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps); in i40e_ptp_settime() local
206 mutex_lock(&pf->tmreg_lock); in i40e_ptp_settime()
207 i40e_ptp_write(pf, ts); in i40e_ptp_settime()
208 mutex_unlock(&pf->tmreg_lock); in i40e_ptp_settime()
240 static u32 i40e_ptp_get_rx_events(struct i40e_pf *pf) in i40e_ptp_get_rx_events() argument
242 struct i40e_hw *hw = &pf->hw; in i40e_ptp_get_rx_events()
247 new_latch_events = prttsyn_stat & ~pf->latch_event_flags; in i40e_ptp_get_rx_events()
260 pf->latch_events[i] = jiffies; in i40e_ptp_get_rx_events()
264 pf->latch_event_flags = prttsyn_stat; in i40e_ptp_get_rx_events()
279 void i40e_ptp_rx_hang(struct i40e_pf *pf) in i40e_ptp_rx_hang() argument
281 struct i40e_hw *hw = &pf->hw; in i40e_ptp_rx_hang()
289 if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_rx) in i40e_ptp_rx_hang()
292 spin_lock_bh(&pf->ptp_rx_lock); in i40e_ptp_rx_hang()
295 i40e_ptp_get_rx_events(pf); in i40e_ptp_rx_hang()
304 if ((pf->latch_event_flags & BIT(i)) && in i40e_ptp_rx_hang()
305 time_is_before_jiffies(pf->latch_events[i] + HZ)) { in i40e_ptp_rx_hang()
307 pf->latch_event_flags &= ~BIT(i); in i40e_ptp_rx_hang()
312 spin_unlock_bh(&pf->ptp_rx_lock); in i40e_ptp_rx_hang()
321 dev_dbg(&pf->pdev->dev, in i40e_ptp_rx_hang()
326 pf->rx_hwtstamp_cleared += cleared; in i40e_ptp_rx_hang()
338 void i40e_ptp_tx_hang(struct i40e_pf *pf) in i40e_ptp_tx_hang() argument
342 if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_tx) in i40e_ptp_tx_hang()
346 if (!test_bit(__I40E_PTP_TX_IN_PROGRESS, pf->state)) in i40e_ptp_tx_hang()
353 if (time_is_before_jiffies(pf->ptp_tx_start + HZ)) { in i40e_ptp_tx_hang()
354 skb = pf->ptp_tx_skb; in i40e_ptp_tx_hang()
355 pf->ptp_tx_skb = NULL; in i40e_ptp_tx_hang()
356 clear_bit_unlock(__I40E_PTP_TX_IN_PROGRESS, pf->state); in i40e_ptp_tx_hang()
360 pf->tx_hwtstamp_timeouts++; in i40e_ptp_tx_hang()
372 void i40e_ptp_tx_hwtstamp(struct i40e_pf *pf) in i40e_ptp_tx_hwtstamp() argument
375 struct sk_buff *skb = pf->ptp_tx_skb; in i40e_ptp_tx_hwtstamp()
376 struct i40e_hw *hw = &pf->hw; in i40e_ptp_tx_hwtstamp()
380 if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_tx) in i40e_ptp_tx_hwtstamp()
384 if (!pf->ptp_tx_skb) in i40e_ptp_tx_hwtstamp()
398 pf->ptp_tx_skb = NULL; in i40e_ptp_tx_hwtstamp()
399 clear_bit_unlock(__I40E_PTP_TX_IN_PROGRESS, pf->state); in i40e_ptp_tx_hwtstamp()
418 void i40e_ptp_rx_hwtstamp(struct i40e_pf *pf, struct sk_buff *skb, u8 index) in i40e_ptp_rx_hwtstamp() argument
427 if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_rx) in i40e_ptp_rx_hwtstamp()
430 hw = &pf->hw; in i40e_ptp_rx_hwtstamp()
432 spin_lock_bh(&pf->ptp_rx_lock); in i40e_ptp_rx_hwtstamp()
435 prttsyn_stat = i40e_ptp_get_rx_events(pf); in i40e_ptp_rx_hwtstamp()
439 spin_unlock_bh(&pf->ptp_rx_lock); in i40e_ptp_rx_hwtstamp()
444 pf->latch_event_flags &= ~BIT(index); in i40e_ptp_rx_hwtstamp()
449 spin_unlock_bh(&pf->ptp_rx_lock); in i40e_ptp_rx_hwtstamp()
464 void i40e_ptp_set_increment(struct i40e_pf *pf) in i40e_ptp_set_increment() argument
467 struct i40e_hw *hw = &pf->hw; in i40e_ptp_set_increment()
472 i40e_aq_get_link_info(&pf->hw, true, NULL, NULL); in i40e_ptp_set_increment()
486 dev_warn(&pf->pdev->dev, in i40e_ptp_set_increment()
507 ACCESS_ONCE(pf->ptp_base_adj) = incval; in i40e_ptp_set_increment()
520 int i40e_ptp_get_ts_config(struct i40e_pf *pf, struct ifreq *ifr) in i40e_ptp_get_ts_config() argument
522 struct hwtstamp_config *config = &pf->tstamp_config; in i40e_ptp_get_ts_config()
524 if (!(pf->flags & I40E_FLAG_PTP)) in i40e_ptp_get_ts_config()
543 static int i40e_ptp_set_timestamp_mode(struct i40e_pf *pf, in i40e_ptp_set_timestamp_mode() argument
546 struct i40e_hw *hw = &pf->hw; in i40e_ptp_set_timestamp_mode()
555 pf->ptp_tx = false; in i40e_ptp_set_timestamp_mode()
558 pf->ptp_tx = true; in i40e_ptp_set_timestamp_mode()
566 pf->ptp_rx = false; in i40e_ptp_set_timestamp_mode()
577 if (!(pf->hw_features & I40E_HW_PTP_L4_CAPABLE)) in i40e_ptp_set_timestamp_mode()
579 pf->ptp_rx = true; in i40e_ptp_set_timestamp_mode()
591 if (!(pf->hw_features & I40E_HW_PTP_L4_CAPABLE)) in i40e_ptp_set_timestamp_mode()
597 pf->ptp_rx = true; in i40e_ptp_set_timestamp_mode()
600 if (pf->hw_features & I40E_HW_PTP_L4_CAPABLE) { in i40e_ptp_set_timestamp_mode()
614 spin_lock_bh(&pf->ptp_rx_lock); in i40e_ptp_set_timestamp_mode()
621 pf->latch_event_flags = 0; in i40e_ptp_set_timestamp_mode()
622 spin_unlock_bh(&pf->ptp_rx_lock); in i40e_ptp_set_timestamp_mode()
626 if (pf->ptp_tx) in i40e_ptp_set_timestamp_mode()
633 if (pf->ptp_tx) in i40e_ptp_set_timestamp_mode()
669 int i40e_ptp_set_ts_config(struct i40e_pf *pf, struct ifreq *ifr) in i40e_ptp_set_ts_config() argument
674 if (!(pf->flags & I40E_FLAG_PTP)) in i40e_ptp_set_ts_config()
680 err = i40e_ptp_set_timestamp_mode(pf, &config); in i40e_ptp_set_ts_config()
685 pf->tstamp_config = config; in i40e_ptp_set_ts_config()
701 static long i40e_ptp_create_clock(struct i40e_pf *pf) in i40e_ptp_create_clock() argument
704 if (!IS_ERR_OR_NULL(pf->ptp_clock)) in i40e_ptp_create_clock()
707 strncpy(pf->ptp_caps.name, i40e_driver_name, in i40e_ptp_create_clock()
708 sizeof(pf->ptp_caps.name) - 1); in i40e_ptp_create_clock()
709 pf->ptp_caps.owner = THIS_MODULE; in i40e_ptp_create_clock()
710 pf->ptp_caps.max_adj = 999999999; in i40e_ptp_create_clock()
711 pf->ptp_caps.n_ext_ts = 0; in i40e_ptp_create_clock()
712 pf->ptp_caps.pps = 0; in i40e_ptp_create_clock()
713 pf->ptp_caps.adjfreq = i40e_ptp_adjfreq; in i40e_ptp_create_clock()
714 pf->ptp_caps.adjtime = i40e_ptp_adjtime; in i40e_ptp_create_clock()
715 pf->ptp_caps.gettime64 = i40e_ptp_gettime; in i40e_ptp_create_clock()
716 pf->ptp_caps.settime64 = i40e_ptp_settime; in i40e_ptp_create_clock()
717 pf->ptp_caps.enable = i40e_ptp_feature_enable; in i40e_ptp_create_clock()
720 pf->ptp_clock = ptp_clock_register(&pf->ptp_caps, &pf->pdev->dev); in i40e_ptp_create_clock()
721 if (IS_ERR(pf->ptp_clock)) in i40e_ptp_create_clock()
722 return PTR_ERR(pf->ptp_clock); in i40e_ptp_create_clock()
728 pf->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; in i40e_ptp_create_clock()
729 pf->tstamp_config.tx_type = HWTSTAMP_TX_OFF; in i40e_ptp_create_clock()
742 void i40e_ptp_init(struct i40e_pf *pf) in i40e_ptp_init() argument
744 struct net_device *netdev = pf->vsi[pf->lan_vsi]->netdev; in i40e_ptp_init()
745 struct i40e_hw *hw = &pf->hw; in i40e_ptp_init()
755 pf->flags &= ~I40E_FLAG_PTP; in i40e_ptp_init()
756 dev_info(&pf->pdev->dev, "%s: PTP not supported on %s\n", in i40e_ptp_init()
762 mutex_init(&pf->tmreg_lock); in i40e_ptp_init()
763 spin_lock_init(&pf->ptp_rx_lock); in i40e_ptp_init()
766 err = i40e_ptp_create_clock(pf); in i40e_ptp_init()
768 pf->ptp_clock = NULL; in i40e_ptp_init()
769 dev_err(&pf->pdev->dev, "%s: ptp_clock_register failed\n", in i40e_ptp_init()
771 } else if (pf->ptp_clock) { in i40e_ptp_init()
775 if (pf->hw.debug_mask & I40E_DEBUG_LAN) in i40e_ptp_init()
776 dev_info(&pf->pdev->dev, "PHC enabled\n"); in i40e_ptp_init()
777 pf->flags |= I40E_FLAG_PTP; in i40e_ptp_init()
788 i40e_ptp_set_increment(pf); in i40e_ptp_init()
791 i40e_ptp_set_timestamp_mode(pf, &pf->tstamp_config); in i40e_ptp_init()
795 i40e_ptp_settime(&pf->ptp_caps, &ts); in i40e_ptp_init()
806 void i40e_ptp_stop(struct i40e_pf *pf) in i40e_ptp_stop() argument
808 pf->flags &= ~I40E_FLAG_PTP; in i40e_ptp_stop()
809 pf->ptp_tx = false; in i40e_ptp_stop()
810 pf->ptp_rx = false; in i40e_ptp_stop()
812 if (pf->ptp_tx_skb) { in i40e_ptp_stop()
813 dev_kfree_skb_any(pf->ptp_tx_skb); in i40e_ptp_stop()
814 pf->ptp_tx_skb = NULL; in i40e_ptp_stop()
815 clear_bit_unlock(__I40E_PTP_TX_IN_PROGRESS, pf->state); in i40e_ptp_stop()
818 if (pf->ptp_clock) { in i40e_ptp_stop()
819 ptp_clock_unregister(pf->ptp_clock); in i40e_ptp_stop()
820 pf->ptp_clock = NULL; in i40e_ptp_stop()
821 dev_info(&pf->pdev->dev, "%s: removed PHC on %s\n", __func__, in i40e_ptp_stop()
822 pf->vsi[pf->lan_vsi]->netdev->name); in i40e_ptp_stop()