1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * PTP 1588 clock support 4 * 5 * Copyright (C) 2010 OMICRON electronics GmbH 6 */ 7 #include <linux/idr.h> 8 #include <linux/device.h> 9 #include <linux/err.h> 10 #include <linux/init.h> 11 #include <linux/kernel.h> 12 #include <linux/module.h> 13 #include <linux/posix-clock.h> 14 #include <linux/pps_kernel.h> 15 #include <linux/slab.h> 16 #include <linux/syscalls.h> 17 #include <linux/uaccess.h> 18 #include <linux/debugfs.h> 19 #include <uapi/linux/sched/types.h> 20 21 #include "ptp_private.h" 22 23 #define PTP_MAX_ALARMS 4 24 #define PTP_PPS_DEFAULTS (PPS_CAPTUREASSERT | PPS_OFFSETASSERT) 25 #define PTP_PPS_EVENT PPS_CAPTUREASSERT 26 #define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC) 27 28 struct class *ptp_class; 29 30 /* private globals */ 31 32 static dev_t ptp_devt; 33 34 static DEFINE_IDA(ptp_clocks_map); 35 36 /* time stamp event queue operations */ 37 38 static inline int queue_free(struct timestamp_event_queue *q) 39 { 40 return PTP_MAX_TIMESTAMPS - queue_cnt(q) - 1; 41 } 42 43 static void enqueue_external_timestamp(struct timestamp_event_queue *queue, 44 struct ptp_clock_event *src) 45 { 46 struct ptp_extts_event *dst; 47 unsigned long flags; 48 s64 seconds; 49 u32 remainder; 50 51 seconds = div_u64_rem(src->timestamp, 1000000000, &remainder); 52 53 spin_lock_irqsave(&queue->lock, flags); 54 55 dst = &queue->buf[queue->tail]; 56 dst->index = src->index; 57 dst->t.sec = seconds; 58 dst->t.nsec = remainder; 59 60 if (!queue_free(queue)) 61 queue->head = (queue->head + 1) % PTP_MAX_TIMESTAMPS; 62 63 queue->tail = (queue->tail + 1) % PTP_MAX_TIMESTAMPS; 64 65 spin_unlock_irqrestore(&queue->lock, flags); 66 } 67 68 /* posix clock implementation */ 69 70 static int ptp_clock_getres(struct posix_clock *pc, struct timespec64 *tp) 71 { 72 tp->tv_sec = 0; 73 tp->tv_nsec = 1; 74 return 0; 75 } 76 77 static int ptp_clock_settime(struct posix_clock *pc, const struct timespec64 *tp) 78 { 79 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); 80 81 if (ptp_clock_freerun(ptp)) { 82 pr_err("ptp: physical clock is free running\n"); 83 return -EBUSY; 84 } 85 86 return ptp->info->settime64(ptp->info, tp); 87 } 88 89 static int ptp_clock_gettime(struct posix_clock *pc, struct timespec64 *tp) 90 { 91 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); 92 int err; 93 94 if (ptp->info->gettimex64) 95 err = ptp->info->gettimex64(ptp->info, tp, NULL); 96 else 97 err = ptp->info->gettime64(ptp->info, tp); 98 return err; 99 } 100 101 static int ptp_clock_adjtime(struct posix_clock *pc, struct __kernel_timex *tx) 102 { 103 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); 104 struct ptp_clock_info *ops; 105 int err = -EOPNOTSUPP; 106 107 if (ptp_clock_freerun(ptp)) { 108 pr_err("ptp: physical clock is free running\n"); 109 return -EBUSY; 110 } 111 112 ops = ptp->info; 113 114 if (tx->modes & ADJ_SETOFFSET) { 115 struct timespec64 ts; 116 ktime_t kt; 117 s64 delta; 118 119 ts.tv_sec = tx->time.tv_sec; 120 ts.tv_nsec = tx->time.tv_usec; 121 122 if (!(tx->modes & ADJ_NANO)) 123 ts.tv_nsec *= 1000; 124 125 if ((unsigned long) ts.tv_nsec >= NSEC_PER_SEC) 126 return -EINVAL; 127 128 kt = timespec64_to_ktime(ts); 129 delta = ktime_to_ns(kt); 130 err = ops->adjtime(ops, delta); 131 } else if (tx->modes & ADJ_FREQUENCY) { 132 long ppb = scaled_ppm_to_ppb(tx->freq); 133 if (ppb > ops->max_adj || ppb < -ops->max_adj) 134 return -ERANGE; 135 err = ops->adjfine(ops, tx->freq); 136 ptp->dialed_frequency = tx->freq; 137 } else if (tx->modes & ADJ_OFFSET) { 138 if (ops->adjphase) { 139 s32 max_phase_adj = ops->getmaxphase(ops); 140 s32 offset = tx->offset; 141 142 if (!(tx->modes & ADJ_NANO)) 143 offset *= NSEC_PER_USEC; 144 145 if (offset > max_phase_adj || offset < -max_phase_adj) 146 return -ERANGE; 147 148 err = ops->adjphase(ops, offset); 149 } 150 } else if (tx->modes == 0) { 151 tx->freq = ptp->dialed_frequency; 152 err = 0; 153 } 154 155 return err; 156 } 157 158 static struct posix_clock_operations ptp_clock_ops = { 159 .owner = THIS_MODULE, 160 .clock_adjtime = ptp_clock_adjtime, 161 .clock_gettime = ptp_clock_gettime, 162 .clock_getres = ptp_clock_getres, 163 .clock_settime = ptp_clock_settime, 164 .ioctl = ptp_ioctl, 165 .open = ptp_open, 166 .release = ptp_release, 167 .poll = ptp_poll, 168 .read = ptp_read, 169 }; 170 171 static void ptp_clock_release(struct device *dev) 172 { 173 struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev); 174 struct timestamp_event_queue *tsevq; 175 unsigned long flags; 176 177 ptp_cleanup_pin_groups(ptp); 178 kfree(ptp->vclock_index); 179 mutex_destroy(&ptp->pincfg_mux); 180 mutex_destroy(&ptp->n_vclocks_mux); 181 /* Delete first entry */ 182 tsevq = list_first_entry(&ptp->tsevqs, struct timestamp_event_queue, 183 qlist); 184 spin_lock_irqsave(&tsevq->lock, flags); 185 list_del(&tsevq->qlist); 186 spin_unlock_irqrestore(&tsevq->lock, flags); 187 bitmap_free(tsevq->mask); 188 kfree(tsevq); 189 debugfs_remove(ptp->debugfs_root); 190 ida_free(&ptp_clocks_map, ptp->index); 191 kfree(ptp); 192 } 193 194 static int ptp_getcycles64(struct ptp_clock_info *info, struct timespec64 *ts) 195 { 196 if (info->getcyclesx64) 197 return info->getcyclesx64(info, ts, NULL); 198 else 199 return info->gettime64(info, ts); 200 } 201 202 static void ptp_aux_kworker(struct kthread_work *work) 203 { 204 struct ptp_clock *ptp = container_of(work, struct ptp_clock, 205 aux_work.work); 206 struct ptp_clock_info *info = ptp->info; 207 long delay; 208 209 delay = info->do_aux_work(info); 210 211 if (delay >= 0) 212 kthread_queue_delayed_work(ptp->kworker, &ptp->aux_work, delay); 213 } 214 215 /* public interface */ 216 217 struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, 218 struct device *parent) 219 { 220 struct ptp_clock *ptp; 221 struct timestamp_event_queue *queue = NULL; 222 int err = 0, index, major = MAJOR(ptp_devt); 223 char debugfsname[8]; 224 size_t size; 225 226 if (info->n_alarm > PTP_MAX_ALARMS) 227 return ERR_PTR(-EINVAL); 228 229 /* Initialize a clock structure. */ 230 err = -ENOMEM; 231 ptp = kzalloc(sizeof(struct ptp_clock), GFP_KERNEL); 232 if (ptp == NULL) 233 goto no_memory; 234 235 index = ida_alloc_max(&ptp_clocks_map, MINORMASK, GFP_KERNEL); 236 if (index < 0) { 237 err = index; 238 goto no_slot; 239 } 240 241 ptp->clock.ops = ptp_clock_ops; 242 ptp->info = info; 243 ptp->devid = MKDEV(major, index); 244 ptp->index = index; 245 INIT_LIST_HEAD(&ptp->tsevqs); 246 queue = kzalloc(sizeof(*queue), GFP_KERNEL); 247 if (!queue) 248 goto no_memory_queue; 249 list_add_tail(&queue->qlist, &ptp->tsevqs); 250 queue->mask = bitmap_alloc(PTP_MAX_CHANNELS, GFP_KERNEL); 251 if (!queue->mask) 252 goto no_memory_bitmap; 253 bitmap_set(queue->mask, 0, PTP_MAX_CHANNELS); 254 spin_lock_init(&queue->lock); 255 mutex_init(&ptp->pincfg_mux); 256 mutex_init(&ptp->n_vclocks_mux); 257 init_waitqueue_head(&ptp->tsev_wq); 258 259 if (ptp->info->getcycles64 || ptp->info->getcyclesx64) { 260 ptp->has_cycles = true; 261 if (!ptp->info->getcycles64 && ptp->info->getcyclesx64) 262 ptp->info->getcycles64 = ptp_getcycles64; 263 } else { 264 /* Free running cycle counter not supported, use time. */ 265 ptp->info->getcycles64 = ptp_getcycles64; 266 267 if (ptp->info->gettimex64) 268 ptp->info->getcyclesx64 = ptp->info->gettimex64; 269 270 if (ptp->info->getcrosststamp) 271 ptp->info->getcrosscycles = ptp->info->getcrosststamp; 272 } 273 274 if (ptp->info->do_aux_work) { 275 kthread_init_delayed_work(&ptp->aux_work, ptp_aux_kworker); 276 ptp->kworker = kthread_create_worker(0, "ptp%d", ptp->index); 277 if (IS_ERR(ptp->kworker)) { 278 err = PTR_ERR(ptp->kworker); 279 pr_err("failed to create ptp aux_worker %d\n", err); 280 goto kworker_err; 281 } 282 } 283 284 /* PTP virtual clock is being registered under physical clock */ 285 if (parent && parent->class && parent->class->name && 286 strcmp(parent->class->name, "ptp") == 0) 287 ptp->is_virtual_clock = true; 288 289 if (!ptp->is_virtual_clock) { 290 ptp->max_vclocks = PTP_DEFAULT_MAX_VCLOCKS; 291 292 size = sizeof(int) * ptp->max_vclocks; 293 ptp->vclock_index = kzalloc(size, GFP_KERNEL); 294 if (!ptp->vclock_index) { 295 err = -ENOMEM; 296 goto no_mem_for_vclocks; 297 } 298 } 299 300 err = ptp_populate_pin_groups(ptp); 301 if (err) 302 goto no_pin_groups; 303 304 /* Register a new PPS source. */ 305 if (info->pps) { 306 struct pps_source_info pps; 307 memset(&pps, 0, sizeof(pps)); 308 snprintf(pps.name, PPS_MAX_NAME_LEN, "ptp%d", index); 309 pps.mode = PTP_PPS_MODE; 310 pps.owner = info->owner; 311 ptp->pps_source = pps_register_source(&pps, PTP_PPS_DEFAULTS); 312 if (IS_ERR(ptp->pps_source)) { 313 err = PTR_ERR(ptp->pps_source); 314 pr_err("failed to register pps source\n"); 315 goto no_pps; 316 } 317 ptp->pps_source->lookup_cookie = ptp; 318 } 319 320 /* Initialize a new device of our class in our clock structure. */ 321 device_initialize(&ptp->dev); 322 ptp->dev.devt = ptp->devid; 323 ptp->dev.class = ptp_class; 324 ptp->dev.parent = parent; 325 ptp->dev.groups = ptp->pin_attr_groups; 326 ptp->dev.release = ptp_clock_release; 327 dev_set_drvdata(&ptp->dev, ptp); 328 dev_set_name(&ptp->dev, "ptp%d", ptp->index); 329 330 /* Create a posix clock and link it to the device. */ 331 err = posix_clock_register(&ptp->clock, &ptp->dev); 332 if (err) { 333 if (ptp->pps_source) 334 pps_unregister_source(ptp->pps_source); 335 336 if (ptp->kworker) 337 kthread_destroy_worker(ptp->kworker); 338 339 put_device(&ptp->dev); 340 341 pr_err("failed to create posix clock\n"); 342 return ERR_PTR(err); 343 } 344 345 /* Debugfs initialization */ 346 sprintf(debugfsname, "ptp%d", ptp->index); 347 ptp->debugfs_root = debugfs_create_dir(debugfsname, NULL); 348 349 return ptp; 350 351 no_pps: 352 ptp_cleanup_pin_groups(ptp); 353 no_pin_groups: 354 kfree(ptp->vclock_index); 355 no_mem_for_vclocks: 356 if (ptp->kworker) 357 kthread_destroy_worker(ptp->kworker); 358 kworker_err: 359 mutex_destroy(&ptp->pincfg_mux); 360 mutex_destroy(&ptp->n_vclocks_mux); 361 bitmap_free(queue->mask); 362 no_memory_bitmap: 363 list_del(&queue->qlist); 364 kfree(queue); 365 no_memory_queue: 366 ida_free(&ptp_clocks_map, index); 367 no_slot: 368 kfree(ptp); 369 no_memory: 370 return ERR_PTR(err); 371 } 372 EXPORT_SYMBOL(ptp_clock_register); 373 374 static int unregister_vclock(struct device *dev, void *data) 375 { 376 struct ptp_clock *ptp = dev_get_drvdata(dev); 377 378 ptp_vclock_unregister(info_to_vclock(ptp->info)); 379 return 0; 380 } 381 382 int ptp_clock_unregister(struct ptp_clock *ptp) 383 { 384 if (ptp_vclock_in_use(ptp)) { 385 device_for_each_child(&ptp->dev, NULL, unregister_vclock); 386 } 387 388 ptp->defunct = 1; 389 wake_up_interruptible(&ptp->tsev_wq); 390 391 if (ptp->kworker) { 392 kthread_cancel_delayed_work_sync(&ptp->aux_work); 393 kthread_destroy_worker(ptp->kworker); 394 } 395 396 /* Release the clock's resources. */ 397 if (ptp->pps_source) 398 pps_unregister_source(ptp->pps_source); 399 400 posix_clock_unregister(&ptp->clock); 401 402 return 0; 403 } 404 EXPORT_SYMBOL(ptp_clock_unregister); 405 406 void ptp_clock_event(struct ptp_clock *ptp, struct ptp_clock_event *event) 407 { 408 struct timestamp_event_queue *tsevq; 409 struct pps_event_time evt; 410 411 switch (event->type) { 412 413 case PTP_CLOCK_ALARM: 414 break; 415 416 case PTP_CLOCK_EXTTS: 417 /* Enqueue timestamp on selected queues */ 418 list_for_each_entry(tsevq, &ptp->tsevqs, qlist) { 419 if (test_bit((unsigned int)event->index, tsevq->mask)) 420 enqueue_external_timestamp(tsevq, event); 421 } 422 wake_up_interruptible(&ptp->tsev_wq); 423 break; 424 425 case PTP_CLOCK_PPS: 426 pps_get_ts(&evt); 427 pps_event(ptp->pps_source, &evt, PTP_PPS_EVENT, NULL); 428 break; 429 430 case PTP_CLOCK_PPSUSR: 431 pps_event(ptp->pps_source, &event->pps_times, 432 PTP_PPS_EVENT, NULL); 433 break; 434 } 435 } 436 EXPORT_SYMBOL(ptp_clock_event); 437 438 int ptp_clock_index(struct ptp_clock *ptp) 439 { 440 return ptp->index; 441 } 442 EXPORT_SYMBOL(ptp_clock_index); 443 444 int ptp_find_pin(struct ptp_clock *ptp, 445 enum ptp_pin_function func, unsigned int chan) 446 { 447 struct ptp_pin_desc *pin = NULL; 448 int i; 449 450 for (i = 0; i < ptp->info->n_pins; i++) { 451 if (ptp->info->pin_config[i].func == func && 452 ptp->info->pin_config[i].chan == chan) { 453 pin = &ptp->info->pin_config[i]; 454 break; 455 } 456 } 457 458 return pin ? i : -1; 459 } 460 EXPORT_SYMBOL(ptp_find_pin); 461 462 int ptp_find_pin_unlocked(struct ptp_clock *ptp, 463 enum ptp_pin_function func, unsigned int chan) 464 { 465 int result; 466 467 mutex_lock(&ptp->pincfg_mux); 468 469 result = ptp_find_pin(ptp, func, chan); 470 471 mutex_unlock(&ptp->pincfg_mux); 472 473 return result; 474 } 475 EXPORT_SYMBOL(ptp_find_pin_unlocked); 476 477 int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay) 478 { 479 return kthread_mod_delayed_work(ptp->kworker, &ptp->aux_work, delay); 480 } 481 EXPORT_SYMBOL(ptp_schedule_worker); 482 483 void ptp_cancel_worker_sync(struct ptp_clock *ptp) 484 { 485 kthread_cancel_delayed_work_sync(&ptp->aux_work); 486 } 487 EXPORT_SYMBOL(ptp_cancel_worker_sync); 488 489 /* module operations */ 490 491 static void __exit ptp_exit(void) 492 { 493 class_destroy(ptp_class); 494 unregister_chrdev_region(ptp_devt, MINORMASK + 1); 495 ida_destroy(&ptp_clocks_map); 496 } 497 498 static int __init ptp_init(void) 499 { 500 int err; 501 502 ptp_class = class_create("ptp"); 503 if (IS_ERR(ptp_class)) { 504 pr_err("ptp: failed to allocate class\n"); 505 return PTR_ERR(ptp_class); 506 } 507 508 err = alloc_chrdev_region(&ptp_devt, 0, MINORMASK + 1, "ptp"); 509 if (err < 0) { 510 pr_err("ptp: failed to allocate device region\n"); 511 goto no_region; 512 } 513 514 ptp_class->dev_groups = ptp_groups; 515 pr_info("PTP clock support registered\n"); 516 return 0; 517 518 no_region: 519 class_destroy(ptp_class); 520 return err; 521 } 522 523 subsys_initcall(ptp_init); 524 module_exit(ptp_exit); 525 526 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>"); 527 MODULE_DESCRIPTION("PTP clocks support"); 528 MODULE_LICENSE("GPL"); 529