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