1
2
3
4#include <linux/module.h>
5#include <linux/device.h>
6#include <linux/pci.h>
7#include <linux/ptp_classify.h>
8
9#include "igb.h"
10
11#define INCVALUE_MASK 0x7fffffff
12#define ISGN 0x80000000
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56#define IGB_SYSTIM_OVERFLOW_PERIOD (HZ * 60 * 9)
57#define IGB_PTP_TX_TIMEOUT (HZ * 15)
58#define INCPERIOD_82576 BIT(E1000_TIMINCA_16NS_SHIFT)
59#define INCVALUE_82576_MASK GENMASK(E1000_TIMINCA_16NS_SHIFT - 1, 0)
60#define INCVALUE_82576 (16u << IGB_82576_TSYNC_SHIFT)
61#define IGB_NBITS_82580 40
62
63static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter);
64
65
66static u64 igb_ptp_read_82576(const struct cyclecounter *cc)
67{
68 struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc);
69 struct e1000_hw *hw = &igb->hw;
70 u64 val;
71 u32 lo, hi;
72
73 lo = rd32(E1000_SYSTIML);
74 hi = rd32(E1000_SYSTIMH);
75
76 val = ((u64) hi) << 32;
77 val |= lo;
78
79 return val;
80}
81
82
83static u64 igb_ptp_read_82580(const struct cyclecounter *cc)
84{
85 struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc);
86 struct e1000_hw *hw = &igb->hw;
87 u32 lo, hi;
88 u64 val;
89
90
91
92
93
94 rd32(E1000_SYSTIMR);
95 lo = rd32(E1000_SYSTIML);
96 hi = rd32(E1000_SYSTIMH);
97
98 val = ((u64) hi) << 32;
99 val |= lo;
100
101 return val;
102}
103
104
105static void igb_ptp_read_i210(struct igb_adapter *adapter,
106 struct timespec64 *ts)
107{
108 struct e1000_hw *hw = &adapter->hw;
109 u32 sec, nsec;
110
111
112
113
114
115 rd32(E1000_SYSTIMR);
116 nsec = rd32(E1000_SYSTIML);
117 sec = rd32(E1000_SYSTIMH);
118
119 ts->tv_sec = sec;
120 ts->tv_nsec = nsec;
121}
122
123static void igb_ptp_write_i210(struct igb_adapter *adapter,
124 const struct timespec64 *ts)
125{
126 struct e1000_hw *hw = &adapter->hw;
127
128
129
130
131 wr32(E1000_SYSTIML, ts->tv_nsec);
132 wr32(E1000_SYSTIMH, (u32)ts->tv_sec);
133}
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152static void igb_ptp_systim_to_hwtstamp(struct igb_adapter *adapter,
153 struct skb_shared_hwtstamps *hwtstamps,
154 u64 systim)
155{
156 unsigned long flags;
157 u64 ns;
158
159 switch (adapter->hw.mac.type) {
160 case e1000_82576:
161 case e1000_82580:
162 case e1000_i354:
163 case e1000_i350:
164 spin_lock_irqsave(&adapter->tmreg_lock, flags);
165
166 ns = timecounter_cyc2time(&adapter->tc, systim);
167
168 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
169
170 memset(hwtstamps, 0, sizeof(*hwtstamps));
171 hwtstamps->hwtstamp = ns_to_ktime(ns);
172 break;
173 case e1000_i210:
174 case e1000_i211:
175 memset(hwtstamps, 0, sizeof(*hwtstamps));
176
177 hwtstamps->hwtstamp = ktime_set(systim >> 32,
178 systim & 0xFFFFFFFF);
179 break;
180 default:
181 break;
182 }
183}
184
185
186static int igb_ptp_adjfreq_82576(struct ptp_clock_info *ptp, s32 ppb)
187{
188 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
189 ptp_caps);
190 struct e1000_hw *hw = &igb->hw;
191 int neg_adj = 0;
192 u64 rate;
193 u32 incvalue;
194
195 if (ppb < 0) {
196 neg_adj = 1;
197 ppb = -ppb;
198 }
199 rate = ppb;
200 rate <<= 14;
201 rate = div_u64(rate, 1953125);
202
203 incvalue = 16 << IGB_82576_TSYNC_SHIFT;
204
205 if (neg_adj)
206 incvalue -= rate;
207 else
208 incvalue += rate;
209
210 wr32(E1000_TIMINCA, INCPERIOD_82576 | (incvalue & INCVALUE_82576_MASK));
211
212 return 0;
213}
214
215static int igb_ptp_adjfine_82580(struct ptp_clock_info *ptp, long scaled_ppm)
216{
217 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
218 ptp_caps);
219 struct e1000_hw *hw = &igb->hw;
220 int neg_adj = 0;
221 u64 rate;
222 u32 inca;
223
224 if (scaled_ppm < 0) {
225 neg_adj = 1;
226 scaled_ppm = -scaled_ppm;
227 }
228 rate = scaled_ppm;
229 rate <<= 13;
230 rate = div_u64(rate, 15625);
231
232 inca = rate & INCVALUE_MASK;
233 if (neg_adj)
234 inca |= ISGN;
235
236 wr32(E1000_TIMINCA, inca);
237
238 return 0;
239}
240
241static int igb_ptp_adjtime_82576(struct ptp_clock_info *ptp, s64 delta)
242{
243 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
244 ptp_caps);
245 unsigned long flags;
246
247 spin_lock_irqsave(&igb->tmreg_lock, flags);
248 timecounter_adjtime(&igb->tc, delta);
249 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
250
251 return 0;
252}
253
254static int igb_ptp_adjtime_i210(struct ptp_clock_info *ptp, s64 delta)
255{
256 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
257 ptp_caps);
258 unsigned long flags;
259 struct timespec64 now, then = ns_to_timespec64(delta);
260
261 spin_lock_irqsave(&igb->tmreg_lock, flags);
262
263 igb_ptp_read_i210(igb, &now);
264 now = timespec64_add(now, then);
265 igb_ptp_write_i210(igb, (const struct timespec64 *)&now);
266
267 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
268
269 return 0;
270}
271
272static int igb_ptp_gettime_82576(struct ptp_clock_info *ptp,
273 struct timespec64 *ts)
274{
275 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
276 ptp_caps);
277 unsigned long flags;
278 u64 ns;
279
280 spin_lock_irqsave(&igb->tmreg_lock, flags);
281
282 ns = timecounter_read(&igb->tc);
283
284 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
285
286 *ts = ns_to_timespec64(ns);
287
288 return 0;
289}
290
291static int igb_ptp_gettime_i210(struct ptp_clock_info *ptp,
292 struct timespec64 *ts)
293{
294 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
295 ptp_caps);
296 unsigned long flags;
297
298 spin_lock_irqsave(&igb->tmreg_lock, flags);
299
300 igb_ptp_read_i210(igb, ts);
301
302 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
303
304 return 0;
305}
306
307static int igb_ptp_settime_82576(struct ptp_clock_info *ptp,
308 const struct timespec64 *ts)
309{
310 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
311 ptp_caps);
312 unsigned long flags;
313 u64 ns;
314
315 ns = timespec64_to_ns(ts);
316
317 spin_lock_irqsave(&igb->tmreg_lock, flags);
318
319 timecounter_init(&igb->tc, &igb->cc, ns);
320
321 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
322
323 return 0;
324}
325
326static int igb_ptp_settime_i210(struct ptp_clock_info *ptp,
327 const struct timespec64 *ts)
328{
329 struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
330 ptp_caps);
331 unsigned long flags;
332
333 spin_lock_irqsave(&igb->tmreg_lock, flags);
334
335 igb_ptp_write_i210(igb, ts);
336
337 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
338
339 return 0;
340}
341
342static void igb_pin_direction(int pin, int input, u32 *ctrl, u32 *ctrl_ext)
343{
344 u32 *ptr = pin < 2 ? ctrl : ctrl_ext;
345 static const u32 mask[IGB_N_SDP] = {
346 E1000_CTRL_SDP0_DIR,
347 E1000_CTRL_SDP1_DIR,
348 E1000_CTRL_EXT_SDP2_DIR,
349 E1000_CTRL_EXT_SDP3_DIR,
350 };
351
352 if (input)
353 *ptr &= ~mask[pin];
354 else
355 *ptr |= mask[pin];
356}
357
358static void igb_pin_extts(struct igb_adapter *igb, int chan, int pin)
359{
360 static const u32 aux0_sel_sdp[IGB_N_SDP] = {
361 AUX0_SEL_SDP0, AUX0_SEL_SDP1, AUX0_SEL_SDP2, AUX0_SEL_SDP3,
362 };
363 static const u32 aux1_sel_sdp[IGB_N_SDP] = {
364 AUX1_SEL_SDP0, AUX1_SEL_SDP1, AUX1_SEL_SDP2, AUX1_SEL_SDP3,
365 };
366 static const u32 ts_sdp_en[IGB_N_SDP] = {
367 TS_SDP0_EN, TS_SDP1_EN, TS_SDP2_EN, TS_SDP3_EN,
368 };
369 struct e1000_hw *hw = &igb->hw;
370 u32 ctrl, ctrl_ext, tssdp = 0;
371
372 ctrl = rd32(E1000_CTRL);
373 ctrl_ext = rd32(E1000_CTRL_EXT);
374 tssdp = rd32(E1000_TSSDP);
375
376 igb_pin_direction(pin, 1, &ctrl, &ctrl_ext);
377
378
379 tssdp &= ~ts_sdp_en[pin];
380
381 if (chan == 1) {
382 tssdp &= ~AUX1_SEL_SDP3;
383 tssdp |= aux1_sel_sdp[pin] | AUX1_TS_SDP_EN;
384 } else {
385 tssdp &= ~AUX0_SEL_SDP3;
386 tssdp |= aux0_sel_sdp[pin] | AUX0_TS_SDP_EN;
387 }
388
389 wr32(E1000_TSSDP, tssdp);
390 wr32(E1000_CTRL, ctrl);
391 wr32(E1000_CTRL_EXT, ctrl_ext);
392}
393
394static void igb_pin_perout(struct igb_adapter *igb, int chan, int pin, int freq)
395{
396 static const u32 aux0_sel_sdp[IGB_N_SDP] = {
397 AUX0_SEL_SDP0, AUX0_SEL_SDP1, AUX0_SEL_SDP2, AUX0_SEL_SDP3,
398 };
399 static const u32 aux1_sel_sdp[IGB_N_SDP] = {
400 AUX1_SEL_SDP0, AUX1_SEL_SDP1, AUX1_SEL_SDP2, AUX1_SEL_SDP3,
401 };
402 static const u32 ts_sdp_en[IGB_N_SDP] = {
403 TS_SDP0_EN, TS_SDP1_EN, TS_SDP2_EN, TS_SDP3_EN,
404 };
405 static const u32 ts_sdp_sel_tt0[IGB_N_SDP] = {
406 TS_SDP0_SEL_TT0, TS_SDP1_SEL_TT0,
407 TS_SDP2_SEL_TT0, TS_SDP3_SEL_TT0,
408 };
409 static const u32 ts_sdp_sel_tt1[IGB_N_SDP] = {
410 TS_SDP0_SEL_TT1, TS_SDP1_SEL_TT1,
411 TS_SDP2_SEL_TT1, TS_SDP3_SEL_TT1,
412 };
413 static const u32 ts_sdp_sel_fc0[IGB_N_SDP] = {
414 TS_SDP0_SEL_FC0, TS_SDP1_SEL_FC0,
415 TS_SDP2_SEL_FC0, TS_SDP3_SEL_FC0,
416 };
417 static const u32 ts_sdp_sel_fc1[IGB_N_SDP] = {
418 TS_SDP0_SEL_FC1, TS_SDP1_SEL_FC1,
419 TS_SDP2_SEL_FC1, TS_SDP3_SEL_FC1,
420 };
421 static const u32 ts_sdp_sel_clr[IGB_N_SDP] = {
422 TS_SDP0_SEL_FC1, TS_SDP1_SEL_FC1,
423 TS_SDP2_SEL_FC1, TS_SDP3_SEL_FC1,
424 };
425 struct e1000_hw *hw = &igb->hw;
426 u32 ctrl, ctrl_ext, tssdp = 0;
427
428 ctrl = rd32(E1000_CTRL);
429 ctrl_ext = rd32(E1000_CTRL_EXT);
430 tssdp = rd32(E1000_TSSDP);
431
432 igb_pin_direction(pin, 0, &ctrl, &ctrl_ext);
433
434
435 if ((tssdp & AUX0_SEL_SDP3) == aux0_sel_sdp[pin])
436 tssdp &= ~AUX0_TS_SDP_EN;
437
438 if ((tssdp & AUX1_SEL_SDP3) == aux1_sel_sdp[pin])
439 tssdp &= ~AUX1_TS_SDP_EN;
440
441 tssdp &= ~ts_sdp_sel_clr[pin];
442 if (freq) {
443 if (chan == 1)
444 tssdp |= ts_sdp_sel_fc1[pin];
445 else
446 tssdp |= ts_sdp_sel_fc0[pin];
447 } else {
448 if (chan == 1)
449 tssdp |= ts_sdp_sel_tt1[pin];
450 else
451 tssdp |= ts_sdp_sel_tt0[pin];
452 }
453 tssdp |= ts_sdp_en[pin];
454
455 wr32(E1000_TSSDP, tssdp);
456 wr32(E1000_CTRL, ctrl);
457 wr32(E1000_CTRL_EXT, ctrl_ext);
458}
459
460static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp,
461 struct ptp_clock_request *rq, int on)
462{
463 struct igb_adapter *igb =
464 container_of(ptp, struct igb_adapter, ptp_caps);
465 struct e1000_hw *hw = &igb->hw;
466 u32 tsauxc, tsim, tsauxc_mask, tsim_mask, trgttiml, trgttimh, freqout;
467 unsigned long flags;
468 struct timespec64 ts;
469 int use_freq = 0, pin = -1;
470 s64 ns;
471
472 switch (rq->type) {
473 case PTP_CLK_REQ_EXTTS:
474 if (on) {
475 pin = ptp_find_pin(igb->ptp_clock, PTP_PF_EXTTS,
476 rq->extts.index);
477 if (pin < 0)
478 return -EBUSY;
479 }
480 if (rq->extts.index == 1) {
481 tsauxc_mask = TSAUXC_EN_TS1;
482 tsim_mask = TSINTR_AUTT1;
483 } else {
484 tsauxc_mask = TSAUXC_EN_TS0;
485 tsim_mask = TSINTR_AUTT0;
486 }
487 spin_lock_irqsave(&igb->tmreg_lock, flags);
488 tsauxc = rd32(E1000_TSAUXC);
489 tsim = rd32(E1000_TSIM);
490 if (on) {
491 igb_pin_extts(igb, rq->extts.index, pin);
492 tsauxc |= tsauxc_mask;
493 tsim |= tsim_mask;
494 } else {
495 tsauxc &= ~tsauxc_mask;
496 tsim &= ~tsim_mask;
497 }
498 wr32(E1000_TSAUXC, tsauxc);
499 wr32(E1000_TSIM, tsim);
500 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
501 return 0;
502
503 case PTP_CLK_REQ_PEROUT:
504 if (on) {
505 pin = ptp_find_pin(igb->ptp_clock, PTP_PF_PEROUT,
506 rq->perout.index);
507 if (pin < 0)
508 return -EBUSY;
509 }
510 ts.tv_sec = rq->perout.period.sec;
511 ts.tv_nsec = rq->perout.period.nsec;
512 ns = timespec64_to_ns(&ts);
513 ns = ns >> 1;
514 if (on && ((ns <= 70000000LL) || (ns == 125000000LL) ||
515 (ns == 250000000LL) || (ns == 500000000LL))) {
516 if (ns < 8LL)
517 return -EINVAL;
518 use_freq = 1;
519 }
520 ts = ns_to_timespec64(ns);
521 if (rq->perout.index == 1) {
522 if (use_freq) {
523 tsauxc_mask = TSAUXC_EN_CLK1 | TSAUXC_ST1;
524 tsim_mask = 0;
525 } else {
526 tsauxc_mask = TSAUXC_EN_TT1;
527 tsim_mask = TSINTR_TT1;
528 }
529 trgttiml = E1000_TRGTTIML1;
530 trgttimh = E1000_TRGTTIMH1;
531 freqout = E1000_FREQOUT1;
532 } else {
533 if (use_freq) {
534 tsauxc_mask = TSAUXC_EN_CLK0 | TSAUXC_ST0;
535 tsim_mask = 0;
536 } else {
537 tsauxc_mask = TSAUXC_EN_TT0;
538 tsim_mask = TSINTR_TT0;
539 }
540 trgttiml = E1000_TRGTTIML0;
541 trgttimh = E1000_TRGTTIMH0;
542 freqout = E1000_FREQOUT0;
543 }
544 spin_lock_irqsave(&igb->tmreg_lock, flags);
545 tsauxc = rd32(E1000_TSAUXC);
546 tsim = rd32(E1000_TSIM);
547 if (rq->perout.index == 1) {
548 tsauxc &= ~(TSAUXC_EN_TT1 | TSAUXC_EN_CLK1 | TSAUXC_ST1);
549 tsim &= ~TSINTR_TT1;
550 } else {
551 tsauxc &= ~(TSAUXC_EN_TT0 | TSAUXC_EN_CLK0 | TSAUXC_ST0);
552 tsim &= ~TSINTR_TT0;
553 }
554 if (on) {
555 int i = rq->perout.index;
556 igb_pin_perout(igb, i, pin, use_freq);
557 igb->perout[i].start.tv_sec = rq->perout.start.sec;
558 igb->perout[i].start.tv_nsec = rq->perout.start.nsec;
559 igb->perout[i].period.tv_sec = ts.tv_sec;
560 igb->perout[i].period.tv_nsec = ts.tv_nsec;
561 wr32(trgttimh, rq->perout.start.sec);
562 wr32(trgttiml, rq->perout.start.nsec);
563 if (use_freq)
564 wr32(freqout, ns);
565 tsauxc |= tsauxc_mask;
566 tsim |= tsim_mask;
567 }
568 wr32(E1000_TSAUXC, tsauxc);
569 wr32(E1000_TSIM, tsim);
570 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
571 return 0;
572
573 case PTP_CLK_REQ_PPS:
574 spin_lock_irqsave(&igb->tmreg_lock, flags);
575 tsim = rd32(E1000_TSIM);
576 if (on)
577 tsim |= TSINTR_SYS_WRAP;
578 else
579 tsim &= ~TSINTR_SYS_WRAP;
580 igb->pps_sys_wrap_on = !!on;
581 wr32(E1000_TSIM, tsim);
582 spin_unlock_irqrestore(&igb->tmreg_lock, flags);
583 return 0;
584 }
585
586 return -EOPNOTSUPP;
587}
588
589static int igb_ptp_feature_enable(struct ptp_clock_info *ptp,
590 struct ptp_clock_request *rq, int on)
591{
592 return -EOPNOTSUPP;
593}
594
595static int igb_ptp_verify_pin(struct ptp_clock_info *ptp, unsigned int pin,
596 enum ptp_pin_function func, unsigned int chan)
597{
598 switch (func) {
599 case PTP_PF_NONE:
600 case PTP_PF_EXTTS:
601 case PTP_PF_PEROUT:
602 break;
603 case PTP_PF_PHYSYNC:
604 return -1;
605 }
606 return 0;
607}
608
609
610
611
612
613
614
615
616static void igb_ptp_tx_work(struct work_struct *work)
617{
618 struct igb_adapter *adapter = container_of(work, struct igb_adapter,
619 ptp_tx_work);
620 struct e1000_hw *hw = &adapter->hw;
621 u32 tsynctxctl;
622
623 if (!adapter->ptp_tx_skb)
624 return;
625
626 if (time_is_before_jiffies(adapter->ptp_tx_start +
627 IGB_PTP_TX_TIMEOUT)) {
628 dev_kfree_skb_any(adapter->ptp_tx_skb);
629 adapter->ptp_tx_skb = NULL;
630 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state);
631 adapter->tx_hwtstamp_timeouts++;
632
633
634
635 rd32(E1000_TXSTMPH);
636 dev_warn(&adapter->pdev->dev, "clearing Tx timestamp hang\n");
637 return;
638 }
639
640 tsynctxctl = rd32(E1000_TSYNCTXCTL);
641 if (tsynctxctl & E1000_TSYNCTXCTL_VALID)
642 igb_ptp_tx_hwtstamp(adapter);
643 else
644
645 schedule_work(&adapter->ptp_tx_work);
646}
647
648static void igb_ptp_overflow_check(struct work_struct *work)
649{
650 struct igb_adapter *igb =
651 container_of(work, struct igb_adapter, ptp_overflow_work.work);
652 struct timespec64 ts;
653
654 igb->ptp_caps.gettime64(&igb->ptp_caps, &ts);
655
656 pr_debug("igb overflow check at %lld.%09lu\n",
657 (long long) ts.tv_sec, ts.tv_nsec);
658
659 schedule_delayed_work(&igb->ptp_overflow_work,
660 IGB_SYSTIM_OVERFLOW_PERIOD);
661}
662
663
664
665
666
667
668
669
670
671
672void igb_ptp_rx_hang(struct igb_adapter *adapter)
673{
674 struct e1000_hw *hw = &adapter->hw;
675 u32 tsyncrxctl = rd32(E1000_TSYNCRXCTL);
676 unsigned long rx_event;
677
678
679 if (hw->mac.type != e1000_82576)
680 return;
681
682
683
684
685 if (!(tsyncrxctl & E1000_TSYNCRXCTL_VALID)) {
686 adapter->last_rx_ptp_check = jiffies;
687 return;
688 }
689
690
691 rx_event = adapter->last_rx_ptp_check;
692 if (time_after(adapter->last_rx_timestamp, rx_event))
693 rx_event = adapter->last_rx_timestamp;
694
695
696 if (time_is_before_jiffies(rx_event + 5 * HZ)) {
697 rd32(E1000_RXSTMPH);
698 adapter->last_rx_ptp_check = jiffies;
699 adapter->rx_hwtstamp_cleared++;
700 dev_warn(&adapter->pdev->dev, "clearing Rx timestamp hang\n");
701 }
702}
703
704
705
706
707
708void igb_ptp_tx_hang(struct igb_adapter *adapter)
709{
710 struct e1000_hw *hw = &adapter->hw;
711 bool timeout = time_is_before_jiffies(adapter->ptp_tx_start +
712 IGB_PTP_TX_TIMEOUT);
713
714 if (!adapter->ptp_tx_skb)
715 return;
716
717 if (!test_bit(__IGB_PTP_TX_IN_PROGRESS, &adapter->state))
718 return;
719
720
721
722
723
724 if (timeout) {
725 cancel_work_sync(&adapter->ptp_tx_work);
726 dev_kfree_skb_any(adapter->ptp_tx_skb);
727 adapter->ptp_tx_skb = NULL;
728 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state);
729 adapter->tx_hwtstamp_timeouts++;
730
731
732
733 rd32(E1000_TXSTMPH);
734 dev_warn(&adapter->pdev->dev, "clearing Tx timestamp hang\n");
735 }
736}
737
738
739
740
741
742
743
744
745
746static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)
747{
748 struct sk_buff *skb = adapter->ptp_tx_skb;
749 struct e1000_hw *hw = &adapter->hw;
750 struct skb_shared_hwtstamps shhwtstamps;
751 u64 regval;
752 int adjust = 0;
753
754 regval = rd32(E1000_TXSTMPL);
755 regval |= (u64)rd32(E1000_TXSTMPH) << 32;
756
757 igb_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval);
758
759 if (adapter->hw.mac.type == e1000_i210) {
760 switch (adapter->link_speed) {
761 case SPEED_10:
762 adjust = IGB_I210_TX_LATENCY_10;
763 break;
764 case SPEED_100:
765 adjust = IGB_I210_TX_LATENCY_100;
766 break;
767 case SPEED_1000:
768 adjust = IGB_I210_TX_LATENCY_1000;
769 break;
770 }
771 }
772
773 shhwtstamps.hwtstamp =
774 ktime_add_ns(shhwtstamps.hwtstamp, adjust);
775
776
777
778
779
780
781 adapter->ptp_tx_skb = NULL;
782 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state);
783
784
785 skb_tstamp_tx(skb, &shhwtstamps);
786 dev_kfree_skb_any(skb);
787}
788
789
790
791
792
793
794
795
796
797
798
799void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,
800 struct sk_buff *skb)
801{
802 __le64 *regval = (__le64 *)va;
803 struct igb_adapter *adapter = q_vector->adapter;
804 int adjust = 0;
805
806
807
808
809
810 igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb),
811 le64_to_cpu(regval[1]));
812
813
814 if (adapter->hw.mac.type == e1000_i210) {
815 switch (adapter->link_speed) {
816 case SPEED_10:
817 adjust = IGB_I210_RX_LATENCY_10;
818 break;
819 case SPEED_100:
820 adjust = IGB_I210_RX_LATENCY_100;
821 break;
822 case SPEED_1000:
823 adjust = IGB_I210_RX_LATENCY_1000;
824 break;
825 }
826 }
827 skb_hwtstamps(skb)->hwtstamp =
828 ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
829}
830
831
832
833
834
835
836
837
838
839void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector,
840 struct sk_buff *skb)
841{
842 struct igb_adapter *adapter = q_vector->adapter;
843 struct e1000_hw *hw = &adapter->hw;
844 u64 regval;
845 int adjust = 0;
846
847
848
849
850
851
852
853
854
855
856
857 if (!(rd32(E1000_TSYNCRXCTL) & E1000_TSYNCRXCTL_VALID))
858 return;
859
860 regval = rd32(E1000_RXSTMPL);
861 regval |= (u64)rd32(E1000_RXSTMPH) << 32;
862
863 igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval);
864
865
866 if (adapter->hw.mac.type == e1000_i210) {
867 switch (adapter->link_speed) {
868 case SPEED_10:
869 adjust = IGB_I210_RX_LATENCY_10;
870 break;
871 case SPEED_100:
872 adjust = IGB_I210_RX_LATENCY_100;
873 break;
874 case SPEED_1000:
875 adjust = IGB_I210_RX_LATENCY_1000;
876 break;
877 }
878 }
879 skb_hwtstamps(skb)->hwtstamp =
880 ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust);
881
882
883
884
885 adapter->last_rx_timestamp = jiffies;
886}
887
888
889
890
891
892
893
894
895
896
897int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr)
898{
899 struct igb_adapter *adapter = netdev_priv(netdev);
900 struct hwtstamp_config *config = &adapter->tstamp_config;
901
902 return copy_to_user(ifr->ifr_data, config, sizeof(*config)) ?
903 -EFAULT : 0;
904}
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923static int igb_ptp_set_timestamp_mode(struct igb_adapter *adapter,
924 struct hwtstamp_config *config)
925{
926 struct e1000_hw *hw = &adapter->hw;
927 u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED;
928 u32 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED;
929 u32 tsync_rx_cfg = 0;
930 bool is_l4 = false;
931 bool is_l2 = false;
932 u32 regval;
933
934
935 if (config->flags)
936 return -EINVAL;
937
938 switch (config->tx_type) {
939 case HWTSTAMP_TX_OFF:
940 tsync_tx_ctl = 0;
941 case HWTSTAMP_TX_ON:
942 break;
943 default:
944 return -ERANGE;
945 }
946
947 switch (config->rx_filter) {
948 case HWTSTAMP_FILTER_NONE:
949 tsync_rx_ctl = 0;
950 break;
951 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
952 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1;
953 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE;
954 is_l4 = true;
955 break;
956 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
957 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1;
958 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE;
959 is_l4 = true;
960 break;
961 case HWTSTAMP_FILTER_PTP_V2_EVENT:
962 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
963 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
964 case HWTSTAMP_FILTER_PTP_V2_SYNC:
965 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
966 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
967 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
968 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
969 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
970 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2;
971 config->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
972 is_l2 = true;
973 is_l4 = true;
974 break;
975 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
976 case HWTSTAMP_FILTER_NTP_ALL:
977 case HWTSTAMP_FILTER_ALL:
978
979
980
981 if (hw->mac.type != e1000_82576) {
982 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
983 config->rx_filter = HWTSTAMP_FILTER_ALL;
984 break;
985 }
986
987 default:
988 config->rx_filter = HWTSTAMP_FILTER_NONE;
989 return -ERANGE;
990 }
991
992 if (hw->mac.type == e1000_82575) {
993 if (tsync_rx_ctl | tsync_tx_ctl)
994 return -EINVAL;
995 return 0;
996 }
997
998
999
1000
1001
1002 if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) {
1003 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED;
1004 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL;
1005 config->rx_filter = HWTSTAMP_FILTER_ALL;
1006 is_l2 = true;
1007 is_l4 = true;
1008
1009 if ((hw->mac.type == e1000_i210) ||
1010 (hw->mac.type == e1000_i211)) {
1011 regval = rd32(E1000_RXPBS);
1012 regval |= E1000_RXPBS_CFG_TS_EN;
1013 wr32(E1000_RXPBS, regval);
1014 }
1015 }
1016
1017
1018 regval = rd32(E1000_TSYNCTXCTL);
1019 regval &= ~E1000_TSYNCTXCTL_ENABLED;
1020 regval |= tsync_tx_ctl;
1021 wr32(E1000_TSYNCTXCTL, regval);
1022
1023
1024 regval = rd32(E1000_TSYNCRXCTL);
1025 regval &= ~(E1000_TSYNCRXCTL_ENABLED | E1000_TSYNCRXCTL_TYPE_MASK);
1026 regval |= tsync_rx_ctl;
1027 wr32(E1000_TSYNCRXCTL, regval);
1028
1029
1030 wr32(E1000_TSYNCRXCFG, tsync_rx_cfg);
1031
1032
1033 if (is_l2)
1034 wr32(E1000_ETQF(IGB_ETQF_FILTER_1588),
1035 (E1000_ETQF_FILTER_ENABLE |
1036 E1000_ETQF_1588 |
1037 ETH_P_1588));
1038 else
1039 wr32(E1000_ETQF(IGB_ETQF_FILTER_1588), 0);
1040
1041
1042 if (is_l4) {
1043 u32 ftqf = (IPPROTO_UDP
1044 | E1000_FTQF_VF_BP
1045 | E1000_FTQF_1588_TIME_STAMP
1046 | E1000_FTQF_MASK);
1047 ftqf &= ~E1000_FTQF_MASK_PROTO_BP;
1048
1049 wr32(E1000_IMIR(3), htons(PTP_EV_PORT));
1050 wr32(E1000_IMIREXT(3),
1051 (E1000_IMIREXT_SIZE_BP | E1000_IMIREXT_CTRL_BP));
1052 if (hw->mac.type == e1000_82576) {
1053
1054 wr32(E1000_SPQF(3), htons(PTP_EV_PORT));
1055 ftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP;
1056 }
1057 wr32(E1000_FTQF(3), ftqf);
1058 } else {
1059 wr32(E1000_FTQF(3), E1000_FTQF_MASK);
1060 }
1061 wrfl();
1062
1063
1064 regval = rd32(E1000_TXSTMPL);
1065 regval = rd32(E1000_TXSTMPH);
1066 regval = rd32(E1000_RXSTMPL);
1067 regval = rd32(E1000_RXSTMPH);
1068
1069 return 0;
1070}
1071
1072
1073
1074
1075
1076
1077
1078int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr)
1079{
1080 struct igb_adapter *adapter = netdev_priv(netdev);
1081 struct hwtstamp_config config;
1082 int err;
1083
1084 if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
1085 return -EFAULT;
1086
1087 err = igb_ptp_set_timestamp_mode(adapter, &config);
1088 if (err)
1089 return err;
1090
1091
1092 memcpy(&adapter->tstamp_config, &config,
1093 sizeof(adapter->tstamp_config));
1094
1095 return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
1096 -EFAULT : 0;
1097}
1098
1099
1100
1101
1102
1103
1104
1105
1106void igb_ptp_init(struct igb_adapter *adapter)
1107{
1108 struct e1000_hw *hw = &adapter->hw;
1109 struct net_device *netdev = adapter->netdev;
1110 int i;
1111
1112 switch (hw->mac.type) {
1113 case e1000_82576:
1114 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr);
1115 adapter->ptp_caps.owner = THIS_MODULE;
1116 adapter->ptp_caps.max_adj = 999999881;
1117 adapter->ptp_caps.n_ext_ts = 0;
1118 adapter->ptp_caps.pps = 0;
1119 adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82576;
1120 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576;
1121 adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576;
1122 adapter->ptp_caps.settime64 = igb_ptp_settime_82576;
1123 adapter->ptp_caps.enable = igb_ptp_feature_enable;
1124 adapter->cc.read = igb_ptp_read_82576;
1125 adapter->cc.mask = CYCLECOUNTER_MASK(64);
1126 adapter->cc.mult = 1;
1127 adapter->cc.shift = IGB_82576_TSYNC_SHIFT;
1128 adapter->ptp_flags |= IGB_PTP_OVERFLOW_CHECK;
1129 break;
1130 case e1000_82580:
1131 case e1000_i354:
1132 case e1000_i350:
1133 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr);
1134 adapter->ptp_caps.owner = THIS_MODULE;
1135 adapter->ptp_caps.max_adj = 62499999;
1136 adapter->ptp_caps.n_ext_ts = 0;
1137 adapter->ptp_caps.pps = 0;
1138 adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580;
1139 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576;
1140 adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576;
1141 adapter->ptp_caps.settime64 = igb_ptp_settime_82576;
1142 adapter->ptp_caps.enable = igb_ptp_feature_enable;
1143 adapter->cc.read = igb_ptp_read_82580;
1144 adapter->cc.mask = CYCLECOUNTER_MASK(IGB_NBITS_82580);
1145 adapter->cc.mult = 1;
1146 adapter->cc.shift = 0;
1147 adapter->ptp_flags |= IGB_PTP_OVERFLOW_CHECK;
1148 break;
1149 case e1000_i210:
1150 case e1000_i211:
1151 for (i = 0; i < IGB_N_SDP; i++) {
1152 struct ptp_pin_desc *ppd = &adapter->sdp_config[i];
1153
1154 snprintf(ppd->name, sizeof(ppd->name), "SDP%d", i);
1155 ppd->index = i;
1156 ppd->func = PTP_PF_NONE;
1157 }
1158 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr);
1159 adapter->ptp_caps.owner = THIS_MODULE;
1160 adapter->ptp_caps.max_adj = 62499999;
1161 adapter->ptp_caps.n_ext_ts = IGB_N_EXTTS;
1162 adapter->ptp_caps.n_per_out = IGB_N_PEROUT;
1163 adapter->ptp_caps.n_pins = IGB_N_SDP;
1164 adapter->ptp_caps.pps = 1;
1165 adapter->ptp_caps.pin_config = adapter->sdp_config;
1166 adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580;
1167 adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210;
1168 adapter->ptp_caps.gettime64 = igb_ptp_gettime_i210;
1169 adapter->ptp_caps.settime64 = igb_ptp_settime_i210;
1170 adapter->ptp_caps.enable = igb_ptp_feature_enable_i210;
1171 adapter->ptp_caps.verify = igb_ptp_verify_pin;
1172 break;
1173 default:
1174 adapter->ptp_clock = NULL;
1175 return;
1176 }
1177
1178 spin_lock_init(&adapter->tmreg_lock);
1179 INIT_WORK(&adapter->ptp_tx_work, igb_ptp_tx_work);
1180
1181 if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK)
1182 INIT_DELAYED_WORK(&adapter->ptp_overflow_work,
1183 igb_ptp_overflow_check);
1184
1185 adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
1186 adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF;
1187
1188 igb_ptp_reset(adapter);
1189
1190 adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps,
1191 &adapter->pdev->dev);
1192 if (IS_ERR(adapter->ptp_clock)) {
1193 adapter->ptp_clock = NULL;
1194 dev_err(&adapter->pdev->dev, "ptp_clock_register failed\n");
1195 } else if (adapter->ptp_clock) {
1196 dev_info(&adapter->pdev->dev, "added PHC on %s\n",
1197 adapter->netdev->name);
1198 adapter->ptp_flags |= IGB_PTP_ENABLED;
1199 }
1200}
1201
1202
1203
1204
1205
1206
1207
1208
1209void igb_ptp_suspend(struct igb_adapter *adapter)
1210{
1211 if (!(adapter->ptp_flags & IGB_PTP_ENABLED))
1212 return;
1213
1214 if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK)
1215 cancel_delayed_work_sync(&adapter->ptp_overflow_work);
1216
1217 cancel_work_sync(&adapter->ptp_tx_work);
1218 if (adapter->ptp_tx_skb) {
1219 dev_kfree_skb_any(adapter->ptp_tx_skb);
1220 adapter->ptp_tx_skb = NULL;
1221 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state);
1222 }
1223}
1224
1225
1226
1227
1228
1229
1230
1231void igb_ptp_stop(struct igb_adapter *adapter)
1232{
1233 igb_ptp_suspend(adapter);
1234
1235 if (adapter->ptp_clock) {
1236 ptp_clock_unregister(adapter->ptp_clock);
1237 dev_info(&adapter->pdev->dev, "removed PHC on %s\n",
1238 adapter->netdev->name);
1239 adapter->ptp_flags &= ~IGB_PTP_ENABLED;
1240 }
1241}
1242
1243
1244
1245
1246
1247
1248
1249void igb_ptp_reset(struct igb_adapter *adapter)
1250{
1251 struct e1000_hw *hw = &adapter->hw;
1252 unsigned long flags;
1253
1254
1255 igb_ptp_set_timestamp_mode(adapter, &adapter->tstamp_config);
1256
1257 spin_lock_irqsave(&adapter->tmreg_lock, flags);
1258
1259 switch (adapter->hw.mac.type) {
1260 case e1000_82576:
1261
1262 wr32(E1000_TIMINCA, INCPERIOD_82576 | INCVALUE_82576);
1263 break;
1264 case e1000_82580:
1265 case e1000_i354:
1266 case e1000_i350:
1267 case e1000_i210:
1268 case e1000_i211:
1269 wr32(E1000_TSAUXC, 0x0);
1270 wr32(E1000_TSSDP, 0x0);
1271 wr32(E1000_TSIM,
1272 TSYNC_INTERRUPTS |
1273 (adapter->pps_sys_wrap_on ? TSINTR_SYS_WRAP : 0));
1274 wr32(E1000_IMS, E1000_IMS_TS);
1275 break;
1276 default:
1277
1278 goto out;
1279 }
1280
1281
1282 if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211)) {
1283 struct timespec64 ts = ktime_to_timespec64(ktime_get_real());
1284
1285 igb_ptp_write_i210(adapter, &ts);
1286 } else {
1287 timecounter_init(&adapter->tc, &adapter->cc,
1288 ktime_to_ns(ktime_get_real()));
1289 }
1290out:
1291 spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
1292
1293 wrfl();
1294
1295 if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK)
1296 schedule_delayed_work(&adapter->ptp_overflow_work,
1297 IGB_SYSTIM_OVERFLOW_PERIOD);
1298}
1299