1 // SPDX-License-Identifier: GPL-2.0+ 2 /* Copyright (C) 2011 Richard Cochran <richardcochran@gmail.com> */ 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 /* The 82580 timesync updates the system timer every 8ns by 8ns, 15 * and this update value cannot be reprogrammed. 16 * 17 * Neither the 82576 nor the 82580 offer registers wide enough to hold 18 * nanoseconds time values for very long. For the 82580, SYSTIM always 19 * counts nanoseconds, but the upper 24 bits are not available. The 20 * frequency is adjusted by changing the 32 bit fractional nanoseconds 21 * register, TIMINCA. 22 * 23 * For the 82576, the SYSTIM register time unit is affect by the 24 * choice of the 24 bit TININCA:IV (incvalue) field. Five bits of this 25 * field are needed to provide the nominal 16 nanosecond period, 26 * leaving 19 bits for fractional nanoseconds. 27 * 28 * We scale the NIC clock cycle by a large factor so that relatively 29 * small clock corrections can be added or subtracted at each clock 30 * tick. The drawbacks of a large factor are a) that the clock 31 * register overflows more quickly (not such a big deal) and b) that 32 * the increment per tick has to fit into 24 bits. As a result we 33 * need to use a shift of 19 so we can fit a value of 16 into the 34 * TIMINCA register. 35 * 36 * 37 * SYSTIMH SYSTIML 38 * +--------------+ +---+---+------+ 39 * 82576 | 32 | | 8 | 5 | 19 | 40 * +--------------+ +---+---+------+ 41 * \________ 45 bits _______/ fract 42 * 43 * +----------+---+ +--------------+ 44 * 82580 | 24 | 8 | | 32 | 45 * +----------+---+ +--------------+ 46 * reserved \______ 40 bits _____/ 47 * 48 * 49 * The 45 bit 82576 SYSTIM overflows every 50 * 2^45 * 10^-9 / 3600 = 9.77 hours. 51 * 52 * The 40 bit 82580 SYSTIM overflows every 53 * 2^40 * 10^-9 / 60 = 18.3 minutes. 54 * 55 * SYSTIM is converted to real time using a timecounter. As 56 * timecounter_cyc2time() allows old timestamps, the timecounter needs 57 * to be updated at least once per half of the SYSTIM interval. 58 * Scheduling of delayed work is not very accurate, and also the NIC 59 * clock can be adjusted to run up to 6% faster and the system clock 60 * up to 10% slower, so we aim for 6 minutes to be sure the actual 61 * interval in the NIC time is shorter than 9.16 minutes. 62 */ 63 64 #define IGB_SYSTIM_OVERFLOW_PERIOD (HZ * 60 * 6) 65 #define IGB_PTP_TX_TIMEOUT (HZ * 15) 66 #define INCPERIOD_82576 BIT(E1000_TIMINCA_16NS_SHIFT) 67 #define INCVALUE_82576_MASK GENMASK(E1000_TIMINCA_16NS_SHIFT - 1, 0) 68 #define INCVALUE_82576 (16u << IGB_82576_TSYNC_SHIFT) 69 #define IGB_NBITS_82580 40 70 #define IGB_82580_BASE_PERIOD 0x800000000 71 72 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter); 73 static void igb_ptp_sdp_init(struct igb_adapter *adapter); 74 75 /* SYSTIM read access for the 82576 */ 76 static u64 igb_ptp_read_82576(const struct cyclecounter *cc) 77 { 78 struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc); 79 struct e1000_hw *hw = &igb->hw; 80 u64 val; 81 u32 lo, hi; 82 83 lo = rd32(E1000_SYSTIML); 84 hi = rd32(E1000_SYSTIMH); 85 86 val = ((u64) hi) << 32; 87 val |= lo; 88 89 return val; 90 } 91 92 /* SYSTIM read access for the 82580 */ 93 static u64 igb_ptp_read_82580(const struct cyclecounter *cc) 94 { 95 struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc); 96 struct e1000_hw *hw = &igb->hw; 97 u32 lo, hi; 98 u64 val; 99 100 /* The timestamp latches on lowest register read. For the 82580 101 * the lowest register is SYSTIMR instead of SYSTIML. However we only 102 * need to provide nanosecond resolution, so we just ignore it. 103 */ 104 rd32(E1000_SYSTIMR); 105 lo = rd32(E1000_SYSTIML); 106 hi = rd32(E1000_SYSTIMH); 107 108 val = ((u64) hi) << 32; 109 val |= lo; 110 111 return val; 112 } 113 114 /* SYSTIM read access for I210/I211 */ 115 static void igb_ptp_read_i210(struct igb_adapter *adapter, 116 struct timespec64 *ts) 117 { 118 struct e1000_hw *hw = &adapter->hw; 119 u32 sec, nsec; 120 121 /* The timestamp latches on lowest register read. For I210/I211, the 122 * lowest register is SYSTIMR. Since we only need to provide nanosecond 123 * resolution, we can ignore it. 124 */ 125 rd32(E1000_SYSTIMR); 126 nsec = rd32(E1000_SYSTIML); 127 sec = rd32(E1000_SYSTIMH); 128 129 ts->tv_sec = sec; 130 ts->tv_nsec = nsec; 131 } 132 133 static void igb_ptp_write_i210(struct igb_adapter *adapter, 134 const struct timespec64 *ts) 135 { 136 struct e1000_hw *hw = &adapter->hw; 137 138 /* Writing the SYSTIMR register is not necessary as it only provides 139 * sub-nanosecond resolution. 140 */ 141 wr32(E1000_SYSTIML, ts->tv_nsec); 142 wr32(E1000_SYSTIMH, (u32)ts->tv_sec); 143 } 144 145 /** 146 * igb_ptp_systim_to_hwtstamp - convert system time value to hw timestamp 147 * @adapter: board private structure 148 * @hwtstamps: timestamp structure to update 149 * @systim: unsigned 64bit system time value. 150 * 151 * We need to convert the system time value stored in the RX/TXSTMP registers 152 * into a hwtstamp which can be used by the upper level timestamping functions. 153 * 154 * The 'tmreg_lock' spinlock is used to protect the consistency of the 155 * system time value. This is needed because reading the 64 bit time 156 * value involves reading two (or three) 32 bit registers. The first 157 * read latches the value. Ditto for writing. 158 * 159 * In addition, here have extended the system time with an overflow 160 * counter in software. 161 **/ 162 static void igb_ptp_systim_to_hwtstamp(struct igb_adapter *adapter, 163 struct skb_shared_hwtstamps *hwtstamps, 164 u64 systim) 165 { 166 unsigned long flags; 167 u64 ns; 168 169 memset(hwtstamps, 0, sizeof(*hwtstamps)); 170 171 switch (adapter->hw.mac.type) { 172 case e1000_82576: 173 case e1000_82580: 174 case e1000_i354: 175 case e1000_i350: 176 spin_lock_irqsave(&adapter->tmreg_lock, flags); 177 ns = timecounter_cyc2time(&adapter->tc, systim); 178 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); 179 180 hwtstamps->hwtstamp = ns_to_ktime(ns); 181 break; 182 case e1000_i210: 183 case e1000_i211: 184 /* Upper 32 bits contain s, lower 32 bits contain ns. */ 185 hwtstamps->hwtstamp = ktime_set(systim >> 32, 186 systim & 0xFFFFFFFF); 187 break; 188 default: 189 break; 190 } 191 } 192 193 /* PTP clock operations */ 194 static int igb_ptp_adjfine_82576(struct ptp_clock_info *ptp, long scaled_ppm) 195 { 196 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 197 ptp_caps); 198 struct e1000_hw *hw = &igb->hw; 199 u64 incvalue; 200 201 incvalue = adjust_by_scaled_ppm(INCVALUE_82576, scaled_ppm); 202 203 wr32(E1000_TIMINCA, INCPERIOD_82576 | (incvalue & INCVALUE_82576_MASK)); 204 205 return 0; 206 } 207 208 static int igb_ptp_adjfine_82580(struct ptp_clock_info *ptp, long scaled_ppm) 209 { 210 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 211 ptp_caps); 212 struct e1000_hw *hw = &igb->hw; 213 bool neg_adj; 214 u64 rate; 215 u32 inca; 216 217 neg_adj = diff_by_scaled_ppm(IGB_82580_BASE_PERIOD, scaled_ppm, &rate); 218 219 inca = rate & INCVALUE_MASK; 220 if (neg_adj) 221 inca |= ISGN; 222 223 wr32(E1000_TIMINCA, inca); 224 225 return 0; 226 } 227 228 static int igb_ptp_adjtime_82576(struct ptp_clock_info *ptp, s64 delta) 229 { 230 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 231 ptp_caps); 232 unsigned long flags; 233 234 spin_lock_irqsave(&igb->tmreg_lock, flags); 235 timecounter_adjtime(&igb->tc, delta); 236 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 237 238 return 0; 239 } 240 241 static int igb_ptp_adjtime_i210(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 struct timespec64 now, then = ns_to_timespec64(delta); 247 248 spin_lock_irqsave(&igb->tmreg_lock, flags); 249 250 igb_ptp_read_i210(igb, &now); 251 now = timespec64_add(now, then); 252 igb_ptp_write_i210(igb, (const struct timespec64 *)&now); 253 254 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 255 256 return 0; 257 } 258 259 static int igb_ptp_gettimex_82576(struct ptp_clock_info *ptp, 260 struct timespec64 *ts, 261 struct ptp_system_timestamp *sts) 262 { 263 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 264 ptp_caps); 265 struct e1000_hw *hw = &igb->hw; 266 unsigned long flags; 267 u32 lo, hi; 268 u64 ns; 269 270 spin_lock_irqsave(&igb->tmreg_lock, flags); 271 272 ptp_read_system_prets(sts); 273 lo = rd32(E1000_SYSTIML); 274 ptp_read_system_postts(sts); 275 hi = rd32(E1000_SYSTIMH); 276 277 ns = timecounter_cyc2time(&igb->tc, ((u64)hi << 32) | lo); 278 279 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 280 281 *ts = ns_to_timespec64(ns); 282 283 return 0; 284 } 285 286 static int igb_ptp_gettimex_82580(struct ptp_clock_info *ptp, 287 struct timespec64 *ts, 288 struct ptp_system_timestamp *sts) 289 { 290 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 291 ptp_caps); 292 struct e1000_hw *hw = &igb->hw; 293 unsigned long flags; 294 u32 lo, hi; 295 u64 ns; 296 297 spin_lock_irqsave(&igb->tmreg_lock, flags); 298 299 ptp_read_system_prets(sts); 300 rd32(E1000_SYSTIMR); 301 ptp_read_system_postts(sts); 302 lo = rd32(E1000_SYSTIML); 303 hi = rd32(E1000_SYSTIMH); 304 305 ns = timecounter_cyc2time(&igb->tc, ((u64)hi << 32) | lo); 306 307 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 308 309 *ts = ns_to_timespec64(ns); 310 311 return 0; 312 } 313 314 static int igb_ptp_gettimex_i210(struct ptp_clock_info *ptp, 315 struct timespec64 *ts, 316 struct ptp_system_timestamp *sts) 317 { 318 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 319 ptp_caps); 320 struct e1000_hw *hw = &igb->hw; 321 unsigned long flags; 322 323 spin_lock_irqsave(&igb->tmreg_lock, flags); 324 325 ptp_read_system_prets(sts); 326 rd32(E1000_SYSTIMR); 327 ptp_read_system_postts(sts); 328 ts->tv_nsec = rd32(E1000_SYSTIML); 329 ts->tv_sec = rd32(E1000_SYSTIMH); 330 331 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 332 333 return 0; 334 } 335 336 static int igb_ptp_settime_82576(struct ptp_clock_info *ptp, 337 const struct timespec64 *ts) 338 { 339 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 340 ptp_caps); 341 unsigned long flags; 342 u64 ns; 343 344 ns = timespec64_to_ns(ts); 345 346 spin_lock_irqsave(&igb->tmreg_lock, flags); 347 348 timecounter_init(&igb->tc, &igb->cc, ns); 349 350 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 351 352 return 0; 353 } 354 355 static int igb_ptp_settime_i210(struct ptp_clock_info *ptp, 356 const struct timespec64 *ts) 357 { 358 struct igb_adapter *igb = container_of(ptp, struct igb_adapter, 359 ptp_caps); 360 unsigned long flags; 361 362 spin_lock_irqsave(&igb->tmreg_lock, flags); 363 364 igb_ptp_write_i210(igb, ts); 365 366 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 367 368 return 0; 369 } 370 371 static void igb_pin_direction(int pin, int input, u32 *ctrl, u32 *ctrl_ext) 372 { 373 u32 *ptr = pin < 2 ? ctrl : ctrl_ext; 374 static const u32 mask[IGB_N_SDP] = { 375 E1000_CTRL_SDP0_DIR, 376 E1000_CTRL_SDP1_DIR, 377 E1000_CTRL_EXT_SDP2_DIR, 378 E1000_CTRL_EXT_SDP3_DIR, 379 }; 380 381 if (input) 382 *ptr &= ~mask[pin]; 383 else 384 *ptr |= mask[pin]; 385 } 386 387 static void igb_pin_extts(struct igb_adapter *igb, int chan, int pin) 388 { 389 static const u32 aux0_sel_sdp[IGB_N_SDP] = { 390 AUX0_SEL_SDP0, AUX0_SEL_SDP1, AUX0_SEL_SDP2, AUX0_SEL_SDP3, 391 }; 392 static const u32 aux1_sel_sdp[IGB_N_SDP] = { 393 AUX1_SEL_SDP0, AUX1_SEL_SDP1, AUX1_SEL_SDP2, AUX1_SEL_SDP3, 394 }; 395 static const u32 ts_sdp_en[IGB_N_SDP] = { 396 TS_SDP0_EN, TS_SDP1_EN, TS_SDP2_EN, TS_SDP3_EN, 397 }; 398 struct e1000_hw *hw = &igb->hw; 399 u32 ctrl, ctrl_ext, tssdp = 0; 400 401 ctrl = rd32(E1000_CTRL); 402 ctrl_ext = rd32(E1000_CTRL_EXT); 403 tssdp = rd32(E1000_TSSDP); 404 405 igb_pin_direction(pin, 1, &ctrl, &ctrl_ext); 406 407 /* Make sure this pin is not enabled as an output. */ 408 tssdp &= ~ts_sdp_en[pin]; 409 410 if (chan == 1) { 411 tssdp &= ~AUX1_SEL_SDP3; 412 tssdp |= aux1_sel_sdp[pin] | AUX1_TS_SDP_EN; 413 } else { 414 tssdp &= ~AUX0_SEL_SDP3; 415 tssdp |= aux0_sel_sdp[pin] | AUX0_TS_SDP_EN; 416 } 417 418 wr32(E1000_TSSDP, tssdp); 419 wr32(E1000_CTRL, ctrl); 420 wr32(E1000_CTRL_EXT, ctrl_ext); 421 } 422 423 static void igb_pin_perout(struct igb_adapter *igb, int chan, int pin, int freq) 424 { 425 static const u32 aux0_sel_sdp[IGB_N_SDP] = { 426 AUX0_SEL_SDP0, AUX0_SEL_SDP1, AUX0_SEL_SDP2, AUX0_SEL_SDP3, 427 }; 428 static const u32 aux1_sel_sdp[IGB_N_SDP] = { 429 AUX1_SEL_SDP0, AUX1_SEL_SDP1, AUX1_SEL_SDP2, AUX1_SEL_SDP3, 430 }; 431 static const u32 ts_sdp_en[IGB_N_SDP] = { 432 TS_SDP0_EN, TS_SDP1_EN, TS_SDP2_EN, TS_SDP3_EN, 433 }; 434 static const u32 ts_sdp_sel_tt0[IGB_N_SDP] = { 435 TS_SDP0_SEL_TT0, TS_SDP1_SEL_TT0, 436 TS_SDP2_SEL_TT0, TS_SDP3_SEL_TT0, 437 }; 438 static const u32 ts_sdp_sel_tt1[IGB_N_SDP] = { 439 TS_SDP0_SEL_TT1, TS_SDP1_SEL_TT1, 440 TS_SDP2_SEL_TT1, TS_SDP3_SEL_TT1, 441 }; 442 static const u32 ts_sdp_sel_fc0[IGB_N_SDP] = { 443 TS_SDP0_SEL_FC0, TS_SDP1_SEL_FC0, 444 TS_SDP2_SEL_FC0, TS_SDP3_SEL_FC0, 445 }; 446 static const u32 ts_sdp_sel_fc1[IGB_N_SDP] = { 447 TS_SDP0_SEL_FC1, TS_SDP1_SEL_FC1, 448 TS_SDP2_SEL_FC1, TS_SDP3_SEL_FC1, 449 }; 450 static const u32 ts_sdp_sel_clr[IGB_N_SDP] = { 451 TS_SDP0_SEL_FC1, TS_SDP1_SEL_FC1, 452 TS_SDP2_SEL_FC1, TS_SDP3_SEL_FC1, 453 }; 454 struct e1000_hw *hw = &igb->hw; 455 u32 ctrl, ctrl_ext, tssdp = 0; 456 457 ctrl = rd32(E1000_CTRL); 458 ctrl_ext = rd32(E1000_CTRL_EXT); 459 tssdp = rd32(E1000_TSSDP); 460 461 igb_pin_direction(pin, 0, &ctrl, &ctrl_ext); 462 463 /* Make sure this pin is not enabled as an input. */ 464 if ((tssdp & AUX0_SEL_SDP3) == aux0_sel_sdp[pin]) 465 tssdp &= ~AUX0_TS_SDP_EN; 466 467 if ((tssdp & AUX1_SEL_SDP3) == aux1_sel_sdp[pin]) 468 tssdp &= ~AUX1_TS_SDP_EN; 469 470 tssdp &= ~ts_sdp_sel_clr[pin]; 471 if (freq) { 472 if (chan == 1) 473 tssdp |= ts_sdp_sel_fc1[pin]; 474 else 475 tssdp |= ts_sdp_sel_fc0[pin]; 476 } else { 477 if (chan == 1) 478 tssdp |= ts_sdp_sel_tt1[pin]; 479 else 480 tssdp |= ts_sdp_sel_tt0[pin]; 481 } 482 tssdp |= ts_sdp_en[pin]; 483 484 wr32(E1000_TSSDP, tssdp); 485 wr32(E1000_CTRL, ctrl); 486 wr32(E1000_CTRL_EXT, ctrl_ext); 487 } 488 489 static int igb_ptp_feature_enable_82580(struct ptp_clock_info *ptp, 490 struct ptp_clock_request *rq, int on) 491 { 492 struct igb_adapter *igb = 493 container_of(ptp, struct igb_adapter, ptp_caps); 494 u32 tsauxc, tsim, tsauxc_mask, tsim_mask, trgttiml, trgttimh, systiml, 495 systimh, level_mask, level, rem; 496 struct e1000_hw *hw = &igb->hw; 497 struct timespec64 ts, start; 498 unsigned long flags; 499 u64 systim, now; 500 int pin = -1; 501 s64 ns; 502 503 switch (rq->type) { 504 case PTP_CLK_REQ_EXTTS: 505 /* Reject requests with unsupported flags */ 506 if (rq->extts.flags & ~(PTP_ENABLE_FEATURE | 507 PTP_RISING_EDGE | 508 PTP_FALLING_EDGE | 509 PTP_STRICT_FLAGS)) 510 return -EOPNOTSUPP; 511 512 /* Both the rising and falling edge are timestamped */ 513 if (rq->extts.flags & PTP_STRICT_FLAGS && 514 (rq->extts.flags & PTP_ENABLE_FEATURE) && 515 (rq->extts.flags & PTP_EXTTS_EDGES) != PTP_EXTTS_EDGES) 516 return -EOPNOTSUPP; 517 518 if (on) { 519 pin = ptp_find_pin(igb->ptp_clock, PTP_PF_EXTTS, 520 rq->extts.index); 521 if (pin < 0) 522 return -EBUSY; 523 } 524 if (rq->extts.index == 1) { 525 tsauxc_mask = TSAUXC_EN_TS1; 526 tsim_mask = TSINTR_AUTT1; 527 } else { 528 tsauxc_mask = TSAUXC_EN_TS0; 529 tsim_mask = TSINTR_AUTT0; 530 } 531 spin_lock_irqsave(&igb->tmreg_lock, flags); 532 tsauxc = rd32(E1000_TSAUXC); 533 tsim = rd32(E1000_TSIM); 534 if (on) { 535 igb_pin_extts(igb, rq->extts.index, pin); 536 tsauxc |= tsauxc_mask; 537 tsim |= tsim_mask; 538 } else { 539 tsauxc &= ~tsauxc_mask; 540 tsim &= ~tsim_mask; 541 } 542 wr32(E1000_TSAUXC, tsauxc); 543 wr32(E1000_TSIM, tsim); 544 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 545 return 0; 546 547 case PTP_CLK_REQ_PEROUT: 548 /* Reject requests with unsupported flags */ 549 if (rq->perout.flags) 550 return -EOPNOTSUPP; 551 552 if (on) { 553 pin = ptp_find_pin(igb->ptp_clock, PTP_PF_PEROUT, 554 rq->perout.index); 555 if (pin < 0) 556 return -EBUSY; 557 } 558 ts.tv_sec = rq->perout.period.sec; 559 ts.tv_nsec = rq->perout.period.nsec; 560 ns = timespec64_to_ns(&ts); 561 ns = ns >> 1; 562 if (on && ns < 8LL) 563 return -EINVAL; 564 ts = ns_to_timespec64(ns); 565 if (rq->perout.index == 1) { 566 tsauxc_mask = TSAUXC_EN_TT1; 567 tsim_mask = TSINTR_TT1; 568 trgttiml = E1000_TRGTTIML1; 569 trgttimh = E1000_TRGTTIMH1; 570 } else { 571 tsauxc_mask = TSAUXC_EN_TT0; 572 tsim_mask = TSINTR_TT0; 573 trgttiml = E1000_TRGTTIML0; 574 trgttimh = E1000_TRGTTIMH0; 575 } 576 spin_lock_irqsave(&igb->tmreg_lock, flags); 577 tsauxc = rd32(E1000_TSAUXC); 578 tsim = rd32(E1000_TSIM); 579 if (rq->perout.index == 1) { 580 tsauxc &= ~(TSAUXC_EN_TT1 | TSAUXC_EN_CLK1 | TSAUXC_ST1); 581 tsim &= ~TSINTR_TT1; 582 } else { 583 tsauxc &= ~(TSAUXC_EN_TT0 | TSAUXC_EN_CLK0 | TSAUXC_ST0); 584 tsim &= ~TSINTR_TT0; 585 } 586 if (on) { 587 int i = rq->perout.index; 588 589 /* read systim registers in sequence */ 590 rd32(E1000_SYSTIMR); 591 systiml = rd32(E1000_SYSTIML); 592 systimh = rd32(E1000_SYSTIMH); 593 systim = (((u64)(systimh & 0xFF)) << 32) | ((u64)systiml); 594 now = timecounter_cyc2time(&igb->tc, systim); 595 596 if (pin < 2) { 597 level_mask = (i == 1) ? 0x80000 : 0x40000; 598 level = (rd32(E1000_CTRL) & level_mask) ? 1 : 0; 599 } else { 600 level_mask = (i == 1) ? 0x80 : 0x40; 601 level = (rd32(E1000_CTRL_EXT) & level_mask) ? 1 : 0; 602 } 603 604 div_u64_rem(now, ns, &rem); 605 systim = systim + (ns - rem); 606 607 /* synchronize pin level with rising/falling edges */ 608 div_u64_rem(now, ns << 1, &rem); 609 if (rem < ns) { 610 /* first half of period */ 611 if (level == 0) { 612 /* output is already low, skip this period */ 613 systim += ns; 614 } 615 } else { 616 /* second half of period */ 617 if (level == 1) { 618 /* output is already high, skip this period */ 619 systim += ns; 620 } 621 } 622 623 start = ns_to_timespec64(systim + (ns - rem)); 624 igb_pin_perout(igb, i, pin, 0); 625 igb->perout[i].start.tv_sec = start.tv_sec; 626 igb->perout[i].start.tv_nsec = start.tv_nsec; 627 igb->perout[i].period.tv_sec = ts.tv_sec; 628 igb->perout[i].period.tv_nsec = ts.tv_nsec; 629 630 wr32(trgttiml, (u32)systim); 631 wr32(trgttimh, ((u32)(systim >> 32)) & 0xFF); 632 tsauxc |= tsauxc_mask; 633 tsim |= tsim_mask; 634 } 635 wr32(E1000_TSAUXC, tsauxc); 636 wr32(E1000_TSIM, tsim); 637 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 638 return 0; 639 640 case PTP_CLK_REQ_PPS: 641 return -EOPNOTSUPP; 642 } 643 644 return -EOPNOTSUPP; 645 } 646 647 static int igb_ptp_feature_enable_i210(struct ptp_clock_info *ptp, 648 struct ptp_clock_request *rq, int on) 649 { 650 struct igb_adapter *igb = 651 container_of(ptp, struct igb_adapter, ptp_caps); 652 struct e1000_hw *hw = &igb->hw; 653 u32 tsauxc, tsim, tsauxc_mask, tsim_mask, trgttiml, trgttimh, freqout; 654 unsigned long flags; 655 struct timespec64 ts; 656 int use_freq = 0, pin = -1; 657 s64 ns; 658 659 switch (rq->type) { 660 case PTP_CLK_REQ_EXTTS: 661 /* Reject requests with unsupported flags */ 662 if (rq->extts.flags & ~(PTP_ENABLE_FEATURE | 663 PTP_RISING_EDGE | 664 PTP_FALLING_EDGE | 665 PTP_STRICT_FLAGS)) 666 return -EOPNOTSUPP; 667 668 /* Reject requests failing to enable both edges. */ 669 if ((rq->extts.flags & PTP_STRICT_FLAGS) && 670 (rq->extts.flags & PTP_ENABLE_FEATURE) && 671 (rq->extts.flags & PTP_EXTTS_EDGES) != PTP_EXTTS_EDGES) 672 return -EOPNOTSUPP; 673 674 if (on) { 675 pin = ptp_find_pin(igb->ptp_clock, PTP_PF_EXTTS, 676 rq->extts.index); 677 if (pin < 0) 678 return -EBUSY; 679 } 680 if (rq->extts.index == 1) { 681 tsauxc_mask = TSAUXC_EN_TS1; 682 tsim_mask = TSINTR_AUTT1; 683 } else { 684 tsauxc_mask = TSAUXC_EN_TS0; 685 tsim_mask = TSINTR_AUTT0; 686 } 687 spin_lock_irqsave(&igb->tmreg_lock, flags); 688 tsauxc = rd32(E1000_TSAUXC); 689 tsim = rd32(E1000_TSIM); 690 if (on) { 691 igb_pin_extts(igb, rq->extts.index, pin); 692 tsauxc |= tsauxc_mask; 693 tsim |= tsim_mask; 694 } else { 695 tsauxc &= ~tsauxc_mask; 696 tsim &= ~tsim_mask; 697 } 698 wr32(E1000_TSAUXC, tsauxc); 699 wr32(E1000_TSIM, tsim); 700 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 701 return 0; 702 703 case PTP_CLK_REQ_PEROUT: 704 /* Reject requests with unsupported flags */ 705 if (rq->perout.flags) 706 return -EOPNOTSUPP; 707 708 if (on) { 709 pin = ptp_find_pin(igb->ptp_clock, PTP_PF_PEROUT, 710 rq->perout.index); 711 if (pin < 0) 712 return -EBUSY; 713 } 714 ts.tv_sec = rq->perout.period.sec; 715 ts.tv_nsec = rq->perout.period.nsec; 716 ns = timespec64_to_ns(&ts); 717 ns = ns >> 1; 718 if (on && ((ns <= 70000000LL) || (ns == 125000000LL) || 719 (ns == 250000000LL) || (ns == 500000000LL))) { 720 if (ns < 8LL) 721 return -EINVAL; 722 use_freq = 1; 723 } 724 ts = ns_to_timespec64(ns); 725 if (rq->perout.index == 1) { 726 if (use_freq) { 727 tsauxc_mask = TSAUXC_EN_CLK1 | TSAUXC_ST1; 728 tsim_mask = 0; 729 } else { 730 tsauxc_mask = TSAUXC_EN_TT1; 731 tsim_mask = TSINTR_TT1; 732 } 733 trgttiml = E1000_TRGTTIML1; 734 trgttimh = E1000_TRGTTIMH1; 735 freqout = E1000_FREQOUT1; 736 } else { 737 if (use_freq) { 738 tsauxc_mask = TSAUXC_EN_CLK0 | TSAUXC_ST0; 739 tsim_mask = 0; 740 } else { 741 tsauxc_mask = TSAUXC_EN_TT0; 742 tsim_mask = TSINTR_TT0; 743 } 744 trgttiml = E1000_TRGTTIML0; 745 trgttimh = E1000_TRGTTIMH0; 746 freqout = E1000_FREQOUT0; 747 } 748 spin_lock_irqsave(&igb->tmreg_lock, flags); 749 tsauxc = rd32(E1000_TSAUXC); 750 tsim = rd32(E1000_TSIM); 751 if (rq->perout.index == 1) { 752 tsauxc &= ~(TSAUXC_EN_TT1 | TSAUXC_EN_CLK1 | TSAUXC_ST1); 753 tsim &= ~TSINTR_TT1; 754 } else { 755 tsauxc &= ~(TSAUXC_EN_TT0 | TSAUXC_EN_CLK0 | TSAUXC_ST0); 756 tsim &= ~TSINTR_TT0; 757 } 758 if (on) { 759 int i = rq->perout.index; 760 igb_pin_perout(igb, i, pin, use_freq); 761 igb->perout[i].start.tv_sec = rq->perout.start.sec; 762 igb->perout[i].start.tv_nsec = rq->perout.start.nsec; 763 igb->perout[i].period.tv_sec = ts.tv_sec; 764 igb->perout[i].period.tv_nsec = ts.tv_nsec; 765 wr32(trgttimh, rq->perout.start.sec); 766 wr32(trgttiml, rq->perout.start.nsec); 767 if (use_freq) 768 wr32(freqout, ns); 769 tsauxc |= tsauxc_mask; 770 tsim |= tsim_mask; 771 } 772 wr32(E1000_TSAUXC, tsauxc); 773 wr32(E1000_TSIM, tsim); 774 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 775 return 0; 776 777 case PTP_CLK_REQ_PPS: 778 spin_lock_irqsave(&igb->tmreg_lock, flags); 779 tsim = rd32(E1000_TSIM); 780 if (on) 781 tsim |= TSINTR_SYS_WRAP; 782 else 783 tsim &= ~TSINTR_SYS_WRAP; 784 igb->pps_sys_wrap_on = !!on; 785 wr32(E1000_TSIM, tsim); 786 spin_unlock_irqrestore(&igb->tmreg_lock, flags); 787 return 0; 788 } 789 790 return -EOPNOTSUPP; 791 } 792 793 static int igb_ptp_feature_enable(struct ptp_clock_info *ptp, 794 struct ptp_clock_request *rq, int on) 795 { 796 return -EOPNOTSUPP; 797 } 798 799 static int igb_ptp_verify_pin(struct ptp_clock_info *ptp, unsigned int pin, 800 enum ptp_pin_function func, unsigned int chan) 801 { 802 switch (func) { 803 case PTP_PF_NONE: 804 case PTP_PF_EXTTS: 805 case PTP_PF_PEROUT: 806 break; 807 case PTP_PF_PHYSYNC: 808 return -1; 809 } 810 return 0; 811 } 812 813 /** 814 * igb_ptp_tx_work 815 * @work: pointer to work struct 816 * 817 * This work function polls the TSYNCTXCTL valid bit to determine when a 818 * timestamp has been taken for the current stored skb. 819 **/ 820 static void igb_ptp_tx_work(struct work_struct *work) 821 { 822 struct igb_adapter *adapter = container_of(work, struct igb_adapter, 823 ptp_tx_work); 824 struct e1000_hw *hw = &adapter->hw; 825 u32 tsynctxctl; 826 827 if (!adapter->ptp_tx_skb) 828 return; 829 830 if (time_is_before_jiffies(adapter->ptp_tx_start + 831 IGB_PTP_TX_TIMEOUT)) { 832 dev_kfree_skb_any(adapter->ptp_tx_skb); 833 adapter->ptp_tx_skb = NULL; 834 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); 835 adapter->tx_hwtstamp_timeouts++; 836 /* Clear the tx valid bit in TSYNCTXCTL register to enable 837 * interrupt 838 */ 839 rd32(E1000_TXSTMPH); 840 dev_warn(&adapter->pdev->dev, "clearing Tx timestamp hang\n"); 841 return; 842 } 843 844 tsynctxctl = rd32(E1000_TSYNCTXCTL); 845 if (tsynctxctl & E1000_TSYNCTXCTL_VALID) 846 igb_ptp_tx_hwtstamp(adapter); 847 else 848 /* reschedule to check later */ 849 schedule_work(&adapter->ptp_tx_work); 850 } 851 852 static void igb_ptp_overflow_check(struct work_struct *work) 853 { 854 struct igb_adapter *igb = 855 container_of(work, struct igb_adapter, ptp_overflow_work.work); 856 struct timespec64 ts; 857 u64 ns; 858 859 /* Update the timecounter */ 860 ns = timecounter_read(&igb->tc); 861 862 ts = ns_to_timespec64(ns); 863 pr_debug("igb overflow check at %lld.%09lu\n", 864 (long long) ts.tv_sec, ts.tv_nsec); 865 866 schedule_delayed_work(&igb->ptp_overflow_work, 867 IGB_SYSTIM_OVERFLOW_PERIOD); 868 } 869 870 /** 871 * igb_ptp_rx_hang - detect error case when Rx timestamp registers latched 872 * @adapter: private network adapter structure 873 * 874 * This watchdog task is scheduled to detect error case where hardware has 875 * dropped an Rx packet that was timestamped when the ring is full. The 876 * particular error is rare but leaves the device in a state unable to timestamp 877 * any future packets. 878 **/ 879 void igb_ptp_rx_hang(struct igb_adapter *adapter) 880 { 881 struct e1000_hw *hw = &adapter->hw; 882 u32 tsyncrxctl = rd32(E1000_TSYNCRXCTL); 883 unsigned long rx_event; 884 885 /* Other hardware uses per-packet timestamps */ 886 if (hw->mac.type != e1000_82576) 887 return; 888 889 /* If we don't have a valid timestamp in the registers, just update the 890 * timeout counter and exit 891 */ 892 if (!(tsyncrxctl & E1000_TSYNCRXCTL_VALID)) { 893 adapter->last_rx_ptp_check = jiffies; 894 return; 895 } 896 897 /* Determine the most recent watchdog or rx_timestamp event */ 898 rx_event = adapter->last_rx_ptp_check; 899 if (time_after(adapter->last_rx_timestamp, rx_event)) 900 rx_event = adapter->last_rx_timestamp; 901 902 /* Only need to read the high RXSTMP register to clear the lock */ 903 if (time_is_before_jiffies(rx_event + 5 * HZ)) { 904 rd32(E1000_RXSTMPH); 905 adapter->last_rx_ptp_check = jiffies; 906 adapter->rx_hwtstamp_cleared++; 907 dev_warn(&adapter->pdev->dev, "clearing Rx timestamp hang\n"); 908 } 909 } 910 911 /** 912 * igb_ptp_tx_hang - detect error case where Tx timestamp never finishes 913 * @adapter: private network adapter structure 914 */ 915 void igb_ptp_tx_hang(struct igb_adapter *adapter) 916 { 917 struct e1000_hw *hw = &adapter->hw; 918 bool timeout = time_is_before_jiffies(adapter->ptp_tx_start + 919 IGB_PTP_TX_TIMEOUT); 920 921 if (!adapter->ptp_tx_skb) 922 return; 923 924 if (!test_bit(__IGB_PTP_TX_IN_PROGRESS, &adapter->state)) 925 return; 926 927 /* If we haven't received a timestamp within the timeout, it is 928 * reasonable to assume that it will never occur, so we can unlock the 929 * timestamp bit when this occurs. 930 */ 931 if (timeout) { 932 cancel_work_sync(&adapter->ptp_tx_work); 933 dev_kfree_skb_any(adapter->ptp_tx_skb); 934 adapter->ptp_tx_skb = NULL; 935 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); 936 adapter->tx_hwtstamp_timeouts++; 937 /* Clear the tx valid bit in TSYNCTXCTL register to enable 938 * interrupt 939 */ 940 rd32(E1000_TXSTMPH); 941 dev_warn(&adapter->pdev->dev, "clearing Tx timestamp hang\n"); 942 } 943 } 944 945 /** 946 * igb_ptp_tx_hwtstamp - utility function which checks for TX time stamp 947 * @adapter: Board private structure. 948 * 949 * If we were asked to do hardware stamping and such a time stamp is 950 * available, then it must have been for this skb here because we only 951 * allow only one such packet into the queue. 952 **/ 953 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter) 954 { 955 struct sk_buff *skb = adapter->ptp_tx_skb; 956 struct e1000_hw *hw = &adapter->hw; 957 struct skb_shared_hwtstamps shhwtstamps; 958 u64 regval; 959 int adjust = 0; 960 961 regval = rd32(E1000_TXSTMPL); 962 regval |= (u64)rd32(E1000_TXSTMPH) << 32; 963 964 igb_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval); 965 /* adjust timestamp for the TX latency based on link speed */ 966 if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) { 967 switch (adapter->link_speed) { 968 case SPEED_10: 969 adjust = IGB_I210_TX_LATENCY_10; 970 break; 971 case SPEED_100: 972 adjust = IGB_I210_TX_LATENCY_100; 973 break; 974 case SPEED_1000: 975 adjust = IGB_I210_TX_LATENCY_1000; 976 break; 977 } 978 } 979 980 shhwtstamps.hwtstamp = 981 ktime_add_ns(shhwtstamps.hwtstamp, adjust); 982 983 /* Clear the lock early before calling skb_tstamp_tx so that 984 * applications are not woken up before the lock bit is clear. We use 985 * a copy of the skb pointer to ensure other threads can't change it 986 * while we're notifying the stack. 987 */ 988 adapter->ptp_tx_skb = NULL; 989 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); 990 991 /* Notify the stack and free the skb after we've unlocked */ 992 skb_tstamp_tx(skb, &shhwtstamps); 993 dev_kfree_skb_any(skb); 994 } 995 996 /** 997 * igb_ptp_rx_pktstamp - retrieve Rx per packet timestamp 998 * @q_vector: Pointer to interrupt specific structure 999 * @va: Pointer to address containing Rx buffer 1000 * @timestamp: Pointer where timestamp will be stored 1001 * 1002 * This function is meant to retrieve a timestamp from the first buffer of an 1003 * incoming frame. The value is stored in little endian format starting on 1004 * byte 8 1005 * 1006 * Returns: The timestamp header length or 0 if not available 1007 **/ 1008 int igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va, 1009 ktime_t *timestamp) 1010 { 1011 struct igb_adapter *adapter = q_vector->adapter; 1012 struct e1000_hw *hw = &adapter->hw; 1013 struct skb_shared_hwtstamps ts; 1014 __le64 *regval = (__le64 *)va; 1015 int adjust = 0; 1016 1017 if (!(adapter->ptp_flags & IGB_PTP_ENABLED)) 1018 return 0; 1019 1020 /* The timestamp is recorded in little endian format. 1021 * DWORD: 0 1 2 3 1022 * Field: Reserved Reserved SYSTIML SYSTIMH 1023 */ 1024 1025 /* check reserved dwords are zero, be/le doesn't matter for zero */ 1026 if (regval[0]) 1027 return 0; 1028 1029 igb_ptp_systim_to_hwtstamp(adapter, &ts, le64_to_cpu(regval[1])); 1030 1031 /* adjust timestamp for the RX latency based on link speed */ 1032 if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) { 1033 switch (adapter->link_speed) { 1034 case SPEED_10: 1035 adjust = IGB_I210_RX_LATENCY_10; 1036 break; 1037 case SPEED_100: 1038 adjust = IGB_I210_RX_LATENCY_100; 1039 break; 1040 case SPEED_1000: 1041 adjust = IGB_I210_RX_LATENCY_1000; 1042 break; 1043 } 1044 } 1045 1046 *timestamp = ktime_sub_ns(ts.hwtstamp, adjust); 1047 1048 return IGB_TS_HDR_LEN; 1049 } 1050 1051 /** 1052 * igb_ptp_rx_rgtstamp - retrieve Rx timestamp stored in register 1053 * @q_vector: Pointer to interrupt specific structure 1054 * @skb: Buffer containing timestamp and packet 1055 * 1056 * This function is meant to retrieve a timestamp from the internal registers 1057 * of the adapter and store it in the skb. 1058 **/ 1059 void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb) 1060 { 1061 struct igb_adapter *adapter = q_vector->adapter; 1062 struct e1000_hw *hw = &adapter->hw; 1063 int adjust = 0; 1064 u64 regval; 1065 1066 if (!(adapter->ptp_flags & IGB_PTP_ENABLED)) 1067 return; 1068 1069 /* If this bit is set, then the RX registers contain the time stamp. No 1070 * other packet will be time stamped until we read these registers, so 1071 * read the registers to make them available again. Because only one 1072 * packet can be time stamped at a time, we know that the register 1073 * values must belong to this one here and therefore we don't need to 1074 * compare any of the additional attributes stored for it. 1075 * 1076 * If nothing went wrong, then it should have a shared tx_flags that we 1077 * can turn into a skb_shared_hwtstamps. 1078 */ 1079 if (!(rd32(E1000_TSYNCRXCTL) & E1000_TSYNCRXCTL_VALID)) 1080 return; 1081 1082 regval = rd32(E1000_RXSTMPL); 1083 regval |= (u64)rd32(E1000_RXSTMPH) << 32; 1084 1085 igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval); 1086 1087 /* adjust timestamp for the RX latency based on link speed */ 1088 if (adapter->hw.mac.type == e1000_i210) { 1089 switch (adapter->link_speed) { 1090 case SPEED_10: 1091 adjust = IGB_I210_RX_LATENCY_10; 1092 break; 1093 case SPEED_100: 1094 adjust = IGB_I210_RX_LATENCY_100; 1095 break; 1096 case SPEED_1000: 1097 adjust = IGB_I210_RX_LATENCY_1000; 1098 break; 1099 } 1100 } 1101 skb_hwtstamps(skb)->hwtstamp = 1102 ktime_sub_ns(skb_hwtstamps(skb)->hwtstamp, adjust); 1103 1104 /* Update the last_rx_timestamp timer in order to enable watchdog check 1105 * for error case of latched timestamp on a dropped packet. 1106 */ 1107 adapter->last_rx_timestamp = jiffies; 1108 } 1109 1110 /** 1111 * igb_ptp_get_ts_config - get hardware time stamping config 1112 * @netdev: netdev struct 1113 * @ifr: interface struct 1114 * 1115 * Get the hwtstamp_config settings to return to the user. Rather than attempt 1116 * to deconstruct the settings from the registers, just return a shadow copy 1117 * of the last known settings. 1118 **/ 1119 int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr) 1120 { 1121 struct igb_adapter *adapter = netdev_priv(netdev); 1122 struct hwtstamp_config *config = &adapter->tstamp_config; 1123 1124 return copy_to_user(ifr->ifr_data, config, sizeof(*config)) ? 1125 -EFAULT : 0; 1126 } 1127 1128 /** 1129 * igb_ptp_set_timestamp_mode - setup hardware for timestamping 1130 * @adapter: networking device structure 1131 * @config: hwtstamp configuration 1132 * 1133 * Outgoing time stamping can be enabled and disabled. Play nice and 1134 * disable it when requested, although it shouldn't case any overhead 1135 * when no packet needs it. At most one packet in the queue may be 1136 * marked for time stamping, otherwise it would be impossible to tell 1137 * for sure to which packet the hardware time stamp belongs. 1138 * 1139 * Incoming time stamping has to be configured via the hardware 1140 * filters. Not all combinations are supported, in particular event 1141 * type has to be specified. Matching the kind of event packet is 1142 * not supported, with the exception of "all V2 events regardless of 1143 * level 2 or 4". 1144 */ 1145 static int igb_ptp_set_timestamp_mode(struct igb_adapter *adapter, 1146 struct hwtstamp_config *config) 1147 { 1148 struct e1000_hw *hw = &adapter->hw; 1149 u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED; 1150 u32 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; 1151 u32 tsync_rx_cfg = 0; 1152 bool is_l4 = false; 1153 bool is_l2 = false; 1154 u32 regval; 1155 1156 switch (config->tx_type) { 1157 case HWTSTAMP_TX_OFF: 1158 tsync_tx_ctl = 0; 1159 break; 1160 case HWTSTAMP_TX_ON: 1161 break; 1162 default: 1163 return -ERANGE; 1164 } 1165 1166 switch (config->rx_filter) { 1167 case HWTSTAMP_FILTER_NONE: 1168 tsync_rx_ctl = 0; 1169 break; 1170 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 1171 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1; 1172 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE; 1173 is_l4 = true; 1174 break; 1175 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 1176 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1; 1177 tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE; 1178 is_l4 = true; 1179 break; 1180 case HWTSTAMP_FILTER_PTP_V2_EVENT: 1181 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 1182 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 1183 case HWTSTAMP_FILTER_PTP_V2_SYNC: 1184 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 1185 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 1186 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 1187 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 1188 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 1189 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2; 1190 config->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 1191 is_l2 = true; 1192 is_l4 = true; 1193 break; 1194 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 1195 case HWTSTAMP_FILTER_NTP_ALL: 1196 case HWTSTAMP_FILTER_ALL: 1197 /* 82576 cannot timestamp all packets, which it needs to do to 1198 * support both V1 Sync and Delay_Req messages 1199 */ 1200 if (hw->mac.type != e1000_82576) { 1201 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; 1202 config->rx_filter = HWTSTAMP_FILTER_ALL; 1203 break; 1204 } 1205 fallthrough; 1206 default: 1207 config->rx_filter = HWTSTAMP_FILTER_NONE; 1208 return -ERANGE; 1209 } 1210 1211 if (hw->mac.type == e1000_82575) { 1212 if (tsync_rx_ctl | tsync_tx_ctl) 1213 return -EINVAL; 1214 return 0; 1215 } 1216 1217 /* Per-packet timestamping only works if all packets are 1218 * timestamped, so enable timestamping in all packets as 1219 * long as one Rx filter was configured. 1220 */ 1221 if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) { 1222 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; 1223 tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; 1224 config->rx_filter = HWTSTAMP_FILTER_ALL; 1225 is_l2 = true; 1226 is_l4 = true; 1227 1228 if ((hw->mac.type == e1000_i210) || 1229 (hw->mac.type == e1000_i211)) { 1230 regval = rd32(E1000_RXPBS); 1231 regval |= E1000_RXPBS_CFG_TS_EN; 1232 wr32(E1000_RXPBS, regval); 1233 } 1234 } 1235 1236 /* enable/disable TX */ 1237 regval = rd32(E1000_TSYNCTXCTL); 1238 regval &= ~E1000_TSYNCTXCTL_ENABLED; 1239 regval |= tsync_tx_ctl; 1240 wr32(E1000_TSYNCTXCTL, regval); 1241 1242 /* enable/disable RX */ 1243 regval = rd32(E1000_TSYNCRXCTL); 1244 regval &= ~(E1000_TSYNCRXCTL_ENABLED | E1000_TSYNCRXCTL_TYPE_MASK); 1245 regval |= tsync_rx_ctl; 1246 wr32(E1000_TSYNCRXCTL, regval); 1247 1248 /* define which PTP packets are time stamped */ 1249 wr32(E1000_TSYNCRXCFG, tsync_rx_cfg); 1250 1251 /* define ethertype filter for timestamped packets */ 1252 if (is_l2) 1253 wr32(E1000_ETQF(IGB_ETQF_FILTER_1588), 1254 (E1000_ETQF_FILTER_ENABLE | /* enable filter */ 1255 E1000_ETQF_1588 | /* enable timestamping */ 1256 ETH_P_1588)); /* 1588 eth protocol type */ 1257 else 1258 wr32(E1000_ETQF(IGB_ETQF_FILTER_1588), 0); 1259 1260 /* L4 Queue Filter[3]: filter by destination port and protocol */ 1261 if (is_l4) { 1262 u32 ftqf = (IPPROTO_UDP /* UDP */ 1263 | E1000_FTQF_VF_BP /* VF not compared */ 1264 | E1000_FTQF_1588_TIME_STAMP /* Enable Timestamping */ 1265 | E1000_FTQF_MASK); /* mask all inputs */ 1266 ftqf &= ~E1000_FTQF_MASK_PROTO_BP; /* enable protocol check */ 1267 1268 wr32(E1000_IMIR(3), (__force unsigned int)htons(PTP_EV_PORT)); 1269 wr32(E1000_IMIREXT(3), 1270 (E1000_IMIREXT_SIZE_BP | E1000_IMIREXT_CTRL_BP)); 1271 if (hw->mac.type == e1000_82576) { 1272 /* enable source port check */ 1273 wr32(E1000_SPQF(3), (__force unsigned int)htons(PTP_EV_PORT)); 1274 ftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP; 1275 } 1276 wr32(E1000_FTQF(3), ftqf); 1277 } else { 1278 wr32(E1000_FTQF(3), E1000_FTQF_MASK); 1279 } 1280 wrfl(); 1281 1282 /* clear TX/RX time stamp registers, just to be sure */ 1283 regval = rd32(E1000_TXSTMPL); 1284 regval = rd32(E1000_TXSTMPH); 1285 regval = rd32(E1000_RXSTMPL); 1286 regval = rd32(E1000_RXSTMPH); 1287 1288 return 0; 1289 } 1290 1291 /** 1292 * igb_ptp_set_ts_config - set hardware time stamping config 1293 * @netdev: netdev struct 1294 * @ifr: interface struct 1295 * 1296 **/ 1297 int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr) 1298 { 1299 struct igb_adapter *adapter = netdev_priv(netdev); 1300 struct hwtstamp_config config; 1301 int err; 1302 1303 if (copy_from_user(&config, ifr->ifr_data, sizeof(config))) 1304 return -EFAULT; 1305 1306 err = igb_ptp_set_timestamp_mode(adapter, &config); 1307 if (err) 1308 return err; 1309 1310 /* save these settings for future reference */ 1311 memcpy(&adapter->tstamp_config, &config, 1312 sizeof(adapter->tstamp_config)); 1313 1314 return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ? 1315 -EFAULT : 0; 1316 } 1317 1318 /** 1319 * igb_ptp_init - Initialize PTP functionality 1320 * @adapter: Board private structure 1321 * 1322 * This function is called at device probe to initialize the PTP 1323 * functionality. 1324 */ 1325 void igb_ptp_init(struct igb_adapter *adapter) 1326 { 1327 struct e1000_hw *hw = &adapter->hw; 1328 struct net_device *netdev = adapter->netdev; 1329 1330 switch (hw->mac.type) { 1331 case e1000_82576: 1332 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); 1333 adapter->ptp_caps.owner = THIS_MODULE; 1334 adapter->ptp_caps.max_adj = 999999881; 1335 adapter->ptp_caps.n_ext_ts = 0; 1336 adapter->ptp_caps.pps = 0; 1337 adapter->ptp_caps.adjfine = igb_ptp_adjfine_82576; 1338 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; 1339 adapter->ptp_caps.gettimex64 = igb_ptp_gettimex_82576; 1340 adapter->ptp_caps.settime64 = igb_ptp_settime_82576; 1341 adapter->ptp_caps.enable = igb_ptp_feature_enable; 1342 adapter->cc.read = igb_ptp_read_82576; 1343 adapter->cc.mask = CYCLECOUNTER_MASK(64); 1344 adapter->cc.mult = 1; 1345 adapter->cc.shift = IGB_82576_TSYNC_SHIFT; 1346 adapter->ptp_flags |= IGB_PTP_OVERFLOW_CHECK; 1347 break; 1348 case e1000_82580: 1349 case e1000_i354: 1350 case e1000_i350: 1351 igb_ptp_sdp_init(adapter); 1352 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); 1353 adapter->ptp_caps.owner = THIS_MODULE; 1354 adapter->ptp_caps.max_adj = 62499999; 1355 adapter->ptp_caps.n_ext_ts = IGB_N_EXTTS; 1356 adapter->ptp_caps.n_per_out = IGB_N_PEROUT; 1357 adapter->ptp_caps.n_pins = IGB_N_SDP; 1358 adapter->ptp_caps.pps = 0; 1359 adapter->ptp_caps.pin_config = adapter->sdp_config; 1360 adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580; 1361 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; 1362 adapter->ptp_caps.gettimex64 = igb_ptp_gettimex_82580; 1363 adapter->ptp_caps.settime64 = igb_ptp_settime_82576; 1364 adapter->ptp_caps.enable = igb_ptp_feature_enable_82580; 1365 adapter->ptp_caps.verify = igb_ptp_verify_pin; 1366 adapter->cc.read = igb_ptp_read_82580; 1367 adapter->cc.mask = CYCLECOUNTER_MASK(IGB_NBITS_82580); 1368 adapter->cc.mult = 1; 1369 adapter->cc.shift = 0; 1370 adapter->ptp_flags |= IGB_PTP_OVERFLOW_CHECK; 1371 break; 1372 case e1000_i210: 1373 case e1000_i211: 1374 igb_ptp_sdp_init(adapter); 1375 snprintf(adapter->ptp_caps.name, 16, "%pm", netdev->dev_addr); 1376 adapter->ptp_caps.owner = THIS_MODULE; 1377 adapter->ptp_caps.max_adj = 62499999; 1378 adapter->ptp_caps.n_ext_ts = IGB_N_EXTTS; 1379 adapter->ptp_caps.n_per_out = IGB_N_PEROUT; 1380 adapter->ptp_caps.n_pins = IGB_N_SDP; 1381 adapter->ptp_caps.pps = 1; 1382 adapter->ptp_caps.pin_config = adapter->sdp_config; 1383 adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580; 1384 adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210; 1385 adapter->ptp_caps.gettimex64 = igb_ptp_gettimex_i210; 1386 adapter->ptp_caps.settime64 = igb_ptp_settime_i210; 1387 adapter->ptp_caps.enable = igb_ptp_feature_enable_i210; 1388 adapter->ptp_caps.verify = igb_ptp_verify_pin; 1389 break; 1390 default: 1391 adapter->ptp_clock = NULL; 1392 return; 1393 } 1394 1395 adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps, 1396 &adapter->pdev->dev); 1397 if (IS_ERR(adapter->ptp_clock)) { 1398 adapter->ptp_clock = NULL; 1399 dev_err(&adapter->pdev->dev, "ptp_clock_register failed\n"); 1400 } else if (adapter->ptp_clock) { 1401 dev_info(&adapter->pdev->dev, "added PHC on %s\n", 1402 adapter->netdev->name); 1403 adapter->ptp_flags |= IGB_PTP_ENABLED; 1404 1405 spin_lock_init(&adapter->tmreg_lock); 1406 INIT_WORK(&adapter->ptp_tx_work, igb_ptp_tx_work); 1407 1408 if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK) 1409 INIT_DELAYED_WORK(&adapter->ptp_overflow_work, 1410 igb_ptp_overflow_check); 1411 1412 adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; 1413 adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF; 1414 1415 igb_ptp_reset(adapter); 1416 } 1417 } 1418 1419 /** 1420 * igb_ptp_sdp_init - utility function which inits the SDP config structs 1421 * @adapter: Board private structure. 1422 **/ 1423 void igb_ptp_sdp_init(struct igb_adapter *adapter) 1424 { 1425 int i; 1426 1427 for (i = 0; i < IGB_N_SDP; i++) { 1428 struct ptp_pin_desc *ppd = &adapter->sdp_config[i]; 1429 1430 snprintf(ppd->name, sizeof(ppd->name), "SDP%d", i); 1431 ppd->index = i; 1432 ppd->func = PTP_PF_NONE; 1433 } 1434 } 1435 1436 /** 1437 * igb_ptp_suspend - Disable PTP work items and prepare for suspend 1438 * @adapter: Board private structure 1439 * 1440 * This function stops the overflow check work and PTP Tx timestamp work, and 1441 * will prepare the device for OS suspend. 1442 */ 1443 void igb_ptp_suspend(struct igb_adapter *adapter) 1444 { 1445 if (!(adapter->ptp_flags & IGB_PTP_ENABLED)) 1446 return; 1447 1448 if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK) 1449 cancel_delayed_work_sync(&adapter->ptp_overflow_work); 1450 1451 cancel_work_sync(&adapter->ptp_tx_work); 1452 if (adapter->ptp_tx_skb) { 1453 dev_kfree_skb_any(adapter->ptp_tx_skb); 1454 adapter->ptp_tx_skb = NULL; 1455 clear_bit_unlock(__IGB_PTP_TX_IN_PROGRESS, &adapter->state); 1456 } 1457 } 1458 1459 /** 1460 * igb_ptp_stop - Disable PTP device and stop the overflow check. 1461 * @adapter: Board private structure. 1462 * 1463 * This function stops the PTP support and cancels the delayed work. 1464 **/ 1465 void igb_ptp_stop(struct igb_adapter *adapter) 1466 { 1467 igb_ptp_suspend(adapter); 1468 1469 if (adapter->ptp_clock) { 1470 ptp_clock_unregister(adapter->ptp_clock); 1471 dev_info(&adapter->pdev->dev, "removed PHC on %s\n", 1472 adapter->netdev->name); 1473 adapter->ptp_flags &= ~IGB_PTP_ENABLED; 1474 } 1475 } 1476 1477 /** 1478 * igb_ptp_reset - Re-enable the adapter for PTP following a reset. 1479 * @adapter: Board private structure. 1480 * 1481 * This function handles the reset work required to re-enable the PTP device. 1482 **/ 1483 void igb_ptp_reset(struct igb_adapter *adapter) 1484 { 1485 struct e1000_hw *hw = &adapter->hw; 1486 unsigned long flags; 1487 1488 /* reset the tstamp_config */ 1489 igb_ptp_set_timestamp_mode(adapter, &adapter->tstamp_config); 1490 1491 spin_lock_irqsave(&adapter->tmreg_lock, flags); 1492 1493 switch (adapter->hw.mac.type) { 1494 case e1000_82576: 1495 /* Dial the nominal frequency. */ 1496 wr32(E1000_TIMINCA, INCPERIOD_82576 | INCVALUE_82576); 1497 break; 1498 case e1000_82580: 1499 case e1000_i354: 1500 case e1000_i350: 1501 case e1000_i210: 1502 case e1000_i211: 1503 wr32(E1000_TSAUXC, 0x0); 1504 wr32(E1000_TSSDP, 0x0); 1505 wr32(E1000_TSIM, 1506 TSYNC_INTERRUPTS | 1507 (adapter->pps_sys_wrap_on ? TSINTR_SYS_WRAP : 0)); 1508 wr32(E1000_IMS, E1000_IMS_TS); 1509 break; 1510 default: 1511 /* No work to do. */ 1512 goto out; 1513 } 1514 1515 /* Re-initialize the timer. */ 1516 if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211)) { 1517 struct timespec64 ts = ktime_to_timespec64(ktime_get_real()); 1518 1519 igb_ptp_write_i210(adapter, &ts); 1520 } else { 1521 timecounter_init(&adapter->tc, &adapter->cc, 1522 ktime_to_ns(ktime_get_real())); 1523 } 1524 out: 1525 spin_unlock_irqrestore(&adapter->tmreg_lock, flags); 1526 1527 wrfl(); 1528 1529 if (adapter->ptp_flags & IGB_PTP_OVERFLOW_CHECK) 1530 schedule_delayed_work(&adapter->ptp_overflow_work, 1531 IGB_SYSTIM_OVERFLOW_PERIOD); 1532 } 1533