Lines Matching refs:lan966x
40 struct lan966x *lan966x = port->lan966x; in lan966x_ptp_hwtstamp_set() local
48 if (lan966x->bridge_mask & BIT(port->chip_port)) in lan966x_ptp_hwtstamp_set()
92 mutex_lock(&lan966x->ptp_lock); in lan966x_ptp_hwtstamp_set()
93 phc = &lan966x->phc[LAN966X_PHC_PORT]; in lan966x_ptp_hwtstamp_set()
95 mutex_unlock(&lan966x->ptp_lock); in lan966x_ptp_hwtstamp_set()
102 struct lan966x *lan966x = port->lan966x; in lan966x_ptp_hwtstamp_get() local
105 phc = &lan966x->phc[LAN966X_PHC_PORT]; in lan966x_ptp_hwtstamp_get()
160 struct lan966x *lan966x = port->lan966x; in lan966x_ptp_txtstamp_request() local
172 spin_lock_irqsave(&lan966x->ptp_ts_id_lock, flags); in lan966x_ptp_txtstamp_request()
173 if (lan966x->ptp_skbs == LAN966X_MAX_PTP_ID) { in lan966x_ptp_txtstamp_request()
174 spin_unlock_irqrestore(&lan966x->ptp_ts_id_lock, flags); in lan966x_ptp_txtstamp_request()
184 lan966x->ptp_skbs++; in lan966x_ptp_txtstamp_request()
189 spin_unlock_irqrestore(&lan966x->ptp_ts_id_lock, flags); in lan966x_ptp_txtstamp_request()
197 struct lan966x *lan966x = port->lan966x; in lan966x_ptp_txtstamp_release() local
200 spin_lock_irqsave(&lan966x->ptp_ts_id_lock, flags); in lan966x_ptp_txtstamp_release()
202 lan966x->ptp_skbs--; in lan966x_ptp_txtstamp_release()
204 spin_unlock_irqrestore(&lan966x->ptp_ts_id_lock, flags); in lan966x_ptp_txtstamp_release()
207 static void lan966x_get_hwtimestamp(struct lan966x *lan966x, in lan966x_get_hwtimestamp() argument
215 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_get_hwtimestamp()
223 lan966x, PTP_PIN_CFG(TOD_ACC_PIN)); in lan966x_get_hwtimestamp()
225 ts->tv_sec = lan_rd(lan966x, PTP_TOD_SEC_LSB(TOD_ACC_PIN)); in lan966x_get_hwtimestamp()
226 curr_nsec = lan_rd(lan966x, PTP_TOD_NSEC(TOD_ACC_PIN)); in lan966x_get_hwtimestamp()
234 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_get_hwtimestamp()
240 struct lan966x *lan966x = args; in lan966x_ptp_irq_handler() local
251 val = lan_rd(lan966x, PTP_TWOSTEP_CTRL); in lan966x_ptp_irq_handler()
266 port = lan966x->ports[txport]; in lan966x_ptp_irq_handler()
269 delay = lan_rd(lan966x, PTP_TWOSTEP_STAMP); in lan966x_ptp_irq_handler()
277 lan966x, PTP_TWOSTEP_CTRL); in lan966x_ptp_irq_handler()
279 val = lan_rd(lan966x, PTP_TWOSTEP_CTRL); in lan966x_ptp_irq_handler()
286 id = lan_rd(lan966x, PTP_TWOSTEP_STAMP); in lan966x_ptp_irq_handler()
302 lan966x, PTP_TWOSTEP_CTRL); in lan966x_ptp_irq_handler()
307 spin_lock(&lan966x->ptp_ts_id_lock); in lan966x_ptp_irq_handler()
308 lan966x->ptp_skbs--; in lan966x_ptp_irq_handler()
309 spin_unlock(&lan966x->ptp_ts_id_lock); in lan966x_ptp_irq_handler()
312 lan966x_get_hwtimestamp(lan966x, &ts, delay); in lan966x_ptp_irq_handler()
326 struct lan966x *lan966x = args; in lan966x_ptp_ext_irq_handler() local
334 if (!(lan_rd(lan966x, PTP_PIN_INTR))) in lan966x_ptp_ext_irq_handler()
341 phc = &lan966x->phc[i]; in lan966x_ptp_ext_irq_handler()
346 if (!(lan_rd(lan966x, PTP_PIN_INTR) & BIT(pin))) in lan966x_ptp_ext_irq_handler()
349 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_ext_irq_handler()
354 lan_wr(BIT(pin), lan966x, PTP_PIN_INTR); in lan966x_ptp_ext_irq_handler()
357 s = lan_rd(lan966x, PTP_TOD_SEC_MSB(pin)); in lan966x_ptp_ext_irq_handler()
359 s |= lan_rd(lan966x, PTP_TOD_SEC_LSB(pin)); in lan966x_ptp_ext_irq_handler()
360 ns = lan_rd(lan966x, PTP_TOD_NSEC(pin)); in lan966x_ptp_ext_irq_handler()
363 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_ext_irq_handler()
384 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_adjfine() local
408 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_adjfine()
412 lan966x, PTP_DOM_CFG); in lan966x_ptp_adjfine()
414 lan_wr((u32)tod_inc & 0xFFFFFFFF, lan966x, in lan966x_ptp_adjfine()
416 lan_wr((u32)(tod_inc >> 32), lan966x, in lan966x_ptp_adjfine()
421 lan966x, PTP_DOM_CFG); in lan966x_ptp_adjfine()
423 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_adjfine()
432 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_settime64() local
435 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_settime64()
444 lan966x, PTP_PIN_CFG(TOD_ACC_PIN)); in lan966x_ptp_settime64()
448 lan966x, PTP_TOD_SEC_MSB(TOD_ACC_PIN)); in lan966x_ptp_settime64()
450 lan966x, PTP_TOD_SEC_LSB(TOD_ACC_PIN)); in lan966x_ptp_settime64()
451 lan_wr(ts->tv_nsec, lan966x, PTP_TOD_NSEC(TOD_ACC_PIN)); in lan966x_ptp_settime64()
460 lan966x, PTP_PIN_CFG(TOD_ACC_PIN)); in lan966x_ptp_settime64()
462 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_settime64()
470 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_gettime64() local
475 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_gettime64()
483 lan966x, PTP_PIN_CFG(TOD_ACC_PIN)); in lan966x_ptp_gettime64()
485 s = lan_rd(lan966x, PTP_TOD_SEC_MSB(TOD_ACC_PIN)); in lan966x_ptp_gettime64()
487 s |= lan_rd(lan966x, PTP_TOD_SEC_LSB(TOD_ACC_PIN)); in lan966x_ptp_gettime64()
488 ns = lan_rd(lan966x, PTP_TOD_NSEC(TOD_ACC_PIN)); in lan966x_ptp_gettime64()
491 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_gettime64()
507 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_adjtime() local
512 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_adjtime()
521 lan966x, PTP_PIN_CFG(TOD_ACC_PIN)); in lan966x_ptp_adjtime()
524 lan966x, PTP_TOD_NSEC(TOD_ACC_PIN)); in lan966x_ptp_adjtime()
533 lan966x, PTP_PIN_CFG(TOD_ACC_PIN)); in lan966x_ptp_adjtime()
535 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_adjtime()
556 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_verify() local
578 info = &lan966x->phc[i].info; in lan966x_ptp_verify()
596 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_perout() local
612 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_perout()
619 lan966x, PTP_PIN_CFG(pin)); in lan966x_ptp_perout()
620 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_perout()
637 dev_warn(lan966x->dev, in lan966x_ptp_perout()
654 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_perout()
656 lan966x, PTP_WF_LOW_PERIOD(pin)); in lan966x_ptp_perout()
658 lan966x, PTP_WF_HIGH_PERIOD(pin)); in lan966x_ptp_perout()
665 lan966x, PTP_PIN_CFG(pin)); in lan966x_ptp_perout()
666 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_perout()
676 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_perout()
678 lan966x, PTP_WF_LOW_PERIOD(pin)); in lan966x_ptp_perout()
680 lan966x, PTP_WF_HIGH_PERIOD(pin)); in lan966x_ptp_perout()
687 lan966x, PTP_PIN_CFG(pin)); in lan966x_ptp_perout()
688 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_perout()
697 struct lan966x *lan966x = phc->lan966x; in lan966x_ptp_extts() local
702 if (lan966x->ptp_ext_irq <= 0) in lan966x_ptp_extts()
715 spin_lock_irqsave(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_extts()
724 lan966x, PTP_PIN_CFG(pin)); in lan966x_ptp_extts()
726 val = lan_rd(lan966x, PTP_PIN_INTR_ENA); in lan966x_ptp_extts()
731 lan_wr(val, lan966x, PTP_PIN_INTR_ENA); in lan966x_ptp_extts()
733 spin_unlock_irqrestore(&lan966x->ptp_clock_lock, flags); in lan966x_ptp_extts()
768 static int lan966x_ptp_phc_init(struct lan966x *lan966x, in lan966x_ptp_phc_init() argument
772 struct lan966x_phc *phc = &lan966x->phc[index]; in lan966x_ptp_phc_init()
786 phc->clock = ptp_clock_register(&phc->info, lan966x->dev); in lan966x_ptp_phc_init()
791 phc->lan966x = lan966x; in lan966x_ptp_phc_init()
799 int lan966x_ptp_init(struct lan966x *lan966x) in lan966x_ptp_init() argument
805 if (!lan966x->ptp) in lan966x_ptp_init()
809 err = lan966x_ptp_phc_init(lan966x, i, &lan966x_ptp_clock_info); in lan966x_ptp_init()
814 spin_lock_init(&lan966x->ptp_clock_lock); in lan966x_ptp_init()
815 spin_lock_init(&lan966x->ptp_ts_id_lock); in lan966x_ptp_init()
816 mutex_init(&lan966x->ptp_lock); in lan966x_ptp_init()
819 lan_wr(PTP_DOM_CFG_ENA_SET(0), lan966x, PTP_DOM_CFG); in lan966x_ptp_init()
824 lan966x, PTP_DOM_CFG); in lan966x_ptp_init()
827 lan_wr((u32)tod_adj & 0xFFFFFFFF, lan966x, in lan966x_ptp_init()
829 lan_wr((u32)(tod_adj >> 32), lan966x, in lan966x_ptp_init()
835 lan966x, PTP_DOM_CFG); in lan966x_ptp_init()
838 lan_wr(PTP_DOM_CFG_ENA_SET(0x7), lan966x, PTP_DOM_CFG); in lan966x_ptp_init()
840 for (i = 0; i < lan966x->num_phys_ports; i++) { in lan966x_ptp_init()
841 port = lan966x->ports[i]; in lan966x_ptp_init()
851 void lan966x_ptp_deinit(struct lan966x *lan966x) in lan966x_ptp_deinit() argument
856 for (i = 0; i < lan966x->num_phys_ports; i++) { in lan966x_ptp_deinit()
857 port = lan966x->ports[i]; in lan966x_ptp_deinit()
865 ptp_clock_unregister(lan966x->phc[i].clock); in lan966x_ptp_deinit()
868 void lan966x_ptp_rxtstamp(struct lan966x *lan966x, struct sk_buff *skb, in lan966x_ptp_rxtstamp() argument
876 if (!lan966x->ptp) in lan966x_ptp_rxtstamp()
879 phc = &lan966x->phc[LAN966X_PHC_PORT]; in lan966x_ptp_rxtstamp()