28 #include <linux/export.h>
86 #define IXGBE_INCVAL_10GB 0x66666666
87 #define IXGBE_INCVAL_1GB 0x40000000
88 #define IXGBE_INCVAL_100 0x50000000
90 #define IXGBE_INCVAL_SHIFT_10GB 28
91 #define IXGBE_INCVAL_SHIFT_1GB 24
92 #define IXGBE_INCVAL_SHIFT_100 21
94 #define IXGBE_INCVAL_SHIFT_82599 7
95 #define IXGBE_INCPER_SHIFT_82599 24
96 #define IXGBE_MAX_TIMEADJ_VALUE 0x7FFFFFFFFFFFFFFFULL
98 #define IXGBE_OVERFLOW_PERIOD (HZ * 30)
100 #ifndef NSECS_PER_SEC
101 #define NSECS_PER_SEC 1000000000ULL
123 int shift = adapter->cc.shift;
124 u32 esdp, tsauxc, clktiml, clktimh, trgttiml, trgttimh, rem;
125 u64 ns = 0, clock_edge = 0;
168 trgttiml = (
u32)clock_edge;
169 trgttimh = (
u32)(clock_edge >> 32);
233 diff = div_u64(freq, 1000000000ULL);
235 incval = neg_adj ? (incval - diff) : (incval + diff);
237 switch (hw->
mac.type) {
277 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
279 ixgbe_ptp_setup_sdp(adapter);
302 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
304 ts->
tv_sec = div_u64_rem(ns, 1000000000ULL, &remainder);
326 ns = ts->
tv_sec * 1000000000ULL;
332 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
334 ixgbe_ptp_setup_sdp(adapter);
359 if (rq->
type == PTP_CLK_REQ_PPS) {
360 switch (adapter->
hw.mac.type) {
367 ixgbe_ptp_setup_sdp(adapter);
390 switch (hw->
mac.type) {
411 unsigned long elapsed_jiffies = adapter->last_overflow_check -
jiffies;
416 ixgbe_ptp_gettime(&adapter->ptp_caps, &ts);
417 adapter->last_overflow_check =
jiffies;
466 if (skb->
len < offset)
503 if (!q_vector || !q_vector->
adapter)
522 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
524 memset(&shhwtstamps, 0,
sizeof(shhwtstamps));
525 shhwtstamps.
hwtstamp = ns_to_ktime(ns);
551 if (!q_vector || !q_vector->
adapter)
562 !ixgbe_ptp_match(skb, adapter->rx_hwtstamp_filter)))
589 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
591 shhwtstamps = skb_hwtstamps(skb);
592 shhwtstamps->
hwtstamp = ns_to_ktime(ns);
625 u32 tsync_rx_mtrl = 0;
688 if (tsync_rx_ctl | tsync_tx_ctl)
694 adapter->rx_hwtstamp_filter = config.
rx_filter;
736 regval |= tsync_tx_ctl;
742 regval |= tsync_rx_ctl;
754 return copy_to_user(ifr->ifr_data, &config,
sizeof(config)) ?
810 if (adapter->cycle_speed == cycle_speed && timinca)
823 switch (cycle_speed) {
844 switch (hw->
mac.type) {
866 adapter->cycle_speed = cycle_speed;
874 memset(&adapter->cc, 0,
sizeof(adapter->cc));
875 adapter->cc.read = ixgbe_ptp_read;
877 adapter->cc.shift = shift;
878 adapter->cc.mult = 1;
884 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
890 ixgbe_ptp_setup_sdp(adapter);
905 switch (adapter->
hw.mac.type) {
909 adapter->ptp_caps.max_adj = 250000000;
910 adapter->ptp_caps.n_alarm = 0;
911 adapter->ptp_caps.n_ext_ts = 0;
912 adapter->ptp_caps.n_per_out = 0;
913 adapter->ptp_caps.pps = 1;
914 adapter->ptp_caps.adjfreq = ixgbe_ptp_adjfreq;
915 adapter->ptp_caps.adjtime = ixgbe_ptp_adjtime;
916 adapter->ptp_caps.gettime = ixgbe_ptp_gettime;
917 adapter->ptp_caps.settime = ixgbe_ptp_settime;
918 adapter->ptp_caps.enable = ixgbe_ptp_enable;
923 adapter->ptp_caps.max_adj = 250000000;
924 adapter->ptp_caps.n_alarm = 0;
925 adapter->ptp_caps.n_ext_ts = 0;
926 adapter->ptp_caps.n_per_out = 0;
927 adapter->ptp_caps.pps = 0;
928 adapter->ptp_caps.adjfreq = ixgbe_ptp_adjfreq;
929 adapter->ptp_caps.adjtime = ixgbe_ptp_adjtime;
930 adapter->ptp_caps.gettime = ixgbe_ptp_gettime;
931 adapter->ptp_caps.settime = ixgbe_ptp_settime;
932 adapter->ptp_caps.enable = ixgbe_ptp_enable;
935 adapter->ptp_clock =
NULL;
940 if (ptp_filter_init(ptp_filter,
ARRAY_SIZE(ptp_filter)))
951 &adapter->
pdev->dev);
952 if (IS_ERR(adapter->ptp_clock)) {
953 adapter->ptp_clock =
NULL;
954 e_dev_err(
"ptp_clock_register failed\n");
973 ixgbe_ptp_setup_sdp(adapter);
975 if (adapter->ptp_clock) {
977 adapter->ptp_clock =
NULL;