xref: /linux/drivers/net/ethernet/intel/ice/ice_ptp.c (revision 71dfa617ea9f18e4585fe78364217cd32b1fc382)
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (C) 2021, Intel Corporation. */
3 
4 #include "ice.h"
5 #include "ice_lib.h"
6 #include "ice_trace.h"
7 
8 #define E810_OUT_PROP_DELAY_NS 1
9 
10 #define UNKNOWN_INCVAL_E82X 0x100000000ULL
11 
12 static const struct ptp_pin_desc ice_pin_desc_e810t[] = {
13 	/* name    idx   func         chan */
14 	{ "GNSS",  GNSS, PTP_PF_EXTTS, 0, { 0, } },
15 	{ "SMA1",  SMA1, PTP_PF_NONE, 1, { 0, } },
16 	{ "U.FL1", UFL1, PTP_PF_NONE, 1, { 0, } },
17 	{ "SMA2",  SMA2, PTP_PF_NONE, 2, { 0, } },
18 	{ "U.FL2", UFL2, PTP_PF_NONE, 2, { 0, } },
19 };
20 
21 /**
22  * ice_get_sma_config_e810t
23  * @hw: pointer to the hw struct
24  * @ptp_pins: pointer to the ptp_pin_desc struture
25  *
26  * Read the configuration of the SMA control logic and put it into the
27  * ptp_pin_desc structure
28  */
29 static int
30 ice_get_sma_config_e810t(struct ice_hw *hw, struct ptp_pin_desc *ptp_pins)
31 {
32 	u8 data, i;
33 	int status;
34 
35 	/* Read initial pin state */
36 	status = ice_read_sma_ctrl_e810t(hw, &data);
37 	if (status)
38 		return status;
39 
40 	/* initialize with defaults */
41 	for (i = 0; i < NUM_PTP_PINS_E810T; i++) {
42 		strscpy(ptp_pins[i].name, ice_pin_desc_e810t[i].name,
43 			sizeof(ptp_pins[i].name));
44 		ptp_pins[i].index = ice_pin_desc_e810t[i].index;
45 		ptp_pins[i].func = ice_pin_desc_e810t[i].func;
46 		ptp_pins[i].chan = ice_pin_desc_e810t[i].chan;
47 	}
48 
49 	/* Parse SMA1/UFL1 */
50 	switch (data & ICE_SMA1_MASK_E810T) {
51 	case ICE_SMA1_MASK_E810T:
52 	default:
53 		ptp_pins[SMA1].func = PTP_PF_NONE;
54 		ptp_pins[UFL1].func = PTP_PF_NONE;
55 		break;
56 	case ICE_SMA1_DIR_EN_E810T:
57 		ptp_pins[SMA1].func = PTP_PF_PEROUT;
58 		ptp_pins[UFL1].func = PTP_PF_NONE;
59 		break;
60 	case ICE_SMA1_TX_EN_E810T:
61 		ptp_pins[SMA1].func = PTP_PF_EXTTS;
62 		ptp_pins[UFL1].func = PTP_PF_NONE;
63 		break;
64 	case 0:
65 		ptp_pins[SMA1].func = PTP_PF_EXTTS;
66 		ptp_pins[UFL1].func = PTP_PF_PEROUT;
67 		break;
68 	}
69 
70 	/* Parse SMA2/UFL2 */
71 	switch (data & ICE_SMA2_MASK_E810T) {
72 	case ICE_SMA2_MASK_E810T:
73 	default:
74 		ptp_pins[SMA2].func = PTP_PF_NONE;
75 		ptp_pins[UFL2].func = PTP_PF_NONE;
76 		break;
77 	case (ICE_SMA2_TX_EN_E810T | ICE_SMA2_UFL2_RX_DIS_E810T):
78 		ptp_pins[SMA2].func = PTP_PF_EXTTS;
79 		ptp_pins[UFL2].func = PTP_PF_NONE;
80 		break;
81 	case (ICE_SMA2_DIR_EN_E810T | ICE_SMA2_UFL2_RX_DIS_E810T):
82 		ptp_pins[SMA2].func = PTP_PF_PEROUT;
83 		ptp_pins[UFL2].func = PTP_PF_NONE;
84 		break;
85 	case (ICE_SMA2_DIR_EN_E810T | ICE_SMA2_TX_EN_E810T):
86 		ptp_pins[SMA2].func = PTP_PF_NONE;
87 		ptp_pins[UFL2].func = PTP_PF_EXTTS;
88 		break;
89 	case ICE_SMA2_DIR_EN_E810T:
90 		ptp_pins[SMA2].func = PTP_PF_PEROUT;
91 		ptp_pins[UFL2].func = PTP_PF_EXTTS;
92 		break;
93 	}
94 
95 	return 0;
96 }
97 
98 /**
99  * ice_ptp_set_sma_config_e810t
100  * @hw: pointer to the hw struct
101  * @ptp_pins: pointer to the ptp_pin_desc struture
102  *
103  * Set the configuration of the SMA control logic based on the configuration in
104  * num_pins parameter
105  */
106 static int
107 ice_ptp_set_sma_config_e810t(struct ice_hw *hw,
108 			     const struct ptp_pin_desc *ptp_pins)
109 {
110 	int status;
111 	u8 data;
112 
113 	/* SMA1 and UFL1 cannot be set to TX at the same time */
114 	if (ptp_pins[SMA1].func == PTP_PF_PEROUT &&
115 	    ptp_pins[UFL1].func == PTP_PF_PEROUT)
116 		return -EINVAL;
117 
118 	/* SMA2 and UFL2 cannot be set to RX at the same time */
119 	if (ptp_pins[SMA2].func == PTP_PF_EXTTS &&
120 	    ptp_pins[UFL2].func == PTP_PF_EXTTS)
121 		return -EINVAL;
122 
123 	/* Read initial pin state value */
124 	status = ice_read_sma_ctrl_e810t(hw, &data);
125 	if (status)
126 		return status;
127 
128 	/* Set the right sate based on the desired configuration */
129 	data &= ~ICE_SMA1_MASK_E810T;
130 	if (ptp_pins[SMA1].func == PTP_PF_NONE &&
131 	    ptp_pins[UFL1].func == PTP_PF_NONE) {
132 		dev_info(ice_hw_to_dev(hw), "SMA1 + U.FL1 disabled");
133 		data |= ICE_SMA1_MASK_E810T;
134 	} else if (ptp_pins[SMA1].func == PTP_PF_EXTTS &&
135 		   ptp_pins[UFL1].func == PTP_PF_NONE) {
136 		dev_info(ice_hw_to_dev(hw), "SMA1 RX");
137 		data |= ICE_SMA1_TX_EN_E810T;
138 	} else if (ptp_pins[SMA1].func == PTP_PF_NONE &&
139 		   ptp_pins[UFL1].func == PTP_PF_PEROUT) {
140 		/* U.FL 1 TX will always enable SMA 1 RX */
141 		dev_info(ice_hw_to_dev(hw), "SMA1 RX + U.FL1 TX");
142 	} else if (ptp_pins[SMA1].func == PTP_PF_EXTTS &&
143 		   ptp_pins[UFL1].func == PTP_PF_PEROUT) {
144 		dev_info(ice_hw_to_dev(hw), "SMA1 RX + U.FL1 TX");
145 	} else if (ptp_pins[SMA1].func == PTP_PF_PEROUT &&
146 		   ptp_pins[UFL1].func == PTP_PF_NONE) {
147 		dev_info(ice_hw_to_dev(hw), "SMA1 TX");
148 		data |= ICE_SMA1_DIR_EN_E810T;
149 	}
150 
151 	data &= ~ICE_SMA2_MASK_E810T;
152 	if (ptp_pins[SMA2].func == PTP_PF_NONE &&
153 	    ptp_pins[UFL2].func == PTP_PF_NONE) {
154 		dev_info(ice_hw_to_dev(hw), "SMA2 + U.FL2 disabled");
155 		data |= ICE_SMA2_MASK_E810T;
156 	} else if (ptp_pins[SMA2].func == PTP_PF_EXTTS &&
157 			ptp_pins[UFL2].func == PTP_PF_NONE) {
158 		dev_info(ice_hw_to_dev(hw), "SMA2 RX");
159 		data |= (ICE_SMA2_TX_EN_E810T |
160 			 ICE_SMA2_UFL2_RX_DIS_E810T);
161 	} else if (ptp_pins[SMA2].func == PTP_PF_NONE &&
162 		   ptp_pins[UFL2].func == PTP_PF_EXTTS) {
163 		dev_info(ice_hw_to_dev(hw), "UFL2 RX");
164 		data |= (ICE_SMA2_DIR_EN_E810T | ICE_SMA2_TX_EN_E810T);
165 	} else if (ptp_pins[SMA2].func == PTP_PF_PEROUT &&
166 		   ptp_pins[UFL2].func == PTP_PF_NONE) {
167 		dev_info(ice_hw_to_dev(hw), "SMA2 TX");
168 		data |= (ICE_SMA2_DIR_EN_E810T |
169 			 ICE_SMA2_UFL2_RX_DIS_E810T);
170 	} else if (ptp_pins[SMA2].func == PTP_PF_PEROUT &&
171 		   ptp_pins[UFL2].func == PTP_PF_EXTTS) {
172 		dev_info(ice_hw_to_dev(hw), "SMA2 TX + U.FL2 RX");
173 		data |= ICE_SMA2_DIR_EN_E810T;
174 	}
175 
176 	return ice_write_sma_ctrl_e810t(hw, data);
177 }
178 
179 /**
180  * ice_ptp_set_sma_e810t
181  * @info: the driver's PTP info structure
182  * @pin: pin index in kernel structure
183  * @func: Pin function to be set (PTP_PF_NONE, PTP_PF_EXTTS or PTP_PF_PEROUT)
184  *
185  * Set the configuration of a single SMA pin
186  */
187 static int
188 ice_ptp_set_sma_e810t(struct ptp_clock_info *info, unsigned int pin,
189 		      enum ptp_pin_function func)
190 {
191 	struct ptp_pin_desc ptp_pins[NUM_PTP_PINS_E810T];
192 	struct ice_pf *pf = ptp_info_to_pf(info);
193 	struct ice_hw *hw = &pf->hw;
194 	int err;
195 
196 	if (pin < SMA1 || func > PTP_PF_PEROUT)
197 		return -EOPNOTSUPP;
198 
199 	err = ice_get_sma_config_e810t(hw, ptp_pins);
200 	if (err)
201 		return err;
202 
203 	/* Disable the same function on the other pin sharing the channel */
204 	if (pin == SMA1 && ptp_pins[UFL1].func == func)
205 		ptp_pins[UFL1].func = PTP_PF_NONE;
206 	if (pin == UFL1 && ptp_pins[SMA1].func == func)
207 		ptp_pins[SMA1].func = PTP_PF_NONE;
208 
209 	if (pin == SMA2 && ptp_pins[UFL2].func == func)
210 		ptp_pins[UFL2].func = PTP_PF_NONE;
211 	if (pin == UFL2 && ptp_pins[SMA2].func == func)
212 		ptp_pins[SMA2].func = PTP_PF_NONE;
213 
214 	/* Set up new pin function in the temp table */
215 	ptp_pins[pin].func = func;
216 
217 	return ice_ptp_set_sma_config_e810t(hw, ptp_pins);
218 }
219 
220 /**
221  * ice_verify_pin_e810t
222  * @info: the driver's PTP info structure
223  * @pin: Pin index
224  * @func: Assigned function
225  * @chan: Assigned channel
226  *
227  * Verify if pin supports requested pin function. If the Check pins consistency.
228  * Reconfigure the SMA logic attached to the given pin to enable its
229  * desired functionality
230  */
231 static int
232 ice_verify_pin_e810t(struct ptp_clock_info *info, unsigned int pin,
233 		     enum ptp_pin_function func, unsigned int chan)
234 {
235 	/* Don't allow channel reassignment */
236 	if (chan != ice_pin_desc_e810t[pin].chan)
237 		return -EOPNOTSUPP;
238 
239 	/* Check if functions are properly assigned */
240 	switch (func) {
241 	case PTP_PF_NONE:
242 		break;
243 	case PTP_PF_EXTTS:
244 		if (pin == UFL1)
245 			return -EOPNOTSUPP;
246 		break;
247 	case PTP_PF_PEROUT:
248 		if (pin == UFL2 || pin == GNSS)
249 			return -EOPNOTSUPP;
250 		break;
251 	case PTP_PF_PHYSYNC:
252 		return -EOPNOTSUPP;
253 	}
254 
255 	return ice_ptp_set_sma_e810t(info, pin, func);
256 }
257 
258 /**
259  * ice_ptp_cfg_tx_interrupt - Configure Tx timestamp interrupt for the device
260  * @pf: Board private structure
261  *
262  * Program the device to respond appropriately to the Tx timestamp interrupt
263  * cause.
264  */
265 static void ice_ptp_cfg_tx_interrupt(struct ice_pf *pf)
266 {
267 	struct ice_hw *hw = &pf->hw;
268 	bool enable;
269 	u32 val;
270 
271 	switch (pf->ptp.tx_interrupt_mode) {
272 	case ICE_PTP_TX_INTERRUPT_ALL:
273 		/* React to interrupts across all quads. */
274 		wr32(hw, PFINT_TSYN_MSK + (0x4 * hw->pf_id), (u32)0x1f);
275 		enable = true;
276 		break;
277 	case ICE_PTP_TX_INTERRUPT_NONE:
278 		/* Do not react to interrupts on any quad. */
279 		wr32(hw, PFINT_TSYN_MSK + (0x4 * hw->pf_id), (u32)0x0);
280 		enable = false;
281 		break;
282 	case ICE_PTP_TX_INTERRUPT_SELF:
283 	default:
284 		enable = pf->ptp.tstamp_config.tx_type == HWTSTAMP_TX_ON;
285 		break;
286 	}
287 
288 	/* Configure the Tx timestamp interrupt */
289 	val = rd32(hw, PFINT_OICR_ENA);
290 	if (enable)
291 		val |= PFINT_OICR_TSYN_TX_M;
292 	else
293 		val &= ~PFINT_OICR_TSYN_TX_M;
294 	wr32(hw, PFINT_OICR_ENA, val);
295 }
296 
297 /**
298  * ice_set_rx_tstamp - Enable or disable Rx timestamping
299  * @pf: The PF pointer to search in
300  * @on: bool value for whether timestamps are enabled or disabled
301  */
302 static void ice_set_rx_tstamp(struct ice_pf *pf, bool on)
303 {
304 	struct ice_vsi *vsi;
305 	u16 i;
306 
307 	vsi = ice_get_main_vsi(pf);
308 	if (!vsi || !vsi->rx_rings)
309 		return;
310 
311 	/* Set the timestamp flag for all the Rx rings */
312 	ice_for_each_rxq(vsi, i) {
313 		if (!vsi->rx_rings[i])
314 			continue;
315 		vsi->rx_rings[i]->ptp_rx = on;
316 	}
317 }
318 
319 /**
320  * ice_ptp_disable_timestamp_mode - Disable current timestamp mode
321  * @pf: Board private structure
322  *
323  * Called during preparation for reset to temporarily disable timestamping on
324  * the device. Called during remove to disable timestamping while cleaning up
325  * driver resources.
326  */
327 static void ice_ptp_disable_timestamp_mode(struct ice_pf *pf)
328 {
329 	struct ice_hw *hw = &pf->hw;
330 	u32 val;
331 
332 	val = rd32(hw, PFINT_OICR_ENA);
333 	val &= ~PFINT_OICR_TSYN_TX_M;
334 	wr32(hw, PFINT_OICR_ENA, val);
335 
336 	ice_set_rx_tstamp(pf, false);
337 }
338 
339 /**
340  * ice_ptp_restore_timestamp_mode - Restore timestamp configuration
341  * @pf: Board private structure
342  *
343  * Called at the end of rebuild to restore timestamp configuration after
344  * a device reset.
345  */
346 void ice_ptp_restore_timestamp_mode(struct ice_pf *pf)
347 {
348 	struct ice_hw *hw = &pf->hw;
349 	bool enable_rx;
350 
351 	ice_ptp_cfg_tx_interrupt(pf);
352 
353 	enable_rx = pf->ptp.tstamp_config.rx_filter == HWTSTAMP_FILTER_ALL;
354 	ice_set_rx_tstamp(pf, enable_rx);
355 
356 	/* Trigger an immediate software interrupt to ensure that timestamps
357 	 * which occurred during reset are handled now.
358 	 */
359 	wr32(hw, PFINT_OICR, PFINT_OICR_TSYN_TX_M);
360 	ice_flush(hw);
361 }
362 
363 /**
364  * ice_ptp_read_src_clk_reg - Read the source clock register
365  * @pf: Board private structure
366  * @sts: Optional parameter for holding a pair of system timestamps from
367  *       the system clock. Will be ignored if NULL is given.
368  */
369 static u64
370 ice_ptp_read_src_clk_reg(struct ice_pf *pf, struct ptp_system_timestamp *sts)
371 {
372 	struct ice_hw *hw = &pf->hw;
373 	u32 hi, lo, lo2;
374 	u8 tmr_idx;
375 
376 	tmr_idx = ice_get_ptp_src_clock_index(hw);
377 	/* Read the system timestamp pre PHC read */
378 	ptp_read_system_prets(sts);
379 
380 	lo = rd32(hw, GLTSYN_TIME_L(tmr_idx));
381 
382 	/* Read the system timestamp post PHC read */
383 	ptp_read_system_postts(sts);
384 
385 	hi = rd32(hw, GLTSYN_TIME_H(tmr_idx));
386 	lo2 = rd32(hw, GLTSYN_TIME_L(tmr_idx));
387 
388 	if (lo2 < lo) {
389 		/* if TIME_L rolled over read TIME_L again and update
390 		 * system timestamps
391 		 */
392 		ptp_read_system_prets(sts);
393 		lo = rd32(hw, GLTSYN_TIME_L(tmr_idx));
394 		ptp_read_system_postts(sts);
395 		hi = rd32(hw, GLTSYN_TIME_H(tmr_idx));
396 	}
397 
398 	return ((u64)hi << 32) | lo;
399 }
400 
401 /**
402  * ice_ptp_extend_32b_ts - Convert a 32b nanoseconds timestamp to 64b
403  * @cached_phc_time: recently cached copy of PHC time
404  * @in_tstamp: Ingress/egress 32b nanoseconds timestamp value
405  *
406  * Hardware captures timestamps which contain only 32 bits of nominal
407  * nanoseconds, as opposed to the 64bit timestamps that the stack expects.
408  * Note that the captured timestamp values may be 40 bits, but the lower
409  * 8 bits are sub-nanoseconds and generally discarded.
410  *
411  * Extend the 32bit nanosecond timestamp using the following algorithm and
412  * assumptions:
413  *
414  * 1) have a recently cached copy of the PHC time
415  * 2) assume that the in_tstamp was captured 2^31 nanoseconds (~2.1
416  *    seconds) before or after the PHC time was captured.
417  * 3) calculate the delta between the cached time and the timestamp
418  * 4) if the delta is smaller than 2^31 nanoseconds, then the timestamp was
419  *    captured after the PHC time. In this case, the full timestamp is just
420  *    the cached PHC time plus the delta.
421  * 5) otherwise, if the delta is larger than 2^31 nanoseconds, then the
422  *    timestamp was captured *before* the PHC time, i.e. because the PHC
423  *    cache was updated after the timestamp was captured by hardware. In this
424  *    case, the full timestamp is the cached time minus the inverse delta.
425  *
426  * This algorithm works even if the PHC time was updated after a Tx timestamp
427  * was requested, but before the Tx timestamp event was reported from
428  * hardware.
429  *
430  * This calculation primarily relies on keeping the cached PHC time up to
431  * date. If the timestamp was captured more than 2^31 nanoseconds after the
432  * PHC time, it is possible that the lower 32bits of PHC time have
433  * overflowed more than once, and we might generate an incorrect timestamp.
434  *
435  * This is prevented by (a) periodically updating the cached PHC time once
436  * a second, and (b) discarding any Tx timestamp packet if it has waited for
437  * a timestamp for more than one second.
438  */
439 static u64 ice_ptp_extend_32b_ts(u64 cached_phc_time, u32 in_tstamp)
440 {
441 	u32 delta, phc_time_lo;
442 	u64 ns;
443 
444 	/* Extract the lower 32 bits of the PHC time */
445 	phc_time_lo = (u32)cached_phc_time;
446 
447 	/* Calculate the delta between the lower 32bits of the cached PHC
448 	 * time and the in_tstamp value
449 	 */
450 	delta = (in_tstamp - phc_time_lo);
451 
452 	/* Do not assume that the in_tstamp is always more recent than the
453 	 * cached PHC time. If the delta is large, it indicates that the
454 	 * in_tstamp was taken in the past, and should be converted
455 	 * forward.
456 	 */
457 	if (delta > (U32_MAX / 2)) {
458 		/* reverse the delta calculation here */
459 		delta = (phc_time_lo - in_tstamp);
460 		ns = cached_phc_time - delta;
461 	} else {
462 		ns = cached_phc_time + delta;
463 	}
464 
465 	return ns;
466 }
467 
468 /**
469  * ice_ptp_extend_40b_ts - Convert a 40b timestamp to 64b nanoseconds
470  * @pf: Board private structure
471  * @in_tstamp: Ingress/egress 40b timestamp value
472  *
473  * The Tx and Rx timestamps are 40 bits wide, including 32 bits of nominal
474  * nanoseconds, 7 bits of sub-nanoseconds, and a valid bit.
475  *
476  *  *--------------------------------------------------------------*
477  *  | 32 bits of nanoseconds | 7 high bits of sub ns underflow | v |
478  *  *--------------------------------------------------------------*
479  *
480  * The low bit is an indicator of whether the timestamp is valid. The next
481  * 7 bits are a capture of the upper 7 bits of the sub-nanosecond underflow,
482  * and the remaining 32 bits are the lower 32 bits of the PHC timer.
483  *
484  * It is assumed that the caller verifies the timestamp is valid prior to
485  * calling this function.
486  *
487  * Extract the 32bit nominal nanoseconds and extend them. Use the cached PHC
488  * time stored in the device private PTP structure as the basis for timestamp
489  * extension.
490  *
491  * See ice_ptp_extend_32b_ts for a detailed explanation of the extension
492  * algorithm.
493  */
494 static u64 ice_ptp_extend_40b_ts(struct ice_pf *pf, u64 in_tstamp)
495 {
496 	const u64 mask = GENMASK_ULL(31, 0);
497 	unsigned long discard_time;
498 
499 	/* Discard the hardware timestamp if the cached PHC time is too old */
500 	discard_time = pf->ptp.cached_phc_jiffies + msecs_to_jiffies(2000);
501 	if (time_is_before_jiffies(discard_time)) {
502 		pf->ptp.tx_hwtstamp_discarded++;
503 		return 0;
504 	}
505 
506 	return ice_ptp_extend_32b_ts(pf->ptp.cached_phc_time,
507 				     (in_tstamp >> 8) & mask);
508 }
509 
510 /**
511  * ice_ptp_is_tx_tracker_up - Check if Tx tracker is ready for new timestamps
512  * @tx: the PTP Tx timestamp tracker to check
513  *
514  * Check that a given PTP Tx timestamp tracker is up, i.e. that it is ready
515  * to accept new timestamp requests.
516  *
517  * Assumes the tx->lock spinlock is already held.
518  */
519 static bool
520 ice_ptp_is_tx_tracker_up(struct ice_ptp_tx *tx)
521 {
522 	lockdep_assert_held(&tx->lock);
523 
524 	return tx->init && !tx->calibrating;
525 }
526 
527 /**
528  * ice_ptp_req_tx_single_tstamp - Request Tx timestamp for a port from FW
529  * @tx: the PTP Tx timestamp tracker
530  * @idx: index of the timestamp to request
531  */
532 void ice_ptp_req_tx_single_tstamp(struct ice_ptp_tx *tx, u8 idx)
533 {
534 	struct ice_ptp_port *ptp_port;
535 	struct sk_buff *skb;
536 	struct ice_pf *pf;
537 
538 	if (!tx->init)
539 		return;
540 
541 	ptp_port = container_of(tx, struct ice_ptp_port, tx);
542 	pf = ptp_port_to_pf(ptp_port);
543 
544 	/* Drop packets which have waited for more than 2 seconds */
545 	if (time_is_before_jiffies(tx->tstamps[idx].start + 2 * HZ)) {
546 		/* Count the number of Tx timestamps that timed out */
547 		pf->ptp.tx_hwtstamp_timeouts++;
548 
549 		skb = tx->tstamps[idx].skb;
550 		tx->tstamps[idx].skb = NULL;
551 		clear_bit(idx, tx->in_use);
552 
553 		dev_kfree_skb_any(skb);
554 		return;
555 	}
556 
557 	ice_trace(tx_tstamp_fw_req, tx->tstamps[idx].skb, idx);
558 
559 	/* Write TS index to read to the PF register so the FW can read it */
560 	wr32(&pf->hw, PF_SB_ATQBAL,
561 	     TS_LL_READ_TS_INTR | FIELD_PREP(TS_LL_READ_TS_IDX, idx) |
562 	     TS_LL_READ_TS);
563 	tx->last_ll_ts_idx_read = idx;
564 }
565 
566 /**
567  * ice_ptp_complete_tx_single_tstamp - Complete Tx timestamp for a port
568  * @tx: the PTP Tx timestamp tracker
569  */
570 void ice_ptp_complete_tx_single_tstamp(struct ice_ptp_tx *tx)
571 {
572 	struct skb_shared_hwtstamps shhwtstamps = {};
573 	u8 idx = tx->last_ll_ts_idx_read;
574 	struct ice_ptp_port *ptp_port;
575 	u64 raw_tstamp, tstamp;
576 	bool drop_ts = false;
577 	struct sk_buff *skb;
578 	struct ice_pf *pf;
579 	u32 val;
580 
581 	if (!tx->init || tx->last_ll_ts_idx_read < 0)
582 		return;
583 
584 	ptp_port = container_of(tx, struct ice_ptp_port, tx);
585 	pf = ptp_port_to_pf(ptp_port);
586 
587 	ice_trace(tx_tstamp_fw_done, tx->tstamps[idx].skb, idx);
588 
589 	val = rd32(&pf->hw, PF_SB_ATQBAL);
590 
591 	/* When the bit is cleared, the TS is ready in the register */
592 	if (val & TS_LL_READ_TS) {
593 		dev_err(ice_pf_to_dev(pf), "Failed to get the Tx tstamp - FW not ready");
594 		return;
595 	}
596 
597 	/* High 8 bit value of the TS is on the bits 16:23 */
598 	raw_tstamp = FIELD_GET(TS_LL_READ_TS_HIGH, val);
599 	raw_tstamp <<= 32;
600 
601 	/* Read the low 32 bit value */
602 	raw_tstamp |= (u64)rd32(&pf->hw, PF_SB_ATQBAH);
603 
604 	/* Devices using this interface always verify the timestamp differs
605 	 * relative to the last cached timestamp value.
606 	 */
607 	if (raw_tstamp == tx->tstamps[idx].cached_tstamp)
608 		return;
609 
610 	tx->tstamps[idx].cached_tstamp = raw_tstamp;
611 	clear_bit(idx, tx->in_use);
612 	skb = tx->tstamps[idx].skb;
613 	tx->tstamps[idx].skb = NULL;
614 	if (test_and_clear_bit(idx, tx->stale))
615 		drop_ts = true;
616 
617 	if (!skb)
618 		return;
619 
620 	if (drop_ts) {
621 		dev_kfree_skb_any(skb);
622 		return;
623 	}
624 
625 	/* Extend the timestamp using cached PHC time */
626 	tstamp = ice_ptp_extend_40b_ts(pf, raw_tstamp);
627 	if (tstamp) {
628 		shhwtstamps.hwtstamp = ns_to_ktime(tstamp);
629 		ice_trace(tx_tstamp_complete, skb, idx);
630 	}
631 
632 	skb_tstamp_tx(skb, &shhwtstamps);
633 	dev_kfree_skb_any(skb);
634 }
635 
636 /**
637  * ice_ptp_process_tx_tstamp - Process Tx timestamps for a port
638  * @tx: the PTP Tx timestamp tracker
639  *
640  * Process timestamps captured by the PHY associated with this port. To do
641  * this, loop over each index with a waiting skb.
642  *
643  * If a given index has a valid timestamp, perform the following steps:
644  *
645  * 1) check that the timestamp request is not stale
646  * 2) check that a timestamp is ready and available in the PHY memory bank
647  * 3) read and copy the timestamp out of the PHY register
648  * 4) unlock the index by clearing the associated in_use bit
649  * 5) check if the timestamp is stale, and discard if so
650  * 6) extend the 40 bit timestamp value to get a 64 bit timestamp value
651  * 7) send this 64 bit timestamp to the stack
652  *
653  * Note that we do not hold the tracking lock while reading the Tx timestamp.
654  * This is because reading the timestamp requires taking a mutex that might
655  * sleep.
656  *
657  * The only place where we set in_use is when a new timestamp is initiated
658  * with a slot index. This is only called in the hard xmit routine where an
659  * SKB has a request flag set. The only places where we clear this bit is this
660  * function, or during teardown when the Tx timestamp tracker is being
661  * removed. A timestamp index will never be re-used until the in_use bit for
662  * that index is cleared.
663  *
664  * If a Tx thread starts a new timestamp, we might not begin processing it
665  * right away but we will notice it at the end when we re-queue the task.
666  *
667  * If a Tx thread starts a new timestamp just after this function exits, the
668  * interrupt for that timestamp should re-trigger this function once
669  * a timestamp is ready.
670  *
671  * In cases where the PTP hardware clock was directly adjusted, some
672  * timestamps may not be able to safely use the timestamp extension math. In
673  * this case, software will set the stale bit for any outstanding Tx
674  * timestamps when the clock is adjusted. Then this function will discard
675  * those captured timestamps instead of sending them to the stack.
676  *
677  * If a Tx packet has been waiting for more than 2 seconds, it is not possible
678  * to correctly extend the timestamp using the cached PHC time. It is
679  * extremely unlikely that a packet will ever take this long to timestamp. If
680  * we detect a Tx timestamp request that has waited for this long we assume
681  * the packet will never be sent by hardware and discard it without reading
682  * the timestamp register.
683  */
684 static void ice_ptp_process_tx_tstamp(struct ice_ptp_tx *tx)
685 {
686 	struct ice_ptp_port *ptp_port;
687 	unsigned long flags;
688 	struct ice_pf *pf;
689 	struct ice_hw *hw;
690 	u64 tstamp_ready;
691 	bool link_up;
692 	int err;
693 	u8 idx;
694 
695 	ptp_port = container_of(tx, struct ice_ptp_port, tx);
696 	pf = ptp_port_to_pf(ptp_port);
697 	hw = &pf->hw;
698 
699 	/* Read the Tx ready status first */
700 	if (tx->has_ready_bitmap) {
701 		err = ice_get_phy_tx_tstamp_ready(hw, tx->block, &tstamp_ready);
702 		if (err)
703 			return;
704 	}
705 
706 	/* Drop packets if the link went down */
707 	link_up = ptp_port->link_up;
708 
709 	for_each_set_bit(idx, tx->in_use, tx->len) {
710 		struct skb_shared_hwtstamps shhwtstamps = {};
711 		u8 phy_idx = idx + tx->offset;
712 		u64 raw_tstamp = 0, tstamp;
713 		bool drop_ts = !link_up;
714 		struct sk_buff *skb;
715 
716 		/* Drop packets which have waited for more than 2 seconds */
717 		if (time_is_before_jiffies(tx->tstamps[idx].start + 2 * HZ)) {
718 			drop_ts = true;
719 
720 			/* Count the number of Tx timestamps that timed out */
721 			pf->ptp.tx_hwtstamp_timeouts++;
722 		}
723 
724 		/* Only read a timestamp from the PHY if its marked as ready
725 		 * by the tstamp_ready register. This avoids unnecessary
726 		 * reading of timestamps which are not yet valid. This is
727 		 * important as we must read all timestamps which are valid
728 		 * and only timestamps which are valid during each interrupt.
729 		 * If we do not, the hardware logic for generating a new
730 		 * interrupt can get stuck on some devices.
731 		 */
732 		if (tx->has_ready_bitmap &&
733 		    !(tstamp_ready & BIT_ULL(phy_idx))) {
734 			if (drop_ts)
735 				goto skip_ts_read;
736 
737 			continue;
738 		}
739 
740 		ice_trace(tx_tstamp_fw_req, tx->tstamps[idx].skb, idx);
741 
742 		err = ice_read_phy_tstamp(hw, tx->block, phy_idx, &raw_tstamp);
743 		if (err && !drop_ts)
744 			continue;
745 
746 		ice_trace(tx_tstamp_fw_done, tx->tstamps[idx].skb, idx);
747 
748 		/* For PHYs which don't implement a proper timestamp ready
749 		 * bitmap, verify that the timestamp value is different
750 		 * from the last cached timestamp. If it is not, skip this for
751 		 * now assuming it hasn't yet been captured by hardware.
752 		 */
753 		if (!drop_ts && !tx->has_ready_bitmap &&
754 		    raw_tstamp == tx->tstamps[idx].cached_tstamp)
755 			continue;
756 
757 		/* Discard any timestamp value without the valid bit set */
758 		if (!(raw_tstamp & ICE_PTP_TS_VALID))
759 			drop_ts = true;
760 
761 skip_ts_read:
762 		spin_lock_irqsave(&tx->lock, flags);
763 		if (!tx->has_ready_bitmap && raw_tstamp)
764 			tx->tstamps[idx].cached_tstamp = raw_tstamp;
765 		clear_bit(idx, tx->in_use);
766 		skb = tx->tstamps[idx].skb;
767 		tx->tstamps[idx].skb = NULL;
768 		if (test_and_clear_bit(idx, tx->stale))
769 			drop_ts = true;
770 		spin_unlock_irqrestore(&tx->lock, flags);
771 
772 		/* It is unlikely but possible that the SKB will have been
773 		 * flushed at this point due to link change or teardown.
774 		 */
775 		if (!skb)
776 			continue;
777 
778 		if (drop_ts) {
779 			dev_kfree_skb_any(skb);
780 			continue;
781 		}
782 
783 		/* Extend the timestamp using cached PHC time */
784 		tstamp = ice_ptp_extend_40b_ts(pf, raw_tstamp);
785 		if (tstamp) {
786 			shhwtstamps.hwtstamp = ns_to_ktime(tstamp);
787 			ice_trace(tx_tstamp_complete, skb, idx);
788 		}
789 
790 		skb_tstamp_tx(skb, &shhwtstamps);
791 		dev_kfree_skb_any(skb);
792 	}
793 }
794 
795 /**
796  * ice_ptp_tx_tstamp_owner - Process Tx timestamps for all ports on the device
797  * @pf: Board private structure
798  */
799 static enum ice_tx_tstamp_work ice_ptp_tx_tstamp_owner(struct ice_pf *pf)
800 {
801 	struct ice_ptp_port *port;
802 	unsigned int i;
803 
804 	mutex_lock(&pf->ptp.ports_owner.lock);
805 	list_for_each_entry(port, &pf->ptp.ports_owner.ports, list_member) {
806 		struct ice_ptp_tx *tx = &port->tx;
807 
808 		if (!tx || !tx->init)
809 			continue;
810 
811 		ice_ptp_process_tx_tstamp(tx);
812 	}
813 	mutex_unlock(&pf->ptp.ports_owner.lock);
814 
815 	for (i = 0; i < ICE_MAX_QUAD; i++) {
816 		u64 tstamp_ready;
817 		int err;
818 
819 		/* Read the Tx ready status first */
820 		err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
821 		if (err)
822 			break;
823 		else if (tstamp_ready)
824 			return ICE_TX_TSTAMP_WORK_PENDING;
825 	}
826 
827 	return ICE_TX_TSTAMP_WORK_DONE;
828 }
829 
830 /**
831  * ice_ptp_tx_tstamp - Process Tx timestamps for this function.
832  * @tx: Tx tracking structure to initialize
833  *
834  * Returns: ICE_TX_TSTAMP_WORK_PENDING if there are any outstanding incomplete
835  * Tx timestamps, or ICE_TX_TSTAMP_WORK_DONE otherwise.
836  */
837 static enum ice_tx_tstamp_work ice_ptp_tx_tstamp(struct ice_ptp_tx *tx)
838 {
839 	bool more_timestamps;
840 	unsigned long flags;
841 
842 	if (!tx->init)
843 		return ICE_TX_TSTAMP_WORK_DONE;
844 
845 	/* Process the Tx timestamp tracker */
846 	ice_ptp_process_tx_tstamp(tx);
847 
848 	/* Check if there are outstanding Tx timestamps */
849 	spin_lock_irqsave(&tx->lock, flags);
850 	more_timestamps = tx->init && !bitmap_empty(tx->in_use, tx->len);
851 	spin_unlock_irqrestore(&tx->lock, flags);
852 
853 	if (more_timestamps)
854 		return ICE_TX_TSTAMP_WORK_PENDING;
855 
856 	return ICE_TX_TSTAMP_WORK_DONE;
857 }
858 
859 /**
860  * ice_ptp_alloc_tx_tracker - Initialize tracking for Tx timestamps
861  * @tx: Tx tracking structure to initialize
862  *
863  * Assumes that the length has already been initialized. Do not call directly,
864  * use the ice_ptp_init_tx_* instead.
865  */
866 static int
867 ice_ptp_alloc_tx_tracker(struct ice_ptp_tx *tx)
868 {
869 	unsigned long *in_use, *stale;
870 	struct ice_tx_tstamp *tstamps;
871 
872 	tstamps = kcalloc(tx->len, sizeof(*tstamps), GFP_KERNEL);
873 	in_use = bitmap_zalloc(tx->len, GFP_KERNEL);
874 	stale = bitmap_zalloc(tx->len, GFP_KERNEL);
875 
876 	if (!tstamps || !in_use || !stale) {
877 		kfree(tstamps);
878 		bitmap_free(in_use);
879 		bitmap_free(stale);
880 
881 		return -ENOMEM;
882 	}
883 
884 	tx->tstamps = tstamps;
885 	tx->in_use = in_use;
886 	tx->stale = stale;
887 	tx->init = 1;
888 	tx->last_ll_ts_idx_read = -1;
889 
890 	spin_lock_init(&tx->lock);
891 
892 	return 0;
893 }
894 
895 /**
896  * ice_ptp_flush_tx_tracker - Flush any remaining timestamps from the tracker
897  * @pf: Board private structure
898  * @tx: the tracker to flush
899  *
900  * Called during teardown when a Tx tracker is being removed.
901  */
902 static void
903 ice_ptp_flush_tx_tracker(struct ice_pf *pf, struct ice_ptp_tx *tx)
904 {
905 	struct ice_hw *hw = &pf->hw;
906 	unsigned long flags;
907 	u64 tstamp_ready;
908 	int err;
909 	u8 idx;
910 
911 	err = ice_get_phy_tx_tstamp_ready(hw, tx->block, &tstamp_ready);
912 	if (err) {
913 		dev_dbg(ice_pf_to_dev(pf), "Failed to get the Tx tstamp ready bitmap for block %u, err %d\n",
914 			tx->block, err);
915 
916 		/* If we fail to read the Tx timestamp ready bitmap just
917 		 * skip clearing the PHY timestamps.
918 		 */
919 		tstamp_ready = 0;
920 	}
921 
922 	for_each_set_bit(idx, tx->in_use, tx->len) {
923 		u8 phy_idx = idx + tx->offset;
924 		struct sk_buff *skb;
925 
926 		/* In case this timestamp is ready, we need to clear it. */
927 		if (!hw->reset_ongoing && (tstamp_ready & BIT_ULL(phy_idx)))
928 			ice_clear_phy_tstamp(hw, tx->block, phy_idx);
929 
930 		spin_lock_irqsave(&tx->lock, flags);
931 		skb = tx->tstamps[idx].skb;
932 		tx->tstamps[idx].skb = NULL;
933 		clear_bit(idx, tx->in_use);
934 		clear_bit(idx, tx->stale);
935 		spin_unlock_irqrestore(&tx->lock, flags);
936 
937 		/* Count the number of Tx timestamps flushed */
938 		pf->ptp.tx_hwtstamp_flushed++;
939 
940 		/* Free the SKB after we've cleared the bit */
941 		dev_kfree_skb_any(skb);
942 	}
943 }
944 
945 /**
946  * ice_ptp_mark_tx_tracker_stale - Mark unfinished timestamps as stale
947  * @tx: the tracker to mark
948  *
949  * Mark currently outstanding Tx timestamps as stale. This prevents sending
950  * their timestamp value to the stack. This is required to prevent extending
951  * the 40bit hardware timestamp incorrectly.
952  *
953  * This should be called when the PTP clock is modified such as after a set
954  * time request.
955  */
956 static void
957 ice_ptp_mark_tx_tracker_stale(struct ice_ptp_tx *tx)
958 {
959 	unsigned long flags;
960 
961 	spin_lock_irqsave(&tx->lock, flags);
962 	bitmap_or(tx->stale, tx->stale, tx->in_use, tx->len);
963 	spin_unlock_irqrestore(&tx->lock, flags);
964 }
965 
966 /**
967  * ice_ptp_flush_all_tx_tracker - Flush all timestamp trackers on this clock
968  * @pf: Board private structure
969  *
970  * Called by the clock owner to flush all the Tx timestamp trackers associated
971  * with the clock.
972  */
973 static void
974 ice_ptp_flush_all_tx_tracker(struct ice_pf *pf)
975 {
976 	struct ice_ptp_port *port;
977 
978 	list_for_each_entry(port, &pf->ptp.ports_owner.ports, list_member)
979 		ice_ptp_flush_tx_tracker(ptp_port_to_pf(port), &port->tx);
980 }
981 
982 /**
983  * ice_ptp_release_tx_tracker - Release allocated memory for Tx tracker
984  * @pf: Board private structure
985  * @tx: Tx tracking structure to release
986  *
987  * Free memory associated with the Tx timestamp tracker.
988  */
989 static void
990 ice_ptp_release_tx_tracker(struct ice_pf *pf, struct ice_ptp_tx *tx)
991 {
992 	unsigned long flags;
993 
994 	spin_lock_irqsave(&tx->lock, flags);
995 	tx->init = 0;
996 	spin_unlock_irqrestore(&tx->lock, flags);
997 
998 	/* wait for potentially outstanding interrupt to complete */
999 	synchronize_irq(pf->oicr_irq.virq);
1000 
1001 	ice_ptp_flush_tx_tracker(pf, tx);
1002 
1003 	kfree(tx->tstamps);
1004 	tx->tstamps = NULL;
1005 
1006 	bitmap_free(tx->in_use);
1007 	tx->in_use = NULL;
1008 
1009 	bitmap_free(tx->stale);
1010 	tx->stale = NULL;
1011 
1012 	tx->len = 0;
1013 }
1014 
1015 /**
1016  * ice_ptp_init_tx_e82x - Initialize tracking for Tx timestamps
1017  * @pf: Board private structure
1018  * @tx: the Tx tracking structure to initialize
1019  * @port: the port this structure tracks
1020  *
1021  * Initialize the Tx timestamp tracker for this port. For generic MAC devices,
1022  * the timestamp block is shared for all ports in the same quad. To avoid
1023  * ports using the same timestamp index, logically break the block of
1024  * registers into chunks based on the port number.
1025  */
1026 static int
1027 ice_ptp_init_tx_e82x(struct ice_pf *pf, struct ice_ptp_tx *tx, u8 port)
1028 {
1029 	tx->block = port / ICE_PORTS_PER_QUAD;
1030 	tx->offset = (port % ICE_PORTS_PER_QUAD) * INDEX_PER_PORT_E82X;
1031 	tx->len = INDEX_PER_PORT_E82X;
1032 	tx->has_ready_bitmap = 1;
1033 
1034 	return ice_ptp_alloc_tx_tracker(tx);
1035 }
1036 
1037 /**
1038  * ice_ptp_init_tx_e810 - Initialize tracking for Tx timestamps
1039  * @pf: Board private structure
1040  * @tx: the Tx tracking structure to initialize
1041  *
1042  * Initialize the Tx timestamp tracker for this PF. For E810 devices, each
1043  * port has its own block of timestamps, independent of the other ports.
1044  */
1045 static int
1046 ice_ptp_init_tx_e810(struct ice_pf *pf, struct ice_ptp_tx *tx)
1047 {
1048 	tx->block = pf->hw.port_info->lport;
1049 	tx->offset = 0;
1050 	tx->len = INDEX_PER_PORT_E810;
1051 	/* The E810 PHY does not provide a timestamp ready bitmap. Instead,
1052 	 * verify new timestamps against cached copy of the last read
1053 	 * timestamp.
1054 	 */
1055 	tx->has_ready_bitmap = 0;
1056 
1057 	return ice_ptp_alloc_tx_tracker(tx);
1058 }
1059 
1060 /**
1061  * ice_ptp_update_cached_phctime - Update the cached PHC time values
1062  * @pf: Board specific private structure
1063  *
1064  * This function updates the system time values which are cached in the PF
1065  * structure and the Rx rings.
1066  *
1067  * This function must be called periodically to ensure that the cached value
1068  * is never more than 2 seconds old.
1069  *
1070  * Note that the cached copy in the PF PTP structure is always updated, even
1071  * if we can't update the copy in the Rx rings.
1072  *
1073  * Return:
1074  * * 0 - OK, successfully updated
1075  * * -EAGAIN - PF was busy, need to reschedule the update
1076  */
1077 static int ice_ptp_update_cached_phctime(struct ice_pf *pf)
1078 {
1079 	struct device *dev = ice_pf_to_dev(pf);
1080 	unsigned long update_before;
1081 	u64 systime;
1082 	int i;
1083 
1084 	update_before = pf->ptp.cached_phc_jiffies + msecs_to_jiffies(2000);
1085 	if (pf->ptp.cached_phc_time &&
1086 	    time_is_before_jiffies(update_before)) {
1087 		unsigned long time_taken = jiffies - pf->ptp.cached_phc_jiffies;
1088 
1089 		dev_warn(dev, "%u msecs passed between update to cached PHC time\n",
1090 			 jiffies_to_msecs(time_taken));
1091 		pf->ptp.late_cached_phc_updates++;
1092 	}
1093 
1094 	/* Read the current PHC time */
1095 	systime = ice_ptp_read_src_clk_reg(pf, NULL);
1096 
1097 	/* Update the cached PHC time stored in the PF structure */
1098 	WRITE_ONCE(pf->ptp.cached_phc_time, systime);
1099 	WRITE_ONCE(pf->ptp.cached_phc_jiffies, jiffies);
1100 
1101 	if (test_and_set_bit(ICE_CFG_BUSY, pf->state))
1102 		return -EAGAIN;
1103 
1104 	ice_for_each_vsi(pf, i) {
1105 		struct ice_vsi *vsi = pf->vsi[i];
1106 		int j;
1107 
1108 		if (!vsi)
1109 			continue;
1110 
1111 		if (vsi->type != ICE_VSI_PF)
1112 			continue;
1113 
1114 		ice_for_each_rxq(vsi, j) {
1115 			if (!vsi->rx_rings[j])
1116 				continue;
1117 			WRITE_ONCE(vsi->rx_rings[j]->cached_phctime, systime);
1118 		}
1119 	}
1120 	clear_bit(ICE_CFG_BUSY, pf->state);
1121 
1122 	return 0;
1123 }
1124 
1125 /**
1126  * ice_ptp_reset_cached_phctime - Reset cached PHC time after an update
1127  * @pf: Board specific private structure
1128  *
1129  * This function must be called when the cached PHC time is no longer valid,
1130  * such as after a time adjustment. It marks any currently outstanding Tx
1131  * timestamps as stale and updates the cached PHC time for both the PF and Rx
1132  * rings.
1133  *
1134  * If updating the PHC time cannot be done immediately, a warning message is
1135  * logged and the work item is scheduled immediately to minimize the window
1136  * with a wrong cached timestamp.
1137  */
1138 static void ice_ptp_reset_cached_phctime(struct ice_pf *pf)
1139 {
1140 	struct device *dev = ice_pf_to_dev(pf);
1141 	int err;
1142 
1143 	/* Update the cached PHC time immediately if possible, otherwise
1144 	 * schedule the work item to execute soon.
1145 	 */
1146 	err = ice_ptp_update_cached_phctime(pf);
1147 	if (err) {
1148 		/* If another thread is updating the Rx rings, we won't
1149 		 * properly reset them here. This could lead to reporting of
1150 		 * invalid timestamps, but there isn't much we can do.
1151 		 */
1152 		dev_warn(dev, "%s: ICE_CFG_BUSY, unable to immediately update cached PHC time\n",
1153 			 __func__);
1154 
1155 		/* Queue the work item to update the Rx rings when possible */
1156 		kthread_queue_delayed_work(pf->ptp.kworker, &pf->ptp.work,
1157 					   msecs_to_jiffies(10));
1158 	}
1159 
1160 	/* Mark any outstanding timestamps as stale, since they might have
1161 	 * been captured in hardware before the time update. This could lead
1162 	 * to us extending them with the wrong cached value resulting in
1163 	 * incorrect timestamp values.
1164 	 */
1165 	ice_ptp_mark_tx_tracker_stale(&pf->ptp.port.tx);
1166 }
1167 
1168 /**
1169  * ice_ptp_read_time - Read the time from the device
1170  * @pf: Board private structure
1171  * @ts: timespec structure to hold the current time value
1172  * @sts: Optional parameter for holding a pair of system timestamps from
1173  *       the system clock. Will be ignored if NULL is given.
1174  *
1175  * This function reads the source clock registers and stores them in a timespec.
1176  * However, since the registers are 64 bits of nanoseconds, we must convert the
1177  * result to a timespec before we can return.
1178  */
1179 static void
1180 ice_ptp_read_time(struct ice_pf *pf, struct timespec64 *ts,
1181 		  struct ptp_system_timestamp *sts)
1182 {
1183 	u64 time_ns = ice_ptp_read_src_clk_reg(pf, sts);
1184 
1185 	*ts = ns_to_timespec64(time_ns);
1186 }
1187 
1188 /**
1189  * ice_ptp_write_init - Set PHC time to provided value
1190  * @pf: Board private structure
1191  * @ts: timespec structure that holds the new time value
1192  *
1193  * Set the PHC time to the specified time provided in the timespec.
1194  */
1195 static int ice_ptp_write_init(struct ice_pf *pf, struct timespec64 *ts)
1196 {
1197 	u64 ns = timespec64_to_ns(ts);
1198 	struct ice_hw *hw = &pf->hw;
1199 
1200 	return ice_ptp_init_time(hw, ns);
1201 }
1202 
1203 /**
1204  * ice_ptp_write_adj - Adjust PHC clock time atomically
1205  * @pf: Board private structure
1206  * @adj: Adjustment in nanoseconds
1207  *
1208  * Perform an atomic adjustment of the PHC time by the specified number of
1209  * nanoseconds.
1210  */
1211 static int ice_ptp_write_adj(struct ice_pf *pf, s32 adj)
1212 {
1213 	struct ice_hw *hw = &pf->hw;
1214 
1215 	return ice_ptp_adj_clock(hw, adj);
1216 }
1217 
1218 /**
1219  * ice_base_incval - Get base timer increment value
1220  * @pf: Board private structure
1221  *
1222  * Look up the base timer increment value for this device. The base increment
1223  * value is used to define the nominal clock tick rate. This increment value
1224  * is programmed during device initialization. It is also used as the basis
1225  * for calculating adjustments using scaled_ppm.
1226  */
1227 static u64 ice_base_incval(struct ice_pf *pf)
1228 {
1229 	struct ice_hw *hw = &pf->hw;
1230 	u64 incval;
1231 
1232 	if (ice_is_e810(hw))
1233 		incval = ICE_PTP_NOMINAL_INCVAL_E810;
1234 	else if (ice_e82x_time_ref(hw) < NUM_ICE_TIME_REF_FREQ)
1235 		incval = ice_e82x_nominal_incval(ice_e82x_time_ref(hw));
1236 	else
1237 		incval = UNKNOWN_INCVAL_E82X;
1238 
1239 	dev_dbg(ice_pf_to_dev(pf), "PTP: using base increment value of 0x%016llx\n",
1240 		incval);
1241 
1242 	return incval;
1243 }
1244 
1245 /**
1246  * ice_ptp_check_tx_fifo - Check whether Tx FIFO is in an OK state
1247  * @port: PTP port for which Tx FIFO is checked
1248  */
1249 static int ice_ptp_check_tx_fifo(struct ice_ptp_port *port)
1250 {
1251 	int quad = port->port_num / ICE_PORTS_PER_QUAD;
1252 	int offs = port->port_num % ICE_PORTS_PER_QUAD;
1253 	struct ice_pf *pf;
1254 	struct ice_hw *hw;
1255 	u32 val, phy_sts;
1256 	int err;
1257 
1258 	pf = ptp_port_to_pf(port);
1259 	hw = &pf->hw;
1260 
1261 	if (port->tx_fifo_busy_cnt == FIFO_OK)
1262 		return 0;
1263 
1264 	/* need to read FIFO state */
1265 	if (offs == 0 || offs == 1)
1266 		err = ice_read_quad_reg_e82x(hw, quad, Q_REG_FIFO01_STATUS,
1267 					     &val);
1268 	else
1269 		err = ice_read_quad_reg_e82x(hw, quad, Q_REG_FIFO23_STATUS,
1270 					     &val);
1271 
1272 	if (err) {
1273 		dev_err(ice_pf_to_dev(pf), "PTP failed to check port %d Tx FIFO, err %d\n",
1274 			port->port_num, err);
1275 		return err;
1276 	}
1277 
1278 	if (offs & 0x1)
1279 		phy_sts = FIELD_GET(Q_REG_FIFO13_M, val);
1280 	else
1281 		phy_sts = FIELD_GET(Q_REG_FIFO02_M, val);
1282 
1283 	if (phy_sts & FIFO_EMPTY) {
1284 		port->tx_fifo_busy_cnt = FIFO_OK;
1285 		return 0;
1286 	}
1287 
1288 	port->tx_fifo_busy_cnt++;
1289 
1290 	dev_dbg(ice_pf_to_dev(pf), "Try %d, port %d FIFO not empty\n",
1291 		port->tx_fifo_busy_cnt, port->port_num);
1292 
1293 	if (port->tx_fifo_busy_cnt == ICE_PTP_FIFO_NUM_CHECKS) {
1294 		dev_dbg(ice_pf_to_dev(pf),
1295 			"Port %d Tx FIFO still not empty; resetting quad %d\n",
1296 			port->port_num, quad);
1297 		ice_ptp_reset_ts_memory_quad_e82x(hw, quad);
1298 		port->tx_fifo_busy_cnt = FIFO_OK;
1299 		return 0;
1300 	}
1301 
1302 	return -EAGAIN;
1303 }
1304 
1305 /**
1306  * ice_ptp_wait_for_offsets - Check for valid Tx and Rx offsets
1307  * @work: Pointer to the kthread_work structure for this task
1308  *
1309  * Check whether hardware has completed measuring the Tx and Rx offset values
1310  * used to configure and enable vernier timestamp calibration.
1311  *
1312  * Once the offset in either direction is measured, configure the associated
1313  * registers with the calibrated offset values and enable timestamping. The Tx
1314  * and Rx directions are configured independently as soon as their associated
1315  * offsets are known.
1316  *
1317  * This function reschedules itself until both Tx and Rx calibration have
1318  * completed.
1319  */
1320 static void ice_ptp_wait_for_offsets(struct kthread_work *work)
1321 {
1322 	struct ice_ptp_port *port;
1323 	struct ice_pf *pf;
1324 	struct ice_hw *hw;
1325 	int tx_err;
1326 	int rx_err;
1327 
1328 	port = container_of(work, struct ice_ptp_port, ov_work.work);
1329 	pf = ptp_port_to_pf(port);
1330 	hw = &pf->hw;
1331 
1332 	if (ice_is_reset_in_progress(pf->state)) {
1333 		/* wait for device driver to complete reset */
1334 		kthread_queue_delayed_work(pf->ptp.kworker,
1335 					   &port->ov_work,
1336 					   msecs_to_jiffies(100));
1337 		return;
1338 	}
1339 
1340 	tx_err = ice_ptp_check_tx_fifo(port);
1341 	if (!tx_err)
1342 		tx_err = ice_phy_cfg_tx_offset_e82x(hw, port->port_num);
1343 	rx_err = ice_phy_cfg_rx_offset_e82x(hw, port->port_num);
1344 	if (tx_err || rx_err) {
1345 		/* Tx and/or Rx offset not yet configured, try again later */
1346 		kthread_queue_delayed_work(pf->ptp.kworker,
1347 					   &port->ov_work,
1348 					   msecs_to_jiffies(100));
1349 		return;
1350 	}
1351 }
1352 
1353 /**
1354  * ice_ptp_port_phy_stop - Stop timestamping for a PHY port
1355  * @ptp_port: PTP port to stop
1356  */
1357 static int
1358 ice_ptp_port_phy_stop(struct ice_ptp_port *ptp_port)
1359 {
1360 	struct ice_pf *pf = ptp_port_to_pf(ptp_port);
1361 	u8 port = ptp_port->port_num;
1362 	struct ice_hw *hw = &pf->hw;
1363 	int err;
1364 
1365 	if (ice_is_e810(hw))
1366 		return 0;
1367 
1368 	mutex_lock(&ptp_port->ps_lock);
1369 
1370 	kthread_cancel_delayed_work_sync(&ptp_port->ov_work);
1371 
1372 	err = ice_stop_phy_timer_e82x(hw, port, true);
1373 	if (err)
1374 		dev_err(ice_pf_to_dev(pf), "PTP failed to set PHY port %d down, err %d\n",
1375 			port, err);
1376 
1377 	mutex_unlock(&ptp_port->ps_lock);
1378 
1379 	return err;
1380 }
1381 
1382 /**
1383  * ice_ptp_port_phy_restart - (Re)start and calibrate PHY timestamping
1384  * @ptp_port: PTP port for which the PHY start is set
1385  *
1386  * Start the PHY timestamping block, and initiate Vernier timestamping
1387  * calibration. If timestamping cannot be calibrated (such as if link is down)
1388  * then disable the timestamping block instead.
1389  */
1390 static int
1391 ice_ptp_port_phy_restart(struct ice_ptp_port *ptp_port)
1392 {
1393 	struct ice_pf *pf = ptp_port_to_pf(ptp_port);
1394 	u8 port = ptp_port->port_num;
1395 	struct ice_hw *hw = &pf->hw;
1396 	unsigned long flags;
1397 	int err;
1398 
1399 	if (ice_is_e810(hw))
1400 		return 0;
1401 
1402 	if (!ptp_port->link_up)
1403 		return ice_ptp_port_phy_stop(ptp_port);
1404 
1405 	mutex_lock(&ptp_port->ps_lock);
1406 
1407 	kthread_cancel_delayed_work_sync(&ptp_port->ov_work);
1408 
1409 	/* temporarily disable Tx timestamps while calibrating PHY offset */
1410 	spin_lock_irqsave(&ptp_port->tx.lock, flags);
1411 	ptp_port->tx.calibrating = true;
1412 	spin_unlock_irqrestore(&ptp_port->tx.lock, flags);
1413 	ptp_port->tx_fifo_busy_cnt = 0;
1414 
1415 	/* Start the PHY timer in Vernier mode */
1416 	err = ice_start_phy_timer_e82x(hw, port);
1417 	if (err)
1418 		goto out_unlock;
1419 
1420 	/* Enable Tx timestamps right away */
1421 	spin_lock_irqsave(&ptp_port->tx.lock, flags);
1422 	ptp_port->tx.calibrating = false;
1423 	spin_unlock_irqrestore(&ptp_port->tx.lock, flags);
1424 
1425 	kthread_queue_delayed_work(pf->ptp.kworker, &ptp_port->ov_work, 0);
1426 
1427 out_unlock:
1428 	if (err)
1429 		dev_err(ice_pf_to_dev(pf), "PTP failed to set PHY port %d up, err %d\n",
1430 			port, err);
1431 
1432 	mutex_unlock(&ptp_port->ps_lock);
1433 
1434 	return err;
1435 }
1436 
1437 /**
1438  * ice_ptp_link_change - Reconfigure PTP after link status change
1439  * @pf: Board private structure
1440  * @port: Port for which the PHY start is set
1441  * @linkup: Link is up or down
1442  */
1443 void ice_ptp_link_change(struct ice_pf *pf, u8 port, bool linkup)
1444 {
1445 	struct ice_ptp_port *ptp_port;
1446 	struct ice_hw *hw = &pf->hw;
1447 
1448 	if (pf->ptp.state != ICE_PTP_READY)
1449 		return;
1450 
1451 	if (WARN_ON_ONCE(port >= ICE_NUM_EXTERNAL_PORTS))
1452 		return;
1453 
1454 	ptp_port = &pf->ptp.port;
1455 	if (WARN_ON_ONCE(ptp_port->port_num != port))
1456 		return;
1457 
1458 	/* Update cached link status for this port immediately */
1459 	ptp_port->link_up = linkup;
1460 
1461 	switch (hw->phy_model) {
1462 	case ICE_PHY_E810:
1463 		/* Do not reconfigure E810 PHY */
1464 		return;
1465 	case ICE_PHY_E82X:
1466 		ice_ptp_port_phy_restart(ptp_port);
1467 		return;
1468 	default:
1469 		dev_warn(ice_pf_to_dev(pf), "%s: Unknown PHY type\n", __func__);
1470 	}
1471 }
1472 
1473 /**
1474  * ice_ptp_cfg_phy_interrupt - Configure PHY interrupt settings
1475  * @pf: PF private structure
1476  * @ena: bool value to enable or disable interrupt
1477  * @threshold: Minimum number of packets at which intr is triggered
1478  *
1479  * Utility function to enable or disable Tx timestamp interrupt and threshold
1480  */
1481 static int ice_ptp_cfg_phy_interrupt(struct ice_pf *pf, bool ena, u32 threshold)
1482 {
1483 	struct ice_hw *hw = &pf->hw;
1484 	int err = 0;
1485 	int quad;
1486 	u32 val;
1487 
1488 	ice_ptp_reset_ts_memory(hw);
1489 
1490 	for (quad = 0; quad < ICE_MAX_QUAD; quad++) {
1491 		err = ice_read_quad_reg_e82x(hw, quad, Q_REG_TX_MEM_GBL_CFG,
1492 					     &val);
1493 		if (err)
1494 			break;
1495 
1496 		if (ena) {
1497 			val |= Q_REG_TX_MEM_GBL_CFG_INTR_ENA_M;
1498 			val &= ~Q_REG_TX_MEM_GBL_CFG_INTR_THR_M;
1499 			val |= FIELD_PREP(Q_REG_TX_MEM_GBL_CFG_INTR_THR_M,
1500 					  threshold);
1501 		} else {
1502 			val &= ~Q_REG_TX_MEM_GBL_CFG_INTR_ENA_M;
1503 		}
1504 
1505 		err = ice_write_quad_reg_e82x(hw, quad, Q_REG_TX_MEM_GBL_CFG,
1506 					      val);
1507 		if (err)
1508 			break;
1509 	}
1510 
1511 	if (err)
1512 		dev_err(ice_pf_to_dev(pf), "PTP failed in intr ena, err %d\n",
1513 			err);
1514 	return err;
1515 }
1516 
1517 /**
1518  * ice_ptp_reset_phy_timestamping - Reset PHY timestamping block
1519  * @pf: Board private structure
1520  */
1521 static void ice_ptp_reset_phy_timestamping(struct ice_pf *pf)
1522 {
1523 	ice_ptp_port_phy_restart(&pf->ptp.port);
1524 }
1525 
1526 /**
1527  * ice_ptp_restart_all_phy - Restart all PHYs to recalibrate timestamping
1528  * @pf: Board private structure
1529  */
1530 static void ice_ptp_restart_all_phy(struct ice_pf *pf)
1531 {
1532 	struct list_head *entry;
1533 
1534 	list_for_each(entry, &pf->ptp.ports_owner.ports) {
1535 		struct ice_ptp_port *port = list_entry(entry,
1536 						       struct ice_ptp_port,
1537 						       list_member);
1538 
1539 		if (port->link_up)
1540 			ice_ptp_port_phy_restart(port);
1541 	}
1542 }
1543 
1544 /**
1545  * ice_ptp_adjfine - Adjust clock increment rate
1546  * @info: the driver's PTP info structure
1547  * @scaled_ppm: Parts per million with 16-bit fractional field
1548  *
1549  * Adjust the frequency of the clock by the indicated scaled ppm from the
1550  * base frequency.
1551  */
1552 static int ice_ptp_adjfine(struct ptp_clock_info *info, long scaled_ppm)
1553 {
1554 	struct ice_pf *pf = ptp_info_to_pf(info);
1555 	struct ice_hw *hw = &pf->hw;
1556 	u64 incval;
1557 	int err;
1558 
1559 	incval = adjust_by_scaled_ppm(ice_base_incval(pf), scaled_ppm);
1560 	err = ice_ptp_write_incval_locked(hw, incval);
1561 	if (err) {
1562 		dev_err(ice_pf_to_dev(pf), "PTP failed to set incval, err %d\n",
1563 			err);
1564 		return -EIO;
1565 	}
1566 
1567 	return 0;
1568 }
1569 
1570 /**
1571  * ice_ptp_extts_event - Process PTP external clock event
1572  * @pf: Board private structure
1573  */
1574 void ice_ptp_extts_event(struct ice_pf *pf)
1575 {
1576 	struct ptp_clock_event event;
1577 	struct ice_hw *hw = &pf->hw;
1578 	u8 chan, tmr_idx;
1579 	u32 hi, lo;
1580 
1581 	tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
1582 	/* Event time is captured by one of the two matched registers
1583 	 *      GLTSYN_EVNT_L: 32 LSB of sampled time event
1584 	 *      GLTSYN_EVNT_H: 32 MSB of sampled time event
1585 	 * Event is defined in GLTSYN_EVNT_0 register
1586 	 */
1587 	for (chan = 0; chan < GLTSYN_EVNT_H_IDX_MAX; chan++) {
1588 		/* Check if channel is enabled */
1589 		if (pf->ptp.ext_ts_irq & (1 << chan)) {
1590 			lo = rd32(hw, GLTSYN_EVNT_L(chan, tmr_idx));
1591 			hi = rd32(hw, GLTSYN_EVNT_H(chan, tmr_idx));
1592 			event.timestamp = (((u64)hi) << 32) | lo;
1593 			event.type = PTP_CLOCK_EXTTS;
1594 			event.index = chan;
1595 
1596 			/* Fire event */
1597 			ptp_clock_event(pf->ptp.clock, &event);
1598 			pf->ptp.ext_ts_irq &= ~(1 << chan);
1599 		}
1600 	}
1601 }
1602 
1603 /**
1604  * ice_ptp_cfg_extts - Configure EXTTS pin and channel
1605  * @pf: Board private structure
1606  * @ena: true to enable; false to disable
1607  * @chan: GPIO channel (0-3)
1608  * @gpio_pin: GPIO pin
1609  * @extts_flags: request flags from the ptp_extts_request.flags
1610  */
1611 static int
1612 ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
1613 		  unsigned int extts_flags)
1614 {
1615 	u32 func, aux_reg, gpio_reg, irq_reg;
1616 	struct ice_hw *hw = &pf->hw;
1617 	u8 tmr_idx;
1618 
1619 	if (chan > (unsigned int)pf->ptp.info.n_ext_ts)
1620 		return -EINVAL;
1621 
1622 	tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
1623 
1624 	irq_reg = rd32(hw, PFINT_OICR_ENA);
1625 
1626 	if (ena) {
1627 		/* Enable the interrupt */
1628 		irq_reg |= PFINT_OICR_TSYN_EVNT_M;
1629 		aux_reg = GLTSYN_AUX_IN_0_INT_ENA_M;
1630 
1631 #define GLTSYN_AUX_IN_0_EVNTLVL_RISING_EDGE	BIT(0)
1632 #define GLTSYN_AUX_IN_0_EVNTLVL_FALLING_EDGE	BIT(1)
1633 
1634 		/* set event level to requested edge */
1635 		if (extts_flags & PTP_FALLING_EDGE)
1636 			aux_reg |= GLTSYN_AUX_IN_0_EVNTLVL_FALLING_EDGE;
1637 		if (extts_flags & PTP_RISING_EDGE)
1638 			aux_reg |= GLTSYN_AUX_IN_0_EVNTLVL_RISING_EDGE;
1639 
1640 		/* Write GPIO CTL reg.
1641 		 * 0x1 is input sampled by EVENT register(channel)
1642 		 * + num_in_channels * tmr_idx
1643 		 */
1644 		func = 1 + chan + (tmr_idx * 3);
1645 		gpio_reg = FIELD_PREP(GLGEN_GPIO_CTL_PIN_FUNC_M, func);
1646 		pf->ptp.ext_ts_chan |= (1 << chan);
1647 	} else {
1648 		/* clear the values we set to reset defaults */
1649 		aux_reg = 0;
1650 		gpio_reg = 0;
1651 		pf->ptp.ext_ts_chan &= ~(1 << chan);
1652 		if (!pf->ptp.ext_ts_chan)
1653 			irq_reg &= ~PFINT_OICR_TSYN_EVNT_M;
1654 	}
1655 
1656 	wr32(hw, PFINT_OICR_ENA, irq_reg);
1657 	wr32(hw, GLTSYN_AUX_IN(chan, tmr_idx), aux_reg);
1658 	wr32(hw, GLGEN_GPIO_CTL(gpio_pin), gpio_reg);
1659 
1660 	return 0;
1661 }
1662 
1663 /**
1664  * ice_ptp_cfg_clkout - Configure clock to generate periodic wave
1665  * @pf: Board private structure
1666  * @chan: GPIO channel (0-3)
1667  * @config: desired periodic clk configuration. NULL will disable channel
1668  * @store: If set to true the values will be stored
1669  *
1670  * Configure the internal clock generator modules to generate the clock wave of
1671  * specified period.
1672  */
1673 static int ice_ptp_cfg_clkout(struct ice_pf *pf, unsigned int chan,
1674 			      struct ice_perout_channel *config, bool store)
1675 {
1676 	u64 current_time, period, start_time, phase;
1677 	struct ice_hw *hw = &pf->hw;
1678 	u32 func, val, gpio_pin;
1679 	u8 tmr_idx;
1680 
1681 	tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
1682 
1683 	/* 0. Reset mode & out_en in AUX_OUT */
1684 	wr32(hw, GLTSYN_AUX_OUT(chan, tmr_idx), 0);
1685 
1686 	/* If we're disabling the output, clear out CLKO and TGT and keep
1687 	 * output level low
1688 	 */
1689 	if (!config || !config->ena) {
1690 		wr32(hw, GLTSYN_CLKO(chan, tmr_idx), 0);
1691 		wr32(hw, GLTSYN_TGT_L(chan, tmr_idx), 0);
1692 		wr32(hw, GLTSYN_TGT_H(chan, tmr_idx), 0);
1693 
1694 		val = GLGEN_GPIO_CTL_PIN_DIR_M;
1695 		gpio_pin = pf->ptp.perout_channels[chan].gpio_pin;
1696 		wr32(hw, GLGEN_GPIO_CTL(gpio_pin), val);
1697 
1698 		/* Store the value if requested */
1699 		if (store)
1700 			memset(&pf->ptp.perout_channels[chan], 0,
1701 			       sizeof(struct ice_perout_channel));
1702 
1703 		return 0;
1704 	}
1705 	period = config->period;
1706 	start_time = config->start_time;
1707 	div64_u64_rem(start_time, period, &phase);
1708 	gpio_pin = config->gpio_pin;
1709 
1710 	/* 1. Write clkout with half of required period value */
1711 	if (period & 0x1) {
1712 		dev_err(ice_pf_to_dev(pf), "CLK Period must be an even value\n");
1713 		goto err;
1714 	}
1715 
1716 	period >>= 1;
1717 
1718 	/* For proper operation, the GLTSYN_CLKO must be larger than clock tick
1719 	 */
1720 #define MIN_PULSE 3
1721 	if (period <= MIN_PULSE || period > U32_MAX) {
1722 		dev_err(ice_pf_to_dev(pf), "CLK Period must be > %d && < 2^33",
1723 			MIN_PULSE * 2);
1724 		goto err;
1725 	}
1726 
1727 	wr32(hw, GLTSYN_CLKO(chan, tmr_idx), lower_32_bits(period));
1728 
1729 	/* Allow time for programming before start_time is hit */
1730 	current_time = ice_ptp_read_src_clk_reg(pf, NULL);
1731 
1732 	/* if start time is in the past start the timer at the nearest second
1733 	 * maintaining phase
1734 	 */
1735 	if (start_time < current_time)
1736 		start_time = div64_u64(current_time + NSEC_PER_SEC - 1,
1737 				       NSEC_PER_SEC) * NSEC_PER_SEC + phase;
1738 
1739 	if (ice_is_e810(hw))
1740 		start_time -= E810_OUT_PROP_DELAY_NS;
1741 	else
1742 		start_time -= ice_e82x_pps_delay(ice_e82x_time_ref(hw));
1743 
1744 	/* 2. Write TARGET time */
1745 	wr32(hw, GLTSYN_TGT_L(chan, tmr_idx), lower_32_bits(start_time));
1746 	wr32(hw, GLTSYN_TGT_H(chan, tmr_idx), upper_32_bits(start_time));
1747 
1748 	/* 3. Write AUX_OUT register */
1749 	val = GLTSYN_AUX_OUT_0_OUT_ENA_M | GLTSYN_AUX_OUT_0_OUTMOD_M;
1750 	wr32(hw, GLTSYN_AUX_OUT(chan, tmr_idx), val);
1751 
1752 	/* 4. write GPIO CTL reg */
1753 	func = 8 + chan + (tmr_idx * 4);
1754 	val = GLGEN_GPIO_CTL_PIN_DIR_M |
1755 	      FIELD_PREP(GLGEN_GPIO_CTL_PIN_FUNC_M, func);
1756 	wr32(hw, GLGEN_GPIO_CTL(gpio_pin), val);
1757 
1758 	/* Store the value if requested */
1759 	if (store) {
1760 		memcpy(&pf->ptp.perout_channels[chan], config,
1761 		       sizeof(struct ice_perout_channel));
1762 		pf->ptp.perout_channels[chan].start_time = phase;
1763 	}
1764 
1765 	return 0;
1766 err:
1767 	dev_err(ice_pf_to_dev(pf), "PTP failed to cfg per_clk\n");
1768 	return -EFAULT;
1769 }
1770 
1771 /**
1772  * ice_ptp_disable_all_clkout - Disable all currently configured outputs
1773  * @pf: pointer to the PF structure
1774  *
1775  * Disable all currently configured clock outputs. This is necessary before
1776  * certain changes to the PTP hardware clock. Use ice_ptp_enable_all_clkout to
1777  * re-enable the clocks again.
1778  */
1779 static void ice_ptp_disable_all_clkout(struct ice_pf *pf)
1780 {
1781 	uint i;
1782 
1783 	for (i = 0; i < pf->ptp.info.n_per_out; i++)
1784 		if (pf->ptp.perout_channels[i].ena)
1785 			ice_ptp_cfg_clkout(pf, i, NULL, false);
1786 }
1787 
1788 /**
1789  * ice_ptp_enable_all_clkout - Enable all configured periodic clock outputs
1790  * @pf: pointer to the PF structure
1791  *
1792  * Enable all currently configured clock outputs. Use this after
1793  * ice_ptp_disable_all_clkout to reconfigure the output signals according to
1794  * their configuration.
1795  */
1796 static void ice_ptp_enable_all_clkout(struct ice_pf *pf)
1797 {
1798 	uint i;
1799 
1800 	for (i = 0; i < pf->ptp.info.n_per_out; i++)
1801 		if (pf->ptp.perout_channels[i].ena)
1802 			ice_ptp_cfg_clkout(pf, i, &pf->ptp.perout_channels[i],
1803 					   false);
1804 }
1805 
1806 /**
1807  * ice_ptp_gpio_enable_e810 - Enable/disable ancillary features of PHC
1808  * @info: the driver's PTP info structure
1809  * @rq: The requested feature to change
1810  * @on: Enable/disable flag
1811  */
1812 static int
1813 ice_ptp_gpio_enable_e810(struct ptp_clock_info *info,
1814 			 struct ptp_clock_request *rq, int on)
1815 {
1816 	struct ice_pf *pf = ptp_info_to_pf(info);
1817 	struct ice_perout_channel clk_cfg = {0};
1818 	bool sma_pres = false;
1819 	unsigned int chan;
1820 	u32 gpio_pin;
1821 	int err;
1822 
1823 	if (ice_is_feature_supported(pf, ICE_F_SMA_CTRL))
1824 		sma_pres = true;
1825 
1826 	switch (rq->type) {
1827 	case PTP_CLK_REQ_PEROUT:
1828 		chan = rq->perout.index;
1829 		if (sma_pres) {
1830 			if (chan == ice_pin_desc_e810t[SMA1].chan)
1831 				clk_cfg.gpio_pin = GPIO_20;
1832 			else if (chan == ice_pin_desc_e810t[SMA2].chan)
1833 				clk_cfg.gpio_pin = GPIO_22;
1834 			else
1835 				return -1;
1836 		} else if (ice_is_e810t(&pf->hw)) {
1837 			if (chan == 0)
1838 				clk_cfg.gpio_pin = GPIO_20;
1839 			else
1840 				clk_cfg.gpio_pin = GPIO_22;
1841 		} else if (chan == PPS_CLK_GEN_CHAN) {
1842 			clk_cfg.gpio_pin = PPS_PIN_INDEX;
1843 		} else {
1844 			clk_cfg.gpio_pin = chan;
1845 		}
1846 
1847 		clk_cfg.period = ((rq->perout.period.sec * NSEC_PER_SEC) +
1848 				   rq->perout.period.nsec);
1849 		clk_cfg.start_time = ((rq->perout.start.sec * NSEC_PER_SEC) +
1850 				       rq->perout.start.nsec);
1851 		clk_cfg.ena = !!on;
1852 
1853 		err = ice_ptp_cfg_clkout(pf, chan, &clk_cfg, true);
1854 		break;
1855 	case PTP_CLK_REQ_EXTTS:
1856 		chan = rq->extts.index;
1857 		if (sma_pres) {
1858 			if (chan < ice_pin_desc_e810t[SMA2].chan)
1859 				gpio_pin = GPIO_21;
1860 			else
1861 				gpio_pin = GPIO_23;
1862 		} else if (ice_is_e810t(&pf->hw)) {
1863 			if (chan == 0)
1864 				gpio_pin = GPIO_21;
1865 			else
1866 				gpio_pin = GPIO_23;
1867 		} else {
1868 			gpio_pin = chan;
1869 		}
1870 
1871 		err = ice_ptp_cfg_extts(pf, !!on, chan, gpio_pin,
1872 					rq->extts.flags);
1873 		break;
1874 	default:
1875 		return -EOPNOTSUPP;
1876 	}
1877 
1878 	return err;
1879 }
1880 
1881 /**
1882  * ice_ptp_gpio_enable_e823 - Enable/disable ancillary features of PHC
1883  * @info: the driver's PTP info structure
1884  * @rq: The requested feature to change
1885  * @on: Enable/disable flag
1886  */
1887 static int ice_ptp_gpio_enable_e823(struct ptp_clock_info *info,
1888 				    struct ptp_clock_request *rq, int on)
1889 {
1890 	struct ice_pf *pf = ptp_info_to_pf(info);
1891 	struct ice_perout_channel clk_cfg = {0};
1892 	int err;
1893 
1894 	switch (rq->type) {
1895 	case PTP_CLK_REQ_PPS:
1896 		clk_cfg.gpio_pin = PPS_PIN_INDEX;
1897 		clk_cfg.period = NSEC_PER_SEC;
1898 		clk_cfg.ena = !!on;
1899 
1900 		err = ice_ptp_cfg_clkout(pf, PPS_CLK_GEN_CHAN, &clk_cfg, true);
1901 		break;
1902 	case PTP_CLK_REQ_EXTTS:
1903 		err = ice_ptp_cfg_extts(pf, !!on, rq->extts.index,
1904 					TIME_SYNC_PIN_INDEX, rq->extts.flags);
1905 		break;
1906 	default:
1907 		return -EOPNOTSUPP;
1908 	}
1909 
1910 	return err;
1911 }
1912 
1913 /**
1914  * ice_ptp_gettimex64 - Get the time of the clock
1915  * @info: the driver's PTP info structure
1916  * @ts: timespec64 structure to hold the current time value
1917  * @sts: Optional parameter for holding a pair of system timestamps from
1918  *       the system clock. Will be ignored if NULL is given.
1919  *
1920  * Read the device clock and return the correct value on ns, after converting it
1921  * into a timespec struct.
1922  */
1923 static int
1924 ice_ptp_gettimex64(struct ptp_clock_info *info, struct timespec64 *ts,
1925 		   struct ptp_system_timestamp *sts)
1926 {
1927 	struct ice_pf *pf = ptp_info_to_pf(info);
1928 	struct ice_hw *hw = &pf->hw;
1929 
1930 	if (!ice_ptp_lock(hw)) {
1931 		dev_err(ice_pf_to_dev(pf), "PTP failed to get time\n");
1932 		return -EBUSY;
1933 	}
1934 
1935 	ice_ptp_read_time(pf, ts, sts);
1936 	ice_ptp_unlock(hw);
1937 
1938 	return 0;
1939 }
1940 
1941 /**
1942  * ice_ptp_settime64 - Set the time of the clock
1943  * @info: the driver's PTP info structure
1944  * @ts: timespec64 structure that holds the new time value
1945  *
1946  * Set the device clock to the user input value. The conversion from timespec
1947  * to ns happens in the write function.
1948  */
1949 static int
1950 ice_ptp_settime64(struct ptp_clock_info *info, const struct timespec64 *ts)
1951 {
1952 	struct ice_pf *pf = ptp_info_to_pf(info);
1953 	struct timespec64 ts64 = *ts;
1954 	struct ice_hw *hw = &pf->hw;
1955 	int err;
1956 
1957 	/* For Vernier mode, we need to recalibrate after new settime
1958 	 * Start with disabling timestamp block
1959 	 */
1960 	if (pf->ptp.port.link_up)
1961 		ice_ptp_port_phy_stop(&pf->ptp.port);
1962 
1963 	if (!ice_ptp_lock(hw)) {
1964 		err = -EBUSY;
1965 		goto exit;
1966 	}
1967 
1968 	/* Disable periodic outputs */
1969 	ice_ptp_disable_all_clkout(pf);
1970 
1971 	err = ice_ptp_write_init(pf, &ts64);
1972 	ice_ptp_unlock(hw);
1973 
1974 	if (!err)
1975 		ice_ptp_reset_cached_phctime(pf);
1976 
1977 	/* Reenable periodic outputs */
1978 	ice_ptp_enable_all_clkout(pf);
1979 
1980 	/* Recalibrate and re-enable timestamp blocks for E822/E823 */
1981 	if (hw->phy_model == ICE_PHY_E82X)
1982 		ice_ptp_restart_all_phy(pf);
1983 exit:
1984 	if (err) {
1985 		dev_err(ice_pf_to_dev(pf), "PTP failed to set time %d\n", err);
1986 		return err;
1987 	}
1988 
1989 	return 0;
1990 }
1991 
1992 /**
1993  * ice_ptp_adjtime_nonatomic - Do a non-atomic clock adjustment
1994  * @info: the driver's PTP info structure
1995  * @delta: Offset in nanoseconds to adjust the time by
1996  */
1997 static int ice_ptp_adjtime_nonatomic(struct ptp_clock_info *info, s64 delta)
1998 {
1999 	struct timespec64 now, then;
2000 	int ret;
2001 
2002 	then = ns_to_timespec64(delta);
2003 	ret = ice_ptp_gettimex64(info, &now, NULL);
2004 	if (ret)
2005 		return ret;
2006 	now = timespec64_add(now, then);
2007 
2008 	return ice_ptp_settime64(info, (const struct timespec64 *)&now);
2009 }
2010 
2011 /**
2012  * ice_ptp_adjtime - Adjust the time of the clock by the indicated delta
2013  * @info: the driver's PTP info structure
2014  * @delta: Offset in nanoseconds to adjust the time by
2015  */
2016 static int ice_ptp_adjtime(struct ptp_clock_info *info, s64 delta)
2017 {
2018 	struct ice_pf *pf = ptp_info_to_pf(info);
2019 	struct ice_hw *hw = &pf->hw;
2020 	struct device *dev;
2021 	int err;
2022 
2023 	dev = ice_pf_to_dev(pf);
2024 
2025 	/* Hardware only supports atomic adjustments using signed 32-bit
2026 	 * integers. For any adjustment outside this range, perform
2027 	 * a non-atomic get->adjust->set flow.
2028 	 */
2029 	if (delta > S32_MAX || delta < S32_MIN) {
2030 		dev_dbg(dev, "delta = %lld, adjtime non-atomic\n", delta);
2031 		return ice_ptp_adjtime_nonatomic(info, delta);
2032 	}
2033 
2034 	if (!ice_ptp_lock(hw)) {
2035 		dev_err(dev, "PTP failed to acquire semaphore in adjtime\n");
2036 		return -EBUSY;
2037 	}
2038 
2039 	/* Disable periodic outputs */
2040 	ice_ptp_disable_all_clkout(pf);
2041 
2042 	err = ice_ptp_write_adj(pf, delta);
2043 
2044 	/* Reenable periodic outputs */
2045 	ice_ptp_enable_all_clkout(pf);
2046 
2047 	ice_ptp_unlock(hw);
2048 
2049 	if (err) {
2050 		dev_err(dev, "PTP failed to adjust time, err %d\n", err);
2051 		return err;
2052 	}
2053 
2054 	ice_ptp_reset_cached_phctime(pf);
2055 
2056 	return 0;
2057 }
2058 
2059 #ifdef CONFIG_ICE_HWTS
2060 /**
2061  * ice_ptp_get_syncdevicetime - Get the cross time stamp info
2062  * @device: Current device time
2063  * @system: System counter value read synchronously with device time
2064  * @ctx: Context provided by timekeeping code
2065  *
2066  * Read device and system (ART) clock simultaneously and return the corrected
2067  * clock values in ns.
2068  */
2069 static int
2070 ice_ptp_get_syncdevicetime(ktime_t *device,
2071 			   struct system_counterval_t *system,
2072 			   void *ctx)
2073 {
2074 	struct ice_pf *pf = (struct ice_pf *)ctx;
2075 	struct ice_hw *hw = &pf->hw;
2076 	u32 hh_lock, hh_art_ctl;
2077 	int i;
2078 
2079 #define MAX_HH_HW_LOCK_TRIES	5
2080 #define MAX_HH_CTL_LOCK_TRIES	100
2081 
2082 	for (i = 0; i < MAX_HH_HW_LOCK_TRIES; i++) {
2083 		/* Get the HW lock */
2084 		hh_lock = rd32(hw, PFHH_SEM + (PFTSYN_SEM_BYTES * hw->pf_id));
2085 		if (hh_lock & PFHH_SEM_BUSY_M) {
2086 			usleep_range(10000, 15000);
2087 			continue;
2088 		}
2089 		break;
2090 	}
2091 	if (hh_lock & PFHH_SEM_BUSY_M) {
2092 		dev_err(ice_pf_to_dev(pf), "PTP failed to get hh lock\n");
2093 		return -EBUSY;
2094 	}
2095 
2096 	/* Program cmd to master timer */
2097 	ice_ptp_src_cmd(hw, ICE_PTP_READ_TIME);
2098 
2099 	/* Start the ART and device clock sync sequence */
2100 	hh_art_ctl = rd32(hw, GLHH_ART_CTL);
2101 	hh_art_ctl = hh_art_ctl | GLHH_ART_CTL_ACTIVE_M;
2102 	wr32(hw, GLHH_ART_CTL, hh_art_ctl);
2103 
2104 	for (i = 0; i < MAX_HH_CTL_LOCK_TRIES; i++) {
2105 		/* Wait for sync to complete */
2106 		hh_art_ctl = rd32(hw, GLHH_ART_CTL);
2107 		if (hh_art_ctl & GLHH_ART_CTL_ACTIVE_M) {
2108 			udelay(1);
2109 			continue;
2110 		} else {
2111 			u32 hh_ts_lo, hh_ts_hi, tmr_idx;
2112 			u64 hh_ts;
2113 
2114 			tmr_idx = hw->func_caps.ts_func_info.tmr_index_assoc;
2115 			/* Read ART time */
2116 			hh_ts_lo = rd32(hw, GLHH_ART_TIME_L);
2117 			hh_ts_hi = rd32(hw, GLHH_ART_TIME_H);
2118 			hh_ts = ((u64)hh_ts_hi << 32) | hh_ts_lo;
2119 			*system = convert_art_ns_to_tsc(hh_ts);
2120 			/* Read Device source clock time */
2121 			hh_ts_lo = rd32(hw, GLTSYN_HHTIME_L(tmr_idx));
2122 			hh_ts_hi = rd32(hw, GLTSYN_HHTIME_H(tmr_idx));
2123 			hh_ts = ((u64)hh_ts_hi << 32) | hh_ts_lo;
2124 			*device = ns_to_ktime(hh_ts);
2125 			break;
2126 		}
2127 	}
2128 
2129 	/* Clear the master timer */
2130 	ice_ptp_src_cmd(hw, ICE_PTP_NOP);
2131 
2132 	/* Release HW lock */
2133 	hh_lock = rd32(hw, PFHH_SEM + (PFTSYN_SEM_BYTES * hw->pf_id));
2134 	hh_lock = hh_lock & ~PFHH_SEM_BUSY_M;
2135 	wr32(hw, PFHH_SEM + (PFTSYN_SEM_BYTES * hw->pf_id), hh_lock);
2136 
2137 	if (i == MAX_HH_CTL_LOCK_TRIES)
2138 		return -ETIMEDOUT;
2139 
2140 	return 0;
2141 }
2142 
2143 /**
2144  * ice_ptp_getcrosststamp_e82x - Capture a device cross timestamp
2145  * @info: the driver's PTP info structure
2146  * @cts: The memory to fill the cross timestamp info
2147  *
2148  * Capture a cross timestamp between the ART and the device PTP hardware
2149  * clock. Fill the cross timestamp information and report it back to the
2150  * caller.
2151  *
2152  * This is only valid for E822 and E823 devices which have support for
2153  * generating the cross timestamp via PCIe PTM.
2154  *
2155  * In order to correctly correlate the ART timestamp back to the TSC time, the
2156  * CPU must have X86_FEATURE_TSC_KNOWN_FREQ.
2157  */
2158 static int
2159 ice_ptp_getcrosststamp_e82x(struct ptp_clock_info *info,
2160 			    struct system_device_crosststamp *cts)
2161 {
2162 	struct ice_pf *pf = ptp_info_to_pf(info);
2163 
2164 	return get_device_system_crosststamp(ice_ptp_get_syncdevicetime,
2165 					     pf, NULL, cts);
2166 }
2167 #endif /* CONFIG_ICE_HWTS */
2168 
2169 /**
2170  * ice_ptp_get_ts_config - ioctl interface to read the timestamping config
2171  * @pf: Board private structure
2172  * @ifr: ioctl data
2173  *
2174  * Copy the timestamping config to user buffer
2175  */
2176 int ice_ptp_get_ts_config(struct ice_pf *pf, struct ifreq *ifr)
2177 {
2178 	struct hwtstamp_config *config;
2179 
2180 	if (pf->ptp.state != ICE_PTP_READY)
2181 		return -EIO;
2182 
2183 	config = &pf->ptp.tstamp_config;
2184 
2185 	return copy_to_user(ifr->ifr_data, config, sizeof(*config)) ?
2186 		-EFAULT : 0;
2187 }
2188 
2189 /**
2190  * ice_ptp_set_timestamp_mode - Setup driver for requested timestamp mode
2191  * @pf: Board private structure
2192  * @config: hwtstamp settings requested or saved
2193  */
2194 static int
2195 ice_ptp_set_timestamp_mode(struct ice_pf *pf, struct hwtstamp_config *config)
2196 {
2197 	switch (config->tx_type) {
2198 	case HWTSTAMP_TX_OFF:
2199 		pf->ptp.tstamp_config.tx_type = HWTSTAMP_TX_OFF;
2200 		break;
2201 	case HWTSTAMP_TX_ON:
2202 		pf->ptp.tstamp_config.tx_type = HWTSTAMP_TX_ON;
2203 		break;
2204 	default:
2205 		return -ERANGE;
2206 	}
2207 
2208 	switch (config->rx_filter) {
2209 	case HWTSTAMP_FILTER_NONE:
2210 		pf->ptp.tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
2211 		break;
2212 	case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
2213 	case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
2214 	case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
2215 	case HWTSTAMP_FILTER_PTP_V2_EVENT:
2216 	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
2217 	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
2218 	case HWTSTAMP_FILTER_PTP_V2_SYNC:
2219 	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
2220 	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
2221 	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
2222 	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
2223 	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
2224 	case HWTSTAMP_FILTER_NTP_ALL:
2225 	case HWTSTAMP_FILTER_ALL:
2226 		pf->ptp.tstamp_config.rx_filter = HWTSTAMP_FILTER_ALL;
2227 		break;
2228 	default:
2229 		return -ERANGE;
2230 	}
2231 
2232 	/* Immediately update the device timestamping mode */
2233 	ice_ptp_restore_timestamp_mode(pf);
2234 
2235 	return 0;
2236 }
2237 
2238 /**
2239  * ice_ptp_set_ts_config - ioctl interface to control the timestamping
2240  * @pf: Board private structure
2241  * @ifr: ioctl data
2242  *
2243  * Get the user config and store it
2244  */
2245 int ice_ptp_set_ts_config(struct ice_pf *pf, struct ifreq *ifr)
2246 {
2247 	struct hwtstamp_config config;
2248 	int err;
2249 
2250 	if (pf->ptp.state != ICE_PTP_READY)
2251 		return -EAGAIN;
2252 
2253 	if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
2254 		return -EFAULT;
2255 
2256 	err = ice_ptp_set_timestamp_mode(pf, &config);
2257 	if (err)
2258 		return err;
2259 
2260 	/* Return the actual configuration set */
2261 	config = pf->ptp.tstamp_config;
2262 
2263 	return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
2264 		-EFAULT : 0;
2265 }
2266 
2267 /**
2268  * ice_ptp_get_rx_hwts - Get packet Rx timestamp in ns
2269  * @rx_desc: Receive descriptor
2270  * @pkt_ctx: Packet context to get the cached time
2271  *
2272  * The driver receives a notification in the receive descriptor with timestamp.
2273  */
2274 u64 ice_ptp_get_rx_hwts(const union ice_32b_rx_flex_desc *rx_desc,
2275 			const struct ice_pkt_ctx *pkt_ctx)
2276 {
2277 	u64 ts_ns, cached_time;
2278 	u32 ts_high;
2279 
2280 	if (!(rx_desc->wb.time_stamp_low & ICE_PTP_TS_VALID))
2281 		return 0;
2282 
2283 	cached_time = READ_ONCE(pkt_ctx->cached_phctime);
2284 
2285 	/* Do not report a timestamp if we don't have a cached PHC time */
2286 	if (!cached_time)
2287 		return 0;
2288 
2289 	/* Use ice_ptp_extend_32b_ts directly, using the ring-specific cached
2290 	 * PHC value, rather than accessing the PF. This also allows us to
2291 	 * simply pass the upper 32bits of nanoseconds directly. Calling
2292 	 * ice_ptp_extend_40b_ts is unnecessary as it would just discard these
2293 	 * bits itself.
2294 	 */
2295 	ts_high = le32_to_cpu(rx_desc->wb.flex_ts.ts_high);
2296 	ts_ns = ice_ptp_extend_32b_ts(cached_time, ts_high);
2297 
2298 	return ts_ns;
2299 }
2300 
2301 /**
2302  * ice_ptp_disable_sma_pins_e810t - Disable E810-T SMA pins
2303  * @pf: pointer to the PF structure
2304  * @info: PTP clock info structure
2305  *
2306  * Disable the OS access to the SMA pins. Called to clear out the OS
2307  * indications of pin support when we fail to setup the E810-T SMA control
2308  * register.
2309  */
2310 static void
2311 ice_ptp_disable_sma_pins_e810t(struct ice_pf *pf, struct ptp_clock_info *info)
2312 {
2313 	struct device *dev = ice_pf_to_dev(pf);
2314 
2315 	dev_warn(dev, "Failed to configure E810-T SMA pin control\n");
2316 
2317 	info->enable = NULL;
2318 	info->verify = NULL;
2319 	info->n_pins = 0;
2320 	info->n_ext_ts = 0;
2321 	info->n_per_out = 0;
2322 }
2323 
2324 /**
2325  * ice_ptp_setup_sma_pins_e810t - Setup the SMA pins
2326  * @pf: pointer to the PF structure
2327  * @info: PTP clock info structure
2328  *
2329  * Finish setting up the SMA pins by allocating pin_config, and setting it up
2330  * according to the current status of the SMA. On failure, disable all of the
2331  * extended SMA pin support.
2332  */
2333 static void
2334 ice_ptp_setup_sma_pins_e810t(struct ice_pf *pf, struct ptp_clock_info *info)
2335 {
2336 	struct device *dev = ice_pf_to_dev(pf);
2337 	int err;
2338 
2339 	/* Allocate memory for kernel pins interface */
2340 	info->pin_config = devm_kcalloc(dev, info->n_pins,
2341 					sizeof(*info->pin_config), GFP_KERNEL);
2342 	if (!info->pin_config) {
2343 		ice_ptp_disable_sma_pins_e810t(pf, info);
2344 		return;
2345 	}
2346 
2347 	/* Read current SMA status */
2348 	err = ice_get_sma_config_e810t(&pf->hw, info->pin_config);
2349 	if (err)
2350 		ice_ptp_disable_sma_pins_e810t(pf, info);
2351 }
2352 
2353 /**
2354  * ice_ptp_setup_pins_e810 - Setup PTP pins in sysfs
2355  * @pf: pointer to the PF instance
2356  * @info: PTP clock capabilities
2357  */
2358 static void
2359 ice_ptp_setup_pins_e810(struct ice_pf *pf, struct ptp_clock_info *info)
2360 {
2361 	if (ice_is_feature_supported(pf, ICE_F_SMA_CTRL)) {
2362 		info->n_ext_ts = N_EXT_TS_E810;
2363 		info->n_per_out = N_PER_OUT_E810T;
2364 		info->n_pins = NUM_PTP_PINS_E810T;
2365 		info->verify = ice_verify_pin_e810t;
2366 
2367 		/* Complete setup of the SMA pins */
2368 		ice_ptp_setup_sma_pins_e810t(pf, info);
2369 	} else if (ice_is_e810t(&pf->hw)) {
2370 		info->n_ext_ts = N_EXT_TS_NO_SMA_E810T;
2371 		info->n_per_out = N_PER_OUT_NO_SMA_E810T;
2372 	} else {
2373 		info->n_per_out = N_PER_OUT_E810;
2374 		info->n_ext_ts = N_EXT_TS_E810;
2375 	}
2376 }
2377 
2378 /**
2379  * ice_ptp_setup_pins_e823 - Setup PTP pins in sysfs
2380  * @pf: pointer to the PF instance
2381  * @info: PTP clock capabilities
2382  */
2383 static void
2384 ice_ptp_setup_pins_e823(struct ice_pf *pf, struct ptp_clock_info *info)
2385 {
2386 	info->pps = 1;
2387 	info->n_per_out = 0;
2388 	info->n_ext_ts = 1;
2389 }
2390 
2391 /**
2392  * ice_ptp_set_funcs_e82x - Set specialized functions for E82x support
2393  * @pf: Board private structure
2394  * @info: PTP info to fill
2395  *
2396  * Assign functions to the PTP capabiltiies structure for E82x devices.
2397  * Functions which operate across all device families should be set directly
2398  * in ice_ptp_set_caps. Only add functions here which are distinct for E82x
2399  * devices.
2400  */
2401 static void
2402 ice_ptp_set_funcs_e82x(struct ice_pf *pf, struct ptp_clock_info *info)
2403 {
2404 #ifdef CONFIG_ICE_HWTS
2405 	if (boot_cpu_has(X86_FEATURE_ART) &&
2406 	    boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ))
2407 		info->getcrosststamp = ice_ptp_getcrosststamp_e82x;
2408 #endif /* CONFIG_ICE_HWTS */
2409 }
2410 
2411 /**
2412  * ice_ptp_set_funcs_e810 - Set specialized functions for E810 support
2413  * @pf: Board private structure
2414  * @info: PTP info to fill
2415  *
2416  * Assign functions to the PTP capabiltiies structure for E810 devices.
2417  * Functions which operate across all device families should be set directly
2418  * in ice_ptp_set_caps. Only add functions here which are distinct for e810
2419  * devices.
2420  */
2421 static void
2422 ice_ptp_set_funcs_e810(struct ice_pf *pf, struct ptp_clock_info *info)
2423 {
2424 	info->enable = ice_ptp_gpio_enable_e810;
2425 	ice_ptp_setup_pins_e810(pf, info);
2426 }
2427 
2428 /**
2429  * ice_ptp_set_funcs_e823 - Set specialized functions for E823 support
2430  * @pf: Board private structure
2431  * @info: PTP info to fill
2432  *
2433  * Assign functions to the PTP capabiltiies structure for E823 devices.
2434  * Functions which operate across all device families should be set directly
2435  * in ice_ptp_set_caps. Only add functions here which are distinct for e823
2436  * devices.
2437  */
2438 static void
2439 ice_ptp_set_funcs_e823(struct ice_pf *pf, struct ptp_clock_info *info)
2440 {
2441 	ice_ptp_set_funcs_e82x(pf, info);
2442 
2443 	info->enable = ice_ptp_gpio_enable_e823;
2444 	ice_ptp_setup_pins_e823(pf, info);
2445 }
2446 
2447 /**
2448  * ice_ptp_set_caps - Set PTP capabilities
2449  * @pf: Board private structure
2450  */
2451 static void ice_ptp_set_caps(struct ice_pf *pf)
2452 {
2453 	struct ptp_clock_info *info = &pf->ptp.info;
2454 	struct device *dev = ice_pf_to_dev(pf);
2455 
2456 	snprintf(info->name, sizeof(info->name) - 1, "%s-%s-clk",
2457 		 dev_driver_string(dev), dev_name(dev));
2458 	info->owner = THIS_MODULE;
2459 	info->max_adj = 100000000;
2460 	info->adjtime = ice_ptp_adjtime;
2461 	info->adjfine = ice_ptp_adjfine;
2462 	info->gettimex64 = ice_ptp_gettimex64;
2463 	info->settime64 = ice_ptp_settime64;
2464 
2465 	if (ice_is_e810(&pf->hw))
2466 		ice_ptp_set_funcs_e810(pf, info);
2467 	else if (ice_is_e823(&pf->hw))
2468 		ice_ptp_set_funcs_e823(pf, info);
2469 	else
2470 		ice_ptp_set_funcs_e82x(pf, info);
2471 }
2472 
2473 /**
2474  * ice_ptp_create_clock - Create PTP clock device for userspace
2475  * @pf: Board private structure
2476  *
2477  * This function creates a new PTP clock device. It only creates one if we
2478  * don't already have one. Will return error if it can't create one, but success
2479  * if we already have a device. Should be used by ice_ptp_init to create clock
2480  * initially, and prevent global resets from creating new clock devices.
2481  */
2482 static long ice_ptp_create_clock(struct ice_pf *pf)
2483 {
2484 	struct ptp_clock_info *info;
2485 	struct device *dev;
2486 
2487 	/* No need to create a clock device if we already have one */
2488 	if (pf->ptp.clock)
2489 		return 0;
2490 
2491 	ice_ptp_set_caps(pf);
2492 
2493 	info = &pf->ptp.info;
2494 	dev = ice_pf_to_dev(pf);
2495 
2496 	/* Attempt to register the clock before enabling the hardware. */
2497 	pf->ptp.clock = ptp_clock_register(info, dev);
2498 	if (IS_ERR(pf->ptp.clock)) {
2499 		dev_err(ice_pf_to_dev(pf), "Failed to register PTP clock device");
2500 		return PTR_ERR(pf->ptp.clock);
2501 	}
2502 
2503 	return 0;
2504 }
2505 
2506 /**
2507  * ice_ptp_request_ts - Request an available Tx timestamp index
2508  * @tx: the PTP Tx timestamp tracker to request from
2509  * @skb: the SKB to associate with this timestamp request
2510  */
2511 s8 ice_ptp_request_ts(struct ice_ptp_tx *tx, struct sk_buff *skb)
2512 {
2513 	unsigned long flags;
2514 	u8 idx;
2515 
2516 	spin_lock_irqsave(&tx->lock, flags);
2517 
2518 	/* Check that this tracker is accepting new timestamp requests */
2519 	if (!ice_ptp_is_tx_tracker_up(tx)) {
2520 		spin_unlock_irqrestore(&tx->lock, flags);
2521 		return -1;
2522 	}
2523 
2524 	/* Find and set the first available index */
2525 	idx = find_next_zero_bit(tx->in_use, tx->len,
2526 				 tx->last_ll_ts_idx_read + 1);
2527 	if (idx == tx->len)
2528 		idx = find_first_zero_bit(tx->in_use, tx->len);
2529 
2530 	if (idx < tx->len) {
2531 		/* We got a valid index that no other thread could have set. Store
2532 		 * a reference to the skb and the start time to allow discarding old
2533 		 * requests.
2534 		 */
2535 		set_bit(idx, tx->in_use);
2536 		clear_bit(idx, tx->stale);
2537 		tx->tstamps[idx].start = jiffies;
2538 		tx->tstamps[idx].skb = skb_get(skb);
2539 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
2540 		ice_trace(tx_tstamp_request, skb, idx);
2541 	}
2542 
2543 	spin_unlock_irqrestore(&tx->lock, flags);
2544 
2545 	/* return the appropriate PHY timestamp register index, -1 if no
2546 	 * indexes were available.
2547 	 */
2548 	if (idx >= tx->len)
2549 		return -1;
2550 	else
2551 		return idx + tx->offset;
2552 }
2553 
2554 /**
2555  * ice_ptp_process_ts - Process the PTP Tx timestamps
2556  * @pf: Board private structure
2557  *
2558  * Returns: ICE_TX_TSTAMP_WORK_PENDING if there are any outstanding Tx
2559  * timestamps that need processing, and ICE_TX_TSTAMP_WORK_DONE otherwise.
2560  */
2561 enum ice_tx_tstamp_work ice_ptp_process_ts(struct ice_pf *pf)
2562 {
2563 	switch (pf->ptp.tx_interrupt_mode) {
2564 	case ICE_PTP_TX_INTERRUPT_NONE:
2565 		/* This device has the clock owner handle timestamps for it */
2566 		return ICE_TX_TSTAMP_WORK_DONE;
2567 	case ICE_PTP_TX_INTERRUPT_SELF:
2568 		/* This device handles its own timestamps */
2569 		return ice_ptp_tx_tstamp(&pf->ptp.port.tx);
2570 	case ICE_PTP_TX_INTERRUPT_ALL:
2571 		/* This device handles timestamps for all ports */
2572 		return ice_ptp_tx_tstamp_owner(pf);
2573 	default:
2574 		WARN_ONCE(1, "Unexpected Tx timestamp interrupt mode %u\n",
2575 			  pf->ptp.tx_interrupt_mode);
2576 		return ICE_TX_TSTAMP_WORK_DONE;
2577 	}
2578 }
2579 
2580 /**
2581  * ice_ptp_maybe_trigger_tx_interrupt - Trigger Tx timstamp interrupt
2582  * @pf: Board private structure
2583  *
2584  * The device PHY issues Tx timestamp interrupts to the driver for processing
2585  * timestamp data from the PHY. It will not interrupt again until all
2586  * current timestamp data is read. In rare circumstances, it is possible that
2587  * the driver fails to read all outstanding data.
2588  *
2589  * To avoid getting permanently stuck, periodically check if the PHY has
2590  * outstanding timestamp data. If so, trigger an interrupt from software to
2591  * process this data.
2592  */
2593 static void ice_ptp_maybe_trigger_tx_interrupt(struct ice_pf *pf)
2594 {
2595 	struct device *dev = ice_pf_to_dev(pf);
2596 	struct ice_hw *hw = &pf->hw;
2597 	bool trigger_oicr = false;
2598 	unsigned int i;
2599 
2600 	if (ice_is_e810(hw))
2601 		return;
2602 
2603 	if (!ice_pf_src_tmr_owned(pf))
2604 		return;
2605 
2606 	for (i = 0; i < ICE_MAX_QUAD; i++) {
2607 		u64 tstamp_ready;
2608 		int err;
2609 
2610 		err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
2611 		if (!err && tstamp_ready) {
2612 			trigger_oicr = true;
2613 			break;
2614 		}
2615 	}
2616 
2617 	if (trigger_oicr) {
2618 		/* Trigger a software interrupt, to ensure this data
2619 		 * gets processed.
2620 		 */
2621 		dev_dbg(dev, "PTP periodic task detected waiting timestamps. Triggering Tx timestamp interrupt now.\n");
2622 
2623 		wr32(hw, PFINT_OICR, PFINT_OICR_TSYN_TX_M);
2624 		ice_flush(hw);
2625 	}
2626 }
2627 
2628 static void ice_ptp_periodic_work(struct kthread_work *work)
2629 {
2630 	struct ice_ptp *ptp = container_of(work, struct ice_ptp, work.work);
2631 	struct ice_pf *pf = container_of(ptp, struct ice_pf, ptp);
2632 	int err;
2633 
2634 	if (pf->ptp.state != ICE_PTP_READY)
2635 		return;
2636 
2637 	err = ice_ptp_update_cached_phctime(pf);
2638 
2639 	ice_ptp_maybe_trigger_tx_interrupt(pf);
2640 
2641 	/* Run twice a second or reschedule if phc update failed */
2642 	kthread_queue_delayed_work(ptp->kworker, &ptp->work,
2643 				   msecs_to_jiffies(err ? 10 : 500));
2644 }
2645 
2646 /**
2647  * ice_ptp_prepare_for_reset - Prepare PTP for reset
2648  * @pf: Board private structure
2649  * @reset_type: the reset type being performed
2650  */
2651 void ice_ptp_prepare_for_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
2652 {
2653 	struct ice_ptp *ptp = &pf->ptp;
2654 	u8 src_tmr;
2655 
2656 	if (ptp->state != ICE_PTP_READY)
2657 		return;
2658 
2659 	ptp->state = ICE_PTP_RESETTING;
2660 
2661 	/* Disable timestamping for both Tx and Rx */
2662 	ice_ptp_disable_timestamp_mode(pf);
2663 
2664 	kthread_cancel_delayed_work_sync(&ptp->work);
2665 
2666 	if (reset_type == ICE_RESET_PFR)
2667 		return;
2668 
2669 	ice_ptp_release_tx_tracker(pf, &pf->ptp.port.tx);
2670 
2671 	/* Disable periodic outputs */
2672 	ice_ptp_disable_all_clkout(pf);
2673 
2674 	src_tmr = ice_get_ptp_src_clock_index(&pf->hw);
2675 
2676 	/* Disable source clock */
2677 	wr32(&pf->hw, GLTSYN_ENA(src_tmr), (u32)~GLTSYN_ENA_TSYN_ENA_M);
2678 
2679 	/* Acquire PHC and system timer to restore after reset */
2680 	ptp->reset_time = ktime_get_real_ns();
2681 }
2682 
2683 /**
2684  * ice_ptp_rebuild_owner - Initialize PTP clock owner after reset
2685  * @pf: Board private structure
2686  *
2687  * Companion function for ice_ptp_rebuild() which handles tasks that only the
2688  * PTP clock owner instance should perform.
2689  */
2690 static int ice_ptp_rebuild_owner(struct ice_pf *pf)
2691 {
2692 	struct ice_ptp *ptp = &pf->ptp;
2693 	struct ice_hw *hw = &pf->hw;
2694 	struct timespec64 ts;
2695 	u64 time_diff;
2696 	int err;
2697 
2698 	err = ice_ptp_init_phc(hw);
2699 	if (err)
2700 		return err;
2701 
2702 	/* Acquire the global hardware lock */
2703 	if (!ice_ptp_lock(hw)) {
2704 		err = -EBUSY;
2705 		return err;
2706 	}
2707 
2708 	/* Write the increment time value to PHY and LAN */
2709 	err = ice_ptp_write_incval(hw, ice_base_incval(pf));
2710 	if (err) {
2711 		ice_ptp_unlock(hw);
2712 		return err;
2713 	}
2714 
2715 	/* Write the initial Time value to PHY and LAN using the cached PHC
2716 	 * time before the reset and time difference between stopping and
2717 	 * starting the clock.
2718 	 */
2719 	if (ptp->cached_phc_time) {
2720 		time_diff = ktime_get_real_ns() - ptp->reset_time;
2721 		ts = ns_to_timespec64(ptp->cached_phc_time + time_diff);
2722 	} else {
2723 		ts = ktime_to_timespec64(ktime_get_real());
2724 	}
2725 	err = ice_ptp_write_init(pf, &ts);
2726 	if (err) {
2727 		ice_ptp_unlock(hw);
2728 		return err;
2729 	}
2730 
2731 	/* Release the global hardware lock */
2732 	ice_ptp_unlock(hw);
2733 
2734 	/* Flush software tracking of any outstanding timestamps since we're
2735 	 * about to flush the PHY timestamp block.
2736 	 */
2737 	ice_ptp_flush_all_tx_tracker(pf);
2738 
2739 	if (!ice_is_e810(hw)) {
2740 		/* Enable quad interrupts */
2741 		err = ice_ptp_cfg_phy_interrupt(pf, true, 1);
2742 		if (err)
2743 			return err;
2744 
2745 		ice_ptp_restart_all_phy(pf);
2746 	}
2747 
2748 	return 0;
2749 }
2750 
2751 /**
2752  * ice_ptp_rebuild - Initialize PTP hardware clock support after reset
2753  * @pf: Board private structure
2754  * @reset_type: the reset type being performed
2755  */
2756 void ice_ptp_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
2757 {
2758 	struct ice_ptp *ptp = &pf->ptp;
2759 	int err;
2760 
2761 	if (ptp->state == ICE_PTP_READY) {
2762 		ice_ptp_prepare_for_reset(pf, reset_type);
2763 	} else if (ptp->state != ICE_PTP_RESETTING) {
2764 		err = -EINVAL;
2765 		dev_err(ice_pf_to_dev(pf), "PTP was not initialized\n");
2766 		goto err;
2767 	}
2768 
2769 	if (ice_pf_src_tmr_owned(pf) && reset_type != ICE_RESET_PFR) {
2770 		err = ice_ptp_rebuild_owner(pf);
2771 		if (err)
2772 			goto err;
2773 	}
2774 
2775 	ptp->state = ICE_PTP_READY;
2776 
2777 	/* Start periodic work going */
2778 	kthread_queue_delayed_work(ptp->kworker, &ptp->work, 0);
2779 
2780 	dev_info(ice_pf_to_dev(pf), "PTP reset successful\n");
2781 	return;
2782 
2783 err:
2784 	ptp->state = ICE_PTP_ERROR;
2785 	dev_err(ice_pf_to_dev(pf), "PTP reset failed %d\n", err);
2786 }
2787 
2788 /**
2789  * ice_ptp_aux_dev_to_aux_pf - Get auxiliary PF handle for the auxiliary device
2790  * @aux_dev: auxiliary device to get the auxiliary PF for
2791  */
2792 static struct ice_pf *
2793 ice_ptp_aux_dev_to_aux_pf(struct auxiliary_device *aux_dev)
2794 {
2795 	struct ice_ptp_port *aux_port;
2796 	struct ice_ptp *aux_ptp;
2797 
2798 	aux_port = container_of(aux_dev, struct ice_ptp_port, aux_dev);
2799 	aux_ptp = container_of(aux_port, struct ice_ptp, port);
2800 
2801 	return container_of(aux_ptp, struct ice_pf, ptp);
2802 }
2803 
2804 /**
2805  * ice_ptp_aux_dev_to_owner_pf - Get PF handle for the auxiliary device
2806  * @aux_dev: auxiliary device to get the PF for
2807  */
2808 static struct ice_pf *
2809 ice_ptp_aux_dev_to_owner_pf(struct auxiliary_device *aux_dev)
2810 {
2811 	struct ice_ptp_port_owner *ports_owner;
2812 	struct auxiliary_driver *aux_drv;
2813 	struct ice_ptp *owner_ptp;
2814 
2815 	if (!aux_dev->dev.driver)
2816 		return NULL;
2817 
2818 	aux_drv = to_auxiliary_drv(aux_dev->dev.driver);
2819 	ports_owner = container_of(aux_drv, struct ice_ptp_port_owner,
2820 				   aux_driver);
2821 	owner_ptp = container_of(ports_owner, struct ice_ptp, ports_owner);
2822 	return container_of(owner_ptp, struct ice_pf, ptp);
2823 }
2824 
2825 /**
2826  * ice_ptp_auxbus_probe - Probe auxiliary devices
2827  * @aux_dev: PF's auxiliary device
2828  * @id: Auxiliary device ID
2829  */
2830 static int ice_ptp_auxbus_probe(struct auxiliary_device *aux_dev,
2831 				const struct auxiliary_device_id *id)
2832 {
2833 	struct ice_pf *owner_pf = ice_ptp_aux_dev_to_owner_pf(aux_dev);
2834 	struct ice_pf *aux_pf = ice_ptp_aux_dev_to_aux_pf(aux_dev);
2835 
2836 	if (WARN_ON(!owner_pf))
2837 		return -ENODEV;
2838 
2839 	INIT_LIST_HEAD(&aux_pf->ptp.port.list_member);
2840 	mutex_lock(&owner_pf->ptp.ports_owner.lock);
2841 	list_add(&aux_pf->ptp.port.list_member,
2842 		 &owner_pf->ptp.ports_owner.ports);
2843 	mutex_unlock(&owner_pf->ptp.ports_owner.lock);
2844 
2845 	return 0;
2846 }
2847 
2848 /**
2849  * ice_ptp_auxbus_remove - Remove auxiliary devices from the bus
2850  * @aux_dev: PF's auxiliary device
2851  */
2852 static void ice_ptp_auxbus_remove(struct auxiliary_device *aux_dev)
2853 {
2854 	struct ice_pf *owner_pf = ice_ptp_aux_dev_to_owner_pf(aux_dev);
2855 	struct ice_pf *aux_pf = ice_ptp_aux_dev_to_aux_pf(aux_dev);
2856 
2857 	mutex_lock(&owner_pf->ptp.ports_owner.lock);
2858 	list_del(&aux_pf->ptp.port.list_member);
2859 	mutex_unlock(&owner_pf->ptp.ports_owner.lock);
2860 }
2861 
2862 /**
2863  * ice_ptp_auxbus_shutdown
2864  * @aux_dev: PF's auxiliary device
2865  */
2866 static void ice_ptp_auxbus_shutdown(struct auxiliary_device *aux_dev)
2867 {
2868 	/* Doing nothing here, but handle to auxbus driver must be satisfied */
2869 }
2870 
2871 /**
2872  * ice_ptp_auxbus_suspend
2873  * @aux_dev: PF's auxiliary device
2874  * @state: power management state indicator
2875  */
2876 static int
2877 ice_ptp_auxbus_suspend(struct auxiliary_device *aux_dev, pm_message_t state)
2878 {
2879 	/* Doing nothing here, but handle to auxbus driver must be satisfied */
2880 	return 0;
2881 }
2882 
2883 /**
2884  * ice_ptp_auxbus_resume
2885  * @aux_dev: PF's auxiliary device
2886  */
2887 static int ice_ptp_auxbus_resume(struct auxiliary_device *aux_dev)
2888 {
2889 	/* Doing nothing here, but handle to auxbus driver must be satisfied */
2890 	return 0;
2891 }
2892 
2893 /**
2894  * ice_ptp_auxbus_create_id_table - Create auxiliary device ID table
2895  * @pf: Board private structure
2896  * @name: auxiliary bus driver name
2897  */
2898 static struct auxiliary_device_id *
2899 ice_ptp_auxbus_create_id_table(struct ice_pf *pf, const char *name)
2900 {
2901 	struct auxiliary_device_id *ids;
2902 
2903 	/* Second id left empty to terminate the array */
2904 	ids = devm_kcalloc(ice_pf_to_dev(pf), 2,
2905 			   sizeof(struct auxiliary_device_id), GFP_KERNEL);
2906 	if (!ids)
2907 		return NULL;
2908 
2909 	snprintf(ids[0].name, sizeof(ids[0].name), "ice.%s", name);
2910 
2911 	return ids;
2912 }
2913 
2914 /**
2915  * ice_ptp_register_auxbus_driver - Register PTP auxiliary bus driver
2916  * @pf: Board private structure
2917  */
2918 static int ice_ptp_register_auxbus_driver(struct ice_pf *pf)
2919 {
2920 	struct auxiliary_driver *aux_driver;
2921 	struct ice_ptp *ptp;
2922 	struct device *dev;
2923 	char *name;
2924 	int err;
2925 
2926 	ptp = &pf->ptp;
2927 	dev = ice_pf_to_dev(pf);
2928 	aux_driver = &ptp->ports_owner.aux_driver;
2929 	INIT_LIST_HEAD(&ptp->ports_owner.ports);
2930 	mutex_init(&ptp->ports_owner.lock);
2931 	name = devm_kasprintf(dev, GFP_KERNEL, "ptp_aux_dev_%u_%u_clk%u",
2932 			      pf->pdev->bus->number, PCI_SLOT(pf->pdev->devfn),
2933 			      ice_get_ptp_src_clock_index(&pf->hw));
2934 	if (!name)
2935 		return -ENOMEM;
2936 
2937 	aux_driver->name = name;
2938 	aux_driver->shutdown = ice_ptp_auxbus_shutdown;
2939 	aux_driver->suspend = ice_ptp_auxbus_suspend;
2940 	aux_driver->remove = ice_ptp_auxbus_remove;
2941 	aux_driver->resume = ice_ptp_auxbus_resume;
2942 	aux_driver->probe = ice_ptp_auxbus_probe;
2943 	aux_driver->id_table = ice_ptp_auxbus_create_id_table(pf, name);
2944 	if (!aux_driver->id_table)
2945 		return -ENOMEM;
2946 
2947 	err = auxiliary_driver_register(aux_driver);
2948 	if (err) {
2949 		devm_kfree(dev, aux_driver->id_table);
2950 		dev_err(dev, "Failed registering aux_driver, name <%s>\n",
2951 			name);
2952 	}
2953 
2954 	return err;
2955 }
2956 
2957 /**
2958  * ice_ptp_unregister_auxbus_driver - Unregister PTP auxiliary bus driver
2959  * @pf: Board private structure
2960  */
2961 static void ice_ptp_unregister_auxbus_driver(struct ice_pf *pf)
2962 {
2963 	struct auxiliary_driver *aux_driver = &pf->ptp.ports_owner.aux_driver;
2964 
2965 	auxiliary_driver_unregister(aux_driver);
2966 	devm_kfree(ice_pf_to_dev(pf), aux_driver->id_table);
2967 
2968 	mutex_destroy(&pf->ptp.ports_owner.lock);
2969 }
2970 
2971 /**
2972  * ice_ptp_clock_index - Get the PTP clock index for this device
2973  * @pf: Board private structure
2974  *
2975  * Returns: the PTP clock index associated with this PF, or -1 if no PTP clock
2976  * is associated.
2977  */
2978 int ice_ptp_clock_index(struct ice_pf *pf)
2979 {
2980 	struct auxiliary_device *aux_dev;
2981 	struct ice_pf *owner_pf;
2982 	struct ptp_clock *clock;
2983 
2984 	aux_dev = &pf->ptp.port.aux_dev;
2985 	owner_pf = ice_ptp_aux_dev_to_owner_pf(aux_dev);
2986 	if (!owner_pf)
2987 		return -1;
2988 	clock = owner_pf->ptp.clock;
2989 
2990 	return clock ? ptp_clock_index(clock) : -1;
2991 }
2992 
2993 /**
2994  * ice_ptp_init_owner - Initialize PTP_1588_CLOCK device
2995  * @pf: Board private structure
2996  *
2997  * Setup and initialize a PTP clock device that represents the device hardware
2998  * clock. Save the clock index for other functions connected to the same
2999  * hardware resource.
3000  */
3001 static int ice_ptp_init_owner(struct ice_pf *pf)
3002 {
3003 	struct ice_hw *hw = &pf->hw;
3004 	struct timespec64 ts;
3005 	int err;
3006 
3007 	err = ice_ptp_init_phc(hw);
3008 	if (err) {
3009 		dev_err(ice_pf_to_dev(pf), "Failed to initialize PHC, err %d\n",
3010 			err);
3011 		return err;
3012 	}
3013 
3014 	/* Acquire the global hardware lock */
3015 	if (!ice_ptp_lock(hw)) {
3016 		err = -EBUSY;
3017 		goto err_exit;
3018 	}
3019 
3020 	/* Write the increment time value to PHY and LAN */
3021 	err = ice_ptp_write_incval(hw, ice_base_incval(pf));
3022 	if (err) {
3023 		ice_ptp_unlock(hw);
3024 		goto err_exit;
3025 	}
3026 
3027 	ts = ktime_to_timespec64(ktime_get_real());
3028 	/* Write the initial Time value to PHY and LAN */
3029 	err = ice_ptp_write_init(pf, &ts);
3030 	if (err) {
3031 		ice_ptp_unlock(hw);
3032 		goto err_exit;
3033 	}
3034 
3035 	/* Release the global hardware lock */
3036 	ice_ptp_unlock(hw);
3037 
3038 	if (!ice_is_e810(hw)) {
3039 		/* Enable quad interrupts */
3040 		err = ice_ptp_cfg_phy_interrupt(pf, true, 1);
3041 		if (err)
3042 			goto err_exit;
3043 	}
3044 
3045 	/* Ensure we have a clock device */
3046 	err = ice_ptp_create_clock(pf);
3047 	if (err)
3048 		goto err_clk;
3049 
3050 	err = ice_ptp_register_auxbus_driver(pf);
3051 	if (err) {
3052 		dev_err(ice_pf_to_dev(pf), "Failed to register PTP auxbus driver");
3053 		goto err_aux;
3054 	}
3055 
3056 	return 0;
3057 err_aux:
3058 	ptp_clock_unregister(pf->ptp.clock);
3059 err_clk:
3060 	pf->ptp.clock = NULL;
3061 err_exit:
3062 	return err;
3063 }
3064 
3065 /**
3066  * ice_ptp_init_work - Initialize PTP work threads
3067  * @pf: Board private structure
3068  * @ptp: PF PTP structure
3069  */
3070 static int ice_ptp_init_work(struct ice_pf *pf, struct ice_ptp *ptp)
3071 {
3072 	struct kthread_worker *kworker;
3073 
3074 	/* Initialize work functions */
3075 	kthread_init_delayed_work(&ptp->work, ice_ptp_periodic_work);
3076 
3077 	/* Allocate a kworker for handling work required for the ports
3078 	 * connected to the PTP hardware clock.
3079 	 */
3080 	kworker = kthread_create_worker(0, "ice-ptp-%s",
3081 					dev_name(ice_pf_to_dev(pf)));
3082 	if (IS_ERR(kworker))
3083 		return PTR_ERR(kworker);
3084 
3085 	ptp->kworker = kworker;
3086 
3087 	/* Start periodic work going */
3088 	kthread_queue_delayed_work(ptp->kworker, &ptp->work, 0);
3089 
3090 	return 0;
3091 }
3092 
3093 /**
3094  * ice_ptp_init_port - Initialize PTP port structure
3095  * @pf: Board private structure
3096  * @ptp_port: PTP port structure
3097  */
3098 static int ice_ptp_init_port(struct ice_pf *pf, struct ice_ptp_port *ptp_port)
3099 {
3100 	struct ice_hw *hw = &pf->hw;
3101 
3102 	mutex_init(&ptp_port->ps_lock);
3103 
3104 	switch (hw->phy_model) {
3105 	case ICE_PHY_E810:
3106 		return ice_ptp_init_tx_e810(pf, &ptp_port->tx);
3107 	case ICE_PHY_E82X:
3108 		kthread_init_delayed_work(&ptp_port->ov_work,
3109 					  ice_ptp_wait_for_offsets);
3110 
3111 		return ice_ptp_init_tx_e82x(pf, &ptp_port->tx,
3112 					    ptp_port->port_num);
3113 	default:
3114 		return -ENODEV;
3115 	}
3116 }
3117 
3118 /**
3119  * ice_ptp_release_auxbus_device
3120  * @dev: device that utilizes the auxbus
3121  */
3122 static void ice_ptp_release_auxbus_device(struct device *dev)
3123 {
3124 	/* Doing nothing here, but handle to auxbux device must be satisfied */
3125 }
3126 
3127 /**
3128  * ice_ptp_create_auxbus_device - Create PTP auxiliary bus device
3129  * @pf: Board private structure
3130  */
3131 static int ice_ptp_create_auxbus_device(struct ice_pf *pf)
3132 {
3133 	struct auxiliary_device *aux_dev;
3134 	struct ice_ptp *ptp;
3135 	struct device *dev;
3136 	char *name;
3137 	int err;
3138 	u32 id;
3139 
3140 	ptp = &pf->ptp;
3141 	id = ptp->port.port_num;
3142 	dev = ice_pf_to_dev(pf);
3143 
3144 	aux_dev = &ptp->port.aux_dev;
3145 
3146 	name = devm_kasprintf(dev, GFP_KERNEL, "ptp_aux_dev_%u_%u_clk%u",
3147 			      pf->pdev->bus->number, PCI_SLOT(pf->pdev->devfn),
3148 			      ice_get_ptp_src_clock_index(&pf->hw));
3149 	if (!name)
3150 		return -ENOMEM;
3151 
3152 	aux_dev->name = name;
3153 	aux_dev->id = id;
3154 	aux_dev->dev.release = ice_ptp_release_auxbus_device;
3155 	aux_dev->dev.parent = dev;
3156 
3157 	err = auxiliary_device_init(aux_dev);
3158 	if (err)
3159 		goto aux_err;
3160 
3161 	err = auxiliary_device_add(aux_dev);
3162 	if (err) {
3163 		auxiliary_device_uninit(aux_dev);
3164 		goto aux_err;
3165 	}
3166 
3167 	return 0;
3168 aux_err:
3169 	dev_err(dev, "Failed to create PTP auxiliary bus device <%s>\n", name);
3170 	devm_kfree(dev, name);
3171 	return err;
3172 }
3173 
3174 /**
3175  * ice_ptp_remove_auxbus_device - Remove PTP auxiliary bus device
3176  * @pf: Board private structure
3177  */
3178 static void ice_ptp_remove_auxbus_device(struct ice_pf *pf)
3179 {
3180 	struct auxiliary_device *aux_dev = &pf->ptp.port.aux_dev;
3181 
3182 	auxiliary_device_delete(aux_dev);
3183 	auxiliary_device_uninit(aux_dev);
3184 
3185 	memset(aux_dev, 0, sizeof(*aux_dev));
3186 }
3187 
3188 /**
3189  * ice_ptp_init_tx_interrupt_mode - Initialize device Tx interrupt mode
3190  * @pf: Board private structure
3191  *
3192  * Initialize the Tx timestamp interrupt mode for this device. For most device
3193  * types, each PF processes the interrupt and manages its own timestamps. For
3194  * E822-based devices, only the clock owner processes the timestamps. Other
3195  * PFs disable the interrupt and do not process their own timestamps.
3196  */
3197 static void ice_ptp_init_tx_interrupt_mode(struct ice_pf *pf)
3198 {
3199 	switch (pf->hw.phy_model) {
3200 	case ICE_PHY_E82X:
3201 		/* E822 based PHY has the clock owner process the interrupt
3202 		 * for all ports.
3203 		 */
3204 		if (ice_pf_src_tmr_owned(pf))
3205 			pf->ptp.tx_interrupt_mode = ICE_PTP_TX_INTERRUPT_ALL;
3206 		else
3207 			pf->ptp.tx_interrupt_mode = ICE_PTP_TX_INTERRUPT_NONE;
3208 		break;
3209 	default:
3210 		/* other PHY types handle their own Tx interrupt */
3211 		pf->ptp.tx_interrupt_mode = ICE_PTP_TX_INTERRUPT_SELF;
3212 	}
3213 }
3214 
3215 /**
3216  * ice_ptp_init - Initialize PTP hardware clock support
3217  * @pf: Board private structure
3218  *
3219  * Set up the device for interacting with the PTP hardware clock for all
3220  * functions, both the function that owns the clock hardware, and the
3221  * functions connected to the clock hardware.
3222  *
3223  * The clock owner will allocate and register a ptp_clock with the
3224  * PTP_1588_CLOCK infrastructure. All functions allocate a kthread and work
3225  * items used for asynchronous work such as Tx timestamps and periodic work.
3226  */
3227 void ice_ptp_init(struct ice_pf *pf)
3228 {
3229 	struct ice_ptp *ptp = &pf->ptp;
3230 	struct ice_hw *hw = &pf->hw;
3231 	int err;
3232 
3233 	ptp->state = ICE_PTP_INITIALIZING;
3234 
3235 	ice_ptp_init_phy_model(hw);
3236 
3237 	ice_ptp_init_tx_interrupt_mode(pf);
3238 
3239 	/* If this function owns the clock hardware, it must allocate and
3240 	 * configure the PTP clock device to represent it.
3241 	 */
3242 	if (ice_pf_src_tmr_owned(pf)) {
3243 		err = ice_ptp_init_owner(pf);
3244 		if (err)
3245 			goto err;
3246 	}
3247 
3248 	ptp->port.port_num = hw->pf_id;
3249 	err = ice_ptp_init_port(pf, &ptp->port);
3250 	if (err)
3251 		goto err;
3252 
3253 	/* Start the PHY timestamping block */
3254 	ice_ptp_reset_phy_timestamping(pf);
3255 
3256 	/* Configure initial Tx interrupt settings */
3257 	ice_ptp_cfg_tx_interrupt(pf);
3258 
3259 	err = ice_ptp_create_auxbus_device(pf);
3260 	if (err)
3261 		goto err;
3262 
3263 	ptp->state = ICE_PTP_READY;
3264 
3265 	err = ice_ptp_init_work(pf, ptp);
3266 	if (err)
3267 		goto err;
3268 
3269 	dev_info(ice_pf_to_dev(pf), "PTP init successful\n");
3270 	return;
3271 
3272 err:
3273 	/* If we registered a PTP clock, release it */
3274 	if (pf->ptp.clock) {
3275 		ptp_clock_unregister(ptp->clock);
3276 		pf->ptp.clock = NULL;
3277 	}
3278 	ptp->state = ICE_PTP_ERROR;
3279 	dev_err(ice_pf_to_dev(pf), "PTP failed %d\n", err);
3280 }
3281 
3282 /**
3283  * ice_ptp_release - Disable the driver/HW support and unregister the clock
3284  * @pf: Board private structure
3285  *
3286  * This function handles the cleanup work required from the initialization by
3287  * clearing out the important information and unregistering the clock
3288  */
3289 void ice_ptp_release(struct ice_pf *pf)
3290 {
3291 	if (pf->ptp.state != ICE_PTP_READY)
3292 		return;
3293 
3294 	pf->ptp.state = ICE_PTP_UNINIT;
3295 
3296 	/* Disable timestamping for both Tx and Rx */
3297 	ice_ptp_disable_timestamp_mode(pf);
3298 
3299 	ice_ptp_remove_auxbus_device(pf);
3300 
3301 	ice_ptp_release_tx_tracker(pf, &pf->ptp.port.tx);
3302 
3303 	kthread_cancel_delayed_work_sync(&pf->ptp.work);
3304 
3305 	ice_ptp_port_phy_stop(&pf->ptp.port);
3306 	mutex_destroy(&pf->ptp.port.ps_lock);
3307 	if (pf->ptp.kworker) {
3308 		kthread_destroy_worker(pf->ptp.kworker);
3309 		pf->ptp.kworker = NULL;
3310 	}
3311 
3312 	if (ice_pf_src_tmr_owned(pf))
3313 		ice_ptp_unregister_auxbus_driver(pf);
3314 
3315 	if (!pf->ptp.clock)
3316 		return;
3317 
3318 	/* Disable periodic outputs */
3319 	ice_ptp_disable_all_clkout(pf);
3320 
3321 	ptp_clock_unregister(pf->ptp.clock);
3322 	pf->ptp.clock = NULL;
3323 
3324 	dev_info(ice_pf_to_dev(pf), "Removed PTP clock\n");
3325 }
3326