1 // SPDX-License-Identifier: GPL-2.0-only 2 /* Copyright (c) 2020 Facebook */ 3 4 #include <linux/err.h> 5 #include <linux/kernel.h> 6 #include <linux/module.h> 7 #include <linux/debugfs.h> 8 #include <linux/init.h> 9 #include <linux/pci.h> 10 #include <linux/serial_8250.h> 11 #include <linux/clkdev.h> 12 #include <linux/clk-provider.h> 13 #include <linux/platform_device.h> 14 #include <linux/ptp_clock_kernel.h> 15 #include <linux/spi/spi.h> 16 #include <linux/spi/xilinx_spi.h> 17 #include <net/devlink.h> 18 #include <linux/i2c.h> 19 #include <linux/mtd/mtd.h> 20 21 #ifndef PCI_VENDOR_ID_FACEBOOK 22 #define PCI_VENDOR_ID_FACEBOOK 0x1d9b 23 #endif 24 25 #ifndef PCI_DEVICE_ID_FACEBOOK_TIMECARD 26 #define PCI_DEVICE_ID_FACEBOOK_TIMECARD 0x0400 27 #endif 28 29 static struct class timecard_class = { 30 .owner = THIS_MODULE, 31 .name = "timecard", 32 }; 33 34 struct ocp_reg { 35 u32 ctrl; 36 u32 status; 37 u32 select; 38 u32 version; 39 u32 time_ns; 40 u32 time_sec; 41 u32 __pad0[2]; 42 u32 adjust_ns; 43 u32 adjust_sec; 44 u32 __pad1[2]; 45 u32 offset_ns; 46 u32 offset_window_ns; 47 u32 __pad2[2]; 48 u32 drift_ns; 49 u32 drift_window_ns; 50 u32 __pad3[6]; 51 u32 servo_offset_p; 52 u32 servo_offset_i; 53 u32 servo_drift_p; 54 u32 servo_drift_i; 55 u32 status_offset; 56 u32 status_drift; 57 }; 58 59 #define OCP_CTRL_ENABLE BIT(0) 60 #define OCP_CTRL_ADJUST_TIME BIT(1) 61 #define OCP_CTRL_ADJUST_OFFSET BIT(2) 62 #define OCP_CTRL_ADJUST_DRIFT BIT(3) 63 #define OCP_CTRL_ADJUST_SERVO BIT(8) 64 #define OCP_CTRL_READ_TIME_REQ BIT(30) 65 #define OCP_CTRL_READ_TIME_DONE BIT(31) 66 67 #define OCP_STATUS_IN_SYNC BIT(0) 68 #define OCP_STATUS_IN_HOLDOVER BIT(1) 69 70 #define OCP_SELECT_CLK_NONE 0 71 #define OCP_SELECT_CLK_REG 0xfe 72 73 struct tod_reg { 74 u32 ctrl; 75 u32 status; 76 u32 uart_polarity; 77 u32 version; 78 u32 adj_sec; 79 u32 __pad0[3]; 80 u32 uart_baud; 81 u32 __pad1[3]; 82 u32 utc_status; 83 u32 leap; 84 }; 85 86 #define TOD_CTRL_PROTOCOL BIT(28) 87 #define TOD_CTRL_DISABLE_FMT_A BIT(17) 88 #define TOD_CTRL_DISABLE_FMT_B BIT(16) 89 #define TOD_CTRL_ENABLE BIT(0) 90 #define TOD_CTRL_GNSS_MASK ((1U << 4) - 1) 91 #define TOD_CTRL_GNSS_SHIFT 24 92 93 #define TOD_STATUS_UTC_MASK 0xff 94 #define TOD_STATUS_UTC_VALID BIT(8) 95 #define TOD_STATUS_LEAP_ANNOUNCE BIT(12) 96 #define TOD_STATUS_LEAP_VALID BIT(16) 97 98 struct ts_reg { 99 u32 enable; 100 u32 error; 101 u32 polarity; 102 u32 version; 103 u32 __pad0[4]; 104 u32 cable_delay; 105 u32 __pad1[3]; 106 u32 intr; 107 u32 intr_mask; 108 u32 event_count; 109 u32 __pad2[1]; 110 u32 ts_count; 111 u32 time_ns; 112 u32 time_sec; 113 u32 data_width; 114 u32 data; 115 }; 116 117 struct pps_reg { 118 u32 ctrl; 119 u32 status; 120 u32 __pad0[6]; 121 u32 cable_delay; 122 }; 123 124 #define PPS_STATUS_FILTER_ERR BIT(0) 125 #define PPS_STATUS_SUPERV_ERR BIT(1) 126 127 struct img_reg { 128 u32 version; 129 }; 130 131 struct gpio_reg { 132 u32 gpio1; 133 u32 __pad0; 134 u32 gpio2; 135 u32 __pad1; 136 }; 137 138 struct irig_master_reg { 139 u32 ctrl; 140 u32 status; 141 u32 __pad0; 142 u32 version; 143 u32 adj_sec; 144 u32 mode_ctrl; 145 }; 146 147 #define IRIG_M_CTRL_ENABLE BIT(0) 148 149 struct irig_slave_reg { 150 u32 ctrl; 151 u32 status; 152 u32 __pad0; 153 u32 version; 154 u32 adj_sec; 155 u32 mode_ctrl; 156 }; 157 158 #define IRIG_S_CTRL_ENABLE BIT(0) 159 160 struct dcf_master_reg { 161 u32 ctrl; 162 u32 status; 163 u32 __pad0; 164 u32 version; 165 u32 adj_sec; 166 }; 167 168 #define DCF_M_CTRL_ENABLE BIT(0) 169 170 struct dcf_slave_reg { 171 u32 ctrl; 172 u32 status; 173 u32 __pad0; 174 u32 version; 175 u32 adj_sec; 176 }; 177 178 #define DCF_S_CTRL_ENABLE BIT(0) 179 180 struct ptp_ocp_flash_info { 181 const char *name; 182 int pci_offset; 183 int data_size; 184 void *data; 185 }; 186 187 struct ptp_ocp_i2c_info { 188 const char *name; 189 unsigned long fixed_rate; 190 size_t data_size; 191 void *data; 192 }; 193 194 struct ptp_ocp_ext_info { 195 int index; 196 irqreturn_t (*irq_fcn)(int irq, void *priv); 197 int (*enable)(void *priv, u32 req, bool enable); 198 }; 199 200 struct ptp_ocp_ext_src { 201 void __iomem *mem; 202 struct ptp_ocp *bp; 203 struct ptp_ocp_ext_info *info; 204 int irq_vec; 205 }; 206 207 struct ptp_ocp { 208 struct pci_dev *pdev; 209 struct device dev; 210 spinlock_t lock; 211 struct ocp_reg __iomem *reg; 212 struct tod_reg __iomem *tod; 213 struct pps_reg __iomem *pps_to_ext; 214 struct pps_reg __iomem *pps_to_clk; 215 struct gpio_reg __iomem *pps_select; 216 struct gpio_reg __iomem *sma; 217 struct irig_master_reg __iomem *irig_out; 218 struct irig_slave_reg __iomem *irig_in; 219 struct dcf_master_reg __iomem *dcf_out; 220 struct dcf_slave_reg __iomem *dcf_in; 221 struct tod_reg __iomem *nmea_out; 222 struct ptp_ocp_ext_src *pps; 223 struct ptp_ocp_ext_src *ts0; 224 struct ptp_ocp_ext_src *ts1; 225 struct ptp_ocp_ext_src *ts2; 226 struct img_reg __iomem *image; 227 struct ptp_clock *ptp; 228 struct ptp_clock_info ptp_info; 229 struct platform_device *i2c_ctrl; 230 struct platform_device *spi_flash; 231 struct clk_hw *i2c_clk; 232 struct timer_list watchdog; 233 struct dentry *debug_root; 234 time64_t gnss_lost; 235 int id; 236 int n_irqs; 237 int gnss_port; 238 int gnss2_port; 239 int mac_port; /* miniature atomic clock */ 240 int nmea_port; 241 u8 serial[6]; 242 bool has_serial; 243 u32 pps_req_map; 244 int flash_start; 245 u32 utc_tai_offset; 246 u32 ts_window_adjust; 247 }; 248 249 #define OCP_REQ_TIMESTAMP BIT(0) 250 #define OCP_REQ_PPS BIT(1) 251 252 struct ocp_resource { 253 unsigned long offset; 254 int size; 255 int irq_vec; 256 int (*setup)(struct ptp_ocp *bp, struct ocp_resource *r); 257 void *extra; 258 unsigned long bp_offset; 259 const char * const name; 260 }; 261 262 static int ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r); 263 static int ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r); 264 static int ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r); 265 static int ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r); 266 static int ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r); 267 static int ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r); 268 static irqreturn_t ptp_ocp_ts_irq(int irq, void *priv); 269 static int ptp_ocp_ts_enable(void *priv, u32 req, bool enable); 270 271 #define bp_assign_entry(bp, res, val) ({ \ 272 uintptr_t addr = (uintptr_t)(bp) + (res)->bp_offset; \ 273 *(typeof(val) *)addr = val; \ 274 }) 275 276 #define OCP_RES_LOCATION(member) \ 277 .name = #member, .bp_offset = offsetof(struct ptp_ocp, member) 278 279 #define OCP_MEM_RESOURCE(member) \ 280 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_mem 281 282 #define OCP_SERIAL_RESOURCE(member) \ 283 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_serial 284 285 #define OCP_I2C_RESOURCE(member) \ 286 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_i2c 287 288 #define OCP_SPI_RESOURCE(member) \ 289 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_spi 290 291 #define OCP_EXT_RESOURCE(member) \ 292 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_ext 293 294 /* This is the MSI vector mapping used. 295 * 0: TS3 (and PPS) 296 * 1: TS0 297 * 2: TS1 298 * 3: GNSS 299 * 4: GNSS2 300 * 5: MAC 301 * 6: TS2 302 * 7: I2C controller 303 * 8: HWICAP (notused) 304 * 9: SPI Flash 305 * 10: NMEA 306 */ 307 308 static struct ocp_resource ocp_fb_resource[] = { 309 { 310 OCP_MEM_RESOURCE(reg), 311 .offset = 0x01000000, .size = 0x10000, 312 }, 313 { 314 OCP_EXT_RESOURCE(ts0), 315 .offset = 0x01010000, .size = 0x10000, .irq_vec = 1, 316 .extra = &(struct ptp_ocp_ext_info) { 317 .index = 0, 318 .irq_fcn = ptp_ocp_ts_irq, 319 .enable = ptp_ocp_ts_enable, 320 }, 321 }, 322 { 323 OCP_EXT_RESOURCE(ts1), 324 .offset = 0x01020000, .size = 0x10000, .irq_vec = 2, 325 .extra = &(struct ptp_ocp_ext_info) { 326 .index = 1, 327 .irq_fcn = ptp_ocp_ts_irq, 328 .enable = ptp_ocp_ts_enable, 329 }, 330 }, 331 { 332 OCP_EXT_RESOURCE(ts2), 333 .offset = 0x01060000, .size = 0x10000, .irq_vec = 6, 334 .extra = &(struct ptp_ocp_ext_info) { 335 .index = 2, 336 .irq_fcn = ptp_ocp_ts_irq, 337 .enable = ptp_ocp_ts_enable, 338 }, 339 }, 340 { 341 OCP_EXT_RESOURCE(pps), 342 .offset = 0x010C0000, .size = 0x10000, .irq_vec = 0, 343 .extra = &(struct ptp_ocp_ext_info) { 344 .index = 3, 345 .irq_fcn = ptp_ocp_ts_irq, 346 .enable = ptp_ocp_ts_enable, 347 }, 348 }, 349 { 350 OCP_MEM_RESOURCE(pps_to_ext), 351 .offset = 0x01030000, .size = 0x10000, 352 }, 353 { 354 OCP_MEM_RESOURCE(pps_to_clk), 355 .offset = 0x01040000, .size = 0x10000, 356 }, 357 { 358 OCP_MEM_RESOURCE(tod), 359 .offset = 0x01050000, .size = 0x10000, 360 }, 361 { 362 OCP_MEM_RESOURCE(irig_in), 363 .offset = 0x01070000, .size = 0x10000, 364 }, 365 { 366 OCP_MEM_RESOURCE(irig_out), 367 .offset = 0x01080000, .size = 0x10000, 368 }, 369 { 370 OCP_MEM_RESOURCE(dcf_in), 371 .offset = 0x01090000, .size = 0x10000, 372 }, 373 { 374 OCP_MEM_RESOURCE(dcf_out), 375 .offset = 0x010A0000, .size = 0x10000, 376 }, 377 { 378 OCP_MEM_RESOURCE(nmea_out), 379 .offset = 0x010B0000, .size = 0x10000, 380 }, 381 { 382 OCP_MEM_RESOURCE(image), 383 .offset = 0x00020000, .size = 0x1000, 384 }, 385 { 386 OCP_MEM_RESOURCE(pps_select), 387 .offset = 0x00130000, .size = 0x1000, 388 }, 389 { 390 OCP_MEM_RESOURCE(sma), 391 .offset = 0x00140000, .size = 0x1000, 392 }, 393 { 394 OCP_I2C_RESOURCE(i2c_ctrl), 395 .offset = 0x00150000, .size = 0x10000, .irq_vec = 7, 396 .extra = &(struct ptp_ocp_i2c_info) { 397 .name = "xiic-i2c", 398 .fixed_rate = 50000000, 399 }, 400 }, 401 { 402 OCP_SERIAL_RESOURCE(gnss_port), 403 .offset = 0x00160000 + 0x1000, .irq_vec = 3, 404 }, 405 { 406 OCP_SERIAL_RESOURCE(gnss2_port), 407 .offset = 0x00170000 + 0x1000, .irq_vec = 4, 408 }, 409 { 410 OCP_SERIAL_RESOURCE(mac_port), 411 .offset = 0x00180000 + 0x1000, .irq_vec = 5, 412 }, 413 { 414 OCP_SERIAL_RESOURCE(nmea_port), 415 .offset = 0x00190000 + 0x1000, .irq_vec = 10, 416 }, 417 { 418 OCP_SPI_RESOURCE(spi_flash), 419 .offset = 0x00310000, .size = 0x10000, .irq_vec = 9, 420 .extra = &(struct ptp_ocp_flash_info) { 421 .name = "xilinx_spi", .pci_offset = 0, 422 .data_size = sizeof(struct xspi_platform_data), 423 .data = &(struct xspi_platform_data) { 424 .num_chipselect = 1, 425 .bits_per_word = 8, 426 .num_devices = 1, 427 .devices = &(struct spi_board_info) { 428 .modalias = "spi-nor", 429 }, 430 }, 431 }, 432 }, 433 { 434 .setup = ptp_ocp_fb_board_init, 435 }, 436 { } 437 }; 438 439 static const struct pci_device_id ptp_ocp_pcidev_id[] = { 440 { PCI_DEVICE_DATA(FACEBOOK, TIMECARD, &ocp_fb_resource) }, 441 { 0 } 442 }; 443 MODULE_DEVICE_TABLE(pci, ptp_ocp_pcidev_id); 444 445 static DEFINE_MUTEX(ptp_ocp_lock); 446 static DEFINE_IDR(ptp_ocp_idr); 447 448 struct ocp_selector { 449 const char *name; 450 int value; 451 }; 452 453 static struct ocp_selector ptp_ocp_clock[] = { 454 { .name = "NONE", .value = 0 }, 455 { .name = "TOD", .value = 1 }, 456 { .name = "IRIG", .value = 2 }, 457 { .name = "PPS", .value = 3 }, 458 { .name = "PTP", .value = 4 }, 459 { .name = "RTC", .value = 5 }, 460 { .name = "DCF", .value = 6 }, 461 { .name = "REGS", .value = 0xfe }, 462 { .name = "EXT", .value = 0xff }, 463 { } 464 }; 465 466 static struct ocp_selector ptp_ocp_sma_in[] = { 467 { .name = "10Mhz", .value = 0x00 }, 468 { .name = "PPS1", .value = 0x01 }, 469 { .name = "PPS2", .value = 0x02 }, 470 { .name = "TS1", .value = 0x04 }, 471 { .name = "TS2", .value = 0x08 }, 472 { .name = "IRIG", .value = 0x10 }, 473 { .name = "DCF", .value = 0x20 }, 474 { } 475 }; 476 477 static struct ocp_selector ptp_ocp_sma_out[] = { 478 { .name = "10Mhz", .value = 0x00 }, 479 { .name = "PHC", .value = 0x01 }, 480 { .name = "MAC", .value = 0x02 }, 481 { .name = "GNSS", .value = 0x04 }, 482 { .name = "GNSS2", .value = 0x08 }, 483 { .name = "IRIG", .value = 0x10 }, 484 { .name = "DCF", .value = 0x20 }, 485 { } 486 }; 487 488 static const char * 489 ptp_ocp_select_name_from_val(struct ocp_selector *tbl, int val) 490 { 491 int i; 492 493 for (i = 0; tbl[i].name; i++) 494 if (tbl[i].value == val) 495 return tbl[i].name; 496 return NULL; 497 } 498 499 static int 500 ptp_ocp_select_val_from_name(struct ocp_selector *tbl, const char *name) 501 { 502 const char *select; 503 int i; 504 505 for (i = 0; tbl[i].name; i++) { 506 select = tbl[i].name; 507 if (!strncasecmp(name, select, strlen(select))) 508 return tbl[i].value; 509 } 510 return -EINVAL; 511 } 512 513 static ssize_t 514 ptp_ocp_select_table_show(struct ocp_selector *tbl, char *buf) 515 { 516 ssize_t count; 517 int i; 518 519 count = 0; 520 for (i = 0; tbl[i].name; i++) 521 count += sysfs_emit_at(buf, count, "%s ", tbl[i].name); 522 if (count) 523 count--; 524 count += sysfs_emit_at(buf, count, "\n"); 525 return count; 526 } 527 528 static int 529 __ptp_ocp_gettime_locked(struct ptp_ocp *bp, struct timespec64 *ts, 530 struct ptp_system_timestamp *sts) 531 { 532 u32 ctrl, time_sec, time_ns; 533 int i; 534 535 ptp_read_system_prets(sts); 536 537 ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE; 538 iowrite32(ctrl, &bp->reg->ctrl); 539 540 for (i = 0; i < 100; i++) { 541 ctrl = ioread32(&bp->reg->ctrl); 542 if (ctrl & OCP_CTRL_READ_TIME_DONE) 543 break; 544 } 545 ptp_read_system_postts(sts); 546 547 if (sts && bp->ts_window_adjust) { 548 s64 ns = timespec64_to_ns(&sts->post_ts); 549 550 sts->post_ts = ns_to_timespec64(ns - bp->ts_window_adjust); 551 } 552 553 time_ns = ioread32(&bp->reg->time_ns); 554 time_sec = ioread32(&bp->reg->time_sec); 555 556 ts->tv_sec = time_sec; 557 ts->tv_nsec = time_ns; 558 559 return ctrl & OCP_CTRL_READ_TIME_DONE ? 0 : -ETIMEDOUT; 560 } 561 562 static int 563 ptp_ocp_gettimex(struct ptp_clock_info *ptp_info, struct timespec64 *ts, 564 struct ptp_system_timestamp *sts) 565 { 566 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 567 unsigned long flags; 568 int err; 569 570 spin_lock_irqsave(&bp->lock, flags); 571 err = __ptp_ocp_gettime_locked(bp, ts, sts); 572 spin_unlock_irqrestore(&bp->lock, flags); 573 574 return err; 575 } 576 577 static void 578 __ptp_ocp_settime_locked(struct ptp_ocp *bp, const struct timespec64 *ts) 579 { 580 u32 ctrl, time_sec, time_ns; 581 u32 select; 582 583 time_ns = ts->tv_nsec; 584 time_sec = ts->tv_sec; 585 586 select = ioread32(&bp->reg->select); 587 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 588 589 iowrite32(time_ns, &bp->reg->adjust_ns); 590 iowrite32(time_sec, &bp->reg->adjust_sec); 591 592 ctrl = OCP_CTRL_ADJUST_TIME | OCP_CTRL_ENABLE; 593 iowrite32(ctrl, &bp->reg->ctrl); 594 595 /* restore clock selection */ 596 iowrite32(select >> 16, &bp->reg->select); 597 } 598 599 static int 600 ptp_ocp_settime(struct ptp_clock_info *ptp_info, const struct timespec64 *ts) 601 { 602 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 603 unsigned long flags; 604 605 spin_lock_irqsave(&bp->lock, flags); 606 __ptp_ocp_settime_locked(bp, ts); 607 spin_unlock_irqrestore(&bp->lock, flags); 608 609 return 0; 610 } 611 612 static void 613 __ptp_ocp_adjtime_locked(struct ptp_ocp *bp, u32 adj_val) 614 { 615 u32 select, ctrl; 616 617 select = ioread32(&bp->reg->select); 618 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 619 620 iowrite32(adj_val, &bp->reg->offset_ns); 621 iowrite32(NSEC_PER_SEC, &bp->reg->offset_window_ns); 622 623 ctrl = OCP_CTRL_ADJUST_OFFSET | OCP_CTRL_ENABLE; 624 iowrite32(ctrl, &bp->reg->ctrl); 625 626 /* restore clock selection */ 627 iowrite32(select >> 16, &bp->reg->select); 628 } 629 630 static void 631 ptp_ocp_adjtime_coarse(struct ptp_ocp *bp, u64 delta_ns) 632 { 633 struct timespec64 ts; 634 unsigned long flags; 635 int err; 636 637 spin_lock_irqsave(&bp->lock, flags); 638 err = __ptp_ocp_gettime_locked(bp, &ts, NULL); 639 if (likely(!err)) { 640 timespec64_add_ns(&ts, delta_ns); 641 __ptp_ocp_settime_locked(bp, &ts); 642 } 643 spin_unlock_irqrestore(&bp->lock, flags); 644 } 645 646 static int 647 ptp_ocp_adjtime(struct ptp_clock_info *ptp_info, s64 delta_ns) 648 { 649 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 650 unsigned long flags; 651 u32 adj_ns, sign; 652 653 if (delta_ns > NSEC_PER_SEC || -delta_ns > NSEC_PER_SEC) { 654 ptp_ocp_adjtime_coarse(bp, delta_ns); 655 return 0; 656 } 657 658 sign = delta_ns < 0 ? BIT(31) : 0; 659 adj_ns = sign ? -delta_ns : delta_ns; 660 661 spin_lock_irqsave(&bp->lock, flags); 662 __ptp_ocp_adjtime_locked(bp, sign | adj_ns); 663 spin_unlock_irqrestore(&bp->lock, flags); 664 665 return 0; 666 } 667 668 static int 669 ptp_ocp_null_adjfine(struct ptp_clock_info *ptp_info, long scaled_ppm) 670 { 671 if (scaled_ppm == 0) 672 return 0; 673 674 return -EOPNOTSUPP; 675 } 676 677 static int 678 ptp_ocp_null_adjphase(struct ptp_clock_info *ptp_info, s32 phase_ns) 679 { 680 return -EOPNOTSUPP; 681 } 682 683 static int 684 ptp_ocp_enable(struct ptp_clock_info *ptp_info, struct ptp_clock_request *rq, 685 int on) 686 { 687 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 688 struct ptp_ocp_ext_src *ext = NULL; 689 u32 req; 690 int err; 691 692 switch (rq->type) { 693 case PTP_CLK_REQ_EXTTS: 694 req = OCP_REQ_TIMESTAMP; 695 switch (rq->extts.index) { 696 case 0: 697 ext = bp->ts0; 698 break; 699 case 1: 700 ext = bp->ts1; 701 break; 702 case 2: 703 ext = bp->ts2; 704 break; 705 case 3: 706 ext = bp->pps; 707 break; 708 } 709 break; 710 case PTP_CLK_REQ_PPS: 711 req = OCP_REQ_PPS; 712 ext = bp->pps; 713 break; 714 case PTP_CLK_REQ_PEROUT: 715 if (on && 716 (rq->perout.period.sec != 1 || rq->perout.period.nsec != 0)) 717 return -EINVAL; 718 /* This is a request for 1PPS on an output SMA. 719 * Allow, but assume manual configuration. 720 */ 721 return 0; 722 default: 723 return -EOPNOTSUPP; 724 } 725 726 err = -ENXIO; 727 if (ext) 728 err = ext->info->enable(ext, req, on); 729 730 return err; 731 } 732 733 static const struct ptp_clock_info ptp_ocp_clock_info = { 734 .owner = THIS_MODULE, 735 .name = KBUILD_MODNAME, 736 .max_adj = 100000000, 737 .gettimex64 = ptp_ocp_gettimex, 738 .settime64 = ptp_ocp_settime, 739 .adjtime = ptp_ocp_adjtime, 740 .adjfine = ptp_ocp_null_adjfine, 741 .adjphase = ptp_ocp_null_adjphase, 742 .enable = ptp_ocp_enable, 743 .pps = true, 744 .n_ext_ts = 4, 745 .n_per_out = 1, 746 }; 747 748 static void 749 __ptp_ocp_clear_drift_locked(struct ptp_ocp *bp) 750 { 751 u32 ctrl, select; 752 753 select = ioread32(&bp->reg->select); 754 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 755 756 iowrite32(0, &bp->reg->drift_ns); 757 758 ctrl = OCP_CTRL_ADJUST_DRIFT | OCP_CTRL_ENABLE; 759 iowrite32(ctrl, &bp->reg->ctrl); 760 761 /* restore clock selection */ 762 iowrite32(select >> 16, &bp->reg->select); 763 } 764 765 static void 766 ptp_ocp_utc_distribute(struct ptp_ocp *bp, u32 val) 767 { 768 unsigned long flags; 769 770 spin_lock_irqsave(&bp->lock, flags); 771 772 bp->utc_tai_offset = val; 773 774 if (bp->irig_out) 775 iowrite32(val, &bp->irig_out->adj_sec); 776 if (bp->dcf_out) 777 iowrite32(val, &bp->dcf_out->adj_sec); 778 if (bp->nmea_out) 779 iowrite32(val, &bp->nmea_out->adj_sec); 780 781 spin_unlock_irqrestore(&bp->lock, flags); 782 } 783 784 static void 785 ptp_ocp_watchdog(struct timer_list *t) 786 { 787 struct ptp_ocp *bp = from_timer(bp, t, watchdog); 788 unsigned long flags; 789 u32 status, utc_offset; 790 791 status = ioread32(&bp->pps_to_clk->status); 792 793 if (status & PPS_STATUS_SUPERV_ERR) { 794 iowrite32(status, &bp->pps_to_clk->status); 795 if (!bp->gnss_lost) { 796 spin_lock_irqsave(&bp->lock, flags); 797 __ptp_ocp_clear_drift_locked(bp); 798 spin_unlock_irqrestore(&bp->lock, flags); 799 bp->gnss_lost = ktime_get_real_seconds(); 800 } 801 802 } else if (bp->gnss_lost) { 803 bp->gnss_lost = 0; 804 } 805 806 /* if GNSS provides correct data we can rely on 807 * it to get leap second information 808 */ 809 if (bp->tod) { 810 status = ioread32(&bp->tod->utc_status); 811 utc_offset = status & TOD_STATUS_UTC_MASK; 812 if (status & TOD_STATUS_UTC_VALID && 813 utc_offset != bp->utc_tai_offset) 814 ptp_ocp_utc_distribute(bp, utc_offset); 815 } 816 817 mod_timer(&bp->watchdog, jiffies + HZ); 818 } 819 820 static void 821 ptp_ocp_estimate_pci_timing(struct ptp_ocp *bp) 822 { 823 ktime_t start, end; 824 ktime_t delay; 825 u32 ctrl; 826 827 ctrl = ioread32(&bp->reg->ctrl); 828 ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE; 829 830 iowrite32(ctrl, &bp->reg->ctrl); 831 832 start = ktime_get_ns(); 833 834 ctrl = ioread32(&bp->reg->ctrl); 835 836 end = ktime_get_ns(); 837 838 delay = end - start; 839 bp->ts_window_adjust = (delay >> 5) * 3; 840 } 841 842 static int 843 ptp_ocp_init_clock(struct ptp_ocp *bp) 844 { 845 struct timespec64 ts; 846 bool sync; 847 u32 ctrl; 848 849 ctrl = OCP_CTRL_ENABLE; 850 iowrite32(ctrl, &bp->reg->ctrl); 851 852 /* NO DRIFT Correction */ 853 /* offset_p:i 1/8, offset_i: 1/16, drift_p: 0, drift_i: 0 */ 854 iowrite32(0x2000, &bp->reg->servo_offset_p); 855 iowrite32(0x1000, &bp->reg->servo_offset_i); 856 iowrite32(0, &bp->reg->servo_drift_p); 857 iowrite32(0, &bp->reg->servo_drift_i); 858 859 /* latch servo values */ 860 ctrl |= OCP_CTRL_ADJUST_SERVO; 861 iowrite32(ctrl, &bp->reg->ctrl); 862 863 if ((ioread32(&bp->reg->ctrl) & OCP_CTRL_ENABLE) == 0) { 864 dev_err(&bp->pdev->dev, "clock not enabled\n"); 865 return -ENODEV; 866 } 867 868 ptp_ocp_estimate_pci_timing(bp); 869 870 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; 871 if (!sync) { 872 ktime_get_clocktai_ts64(&ts); 873 ptp_ocp_settime(&bp->ptp_info, &ts); 874 } 875 876 /* If there is a clock supervisor, then enable the watchdog */ 877 if (bp->pps_to_clk) { 878 timer_setup(&bp->watchdog, ptp_ocp_watchdog, 0); 879 mod_timer(&bp->watchdog, jiffies + HZ); 880 } 881 882 return 0; 883 } 884 885 static void 886 ptp_ocp_tod_init(struct ptp_ocp *bp) 887 { 888 u32 ctrl, reg; 889 890 ctrl = ioread32(&bp->tod->ctrl); 891 ctrl |= TOD_CTRL_PROTOCOL | TOD_CTRL_ENABLE; 892 ctrl &= ~(TOD_CTRL_DISABLE_FMT_A | TOD_CTRL_DISABLE_FMT_B); 893 iowrite32(ctrl, &bp->tod->ctrl); 894 895 reg = ioread32(&bp->tod->utc_status); 896 if (reg & TOD_STATUS_UTC_VALID) 897 ptp_ocp_utc_distribute(bp, reg & TOD_STATUS_UTC_MASK); 898 } 899 900 static const char * 901 ptp_ocp_tod_proto_name(const int idx) 902 { 903 static const char * const proto_name[] = { 904 "NMEA", "NMEA_ZDA", "NMEA_RMC", "NMEA_none", 905 "UBX", "UBX_UTC", "UBX_LS", "UBX_none" 906 }; 907 return proto_name[idx]; 908 } 909 910 static const char * 911 ptp_ocp_tod_gnss_name(int idx) 912 { 913 static const char * const gnss_name[] = { 914 "ALL", "COMBINED", "GPS", "GLONASS", "GALILEO", "BEIDOU", 915 "Unknown" 916 }; 917 if (idx > ARRAY_SIZE(gnss_name)) 918 idx = ARRAY_SIZE(gnss_name) - 1; 919 return gnss_name[idx]; 920 } 921 922 static int 923 ptp_ocp_firstchild(struct device *dev, void *data) 924 { 925 return 1; 926 } 927 928 static int 929 ptp_ocp_read_i2c(struct i2c_adapter *adap, u8 addr, u8 reg, u8 sz, u8 *data) 930 { 931 struct i2c_msg msgs[2] = { 932 { 933 .addr = addr, 934 .len = 1, 935 .buf = ®, 936 }, 937 { 938 .addr = addr, 939 .flags = I2C_M_RD, 940 .len = 2, 941 .buf = data, 942 }, 943 }; 944 int err; 945 u8 len; 946 947 /* xiic-i2c for some stupid reason only does 2 byte reads. */ 948 while (sz) { 949 len = min_t(u8, sz, 2); 950 msgs[1].len = len; 951 err = i2c_transfer(adap, msgs, 2); 952 if (err != msgs[1].len) 953 return err; 954 msgs[1].buf += len; 955 reg += len; 956 sz -= len; 957 } 958 return 0; 959 } 960 961 static void 962 ptp_ocp_get_serial_number(struct ptp_ocp *bp) 963 { 964 struct i2c_adapter *adap; 965 struct device *dev; 966 int err; 967 968 if (!bp->i2c_ctrl) 969 return; 970 971 dev = device_find_child(&bp->i2c_ctrl->dev, NULL, ptp_ocp_firstchild); 972 if (!dev) { 973 dev_err(&bp->pdev->dev, "Can't find I2C adapter\n"); 974 return; 975 } 976 977 adap = i2c_verify_adapter(dev); 978 if (!adap) { 979 dev_err(&bp->pdev->dev, "device '%s' isn't an I2C adapter\n", 980 dev_name(dev)); 981 goto out; 982 } 983 984 err = ptp_ocp_read_i2c(adap, 0x58, 0x9A, 6, bp->serial); 985 if (err) { 986 dev_err(&bp->pdev->dev, "could not read eeprom: %d\n", err); 987 goto out; 988 } 989 990 bp->has_serial = true; 991 992 out: 993 put_device(dev); 994 } 995 996 static struct device * 997 ptp_ocp_find_flash(struct ptp_ocp *bp) 998 { 999 struct device *dev, *last; 1000 1001 last = NULL; 1002 dev = &bp->spi_flash->dev; 1003 1004 while ((dev = device_find_child(dev, NULL, ptp_ocp_firstchild))) { 1005 if (!strcmp("mtd", dev_bus_name(dev))) 1006 break; 1007 put_device(last); 1008 last = dev; 1009 } 1010 put_device(last); 1011 1012 return dev; 1013 } 1014 1015 static int 1016 ptp_ocp_devlink_flash(struct devlink *devlink, struct device *dev, 1017 const struct firmware *fw) 1018 { 1019 struct mtd_info *mtd = dev_get_drvdata(dev); 1020 struct ptp_ocp *bp = devlink_priv(devlink); 1021 size_t off, len, resid, wrote; 1022 struct erase_info erase; 1023 size_t base, blksz; 1024 int err = 0; 1025 1026 off = 0; 1027 base = bp->flash_start; 1028 blksz = 4096; 1029 resid = fw->size; 1030 1031 while (resid) { 1032 devlink_flash_update_status_notify(devlink, "Flashing", 1033 NULL, off, fw->size); 1034 1035 len = min_t(size_t, resid, blksz); 1036 erase.addr = base + off; 1037 erase.len = blksz; 1038 1039 err = mtd_erase(mtd, &erase); 1040 if (err) 1041 goto out; 1042 1043 err = mtd_write(mtd, base + off, len, &wrote, &fw->data[off]); 1044 if (err) 1045 goto out; 1046 1047 off += blksz; 1048 resid -= len; 1049 } 1050 out: 1051 return err; 1052 } 1053 1054 static int 1055 ptp_ocp_devlink_flash_update(struct devlink *devlink, 1056 struct devlink_flash_update_params *params, 1057 struct netlink_ext_ack *extack) 1058 { 1059 struct ptp_ocp *bp = devlink_priv(devlink); 1060 struct device *dev; 1061 const char *msg; 1062 int err; 1063 1064 dev = ptp_ocp_find_flash(bp); 1065 if (!dev) { 1066 dev_err(&bp->pdev->dev, "Can't find Flash SPI adapter\n"); 1067 return -ENODEV; 1068 } 1069 1070 devlink_flash_update_status_notify(devlink, "Preparing to flash", 1071 NULL, 0, 0); 1072 1073 err = ptp_ocp_devlink_flash(devlink, dev, params->fw); 1074 1075 msg = err ? "Flash error" : "Flash complete"; 1076 devlink_flash_update_status_notify(devlink, msg, NULL, 0, 0); 1077 1078 put_device(dev); 1079 return err; 1080 } 1081 1082 static int 1083 ptp_ocp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req, 1084 struct netlink_ext_ack *extack) 1085 { 1086 struct ptp_ocp *bp = devlink_priv(devlink); 1087 char buf[32]; 1088 int err; 1089 1090 err = devlink_info_driver_name_put(req, KBUILD_MODNAME); 1091 if (err) 1092 return err; 1093 1094 if (bp->image) { 1095 u32 ver = ioread32(&bp->image->version); 1096 1097 if (ver & 0xffff) { 1098 sprintf(buf, "%d", ver); 1099 err = devlink_info_version_running_put(req, 1100 "fw", 1101 buf); 1102 } else { 1103 sprintf(buf, "%d", ver >> 16); 1104 err = devlink_info_version_running_put(req, 1105 "loader", 1106 buf); 1107 } 1108 if (err) 1109 return err; 1110 } 1111 1112 if (!bp->has_serial) 1113 ptp_ocp_get_serial_number(bp); 1114 1115 if (bp->has_serial) { 1116 sprintf(buf, "%pM", bp->serial); 1117 err = devlink_info_serial_number_put(req, buf); 1118 if (err) 1119 return err; 1120 } 1121 1122 return 0; 1123 } 1124 1125 static const struct devlink_ops ptp_ocp_devlink_ops = { 1126 .flash_update = ptp_ocp_devlink_flash_update, 1127 .info_get = ptp_ocp_devlink_info_get, 1128 }; 1129 1130 static void __iomem * 1131 __ptp_ocp_get_mem(struct ptp_ocp *bp, unsigned long start, int size) 1132 { 1133 struct resource res = DEFINE_RES_MEM_NAMED(start, size, "ptp_ocp"); 1134 1135 return devm_ioremap_resource(&bp->pdev->dev, &res); 1136 } 1137 1138 static void __iomem * 1139 ptp_ocp_get_mem(struct ptp_ocp *bp, struct ocp_resource *r) 1140 { 1141 unsigned long start; 1142 1143 start = pci_resource_start(bp->pdev, 0) + r->offset; 1144 return __ptp_ocp_get_mem(bp, start, r->size); 1145 } 1146 1147 static void 1148 ptp_ocp_set_irq_resource(struct resource *res, int irq) 1149 { 1150 struct resource r = DEFINE_RES_IRQ(irq); 1151 *res = r; 1152 } 1153 1154 static void 1155 ptp_ocp_set_mem_resource(struct resource *res, unsigned long start, int size) 1156 { 1157 struct resource r = DEFINE_RES_MEM(start, size); 1158 *res = r; 1159 } 1160 1161 static int 1162 ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r) 1163 { 1164 struct ptp_ocp_flash_info *info; 1165 struct pci_dev *pdev = bp->pdev; 1166 struct platform_device *p; 1167 struct resource res[2]; 1168 unsigned long start; 1169 int id; 1170 1171 start = pci_resource_start(pdev, 0) + r->offset; 1172 ptp_ocp_set_mem_resource(&res[0], start, r->size); 1173 ptp_ocp_set_irq_resource(&res[1], pci_irq_vector(pdev, r->irq_vec)); 1174 1175 info = r->extra; 1176 id = pci_dev_id(pdev) << 1; 1177 id += info->pci_offset; 1178 1179 p = platform_device_register_resndata(&pdev->dev, info->name, id, 1180 res, 2, info->data, 1181 info->data_size); 1182 if (IS_ERR(p)) 1183 return PTR_ERR(p); 1184 1185 bp_assign_entry(bp, r, p); 1186 1187 return 0; 1188 } 1189 1190 static struct platform_device * 1191 ptp_ocp_i2c_bus(struct pci_dev *pdev, struct ocp_resource *r, int id) 1192 { 1193 struct ptp_ocp_i2c_info *info; 1194 struct resource res[2]; 1195 unsigned long start; 1196 1197 info = r->extra; 1198 start = pci_resource_start(pdev, 0) + r->offset; 1199 ptp_ocp_set_mem_resource(&res[0], start, r->size); 1200 ptp_ocp_set_irq_resource(&res[1], pci_irq_vector(pdev, r->irq_vec)); 1201 1202 return platform_device_register_resndata(&pdev->dev, info->name, 1203 id, res, 2, 1204 info->data, info->data_size); 1205 } 1206 1207 static int 1208 ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r) 1209 { 1210 struct pci_dev *pdev = bp->pdev; 1211 struct ptp_ocp_i2c_info *info; 1212 struct platform_device *p; 1213 struct clk_hw *clk; 1214 char buf[32]; 1215 int id; 1216 1217 info = r->extra; 1218 id = pci_dev_id(bp->pdev); 1219 1220 sprintf(buf, "AXI.%d", id); 1221 clk = clk_hw_register_fixed_rate(&pdev->dev, buf, NULL, 0, 1222 info->fixed_rate); 1223 if (IS_ERR(clk)) 1224 return PTR_ERR(clk); 1225 bp->i2c_clk = clk; 1226 1227 sprintf(buf, "%s.%d", info->name, id); 1228 devm_clk_hw_register_clkdev(&pdev->dev, clk, NULL, buf); 1229 p = ptp_ocp_i2c_bus(bp->pdev, r, id); 1230 if (IS_ERR(p)) 1231 return PTR_ERR(p); 1232 1233 bp_assign_entry(bp, r, p); 1234 1235 return 0; 1236 } 1237 1238 static irqreturn_t 1239 ptp_ocp_ts_irq(int irq, void *priv) 1240 { 1241 struct ptp_ocp_ext_src *ext = priv; 1242 struct ts_reg __iomem *reg = ext->mem; 1243 struct ptp_clock_event ev; 1244 u32 sec, nsec; 1245 1246 if (ext == ext->bp->pps) { 1247 if (ext->bp->pps_req_map & OCP_REQ_PPS) { 1248 ev.type = PTP_CLOCK_PPS; 1249 ptp_clock_event(ext->bp->ptp, &ev); 1250 } 1251 1252 if ((ext->bp->pps_req_map & ~OCP_REQ_PPS) == 0) 1253 goto out; 1254 } 1255 1256 /* XXX should fix API - this converts s/ns -> ts -> s/ns */ 1257 sec = ioread32(®->time_sec); 1258 nsec = ioread32(®->time_ns); 1259 1260 ev.type = PTP_CLOCK_EXTTS; 1261 ev.index = ext->info->index; 1262 ev.timestamp = sec * NSEC_PER_SEC + nsec; 1263 1264 ptp_clock_event(ext->bp->ptp, &ev); 1265 1266 out: 1267 iowrite32(1, ®->intr); /* write 1 to ack */ 1268 1269 return IRQ_HANDLED; 1270 } 1271 1272 static int 1273 ptp_ocp_ts_enable(void *priv, u32 req, bool enable) 1274 { 1275 struct ptp_ocp_ext_src *ext = priv; 1276 struct ts_reg __iomem *reg = ext->mem; 1277 struct ptp_ocp *bp = ext->bp; 1278 1279 if (ext == bp->pps) { 1280 u32 old_map = bp->pps_req_map; 1281 1282 if (enable) 1283 bp->pps_req_map |= req; 1284 else 1285 bp->pps_req_map &= ~req; 1286 1287 /* if no state change, just return */ 1288 if ((!!old_map ^ !!bp->pps_req_map) == 0) 1289 return 0; 1290 } 1291 1292 if (enable) { 1293 iowrite32(1, ®->enable); 1294 iowrite32(1, ®->intr_mask); 1295 iowrite32(1, ®->intr); 1296 } else { 1297 iowrite32(0, ®->intr_mask); 1298 iowrite32(0, ®->enable); 1299 } 1300 1301 return 0; 1302 } 1303 1304 static void 1305 ptp_ocp_unregister_ext(struct ptp_ocp_ext_src *ext) 1306 { 1307 ext->info->enable(ext, ~0, false); 1308 pci_free_irq(ext->bp->pdev, ext->irq_vec, ext); 1309 kfree(ext); 1310 } 1311 1312 static int 1313 ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r) 1314 { 1315 struct pci_dev *pdev = bp->pdev; 1316 struct ptp_ocp_ext_src *ext; 1317 int err; 1318 1319 ext = kzalloc(sizeof(*ext), GFP_KERNEL); 1320 if (!ext) 1321 return -ENOMEM; 1322 1323 ext->mem = ptp_ocp_get_mem(bp, r); 1324 if (IS_ERR(ext->mem)) { 1325 err = PTR_ERR(ext->mem); 1326 goto out; 1327 } 1328 1329 ext->bp = bp; 1330 ext->info = r->extra; 1331 ext->irq_vec = r->irq_vec; 1332 1333 err = pci_request_irq(pdev, r->irq_vec, ext->info->irq_fcn, NULL, 1334 ext, "ocp%d.%s", bp->id, r->name); 1335 if (err) { 1336 dev_err(&pdev->dev, "Could not get irq %d\n", r->irq_vec); 1337 goto out; 1338 } 1339 1340 bp_assign_entry(bp, r, ext); 1341 1342 return 0; 1343 1344 out: 1345 kfree(ext); 1346 return err; 1347 } 1348 1349 static int 1350 ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r) 1351 { 1352 struct pci_dev *pdev = bp->pdev; 1353 struct uart_8250_port uart; 1354 1355 /* Setting UPF_IOREMAP and leaving port.membase unspecified lets 1356 * the serial port device claim and release the pci resource. 1357 */ 1358 memset(&uart, 0, sizeof(uart)); 1359 uart.port.dev = &pdev->dev; 1360 uart.port.iotype = UPIO_MEM; 1361 uart.port.regshift = 2; 1362 uart.port.mapbase = pci_resource_start(pdev, 0) + r->offset; 1363 uart.port.irq = pci_irq_vector(pdev, r->irq_vec); 1364 uart.port.uartclk = 50000000; 1365 uart.port.flags = UPF_FIXED_TYPE | UPF_IOREMAP; 1366 uart.port.type = PORT_16550A; 1367 1368 return serial8250_register_8250_port(&uart); 1369 } 1370 1371 static int 1372 ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r) 1373 { 1374 int port; 1375 1376 port = ptp_ocp_serial_line(bp, r); 1377 if (port < 0) 1378 return port; 1379 1380 bp_assign_entry(bp, r, port); 1381 1382 return 0; 1383 } 1384 1385 static int 1386 ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r) 1387 { 1388 void __iomem *mem; 1389 1390 mem = ptp_ocp_get_mem(bp, r); 1391 if (IS_ERR(mem)) 1392 return PTR_ERR(mem); 1393 1394 bp_assign_entry(bp, r, mem); 1395 1396 return 0; 1397 } 1398 1399 static void 1400 ptp_ocp_nmea_out_init(struct ptp_ocp *bp) 1401 { 1402 if (!bp->nmea_out) 1403 return; 1404 1405 iowrite32(0, &bp->nmea_out->ctrl); /* disable */ 1406 iowrite32(7, &bp->nmea_out->uart_baud); /* 115200 */ 1407 iowrite32(1, &bp->nmea_out->ctrl); /* enable */ 1408 } 1409 1410 /* FB specific board initializers; last "resource" registered. */ 1411 static int 1412 ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r) 1413 { 1414 bp->flash_start = 1024 * 4096; 1415 1416 ptp_ocp_tod_init(bp); 1417 ptp_ocp_nmea_out_init(bp); 1418 1419 return ptp_ocp_init_clock(bp); 1420 } 1421 1422 static bool 1423 ptp_ocp_allow_irq(struct ptp_ocp *bp, struct ocp_resource *r) 1424 { 1425 bool allow = !r->irq_vec || r->irq_vec < bp->n_irqs; 1426 1427 if (!allow) 1428 dev_err(&bp->pdev->dev, "irq %d out of range, skipping %s\n", 1429 r->irq_vec, r->name); 1430 return allow; 1431 } 1432 1433 static int 1434 ptp_ocp_register_resources(struct ptp_ocp *bp, kernel_ulong_t driver_data) 1435 { 1436 struct ocp_resource *r, *table; 1437 int err = 0; 1438 1439 table = (struct ocp_resource *)driver_data; 1440 for (r = table; r->setup; r++) { 1441 if (!ptp_ocp_allow_irq(bp, r)) 1442 continue; 1443 err = r->setup(bp, r); 1444 if (err) { 1445 dev_err(&bp->pdev->dev, 1446 "Could not register %s: err %d\n", 1447 r->name, err); 1448 break; 1449 } 1450 } 1451 return err; 1452 } 1453 1454 static void 1455 ptp_ocp_enable_fpga(u32 __iomem *reg, u32 bit, bool enable) 1456 { 1457 u32 ctrl; 1458 bool on; 1459 1460 ctrl = ioread32(reg); 1461 on = ctrl & bit; 1462 if (on ^ enable) { 1463 ctrl &= ~bit; 1464 ctrl |= enable ? bit : 0; 1465 iowrite32(ctrl, reg); 1466 } 1467 } 1468 1469 static void 1470 ptp_ocp_irig_out(struct ptp_ocp *bp, bool enable) 1471 { 1472 return ptp_ocp_enable_fpga(&bp->irig_out->ctrl, 1473 IRIG_M_CTRL_ENABLE, enable); 1474 } 1475 1476 static void 1477 ptp_ocp_irig_in(struct ptp_ocp *bp, bool enable) 1478 { 1479 return ptp_ocp_enable_fpga(&bp->irig_in->ctrl, 1480 IRIG_S_CTRL_ENABLE, enable); 1481 } 1482 1483 static void 1484 ptp_ocp_dcf_out(struct ptp_ocp *bp, bool enable) 1485 { 1486 return ptp_ocp_enable_fpga(&bp->dcf_out->ctrl, 1487 DCF_M_CTRL_ENABLE, enable); 1488 } 1489 1490 static void 1491 ptp_ocp_dcf_in(struct ptp_ocp *bp, bool enable) 1492 { 1493 return ptp_ocp_enable_fpga(&bp->dcf_in->ctrl, 1494 DCF_S_CTRL_ENABLE, enable); 1495 } 1496 1497 static void 1498 __handle_signal_outputs(struct ptp_ocp *bp, u32 val) 1499 { 1500 ptp_ocp_irig_out(bp, val & 0x00100010); 1501 ptp_ocp_dcf_out(bp, val & 0x00200020); 1502 } 1503 1504 static void 1505 __handle_signal_inputs(struct ptp_ocp *bp, u32 val) 1506 { 1507 ptp_ocp_irig_in(bp, val & 0x00100010); 1508 ptp_ocp_dcf_in(bp, val & 0x00200020); 1509 } 1510 1511 /* 1512 * ANT0 == gps (in) 1513 * ANT1 == sma1 (in) 1514 * ANT2 == sma2 (in) 1515 * ANT3 == sma3 (out) 1516 * ANT4 == sma4 (out) 1517 */ 1518 1519 enum ptp_ocp_sma_mode { 1520 SMA_MODE_IN, 1521 SMA_MODE_OUT, 1522 }; 1523 1524 static struct ptp_ocp_sma_connector { 1525 enum ptp_ocp_sma_mode mode; 1526 bool fixed_mode; 1527 u16 default_out_idx; 1528 } ptp_ocp_sma_map[4] = { 1529 { 1530 .mode = SMA_MODE_IN, 1531 .fixed_mode = true, 1532 }, 1533 { 1534 .mode = SMA_MODE_IN, 1535 .fixed_mode = true, 1536 }, 1537 { 1538 .mode = SMA_MODE_OUT, 1539 .fixed_mode = true, 1540 .default_out_idx = 0, /* 10Mhz */ 1541 }, 1542 { 1543 .mode = SMA_MODE_OUT, 1544 .fixed_mode = true, 1545 .default_out_idx = 1, /* PHC */ 1546 }, 1547 }; 1548 1549 static ssize_t 1550 ptp_ocp_show_output(u32 val, char *buf, int default_idx) 1551 { 1552 const char *name; 1553 ssize_t count; 1554 1555 count = sysfs_emit(buf, "OUT: "); 1556 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_out, val); 1557 if (!name) 1558 name = ptp_ocp_sma_out[default_idx].name; 1559 count += sysfs_emit_at(buf, count, "%s\n", name); 1560 return count; 1561 } 1562 1563 static ssize_t 1564 ptp_ocp_show_inputs(u32 val, char *buf, const char *zero_in) 1565 { 1566 const char *name; 1567 ssize_t count; 1568 int i; 1569 1570 count = sysfs_emit(buf, "IN: "); 1571 for (i = 0; i < ARRAY_SIZE(ptp_ocp_sma_in); i++) { 1572 if (val & ptp_ocp_sma_in[i].value) { 1573 name = ptp_ocp_sma_in[i].name; 1574 count += sysfs_emit_at(buf, count, "%s ", name); 1575 } 1576 } 1577 if (!val && zero_in) 1578 count += sysfs_emit_at(buf, count, "%s ", zero_in); 1579 if (count) 1580 count--; 1581 count += sysfs_emit_at(buf, count, "\n"); 1582 return count; 1583 } 1584 1585 static int 1586 sma_parse_inputs(const char *buf, enum ptp_ocp_sma_mode *mode) 1587 { 1588 struct ocp_selector *tbl[] = { ptp_ocp_sma_in, ptp_ocp_sma_out }; 1589 int idx, count, dir; 1590 char **argv; 1591 int ret; 1592 1593 argv = argv_split(GFP_KERNEL, buf, &count); 1594 if (!argv) 1595 return -ENOMEM; 1596 1597 ret = -EINVAL; 1598 if (!count) 1599 goto out; 1600 1601 idx = 0; 1602 dir = *mode == SMA_MODE_IN ? 0 : 1; 1603 if (!strcasecmp("IN:", argv[idx])) { 1604 dir = 0; 1605 idx++; 1606 } 1607 if (!strcasecmp("OUT:", argv[0])) { 1608 dir = 1; 1609 idx++; 1610 } 1611 *mode = dir == 0 ? SMA_MODE_IN : SMA_MODE_OUT; 1612 1613 ret = 0; 1614 for (; idx < count; idx++) 1615 ret |= ptp_ocp_select_val_from_name(tbl[dir], argv[idx]); 1616 if (ret < 0) 1617 ret = -EINVAL; 1618 1619 out: 1620 argv_free(argv); 1621 return ret; 1622 } 1623 1624 static ssize_t 1625 ptp_ocp_sma_show(struct ptp_ocp *bp, int sma_nr, u32 val, char *buf, 1626 const char *zero_in) 1627 { 1628 struct ptp_ocp_sma_connector *sma = &ptp_ocp_sma_map[sma_nr - 1]; 1629 1630 if (sma->mode == SMA_MODE_IN) 1631 return ptp_ocp_show_inputs(val, buf, zero_in); 1632 1633 return ptp_ocp_show_output(val, buf, sma->default_out_idx); 1634 } 1635 1636 static ssize_t 1637 sma1_show(struct device *dev, struct device_attribute *attr, char *buf) 1638 { 1639 struct ptp_ocp *bp = dev_get_drvdata(dev); 1640 u32 val; 1641 1642 val = ioread32(&bp->sma->gpio1) & 0x3f; 1643 return ptp_ocp_sma_show(bp, 1, val, buf, ptp_ocp_sma_in[0].name); 1644 } 1645 1646 static ssize_t 1647 sma2_show(struct device *dev, struct device_attribute *attr, char *buf) 1648 { 1649 struct ptp_ocp *bp = dev_get_drvdata(dev); 1650 u32 val; 1651 1652 val = (ioread32(&bp->sma->gpio1) >> 16) & 0x3f; 1653 return ptp_ocp_sma_show(bp, 2, val, buf, NULL); 1654 } 1655 1656 static ssize_t 1657 sma3_show(struct device *dev, struct device_attribute *attr, char *buf) 1658 { 1659 struct ptp_ocp *bp = dev_get_drvdata(dev); 1660 u32 val; 1661 1662 val = ioread32(&bp->sma->gpio2) & 0x3f; 1663 return ptp_ocp_sma_show(bp, 3, val, buf, NULL); 1664 } 1665 1666 static ssize_t 1667 sma4_show(struct device *dev, struct device_attribute *attr, char *buf) 1668 { 1669 struct ptp_ocp *bp = dev_get_drvdata(dev); 1670 u32 val; 1671 1672 val = (ioread32(&bp->sma->gpio2) >> 16) & 0x3f; 1673 return ptp_ocp_sma_show(bp, 4, val, buf, NULL); 1674 } 1675 1676 static void 1677 ptp_ocp_sma_store_output(struct ptp_ocp *bp, u32 val, u32 shift) 1678 { 1679 unsigned long flags; 1680 u32 gpio, mask; 1681 1682 mask = 0xffff << (16 - shift); 1683 1684 spin_lock_irqsave(&bp->lock, flags); 1685 1686 gpio = ioread32(&bp->sma->gpio2); 1687 gpio = (gpio & mask) | (val << shift); 1688 1689 __handle_signal_outputs(bp, gpio); 1690 1691 iowrite32(gpio, &bp->sma->gpio2); 1692 1693 spin_unlock_irqrestore(&bp->lock, flags); 1694 } 1695 1696 static void 1697 ptp_ocp_sma_store_inputs(struct ptp_ocp *bp, u32 val, u32 shift) 1698 { 1699 unsigned long flags; 1700 u32 gpio, mask; 1701 1702 mask = 0xffff << (16 - shift); 1703 1704 spin_lock_irqsave(&bp->lock, flags); 1705 1706 gpio = ioread32(&bp->sma->gpio1); 1707 gpio = (gpio & mask) | (val << shift); 1708 1709 __handle_signal_inputs(bp, gpio); 1710 1711 iowrite32(gpio, &bp->sma->gpio1); 1712 1713 spin_unlock_irqrestore(&bp->lock, flags); 1714 } 1715 1716 static ssize_t 1717 ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr, u32 shift) 1718 { 1719 struct ptp_ocp_sma_connector *sma = &ptp_ocp_sma_map[sma_nr - 1]; 1720 enum ptp_ocp_sma_mode mode; 1721 int val; 1722 1723 mode = sma->mode; 1724 val = sma_parse_inputs(buf, &mode); 1725 if (val < 0) 1726 return val; 1727 1728 if (mode != sma->mode && sma->fixed_mode) 1729 return -EOPNOTSUPP; 1730 1731 if (mode != sma->mode) { 1732 pr_err("Mode changes not supported yet.\n"); 1733 return -EOPNOTSUPP; 1734 } 1735 1736 if (sma->mode == SMA_MODE_IN) 1737 ptp_ocp_sma_store_inputs(bp, val, shift); 1738 else 1739 ptp_ocp_sma_store_output(bp, val, shift); 1740 1741 return 0; 1742 } 1743 1744 static ssize_t 1745 sma1_store(struct device *dev, struct device_attribute *attr, 1746 const char *buf, size_t count) 1747 { 1748 struct ptp_ocp *bp = dev_get_drvdata(dev); 1749 int err; 1750 1751 err = ptp_ocp_sma_store(bp, buf, 1, 0); 1752 return err ? err : count; 1753 } 1754 1755 static ssize_t 1756 sma2_store(struct device *dev, struct device_attribute *attr, 1757 const char *buf, size_t count) 1758 { 1759 struct ptp_ocp *bp = dev_get_drvdata(dev); 1760 int err; 1761 1762 err = ptp_ocp_sma_store(bp, buf, 2, 16); 1763 return err ? err : count; 1764 } 1765 1766 static ssize_t 1767 sma3_store(struct device *dev, struct device_attribute *attr, 1768 const char *buf, size_t count) 1769 { 1770 struct ptp_ocp *bp = dev_get_drvdata(dev); 1771 int err; 1772 1773 err = ptp_ocp_sma_store(bp, buf, 3, 0); 1774 return err ? err : count; 1775 } 1776 1777 static ssize_t 1778 sma4_store(struct device *dev, struct device_attribute *attr, 1779 const char *buf, size_t count) 1780 { 1781 struct ptp_ocp *bp = dev_get_drvdata(dev); 1782 int err; 1783 1784 err = ptp_ocp_sma_store(bp, buf, 4, 16); 1785 return err ? err : count; 1786 } 1787 static DEVICE_ATTR_RW(sma1); 1788 static DEVICE_ATTR_RW(sma2); 1789 static DEVICE_ATTR_RW(sma3); 1790 static DEVICE_ATTR_RW(sma4); 1791 1792 static ssize_t 1793 available_sma_inputs_show(struct device *dev, 1794 struct device_attribute *attr, char *buf) 1795 { 1796 return ptp_ocp_select_table_show(ptp_ocp_sma_in, buf); 1797 } 1798 static DEVICE_ATTR_RO(available_sma_inputs); 1799 1800 static ssize_t 1801 available_sma_outputs_show(struct device *dev, 1802 struct device_attribute *attr, char *buf) 1803 { 1804 return ptp_ocp_select_table_show(ptp_ocp_sma_out, buf); 1805 } 1806 static DEVICE_ATTR_RO(available_sma_outputs); 1807 1808 static ssize_t 1809 serialnum_show(struct device *dev, struct device_attribute *attr, char *buf) 1810 { 1811 struct ptp_ocp *bp = dev_get_drvdata(dev); 1812 1813 if (!bp->has_serial) 1814 ptp_ocp_get_serial_number(bp); 1815 1816 return sysfs_emit(buf, "%pM\n", bp->serial); 1817 } 1818 static DEVICE_ATTR_RO(serialnum); 1819 1820 static ssize_t 1821 gnss_sync_show(struct device *dev, struct device_attribute *attr, char *buf) 1822 { 1823 struct ptp_ocp *bp = dev_get_drvdata(dev); 1824 ssize_t ret; 1825 1826 if (bp->gnss_lost) 1827 ret = sysfs_emit(buf, "LOST @ %ptT\n", &bp->gnss_lost); 1828 else 1829 ret = sysfs_emit(buf, "SYNC\n"); 1830 1831 return ret; 1832 } 1833 static DEVICE_ATTR_RO(gnss_sync); 1834 1835 static ssize_t 1836 utc_tai_offset_show(struct device *dev, 1837 struct device_attribute *attr, char *buf) 1838 { 1839 struct ptp_ocp *bp = dev_get_drvdata(dev); 1840 1841 return sysfs_emit(buf, "%d\n", bp->utc_tai_offset); 1842 } 1843 1844 static ssize_t 1845 utc_tai_offset_store(struct device *dev, 1846 struct device_attribute *attr, 1847 const char *buf, size_t count) 1848 { 1849 struct ptp_ocp *bp = dev_get_drvdata(dev); 1850 int err; 1851 u32 val; 1852 1853 err = kstrtou32(buf, 0, &val); 1854 if (err) 1855 return err; 1856 1857 ptp_ocp_utc_distribute(bp, val); 1858 1859 return count; 1860 } 1861 static DEVICE_ATTR_RW(utc_tai_offset); 1862 1863 static ssize_t 1864 ts_window_adjust_show(struct device *dev, 1865 struct device_attribute *attr, char *buf) 1866 { 1867 struct ptp_ocp *bp = dev_get_drvdata(dev); 1868 1869 return sysfs_emit(buf, "%d\n", bp->ts_window_adjust); 1870 } 1871 1872 static ssize_t 1873 ts_window_adjust_store(struct device *dev, 1874 struct device_attribute *attr, 1875 const char *buf, size_t count) 1876 { 1877 struct ptp_ocp *bp = dev_get_drvdata(dev); 1878 int err; 1879 u32 val; 1880 1881 err = kstrtou32(buf, 0, &val); 1882 if (err) 1883 return err; 1884 1885 bp->ts_window_adjust = val; 1886 1887 return count; 1888 } 1889 static DEVICE_ATTR_RW(ts_window_adjust); 1890 1891 static ssize_t 1892 irig_b_mode_show(struct device *dev, struct device_attribute *attr, char *buf) 1893 { 1894 struct ptp_ocp *bp = dev_get_drvdata(dev); 1895 u32 val; 1896 1897 val = ioread32(&bp->irig_out->ctrl); 1898 val = (val >> 16) & 0x07; 1899 return sysfs_emit(buf, "%d\n", val); 1900 } 1901 1902 static ssize_t 1903 irig_b_mode_store(struct device *dev, 1904 struct device_attribute *attr, 1905 const char *buf, size_t count) 1906 { 1907 struct ptp_ocp *bp = dev_get_drvdata(dev); 1908 unsigned long flags; 1909 int err; 1910 u32 reg; 1911 u8 val; 1912 1913 err = kstrtou8(buf, 0, &val); 1914 if (err) 1915 return err; 1916 if (val > 7) 1917 return -EINVAL; 1918 1919 reg = ((val & 0x7) << 16); 1920 1921 spin_lock_irqsave(&bp->lock, flags); 1922 iowrite32(0, &bp->irig_out->ctrl); /* disable */ 1923 iowrite32(reg, &bp->irig_out->ctrl); /* change mode */ 1924 iowrite32(reg | IRIG_M_CTRL_ENABLE, &bp->irig_out->ctrl); 1925 spin_unlock_irqrestore(&bp->lock, flags); 1926 1927 return count; 1928 } 1929 static DEVICE_ATTR_RW(irig_b_mode); 1930 1931 static ssize_t 1932 clock_source_show(struct device *dev, struct device_attribute *attr, char *buf) 1933 { 1934 struct ptp_ocp *bp = dev_get_drvdata(dev); 1935 const char *p; 1936 u32 select; 1937 1938 select = ioread32(&bp->reg->select); 1939 p = ptp_ocp_select_name_from_val(ptp_ocp_clock, select >> 16); 1940 1941 return sysfs_emit(buf, "%s\n", p); 1942 } 1943 1944 static ssize_t 1945 clock_source_store(struct device *dev, struct device_attribute *attr, 1946 const char *buf, size_t count) 1947 { 1948 struct ptp_ocp *bp = dev_get_drvdata(dev); 1949 unsigned long flags; 1950 int val; 1951 1952 val = ptp_ocp_select_val_from_name(ptp_ocp_clock, buf); 1953 if (val < 0) 1954 return val; 1955 1956 spin_lock_irqsave(&bp->lock, flags); 1957 iowrite32(val, &bp->reg->select); 1958 spin_unlock_irqrestore(&bp->lock, flags); 1959 1960 return count; 1961 } 1962 static DEVICE_ATTR_RW(clock_source); 1963 1964 static ssize_t 1965 available_clock_sources_show(struct device *dev, 1966 struct device_attribute *attr, char *buf) 1967 { 1968 return ptp_ocp_select_table_show(ptp_ocp_clock, buf); 1969 } 1970 static DEVICE_ATTR_RO(available_clock_sources); 1971 1972 static ssize_t 1973 clock_status_drift_show(struct device *dev, 1974 struct device_attribute *attr, char *buf) 1975 { 1976 struct ptp_ocp *bp = dev_get_drvdata(dev); 1977 u32 val; 1978 int res; 1979 1980 val = ioread32(&bp->reg->status_drift); 1981 res = (val & ~INT_MAX) ? -1 : 1; 1982 res *= (val & INT_MAX); 1983 return sysfs_emit(buf, "%d\n", res); 1984 } 1985 static DEVICE_ATTR_RO(clock_status_drift); 1986 1987 static ssize_t 1988 clock_status_offset_show(struct device *dev, 1989 struct device_attribute *attr, char *buf) 1990 { 1991 struct ptp_ocp *bp = dev_get_drvdata(dev); 1992 u32 val; 1993 int res; 1994 1995 val = ioread32(&bp->reg->status_offset); 1996 res = (val & ~INT_MAX) ? -1 : 1; 1997 res *= (val & INT_MAX); 1998 return sysfs_emit(buf, "%d\n", res); 1999 } 2000 static DEVICE_ATTR_RO(clock_status_offset); 2001 2002 static ssize_t 2003 tod_correction_show(struct device *dev, 2004 struct device_attribute *attr, char *buf) 2005 { 2006 struct ptp_ocp *bp = dev_get_drvdata(dev); 2007 u32 val; 2008 int res; 2009 2010 val = ioread32(&bp->tod->adj_sec); 2011 res = (val & ~INT_MAX) ? -1 : 1; 2012 res *= (val & INT_MAX); 2013 return sysfs_emit(buf, "%d\n", res); 2014 } 2015 2016 static ssize_t 2017 tod_correction_store(struct device *dev, struct device_attribute *attr, 2018 const char *buf, size_t count) 2019 { 2020 struct ptp_ocp *bp = dev_get_drvdata(dev); 2021 unsigned long flags; 2022 int err, res; 2023 u32 val = 0; 2024 2025 err = kstrtos32(buf, 0, &res); 2026 if (err) 2027 return err; 2028 if (res < 0) { 2029 res *= -1; 2030 val |= BIT(31); 2031 } 2032 val |= res; 2033 2034 spin_lock_irqsave(&bp->lock, flags); 2035 iowrite32(val, &bp->tod->adj_sec); 2036 spin_unlock_irqrestore(&bp->lock, flags); 2037 2038 return count; 2039 } 2040 static DEVICE_ATTR_RW(tod_correction); 2041 2042 static struct attribute *timecard_attrs[] = { 2043 &dev_attr_serialnum.attr, 2044 &dev_attr_gnss_sync.attr, 2045 &dev_attr_clock_source.attr, 2046 &dev_attr_available_clock_sources.attr, 2047 &dev_attr_sma1.attr, 2048 &dev_attr_sma2.attr, 2049 &dev_attr_sma3.attr, 2050 &dev_attr_sma4.attr, 2051 &dev_attr_available_sma_inputs.attr, 2052 &dev_attr_available_sma_outputs.attr, 2053 &dev_attr_clock_status_drift.attr, 2054 &dev_attr_clock_status_offset.attr, 2055 &dev_attr_irig_b_mode.attr, 2056 &dev_attr_utc_tai_offset.attr, 2057 &dev_attr_ts_window_adjust.attr, 2058 &dev_attr_tod_correction.attr, 2059 NULL, 2060 }; 2061 ATTRIBUTE_GROUPS(timecard); 2062 2063 static const char * 2064 gpio_map(u32 gpio, u32 bit, const char *pri, const char *sec, const char *def) 2065 { 2066 const char *ans; 2067 2068 if (gpio & (1 << bit)) 2069 ans = pri; 2070 else if (gpio & (1 << (bit + 16))) 2071 ans = sec; 2072 else 2073 ans = def; 2074 return ans; 2075 } 2076 2077 static void 2078 gpio_multi_map(char *buf, u32 gpio, u32 bit, 2079 const char *pri, const char *sec, const char *def) 2080 { 2081 char *ans = buf; 2082 2083 strcpy(ans, def); 2084 if (gpio & (1 << bit)) 2085 ans += sprintf(ans, "%s ", pri); 2086 if (gpio & (1 << (bit + 16))) 2087 ans += sprintf(ans, "%s ", sec); 2088 } 2089 2090 static int 2091 ptp_ocp_summary_show(struct seq_file *s, void *data) 2092 { 2093 struct device *dev = s->private; 2094 struct ptp_system_timestamp sts; 2095 u32 sma_in, sma_out, ctrl, val; 2096 struct ts_reg __iomem *ts_reg; 2097 struct timespec64 ts; 2098 struct ptp_ocp *bp; 2099 const char *src; 2100 bool on, map; 2101 char *buf; 2102 2103 buf = (char *)__get_free_page(GFP_KERNEL); 2104 if (!buf) 2105 return -ENOMEM; 2106 2107 bp = dev_get_drvdata(dev); 2108 sma_in = ioread32(&bp->sma->gpio1); 2109 sma_out = ioread32(&bp->sma->gpio2); 2110 2111 seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp)); 2112 2113 sma1_show(dev, NULL, buf); 2114 seq_printf(s, " sma1: %s", buf); 2115 2116 sma2_show(dev, NULL, buf); 2117 seq_printf(s, " sma2: %s", buf); 2118 2119 sma3_show(dev, NULL, buf); 2120 seq_printf(s, " sma3: %s", buf); 2121 2122 sma4_show(dev, NULL, buf); 2123 seq_printf(s, " sma4: %s", buf); 2124 2125 if (bp->ts0) { 2126 ts_reg = bp->ts0->mem; 2127 on = ioread32(&ts_reg->enable); 2128 src = "GNSS"; 2129 seq_printf(s, "%7s: %s, src: %s\n", "TS0", 2130 on ? " ON" : "OFF", src); 2131 } 2132 2133 if (bp->ts1) { 2134 ts_reg = bp->ts1->mem; 2135 on = ioread32(&ts_reg->enable); 2136 src = gpio_map(sma_in, 2, "sma1", "sma2", "----"); 2137 seq_printf(s, "%7s: %s, src: %s\n", "TS1", 2138 on ? " ON" : "OFF", src); 2139 } 2140 2141 if (bp->ts2) { 2142 ts_reg = bp->ts2->mem; 2143 on = ioread32(&ts_reg->enable); 2144 src = gpio_map(sma_in, 3, "sma1", "sma2", "----"); 2145 seq_printf(s, "%7s: %s, src: %s\n", "TS2", 2146 on ? " ON" : "OFF", src); 2147 } 2148 2149 if (bp->pps) { 2150 ts_reg = bp->pps->mem; 2151 src = "PHC"; 2152 on = ioread32(&ts_reg->enable); 2153 map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP); 2154 seq_printf(s, "%7s: %s, src: %s\n", "TS3", 2155 on && map ? " ON" : "OFF", src); 2156 2157 map = !!(bp->pps_req_map & OCP_REQ_PPS); 2158 seq_printf(s, "%7s: %s, src: %s\n", "PPS", 2159 on && map ? " ON" : "OFF", src); 2160 } 2161 2162 if (bp->irig_out) { 2163 ctrl = ioread32(&bp->irig_out->ctrl); 2164 on = ctrl & IRIG_M_CTRL_ENABLE; 2165 val = ioread32(&bp->irig_out->status); 2166 gpio_multi_map(buf, sma_out, 4, "sma3", "sma4", "----"); 2167 seq_printf(s, "%7s: %s, error: %d, mode %d, out: %s\n", "IRIG", 2168 on ? " ON" : "OFF", val, (ctrl >> 16), buf); 2169 } 2170 2171 if (bp->irig_in) { 2172 on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE; 2173 val = ioread32(&bp->irig_in->status); 2174 src = gpio_map(sma_in, 4, "sma1", "sma2", "----"); 2175 seq_printf(s, "%7s: %s, error: %d, src: %s\n", "IRIG in", 2176 on ? " ON" : "OFF", val, src); 2177 } 2178 2179 if (bp->dcf_out) { 2180 on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE; 2181 val = ioread32(&bp->dcf_out->status); 2182 gpio_multi_map(buf, sma_out, 5, "sma3", "sma4", "----"); 2183 seq_printf(s, "%7s: %s, error: %d, out: %s\n", "DCF", 2184 on ? " ON" : "OFF", val, buf); 2185 } 2186 2187 if (bp->dcf_in) { 2188 on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE; 2189 val = ioread32(&bp->dcf_in->status); 2190 src = gpio_map(sma_in, 5, "sma1", "sma2", "----"); 2191 seq_printf(s, "%7s: %s, error: %d, src: %s\n", "DCF in", 2192 on ? " ON" : "OFF", val, src); 2193 } 2194 2195 if (bp->nmea_out) { 2196 on = ioread32(&bp->nmea_out->ctrl) & 1; 2197 val = ioread32(&bp->nmea_out->status); 2198 seq_printf(s, "%7s: %s, error: %d\n", "NMEA", 2199 on ? " ON" : "OFF", val); 2200 } 2201 2202 /* compute src for PPS1, used below. */ 2203 if (bp->pps_select) { 2204 val = ioread32(&bp->pps_select->gpio1); 2205 if (val & 0x01) 2206 src = gpio_map(sma_in, 0, "sma1", "sma2", "----"); 2207 else if (val & 0x02) 2208 src = "MAC"; 2209 else if (val & 0x04) 2210 src = "GNSS"; 2211 else 2212 src = "----"; 2213 } else { 2214 src = "?"; 2215 } 2216 2217 /* assumes automatic switchover/selection */ 2218 val = ioread32(&bp->reg->select); 2219 switch (val >> 16) { 2220 case 0: 2221 sprintf(buf, "----"); 2222 break; 2223 case 2: 2224 sprintf(buf, "IRIG"); 2225 break; 2226 case 3: 2227 sprintf(buf, "%s via PPS1", src); 2228 break; 2229 case 6: 2230 sprintf(buf, "DCF"); 2231 break; 2232 default: 2233 strcpy(buf, "unknown"); 2234 break; 2235 } 2236 val = ioread32(&bp->reg->status); 2237 seq_printf(s, "%7s: %s, state: %s\n", "PHC src", buf, 2238 val & OCP_STATUS_IN_SYNC ? "sync" : "unsynced"); 2239 2240 /* reuses PPS1 src from earlier */ 2241 seq_printf(s, "MAC PPS1 src: %s\n", src); 2242 2243 src = gpio_map(sma_in, 1, "sma1", "sma2", "GNSS2"); 2244 seq_printf(s, "MAC PPS2 src: %s\n", src); 2245 2246 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) { 2247 struct timespec64 sys_ts; 2248 s64 pre_ns, post_ns, ns; 2249 2250 pre_ns = timespec64_to_ns(&sts.pre_ts); 2251 post_ns = timespec64_to_ns(&sts.post_ts); 2252 ns = (pre_ns + post_ns) / 2; 2253 ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC; 2254 sys_ts = ns_to_timespec64(ns); 2255 2256 seq_printf(s, "%7s: %lld.%ld == %ptT TAI\n", "PHC", 2257 ts.tv_sec, ts.tv_nsec, &ts); 2258 seq_printf(s, "%7s: %lld.%ld == %ptT UTC offset %d\n", "SYS", 2259 sys_ts.tv_sec, sys_ts.tv_nsec, &sys_ts, 2260 bp->utc_tai_offset); 2261 seq_printf(s, "%7s: PHC:SYS offset: %lld window: %lld\n", "", 2262 timespec64_to_ns(&ts) - ns, 2263 post_ns - pre_ns); 2264 } 2265 2266 free_page((unsigned long)buf); 2267 return 0; 2268 } 2269 DEFINE_SHOW_ATTRIBUTE(ptp_ocp_summary); 2270 2271 static int 2272 ptp_ocp_tod_status_show(struct seq_file *s, void *data) 2273 { 2274 struct device *dev = s->private; 2275 struct ptp_ocp *bp; 2276 u32 val; 2277 int idx; 2278 2279 bp = dev_get_drvdata(dev); 2280 2281 val = ioread32(&bp->tod->ctrl); 2282 if (!(val & TOD_CTRL_ENABLE)) { 2283 seq_printf(s, "TOD Slave disabled\n"); 2284 return 0; 2285 } 2286 seq_printf(s, "TOD Slave enabled, Control Register 0x%08X\n", val); 2287 2288 idx = val & TOD_CTRL_PROTOCOL ? 4 : 0; 2289 idx += (val >> 16) & 3; 2290 seq_printf(s, "Protocol %s\n", ptp_ocp_tod_proto_name(idx)); 2291 2292 idx = (val >> TOD_CTRL_GNSS_SHIFT) & TOD_CTRL_GNSS_MASK; 2293 seq_printf(s, "GNSS %s\n", ptp_ocp_tod_gnss_name(idx)); 2294 2295 val = ioread32(&bp->tod->version); 2296 seq_printf(s, "TOD Version %d.%d.%d\n", 2297 val >> 24, (val >> 16) & 0xff, val & 0xffff); 2298 2299 val = ioread32(&bp->tod->status); 2300 seq_printf(s, "Status register: 0x%08X\n", val); 2301 2302 val = ioread32(&bp->tod->adj_sec); 2303 idx = (val & ~INT_MAX) ? -1 : 1; 2304 idx *= (val & INT_MAX); 2305 seq_printf(s, "Correction seconds: %d\n", idx); 2306 2307 val = ioread32(&bp->tod->utc_status); 2308 seq_printf(s, "UTC status register: 0x%08X\n", val); 2309 seq_printf(s, "UTC offset: %d valid:%d\n", 2310 val & TOD_STATUS_UTC_MASK, val & TOD_STATUS_UTC_VALID ? 1 : 0); 2311 seq_printf(s, "Leap second info valid:%d, Leap second announce %d\n", 2312 val & TOD_STATUS_LEAP_VALID ? 1 : 0, 2313 val & TOD_STATUS_LEAP_ANNOUNCE ? 1 : 0); 2314 2315 val = ioread32(&bp->tod->leap); 2316 seq_printf(s, "Time to next leap second (in sec): %d\n", (s32) val); 2317 2318 return 0; 2319 } 2320 DEFINE_SHOW_ATTRIBUTE(ptp_ocp_tod_status); 2321 2322 static struct dentry *ptp_ocp_debugfs_root; 2323 2324 static void 2325 ptp_ocp_debugfs_add_device(struct ptp_ocp *bp) 2326 { 2327 struct dentry *d; 2328 2329 d = debugfs_create_dir(dev_name(&bp->dev), ptp_ocp_debugfs_root); 2330 bp->debug_root = d; 2331 debugfs_create_file("summary", 0444, bp->debug_root, 2332 &bp->dev, &ptp_ocp_summary_fops); 2333 if (bp->tod) 2334 debugfs_create_file("tod_status", 0444, bp->debug_root, 2335 &bp->dev, &ptp_ocp_tod_status_fops); 2336 } 2337 2338 static void 2339 ptp_ocp_debugfs_remove_device(struct ptp_ocp *bp) 2340 { 2341 debugfs_remove_recursive(bp->debug_root); 2342 } 2343 2344 static void 2345 ptp_ocp_debugfs_init(void) 2346 { 2347 ptp_ocp_debugfs_root = debugfs_create_dir("timecard", NULL); 2348 } 2349 2350 static void 2351 ptp_ocp_debugfs_fini(void) 2352 { 2353 debugfs_remove_recursive(ptp_ocp_debugfs_root); 2354 } 2355 2356 static void 2357 ptp_ocp_dev_release(struct device *dev) 2358 { 2359 struct ptp_ocp *bp = dev_get_drvdata(dev); 2360 2361 mutex_lock(&ptp_ocp_lock); 2362 idr_remove(&ptp_ocp_idr, bp->id); 2363 mutex_unlock(&ptp_ocp_lock); 2364 } 2365 2366 static int 2367 ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) 2368 { 2369 int err; 2370 2371 mutex_lock(&ptp_ocp_lock); 2372 err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL); 2373 mutex_unlock(&ptp_ocp_lock); 2374 if (err < 0) { 2375 dev_err(&pdev->dev, "idr_alloc failed: %d\n", err); 2376 return err; 2377 } 2378 bp->id = err; 2379 2380 bp->ptp_info = ptp_ocp_clock_info; 2381 spin_lock_init(&bp->lock); 2382 bp->gnss_port = -1; 2383 bp->gnss2_port = -1; 2384 bp->mac_port = -1; 2385 bp->nmea_port = -1; 2386 bp->pdev = pdev; 2387 2388 device_initialize(&bp->dev); 2389 dev_set_name(&bp->dev, "ocp%d", bp->id); 2390 bp->dev.class = &timecard_class; 2391 bp->dev.parent = &pdev->dev; 2392 bp->dev.release = ptp_ocp_dev_release; 2393 dev_set_drvdata(&bp->dev, bp); 2394 2395 err = device_add(&bp->dev); 2396 if (err) { 2397 dev_err(&bp->dev, "device add failed: %d\n", err); 2398 goto out; 2399 } 2400 2401 pci_set_drvdata(pdev, bp); 2402 2403 return 0; 2404 2405 out: 2406 ptp_ocp_dev_release(&bp->dev); 2407 put_device(&bp->dev); 2408 return err; 2409 } 2410 2411 static void 2412 ptp_ocp_symlink(struct ptp_ocp *bp, struct device *child, const char *link) 2413 { 2414 struct device *dev = &bp->dev; 2415 2416 if (sysfs_create_link(&dev->kobj, &child->kobj, link)) 2417 dev_err(dev, "%s symlink failed\n", link); 2418 } 2419 2420 static void 2421 ptp_ocp_link_child(struct ptp_ocp *bp, const char *name, const char *link) 2422 { 2423 struct device *dev, *child; 2424 2425 dev = &bp->pdev->dev; 2426 2427 child = device_find_child_by_name(dev, name); 2428 if (!child) { 2429 dev_err(dev, "Could not find device %s\n", name); 2430 return; 2431 } 2432 2433 ptp_ocp_symlink(bp, child, link); 2434 put_device(child); 2435 } 2436 2437 static int 2438 ptp_ocp_complete(struct ptp_ocp *bp) 2439 { 2440 struct pps_device *pps; 2441 char buf[32]; 2442 2443 if (bp->gnss_port != -1) { 2444 sprintf(buf, "ttyS%d", bp->gnss_port); 2445 ptp_ocp_link_child(bp, buf, "ttyGNSS"); 2446 } 2447 if (bp->gnss2_port != -1) { 2448 sprintf(buf, "ttyS%d", bp->gnss2_port); 2449 ptp_ocp_link_child(bp, buf, "ttyGNSS2"); 2450 } 2451 if (bp->mac_port != -1) { 2452 sprintf(buf, "ttyS%d", bp->mac_port); 2453 ptp_ocp_link_child(bp, buf, "ttyMAC"); 2454 } 2455 if (bp->nmea_port != -1) { 2456 sprintf(buf, "ttyS%d", bp->nmea_port); 2457 ptp_ocp_link_child(bp, buf, "ttyNMEA"); 2458 } 2459 sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp)); 2460 ptp_ocp_link_child(bp, buf, "ptp"); 2461 2462 pps = pps_lookup_dev(bp->ptp); 2463 if (pps) 2464 ptp_ocp_symlink(bp, pps->dev, "pps"); 2465 2466 if (device_add_groups(&bp->dev, timecard_groups)) 2467 pr_err("device add groups failed\n"); 2468 2469 ptp_ocp_debugfs_add_device(bp); 2470 2471 return 0; 2472 } 2473 2474 static void 2475 ptp_ocp_phc_info(struct ptp_ocp *bp) 2476 { 2477 struct timespec64 ts; 2478 u32 version, select; 2479 bool sync; 2480 2481 version = ioread32(&bp->reg->version); 2482 select = ioread32(&bp->reg->select); 2483 dev_info(&bp->pdev->dev, "Version %d.%d.%d, clock %s, device ptp%d\n", 2484 version >> 24, (version >> 16) & 0xff, version & 0xffff, 2485 ptp_ocp_select_name_from_val(ptp_ocp_clock, select >> 16), 2486 ptp_clock_index(bp->ptp)); 2487 2488 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; 2489 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, NULL)) 2490 dev_info(&bp->pdev->dev, "Time: %lld.%ld, %s\n", 2491 ts.tv_sec, ts.tv_nsec, 2492 sync ? "in-sync" : "UNSYNCED"); 2493 } 2494 2495 static void 2496 ptp_ocp_serial_info(struct device *dev, const char *name, int port, int baud) 2497 { 2498 if (port != -1) 2499 dev_info(dev, "%5s: /dev/ttyS%-2d @ %6d\n", name, port, baud); 2500 } 2501 2502 static void 2503 ptp_ocp_info(struct ptp_ocp *bp) 2504 { 2505 static int nmea_baud[] = { 2506 1200, 2400, 4800, 9600, 19200, 38400, 2507 57600, 115200, 230400, 460800, 921600, 2508 1000000, 2000000 2509 }; 2510 struct device *dev = &bp->pdev->dev; 2511 u32 reg; 2512 2513 ptp_ocp_phc_info(bp); 2514 2515 if (bp->image) { 2516 u32 ver = ioread32(&bp->image->version); 2517 2518 dev_info(dev, "version %x\n", ver); 2519 if (ver & 0xffff) 2520 dev_info(dev, "regular image, version %d\n", 2521 ver & 0xffff); 2522 else 2523 dev_info(dev, "golden image, version %d\n", 2524 ver >> 16); 2525 } 2526 ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port, 115200); 2527 ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port, 115200); 2528 ptp_ocp_serial_info(dev, "MAC", bp->mac_port, 57600); 2529 if (bp->nmea_out && bp->nmea_port != -1) { 2530 int baud = -1; 2531 2532 reg = ioread32(&bp->nmea_out->uart_baud); 2533 if (reg < ARRAY_SIZE(nmea_baud)) 2534 baud = nmea_baud[reg]; 2535 ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port, baud); 2536 } 2537 } 2538 2539 static void 2540 ptp_ocp_detach_sysfs(struct ptp_ocp *bp) 2541 { 2542 struct device *dev = &bp->dev; 2543 2544 sysfs_remove_link(&dev->kobj, "ttyGNSS"); 2545 sysfs_remove_link(&dev->kobj, "ttyMAC"); 2546 sysfs_remove_link(&dev->kobj, "ptp"); 2547 sysfs_remove_link(&dev->kobj, "pps"); 2548 device_remove_groups(dev, timecard_groups); 2549 } 2550 2551 static void 2552 ptp_ocp_detach(struct ptp_ocp *bp) 2553 { 2554 ptp_ocp_debugfs_remove_device(bp); 2555 ptp_ocp_detach_sysfs(bp); 2556 if (timer_pending(&bp->watchdog)) 2557 del_timer_sync(&bp->watchdog); 2558 if (bp->ts0) 2559 ptp_ocp_unregister_ext(bp->ts0); 2560 if (bp->ts1) 2561 ptp_ocp_unregister_ext(bp->ts1); 2562 if (bp->ts2) 2563 ptp_ocp_unregister_ext(bp->ts2); 2564 if (bp->pps) 2565 ptp_ocp_unregister_ext(bp->pps); 2566 if (bp->gnss_port != -1) 2567 serial8250_unregister_port(bp->gnss_port); 2568 if (bp->gnss2_port != -1) 2569 serial8250_unregister_port(bp->gnss2_port); 2570 if (bp->mac_port != -1) 2571 serial8250_unregister_port(bp->mac_port); 2572 if (bp->nmea_port != -1) 2573 serial8250_unregister_port(bp->nmea_port); 2574 if (bp->spi_flash) 2575 platform_device_unregister(bp->spi_flash); 2576 if (bp->i2c_ctrl) 2577 platform_device_unregister(bp->i2c_ctrl); 2578 if (bp->i2c_clk) 2579 clk_hw_unregister_fixed_rate(bp->i2c_clk); 2580 if (bp->n_irqs) 2581 pci_free_irq_vectors(bp->pdev); 2582 if (bp->ptp) 2583 ptp_clock_unregister(bp->ptp); 2584 device_unregister(&bp->dev); 2585 } 2586 2587 static int 2588 ptp_ocp_probe(struct pci_dev *pdev, const struct pci_device_id *id) 2589 { 2590 struct devlink *devlink; 2591 struct ptp_ocp *bp; 2592 int err; 2593 2594 devlink = devlink_alloc(&ptp_ocp_devlink_ops, sizeof(*bp), &pdev->dev); 2595 if (!devlink) { 2596 dev_err(&pdev->dev, "devlink_alloc failed\n"); 2597 return -ENOMEM; 2598 } 2599 2600 err = pci_enable_device(pdev); 2601 if (err) { 2602 dev_err(&pdev->dev, "pci_enable_device\n"); 2603 goto out_unregister; 2604 } 2605 2606 bp = devlink_priv(devlink); 2607 err = ptp_ocp_device_init(bp, pdev); 2608 if (err) 2609 goto out_disable; 2610 2611 /* compat mode. 2612 * Older FPGA firmware only returns 2 irq's. 2613 * allow this - if not all of the IRQ's are returned, skip the 2614 * extra devices and just register the clock. 2615 */ 2616 err = pci_alloc_irq_vectors(pdev, 1, 11, PCI_IRQ_MSI | PCI_IRQ_MSIX); 2617 if (err < 0) { 2618 dev_err(&pdev->dev, "alloc_irq_vectors err: %d\n", err); 2619 goto out; 2620 } 2621 bp->n_irqs = err; 2622 pci_set_master(pdev); 2623 2624 err = ptp_ocp_register_resources(bp, id->driver_data); 2625 if (err) 2626 goto out; 2627 2628 bp->ptp = ptp_clock_register(&bp->ptp_info, &pdev->dev); 2629 if (IS_ERR(bp->ptp)) { 2630 err = PTR_ERR(bp->ptp); 2631 dev_err(&pdev->dev, "ptp_clock_register: %d\n", err); 2632 bp->ptp = NULL; 2633 goto out; 2634 } 2635 2636 err = ptp_ocp_complete(bp); 2637 if (err) 2638 goto out; 2639 2640 ptp_ocp_info(bp); 2641 devlink_register(devlink); 2642 return 0; 2643 2644 out: 2645 ptp_ocp_detach(bp); 2646 pci_set_drvdata(pdev, NULL); 2647 out_disable: 2648 pci_disable_device(pdev); 2649 out_unregister: 2650 devlink_free(devlink); 2651 return err; 2652 } 2653 2654 static void 2655 ptp_ocp_remove(struct pci_dev *pdev) 2656 { 2657 struct ptp_ocp *bp = pci_get_drvdata(pdev); 2658 struct devlink *devlink = priv_to_devlink(bp); 2659 2660 devlink_unregister(devlink); 2661 ptp_ocp_detach(bp); 2662 pci_set_drvdata(pdev, NULL); 2663 pci_disable_device(pdev); 2664 2665 devlink_free(devlink); 2666 } 2667 2668 static struct pci_driver ptp_ocp_driver = { 2669 .name = KBUILD_MODNAME, 2670 .id_table = ptp_ocp_pcidev_id, 2671 .probe = ptp_ocp_probe, 2672 .remove = ptp_ocp_remove, 2673 }; 2674 2675 static int 2676 ptp_ocp_i2c_notifier_call(struct notifier_block *nb, 2677 unsigned long action, void *data) 2678 { 2679 struct device *dev, *child = data; 2680 struct ptp_ocp *bp; 2681 bool add; 2682 2683 switch (action) { 2684 case BUS_NOTIFY_ADD_DEVICE: 2685 case BUS_NOTIFY_DEL_DEVICE: 2686 add = action == BUS_NOTIFY_ADD_DEVICE; 2687 break; 2688 default: 2689 return 0; 2690 } 2691 2692 if (!i2c_verify_adapter(child)) 2693 return 0; 2694 2695 dev = child; 2696 while ((dev = dev->parent)) 2697 if (dev->driver && !strcmp(dev->driver->name, KBUILD_MODNAME)) 2698 goto found; 2699 return 0; 2700 2701 found: 2702 bp = dev_get_drvdata(dev); 2703 if (add) 2704 ptp_ocp_symlink(bp, child, "i2c"); 2705 else 2706 sysfs_remove_link(&bp->dev.kobj, "i2c"); 2707 2708 return 0; 2709 } 2710 2711 static struct notifier_block ptp_ocp_i2c_notifier = { 2712 .notifier_call = ptp_ocp_i2c_notifier_call, 2713 }; 2714 2715 static int __init 2716 ptp_ocp_init(void) 2717 { 2718 const char *what; 2719 int err; 2720 2721 ptp_ocp_debugfs_init(); 2722 2723 what = "timecard class"; 2724 err = class_register(&timecard_class); 2725 if (err) 2726 goto out; 2727 2728 what = "i2c notifier"; 2729 err = bus_register_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 2730 if (err) 2731 goto out_notifier; 2732 2733 what = "ptp_ocp driver"; 2734 err = pci_register_driver(&ptp_ocp_driver); 2735 if (err) 2736 goto out_register; 2737 2738 return 0; 2739 2740 out_register: 2741 bus_unregister_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 2742 out_notifier: 2743 class_unregister(&timecard_class); 2744 out: 2745 ptp_ocp_debugfs_fini(); 2746 pr_err(KBUILD_MODNAME ": failed to register %s: %d\n", what, err); 2747 return err; 2748 } 2749 2750 static void __exit 2751 ptp_ocp_fini(void) 2752 { 2753 bus_unregister_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 2754 pci_unregister_driver(&ptp_ocp_driver); 2755 class_unregister(&timecard_class); 2756 ptp_ocp_debugfs_fini(); 2757 } 2758 2759 module_init(ptp_ocp_init); 2760 module_exit(ptp_ocp_fini); 2761 2762 MODULE_DESCRIPTION("OpenCompute TimeCard driver"); 2763 MODULE_LICENSE("GPL v2"); 2764