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 spin_lock_irqsave(&ptp->tsevqs_lock, flags); 183 tsevq = list_first_entry(&ptp->tsevqs, struct timestamp_event_queue, 184 qlist); 185 list_del(&tsevq->qlist); 186 spin_unlock_irqrestore(&ptp->tsevqs_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[16]; 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 spin_lock_init(&ptp->tsevqs_lock); 251 queue->mask = bitmap_alloc(PTP_MAX_CHANNELS, GFP_KERNEL); 252 if (!queue->mask) 253 goto no_memory_bitmap; 254 bitmap_set(queue->mask, 0, PTP_MAX_CHANNELS); 255 spin_lock_init(&queue->lock); 256 mutex_init(&ptp->pincfg_mux); 257 mutex_init(&ptp->n_vclocks_mux); 258 init_waitqueue_head(&ptp->tsev_wq); 259 260 if (ptp->info->getcycles64 || ptp->info->getcyclesx64) { 261 ptp->has_cycles = true; 262 if (!ptp->info->getcycles64 && ptp->info->getcyclesx64) 263 ptp->info->getcycles64 = ptp_getcycles64; 264 } else { 265 /* Free running cycle counter not supported, use time. */ 266 ptp->info->getcycles64 = ptp_getcycles64; 267 268 if (ptp->info->gettimex64) 269 ptp->info->getcyclesx64 = ptp->info->gettimex64; 270 271 if (ptp->info->getcrosststamp) 272 ptp->info->getcrosscycles = ptp->info->getcrosststamp; 273 } 274 275 if (ptp->info->do_aux_work) { 276 kthread_init_delayed_work(&ptp->aux_work, ptp_aux_kworker); 277 ptp->kworker = kthread_create_worker(0, "ptp%d", ptp->index); 278 if (IS_ERR(ptp->kworker)) { 279 err = PTR_ERR(ptp->kworker); 280 pr_err("failed to create ptp aux_worker %d\n", err); 281 goto kworker_err; 282 } 283 } 284 285 /* PTP virtual clock is being registered under physical clock */ 286 if (parent && parent->class && parent->class->name && 287 strcmp(parent->class->name, "ptp") == 0) 288 ptp->is_virtual_clock = true; 289 290 if (!ptp->is_virtual_clock) { 291 ptp->max_vclocks = PTP_DEFAULT_MAX_VCLOCKS; 292 293 size = sizeof(int) * ptp->max_vclocks; 294 ptp->vclock_index = kzalloc(size, GFP_KERNEL); 295 if (!ptp->vclock_index) { 296 err = -ENOMEM; 297 goto no_mem_for_vclocks; 298 } 299 } 300 301 err = ptp_populate_pin_groups(ptp); 302 if (err) 303 goto no_pin_groups; 304 305 /* Register a new PPS source. */ 306 if (info->pps) { 307 struct pps_source_info pps; 308 memset(&pps, 0, sizeof(pps)); 309 snprintf(pps.name, PPS_MAX_NAME_LEN, "ptp%d", index); 310 pps.mode = PTP_PPS_MODE; 311 pps.owner = info->owner; 312 ptp->pps_source = pps_register_source(&pps, PTP_PPS_DEFAULTS); 313 if (IS_ERR(ptp->pps_source)) { 314 err = PTR_ERR(ptp->pps_source); 315 pr_err("failed to register pps source\n"); 316 goto no_pps; 317 } 318 ptp->pps_source->lookup_cookie = ptp; 319 } 320 321 /* Initialize a new device of our class in our clock structure. */ 322 device_initialize(&ptp->dev); 323 ptp->dev.devt = ptp->devid; 324 ptp->dev.class = ptp_class; 325 ptp->dev.parent = parent; 326 ptp->dev.groups = ptp->pin_attr_groups; 327 ptp->dev.release = ptp_clock_release; 328 dev_set_drvdata(&ptp->dev, ptp); 329 dev_set_name(&ptp->dev, "ptp%d", ptp->index); 330 331 /* Create a posix clock and link it to the device. */ 332 err = posix_clock_register(&ptp->clock, &ptp->dev); 333 if (err) { 334 if (ptp->pps_source) 335 pps_unregister_source(ptp->pps_source); 336 337 if (ptp->kworker) 338 kthread_destroy_worker(ptp->kworker); 339 340 put_device(&ptp->dev); 341 342 pr_err("failed to create posix clock\n"); 343 return ERR_PTR(err); 344 } 345 346 /* Debugfs initialization */ 347 snprintf(debugfsname, sizeof(debugfsname), "ptp%d", ptp->index); 348 ptp->debugfs_root = debugfs_create_dir(debugfsname, NULL); 349 350 return ptp; 351 352 no_pps: 353 ptp_cleanup_pin_groups(ptp); 354 no_pin_groups: 355 kfree(ptp->vclock_index); 356 no_mem_for_vclocks: 357 if (ptp->kworker) 358 kthread_destroy_worker(ptp->kworker); 359 kworker_err: 360 mutex_destroy(&ptp->pincfg_mux); 361 mutex_destroy(&ptp->n_vclocks_mux); 362 bitmap_free(queue->mask); 363 no_memory_bitmap: 364 list_del(&queue->qlist); 365 kfree(queue); 366 no_memory_queue: 367 ida_free(&ptp_clocks_map, index); 368 no_slot: 369 kfree(ptp); 370 no_memory: 371 return ERR_PTR(err); 372 } 373 EXPORT_SYMBOL(ptp_clock_register); 374 375 static int unregister_vclock(struct device *dev, void *data) 376 { 377 struct ptp_clock *ptp = dev_get_drvdata(dev); 378 379 ptp_vclock_unregister(info_to_vclock(ptp->info)); 380 return 0; 381 } 382 383 int ptp_clock_unregister(struct ptp_clock *ptp) 384 { 385 if (ptp_vclock_in_use(ptp)) { 386 device_for_each_child(&ptp->dev, NULL, unregister_vclock); 387 } 388 389 ptp->defunct = 1; 390 wake_up_interruptible(&ptp->tsev_wq); 391 392 if (ptp->kworker) { 393 kthread_cancel_delayed_work_sync(&ptp->aux_work); 394 kthread_destroy_worker(ptp->kworker); 395 } 396 397 /* Release the clock's resources. */ 398 if (ptp->pps_source) 399 pps_unregister_source(ptp->pps_source); 400 401 posix_clock_unregister(&ptp->clock); 402 403 return 0; 404 } 405 EXPORT_SYMBOL(ptp_clock_unregister); 406 407 void ptp_clock_event(struct ptp_clock *ptp, struct ptp_clock_event *event) 408 { 409 struct timestamp_event_queue *tsevq; 410 struct pps_event_time evt; 411 unsigned long flags; 412 413 switch (event->type) { 414 415 case PTP_CLOCK_ALARM: 416 break; 417 418 case PTP_CLOCK_EXTTS: 419 /* Enqueue timestamp on selected queues */ 420 spin_lock_irqsave(&ptp->tsevqs_lock, flags); 421 list_for_each_entry(tsevq, &ptp->tsevqs, qlist) { 422 if (test_bit((unsigned int)event->index, tsevq->mask)) 423 enqueue_external_timestamp(tsevq, event); 424 } 425 spin_unlock_irqrestore(&ptp->tsevqs_lock, flags); 426 wake_up_interruptible(&ptp->tsev_wq); 427 break; 428 429 case PTP_CLOCK_PPS: 430 pps_get_ts(&evt); 431 pps_event(ptp->pps_source, &evt, PTP_PPS_EVENT, NULL); 432 break; 433 434 case PTP_CLOCK_PPSUSR: 435 pps_event(ptp->pps_source, &event->pps_times, 436 PTP_PPS_EVENT, NULL); 437 break; 438 } 439 } 440 EXPORT_SYMBOL(ptp_clock_event); 441 442 int ptp_clock_index(struct ptp_clock *ptp) 443 { 444 return ptp->index; 445 } 446 EXPORT_SYMBOL(ptp_clock_index); 447 448 int ptp_find_pin(struct ptp_clock *ptp, 449 enum ptp_pin_function func, unsigned int chan) 450 { 451 struct ptp_pin_desc *pin = NULL; 452 int i; 453 454 for (i = 0; i < ptp->info->n_pins; i++) { 455 if (ptp->info->pin_config[i].func == func && 456 ptp->info->pin_config[i].chan == chan) { 457 pin = &ptp->info->pin_config[i]; 458 break; 459 } 460 } 461 462 return pin ? i : -1; 463 } 464 EXPORT_SYMBOL(ptp_find_pin); 465 466 int ptp_find_pin_unlocked(struct ptp_clock *ptp, 467 enum ptp_pin_function func, unsigned int chan) 468 { 469 int result; 470 471 mutex_lock(&ptp->pincfg_mux); 472 473 result = ptp_find_pin(ptp, func, chan); 474 475 mutex_unlock(&ptp->pincfg_mux); 476 477 return result; 478 } 479 EXPORT_SYMBOL(ptp_find_pin_unlocked); 480 481 int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay) 482 { 483 return kthread_mod_delayed_work(ptp->kworker, &ptp->aux_work, delay); 484 } 485 EXPORT_SYMBOL(ptp_schedule_worker); 486 487 void ptp_cancel_worker_sync(struct ptp_clock *ptp) 488 { 489 kthread_cancel_delayed_work_sync(&ptp->aux_work); 490 } 491 EXPORT_SYMBOL(ptp_cancel_worker_sync); 492 493 /* module operations */ 494 495 static void __exit ptp_exit(void) 496 { 497 class_destroy(ptp_class); 498 unregister_chrdev_region(ptp_devt, MINORMASK + 1); 499 ida_destroy(&ptp_clocks_map); 500 } 501 502 static int __init ptp_init(void) 503 { 504 int err; 505 506 ptp_class = class_create("ptp"); 507 if (IS_ERR(ptp_class)) { 508 pr_err("ptp: failed to allocate class\n"); 509 return PTR_ERR(ptp_class); 510 } 511 512 err = alloc_chrdev_region(&ptp_devt, 0, MINORMASK + 1, "ptp"); 513 if (err < 0) { 514 pr_err("ptp: failed to allocate device region\n"); 515 goto no_region; 516 } 517 518 ptp_class->dev_groups = ptp_groups; 519 pr_info("PTP clock support registered\n"); 520 return 0; 521 522 no_region: 523 class_destroy(ptp_class); 524 return err; 525 } 526 527 subsys_initcall(ptp_init); 528 module_exit(ptp_exit); 529 530 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>"); 531 MODULE_DESCRIPTION("PTP clocks support"); 532 MODULE_LICENSE("GPL"); 533