Lines Matching full:ptp

8  * idpf_ptp_get_access - Determine the access type of the PTP features
13 * Return: the type of supported access for the PTP feature.
18 if (adapter->ptp->caps & direct) in idpf_ptp_get_access()
20 else if (adapter->ptp->caps & mailbox) in idpf_ptp_get_access()
27 * idpf_ptp_get_features_access - Determine the access type of PTP features
30 * Fulfill the adapter structure with type of the supported PTP features
35 struct idpf_ptp *ptp = adapter->ptp; in idpf_ptp_get_features_access() local
41 ptp->get_dev_clk_time_access = idpf_ptp_get_access(adapter, in idpf_ptp_get_features_access()
48 ptp->get_cross_tstamp_access = idpf_ptp_get_access(adapter, in idpf_ptp_get_features_access()
55 ptp->set_dev_clk_time_access = idpf_ptp_get_access(adapter, in idpf_ptp_get_features_access()
62 ptp->adj_dev_clk_time_access = idpf_ptp_get_access(adapter, in idpf_ptp_get_features_access()
69 ptp->tx_tstamp_access = idpf_ptp_get_access(adapter, in idpf_ptp_get_features_access()
83 shtime_enable = adapter->ptp->cmd.shtime_enable_mask; in idpf_ptp_enable_shtime()
84 exec_cmd = adapter->ptp->cmd.exec_cmd_mask; in idpf_ptp_enable_shtime()
87 writel(shtime_enable, adapter->ptp->dev_clk_regs.cmd_sync); in idpf_ptp_enable_shtime()
88 writel(exec_cmd | shtime_enable, adapter->ptp->dev_clk_regs.cmd_sync); in idpf_ptp_enable_shtime()
102 struct idpf_ptp *ptp = adapter->ptp; in idpf_ptp_read_src_clk_reg_direct() local
105 spin_lock(&ptp->read_dev_clk_lock); in idpf_ptp_read_src_clk_reg_direct()
115 lo = readl(ptp->dev_clk_regs.dev_clk_ns_l); in idpf_ptp_read_src_clk_reg_direct()
116 hi = readl(ptp->dev_clk_regs.dev_clk_ns_h); in idpf_ptp_read_src_clk_reg_direct()
118 spin_unlock(&ptp->read_dev_clk_lock); in idpf_ptp_read_src_clk_reg_direct()
166 switch (adapter->ptp->get_dev_clk_time_access) { in idpf_ptp_read_src_clk_reg()
193 struct idpf_ptp *ptp = adapter->ptp; in idpf_ptp_get_sync_device_time_direct() local
195 spin_lock(&ptp->read_dev_clk_lock); in idpf_ptp_get_sync_device_time_direct()
199 dev_time_lo = readl(ptp->dev_clk_regs.dev_clk_ns_l); in idpf_ptp_get_sync_device_time_direct()
200 dev_time_hi = readl(ptp->dev_clk_regs.dev_clk_ns_h); in idpf_ptp_get_sync_device_time_direct()
202 sys_time_lo = readl(ptp->dev_clk_regs.sys_time_ns_l); in idpf_ptp_get_sync_device_time_direct()
203 sys_time_hi = readl(ptp->dev_clk_regs.sys_time_ns_h); in idpf_ptp_get_sync_device_time_direct()
205 spin_unlock(&ptp->read_dev_clk_lock); in idpf_ptp_get_sync_device_time_direct()
254 switch (adapter->ptp->get_cross_tstamp_access) { in idpf_ptp_get_sync_device_time()
284 * @info: the driver's PTP info structure
287 * Capture a cross timestamp between the system time and the device PTP hardware
304 * @info: the driver's PTP info structure
383 WRITE_ONCE(adapter->ptp->cached_phc_time, systime); in idpf_ptp_update_cached_phctime()
384 WRITE_ONCE(adapter->ptp->cached_phc_jiffies, jiffies); in idpf_ptp_update_cached_phctime()
406 * @info: the driver's PTP info structure
422 access = adapter->ptp->set_dev_clk_time_access; in idpf_ptp_settime64()
445 * @info: the driver's PTP info structure
467 * @info: the driver's PTP info structure
478 access = adapter->ptp->adj_dev_clk_time_access; in idpf_ptp_adjtime()
506 * @info: the driver's PTP info structure
521 access = adapter->ptp->adj_dev_clk_time_access; in idpf_ptp_adjfine()
525 incval = adapter->ptp->base_incval; in idpf_ptp_adjfine()
538 * @info: the driver's PTP info structure
553 * @info: the driver's PTP info structure
609 * time stored in the device private PTP structure as the basis for timestamp
616 struct idpf_ptp *ptp = vport->adapter->ptp; in idpf_ptp_extend_ts() local
619 discard_time = ptp->cached_phc_jiffies + 2 * HZ; in idpf_ptp_extend_ts()
629 return idpf_ptp_tstamp_extend_32b_to_64b(ptp->cached_phc_time, in idpf_ptp_extend_ts()
639 * Request tx timestamp index negotiated during PTP init that will be set into
712 idpf_queue_set(PTP, rx_queue); in idpf_ptp_set_rx_tstamp()
714 idpf_queue_clear(PTP, rx_queue); in idpf_ptp_set_rx_tstamp()
761 * idpf_ptp_do_aux_work - Do PTP periodic work
762 * @info: Driver's PTP info structure
776 * idpf_ptp_set_caps - Set PTP capabilities
779 * This function sets the PTP functions.
783 struct ptp_clock_info *info = &adapter->ptp->info; in idpf_ptp_set_caps()
789 info->max_adj = adapter->ptp->max_adj; in idpf_ptp_set_caps()
808 * idpf_ptp_create_clock - Create PTP clock device for userspace
811 * This function creates a new PTP clock device.
822 clock = ptp_clock_register(&adapter->ptp->info, in idpf_ptp_create_clock()
825 pci_err(adapter->pdev, "PTP clock creation failed: %pe\n", in idpf_ptp_create_clock()
830 adapter->ptp->clock = clock; in idpf_ptp_create_clock()
917 * idpf_ptp_init - Initialize PTP hardware clock support
920 * Set up the device for interacting with the PTP hardware clock for all
932 pci_dbg(adapter->pdev, "PTP capability is not detected\n"); in idpf_ptp_init()
936 adapter->ptp = kzalloc(sizeof(*adapter->ptp), GFP_KERNEL); in idpf_ptp_init()
937 if (!adapter->ptp) in idpf_ptp_init()
941 adapter->ptp->adapter = adapter; in idpf_ptp_init()
948 pci_err(adapter->pdev, "Failed to get PTP caps err %d\n", err); in idpf_ptp_init()
956 if (adapter->ptp->get_dev_clk_time_access != IDPF_PTP_NONE) in idpf_ptp_init()
957 ptp_schedule_worker(adapter->ptp->clock, 0); in idpf_ptp_init()
962 if (adapter->ptp->adj_dev_clk_time_access != IDPF_PTP_NONE) { in idpf_ptp_init()
964 adapter->ptp->base_incval); in idpf_ptp_init()
970 if (adapter->ptp->set_dev_clk_time_access != IDPF_PTP_NONE) { in idpf_ptp_init()
972 err = idpf_ptp_settime64(&adapter->ptp->info, &ts); in idpf_ptp_init()
977 spin_lock_init(&adapter->ptp->read_dev_clk_lock); in idpf_ptp_init()
979 pci_dbg(adapter->pdev, "PTP init successful\n"); in idpf_ptp_init()
984 if (adapter->ptp->get_dev_clk_time_access != IDPF_PTP_NONE) in idpf_ptp_init()
985 ptp_cancel_worker_sync(adapter->ptp->clock); in idpf_ptp_init()
987 ptp_clock_unregister(adapter->ptp->clock); in idpf_ptp_init()
988 adapter->ptp->clock = NULL; in idpf_ptp_init()
991 kfree(adapter->ptp); in idpf_ptp_init()
992 adapter->ptp = NULL; in idpf_ptp_init()
998 * idpf_ptp_release - Clear PTP hardware clock support
1003 struct idpf_ptp *ptp = adapter->ptp; in idpf_ptp_release() local
1005 if (!ptp) in idpf_ptp_release()
1008 if (ptp->tx_tstamp_access != IDPF_PTP_NONE && in idpf_ptp_release()
1009 ptp->get_dev_clk_time_access != IDPF_PTP_NONE) in idpf_ptp_release()
1012 if (ptp->clock) { in idpf_ptp_release()
1013 if (adapter->ptp->get_dev_clk_time_access != IDPF_PTP_NONE) in idpf_ptp_release()
1014 ptp_cancel_worker_sync(adapter->ptp->clock); in idpf_ptp_release()
1016 ptp_clock_unregister(ptp->clock); in idpf_ptp_release()
1019 kfree(ptp); in idpf_ptp_release()
1020 adapter->ptp = NULL; in idpf_ptp_release()