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