net: atlantic: Fix DMA mapping for PTP hwts ring
[platform/kernel/linux-starfive.git] / drivers / net / ethernet / aquantia / atlantic / aq_ptp.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Atlantic Network Driver
3  *
4  * Copyright (C) 2014-2019 aQuantia Corporation
5  * Copyright (C) 2019-2020 Marvell International Ltd.
6  */
7
8 /* File aq_ptp.c:
9  * Definition of functions for Linux PTP support.
10  */
11
12 #include <linux/ptp_clock_kernel.h>
13 #include <linux/ptp_classify.h>
14 #include <linux/interrupt.h>
15 #include <linux/clocksource.h>
16
17 #include "aq_nic.h"
18 #include "aq_ptp.h"
19 #include "aq_ring.h"
20 #include "aq_phy.h"
21 #include "aq_filters.h"
22
23 #if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
24
25 #define AQ_PTP_TX_TIMEOUT        (HZ *  10)
26
27 #define POLL_SYNC_TIMER_MS 15
28
29 enum ptp_speed_offsets {
30         ptp_offset_idx_10 = 0,
31         ptp_offset_idx_100,
32         ptp_offset_idx_1000,
33         ptp_offset_idx_2500,
34         ptp_offset_idx_5000,
35         ptp_offset_idx_10000,
36 };
37
38 struct ptp_skb_ring {
39         struct sk_buff **buff;
40         spinlock_t lock;
41         unsigned int size;
42         unsigned int head;
43         unsigned int tail;
44 };
45
46 struct ptp_tx_timeout {
47         spinlock_t lock;
48         bool active;
49         unsigned long tx_start;
50 };
51
52 struct aq_ptp_s {
53         struct aq_nic_s *aq_nic;
54         struct hwtstamp_config hwtstamp_config;
55         spinlock_t ptp_lock;
56         spinlock_t ptp_ring_lock;
57         struct ptp_clock *ptp_clock;
58         struct ptp_clock_info ptp_info;
59
60         atomic_t offset_egress;
61         atomic_t offset_ingress;
62
63         struct aq_ring_param_s ptp_ring_param;
64
65         struct ptp_tx_timeout ptp_tx_timeout;
66
67         unsigned int idx_vector;
68         struct napi_struct napi;
69
70         struct aq_ring_s ptp_tx;
71         struct aq_ring_s ptp_rx;
72         struct aq_ring_s hwts_rx;
73
74         struct ptp_skb_ring skb_ring;
75
76         struct aq_rx_filter_l3l4 udp_filter;
77         struct aq_rx_filter_l2 eth_type_filter;
78
79         struct delayed_work poll_sync;
80         u32 poll_timeout_ms;
81
82         bool extts_pin_enabled;
83         u64 last_sync1588_ts;
84
85         bool a1_ptp;
86 };
87
88 struct ptp_tm_offset {
89         unsigned int mbps;
90         int egress;
91         int ingress;
92 };
93
94 static struct ptp_tm_offset ptp_offset[6];
95
96 void aq_ptp_tm_offset_set(struct aq_nic_s *aq_nic, unsigned int mbps)
97 {
98         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
99         int i, egress, ingress;
100
101         if (!aq_ptp)
102                 return;
103
104         egress = 0;
105         ingress = 0;
106
107         for (i = 0; i < ARRAY_SIZE(ptp_offset); i++) {
108                 if (mbps == ptp_offset[i].mbps) {
109                         egress = ptp_offset[i].egress;
110                         ingress = ptp_offset[i].ingress;
111                         break;
112                 }
113         }
114
115         atomic_set(&aq_ptp->offset_egress, egress);
116         atomic_set(&aq_ptp->offset_ingress, ingress);
117 }
118
119 static int __aq_ptp_skb_put(struct ptp_skb_ring *ring, struct sk_buff *skb)
120 {
121         unsigned int next_head = (ring->head + 1) % ring->size;
122
123         if (next_head == ring->tail)
124                 return -ENOMEM;
125
126         ring->buff[ring->head] = skb_get(skb);
127         ring->head = next_head;
128
129         return 0;
130 }
131
132 static int aq_ptp_skb_put(struct ptp_skb_ring *ring, struct sk_buff *skb)
133 {
134         unsigned long flags;
135         int ret;
136
137         spin_lock_irqsave(&ring->lock, flags);
138         ret = __aq_ptp_skb_put(ring, skb);
139         spin_unlock_irqrestore(&ring->lock, flags);
140
141         return ret;
142 }
143
144 static struct sk_buff *__aq_ptp_skb_get(struct ptp_skb_ring *ring)
145 {
146         struct sk_buff *skb;
147
148         if (ring->tail == ring->head)
149                 return NULL;
150
151         skb = ring->buff[ring->tail];
152         ring->tail = (ring->tail + 1) % ring->size;
153
154         return skb;
155 }
156
157 static struct sk_buff *aq_ptp_skb_get(struct ptp_skb_ring *ring)
158 {
159         unsigned long flags;
160         struct sk_buff *skb;
161
162         spin_lock_irqsave(&ring->lock, flags);
163         skb = __aq_ptp_skb_get(ring);
164         spin_unlock_irqrestore(&ring->lock, flags);
165
166         return skb;
167 }
168
169 static unsigned int aq_ptp_skb_buf_len(struct ptp_skb_ring *ring)
170 {
171         unsigned long flags;
172         unsigned int len;
173
174         spin_lock_irqsave(&ring->lock, flags);
175         len = (ring->head >= ring->tail) ?
176         ring->head - ring->tail :
177         ring->size - ring->tail + ring->head;
178         spin_unlock_irqrestore(&ring->lock, flags);
179
180         return len;
181 }
182
183 static int aq_ptp_skb_ring_init(struct ptp_skb_ring *ring, unsigned int size)
184 {
185         struct sk_buff **buff = kmalloc(sizeof(*buff) * size, GFP_KERNEL);
186
187         if (!buff)
188                 return -ENOMEM;
189
190         spin_lock_init(&ring->lock);
191
192         ring->buff = buff;
193         ring->size = size;
194         ring->head = 0;
195         ring->tail = 0;
196
197         return 0;
198 }
199
200 static void aq_ptp_skb_ring_clean(struct ptp_skb_ring *ring)
201 {
202         struct sk_buff *skb;
203
204         while ((skb = aq_ptp_skb_get(ring)) != NULL)
205                 dev_kfree_skb_any(skb);
206 }
207
208 static void aq_ptp_skb_ring_release(struct ptp_skb_ring *ring)
209 {
210         if (ring->buff) {
211                 aq_ptp_skb_ring_clean(ring);
212                 kfree(ring->buff);
213                 ring->buff = NULL;
214         }
215 }
216
217 static void aq_ptp_tx_timeout_init(struct ptp_tx_timeout *timeout)
218 {
219         spin_lock_init(&timeout->lock);
220         timeout->active = false;
221 }
222
223 static void aq_ptp_tx_timeout_start(struct aq_ptp_s *aq_ptp)
224 {
225         struct ptp_tx_timeout *timeout = &aq_ptp->ptp_tx_timeout;
226         unsigned long flags;
227
228         spin_lock_irqsave(&timeout->lock, flags);
229         timeout->active = true;
230         timeout->tx_start = jiffies;
231         spin_unlock_irqrestore(&timeout->lock, flags);
232 }
233
234 static void aq_ptp_tx_timeout_update(struct aq_ptp_s *aq_ptp)
235 {
236         if (!aq_ptp_skb_buf_len(&aq_ptp->skb_ring)) {
237                 struct ptp_tx_timeout *timeout = &aq_ptp->ptp_tx_timeout;
238                 unsigned long flags;
239
240                 spin_lock_irqsave(&timeout->lock, flags);
241                 timeout->active = false;
242                 spin_unlock_irqrestore(&timeout->lock, flags);
243         }
244 }
245
246 static void aq_ptp_tx_timeout_check(struct aq_ptp_s *aq_ptp)
247 {
248         struct ptp_tx_timeout *timeout = &aq_ptp->ptp_tx_timeout;
249         unsigned long flags;
250         bool timeout_flag;
251
252         timeout_flag = false;
253
254         spin_lock_irqsave(&timeout->lock, flags);
255         if (timeout->active) {
256                 timeout_flag = time_is_before_jiffies(timeout->tx_start +
257                                                       AQ_PTP_TX_TIMEOUT);
258                 /* reset active flag if timeout detected */
259                 if (timeout_flag)
260                         timeout->active = false;
261         }
262         spin_unlock_irqrestore(&timeout->lock, flags);
263
264         if (timeout_flag) {
265                 aq_ptp_skb_ring_clean(&aq_ptp->skb_ring);
266                 netdev_err(aq_ptp->aq_nic->ndev,
267                            "PTP Timeout. Clearing Tx Timestamp SKBs\n");
268         }
269 }
270
271 /* aq_ptp_adjfine
272  * @ptp: the ptp clock structure
273  * @ppb: parts per billion adjustment from base
274  *
275  * adjust the frequency of the ptp cycle counter by the
276  * indicated ppb from the base frequency.
277  */
278 static int aq_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
279 {
280         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
281         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
282
283         mutex_lock(&aq_nic->fwreq_mutex);
284         aq_nic->aq_hw_ops->hw_adj_clock_freq(aq_nic->aq_hw,
285                                              scaled_ppm_to_ppb(scaled_ppm));
286         mutex_unlock(&aq_nic->fwreq_mutex);
287
288         return 0;
289 }
290
291 /* aq_ptp_adjtime
292  * @ptp: the ptp clock structure
293  * @delta: offset to adjust the cycle counter by
294  *
295  * adjust the timer by resetting the timecounter structure.
296  */
297 static int aq_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
298 {
299         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
300         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
301         unsigned long flags;
302
303         spin_lock_irqsave(&aq_ptp->ptp_lock, flags);
304         aq_nic->aq_hw_ops->hw_adj_sys_clock(aq_nic->aq_hw, delta);
305         spin_unlock_irqrestore(&aq_ptp->ptp_lock, flags);
306
307         return 0;
308 }
309
310 /* aq_ptp_gettime
311  * @ptp: the ptp clock structure
312  * @ts: timespec structure to hold the current time value
313  *
314  * read the timecounter and return the correct value on ns,
315  * after converting it into a struct timespec.
316  */
317 static int aq_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
318 {
319         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
320         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
321         unsigned long flags;
322         u64 ns;
323
324         spin_lock_irqsave(&aq_ptp->ptp_lock, flags);
325         aq_nic->aq_hw_ops->hw_get_ptp_ts(aq_nic->aq_hw, &ns);
326         spin_unlock_irqrestore(&aq_ptp->ptp_lock, flags);
327
328         *ts = ns_to_timespec64(ns);
329
330         return 0;
331 }
332
333 /* aq_ptp_settime
334  * @ptp: the ptp clock structure
335  * @ts: the timespec containing the new time for the cycle counter
336  *
337  * reset the timecounter to use a new base value instead of the kernel
338  * wall timer value.
339  */
340 static int aq_ptp_settime(struct ptp_clock_info *ptp,
341                           const struct timespec64 *ts)
342 {
343         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
344         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
345         unsigned long flags;
346         u64 ns = timespec64_to_ns(ts);
347         u64 now;
348
349         spin_lock_irqsave(&aq_ptp->ptp_lock, flags);
350         aq_nic->aq_hw_ops->hw_get_ptp_ts(aq_nic->aq_hw, &now);
351         aq_nic->aq_hw_ops->hw_adj_sys_clock(aq_nic->aq_hw, (s64)ns - (s64)now);
352
353         spin_unlock_irqrestore(&aq_ptp->ptp_lock, flags);
354
355         return 0;
356 }
357
358 static void aq_ptp_convert_to_hwtstamp(struct aq_ptp_s *aq_ptp,
359                                        struct skb_shared_hwtstamps *hwtstamp,
360                                        u64 timestamp)
361 {
362         memset(hwtstamp, 0, sizeof(*hwtstamp));
363         hwtstamp->hwtstamp = ns_to_ktime(timestamp);
364 }
365
366 static int aq_ptp_hw_pin_conf(struct aq_nic_s *aq_nic, u32 pin_index, u64 start,
367                               u64 period)
368 {
369         if (period)
370                 netdev_dbg(aq_nic->ndev,
371                            "Enable GPIO %d pulsing, start time %llu, period %u\n",
372                            pin_index, start, (u32)period);
373         else
374                 netdev_dbg(aq_nic->ndev,
375                            "Disable GPIO %d pulsing, start time %llu, period %u\n",
376                            pin_index, start, (u32)period);
377
378         /* Notify hardware of request to being sending pulses.
379          * If period is ZERO then pulsen is disabled.
380          */
381         mutex_lock(&aq_nic->fwreq_mutex);
382         aq_nic->aq_hw_ops->hw_gpio_pulse(aq_nic->aq_hw, pin_index,
383                                          start, (u32)period);
384         mutex_unlock(&aq_nic->fwreq_mutex);
385
386         return 0;
387 }
388
389 static int aq_ptp_perout_pin_configure(struct ptp_clock_info *ptp,
390                                        struct ptp_clock_request *rq, int on)
391 {
392         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
393         struct ptp_clock_time *t = &rq->perout.period;
394         struct ptp_clock_time *s = &rq->perout.start;
395         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
396         u64 start, period;
397         u32 pin_index = rq->perout.index;
398
399         /* verify the request channel is there */
400         if (pin_index >= ptp->n_per_out)
401                 return -EINVAL;
402
403         /* we cannot support periods greater
404          * than 4 seconds due to reg limit
405          */
406         if (t->sec > 4 || t->sec < 0)
407                 return -ERANGE;
408
409         /* convert to unsigned 64b ns,
410          * verify we can put it in a 32b register
411          */
412         period = on ? t->sec * NSEC_PER_SEC + t->nsec : 0;
413
414         /* verify the value is in range supported by hardware */
415         if (period > U32_MAX)
416                 return -ERANGE;
417         /* convert to unsigned 64b ns */
418         /* TODO convert to AQ time */
419         start = on ? s->sec * NSEC_PER_SEC + s->nsec : 0;
420
421         aq_ptp_hw_pin_conf(aq_nic, pin_index, start, period);
422
423         return 0;
424 }
425
426 static int aq_ptp_pps_pin_configure(struct ptp_clock_info *ptp,
427                                     struct ptp_clock_request *rq, int on)
428 {
429         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
430         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
431         u64 start, period;
432         u32 pin_index = 0;
433         u32 rest = 0;
434
435         /* verify the request channel is there */
436         if (pin_index >= ptp->n_per_out)
437                 return -EINVAL;
438
439         aq_nic->aq_hw_ops->hw_get_ptp_ts(aq_nic->aq_hw, &start);
440         div_u64_rem(start, NSEC_PER_SEC, &rest);
441         period = on ? NSEC_PER_SEC : 0; /* PPS - pulse per second */
442         start = on ? start - rest + NSEC_PER_SEC *
443                 (rest > 990000000LL ? 2 : 1) : 0;
444
445         aq_ptp_hw_pin_conf(aq_nic, pin_index, start, period);
446
447         return 0;
448 }
449
450 static void aq_ptp_extts_pin_ctrl(struct aq_ptp_s *aq_ptp)
451 {
452         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
453         u32 enable = aq_ptp->extts_pin_enabled;
454
455         if (aq_nic->aq_hw_ops->hw_extts_gpio_enable)
456                 aq_nic->aq_hw_ops->hw_extts_gpio_enable(aq_nic->aq_hw, 0,
457                                                         enable);
458 }
459
460 static int aq_ptp_extts_pin_configure(struct ptp_clock_info *ptp,
461                                       struct ptp_clock_request *rq, int on)
462 {
463         struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
464
465         u32 pin_index = rq->extts.index;
466
467         if (pin_index >= ptp->n_ext_ts)
468                 return -EINVAL;
469
470         aq_ptp->extts_pin_enabled = !!on;
471         if (on) {
472                 aq_ptp->poll_timeout_ms = POLL_SYNC_TIMER_MS;
473                 cancel_delayed_work_sync(&aq_ptp->poll_sync);
474                 schedule_delayed_work(&aq_ptp->poll_sync,
475                                       msecs_to_jiffies(aq_ptp->poll_timeout_ms));
476         }
477
478         aq_ptp_extts_pin_ctrl(aq_ptp);
479         return 0;
480 }
481
482 /* aq_ptp_gpio_feature_enable
483  * @ptp: the ptp clock structure
484  * @rq: the requested feature to change
485  * @on: whether to enable or disable the feature
486  */
487 static int aq_ptp_gpio_feature_enable(struct ptp_clock_info *ptp,
488                                       struct ptp_clock_request *rq, int on)
489 {
490         switch (rq->type) {
491         case PTP_CLK_REQ_EXTTS:
492                 return aq_ptp_extts_pin_configure(ptp, rq, on);
493         case PTP_CLK_REQ_PEROUT:
494                 return aq_ptp_perout_pin_configure(ptp, rq, on);
495         case PTP_CLK_REQ_PPS:
496                 return aq_ptp_pps_pin_configure(ptp, rq, on);
497         default:
498                 return -EOPNOTSUPP;
499         }
500
501         return 0;
502 }
503
504 /* aq_ptp_verify
505  * @ptp: the ptp clock structure
506  * @pin: index of the pin in question
507  * @func: the desired function to use
508  * @chan: the function channel index to use
509  */
510 static int aq_ptp_verify(struct ptp_clock_info *ptp, unsigned int pin,
511                          enum ptp_pin_function func, unsigned int chan)
512 {
513         /* verify the requested pin is there */
514         if (!ptp->pin_config || pin >= ptp->n_pins)
515                 return -EINVAL;
516
517         /* enforce locked channels, no changing them */
518         if (chan != ptp->pin_config[pin].chan)
519                 return -EINVAL;
520
521         /* we want to keep the functions locked as well */
522         if (func != ptp->pin_config[pin].func)
523                 return -EINVAL;
524
525         return 0;
526 }
527
528 /* aq_ptp_tx_hwtstamp - utility function which checks for TX time stamp
529  * @adapter: the private adapter struct
530  *
531  * if the timestamp is valid, we convert it into the timecounter ns
532  * value, then store that result into the hwtstamps structure which
533  * is passed up the network stack
534  */
535 void aq_ptp_tx_hwtstamp(struct aq_nic_s *aq_nic, u64 timestamp)
536 {
537         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
538         struct sk_buff *skb = aq_ptp_skb_get(&aq_ptp->skb_ring);
539         struct skb_shared_hwtstamps hwtstamp;
540
541         if (!skb) {
542                 netdev_err(aq_nic->ndev, "have timestamp but tx_queues empty\n");
543                 return;
544         }
545
546         timestamp += atomic_read(&aq_ptp->offset_egress);
547         aq_ptp_convert_to_hwtstamp(aq_ptp, &hwtstamp, timestamp);
548         skb_tstamp_tx(skb, &hwtstamp);
549         dev_kfree_skb_any(skb);
550
551         aq_ptp_tx_timeout_update(aq_ptp);
552 }
553
554 /* aq_ptp_rx_hwtstamp - utility function which checks for RX time stamp
555  * @adapter: pointer to adapter struct
556  * @shhwtstamps: particular skb_shared_hwtstamps to save timestamp
557  *
558  * if the timestamp is valid, we convert it into the timecounter ns
559  * value, then store that result into the hwtstamps structure which
560  * is passed up the network stack
561  */
562 static void aq_ptp_rx_hwtstamp(struct aq_ptp_s *aq_ptp, struct skb_shared_hwtstamps *shhwtstamps,
563                                u64 timestamp)
564 {
565         timestamp -= atomic_read(&aq_ptp->offset_ingress);
566         aq_ptp_convert_to_hwtstamp(aq_ptp, shhwtstamps, timestamp);
567 }
568
569 void aq_ptp_hwtstamp_config_get(struct aq_ptp_s *aq_ptp,
570                                 struct hwtstamp_config *config)
571 {
572         *config = aq_ptp->hwtstamp_config;
573 }
574
575 static void aq_ptp_prepare_filters(struct aq_ptp_s *aq_ptp)
576 {
577         aq_ptp->udp_filter.cmd = HW_ATL_RX_ENABLE_FLTR_L3L4 |
578                                HW_ATL_RX_ENABLE_CMP_PROT_L4 |
579                                HW_ATL_RX_UDP |
580                                HW_ATL_RX_ENABLE_CMP_DEST_PORT_L4 |
581                                HW_ATL_RX_HOST << HW_ATL_RX_ACTION_FL3F4_SHIFT |
582                                HW_ATL_RX_ENABLE_QUEUE_L3L4 |
583                                aq_ptp->ptp_rx.idx << HW_ATL_RX_QUEUE_FL3L4_SHIFT;
584         aq_ptp->udp_filter.p_dst = PTP_EV_PORT;
585
586         aq_ptp->eth_type_filter.ethertype = ETH_P_1588;
587         aq_ptp->eth_type_filter.queue = aq_ptp->ptp_rx.idx;
588 }
589
590 int aq_ptp_hwtstamp_config_set(struct aq_ptp_s *aq_ptp,
591                                struct hwtstamp_config *config)
592 {
593         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
594         const struct aq_hw_ops *hw_ops;
595         int err = 0;
596
597         hw_ops = aq_nic->aq_hw_ops;
598         if (config->tx_type == HWTSTAMP_TX_ON ||
599             config->rx_filter == HWTSTAMP_FILTER_PTP_V2_EVENT) {
600                 aq_ptp_prepare_filters(aq_ptp);
601                 if (hw_ops->hw_filter_l3l4_set) {
602                         err = hw_ops->hw_filter_l3l4_set(aq_nic->aq_hw,
603                                                          &aq_ptp->udp_filter);
604                 }
605                 if (!err && hw_ops->hw_filter_l2_set) {
606                         err = hw_ops->hw_filter_l2_set(aq_nic->aq_hw,
607                                                        &aq_ptp->eth_type_filter);
608                 }
609                 aq_utils_obj_set(&aq_nic->flags, AQ_NIC_PTP_DPATH_UP);
610         } else {
611                 aq_ptp->udp_filter.cmd &= ~HW_ATL_RX_ENABLE_FLTR_L3L4;
612                 if (hw_ops->hw_filter_l3l4_set) {
613                         err = hw_ops->hw_filter_l3l4_set(aq_nic->aq_hw,
614                                                          &aq_ptp->udp_filter);
615                 }
616                 if (!err && hw_ops->hw_filter_l2_clear) {
617                         err = hw_ops->hw_filter_l2_clear(aq_nic->aq_hw,
618                                                         &aq_ptp->eth_type_filter);
619                 }
620                 aq_utils_obj_clear(&aq_nic->flags, AQ_NIC_PTP_DPATH_UP);
621         }
622
623         if (err)
624                 return -EREMOTEIO;
625
626         aq_ptp->hwtstamp_config = *config;
627
628         return 0;
629 }
630
631 bool aq_ptp_ring(struct aq_nic_s *aq_nic, struct aq_ring_s *ring)
632 {
633         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
634
635         if (!aq_ptp)
636                 return false;
637
638         return &aq_ptp->ptp_tx == ring ||
639                &aq_ptp->ptp_rx == ring || &aq_ptp->hwts_rx == ring;
640 }
641
642 u16 aq_ptp_extract_ts(struct aq_nic_s *aq_nic, struct skb_shared_hwtstamps *shhwtstamps, u8 *p,
643                       unsigned int len)
644 {
645         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
646         u64 timestamp = 0;
647         u16 ret = aq_nic->aq_hw_ops->rx_extract_ts(aq_nic->aq_hw,
648                                                    p, len, &timestamp);
649
650         if (ret > 0)
651                 aq_ptp_rx_hwtstamp(aq_ptp, shhwtstamps, timestamp);
652
653         return ret;
654 }
655
656 static int aq_ptp_poll(struct napi_struct *napi, int budget)
657 {
658         struct aq_ptp_s *aq_ptp = container_of(napi, struct aq_ptp_s, napi);
659         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
660         bool was_cleaned = false;
661         int work_done = 0;
662         int err;
663
664         /* Processing PTP TX traffic */
665         err = aq_nic->aq_hw_ops->hw_ring_tx_head_update(aq_nic->aq_hw,
666                                                         &aq_ptp->ptp_tx);
667         if (err < 0)
668                 goto err_exit;
669
670         if (aq_ptp->ptp_tx.sw_head != aq_ptp->ptp_tx.hw_head) {
671                 aq_ring_tx_clean(&aq_ptp->ptp_tx);
672
673                 was_cleaned = true;
674         }
675
676         /* Processing HW_TIMESTAMP RX traffic */
677         err = aq_nic->aq_hw_ops->hw_ring_hwts_rx_receive(aq_nic->aq_hw,
678                                                          &aq_ptp->hwts_rx);
679         if (err < 0)
680                 goto err_exit;
681
682         if (aq_ptp->hwts_rx.sw_head != aq_ptp->hwts_rx.hw_head) {
683                 aq_ring_hwts_rx_clean(&aq_ptp->hwts_rx, aq_nic);
684
685                 err = aq_nic->aq_hw_ops->hw_ring_hwts_rx_fill(aq_nic->aq_hw,
686                                                               &aq_ptp->hwts_rx);
687                 if (err < 0)
688                         goto err_exit;
689
690                 was_cleaned = true;
691         }
692
693         /* Processing PTP RX traffic */
694         err = aq_nic->aq_hw_ops->hw_ring_rx_receive(aq_nic->aq_hw,
695                                                     &aq_ptp->ptp_rx);
696         if (err < 0)
697                 goto err_exit;
698
699         if (aq_ptp->ptp_rx.sw_head != aq_ptp->ptp_rx.hw_head) {
700                 unsigned int sw_tail_old;
701
702                 err = aq_ring_rx_clean(&aq_ptp->ptp_rx, napi, &work_done, budget);
703                 if (err < 0)
704                         goto err_exit;
705
706                 sw_tail_old = aq_ptp->ptp_rx.sw_tail;
707                 err = aq_ring_rx_fill(&aq_ptp->ptp_rx);
708                 if (err < 0)
709                         goto err_exit;
710
711                 err = aq_nic->aq_hw_ops->hw_ring_rx_fill(aq_nic->aq_hw,
712                                                          &aq_ptp->ptp_rx,
713                                                          sw_tail_old);
714                 if (err < 0)
715                         goto err_exit;
716         }
717
718         if (was_cleaned)
719                 work_done = budget;
720
721         if (work_done < budget) {
722                 napi_complete_done(napi, work_done);
723                 aq_nic->aq_hw_ops->hw_irq_enable(aq_nic->aq_hw,
724                                         BIT_ULL(aq_ptp->ptp_ring_param.vec_idx));
725         }
726
727 err_exit:
728         return work_done;
729 }
730
731 static irqreturn_t aq_ptp_isr(int irq, void *private)
732 {
733         struct aq_ptp_s *aq_ptp = private;
734         int err = 0;
735
736         if (!aq_ptp) {
737                 err = -EINVAL;
738                 goto err_exit;
739         }
740         napi_schedule(&aq_ptp->napi);
741
742 err_exit:
743         return err >= 0 ? IRQ_HANDLED : IRQ_NONE;
744 }
745
746 int aq_ptp_xmit(struct aq_nic_s *aq_nic, struct sk_buff *skb)
747 {
748         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
749         struct aq_ring_s *ring = &aq_ptp->ptp_tx;
750         unsigned long irq_flags;
751         int err = NETDEV_TX_OK;
752         unsigned int frags;
753
754         if (skb->len <= 0) {
755                 dev_kfree_skb_any(skb);
756                 goto err_exit;
757         }
758
759         frags = skb_shinfo(skb)->nr_frags + 1;
760         /* Frags cannot be bigger 16KB
761          * because PTP usually works
762          * without Jumbo even in a background
763          */
764         if (frags > AQ_CFG_SKB_FRAGS_MAX || frags > aq_ring_avail_dx(ring)) {
765                 /* Drop packet because it doesn't make sence to delay it */
766                 dev_kfree_skb_any(skb);
767                 goto err_exit;
768         }
769
770         err = aq_ptp_skb_put(&aq_ptp->skb_ring, skb);
771         if (err) {
772                 netdev_err(aq_nic->ndev, "SKB Ring is overflow (%u)!\n",
773                            ring->size);
774                 return NETDEV_TX_BUSY;
775         }
776         skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
777         aq_ptp_tx_timeout_start(aq_ptp);
778         skb_tx_timestamp(skb);
779
780         spin_lock_irqsave(&aq_nic->aq_ptp->ptp_ring_lock, irq_flags);
781         frags = aq_nic_map_skb(aq_nic, skb, ring);
782
783         if (likely(frags)) {
784                 err = aq_nic->aq_hw_ops->hw_ring_tx_xmit(aq_nic->aq_hw,
785                                                        ring, frags);
786                 if (err >= 0) {
787                         u64_stats_update_begin(&ring->stats.tx.syncp);
788                         ++ring->stats.tx.packets;
789                         ring->stats.tx.bytes += skb->len;
790                         u64_stats_update_end(&ring->stats.tx.syncp);
791                 }
792         } else {
793                 err = NETDEV_TX_BUSY;
794         }
795         spin_unlock_irqrestore(&aq_nic->aq_ptp->ptp_ring_lock, irq_flags);
796
797 err_exit:
798         return err;
799 }
800
801 void aq_ptp_service_task(struct aq_nic_s *aq_nic)
802 {
803         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
804
805         if (!aq_ptp)
806                 return;
807
808         aq_ptp_tx_timeout_check(aq_ptp);
809 }
810
811 int aq_ptp_irq_alloc(struct aq_nic_s *aq_nic)
812 {
813         struct pci_dev *pdev = aq_nic->pdev;
814         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
815         int err = 0;
816
817         if (!aq_ptp)
818                 return 0;
819
820         if (pdev->msix_enabled || pdev->msi_enabled) {
821                 err = request_irq(pci_irq_vector(pdev, aq_ptp->idx_vector),
822                                   aq_ptp_isr, 0, aq_nic->ndev->name, aq_ptp);
823         } else {
824                 err = -EINVAL;
825                 goto err_exit;
826         }
827
828 err_exit:
829         return err;
830 }
831
832 void aq_ptp_irq_free(struct aq_nic_s *aq_nic)
833 {
834         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
835         struct pci_dev *pdev = aq_nic->pdev;
836
837         if (!aq_ptp)
838                 return;
839
840         free_irq(pci_irq_vector(pdev, aq_ptp->idx_vector), aq_ptp);
841 }
842
843 int aq_ptp_ring_init(struct aq_nic_s *aq_nic)
844 {
845         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
846         int err = 0;
847
848         if (!aq_ptp)
849                 return 0;
850
851         err = aq_ring_init(&aq_ptp->ptp_tx, ATL_RING_TX);
852         if (err < 0)
853                 goto err_exit;
854         err = aq_nic->aq_hw_ops->hw_ring_tx_init(aq_nic->aq_hw,
855                                                  &aq_ptp->ptp_tx,
856                                                  &aq_ptp->ptp_ring_param);
857         if (err < 0)
858                 goto err_exit;
859
860         err = aq_ring_init(&aq_ptp->ptp_rx, ATL_RING_RX);
861         if (err < 0)
862                 goto err_exit;
863         err = aq_nic->aq_hw_ops->hw_ring_rx_init(aq_nic->aq_hw,
864                                                  &aq_ptp->ptp_rx,
865                                                  &aq_ptp->ptp_ring_param);
866         if (err < 0)
867                 goto err_exit;
868
869         err = aq_ring_rx_fill(&aq_ptp->ptp_rx);
870         if (err < 0)
871                 goto err_rx_free;
872         err = aq_nic->aq_hw_ops->hw_ring_rx_fill(aq_nic->aq_hw,
873                                                  &aq_ptp->ptp_rx,
874                                                  0U);
875         if (err < 0)
876                 goto err_rx_free;
877
878         err = aq_ring_init(&aq_ptp->hwts_rx, ATL_RING_RX);
879         if (err < 0)
880                 goto err_rx_free;
881         err = aq_nic->aq_hw_ops->hw_ring_rx_init(aq_nic->aq_hw,
882                                                  &aq_ptp->hwts_rx,
883                                                  &aq_ptp->ptp_ring_param);
884         if (err < 0)
885                 goto err_exit;
886         err = aq_nic->aq_hw_ops->hw_ring_hwts_rx_fill(aq_nic->aq_hw,
887                                                       &aq_ptp->hwts_rx);
888         if (err < 0)
889                 goto err_exit;
890
891         return err;
892
893 err_rx_free:
894         aq_ring_rx_deinit(&aq_ptp->ptp_rx);
895 err_exit:
896         return err;
897 }
898
899 int aq_ptp_ring_start(struct aq_nic_s *aq_nic)
900 {
901         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
902         int err = 0;
903
904         if (!aq_ptp)
905                 return 0;
906
907         err = aq_nic->aq_hw_ops->hw_ring_tx_start(aq_nic->aq_hw, &aq_ptp->ptp_tx);
908         if (err < 0)
909                 goto err_exit;
910
911         err = aq_nic->aq_hw_ops->hw_ring_rx_start(aq_nic->aq_hw, &aq_ptp->ptp_rx);
912         if (err < 0)
913                 goto err_exit;
914
915         err = aq_nic->aq_hw_ops->hw_ring_rx_start(aq_nic->aq_hw,
916                                                   &aq_ptp->hwts_rx);
917         if (err < 0)
918                 goto err_exit;
919
920         napi_enable(&aq_ptp->napi);
921
922 err_exit:
923         return err;
924 }
925
926 void aq_ptp_ring_stop(struct aq_nic_s *aq_nic)
927 {
928         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
929
930         if (!aq_ptp)
931                 return;
932
933         aq_nic->aq_hw_ops->hw_ring_tx_stop(aq_nic->aq_hw, &aq_ptp->ptp_tx);
934         aq_nic->aq_hw_ops->hw_ring_rx_stop(aq_nic->aq_hw, &aq_ptp->ptp_rx);
935
936         aq_nic->aq_hw_ops->hw_ring_rx_stop(aq_nic->aq_hw, &aq_ptp->hwts_rx);
937
938         napi_disable(&aq_ptp->napi);
939 }
940
941 void aq_ptp_ring_deinit(struct aq_nic_s *aq_nic)
942 {
943         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
944
945         if (!aq_ptp || !aq_ptp->ptp_tx.aq_nic || !aq_ptp->ptp_rx.aq_nic)
946                 return;
947
948         aq_ring_tx_clean(&aq_ptp->ptp_tx);
949         aq_ring_rx_deinit(&aq_ptp->ptp_rx);
950 }
951
952 int aq_ptp_ring_alloc(struct aq_nic_s *aq_nic)
953 {
954         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
955         unsigned int tx_ring_idx, rx_ring_idx;
956         int err;
957
958         if (!aq_ptp)
959                 return 0;
960
961         tx_ring_idx = aq_ptp_ring_idx(aq_nic->aq_nic_cfg.tc_mode);
962
963         err = aq_ring_tx_alloc(&aq_ptp->ptp_tx, aq_nic,
964                                tx_ring_idx, &aq_nic->aq_nic_cfg);
965         if (err)
966                 goto err_exit;
967
968         rx_ring_idx = aq_ptp_ring_idx(aq_nic->aq_nic_cfg.tc_mode);
969
970         err = aq_ring_rx_alloc(&aq_ptp->ptp_rx, aq_nic,
971                                rx_ring_idx, &aq_nic->aq_nic_cfg);
972         if (err)
973                 goto err_exit_ptp_tx;
974
975         err = aq_ring_hwts_rx_alloc(&aq_ptp->hwts_rx, aq_nic, PTP_HWST_RING_IDX,
976                                     aq_nic->aq_nic_cfg.rxds,
977                                     aq_nic->aq_nic_cfg.aq_hw_caps->rxd_size);
978         if (err)
979                 goto err_exit_ptp_rx;
980
981         err = aq_ptp_skb_ring_init(&aq_ptp->skb_ring, aq_nic->aq_nic_cfg.rxds);
982         if (err != 0) {
983                 err = -ENOMEM;
984                 goto err_exit_hwts_rx;
985         }
986
987         aq_ptp->ptp_ring_param.vec_idx = aq_ptp->idx_vector;
988         aq_ptp->ptp_ring_param.cpu = aq_ptp->ptp_ring_param.vec_idx +
989                         aq_nic_get_cfg(aq_nic)->aq_rss.base_cpu_number;
990         cpumask_set_cpu(aq_ptp->ptp_ring_param.cpu,
991                         &aq_ptp->ptp_ring_param.affinity_mask);
992
993         return 0;
994
995 err_exit_hwts_rx:
996         aq_ring_hwts_rx_free(&aq_ptp->hwts_rx);
997 err_exit_ptp_rx:
998         aq_ring_free(&aq_ptp->ptp_rx);
999 err_exit_ptp_tx:
1000         aq_ring_free(&aq_ptp->ptp_tx);
1001 err_exit:
1002         return err;
1003 }
1004
1005 void aq_ptp_ring_free(struct aq_nic_s *aq_nic)
1006 {
1007         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
1008
1009         if (!aq_ptp)
1010                 return;
1011
1012         aq_ring_free(&aq_ptp->ptp_tx);
1013         aq_ring_free(&aq_ptp->ptp_rx);
1014         aq_ring_hwts_rx_free(&aq_ptp->hwts_rx);
1015
1016         aq_ptp_skb_ring_release(&aq_ptp->skb_ring);
1017 }
1018
1019 #define MAX_PTP_GPIO_COUNT 4
1020
1021 static struct ptp_clock_info aq_ptp_clock = {
1022         .owner          = THIS_MODULE,
1023         .name           = "atlantic ptp",
1024         .max_adj        = 999999999,
1025         .n_ext_ts       = 0,
1026         .pps            = 0,
1027         .adjfine        = aq_ptp_adjfine,
1028         .adjtime        = aq_ptp_adjtime,
1029         .gettime64      = aq_ptp_gettime,
1030         .settime64      = aq_ptp_settime,
1031         .n_per_out      = 0,
1032         .enable         = aq_ptp_gpio_feature_enable,
1033         .n_pins         = 0,
1034         .verify         = aq_ptp_verify,
1035         .pin_config     = NULL,
1036 };
1037
1038 #define ptp_offset_init(__idx, __mbps, __egress, __ingress)   do { \
1039                 ptp_offset[__idx].mbps = (__mbps); \
1040                 ptp_offset[__idx].egress = (__egress); \
1041                 ptp_offset[__idx].ingress = (__ingress); } \
1042                 while (0)
1043
1044 static void aq_ptp_offset_init_from_fw(const struct hw_atl_ptp_offset *offsets)
1045 {
1046         int i;
1047
1048         /* Load offsets for PTP */
1049         for (i = 0; i < ARRAY_SIZE(ptp_offset); i++) {
1050                 switch (i) {
1051                 /* 100M */
1052                 case ptp_offset_idx_100:
1053                         ptp_offset_init(i, 100,
1054                                         offsets->egress_100,
1055                                         offsets->ingress_100);
1056                         break;
1057                 /* 1G */
1058                 case ptp_offset_idx_1000:
1059                         ptp_offset_init(i, 1000,
1060                                         offsets->egress_1000,
1061                                         offsets->ingress_1000);
1062                         break;
1063                 /* 2.5G */
1064                 case ptp_offset_idx_2500:
1065                         ptp_offset_init(i, 2500,
1066                                         offsets->egress_2500,
1067                                         offsets->ingress_2500);
1068                         break;
1069                 /* 5G */
1070                 case ptp_offset_idx_5000:
1071                         ptp_offset_init(i, 5000,
1072                                         offsets->egress_5000,
1073                                         offsets->ingress_5000);
1074                         break;
1075                 /* 10G */
1076                 case ptp_offset_idx_10000:
1077                         ptp_offset_init(i, 10000,
1078                                         offsets->egress_10000,
1079                                         offsets->ingress_10000);
1080                         break;
1081                 }
1082         }
1083 }
1084
1085 static void aq_ptp_offset_init(const struct hw_atl_ptp_offset *offsets)
1086 {
1087         memset(ptp_offset, 0, sizeof(ptp_offset));
1088
1089         aq_ptp_offset_init_from_fw(offsets);
1090 }
1091
1092 static void aq_ptp_gpio_init(struct ptp_clock_info *info,
1093                              struct hw_atl_info *hw_info)
1094 {
1095         struct ptp_pin_desc pin_desc[MAX_PTP_GPIO_COUNT];
1096         u32 extts_pin_cnt = 0;
1097         u32 out_pin_cnt = 0;
1098         u32 i;
1099
1100         memset(pin_desc, 0, sizeof(pin_desc));
1101
1102         for (i = 0; i < MAX_PTP_GPIO_COUNT - 1; i++) {
1103                 if (hw_info->gpio_pin[i] ==
1104                     (GPIO_PIN_FUNCTION_PTP0 + out_pin_cnt)) {
1105                         snprintf(pin_desc[out_pin_cnt].name,
1106                                  sizeof(pin_desc[out_pin_cnt].name),
1107                                  "AQ_GPIO%d", i);
1108                         pin_desc[out_pin_cnt].index = out_pin_cnt;
1109                         pin_desc[out_pin_cnt].chan = out_pin_cnt;
1110                         pin_desc[out_pin_cnt++].func = PTP_PF_PEROUT;
1111                 }
1112         }
1113
1114         info->n_per_out = out_pin_cnt;
1115
1116         if (hw_info->caps_ex & BIT(CAPS_EX_PHY_CTRL_TS_PIN)) {
1117                 extts_pin_cnt += 1;
1118
1119                 snprintf(pin_desc[out_pin_cnt].name,
1120                          sizeof(pin_desc[out_pin_cnt].name),
1121                           "AQ_GPIO%d", out_pin_cnt);
1122                 pin_desc[out_pin_cnt].index = out_pin_cnt;
1123                 pin_desc[out_pin_cnt].chan = 0;
1124                 pin_desc[out_pin_cnt].func = PTP_PF_EXTTS;
1125         }
1126
1127         info->n_pins = out_pin_cnt + extts_pin_cnt;
1128         info->n_ext_ts = extts_pin_cnt;
1129
1130         if (!info->n_pins)
1131                 return;
1132
1133         info->pin_config = kcalloc(info->n_pins, sizeof(struct ptp_pin_desc),
1134                                    GFP_KERNEL);
1135
1136         if (!info->pin_config)
1137                 return;
1138
1139         memcpy(info->pin_config, &pin_desc,
1140                sizeof(struct ptp_pin_desc) * info->n_pins);
1141 }
1142
1143 void aq_ptp_clock_init(struct aq_nic_s *aq_nic)
1144 {
1145         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
1146         struct timespec64 ts;
1147
1148         ktime_get_real_ts64(&ts);
1149         aq_ptp_settime(&aq_ptp->ptp_info, &ts);
1150 }
1151
1152 static void aq_ptp_poll_sync_work_cb(struct work_struct *w);
1153
1154 int aq_ptp_init(struct aq_nic_s *aq_nic, unsigned int idx_vec)
1155 {
1156         bool a1_ptp = ATL_HW_IS_CHIP_FEATURE(aq_nic->aq_hw, ATLANTIC);
1157         struct hw_atl_utils_mbox mbox;
1158         struct ptp_clock *clock;
1159         struct aq_ptp_s *aq_ptp;
1160         int err = 0;
1161
1162         if (!a1_ptp) {
1163                 aq_nic->aq_ptp = NULL;
1164                 return 0;
1165         }
1166
1167         if (!aq_nic->aq_hw_ops->hw_get_ptp_ts) {
1168                 aq_nic->aq_ptp = NULL;
1169                 return 0;
1170         }
1171
1172         if (!aq_nic->aq_fw_ops->enable_ptp) {
1173                 aq_nic->aq_ptp = NULL;
1174                 return 0;
1175         }
1176
1177         hw_atl_utils_mpi_read_stats(aq_nic->aq_hw, &mbox);
1178
1179         if (!(mbox.info.caps_ex & BIT(CAPS_EX_PHY_PTP_EN))) {
1180                 aq_nic->aq_ptp = NULL;
1181                 return 0;
1182         }
1183
1184         aq_ptp_offset_init(&mbox.info.ptp_offset);
1185
1186         aq_ptp = kzalloc(sizeof(*aq_ptp), GFP_KERNEL);
1187         if (!aq_ptp) {
1188                 err = -ENOMEM;
1189                 goto err_exit;
1190         }
1191
1192         aq_ptp->aq_nic = aq_nic;
1193         aq_ptp->a1_ptp = a1_ptp;
1194
1195         spin_lock_init(&aq_ptp->ptp_lock);
1196         spin_lock_init(&aq_ptp->ptp_ring_lock);
1197
1198         aq_ptp->ptp_info = aq_ptp_clock;
1199         aq_ptp_gpio_init(&aq_ptp->ptp_info, &mbox.info);
1200         clock = ptp_clock_register(&aq_ptp->ptp_info, &aq_nic->ndev->dev);
1201         if (IS_ERR(clock)) {
1202                 netdev_err(aq_nic->ndev, "ptp_clock_register failed\n");
1203                 err = PTR_ERR(clock);
1204                 goto err_exit;
1205         }
1206         aq_ptp->ptp_clock = clock;
1207         aq_ptp_tx_timeout_init(&aq_ptp->ptp_tx_timeout);
1208
1209         atomic_set(&aq_ptp->offset_egress, 0);
1210         atomic_set(&aq_ptp->offset_ingress, 0);
1211
1212         netif_napi_add(aq_nic_get_ndev(aq_nic), &aq_ptp->napi, aq_ptp_poll);
1213
1214         aq_ptp->idx_vector = idx_vec;
1215
1216         aq_nic->aq_ptp = aq_ptp;
1217
1218         /* enable ptp counter */
1219         aq_utils_obj_set(&aq_nic->aq_hw->flags, AQ_HW_PTP_AVAILABLE);
1220         mutex_lock(&aq_nic->fwreq_mutex);
1221         aq_nic->aq_fw_ops->enable_ptp(aq_nic->aq_hw, 1);
1222         aq_ptp_clock_init(aq_nic);
1223         mutex_unlock(&aq_nic->fwreq_mutex);
1224
1225         INIT_DELAYED_WORK(&aq_ptp->poll_sync, &aq_ptp_poll_sync_work_cb);
1226         aq_ptp->eth_type_filter.location =
1227                         aq_nic_reserve_filter(aq_nic, aq_rx_filter_ethertype);
1228         aq_ptp->udp_filter.location =
1229                         aq_nic_reserve_filter(aq_nic, aq_rx_filter_l3l4);
1230
1231         return 0;
1232
1233 err_exit:
1234         if (aq_ptp)
1235                 kfree(aq_ptp->ptp_info.pin_config);
1236         kfree(aq_ptp);
1237         aq_nic->aq_ptp = NULL;
1238         return err;
1239 }
1240
1241 void aq_ptp_unregister(struct aq_nic_s *aq_nic)
1242 {
1243         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
1244
1245         if (!aq_ptp)
1246                 return;
1247
1248         ptp_clock_unregister(aq_ptp->ptp_clock);
1249 }
1250
1251 void aq_ptp_free(struct aq_nic_s *aq_nic)
1252 {
1253         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
1254
1255         if (!aq_ptp)
1256                 return;
1257
1258         aq_nic_release_filter(aq_nic, aq_rx_filter_ethertype,
1259                               aq_ptp->eth_type_filter.location);
1260         aq_nic_release_filter(aq_nic, aq_rx_filter_l3l4,
1261                               aq_ptp->udp_filter.location);
1262         cancel_delayed_work_sync(&aq_ptp->poll_sync);
1263         /* disable ptp */
1264         mutex_lock(&aq_nic->fwreq_mutex);
1265         aq_nic->aq_fw_ops->enable_ptp(aq_nic->aq_hw, 0);
1266         mutex_unlock(&aq_nic->fwreq_mutex);
1267
1268         kfree(aq_ptp->ptp_info.pin_config);
1269
1270         netif_napi_del(&aq_ptp->napi);
1271         kfree(aq_ptp);
1272         aq_nic->aq_ptp = NULL;
1273 }
1274
1275 struct ptp_clock *aq_ptp_get_ptp_clock(struct aq_ptp_s *aq_ptp)
1276 {
1277         return aq_ptp->ptp_clock;
1278 }
1279
1280 /* PTP external GPIO nanoseconds count */
1281 static uint64_t aq_ptp_get_sync1588_ts(struct aq_nic_s *aq_nic)
1282 {
1283         u64 ts = 0;
1284
1285         if (aq_nic->aq_hw_ops->hw_get_sync_ts)
1286                 aq_nic->aq_hw_ops->hw_get_sync_ts(aq_nic->aq_hw, &ts);
1287
1288         return ts;
1289 }
1290
1291 static void aq_ptp_start_work(struct aq_ptp_s *aq_ptp)
1292 {
1293         if (aq_ptp->extts_pin_enabled) {
1294                 aq_ptp->poll_timeout_ms = POLL_SYNC_TIMER_MS;
1295                 aq_ptp->last_sync1588_ts =
1296                                 aq_ptp_get_sync1588_ts(aq_ptp->aq_nic);
1297                 schedule_delayed_work(&aq_ptp->poll_sync,
1298                                       msecs_to_jiffies(aq_ptp->poll_timeout_ms));
1299         }
1300 }
1301
1302 int aq_ptp_link_change(struct aq_nic_s *aq_nic)
1303 {
1304         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
1305
1306         if (!aq_ptp)
1307                 return 0;
1308
1309         if (aq_nic->aq_hw->aq_link_status.mbps)
1310                 aq_ptp_start_work(aq_ptp);
1311         else
1312                 cancel_delayed_work_sync(&aq_ptp->poll_sync);
1313
1314         return 0;
1315 }
1316
1317 static bool aq_ptp_sync_ts_updated(struct aq_ptp_s *aq_ptp, u64 *new_ts)
1318 {
1319         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
1320         u64 sync_ts2;
1321         u64 sync_ts;
1322
1323         sync_ts = aq_ptp_get_sync1588_ts(aq_nic);
1324
1325         if (sync_ts != aq_ptp->last_sync1588_ts) {
1326                 sync_ts2 = aq_ptp_get_sync1588_ts(aq_nic);
1327                 if (sync_ts != sync_ts2) {
1328                         sync_ts = sync_ts2;
1329                         sync_ts2 = aq_ptp_get_sync1588_ts(aq_nic);
1330                         if (sync_ts != sync_ts2) {
1331                                 netdev_err(aq_nic->ndev,
1332                                            "%s: Unable to get correct GPIO TS",
1333                                            __func__);
1334                                 sync_ts = 0;
1335                         }
1336                 }
1337
1338                 *new_ts = sync_ts;
1339                 return true;
1340         }
1341         return false;
1342 }
1343
1344 static int aq_ptp_check_sync1588(struct aq_ptp_s *aq_ptp)
1345 {
1346         struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
1347         u64 sync_ts;
1348
1349          /* Sync1588 pin was triggered */
1350         if (aq_ptp_sync_ts_updated(aq_ptp, &sync_ts)) {
1351                 if (aq_ptp->extts_pin_enabled) {
1352                         struct ptp_clock_event ptp_event;
1353                         u64 time = 0;
1354
1355                         aq_nic->aq_hw_ops->hw_ts_to_sys_clock(aq_nic->aq_hw,
1356                                                               sync_ts, &time);
1357                         ptp_event.index = aq_ptp->ptp_info.n_pins - 1;
1358                         ptp_event.timestamp = time;
1359
1360                         ptp_event.type = PTP_CLOCK_EXTTS;
1361                         ptp_clock_event(aq_ptp->ptp_clock, &ptp_event);
1362                 }
1363
1364                 aq_ptp->last_sync1588_ts = sync_ts;
1365         }
1366
1367         return 0;
1368 }
1369
1370 static void aq_ptp_poll_sync_work_cb(struct work_struct *w)
1371 {
1372         struct delayed_work *dw = to_delayed_work(w);
1373         struct aq_ptp_s *aq_ptp = container_of(dw, struct aq_ptp_s, poll_sync);
1374
1375         aq_ptp_check_sync1588(aq_ptp);
1376
1377         if (aq_ptp->extts_pin_enabled) {
1378                 unsigned long timeout = msecs_to_jiffies(aq_ptp->poll_timeout_ms);
1379
1380                 schedule_delayed_work(&aq_ptp->poll_sync, timeout);
1381         }
1382 }
1383
1384 int aq_ptp_get_ring_cnt(struct aq_nic_s *aq_nic, const enum atl_ring_type ring_type)
1385 {
1386         if (!aq_nic->aq_ptp)
1387                 return 0;
1388
1389         /* Additional RX ring is allocated for PTP HWTS on A1 */
1390         return (aq_nic->aq_ptp->a1_ptp && ring_type == ATL_RING_RX) ? 2 : 1;
1391 }
1392
1393 u64 *aq_ptp_get_stats(struct aq_nic_s *aq_nic, u64 *data)
1394 {
1395         struct aq_ptp_s *aq_ptp = aq_nic->aq_ptp;
1396         unsigned int count = 0U;
1397
1398         if (!aq_ptp)
1399                 return data;
1400
1401         count = aq_ring_fill_stats_data(&aq_ptp->ptp_rx, data);
1402         data += count;
1403         count = aq_ring_fill_stats_data(&aq_ptp->ptp_tx, data);
1404         data += count;
1405
1406         if (aq_ptp->a1_ptp) {
1407                 /* Only Receive ring for HWTS */
1408                 count = aq_ring_fill_stats_data(&aq_ptp->hwts_rx, data);
1409                 data += count;
1410         }
1411
1412         return data;
1413 }
1414
1415 #endif