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/platform_data/i2c-xiic.h> 15 #include <linux/ptp_clock_kernel.h> 16 #include <linux/spi/spi.h> 17 #include <linux/spi/xilinx_spi.h> 18 #include <net/devlink.h> 19 #include <linux/i2c.h> 20 #include <linux/mtd/mtd.h> 21 #include <linux/nvmem-consumer.h> 22 23 #ifndef PCI_VENDOR_ID_FACEBOOK 24 #define PCI_VENDOR_ID_FACEBOOK 0x1d9b 25 #endif 26 27 #ifndef PCI_DEVICE_ID_FACEBOOK_TIMECARD 28 #define PCI_DEVICE_ID_FACEBOOK_TIMECARD 0x0400 29 #endif 30 31 static struct class timecard_class = { 32 .owner = THIS_MODULE, 33 .name = "timecard", 34 }; 35 36 struct ocp_reg { 37 u32 ctrl; 38 u32 status; 39 u32 select; 40 u32 version; 41 u32 time_ns; 42 u32 time_sec; 43 u32 __pad0[2]; 44 u32 adjust_ns; 45 u32 adjust_sec; 46 u32 __pad1[2]; 47 u32 offset_ns; 48 u32 offset_window_ns; 49 u32 __pad2[2]; 50 u32 drift_ns; 51 u32 drift_window_ns; 52 u32 __pad3[6]; 53 u32 servo_offset_p; 54 u32 servo_offset_i; 55 u32 servo_drift_p; 56 u32 servo_drift_i; 57 u32 status_offset; 58 u32 status_drift; 59 }; 60 61 #define OCP_CTRL_ENABLE BIT(0) 62 #define OCP_CTRL_ADJUST_TIME BIT(1) 63 #define OCP_CTRL_ADJUST_OFFSET BIT(2) 64 #define OCP_CTRL_ADJUST_DRIFT BIT(3) 65 #define OCP_CTRL_ADJUST_SERVO BIT(8) 66 #define OCP_CTRL_READ_TIME_REQ BIT(30) 67 #define OCP_CTRL_READ_TIME_DONE BIT(31) 68 69 #define OCP_STATUS_IN_SYNC BIT(0) 70 #define OCP_STATUS_IN_HOLDOVER BIT(1) 71 72 #define OCP_SELECT_CLK_NONE 0 73 #define OCP_SELECT_CLK_REG 0xfe 74 75 struct tod_reg { 76 u32 ctrl; 77 u32 status; 78 u32 uart_polarity; 79 u32 version; 80 u32 adj_sec; 81 u32 __pad0[3]; 82 u32 uart_baud; 83 u32 __pad1[3]; 84 u32 utc_status; 85 u32 leap; 86 }; 87 88 #define TOD_CTRL_PROTOCOL BIT(28) 89 #define TOD_CTRL_DISABLE_FMT_A BIT(17) 90 #define TOD_CTRL_DISABLE_FMT_B BIT(16) 91 #define TOD_CTRL_ENABLE BIT(0) 92 #define TOD_CTRL_GNSS_MASK ((1U << 4) - 1) 93 #define TOD_CTRL_GNSS_SHIFT 24 94 95 #define TOD_STATUS_UTC_MASK 0xff 96 #define TOD_STATUS_UTC_VALID BIT(8) 97 #define TOD_STATUS_LEAP_ANNOUNCE BIT(12) 98 #define TOD_STATUS_LEAP_VALID BIT(16) 99 100 struct ts_reg { 101 u32 enable; 102 u32 error; 103 u32 polarity; 104 u32 version; 105 u32 __pad0[4]; 106 u32 cable_delay; 107 u32 __pad1[3]; 108 u32 intr; 109 u32 intr_mask; 110 u32 event_count; 111 u32 __pad2[1]; 112 u32 ts_count; 113 u32 time_ns; 114 u32 time_sec; 115 u32 data_width; 116 u32 data; 117 }; 118 119 struct pps_reg { 120 u32 ctrl; 121 u32 status; 122 u32 __pad0[6]; 123 u32 cable_delay; 124 }; 125 126 #define PPS_STATUS_FILTER_ERR BIT(0) 127 #define PPS_STATUS_SUPERV_ERR BIT(1) 128 129 struct img_reg { 130 u32 version; 131 }; 132 133 struct gpio_reg { 134 u32 gpio1; 135 u32 __pad0; 136 u32 gpio2; 137 u32 __pad1; 138 }; 139 140 struct irig_master_reg { 141 u32 ctrl; 142 u32 status; 143 u32 __pad0; 144 u32 version; 145 u32 adj_sec; 146 u32 mode_ctrl; 147 }; 148 149 #define IRIG_M_CTRL_ENABLE BIT(0) 150 151 struct irig_slave_reg { 152 u32 ctrl; 153 u32 status; 154 u32 __pad0; 155 u32 version; 156 u32 adj_sec; 157 u32 mode_ctrl; 158 }; 159 160 #define IRIG_S_CTRL_ENABLE BIT(0) 161 162 struct dcf_master_reg { 163 u32 ctrl; 164 u32 status; 165 u32 __pad0; 166 u32 version; 167 u32 adj_sec; 168 }; 169 170 #define DCF_M_CTRL_ENABLE BIT(0) 171 172 struct dcf_slave_reg { 173 u32 ctrl; 174 u32 status; 175 u32 __pad0; 176 u32 version; 177 u32 adj_sec; 178 }; 179 180 #define DCF_S_CTRL_ENABLE BIT(0) 181 182 struct signal_reg { 183 u32 enable; 184 u32 status; 185 u32 polarity; 186 u32 version; 187 u32 __pad0[4]; 188 u32 cable_delay; 189 u32 __pad1[3]; 190 u32 intr; 191 u32 intr_mask; 192 u32 __pad2[2]; 193 u32 start_ns; 194 u32 start_sec; 195 u32 pulse_ns; 196 u32 pulse_sec; 197 u32 period_ns; 198 u32 period_sec; 199 u32 repeat_count; 200 }; 201 202 struct frequency_reg { 203 u32 ctrl; 204 u32 status; 205 }; 206 #define FREQ_STATUS_VALID BIT(31) 207 #define FREQ_STATUS_ERROR BIT(30) 208 #define FREQ_STATUS_OVERRUN BIT(29) 209 #define FREQ_STATUS_MASK (BIT(24) - 1) 210 211 struct ptp_ocp_flash_info { 212 const char *name; 213 int pci_offset; 214 int data_size; 215 void *data; 216 }; 217 218 struct ptp_ocp_i2c_info { 219 const char *name; 220 unsigned long fixed_rate; 221 size_t data_size; 222 void *data; 223 }; 224 225 struct ptp_ocp_ext_info { 226 int index; 227 irqreturn_t (*irq_fcn)(int irq, void *priv); 228 int (*enable)(void *priv, u32 req, bool enable); 229 }; 230 231 struct ptp_ocp_ext_src { 232 void __iomem *mem; 233 struct ptp_ocp *bp; 234 struct ptp_ocp_ext_info *info; 235 int irq_vec; 236 }; 237 238 enum ptp_ocp_sma_mode { 239 SMA_MODE_IN, 240 SMA_MODE_OUT, 241 }; 242 243 struct ptp_ocp_sma_connector { 244 enum ptp_ocp_sma_mode mode; 245 bool fixed_fcn; 246 bool fixed_dir; 247 bool disabled; 248 }; 249 250 struct ocp_attr_group { 251 u64 cap; 252 const struct attribute_group *group; 253 }; 254 255 #define OCP_CAP_BASIC BIT(0) 256 #define OCP_CAP_SIGNAL BIT(1) 257 #define OCP_CAP_FREQ BIT(2) 258 259 struct ptp_ocp_signal { 260 ktime_t period; 261 ktime_t pulse; 262 ktime_t phase; 263 ktime_t start; 264 int duty; 265 bool polarity; 266 bool running; 267 }; 268 269 #define OCP_BOARD_ID_LEN 13 270 #define OCP_SERIAL_LEN 6 271 272 struct ptp_ocp { 273 struct pci_dev *pdev; 274 struct device dev; 275 spinlock_t lock; 276 struct ocp_reg __iomem *reg; 277 struct tod_reg __iomem *tod; 278 struct pps_reg __iomem *pps_to_ext; 279 struct pps_reg __iomem *pps_to_clk; 280 struct gpio_reg __iomem *pps_select; 281 struct gpio_reg __iomem *sma_map1; 282 struct gpio_reg __iomem *sma_map2; 283 struct irig_master_reg __iomem *irig_out; 284 struct irig_slave_reg __iomem *irig_in; 285 struct dcf_master_reg __iomem *dcf_out; 286 struct dcf_slave_reg __iomem *dcf_in; 287 struct tod_reg __iomem *nmea_out; 288 struct frequency_reg __iomem *freq_in[4]; 289 struct ptp_ocp_ext_src *signal_out[4]; 290 struct ptp_ocp_ext_src *pps; 291 struct ptp_ocp_ext_src *ts0; 292 struct ptp_ocp_ext_src *ts1; 293 struct ptp_ocp_ext_src *ts2; 294 struct ptp_ocp_ext_src *ts3; 295 struct ptp_ocp_ext_src *ts4; 296 struct img_reg __iomem *image; 297 struct ptp_clock *ptp; 298 struct ptp_clock_info ptp_info; 299 struct platform_device *i2c_ctrl; 300 struct platform_device *spi_flash; 301 struct clk_hw *i2c_clk; 302 struct timer_list watchdog; 303 const struct ocp_attr_group *attr_tbl; 304 const struct ptp_ocp_eeprom_map *eeprom_map; 305 struct dentry *debug_root; 306 time64_t gnss_lost; 307 int id; 308 int n_irqs; 309 int gnss_port; 310 int gnss2_port; 311 int mac_port; /* miniature atomic clock */ 312 int nmea_port; 313 u32 fw_version; 314 u8 board_id[OCP_BOARD_ID_LEN]; 315 u8 serial[OCP_SERIAL_LEN]; 316 bool has_eeprom_data; 317 u32 pps_req_map; 318 int flash_start; 319 u32 utc_tai_offset; 320 u32 ts_window_adjust; 321 u64 fw_cap; 322 struct ptp_ocp_signal signal[4]; 323 struct ptp_ocp_sma_connector sma[4]; 324 }; 325 326 #define OCP_REQ_TIMESTAMP BIT(0) 327 #define OCP_REQ_PPS BIT(1) 328 329 struct ocp_resource { 330 unsigned long offset; 331 int size; 332 int irq_vec; 333 int (*setup)(struct ptp_ocp *bp, struct ocp_resource *r); 334 void *extra; 335 unsigned long bp_offset; 336 const char * const name; 337 }; 338 339 static int ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r); 340 static int ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r); 341 static int ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r); 342 static int ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r); 343 static int ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r); 344 static int ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r); 345 static irqreturn_t ptp_ocp_ts_irq(int irq, void *priv); 346 static irqreturn_t ptp_ocp_signal_irq(int irq, void *priv); 347 static int ptp_ocp_ts_enable(void *priv, u32 req, bool enable); 348 static int ptp_ocp_signal_from_perout(struct ptp_ocp *bp, int gen, 349 struct ptp_perout_request *req); 350 static int ptp_ocp_signal_enable(void *priv, u32 req, bool enable); 351 static int ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr); 352 353 static const struct ocp_attr_group fb_timecard_groups[]; 354 355 struct ptp_ocp_eeprom_map { 356 u16 off; 357 u16 len; 358 u32 bp_offset; 359 const void * const tag; 360 }; 361 362 #define EEPROM_ENTRY(addr, member) \ 363 .off = addr, \ 364 .len = sizeof_field(struct ptp_ocp, member), \ 365 .bp_offset = offsetof(struct ptp_ocp, member) 366 367 #define BP_MAP_ENTRY_ADDR(bp, map) ({ \ 368 (void *)((uintptr_t)(bp) + (map)->bp_offset); \ 369 }) 370 371 static struct ptp_ocp_eeprom_map fb_eeprom_map[] = { 372 { EEPROM_ENTRY(0x43, board_id) }, 373 { EEPROM_ENTRY(0x00, serial), .tag = "mac" }, 374 { } 375 }; 376 377 #define bp_assign_entry(bp, res, val) ({ \ 378 uintptr_t addr = (uintptr_t)(bp) + (res)->bp_offset; \ 379 *(typeof(val) *)addr = val; \ 380 }) 381 382 #define OCP_RES_LOCATION(member) \ 383 .name = #member, .bp_offset = offsetof(struct ptp_ocp, member) 384 385 #define OCP_MEM_RESOURCE(member) \ 386 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_mem 387 388 #define OCP_SERIAL_RESOURCE(member) \ 389 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_serial 390 391 #define OCP_I2C_RESOURCE(member) \ 392 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_i2c 393 394 #define OCP_SPI_RESOURCE(member) \ 395 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_spi 396 397 #define OCP_EXT_RESOURCE(member) \ 398 OCP_RES_LOCATION(member), .setup = ptp_ocp_register_ext 399 400 /* This is the MSI vector mapping used. 401 * 0: PPS (TS5) 402 * 1: TS0 403 * 2: TS1 404 * 3: GNSS1 405 * 4: GNSS2 406 * 5: MAC 407 * 6: TS2 408 * 7: I2C controller 409 * 8: HWICAP (notused) 410 * 9: SPI Flash 411 * 10: NMEA 412 * 11: Signal Generator 1 413 * 12: Signal Generator 2 414 * 13: Signal Generator 3 415 * 14: Signal Generator 4 416 * 15: TS3 417 * 16: TS4 418 */ 419 420 static struct ocp_resource ocp_fb_resource[] = { 421 { 422 OCP_MEM_RESOURCE(reg), 423 .offset = 0x01000000, .size = 0x10000, 424 }, 425 { 426 OCP_EXT_RESOURCE(ts0), 427 .offset = 0x01010000, .size = 0x10000, .irq_vec = 1, 428 .extra = &(struct ptp_ocp_ext_info) { 429 .index = 0, 430 .irq_fcn = ptp_ocp_ts_irq, 431 .enable = ptp_ocp_ts_enable, 432 }, 433 }, 434 { 435 OCP_EXT_RESOURCE(ts1), 436 .offset = 0x01020000, .size = 0x10000, .irq_vec = 2, 437 .extra = &(struct ptp_ocp_ext_info) { 438 .index = 1, 439 .irq_fcn = ptp_ocp_ts_irq, 440 .enable = ptp_ocp_ts_enable, 441 }, 442 }, 443 { 444 OCP_EXT_RESOURCE(ts2), 445 .offset = 0x01060000, .size = 0x10000, .irq_vec = 6, 446 .extra = &(struct ptp_ocp_ext_info) { 447 .index = 2, 448 .irq_fcn = ptp_ocp_ts_irq, 449 .enable = ptp_ocp_ts_enable, 450 }, 451 }, 452 { 453 OCP_EXT_RESOURCE(ts3), 454 .offset = 0x01110000, .size = 0x10000, .irq_vec = 15, 455 .extra = &(struct ptp_ocp_ext_info) { 456 .index = 3, 457 .irq_fcn = ptp_ocp_ts_irq, 458 .enable = ptp_ocp_ts_enable, 459 }, 460 }, 461 { 462 OCP_EXT_RESOURCE(ts4), 463 .offset = 0x01120000, .size = 0x10000, .irq_vec = 16, 464 .extra = &(struct ptp_ocp_ext_info) { 465 .index = 4, 466 .irq_fcn = ptp_ocp_ts_irq, 467 .enable = ptp_ocp_ts_enable, 468 }, 469 }, 470 /* Timestamp for PHC and/or PPS generator */ 471 { 472 OCP_EXT_RESOURCE(pps), 473 .offset = 0x010C0000, .size = 0x10000, .irq_vec = 0, 474 .extra = &(struct ptp_ocp_ext_info) { 475 .index = 5, 476 .irq_fcn = ptp_ocp_ts_irq, 477 .enable = ptp_ocp_ts_enable, 478 }, 479 }, 480 { 481 OCP_EXT_RESOURCE(signal_out[0]), 482 .offset = 0x010D0000, .size = 0x10000, .irq_vec = 11, 483 .extra = &(struct ptp_ocp_ext_info) { 484 .index = 1, 485 .irq_fcn = ptp_ocp_signal_irq, 486 .enable = ptp_ocp_signal_enable, 487 }, 488 }, 489 { 490 OCP_EXT_RESOURCE(signal_out[1]), 491 .offset = 0x010E0000, .size = 0x10000, .irq_vec = 12, 492 .extra = &(struct ptp_ocp_ext_info) { 493 .index = 2, 494 .irq_fcn = ptp_ocp_signal_irq, 495 .enable = ptp_ocp_signal_enable, 496 }, 497 }, 498 { 499 OCP_EXT_RESOURCE(signal_out[2]), 500 .offset = 0x010F0000, .size = 0x10000, .irq_vec = 13, 501 .extra = &(struct ptp_ocp_ext_info) { 502 .index = 3, 503 .irq_fcn = ptp_ocp_signal_irq, 504 .enable = ptp_ocp_signal_enable, 505 }, 506 }, 507 { 508 OCP_EXT_RESOURCE(signal_out[3]), 509 .offset = 0x01100000, .size = 0x10000, .irq_vec = 14, 510 .extra = &(struct ptp_ocp_ext_info) { 511 .index = 4, 512 .irq_fcn = ptp_ocp_signal_irq, 513 .enable = ptp_ocp_signal_enable, 514 }, 515 }, 516 { 517 OCP_MEM_RESOURCE(pps_to_ext), 518 .offset = 0x01030000, .size = 0x10000, 519 }, 520 { 521 OCP_MEM_RESOURCE(pps_to_clk), 522 .offset = 0x01040000, .size = 0x10000, 523 }, 524 { 525 OCP_MEM_RESOURCE(tod), 526 .offset = 0x01050000, .size = 0x10000, 527 }, 528 { 529 OCP_MEM_RESOURCE(irig_in), 530 .offset = 0x01070000, .size = 0x10000, 531 }, 532 { 533 OCP_MEM_RESOURCE(irig_out), 534 .offset = 0x01080000, .size = 0x10000, 535 }, 536 { 537 OCP_MEM_RESOURCE(dcf_in), 538 .offset = 0x01090000, .size = 0x10000, 539 }, 540 { 541 OCP_MEM_RESOURCE(dcf_out), 542 .offset = 0x010A0000, .size = 0x10000, 543 }, 544 { 545 OCP_MEM_RESOURCE(nmea_out), 546 .offset = 0x010B0000, .size = 0x10000, 547 }, 548 { 549 OCP_MEM_RESOURCE(image), 550 .offset = 0x00020000, .size = 0x1000, 551 }, 552 { 553 OCP_MEM_RESOURCE(pps_select), 554 .offset = 0x00130000, .size = 0x1000, 555 }, 556 { 557 OCP_MEM_RESOURCE(sma_map1), 558 .offset = 0x00140000, .size = 0x1000, 559 }, 560 { 561 OCP_MEM_RESOURCE(sma_map2), 562 .offset = 0x00220000, .size = 0x1000, 563 }, 564 { 565 OCP_I2C_RESOURCE(i2c_ctrl), 566 .offset = 0x00150000, .size = 0x10000, .irq_vec = 7, 567 .extra = &(struct ptp_ocp_i2c_info) { 568 .name = "xiic-i2c", 569 .fixed_rate = 50000000, 570 .data_size = sizeof(struct xiic_i2c_platform_data), 571 .data = &(struct xiic_i2c_platform_data) { 572 .num_devices = 2, 573 .devices = (struct i2c_board_info[]) { 574 { I2C_BOARD_INFO("24c02", 0x50) }, 575 { I2C_BOARD_INFO("24mac402", 0x58), 576 .platform_data = "mac" }, 577 }, 578 }, 579 }, 580 }, 581 { 582 OCP_SERIAL_RESOURCE(gnss_port), 583 .offset = 0x00160000 + 0x1000, .irq_vec = 3, 584 }, 585 { 586 OCP_SERIAL_RESOURCE(gnss2_port), 587 .offset = 0x00170000 + 0x1000, .irq_vec = 4, 588 }, 589 { 590 OCP_SERIAL_RESOURCE(mac_port), 591 .offset = 0x00180000 + 0x1000, .irq_vec = 5, 592 }, 593 { 594 OCP_SERIAL_RESOURCE(nmea_port), 595 .offset = 0x00190000 + 0x1000, .irq_vec = 10, 596 }, 597 { 598 OCP_SPI_RESOURCE(spi_flash), 599 .offset = 0x00310000, .size = 0x10000, .irq_vec = 9, 600 .extra = &(struct ptp_ocp_flash_info) { 601 .name = "xilinx_spi", .pci_offset = 0, 602 .data_size = sizeof(struct xspi_platform_data), 603 .data = &(struct xspi_platform_data) { 604 .num_chipselect = 1, 605 .bits_per_word = 8, 606 .num_devices = 1, 607 .devices = &(struct spi_board_info) { 608 .modalias = "spi-nor", 609 }, 610 }, 611 }, 612 }, 613 { 614 OCP_MEM_RESOURCE(freq_in[0]), 615 .offset = 0x01200000, .size = 0x10000, 616 }, 617 { 618 OCP_MEM_RESOURCE(freq_in[1]), 619 .offset = 0x01210000, .size = 0x10000, 620 }, 621 { 622 OCP_MEM_RESOURCE(freq_in[2]), 623 .offset = 0x01220000, .size = 0x10000, 624 }, 625 { 626 OCP_MEM_RESOURCE(freq_in[3]), 627 .offset = 0x01230000, .size = 0x10000, 628 }, 629 { 630 .setup = ptp_ocp_fb_board_init, 631 }, 632 { } 633 }; 634 635 static const struct pci_device_id ptp_ocp_pcidev_id[] = { 636 { PCI_DEVICE_DATA(FACEBOOK, TIMECARD, &ocp_fb_resource) }, 637 { 0 } 638 }; 639 MODULE_DEVICE_TABLE(pci, ptp_ocp_pcidev_id); 640 641 static DEFINE_MUTEX(ptp_ocp_lock); 642 static DEFINE_IDR(ptp_ocp_idr); 643 644 struct ocp_selector { 645 const char *name; 646 int value; 647 }; 648 649 static struct ocp_selector ptp_ocp_clock[] = { 650 { .name = "NONE", .value = 0 }, 651 { .name = "TOD", .value = 1 }, 652 { .name = "IRIG", .value = 2 }, 653 { .name = "PPS", .value = 3 }, 654 { .name = "PTP", .value = 4 }, 655 { .name = "RTC", .value = 5 }, 656 { .name = "DCF", .value = 6 }, 657 { .name = "REGS", .value = 0xfe }, 658 { .name = "EXT", .value = 0xff }, 659 { } 660 }; 661 662 #define SMA_ENABLE BIT(15) 663 #define SMA_SELECT_MASK ((1U << 15) - 1) 664 #define SMA_DISABLE 0x10000 665 666 static struct ocp_selector ptp_ocp_sma_in[] = { 667 { .name = "10Mhz", .value = 0x0000 }, 668 { .name = "PPS1", .value = 0x0001 }, 669 { .name = "PPS2", .value = 0x0002 }, 670 { .name = "TS1", .value = 0x0004 }, 671 { .name = "TS2", .value = 0x0008 }, 672 { .name = "IRIG", .value = 0x0010 }, 673 { .name = "DCF", .value = 0x0020 }, 674 { .name = "TS3", .value = 0x0040 }, 675 { .name = "TS4", .value = 0x0080 }, 676 { .name = "FREQ1", .value = 0x0100 }, 677 { .name = "FREQ2", .value = 0x0200 }, 678 { .name = "FREQ3", .value = 0x0400 }, 679 { .name = "FREQ4", .value = 0x0800 }, 680 { .name = "None", .value = SMA_DISABLE }, 681 { } 682 }; 683 684 static struct ocp_selector ptp_ocp_sma_out[] = { 685 { .name = "10Mhz", .value = 0x0000 }, 686 { .name = "PHC", .value = 0x0001 }, 687 { .name = "MAC", .value = 0x0002 }, 688 { .name = "GNSS1", .value = 0x0004 }, 689 { .name = "GNSS2", .value = 0x0008 }, 690 { .name = "IRIG", .value = 0x0010 }, 691 { .name = "DCF", .value = 0x0020 }, 692 { .name = "GEN1", .value = 0x0040 }, 693 { .name = "GEN2", .value = 0x0080 }, 694 { .name = "GEN3", .value = 0x0100 }, 695 { .name = "GEN4", .value = 0x0200 }, 696 { .name = "GND", .value = 0x2000 }, 697 { .name = "VCC", .value = 0x4000 }, 698 { } 699 }; 700 701 static const char * 702 ptp_ocp_select_name_from_val(struct ocp_selector *tbl, int val) 703 { 704 int i; 705 706 for (i = 0; tbl[i].name; i++) 707 if (tbl[i].value == val) 708 return tbl[i].name; 709 return NULL; 710 } 711 712 static int 713 ptp_ocp_select_val_from_name(struct ocp_selector *tbl, const char *name) 714 { 715 const char *select; 716 int i; 717 718 for (i = 0; tbl[i].name; i++) { 719 select = tbl[i].name; 720 if (!strncasecmp(name, select, strlen(select))) 721 return tbl[i].value; 722 } 723 return -EINVAL; 724 } 725 726 static ssize_t 727 ptp_ocp_select_table_show(struct ocp_selector *tbl, char *buf) 728 { 729 ssize_t count; 730 int i; 731 732 count = 0; 733 for (i = 0; tbl[i].name; i++) 734 count += sysfs_emit_at(buf, count, "%s ", tbl[i].name); 735 if (count) 736 count--; 737 count += sysfs_emit_at(buf, count, "\n"); 738 return count; 739 } 740 741 static int 742 __ptp_ocp_gettime_locked(struct ptp_ocp *bp, struct timespec64 *ts, 743 struct ptp_system_timestamp *sts) 744 { 745 u32 ctrl, time_sec, time_ns; 746 int i; 747 748 ptp_read_system_prets(sts); 749 750 ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE; 751 iowrite32(ctrl, &bp->reg->ctrl); 752 753 for (i = 0; i < 100; i++) { 754 ctrl = ioread32(&bp->reg->ctrl); 755 if (ctrl & OCP_CTRL_READ_TIME_DONE) 756 break; 757 } 758 ptp_read_system_postts(sts); 759 760 if (sts && bp->ts_window_adjust) { 761 s64 ns = timespec64_to_ns(&sts->post_ts); 762 763 sts->post_ts = ns_to_timespec64(ns - bp->ts_window_adjust); 764 } 765 766 time_ns = ioread32(&bp->reg->time_ns); 767 time_sec = ioread32(&bp->reg->time_sec); 768 769 ts->tv_sec = time_sec; 770 ts->tv_nsec = time_ns; 771 772 return ctrl & OCP_CTRL_READ_TIME_DONE ? 0 : -ETIMEDOUT; 773 } 774 775 static int 776 ptp_ocp_gettimex(struct ptp_clock_info *ptp_info, struct timespec64 *ts, 777 struct ptp_system_timestamp *sts) 778 { 779 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 780 unsigned long flags; 781 int err; 782 783 spin_lock_irqsave(&bp->lock, flags); 784 err = __ptp_ocp_gettime_locked(bp, ts, sts); 785 spin_unlock_irqrestore(&bp->lock, flags); 786 787 return err; 788 } 789 790 static void 791 __ptp_ocp_settime_locked(struct ptp_ocp *bp, const struct timespec64 *ts) 792 { 793 u32 ctrl, time_sec, time_ns; 794 u32 select; 795 796 time_ns = ts->tv_nsec; 797 time_sec = ts->tv_sec; 798 799 select = ioread32(&bp->reg->select); 800 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 801 802 iowrite32(time_ns, &bp->reg->adjust_ns); 803 iowrite32(time_sec, &bp->reg->adjust_sec); 804 805 ctrl = OCP_CTRL_ADJUST_TIME | OCP_CTRL_ENABLE; 806 iowrite32(ctrl, &bp->reg->ctrl); 807 808 /* restore clock selection */ 809 iowrite32(select >> 16, &bp->reg->select); 810 } 811 812 static int 813 ptp_ocp_settime(struct ptp_clock_info *ptp_info, const struct timespec64 *ts) 814 { 815 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 816 unsigned long flags; 817 818 spin_lock_irqsave(&bp->lock, flags); 819 __ptp_ocp_settime_locked(bp, ts); 820 spin_unlock_irqrestore(&bp->lock, flags); 821 822 return 0; 823 } 824 825 static void 826 __ptp_ocp_adjtime_locked(struct ptp_ocp *bp, u32 adj_val) 827 { 828 u32 select, ctrl; 829 830 select = ioread32(&bp->reg->select); 831 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 832 833 iowrite32(adj_val, &bp->reg->offset_ns); 834 iowrite32(NSEC_PER_SEC, &bp->reg->offset_window_ns); 835 836 ctrl = OCP_CTRL_ADJUST_OFFSET | OCP_CTRL_ENABLE; 837 iowrite32(ctrl, &bp->reg->ctrl); 838 839 /* restore clock selection */ 840 iowrite32(select >> 16, &bp->reg->select); 841 } 842 843 static void 844 ptp_ocp_adjtime_coarse(struct ptp_ocp *bp, u64 delta_ns) 845 { 846 struct timespec64 ts; 847 unsigned long flags; 848 int err; 849 850 spin_lock_irqsave(&bp->lock, flags); 851 err = __ptp_ocp_gettime_locked(bp, &ts, NULL); 852 if (likely(!err)) { 853 timespec64_add_ns(&ts, delta_ns); 854 __ptp_ocp_settime_locked(bp, &ts); 855 } 856 spin_unlock_irqrestore(&bp->lock, flags); 857 } 858 859 static int 860 ptp_ocp_adjtime(struct ptp_clock_info *ptp_info, s64 delta_ns) 861 { 862 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 863 unsigned long flags; 864 u32 adj_ns, sign; 865 866 if (delta_ns > NSEC_PER_SEC || -delta_ns > NSEC_PER_SEC) { 867 ptp_ocp_adjtime_coarse(bp, delta_ns); 868 return 0; 869 } 870 871 sign = delta_ns < 0 ? BIT(31) : 0; 872 adj_ns = sign ? -delta_ns : delta_ns; 873 874 spin_lock_irqsave(&bp->lock, flags); 875 __ptp_ocp_adjtime_locked(bp, sign | adj_ns); 876 spin_unlock_irqrestore(&bp->lock, flags); 877 878 return 0; 879 } 880 881 static int 882 ptp_ocp_null_adjfine(struct ptp_clock_info *ptp_info, long scaled_ppm) 883 { 884 if (scaled_ppm == 0) 885 return 0; 886 887 return -EOPNOTSUPP; 888 } 889 890 static int 891 ptp_ocp_null_adjphase(struct ptp_clock_info *ptp_info, s32 phase_ns) 892 { 893 return -EOPNOTSUPP; 894 } 895 896 static int 897 ptp_ocp_enable(struct ptp_clock_info *ptp_info, struct ptp_clock_request *rq, 898 int on) 899 { 900 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 901 struct ptp_ocp_ext_src *ext = NULL; 902 u32 req; 903 int err; 904 905 switch (rq->type) { 906 case PTP_CLK_REQ_EXTTS: 907 req = OCP_REQ_TIMESTAMP; 908 switch (rq->extts.index) { 909 case 0: 910 ext = bp->ts0; 911 break; 912 case 1: 913 ext = bp->ts1; 914 break; 915 case 2: 916 ext = bp->ts2; 917 break; 918 case 3: 919 ext = bp->ts3; 920 break; 921 case 4: 922 ext = bp->ts4; 923 break; 924 case 5: 925 ext = bp->pps; 926 break; 927 } 928 break; 929 case PTP_CLK_REQ_PPS: 930 req = OCP_REQ_PPS; 931 ext = bp->pps; 932 break; 933 case PTP_CLK_REQ_PEROUT: 934 switch (rq->perout.index) { 935 case 0: 936 /* This is a request for 1PPS on an output SMA. 937 * Allow, but assume manual configuration. 938 */ 939 if (on && (rq->perout.period.sec != 1 || 940 rq->perout.period.nsec != 0)) 941 return -EINVAL; 942 return 0; 943 case 1: 944 case 2: 945 case 3: 946 case 4: 947 req = rq->perout.index - 1; 948 ext = bp->signal_out[req]; 949 err = ptp_ocp_signal_from_perout(bp, req, &rq->perout); 950 if (err) 951 return err; 952 break; 953 } 954 break; 955 default: 956 return -EOPNOTSUPP; 957 } 958 959 err = -ENXIO; 960 if (ext) 961 err = ext->info->enable(ext, req, on); 962 963 return err; 964 } 965 966 static int 967 ptp_ocp_verify(struct ptp_clock_info *ptp_info, unsigned pin, 968 enum ptp_pin_function func, unsigned chan) 969 { 970 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 971 char buf[16]; 972 973 switch (func) { 974 case PTP_PF_NONE: 975 snprintf(buf, sizeof(buf), "IN: None"); 976 break; 977 case PTP_PF_EXTTS: 978 /* Allow timestamps, but require sysfs configuration. */ 979 return 0; 980 case PTP_PF_PEROUT: 981 /* channel 0 is 1PPS from PHC. 982 * channels 1..4 are the frequency generators. 983 */ 984 if (chan) 985 snprintf(buf, sizeof(buf), "OUT: GEN%d", chan); 986 else 987 snprintf(buf, sizeof(buf), "OUT: PHC"); 988 break; 989 default: 990 return -EOPNOTSUPP; 991 } 992 993 return ptp_ocp_sma_store(bp, buf, pin + 1); 994 } 995 996 static const struct ptp_clock_info ptp_ocp_clock_info = { 997 .owner = THIS_MODULE, 998 .name = KBUILD_MODNAME, 999 .max_adj = 100000000, 1000 .gettimex64 = ptp_ocp_gettimex, 1001 .settime64 = ptp_ocp_settime, 1002 .adjtime = ptp_ocp_adjtime, 1003 .adjfine = ptp_ocp_null_adjfine, 1004 .adjphase = ptp_ocp_null_adjphase, 1005 .enable = ptp_ocp_enable, 1006 .verify = ptp_ocp_verify, 1007 .pps = true, 1008 .n_ext_ts = 6, 1009 .n_per_out = 5, 1010 }; 1011 1012 static void 1013 __ptp_ocp_clear_drift_locked(struct ptp_ocp *bp) 1014 { 1015 u32 ctrl, select; 1016 1017 select = ioread32(&bp->reg->select); 1018 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 1019 1020 iowrite32(0, &bp->reg->drift_ns); 1021 1022 ctrl = OCP_CTRL_ADJUST_DRIFT | OCP_CTRL_ENABLE; 1023 iowrite32(ctrl, &bp->reg->ctrl); 1024 1025 /* restore clock selection */ 1026 iowrite32(select >> 16, &bp->reg->select); 1027 } 1028 1029 static void 1030 ptp_ocp_utc_distribute(struct ptp_ocp *bp, u32 val) 1031 { 1032 unsigned long flags; 1033 1034 spin_lock_irqsave(&bp->lock, flags); 1035 1036 bp->utc_tai_offset = val; 1037 1038 if (bp->irig_out) 1039 iowrite32(val, &bp->irig_out->adj_sec); 1040 if (bp->dcf_out) 1041 iowrite32(val, &bp->dcf_out->adj_sec); 1042 if (bp->nmea_out) 1043 iowrite32(val, &bp->nmea_out->adj_sec); 1044 1045 spin_unlock_irqrestore(&bp->lock, flags); 1046 } 1047 1048 static void 1049 ptp_ocp_watchdog(struct timer_list *t) 1050 { 1051 struct ptp_ocp *bp = from_timer(bp, t, watchdog); 1052 unsigned long flags; 1053 u32 status, utc_offset; 1054 1055 status = ioread32(&bp->pps_to_clk->status); 1056 1057 if (status & PPS_STATUS_SUPERV_ERR) { 1058 iowrite32(status, &bp->pps_to_clk->status); 1059 if (!bp->gnss_lost) { 1060 spin_lock_irqsave(&bp->lock, flags); 1061 __ptp_ocp_clear_drift_locked(bp); 1062 spin_unlock_irqrestore(&bp->lock, flags); 1063 bp->gnss_lost = ktime_get_real_seconds(); 1064 } 1065 1066 } else if (bp->gnss_lost) { 1067 bp->gnss_lost = 0; 1068 } 1069 1070 /* if GNSS provides correct data we can rely on 1071 * it to get leap second information 1072 */ 1073 if (bp->tod) { 1074 status = ioread32(&bp->tod->utc_status); 1075 utc_offset = status & TOD_STATUS_UTC_MASK; 1076 if (status & TOD_STATUS_UTC_VALID && 1077 utc_offset != bp->utc_tai_offset) 1078 ptp_ocp_utc_distribute(bp, utc_offset); 1079 } 1080 1081 mod_timer(&bp->watchdog, jiffies + HZ); 1082 } 1083 1084 static void 1085 ptp_ocp_estimate_pci_timing(struct ptp_ocp *bp) 1086 { 1087 ktime_t start, end; 1088 ktime_t delay; 1089 u32 ctrl; 1090 1091 ctrl = ioread32(&bp->reg->ctrl); 1092 ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE; 1093 1094 iowrite32(ctrl, &bp->reg->ctrl); 1095 1096 start = ktime_get_ns(); 1097 1098 ctrl = ioread32(&bp->reg->ctrl); 1099 1100 end = ktime_get_ns(); 1101 1102 delay = end - start; 1103 bp->ts_window_adjust = (delay >> 5) * 3; 1104 } 1105 1106 static int 1107 ptp_ocp_init_clock(struct ptp_ocp *bp) 1108 { 1109 struct timespec64 ts; 1110 bool sync; 1111 u32 ctrl; 1112 1113 ctrl = OCP_CTRL_ENABLE; 1114 iowrite32(ctrl, &bp->reg->ctrl); 1115 1116 /* NO DRIFT Correction */ 1117 /* offset_p:i 1/8, offset_i: 1/16, drift_p: 0, drift_i: 0 */ 1118 iowrite32(0x2000, &bp->reg->servo_offset_p); 1119 iowrite32(0x1000, &bp->reg->servo_offset_i); 1120 iowrite32(0, &bp->reg->servo_drift_p); 1121 iowrite32(0, &bp->reg->servo_drift_i); 1122 1123 /* latch servo values */ 1124 ctrl |= OCP_CTRL_ADJUST_SERVO; 1125 iowrite32(ctrl, &bp->reg->ctrl); 1126 1127 if ((ioread32(&bp->reg->ctrl) & OCP_CTRL_ENABLE) == 0) { 1128 dev_err(&bp->pdev->dev, "clock not enabled\n"); 1129 return -ENODEV; 1130 } 1131 1132 ptp_ocp_estimate_pci_timing(bp); 1133 1134 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; 1135 if (!sync) { 1136 ktime_get_clocktai_ts64(&ts); 1137 ptp_ocp_settime(&bp->ptp_info, &ts); 1138 } 1139 1140 /* If there is a clock supervisor, then enable the watchdog */ 1141 if (bp->pps_to_clk) { 1142 timer_setup(&bp->watchdog, ptp_ocp_watchdog, 0); 1143 mod_timer(&bp->watchdog, jiffies + HZ); 1144 } 1145 1146 return 0; 1147 } 1148 1149 static void 1150 ptp_ocp_tod_init(struct ptp_ocp *bp) 1151 { 1152 u32 ctrl, reg; 1153 1154 ctrl = ioread32(&bp->tod->ctrl); 1155 ctrl |= TOD_CTRL_PROTOCOL | TOD_CTRL_ENABLE; 1156 ctrl &= ~(TOD_CTRL_DISABLE_FMT_A | TOD_CTRL_DISABLE_FMT_B); 1157 iowrite32(ctrl, &bp->tod->ctrl); 1158 1159 reg = ioread32(&bp->tod->utc_status); 1160 if (reg & TOD_STATUS_UTC_VALID) 1161 ptp_ocp_utc_distribute(bp, reg & TOD_STATUS_UTC_MASK); 1162 } 1163 1164 static const char * 1165 ptp_ocp_tod_proto_name(const int idx) 1166 { 1167 static const char * const proto_name[] = { 1168 "NMEA", "NMEA_ZDA", "NMEA_RMC", "NMEA_none", 1169 "UBX", "UBX_UTC", "UBX_LS", "UBX_none" 1170 }; 1171 return proto_name[idx]; 1172 } 1173 1174 static const char * 1175 ptp_ocp_tod_gnss_name(int idx) 1176 { 1177 static const char * const gnss_name[] = { 1178 "ALL", "COMBINED", "GPS", "GLONASS", "GALILEO", "BEIDOU", 1179 "Unknown" 1180 }; 1181 if (idx >= ARRAY_SIZE(gnss_name)) 1182 idx = ARRAY_SIZE(gnss_name) - 1; 1183 return gnss_name[idx]; 1184 } 1185 1186 struct ptp_ocp_nvmem_match_info { 1187 struct ptp_ocp *bp; 1188 const void * const tag; 1189 }; 1190 1191 static int 1192 ptp_ocp_nvmem_match(struct device *dev, const void *data) 1193 { 1194 const struct ptp_ocp_nvmem_match_info *info = data; 1195 1196 dev = dev->parent; 1197 if (!i2c_verify_client(dev) || info->tag != dev->platform_data) 1198 return 0; 1199 1200 while ((dev = dev->parent)) 1201 if (dev->driver && !strcmp(dev->driver->name, KBUILD_MODNAME)) 1202 return info->bp == dev_get_drvdata(dev); 1203 return 0; 1204 } 1205 1206 static inline struct nvmem_device * 1207 ptp_ocp_nvmem_device_get(struct ptp_ocp *bp, const void * const tag) 1208 { 1209 struct ptp_ocp_nvmem_match_info info = { .bp = bp, .tag = tag }; 1210 1211 return nvmem_device_find(&info, ptp_ocp_nvmem_match); 1212 } 1213 1214 static inline void 1215 ptp_ocp_nvmem_device_put(struct nvmem_device **nvmemp) 1216 { 1217 if (*nvmemp != NULL) { 1218 nvmem_device_put(*nvmemp); 1219 *nvmemp = NULL; 1220 } 1221 } 1222 1223 static void 1224 ptp_ocp_read_eeprom(struct ptp_ocp *bp) 1225 { 1226 const struct ptp_ocp_eeprom_map *map; 1227 struct nvmem_device *nvmem; 1228 const void *tag; 1229 int ret; 1230 1231 if (!bp->i2c_ctrl) 1232 return; 1233 1234 tag = NULL; 1235 nvmem = NULL; 1236 1237 for (map = bp->eeprom_map; map->len; map++) { 1238 if (map->tag != tag) { 1239 tag = map->tag; 1240 ptp_ocp_nvmem_device_put(&nvmem); 1241 } 1242 if (!nvmem) { 1243 nvmem = ptp_ocp_nvmem_device_get(bp, tag); 1244 if (!nvmem) 1245 goto out; 1246 } 1247 ret = nvmem_device_read(nvmem, map->off, map->len, 1248 BP_MAP_ENTRY_ADDR(bp, map)); 1249 if (ret != map->len) 1250 goto read_fail; 1251 } 1252 1253 bp->has_eeprom_data = true; 1254 1255 out: 1256 ptp_ocp_nvmem_device_put(&nvmem); 1257 return; 1258 1259 read_fail: 1260 dev_err(&bp->pdev->dev, "could not read eeprom: %d\n", ret); 1261 goto out; 1262 } 1263 1264 static int 1265 ptp_ocp_firstchild(struct device *dev, void *data) 1266 { 1267 return 1; 1268 } 1269 1270 static struct device * 1271 ptp_ocp_find_flash(struct ptp_ocp *bp) 1272 { 1273 struct device *dev, *last; 1274 1275 last = NULL; 1276 dev = &bp->spi_flash->dev; 1277 1278 while ((dev = device_find_child(dev, NULL, ptp_ocp_firstchild))) { 1279 if (!strcmp("mtd", dev_bus_name(dev))) 1280 break; 1281 put_device(last); 1282 last = dev; 1283 } 1284 put_device(last); 1285 1286 return dev; 1287 } 1288 1289 static int 1290 ptp_ocp_devlink_flash(struct devlink *devlink, struct device *dev, 1291 const struct firmware *fw) 1292 { 1293 struct mtd_info *mtd = dev_get_drvdata(dev); 1294 struct ptp_ocp *bp = devlink_priv(devlink); 1295 size_t off, len, resid, wrote; 1296 struct erase_info erase; 1297 size_t base, blksz; 1298 int err = 0; 1299 1300 off = 0; 1301 base = bp->flash_start; 1302 blksz = 4096; 1303 resid = fw->size; 1304 1305 while (resid) { 1306 devlink_flash_update_status_notify(devlink, "Flashing", 1307 NULL, off, fw->size); 1308 1309 len = min_t(size_t, resid, blksz); 1310 erase.addr = base + off; 1311 erase.len = blksz; 1312 1313 err = mtd_erase(mtd, &erase); 1314 if (err) 1315 goto out; 1316 1317 err = mtd_write(mtd, base + off, len, &wrote, &fw->data[off]); 1318 if (err) 1319 goto out; 1320 1321 off += blksz; 1322 resid -= len; 1323 } 1324 out: 1325 return err; 1326 } 1327 1328 static int 1329 ptp_ocp_devlink_flash_update(struct devlink *devlink, 1330 struct devlink_flash_update_params *params, 1331 struct netlink_ext_ack *extack) 1332 { 1333 struct ptp_ocp *bp = devlink_priv(devlink); 1334 struct device *dev; 1335 const char *msg; 1336 int err; 1337 1338 dev = ptp_ocp_find_flash(bp); 1339 if (!dev) { 1340 dev_err(&bp->pdev->dev, "Can't find Flash SPI adapter\n"); 1341 return -ENODEV; 1342 } 1343 1344 devlink_flash_update_status_notify(devlink, "Preparing to flash", 1345 NULL, 0, 0); 1346 1347 err = ptp_ocp_devlink_flash(devlink, dev, params->fw); 1348 1349 msg = err ? "Flash error" : "Flash complete"; 1350 devlink_flash_update_status_notify(devlink, msg, NULL, 0, 0); 1351 1352 put_device(dev); 1353 return err; 1354 } 1355 1356 static int 1357 ptp_ocp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req, 1358 struct netlink_ext_ack *extack) 1359 { 1360 struct ptp_ocp *bp = devlink_priv(devlink); 1361 char buf[32]; 1362 int err; 1363 1364 err = devlink_info_driver_name_put(req, KBUILD_MODNAME); 1365 if (err) 1366 return err; 1367 1368 if (bp->fw_version & 0xffff) { 1369 sprintf(buf, "%d", bp->fw_version); 1370 err = devlink_info_version_running_put(req, "fw", buf); 1371 } else { 1372 sprintf(buf, "%d", bp->fw_version >> 16); 1373 err = devlink_info_version_running_put(req, "loader", buf); 1374 } 1375 if (err) 1376 return err; 1377 1378 if (!bp->has_eeprom_data) { 1379 ptp_ocp_read_eeprom(bp); 1380 if (!bp->has_eeprom_data) 1381 return 0; 1382 } 1383 1384 sprintf(buf, "%pM", bp->serial); 1385 err = devlink_info_serial_number_put(req, buf); 1386 if (err) 1387 return err; 1388 1389 err = devlink_info_version_fixed_put(req, 1390 DEVLINK_INFO_VERSION_GENERIC_BOARD_ID, 1391 bp->board_id); 1392 if (err) 1393 return err; 1394 1395 return 0; 1396 } 1397 1398 static const struct devlink_ops ptp_ocp_devlink_ops = { 1399 .flash_update = ptp_ocp_devlink_flash_update, 1400 .info_get = ptp_ocp_devlink_info_get, 1401 }; 1402 1403 static void __iomem * 1404 __ptp_ocp_get_mem(struct ptp_ocp *bp, unsigned long start, int size) 1405 { 1406 struct resource res = DEFINE_RES_MEM_NAMED(start, size, "ptp_ocp"); 1407 1408 return devm_ioremap_resource(&bp->pdev->dev, &res); 1409 } 1410 1411 static void __iomem * 1412 ptp_ocp_get_mem(struct ptp_ocp *bp, struct ocp_resource *r) 1413 { 1414 unsigned long start; 1415 1416 start = pci_resource_start(bp->pdev, 0) + r->offset; 1417 return __ptp_ocp_get_mem(bp, start, r->size); 1418 } 1419 1420 static void 1421 ptp_ocp_set_irq_resource(struct resource *res, int irq) 1422 { 1423 struct resource r = DEFINE_RES_IRQ(irq); 1424 *res = r; 1425 } 1426 1427 static void 1428 ptp_ocp_set_mem_resource(struct resource *res, unsigned long start, int size) 1429 { 1430 struct resource r = DEFINE_RES_MEM(start, size); 1431 *res = r; 1432 } 1433 1434 static int 1435 ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r) 1436 { 1437 struct ptp_ocp_flash_info *info; 1438 struct pci_dev *pdev = bp->pdev; 1439 struct platform_device *p; 1440 struct resource res[2]; 1441 unsigned long start; 1442 int id; 1443 1444 start = pci_resource_start(pdev, 0) + r->offset; 1445 ptp_ocp_set_mem_resource(&res[0], start, r->size); 1446 ptp_ocp_set_irq_resource(&res[1], pci_irq_vector(pdev, r->irq_vec)); 1447 1448 info = r->extra; 1449 id = pci_dev_id(pdev) << 1; 1450 id += info->pci_offset; 1451 1452 p = platform_device_register_resndata(&pdev->dev, info->name, id, 1453 res, 2, info->data, 1454 info->data_size); 1455 if (IS_ERR(p)) 1456 return PTR_ERR(p); 1457 1458 bp_assign_entry(bp, r, p); 1459 1460 return 0; 1461 } 1462 1463 static struct platform_device * 1464 ptp_ocp_i2c_bus(struct pci_dev *pdev, struct ocp_resource *r, int id) 1465 { 1466 struct ptp_ocp_i2c_info *info; 1467 struct resource res[2]; 1468 unsigned long start; 1469 1470 info = r->extra; 1471 start = pci_resource_start(pdev, 0) + r->offset; 1472 ptp_ocp_set_mem_resource(&res[0], start, r->size); 1473 ptp_ocp_set_irq_resource(&res[1], pci_irq_vector(pdev, r->irq_vec)); 1474 1475 return platform_device_register_resndata(&pdev->dev, info->name, 1476 id, res, 2, 1477 info->data, info->data_size); 1478 } 1479 1480 static int 1481 ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r) 1482 { 1483 struct pci_dev *pdev = bp->pdev; 1484 struct ptp_ocp_i2c_info *info; 1485 struct platform_device *p; 1486 struct clk_hw *clk; 1487 char buf[32]; 1488 int id; 1489 1490 info = r->extra; 1491 id = pci_dev_id(bp->pdev); 1492 1493 sprintf(buf, "AXI.%d", id); 1494 clk = clk_hw_register_fixed_rate(&pdev->dev, buf, NULL, 0, 1495 info->fixed_rate); 1496 if (IS_ERR(clk)) 1497 return PTR_ERR(clk); 1498 bp->i2c_clk = clk; 1499 1500 sprintf(buf, "%s.%d", info->name, id); 1501 devm_clk_hw_register_clkdev(&pdev->dev, clk, NULL, buf); 1502 p = ptp_ocp_i2c_bus(bp->pdev, r, id); 1503 if (IS_ERR(p)) 1504 return PTR_ERR(p); 1505 1506 bp_assign_entry(bp, r, p); 1507 1508 return 0; 1509 } 1510 1511 /* The expectation is that this is triggered only on error. */ 1512 static irqreturn_t 1513 ptp_ocp_signal_irq(int irq, void *priv) 1514 { 1515 struct ptp_ocp_ext_src *ext = priv; 1516 struct signal_reg __iomem *reg = ext->mem; 1517 struct ptp_ocp *bp = ext->bp; 1518 u32 enable, status; 1519 int gen; 1520 1521 gen = ext->info->index - 1; 1522 1523 enable = ioread32(®->enable); 1524 status = ioread32(®->status); 1525 1526 /* disable generator on error */ 1527 if (status || !enable) { 1528 iowrite32(0, ®->intr_mask); 1529 iowrite32(0, ®->enable); 1530 bp->signal[gen].running = false; 1531 } 1532 1533 iowrite32(0, ®->intr); /* ack interrupt */ 1534 1535 return IRQ_HANDLED; 1536 } 1537 1538 static int 1539 ptp_ocp_signal_set(struct ptp_ocp *bp, int gen, struct ptp_ocp_signal *s) 1540 { 1541 struct ptp_system_timestamp sts; 1542 struct timespec64 ts; 1543 ktime_t start_ns; 1544 int err; 1545 1546 if (!s->period) 1547 return 0; 1548 1549 if (!s->pulse) 1550 s->pulse = ktime_divns(s->period * s->duty, 100); 1551 1552 err = ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts); 1553 if (err) 1554 return err; 1555 1556 start_ns = ktime_set(ts.tv_sec, ts.tv_nsec) + NSEC_PER_MSEC; 1557 if (!s->start) { 1558 /* roundup() does not work on 32-bit systems */ 1559 s->start = DIV_ROUND_UP_ULL(start_ns, s->period); 1560 s->start = ktime_add(s->start, s->phase); 1561 } 1562 1563 if (s->duty < 1 || s->duty > 99) 1564 return -EINVAL; 1565 1566 if (s->pulse < 1 || s->pulse > s->period) 1567 return -EINVAL; 1568 1569 if (s->start < start_ns) 1570 return -EINVAL; 1571 1572 bp->signal[gen] = *s; 1573 1574 return 0; 1575 } 1576 1577 static int 1578 ptp_ocp_signal_from_perout(struct ptp_ocp *bp, int gen, 1579 struct ptp_perout_request *req) 1580 { 1581 struct ptp_ocp_signal s = { }; 1582 1583 s.polarity = bp->signal[gen].polarity; 1584 s.period = ktime_set(req->period.sec, req->period.nsec); 1585 if (!s.period) 1586 return 0; 1587 1588 if (req->flags & PTP_PEROUT_DUTY_CYCLE) { 1589 s.pulse = ktime_set(req->on.sec, req->on.nsec); 1590 s.duty = ktime_divns(s.pulse * 100, s.period); 1591 } 1592 1593 if (req->flags & PTP_PEROUT_PHASE) 1594 s.phase = ktime_set(req->phase.sec, req->phase.nsec); 1595 else 1596 s.start = ktime_set(req->start.sec, req->start.nsec); 1597 1598 return ptp_ocp_signal_set(bp, gen, &s); 1599 } 1600 1601 static int 1602 ptp_ocp_signal_enable(void *priv, u32 req, bool enable) 1603 { 1604 struct ptp_ocp_ext_src *ext = priv; 1605 struct signal_reg __iomem *reg = ext->mem; 1606 struct ptp_ocp *bp = ext->bp; 1607 struct timespec64 ts; 1608 int gen; 1609 1610 gen = ext->info->index - 1; 1611 1612 iowrite32(0, ®->intr_mask); 1613 iowrite32(0, ®->enable); 1614 bp->signal[gen].running = false; 1615 if (!enable) 1616 return 0; 1617 1618 ts = ktime_to_timespec64(bp->signal[gen].start); 1619 iowrite32(ts.tv_sec, ®->start_sec); 1620 iowrite32(ts.tv_nsec, ®->start_ns); 1621 1622 ts = ktime_to_timespec64(bp->signal[gen].period); 1623 iowrite32(ts.tv_sec, ®->period_sec); 1624 iowrite32(ts.tv_nsec, ®->period_ns); 1625 1626 ts = ktime_to_timespec64(bp->signal[gen].pulse); 1627 iowrite32(ts.tv_sec, ®->pulse_sec); 1628 iowrite32(ts.tv_nsec, ®->pulse_ns); 1629 1630 iowrite32(bp->signal[gen].polarity, ®->polarity); 1631 iowrite32(0, ®->repeat_count); 1632 1633 iowrite32(0, ®->intr); /* clear interrupt state */ 1634 iowrite32(1, ®->intr_mask); /* enable interrupt */ 1635 iowrite32(3, ®->enable); /* valid & enable */ 1636 1637 bp->signal[gen].running = true; 1638 1639 return 0; 1640 } 1641 1642 static irqreturn_t 1643 ptp_ocp_ts_irq(int irq, void *priv) 1644 { 1645 struct ptp_ocp_ext_src *ext = priv; 1646 struct ts_reg __iomem *reg = ext->mem; 1647 struct ptp_clock_event ev; 1648 u32 sec, nsec; 1649 1650 if (ext == ext->bp->pps) { 1651 if (ext->bp->pps_req_map & OCP_REQ_PPS) { 1652 ev.type = PTP_CLOCK_PPS; 1653 ptp_clock_event(ext->bp->ptp, &ev); 1654 } 1655 1656 if ((ext->bp->pps_req_map & ~OCP_REQ_PPS) == 0) 1657 goto out; 1658 } 1659 1660 /* XXX should fix API - this converts s/ns -> ts -> s/ns */ 1661 sec = ioread32(®->time_sec); 1662 nsec = ioread32(®->time_ns); 1663 1664 ev.type = PTP_CLOCK_EXTTS; 1665 ev.index = ext->info->index; 1666 ev.timestamp = sec * NSEC_PER_SEC + nsec; 1667 1668 ptp_clock_event(ext->bp->ptp, &ev); 1669 1670 out: 1671 iowrite32(1, ®->intr); /* write 1 to ack */ 1672 1673 return IRQ_HANDLED; 1674 } 1675 1676 static int 1677 ptp_ocp_ts_enable(void *priv, u32 req, bool enable) 1678 { 1679 struct ptp_ocp_ext_src *ext = priv; 1680 struct ts_reg __iomem *reg = ext->mem; 1681 struct ptp_ocp *bp = ext->bp; 1682 1683 if (ext == bp->pps) { 1684 u32 old_map = bp->pps_req_map; 1685 1686 if (enable) 1687 bp->pps_req_map |= req; 1688 else 1689 bp->pps_req_map &= ~req; 1690 1691 /* if no state change, just return */ 1692 if ((!!old_map ^ !!bp->pps_req_map) == 0) 1693 return 0; 1694 } 1695 1696 if (enable) { 1697 iowrite32(1, ®->enable); 1698 iowrite32(1, ®->intr_mask); 1699 iowrite32(1, ®->intr); 1700 } else { 1701 iowrite32(0, ®->intr_mask); 1702 iowrite32(0, ®->enable); 1703 } 1704 1705 return 0; 1706 } 1707 1708 static void 1709 ptp_ocp_unregister_ext(struct ptp_ocp_ext_src *ext) 1710 { 1711 ext->info->enable(ext, ~0, false); 1712 pci_free_irq(ext->bp->pdev, ext->irq_vec, ext); 1713 kfree(ext); 1714 } 1715 1716 static int 1717 ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r) 1718 { 1719 struct pci_dev *pdev = bp->pdev; 1720 struct ptp_ocp_ext_src *ext; 1721 int err; 1722 1723 ext = kzalloc(sizeof(*ext), GFP_KERNEL); 1724 if (!ext) 1725 return -ENOMEM; 1726 1727 ext->mem = ptp_ocp_get_mem(bp, r); 1728 if (IS_ERR(ext->mem)) { 1729 err = PTR_ERR(ext->mem); 1730 goto out; 1731 } 1732 1733 ext->bp = bp; 1734 ext->info = r->extra; 1735 ext->irq_vec = r->irq_vec; 1736 1737 err = pci_request_irq(pdev, r->irq_vec, ext->info->irq_fcn, NULL, 1738 ext, "ocp%d.%s", bp->id, r->name); 1739 if (err) { 1740 dev_err(&pdev->dev, "Could not get irq %d\n", r->irq_vec); 1741 goto out; 1742 } 1743 1744 bp_assign_entry(bp, r, ext); 1745 1746 return 0; 1747 1748 out: 1749 kfree(ext); 1750 return err; 1751 } 1752 1753 static int 1754 ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r) 1755 { 1756 struct pci_dev *pdev = bp->pdev; 1757 struct uart_8250_port uart; 1758 1759 /* Setting UPF_IOREMAP and leaving port.membase unspecified lets 1760 * the serial port device claim and release the pci resource. 1761 */ 1762 memset(&uart, 0, sizeof(uart)); 1763 uart.port.dev = &pdev->dev; 1764 uart.port.iotype = UPIO_MEM; 1765 uart.port.regshift = 2; 1766 uart.port.mapbase = pci_resource_start(pdev, 0) + r->offset; 1767 uart.port.irq = pci_irq_vector(pdev, r->irq_vec); 1768 uart.port.uartclk = 50000000; 1769 uart.port.flags = UPF_FIXED_TYPE | UPF_IOREMAP | UPF_NO_THRE_TEST; 1770 uart.port.type = PORT_16550A; 1771 1772 return serial8250_register_8250_port(&uart); 1773 } 1774 1775 static int 1776 ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r) 1777 { 1778 int port; 1779 1780 port = ptp_ocp_serial_line(bp, r); 1781 if (port < 0) 1782 return port; 1783 1784 bp_assign_entry(bp, r, port); 1785 1786 return 0; 1787 } 1788 1789 static int 1790 ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r) 1791 { 1792 void __iomem *mem; 1793 1794 mem = ptp_ocp_get_mem(bp, r); 1795 if (IS_ERR(mem)) 1796 return PTR_ERR(mem); 1797 1798 bp_assign_entry(bp, r, mem); 1799 1800 return 0; 1801 } 1802 1803 static void 1804 ptp_ocp_nmea_out_init(struct ptp_ocp *bp) 1805 { 1806 if (!bp->nmea_out) 1807 return; 1808 1809 iowrite32(0, &bp->nmea_out->ctrl); /* disable */ 1810 iowrite32(7, &bp->nmea_out->uart_baud); /* 115200 */ 1811 iowrite32(1, &bp->nmea_out->ctrl); /* enable */ 1812 } 1813 1814 static void 1815 _ptp_ocp_signal_init(struct ptp_ocp_signal *s, struct signal_reg __iomem *reg) 1816 { 1817 u32 val; 1818 1819 iowrite32(0, ®->enable); /* disable */ 1820 1821 val = ioread32(®->polarity); 1822 s->polarity = val ? true : false; 1823 s->duty = 50; 1824 } 1825 1826 static void 1827 ptp_ocp_signal_init(struct ptp_ocp *bp) 1828 { 1829 int i; 1830 1831 for (i = 0; i < 4; i++) 1832 if (bp->signal_out[i]) 1833 _ptp_ocp_signal_init(&bp->signal[i], 1834 bp->signal_out[i]->mem); 1835 } 1836 1837 static void 1838 ptp_ocp_sma_init(struct ptp_ocp *bp) 1839 { 1840 u32 reg; 1841 int i; 1842 1843 /* defaults */ 1844 bp->sma[0].mode = SMA_MODE_IN; 1845 bp->sma[1].mode = SMA_MODE_IN; 1846 bp->sma[2].mode = SMA_MODE_OUT; 1847 bp->sma[3].mode = SMA_MODE_OUT; 1848 1849 /* If no SMA1 map, the pin functions and directions are fixed. */ 1850 if (!bp->sma_map1) { 1851 for (i = 0; i < 4; i++) { 1852 bp->sma[i].fixed_fcn = true; 1853 bp->sma[i].fixed_dir = true; 1854 } 1855 return; 1856 } 1857 1858 /* If SMA2 GPIO output map is all 1, it is not present. 1859 * This indicates the firmware has fixed direction SMA pins. 1860 */ 1861 reg = ioread32(&bp->sma_map2->gpio2); 1862 if (reg == 0xffffffff) { 1863 for (i = 0; i < 4; i++) 1864 bp->sma[i].fixed_dir = true; 1865 } else { 1866 reg = ioread32(&bp->sma_map1->gpio1); 1867 bp->sma[0].mode = reg & BIT(15) ? SMA_MODE_IN : SMA_MODE_OUT; 1868 bp->sma[1].mode = reg & BIT(31) ? SMA_MODE_IN : SMA_MODE_OUT; 1869 1870 reg = ioread32(&bp->sma_map1->gpio2); 1871 bp->sma[2].mode = reg & BIT(15) ? SMA_MODE_OUT : SMA_MODE_IN; 1872 bp->sma[3].mode = reg & BIT(31) ? SMA_MODE_OUT : SMA_MODE_IN; 1873 } 1874 } 1875 1876 static int 1877 ptp_ocp_fb_set_pins(struct ptp_ocp *bp) 1878 { 1879 struct ptp_pin_desc *config; 1880 int i; 1881 1882 config = kzalloc(sizeof(*config) * 4, GFP_KERNEL); 1883 if (!config) 1884 return -ENOMEM; 1885 1886 for (i = 0; i < 4; i++) { 1887 sprintf(config[i].name, "sma%d", i + 1); 1888 config[i].index = i; 1889 } 1890 1891 bp->ptp_info.n_pins = 4; 1892 bp->ptp_info.pin_config = config; 1893 1894 return 0; 1895 } 1896 1897 /* FB specific board initializers; last "resource" registered. */ 1898 static int 1899 ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r) 1900 { 1901 int ver, err; 1902 1903 bp->flash_start = 1024 * 4096; 1904 bp->eeprom_map = fb_eeprom_map; 1905 bp->fw_version = ioread32(&bp->image->version); 1906 bp->attr_tbl = fb_timecard_groups; 1907 bp->fw_cap = OCP_CAP_BASIC; 1908 1909 ver = bp->fw_version & 0xffff; 1910 if (ver >= 19) 1911 bp->fw_cap |= OCP_CAP_SIGNAL; 1912 if (ver >= 20) 1913 bp->fw_cap |= OCP_CAP_FREQ; 1914 1915 ptp_ocp_tod_init(bp); 1916 ptp_ocp_nmea_out_init(bp); 1917 ptp_ocp_sma_init(bp); 1918 ptp_ocp_signal_init(bp); 1919 1920 err = ptp_ocp_fb_set_pins(bp); 1921 if (err) 1922 return err; 1923 1924 return ptp_ocp_init_clock(bp); 1925 } 1926 1927 static bool 1928 ptp_ocp_allow_irq(struct ptp_ocp *bp, struct ocp_resource *r) 1929 { 1930 bool allow = !r->irq_vec || r->irq_vec < bp->n_irqs; 1931 1932 if (!allow) 1933 dev_err(&bp->pdev->dev, "irq %d out of range, skipping %s\n", 1934 r->irq_vec, r->name); 1935 return allow; 1936 } 1937 1938 static int 1939 ptp_ocp_register_resources(struct ptp_ocp *bp, kernel_ulong_t driver_data) 1940 { 1941 struct ocp_resource *r, *table; 1942 int err = 0; 1943 1944 table = (struct ocp_resource *)driver_data; 1945 for (r = table; r->setup; r++) { 1946 if (!ptp_ocp_allow_irq(bp, r)) 1947 continue; 1948 err = r->setup(bp, r); 1949 if (err) { 1950 dev_err(&bp->pdev->dev, 1951 "Could not register %s: err %d\n", 1952 r->name, err); 1953 break; 1954 } 1955 } 1956 return err; 1957 } 1958 1959 static void 1960 ptp_ocp_enable_fpga(u32 __iomem *reg, u32 bit, bool enable) 1961 { 1962 u32 ctrl; 1963 bool on; 1964 1965 ctrl = ioread32(reg); 1966 on = ctrl & bit; 1967 if (on ^ enable) { 1968 ctrl &= ~bit; 1969 ctrl |= enable ? bit : 0; 1970 iowrite32(ctrl, reg); 1971 } 1972 } 1973 1974 static void 1975 ptp_ocp_irig_out(struct ptp_ocp *bp, bool enable) 1976 { 1977 return ptp_ocp_enable_fpga(&bp->irig_out->ctrl, 1978 IRIG_M_CTRL_ENABLE, enable); 1979 } 1980 1981 static void 1982 ptp_ocp_irig_in(struct ptp_ocp *bp, bool enable) 1983 { 1984 return ptp_ocp_enable_fpga(&bp->irig_in->ctrl, 1985 IRIG_S_CTRL_ENABLE, enable); 1986 } 1987 1988 static void 1989 ptp_ocp_dcf_out(struct ptp_ocp *bp, bool enable) 1990 { 1991 return ptp_ocp_enable_fpga(&bp->dcf_out->ctrl, 1992 DCF_M_CTRL_ENABLE, enable); 1993 } 1994 1995 static void 1996 ptp_ocp_dcf_in(struct ptp_ocp *bp, bool enable) 1997 { 1998 return ptp_ocp_enable_fpga(&bp->dcf_in->ctrl, 1999 DCF_S_CTRL_ENABLE, enable); 2000 } 2001 2002 static void 2003 __handle_signal_outputs(struct ptp_ocp *bp, u32 val) 2004 { 2005 ptp_ocp_irig_out(bp, val & 0x00100010); 2006 ptp_ocp_dcf_out(bp, val & 0x00200020); 2007 } 2008 2009 static void 2010 __handle_signal_inputs(struct ptp_ocp *bp, u32 val) 2011 { 2012 ptp_ocp_irig_in(bp, val & 0x00100010); 2013 ptp_ocp_dcf_in(bp, val & 0x00200020); 2014 } 2015 2016 /* 2017 * ANT0 == gps (in) 2018 * ANT1 == sma1 (in) 2019 * ANT2 == sma2 (in) 2020 * ANT3 == sma3 (out) 2021 * ANT4 == sma4 (out) 2022 */ 2023 2024 static ssize_t 2025 ptp_ocp_show_output(u32 val, char *buf, int def_val) 2026 { 2027 const char *name; 2028 ssize_t count; 2029 2030 count = sysfs_emit(buf, "OUT: "); 2031 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_out, val); 2032 if (!name) 2033 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_out, def_val); 2034 count += sysfs_emit_at(buf, count, "%s\n", name); 2035 return count; 2036 } 2037 2038 static ssize_t 2039 ptp_ocp_show_inputs(u32 val, char *buf, int def_val) 2040 { 2041 const char *name; 2042 ssize_t count; 2043 int i; 2044 2045 count = sysfs_emit(buf, "IN: "); 2046 for (i = 0; i < ARRAY_SIZE(ptp_ocp_sma_in); i++) { 2047 if (val & ptp_ocp_sma_in[i].value) { 2048 name = ptp_ocp_sma_in[i].name; 2049 count += sysfs_emit_at(buf, count, "%s ", name); 2050 } 2051 } 2052 if (!val && def_val >= 0) { 2053 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_in, def_val); 2054 count += sysfs_emit_at(buf, count, "%s ", name); 2055 } 2056 if (count) 2057 count--; 2058 count += sysfs_emit_at(buf, count, "\n"); 2059 return count; 2060 } 2061 2062 static int 2063 sma_parse_inputs(const char *buf, enum ptp_ocp_sma_mode *mode) 2064 { 2065 struct ocp_selector *tbl[] = { ptp_ocp_sma_in, ptp_ocp_sma_out }; 2066 int idx, count, dir; 2067 char **argv; 2068 int ret; 2069 2070 argv = argv_split(GFP_KERNEL, buf, &count); 2071 if (!argv) 2072 return -ENOMEM; 2073 2074 ret = -EINVAL; 2075 if (!count) 2076 goto out; 2077 2078 idx = 0; 2079 dir = *mode == SMA_MODE_IN ? 0 : 1; 2080 if (!strcasecmp("IN:", argv[0])) { 2081 dir = 0; 2082 idx++; 2083 } 2084 if (!strcasecmp("OUT:", argv[0])) { 2085 dir = 1; 2086 idx++; 2087 } 2088 *mode = dir == 0 ? SMA_MODE_IN : SMA_MODE_OUT; 2089 2090 ret = 0; 2091 for (; idx < count; idx++) 2092 ret |= ptp_ocp_select_val_from_name(tbl[dir], argv[idx]); 2093 if (ret < 0) 2094 ret = -EINVAL; 2095 2096 out: 2097 argv_free(argv); 2098 return ret; 2099 } 2100 2101 static u32 2102 ptp_ocp_sma_get(struct ptp_ocp *bp, int sma_nr, enum ptp_ocp_sma_mode mode) 2103 { 2104 u32 __iomem *gpio; 2105 u32 shift; 2106 2107 if (bp->sma[sma_nr - 1].fixed_fcn) 2108 return (sma_nr - 1) & 1; 2109 2110 if (mode == SMA_MODE_IN) 2111 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; 2112 else 2113 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; 2114 shift = sma_nr & 1 ? 0 : 16; 2115 2116 return (ioread32(gpio) >> shift) & 0xffff; 2117 } 2118 2119 static ssize_t 2120 ptp_ocp_sma_show(struct ptp_ocp *bp, int sma_nr, char *buf, 2121 int default_in_val, int default_out_val) 2122 { 2123 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; 2124 u32 val; 2125 2126 val = ptp_ocp_sma_get(bp, sma_nr, sma->mode) & SMA_SELECT_MASK; 2127 2128 if (sma->mode == SMA_MODE_IN) { 2129 if (sma->disabled) 2130 val = SMA_DISABLE; 2131 return ptp_ocp_show_inputs(val, buf, default_in_val); 2132 } 2133 2134 return ptp_ocp_show_output(val, buf, default_out_val); 2135 } 2136 2137 static ssize_t 2138 sma1_show(struct device *dev, struct device_attribute *attr, char *buf) 2139 { 2140 struct ptp_ocp *bp = dev_get_drvdata(dev); 2141 2142 return ptp_ocp_sma_show(bp, 1, buf, 0, 1); 2143 } 2144 2145 static ssize_t 2146 sma2_show(struct device *dev, struct device_attribute *attr, char *buf) 2147 { 2148 struct ptp_ocp *bp = dev_get_drvdata(dev); 2149 2150 return ptp_ocp_sma_show(bp, 2, buf, -1, 1); 2151 } 2152 2153 static ssize_t 2154 sma3_show(struct device *dev, struct device_attribute *attr, char *buf) 2155 { 2156 struct ptp_ocp *bp = dev_get_drvdata(dev); 2157 2158 return ptp_ocp_sma_show(bp, 3, buf, -1, 0); 2159 } 2160 2161 static ssize_t 2162 sma4_show(struct device *dev, struct device_attribute *attr, char *buf) 2163 { 2164 struct ptp_ocp *bp = dev_get_drvdata(dev); 2165 2166 return ptp_ocp_sma_show(bp, 4, buf, -1, 1); 2167 } 2168 2169 static void 2170 ptp_ocp_sma_store_output(struct ptp_ocp *bp, int sma_nr, u32 val) 2171 { 2172 u32 reg, mask, shift; 2173 unsigned long flags; 2174 u32 __iomem *gpio; 2175 2176 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; 2177 shift = sma_nr & 1 ? 0 : 16; 2178 2179 mask = 0xffff << (16 - shift); 2180 2181 spin_lock_irqsave(&bp->lock, flags); 2182 2183 reg = ioread32(gpio); 2184 reg = (reg & mask) | (val << shift); 2185 2186 __handle_signal_outputs(bp, reg); 2187 2188 iowrite32(reg, gpio); 2189 2190 spin_unlock_irqrestore(&bp->lock, flags); 2191 } 2192 2193 static void 2194 ptp_ocp_sma_store_inputs(struct ptp_ocp *bp, int sma_nr, u32 val) 2195 { 2196 u32 reg, mask, shift; 2197 unsigned long flags; 2198 u32 __iomem *gpio; 2199 2200 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; 2201 shift = sma_nr & 1 ? 0 : 16; 2202 2203 mask = 0xffff << (16 - shift); 2204 2205 spin_lock_irqsave(&bp->lock, flags); 2206 2207 reg = ioread32(gpio); 2208 reg = (reg & mask) | (val << shift); 2209 2210 __handle_signal_inputs(bp, reg); 2211 2212 iowrite32(reg, gpio); 2213 2214 spin_unlock_irqrestore(&bp->lock, flags); 2215 } 2216 2217 static int 2218 ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr) 2219 { 2220 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; 2221 enum ptp_ocp_sma_mode mode; 2222 int val; 2223 2224 mode = sma->mode; 2225 val = sma_parse_inputs(buf, &mode); 2226 if (val < 0) 2227 return val; 2228 2229 if (sma->fixed_dir && (mode != sma->mode || val & SMA_DISABLE)) 2230 return -EOPNOTSUPP; 2231 2232 if (sma->fixed_fcn) { 2233 if (val != ((sma_nr - 1) & 1)) 2234 return -EOPNOTSUPP; 2235 return 0; 2236 } 2237 2238 sma->disabled = !!(val & SMA_DISABLE); 2239 2240 if (mode != sma->mode) { 2241 if (mode == SMA_MODE_IN) 2242 ptp_ocp_sma_store_output(bp, sma_nr, 0); 2243 else 2244 ptp_ocp_sma_store_inputs(bp, sma_nr, 0); 2245 sma->mode = mode; 2246 } 2247 2248 if (!sma->fixed_dir) 2249 val |= SMA_ENABLE; /* add enable bit */ 2250 2251 if (sma->disabled) 2252 val = 0; 2253 2254 if (mode == SMA_MODE_IN) 2255 ptp_ocp_sma_store_inputs(bp, sma_nr, val); 2256 else 2257 ptp_ocp_sma_store_output(bp, sma_nr, val); 2258 2259 return 0; 2260 } 2261 2262 static ssize_t 2263 sma1_store(struct device *dev, struct device_attribute *attr, 2264 const char *buf, size_t count) 2265 { 2266 struct ptp_ocp *bp = dev_get_drvdata(dev); 2267 int err; 2268 2269 err = ptp_ocp_sma_store(bp, buf, 1); 2270 return err ? err : count; 2271 } 2272 2273 static ssize_t 2274 sma2_store(struct device *dev, struct device_attribute *attr, 2275 const char *buf, size_t count) 2276 { 2277 struct ptp_ocp *bp = dev_get_drvdata(dev); 2278 int err; 2279 2280 err = ptp_ocp_sma_store(bp, buf, 2); 2281 return err ? err : count; 2282 } 2283 2284 static ssize_t 2285 sma3_store(struct device *dev, struct device_attribute *attr, 2286 const char *buf, size_t count) 2287 { 2288 struct ptp_ocp *bp = dev_get_drvdata(dev); 2289 int err; 2290 2291 err = ptp_ocp_sma_store(bp, buf, 3); 2292 return err ? err : count; 2293 } 2294 2295 static ssize_t 2296 sma4_store(struct device *dev, struct device_attribute *attr, 2297 const char *buf, size_t count) 2298 { 2299 struct ptp_ocp *bp = dev_get_drvdata(dev); 2300 int err; 2301 2302 err = ptp_ocp_sma_store(bp, buf, 4); 2303 return err ? err : count; 2304 } 2305 static DEVICE_ATTR_RW(sma1); 2306 static DEVICE_ATTR_RW(sma2); 2307 static DEVICE_ATTR_RW(sma3); 2308 static DEVICE_ATTR_RW(sma4); 2309 2310 static ssize_t 2311 available_sma_inputs_show(struct device *dev, 2312 struct device_attribute *attr, char *buf) 2313 { 2314 return ptp_ocp_select_table_show(ptp_ocp_sma_in, buf); 2315 } 2316 static DEVICE_ATTR_RO(available_sma_inputs); 2317 2318 static ssize_t 2319 available_sma_outputs_show(struct device *dev, 2320 struct device_attribute *attr, char *buf) 2321 { 2322 return ptp_ocp_select_table_show(ptp_ocp_sma_out, buf); 2323 } 2324 static DEVICE_ATTR_RO(available_sma_outputs); 2325 2326 #define EXT_ATTR_RO(_group, _name, _val) \ 2327 struct dev_ext_attribute dev_attr_##_group##_val##_##_name = \ 2328 { __ATTR_RO(_name), (void *)_val } 2329 #define EXT_ATTR_RW(_group, _name, _val) \ 2330 struct dev_ext_attribute dev_attr_##_group##_val##_##_name = \ 2331 { __ATTR_RW(_name), (void *)_val } 2332 #define to_ext_attr(x) container_of(x, struct dev_ext_attribute, attr) 2333 2334 /* period [duty [phase [polarity]]] */ 2335 static ssize_t 2336 signal_store(struct device *dev, struct device_attribute *attr, 2337 const char *buf, size_t count) 2338 { 2339 struct dev_ext_attribute *ea = to_ext_attr(attr); 2340 struct ptp_ocp *bp = dev_get_drvdata(dev); 2341 struct ptp_ocp_signal s = { }; 2342 int gen = (uintptr_t)ea->var; 2343 int argc, err; 2344 char **argv; 2345 2346 argv = argv_split(GFP_KERNEL, buf, &argc); 2347 if (!argv) 2348 return -ENOMEM; 2349 2350 err = -EINVAL; 2351 s.duty = bp->signal[gen].duty; 2352 s.phase = bp->signal[gen].phase; 2353 s.period = bp->signal[gen].period; 2354 s.polarity = bp->signal[gen].polarity; 2355 2356 switch (argc) { 2357 case 4: 2358 argc--; 2359 err = kstrtobool(argv[argc], &s.polarity); 2360 if (err) 2361 goto out; 2362 fallthrough; 2363 case 3: 2364 argc--; 2365 err = kstrtou64(argv[argc], 0, &s.phase); 2366 if (err) 2367 goto out; 2368 fallthrough; 2369 case 2: 2370 argc--; 2371 err = kstrtoint(argv[argc], 0, &s.duty); 2372 if (err) 2373 goto out; 2374 fallthrough; 2375 case 1: 2376 argc--; 2377 err = kstrtou64(argv[argc], 0, &s.period); 2378 if (err) 2379 goto out; 2380 break; 2381 default: 2382 goto out; 2383 } 2384 2385 err = ptp_ocp_signal_set(bp, gen, &s); 2386 if (err) 2387 goto out; 2388 2389 err = ptp_ocp_signal_enable(bp->signal_out[gen], gen, s.period != 0); 2390 2391 out: 2392 argv_free(argv); 2393 return err ? err : count; 2394 } 2395 2396 static ssize_t 2397 signal_show(struct device *dev, struct device_attribute *attr, char *buf) 2398 { 2399 struct dev_ext_attribute *ea = to_ext_attr(attr); 2400 struct ptp_ocp *bp = dev_get_drvdata(dev); 2401 struct ptp_ocp_signal *signal; 2402 struct timespec64 ts; 2403 ssize_t count; 2404 int i; 2405 2406 i = (uintptr_t)ea->var; 2407 signal = &bp->signal[i]; 2408 2409 count = sysfs_emit(buf, "%llu %d %llu %d", signal->period, 2410 signal->duty, signal->phase, signal->polarity); 2411 2412 ts = ktime_to_timespec64(signal->start); 2413 count += sysfs_emit_at(buf, count, " %ptT TAI\n", &ts); 2414 2415 return count; 2416 } 2417 static EXT_ATTR_RW(signal, signal, 0); 2418 static EXT_ATTR_RW(signal, signal, 1); 2419 static EXT_ATTR_RW(signal, signal, 2); 2420 static EXT_ATTR_RW(signal, signal, 3); 2421 2422 static ssize_t 2423 duty_show(struct device *dev, struct device_attribute *attr, char *buf) 2424 { 2425 struct dev_ext_attribute *ea = to_ext_attr(attr); 2426 struct ptp_ocp *bp = dev_get_drvdata(dev); 2427 int i = (uintptr_t)ea->var; 2428 2429 return sysfs_emit(buf, "%d\n", bp->signal[i].duty); 2430 } 2431 static EXT_ATTR_RO(signal, duty, 0); 2432 static EXT_ATTR_RO(signal, duty, 1); 2433 static EXT_ATTR_RO(signal, duty, 2); 2434 static EXT_ATTR_RO(signal, duty, 3); 2435 2436 static ssize_t 2437 period_show(struct device *dev, struct device_attribute *attr, char *buf) 2438 { 2439 struct dev_ext_attribute *ea = to_ext_attr(attr); 2440 struct ptp_ocp *bp = dev_get_drvdata(dev); 2441 int i = (uintptr_t)ea->var; 2442 2443 return sysfs_emit(buf, "%llu\n", bp->signal[i].period); 2444 } 2445 static EXT_ATTR_RO(signal, period, 0); 2446 static EXT_ATTR_RO(signal, period, 1); 2447 static EXT_ATTR_RO(signal, period, 2); 2448 static EXT_ATTR_RO(signal, period, 3); 2449 2450 static ssize_t 2451 phase_show(struct device *dev, struct device_attribute *attr, char *buf) 2452 { 2453 struct dev_ext_attribute *ea = to_ext_attr(attr); 2454 struct ptp_ocp *bp = dev_get_drvdata(dev); 2455 int i = (uintptr_t)ea->var; 2456 2457 return sysfs_emit(buf, "%llu\n", bp->signal[i].phase); 2458 } 2459 static EXT_ATTR_RO(signal, phase, 0); 2460 static EXT_ATTR_RO(signal, phase, 1); 2461 static EXT_ATTR_RO(signal, phase, 2); 2462 static EXT_ATTR_RO(signal, phase, 3); 2463 2464 static ssize_t 2465 polarity_show(struct device *dev, struct device_attribute *attr, 2466 char *buf) 2467 { 2468 struct dev_ext_attribute *ea = to_ext_attr(attr); 2469 struct ptp_ocp *bp = dev_get_drvdata(dev); 2470 int i = (uintptr_t)ea->var; 2471 2472 return sysfs_emit(buf, "%d\n", bp->signal[i].polarity); 2473 } 2474 static EXT_ATTR_RO(signal, polarity, 0); 2475 static EXT_ATTR_RO(signal, polarity, 1); 2476 static EXT_ATTR_RO(signal, polarity, 2); 2477 static EXT_ATTR_RO(signal, polarity, 3); 2478 2479 static ssize_t 2480 running_show(struct device *dev, struct device_attribute *attr, char *buf) 2481 { 2482 struct dev_ext_attribute *ea = to_ext_attr(attr); 2483 struct ptp_ocp *bp = dev_get_drvdata(dev); 2484 int i = (uintptr_t)ea->var; 2485 2486 return sysfs_emit(buf, "%d\n", bp->signal[i].running); 2487 } 2488 static EXT_ATTR_RO(signal, running, 0); 2489 static EXT_ATTR_RO(signal, running, 1); 2490 static EXT_ATTR_RO(signal, running, 2); 2491 static EXT_ATTR_RO(signal, running, 3); 2492 2493 static ssize_t 2494 start_show(struct device *dev, struct device_attribute *attr, char *buf) 2495 { 2496 struct dev_ext_attribute *ea = to_ext_attr(attr); 2497 struct ptp_ocp *bp = dev_get_drvdata(dev); 2498 int i = (uintptr_t)ea->var; 2499 struct timespec64 ts; 2500 2501 ts = ktime_to_timespec64(bp->signal[i].start); 2502 return sysfs_emit(buf, "%llu.%lu\n", ts.tv_sec, ts.tv_nsec); 2503 } 2504 static EXT_ATTR_RO(signal, start, 0); 2505 static EXT_ATTR_RO(signal, start, 1); 2506 static EXT_ATTR_RO(signal, start, 2); 2507 static EXT_ATTR_RO(signal, start, 3); 2508 2509 static ssize_t 2510 seconds_store(struct device *dev, struct device_attribute *attr, 2511 const char *buf, size_t count) 2512 { 2513 struct dev_ext_attribute *ea = to_ext_attr(attr); 2514 struct ptp_ocp *bp = dev_get_drvdata(dev); 2515 int idx = (uintptr_t)ea->var; 2516 u32 val; 2517 int err; 2518 2519 err = kstrtou32(buf, 0, &val); 2520 if (err) 2521 return err; 2522 if (val > 0xff) 2523 return -EINVAL; 2524 2525 if (val) 2526 val = (val << 8) | 0x1; 2527 2528 iowrite32(val, &bp->freq_in[idx]->ctrl); 2529 2530 return count; 2531 } 2532 2533 static ssize_t 2534 seconds_show(struct device *dev, struct device_attribute *attr, char *buf) 2535 { 2536 struct dev_ext_attribute *ea = to_ext_attr(attr); 2537 struct ptp_ocp *bp = dev_get_drvdata(dev); 2538 int idx = (uintptr_t)ea->var; 2539 u32 val; 2540 2541 val = ioread32(&bp->freq_in[idx]->ctrl); 2542 if (val & 1) 2543 val = (val >> 8) & 0xff; 2544 else 2545 val = 0; 2546 2547 return sysfs_emit(buf, "%u\n", val); 2548 } 2549 static EXT_ATTR_RW(freq, seconds, 0); 2550 static EXT_ATTR_RW(freq, seconds, 1); 2551 static EXT_ATTR_RW(freq, seconds, 2); 2552 static EXT_ATTR_RW(freq, seconds, 3); 2553 2554 static ssize_t 2555 frequency_show(struct device *dev, struct device_attribute *attr, char *buf) 2556 { 2557 struct dev_ext_attribute *ea = to_ext_attr(attr); 2558 struct ptp_ocp *bp = dev_get_drvdata(dev); 2559 int idx = (uintptr_t)ea->var; 2560 u32 val; 2561 2562 val = ioread32(&bp->freq_in[idx]->status); 2563 if (val & FREQ_STATUS_ERROR) 2564 return sysfs_emit(buf, "error\n"); 2565 if (val & FREQ_STATUS_OVERRUN) 2566 return sysfs_emit(buf, "overrun\n"); 2567 if (val & FREQ_STATUS_VALID) 2568 return sysfs_emit(buf, "%lu\n", val & FREQ_STATUS_MASK); 2569 return 0; 2570 } 2571 static EXT_ATTR_RO(freq, frequency, 0); 2572 static EXT_ATTR_RO(freq, frequency, 1); 2573 static EXT_ATTR_RO(freq, frequency, 2); 2574 static EXT_ATTR_RO(freq, frequency, 3); 2575 2576 static ssize_t 2577 serialnum_show(struct device *dev, struct device_attribute *attr, char *buf) 2578 { 2579 struct ptp_ocp *bp = dev_get_drvdata(dev); 2580 2581 if (!bp->has_eeprom_data) 2582 ptp_ocp_read_eeprom(bp); 2583 2584 return sysfs_emit(buf, "%pM\n", bp->serial); 2585 } 2586 static DEVICE_ATTR_RO(serialnum); 2587 2588 static ssize_t 2589 gnss_sync_show(struct device *dev, struct device_attribute *attr, char *buf) 2590 { 2591 struct ptp_ocp *bp = dev_get_drvdata(dev); 2592 ssize_t ret; 2593 2594 if (bp->gnss_lost) 2595 ret = sysfs_emit(buf, "LOST @ %ptT\n", &bp->gnss_lost); 2596 else 2597 ret = sysfs_emit(buf, "SYNC\n"); 2598 2599 return ret; 2600 } 2601 static DEVICE_ATTR_RO(gnss_sync); 2602 2603 static ssize_t 2604 utc_tai_offset_show(struct device *dev, 2605 struct device_attribute *attr, char *buf) 2606 { 2607 struct ptp_ocp *bp = dev_get_drvdata(dev); 2608 2609 return sysfs_emit(buf, "%d\n", bp->utc_tai_offset); 2610 } 2611 2612 static ssize_t 2613 utc_tai_offset_store(struct device *dev, 2614 struct device_attribute *attr, 2615 const char *buf, size_t count) 2616 { 2617 struct ptp_ocp *bp = dev_get_drvdata(dev); 2618 int err; 2619 u32 val; 2620 2621 err = kstrtou32(buf, 0, &val); 2622 if (err) 2623 return err; 2624 2625 ptp_ocp_utc_distribute(bp, val); 2626 2627 return count; 2628 } 2629 static DEVICE_ATTR_RW(utc_tai_offset); 2630 2631 static ssize_t 2632 ts_window_adjust_show(struct device *dev, 2633 struct device_attribute *attr, char *buf) 2634 { 2635 struct ptp_ocp *bp = dev_get_drvdata(dev); 2636 2637 return sysfs_emit(buf, "%d\n", bp->ts_window_adjust); 2638 } 2639 2640 static ssize_t 2641 ts_window_adjust_store(struct device *dev, 2642 struct device_attribute *attr, 2643 const char *buf, size_t count) 2644 { 2645 struct ptp_ocp *bp = dev_get_drvdata(dev); 2646 int err; 2647 u32 val; 2648 2649 err = kstrtou32(buf, 0, &val); 2650 if (err) 2651 return err; 2652 2653 bp->ts_window_adjust = val; 2654 2655 return count; 2656 } 2657 static DEVICE_ATTR_RW(ts_window_adjust); 2658 2659 static ssize_t 2660 irig_b_mode_show(struct device *dev, struct device_attribute *attr, char *buf) 2661 { 2662 struct ptp_ocp *bp = dev_get_drvdata(dev); 2663 u32 val; 2664 2665 val = ioread32(&bp->irig_out->ctrl); 2666 val = (val >> 16) & 0x07; 2667 return sysfs_emit(buf, "%d\n", val); 2668 } 2669 2670 static ssize_t 2671 irig_b_mode_store(struct device *dev, 2672 struct device_attribute *attr, 2673 const char *buf, size_t count) 2674 { 2675 struct ptp_ocp *bp = dev_get_drvdata(dev); 2676 unsigned long flags; 2677 int err; 2678 u32 reg; 2679 u8 val; 2680 2681 err = kstrtou8(buf, 0, &val); 2682 if (err) 2683 return err; 2684 if (val > 7) 2685 return -EINVAL; 2686 2687 reg = ((val & 0x7) << 16); 2688 2689 spin_lock_irqsave(&bp->lock, flags); 2690 iowrite32(0, &bp->irig_out->ctrl); /* disable */ 2691 iowrite32(reg, &bp->irig_out->ctrl); /* change mode */ 2692 iowrite32(reg | IRIG_M_CTRL_ENABLE, &bp->irig_out->ctrl); 2693 spin_unlock_irqrestore(&bp->lock, flags); 2694 2695 return count; 2696 } 2697 static DEVICE_ATTR_RW(irig_b_mode); 2698 2699 static ssize_t 2700 clock_source_show(struct device *dev, struct device_attribute *attr, char *buf) 2701 { 2702 struct ptp_ocp *bp = dev_get_drvdata(dev); 2703 const char *p; 2704 u32 select; 2705 2706 select = ioread32(&bp->reg->select); 2707 p = ptp_ocp_select_name_from_val(ptp_ocp_clock, select >> 16); 2708 2709 return sysfs_emit(buf, "%s\n", p); 2710 } 2711 2712 static ssize_t 2713 clock_source_store(struct device *dev, struct device_attribute *attr, 2714 const char *buf, size_t count) 2715 { 2716 struct ptp_ocp *bp = dev_get_drvdata(dev); 2717 unsigned long flags; 2718 int val; 2719 2720 val = ptp_ocp_select_val_from_name(ptp_ocp_clock, buf); 2721 if (val < 0) 2722 return val; 2723 2724 spin_lock_irqsave(&bp->lock, flags); 2725 iowrite32(val, &bp->reg->select); 2726 spin_unlock_irqrestore(&bp->lock, flags); 2727 2728 return count; 2729 } 2730 static DEVICE_ATTR_RW(clock_source); 2731 2732 static ssize_t 2733 available_clock_sources_show(struct device *dev, 2734 struct device_attribute *attr, char *buf) 2735 { 2736 return ptp_ocp_select_table_show(ptp_ocp_clock, buf); 2737 } 2738 static DEVICE_ATTR_RO(available_clock_sources); 2739 2740 static ssize_t 2741 clock_status_drift_show(struct device *dev, 2742 struct device_attribute *attr, char *buf) 2743 { 2744 struct ptp_ocp *bp = dev_get_drvdata(dev); 2745 u32 val; 2746 int res; 2747 2748 val = ioread32(&bp->reg->status_drift); 2749 res = (val & ~INT_MAX) ? -1 : 1; 2750 res *= (val & INT_MAX); 2751 return sysfs_emit(buf, "%d\n", res); 2752 } 2753 static DEVICE_ATTR_RO(clock_status_drift); 2754 2755 static ssize_t 2756 clock_status_offset_show(struct device *dev, 2757 struct device_attribute *attr, char *buf) 2758 { 2759 struct ptp_ocp *bp = dev_get_drvdata(dev); 2760 u32 val; 2761 int res; 2762 2763 val = ioread32(&bp->reg->status_offset); 2764 res = (val & ~INT_MAX) ? -1 : 1; 2765 res *= (val & INT_MAX); 2766 return sysfs_emit(buf, "%d\n", res); 2767 } 2768 static DEVICE_ATTR_RO(clock_status_offset); 2769 2770 static ssize_t 2771 tod_correction_show(struct device *dev, 2772 struct device_attribute *attr, char *buf) 2773 { 2774 struct ptp_ocp *bp = dev_get_drvdata(dev); 2775 u32 val; 2776 int res; 2777 2778 val = ioread32(&bp->tod->adj_sec); 2779 res = (val & ~INT_MAX) ? -1 : 1; 2780 res *= (val & INT_MAX); 2781 return sysfs_emit(buf, "%d\n", res); 2782 } 2783 2784 static ssize_t 2785 tod_correction_store(struct device *dev, struct device_attribute *attr, 2786 const char *buf, size_t count) 2787 { 2788 struct ptp_ocp *bp = dev_get_drvdata(dev); 2789 unsigned long flags; 2790 int err, res; 2791 u32 val = 0; 2792 2793 err = kstrtos32(buf, 0, &res); 2794 if (err) 2795 return err; 2796 if (res < 0) { 2797 res *= -1; 2798 val |= BIT(31); 2799 } 2800 val |= res; 2801 2802 spin_lock_irqsave(&bp->lock, flags); 2803 iowrite32(val, &bp->tod->adj_sec); 2804 spin_unlock_irqrestore(&bp->lock, flags); 2805 2806 return count; 2807 } 2808 static DEVICE_ATTR_RW(tod_correction); 2809 2810 #define _DEVICE_SIGNAL_GROUP_ATTRS(_nr) \ 2811 static struct attribute *fb_timecard_signal##_nr##_attrs[] = { \ 2812 &dev_attr_signal##_nr##_signal.attr.attr, \ 2813 &dev_attr_signal##_nr##_duty.attr.attr, \ 2814 &dev_attr_signal##_nr##_phase.attr.attr, \ 2815 &dev_attr_signal##_nr##_period.attr.attr, \ 2816 &dev_attr_signal##_nr##_polarity.attr.attr, \ 2817 &dev_attr_signal##_nr##_running.attr.attr, \ 2818 &dev_attr_signal##_nr##_start.attr.attr, \ 2819 NULL, \ 2820 } 2821 2822 #define DEVICE_SIGNAL_GROUP(_name, _nr) \ 2823 _DEVICE_SIGNAL_GROUP_ATTRS(_nr); \ 2824 static const struct attribute_group \ 2825 fb_timecard_signal##_nr##_group = { \ 2826 .name = #_name, \ 2827 .attrs = fb_timecard_signal##_nr##_attrs, \ 2828 } 2829 2830 DEVICE_SIGNAL_GROUP(gen1, 0); 2831 DEVICE_SIGNAL_GROUP(gen2, 1); 2832 DEVICE_SIGNAL_GROUP(gen3, 2); 2833 DEVICE_SIGNAL_GROUP(gen4, 3); 2834 2835 #define _DEVICE_FREQ_GROUP_ATTRS(_nr) \ 2836 static struct attribute *fb_timecard_freq##_nr##_attrs[] = { \ 2837 &dev_attr_freq##_nr##_seconds.attr.attr, \ 2838 &dev_attr_freq##_nr##_frequency.attr.attr, \ 2839 NULL, \ 2840 } 2841 2842 #define DEVICE_FREQ_GROUP(_name, _nr) \ 2843 _DEVICE_FREQ_GROUP_ATTRS(_nr); \ 2844 static const struct attribute_group \ 2845 fb_timecard_freq##_nr##_group = { \ 2846 .name = #_name, \ 2847 .attrs = fb_timecard_freq##_nr##_attrs, \ 2848 } 2849 2850 DEVICE_FREQ_GROUP(freq1, 0); 2851 DEVICE_FREQ_GROUP(freq2, 1); 2852 DEVICE_FREQ_GROUP(freq3, 2); 2853 DEVICE_FREQ_GROUP(freq4, 3); 2854 2855 static struct attribute *fb_timecard_attrs[] = { 2856 &dev_attr_serialnum.attr, 2857 &dev_attr_gnss_sync.attr, 2858 &dev_attr_clock_source.attr, 2859 &dev_attr_available_clock_sources.attr, 2860 &dev_attr_sma1.attr, 2861 &dev_attr_sma2.attr, 2862 &dev_attr_sma3.attr, 2863 &dev_attr_sma4.attr, 2864 &dev_attr_available_sma_inputs.attr, 2865 &dev_attr_available_sma_outputs.attr, 2866 &dev_attr_clock_status_drift.attr, 2867 &dev_attr_clock_status_offset.attr, 2868 &dev_attr_irig_b_mode.attr, 2869 &dev_attr_utc_tai_offset.attr, 2870 &dev_attr_ts_window_adjust.attr, 2871 &dev_attr_tod_correction.attr, 2872 NULL, 2873 }; 2874 static const struct attribute_group fb_timecard_group = { 2875 .attrs = fb_timecard_attrs, 2876 }; 2877 static const struct ocp_attr_group fb_timecard_groups[] = { 2878 { .cap = OCP_CAP_BASIC, .group = &fb_timecard_group }, 2879 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal0_group }, 2880 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal1_group }, 2881 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal2_group }, 2882 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal3_group }, 2883 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq0_group }, 2884 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq1_group }, 2885 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq2_group }, 2886 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq3_group }, 2887 { }, 2888 }; 2889 2890 static void 2891 gpio_input_map(char *buf, struct ptp_ocp *bp, u16 map[][2], u16 bit, 2892 const char *def) 2893 { 2894 int i; 2895 2896 for (i = 0; i < 4; i++) { 2897 if (bp->sma[i].mode != SMA_MODE_IN) 2898 continue; 2899 if (map[i][0] & (1 << bit)) { 2900 sprintf(buf, "sma%d", i + 1); 2901 return; 2902 } 2903 } 2904 if (!def) 2905 def = "----"; 2906 strcpy(buf, def); 2907 } 2908 2909 static void 2910 gpio_output_map(char *buf, struct ptp_ocp *bp, u16 map[][2], u16 bit) 2911 { 2912 char *ans = buf; 2913 int i; 2914 2915 strcpy(ans, "----"); 2916 for (i = 0; i < 4; i++) { 2917 if (bp->sma[i].mode != SMA_MODE_OUT) 2918 continue; 2919 if (map[i][1] & (1 << bit)) 2920 ans += sprintf(ans, "sma%d ", i + 1); 2921 } 2922 } 2923 2924 static void 2925 _signal_summary_show(struct seq_file *s, struct ptp_ocp *bp, int nr) 2926 { 2927 struct signal_reg __iomem *reg = bp->signal_out[nr]->mem; 2928 struct ptp_ocp_signal *signal = &bp->signal[nr]; 2929 char label[8]; 2930 bool on; 2931 u32 val; 2932 2933 if (!signal) 2934 return; 2935 2936 on = signal->running; 2937 sprintf(label, "GEN%d", nr + 1); 2938 seq_printf(s, "%7s: %s, period:%llu duty:%d%% phase:%llu pol:%d", 2939 label, on ? " ON" : "OFF", 2940 signal->period, signal->duty, signal->phase, 2941 signal->polarity); 2942 2943 val = ioread32(®->enable); 2944 seq_printf(s, " [%x", val); 2945 val = ioread32(®->status); 2946 seq_printf(s, " %x]", val); 2947 2948 seq_printf(s, " start:%llu\n", signal->start); 2949 } 2950 2951 static void 2952 _frequency_summary_show(struct seq_file *s, int nr, 2953 struct frequency_reg __iomem *reg) 2954 { 2955 char label[8]; 2956 bool on; 2957 u32 val; 2958 2959 if (!reg) 2960 return; 2961 2962 sprintf(label, "FREQ%d", nr + 1); 2963 val = ioread32(®->ctrl); 2964 on = val & 1; 2965 val = (val >> 8) & 0xff; 2966 seq_printf(s, "%7s: %s, sec:%u", 2967 label, 2968 on ? " ON" : "OFF", 2969 val); 2970 2971 val = ioread32(®->status); 2972 if (val & FREQ_STATUS_ERROR) 2973 seq_printf(s, ", error"); 2974 if (val & FREQ_STATUS_OVERRUN) 2975 seq_printf(s, ", overrun"); 2976 if (val & FREQ_STATUS_VALID) 2977 seq_printf(s, ", freq %lu Hz", val & FREQ_STATUS_MASK); 2978 seq_printf(s, " reg:%x\n", val); 2979 } 2980 2981 static int 2982 ptp_ocp_summary_show(struct seq_file *s, void *data) 2983 { 2984 struct device *dev = s->private; 2985 struct ptp_system_timestamp sts; 2986 struct ts_reg __iomem *ts_reg; 2987 struct timespec64 ts; 2988 struct ptp_ocp *bp; 2989 u16 sma_val[4][2]; 2990 char *src, *buf; 2991 u32 ctrl, val; 2992 bool on, map; 2993 int i; 2994 2995 buf = (char *)__get_free_page(GFP_KERNEL); 2996 if (!buf) 2997 return -ENOMEM; 2998 2999 bp = dev_get_drvdata(dev); 3000 3001 seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp)); 3002 if (bp->gnss_port != -1) 3003 seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS1", bp->gnss_port); 3004 if (bp->gnss2_port != -1) 3005 seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS2", bp->gnss2_port); 3006 if (bp->mac_port != -1) 3007 seq_printf(s, "%7s: /dev/ttyS%d\n", "MAC", bp->mac_port); 3008 if (bp->nmea_port != -1) 3009 seq_printf(s, "%7s: /dev/ttyS%d\n", "NMEA", bp->nmea_port); 3010 3011 memset(sma_val, 0xff, sizeof(sma_val)); 3012 if (bp->sma_map1) { 3013 u32 reg; 3014 3015 reg = ioread32(&bp->sma_map1->gpio1); 3016 sma_val[0][0] = reg & 0xffff; 3017 sma_val[1][0] = reg >> 16; 3018 3019 reg = ioread32(&bp->sma_map1->gpio2); 3020 sma_val[2][1] = reg & 0xffff; 3021 sma_val[3][1] = reg >> 16; 3022 3023 reg = ioread32(&bp->sma_map2->gpio1); 3024 sma_val[2][0] = reg & 0xffff; 3025 sma_val[3][0] = reg >> 16; 3026 3027 reg = ioread32(&bp->sma_map2->gpio2); 3028 sma_val[0][1] = reg & 0xffff; 3029 sma_val[1][1] = reg >> 16; 3030 } 3031 3032 sma1_show(dev, NULL, buf); 3033 seq_printf(s, " sma1: %04x,%04x %s", 3034 sma_val[0][0], sma_val[0][1], buf); 3035 3036 sma2_show(dev, NULL, buf); 3037 seq_printf(s, " sma2: %04x,%04x %s", 3038 sma_val[1][0], sma_val[1][1], buf); 3039 3040 sma3_show(dev, NULL, buf); 3041 seq_printf(s, " sma3: %04x,%04x %s", 3042 sma_val[2][0], sma_val[2][1], buf); 3043 3044 sma4_show(dev, NULL, buf); 3045 seq_printf(s, " sma4: %04x,%04x %s", 3046 sma_val[3][0], sma_val[3][1], buf); 3047 3048 if (bp->ts0) { 3049 ts_reg = bp->ts0->mem; 3050 on = ioread32(&ts_reg->enable); 3051 src = "GNSS1"; 3052 seq_printf(s, "%7s: %s, src: %s\n", "TS0", 3053 on ? " ON" : "OFF", src); 3054 } 3055 3056 if (bp->ts1) { 3057 ts_reg = bp->ts1->mem; 3058 on = ioread32(&ts_reg->enable); 3059 gpio_input_map(buf, bp, sma_val, 2, NULL); 3060 seq_printf(s, "%7s: %s, src: %s\n", "TS1", 3061 on ? " ON" : "OFF", buf); 3062 } 3063 3064 if (bp->ts2) { 3065 ts_reg = bp->ts2->mem; 3066 on = ioread32(&ts_reg->enable); 3067 gpio_input_map(buf, bp, sma_val, 3, NULL); 3068 seq_printf(s, "%7s: %s, src: %s\n", "TS2", 3069 on ? " ON" : "OFF", buf); 3070 } 3071 3072 if (bp->ts3) { 3073 ts_reg = bp->ts3->mem; 3074 on = ioread32(&ts_reg->enable); 3075 gpio_input_map(buf, bp, sma_val, 6, NULL); 3076 seq_printf(s, "%7s: %s, src: %s\n", "TS3", 3077 on ? " ON" : "OFF", buf); 3078 } 3079 3080 if (bp->ts4) { 3081 ts_reg = bp->ts4->mem; 3082 on = ioread32(&ts_reg->enable); 3083 gpio_input_map(buf, bp, sma_val, 7, NULL); 3084 seq_printf(s, "%7s: %s, src: %s\n", "TS4", 3085 on ? " ON" : "OFF", buf); 3086 } 3087 3088 if (bp->pps) { 3089 ts_reg = bp->pps->mem; 3090 src = "PHC"; 3091 on = ioread32(&ts_reg->enable); 3092 map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP); 3093 seq_printf(s, "%7s: %s, src: %s\n", "TS5", 3094 on && map ? " ON" : "OFF", src); 3095 3096 map = !!(bp->pps_req_map & OCP_REQ_PPS); 3097 seq_printf(s, "%7s: %s, src: %s\n", "PPS", 3098 on && map ? " ON" : "OFF", src); 3099 } 3100 3101 if (bp->fw_cap & OCP_CAP_SIGNAL) 3102 for (i = 0; i < 4; i++) 3103 _signal_summary_show(s, bp, i); 3104 3105 if (bp->fw_cap & OCP_CAP_FREQ) 3106 for (i = 0; i < 4; i++) 3107 _frequency_summary_show(s, i, bp->freq_in[i]); 3108 3109 if (bp->irig_out) { 3110 ctrl = ioread32(&bp->irig_out->ctrl); 3111 on = ctrl & IRIG_M_CTRL_ENABLE; 3112 val = ioread32(&bp->irig_out->status); 3113 gpio_output_map(buf, bp, sma_val, 4); 3114 seq_printf(s, "%7s: %s, error: %d, mode %d, out: %s\n", "IRIG", 3115 on ? " ON" : "OFF", val, (ctrl >> 16), buf); 3116 } 3117 3118 if (bp->irig_in) { 3119 on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE; 3120 val = ioread32(&bp->irig_in->status); 3121 gpio_input_map(buf, bp, sma_val, 4, NULL); 3122 seq_printf(s, "%7s: %s, error: %d, src: %s\n", "IRIG in", 3123 on ? " ON" : "OFF", val, buf); 3124 } 3125 3126 if (bp->dcf_out) { 3127 on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE; 3128 val = ioread32(&bp->dcf_out->status); 3129 gpio_output_map(buf, bp, sma_val, 5); 3130 seq_printf(s, "%7s: %s, error: %d, out: %s\n", "DCF", 3131 on ? " ON" : "OFF", val, buf); 3132 } 3133 3134 if (bp->dcf_in) { 3135 on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE; 3136 val = ioread32(&bp->dcf_in->status); 3137 gpio_input_map(buf, bp, sma_val, 5, NULL); 3138 seq_printf(s, "%7s: %s, error: %d, src: %s\n", "DCF in", 3139 on ? " ON" : "OFF", val, buf); 3140 } 3141 3142 if (bp->nmea_out) { 3143 on = ioread32(&bp->nmea_out->ctrl) & 1; 3144 val = ioread32(&bp->nmea_out->status); 3145 seq_printf(s, "%7s: %s, error: %d\n", "NMEA", 3146 on ? " ON" : "OFF", val); 3147 } 3148 3149 /* compute src for PPS1, used below. */ 3150 if (bp->pps_select) { 3151 val = ioread32(&bp->pps_select->gpio1); 3152 src = &buf[80]; 3153 if (val & 0x01) 3154 gpio_input_map(src, bp, sma_val, 0, NULL); 3155 else if (val & 0x02) 3156 src = "MAC"; 3157 else if (val & 0x04) 3158 src = "GNSS1"; 3159 else 3160 src = "----"; 3161 } else { 3162 src = "?"; 3163 } 3164 3165 /* assumes automatic switchover/selection */ 3166 val = ioread32(&bp->reg->select); 3167 switch (val >> 16) { 3168 case 0: 3169 sprintf(buf, "----"); 3170 break; 3171 case 2: 3172 sprintf(buf, "IRIG"); 3173 break; 3174 case 3: 3175 sprintf(buf, "%s via PPS1", src); 3176 break; 3177 case 6: 3178 sprintf(buf, "DCF"); 3179 break; 3180 default: 3181 strcpy(buf, "unknown"); 3182 break; 3183 } 3184 val = ioread32(&bp->reg->status); 3185 seq_printf(s, "%7s: %s, state: %s\n", "PHC src", buf, 3186 val & OCP_STATUS_IN_SYNC ? "sync" : "unsynced"); 3187 3188 /* reuses PPS1 src from earlier */ 3189 seq_printf(s, "MAC PPS1 src: %s\n", src); 3190 3191 gpio_input_map(buf, bp, sma_val, 1, "GNSS2"); 3192 seq_printf(s, "MAC PPS2 src: %s\n", buf); 3193 3194 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) { 3195 struct timespec64 sys_ts; 3196 s64 pre_ns, post_ns, ns; 3197 3198 pre_ns = timespec64_to_ns(&sts.pre_ts); 3199 post_ns = timespec64_to_ns(&sts.post_ts); 3200 ns = (pre_ns + post_ns) / 2; 3201 ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC; 3202 sys_ts = ns_to_timespec64(ns); 3203 3204 seq_printf(s, "%7s: %lld.%ld == %ptT TAI\n", "PHC", 3205 ts.tv_sec, ts.tv_nsec, &ts); 3206 seq_printf(s, "%7s: %lld.%ld == %ptT UTC offset %d\n", "SYS", 3207 sys_ts.tv_sec, sys_ts.tv_nsec, &sys_ts, 3208 bp->utc_tai_offset); 3209 seq_printf(s, "%7s: PHC:SYS offset: %lld window: %lld\n", "", 3210 timespec64_to_ns(&ts) - ns, 3211 post_ns - pre_ns); 3212 } 3213 3214 free_page((unsigned long)buf); 3215 return 0; 3216 } 3217 DEFINE_SHOW_ATTRIBUTE(ptp_ocp_summary); 3218 3219 static int 3220 ptp_ocp_tod_status_show(struct seq_file *s, void *data) 3221 { 3222 struct device *dev = s->private; 3223 struct ptp_ocp *bp; 3224 u32 val; 3225 int idx; 3226 3227 bp = dev_get_drvdata(dev); 3228 3229 val = ioread32(&bp->tod->ctrl); 3230 if (!(val & TOD_CTRL_ENABLE)) { 3231 seq_printf(s, "TOD Slave disabled\n"); 3232 return 0; 3233 } 3234 seq_printf(s, "TOD Slave enabled, Control Register 0x%08X\n", val); 3235 3236 idx = val & TOD_CTRL_PROTOCOL ? 4 : 0; 3237 idx += (val >> 16) & 3; 3238 seq_printf(s, "Protocol %s\n", ptp_ocp_tod_proto_name(idx)); 3239 3240 idx = (val >> TOD_CTRL_GNSS_SHIFT) & TOD_CTRL_GNSS_MASK; 3241 seq_printf(s, "GNSS %s\n", ptp_ocp_tod_gnss_name(idx)); 3242 3243 val = ioread32(&bp->tod->version); 3244 seq_printf(s, "TOD Version %d.%d.%d\n", 3245 val >> 24, (val >> 16) & 0xff, val & 0xffff); 3246 3247 val = ioread32(&bp->tod->status); 3248 seq_printf(s, "Status register: 0x%08X\n", val); 3249 3250 val = ioread32(&bp->tod->adj_sec); 3251 idx = (val & ~INT_MAX) ? -1 : 1; 3252 idx *= (val & INT_MAX); 3253 seq_printf(s, "Correction seconds: %d\n", idx); 3254 3255 val = ioread32(&bp->tod->utc_status); 3256 seq_printf(s, "UTC status register: 0x%08X\n", val); 3257 seq_printf(s, "UTC offset: %d valid:%d\n", 3258 val & TOD_STATUS_UTC_MASK, val & TOD_STATUS_UTC_VALID ? 1 : 0); 3259 seq_printf(s, "Leap second info valid:%d, Leap second announce %d\n", 3260 val & TOD_STATUS_LEAP_VALID ? 1 : 0, 3261 val & TOD_STATUS_LEAP_ANNOUNCE ? 1 : 0); 3262 3263 val = ioread32(&bp->tod->leap); 3264 seq_printf(s, "Time to next leap second (in sec): %d\n", (s32) val); 3265 3266 return 0; 3267 } 3268 DEFINE_SHOW_ATTRIBUTE(ptp_ocp_tod_status); 3269 3270 static struct dentry *ptp_ocp_debugfs_root; 3271 3272 static void 3273 ptp_ocp_debugfs_add_device(struct ptp_ocp *bp) 3274 { 3275 struct dentry *d; 3276 3277 d = debugfs_create_dir(dev_name(&bp->dev), ptp_ocp_debugfs_root); 3278 bp->debug_root = d; 3279 debugfs_create_file("summary", 0444, bp->debug_root, 3280 &bp->dev, &ptp_ocp_summary_fops); 3281 if (bp->tod) 3282 debugfs_create_file("tod_status", 0444, bp->debug_root, 3283 &bp->dev, &ptp_ocp_tod_status_fops); 3284 } 3285 3286 static void 3287 ptp_ocp_debugfs_remove_device(struct ptp_ocp *bp) 3288 { 3289 debugfs_remove_recursive(bp->debug_root); 3290 } 3291 3292 static void 3293 ptp_ocp_debugfs_init(void) 3294 { 3295 ptp_ocp_debugfs_root = debugfs_create_dir("timecard", NULL); 3296 } 3297 3298 static void 3299 ptp_ocp_debugfs_fini(void) 3300 { 3301 debugfs_remove_recursive(ptp_ocp_debugfs_root); 3302 } 3303 3304 static void 3305 ptp_ocp_dev_release(struct device *dev) 3306 { 3307 struct ptp_ocp *bp = dev_get_drvdata(dev); 3308 3309 mutex_lock(&ptp_ocp_lock); 3310 idr_remove(&ptp_ocp_idr, bp->id); 3311 mutex_unlock(&ptp_ocp_lock); 3312 } 3313 3314 static int 3315 ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) 3316 { 3317 int err; 3318 3319 mutex_lock(&ptp_ocp_lock); 3320 err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL); 3321 mutex_unlock(&ptp_ocp_lock); 3322 if (err < 0) { 3323 dev_err(&pdev->dev, "idr_alloc failed: %d\n", err); 3324 return err; 3325 } 3326 bp->id = err; 3327 3328 bp->ptp_info = ptp_ocp_clock_info; 3329 spin_lock_init(&bp->lock); 3330 bp->gnss_port = -1; 3331 bp->gnss2_port = -1; 3332 bp->mac_port = -1; 3333 bp->nmea_port = -1; 3334 bp->pdev = pdev; 3335 3336 device_initialize(&bp->dev); 3337 dev_set_name(&bp->dev, "ocp%d", bp->id); 3338 bp->dev.class = &timecard_class; 3339 bp->dev.parent = &pdev->dev; 3340 bp->dev.release = ptp_ocp_dev_release; 3341 dev_set_drvdata(&bp->dev, bp); 3342 3343 err = device_add(&bp->dev); 3344 if (err) { 3345 dev_err(&bp->dev, "device add failed: %d\n", err); 3346 goto out; 3347 } 3348 3349 pci_set_drvdata(pdev, bp); 3350 3351 return 0; 3352 3353 out: 3354 ptp_ocp_dev_release(&bp->dev); 3355 put_device(&bp->dev); 3356 return err; 3357 } 3358 3359 static void 3360 ptp_ocp_symlink(struct ptp_ocp *bp, struct device *child, const char *link) 3361 { 3362 struct device *dev = &bp->dev; 3363 3364 if (sysfs_create_link(&dev->kobj, &child->kobj, link)) 3365 dev_err(dev, "%s symlink failed\n", link); 3366 } 3367 3368 static void 3369 ptp_ocp_link_child(struct ptp_ocp *bp, const char *name, const char *link) 3370 { 3371 struct device *dev, *child; 3372 3373 dev = &bp->pdev->dev; 3374 3375 child = device_find_child_by_name(dev, name); 3376 if (!child) { 3377 dev_err(dev, "Could not find device %s\n", name); 3378 return; 3379 } 3380 3381 ptp_ocp_symlink(bp, child, link); 3382 put_device(child); 3383 } 3384 3385 static int 3386 ptp_ocp_complete(struct ptp_ocp *bp) 3387 { 3388 struct pps_device *pps; 3389 char buf[32]; 3390 int i, err; 3391 3392 if (bp->gnss_port != -1) { 3393 sprintf(buf, "ttyS%d", bp->gnss_port); 3394 ptp_ocp_link_child(bp, buf, "ttyGNSS"); 3395 } 3396 if (bp->gnss2_port != -1) { 3397 sprintf(buf, "ttyS%d", bp->gnss2_port); 3398 ptp_ocp_link_child(bp, buf, "ttyGNSS2"); 3399 } 3400 if (bp->mac_port != -1) { 3401 sprintf(buf, "ttyS%d", bp->mac_port); 3402 ptp_ocp_link_child(bp, buf, "ttyMAC"); 3403 } 3404 if (bp->nmea_port != -1) { 3405 sprintf(buf, "ttyS%d", bp->nmea_port); 3406 ptp_ocp_link_child(bp, buf, "ttyNMEA"); 3407 } 3408 sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp)); 3409 ptp_ocp_link_child(bp, buf, "ptp"); 3410 3411 pps = pps_lookup_dev(bp->ptp); 3412 if (pps) 3413 ptp_ocp_symlink(bp, pps->dev, "pps"); 3414 3415 for (i = 0; bp->attr_tbl[i].cap; i++) { 3416 if (!(bp->attr_tbl[i].cap & bp->fw_cap)) 3417 continue; 3418 err = sysfs_create_group(&bp->dev.kobj, bp->attr_tbl[i].group); 3419 if (err) 3420 return err; 3421 } 3422 3423 ptp_ocp_debugfs_add_device(bp); 3424 3425 return 0; 3426 } 3427 3428 static void 3429 ptp_ocp_phc_info(struct ptp_ocp *bp) 3430 { 3431 struct timespec64 ts; 3432 u32 version, select; 3433 bool sync; 3434 3435 version = ioread32(&bp->reg->version); 3436 select = ioread32(&bp->reg->select); 3437 dev_info(&bp->pdev->dev, "Version %d.%d.%d, clock %s, device ptp%d\n", 3438 version >> 24, (version >> 16) & 0xff, version & 0xffff, 3439 ptp_ocp_select_name_from_val(ptp_ocp_clock, select >> 16), 3440 ptp_clock_index(bp->ptp)); 3441 3442 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; 3443 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, NULL)) 3444 dev_info(&bp->pdev->dev, "Time: %lld.%ld, %s\n", 3445 ts.tv_sec, ts.tv_nsec, 3446 sync ? "in-sync" : "UNSYNCED"); 3447 } 3448 3449 static void 3450 ptp_ocp_serial_info(struct device *dev, const char *name, int port, int baud) 3451 { 3452 if (port != -1) 3453 dev_info(dev, "%5s: /dev/ttyS%-2d @ %6d\n", name, port, baud); 3454 } 3455 3456 static void 3457 ptp_ocp_info(struct ptp_ocp *bp) 3458 { 3459 static int nmea_baud[] = { 3460 1200, 2400, 4800, 9600, 19200, 38400, 3461 57600, 115200, 230400, 460800, 921600, 3462 1000000, 2000000 3463 }; 3464 struct device *dev = &bp->pdev->dev; 3465 u32 reg; 3466 3467 ptp_ocp_phc_info(bp); 3468 3469 dev_info(dev, "version %x\n", bp->fw_version); 3470 if (bp->fw_version & 0xffff) 3471 dev_info(dev, "regular image, version %d\n", 3472 bp->fw_version & 0xffff); 3473 else 3474 dev_info(dev, "golden image, version %d\n", 3475 bp->fw_version >> 16); 3476 3477 ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port, 115200); 3478 ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port, 115200); 3479 ptp_ocp_serial_info(dev, "MAC", bp->mac_port, 57600); 3480 if (bp->nmea_out && bp->nmea_port != -1) { 3481 int baud = -1; 3482 3483 reg = ioread32(&bp->nmea_out->uart_baud); 3484 if (reg < ARRAY_SIZE(nmea_baud)) 3485 baud = nmea_baud[reg]; 3486 ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port, baud); 3487 } 3488 } 3489 3490 static void 3491 ptp_ocp_detach_sysfs(struct ptp_ocp *bp) 3492 { 3493 struct device *dev = &bp->dev; 3494 int i; 3495 3496 sysfs_remove_link(&dev->kobj, "ttyGNSS"); 3497 sysfs_remove_link(&dev->kobj, "ttyMAC"); 3498 sysfs_remove_link(&dev->kobj, "ptp"); 3499 sysfs_remove_link(&dev->kobj, "pps"); 3500 if (bp->attr_tbl) 3501 for (i = 0; bp->attr_tbl[i].cap; i++) 3502 sysfs_remove_group(&dev->kobj, bp->attr_tbl[i].group); 3503 } 3504 3505 static void 3506 ptp_ocp_detach(struct ptp_ocp *bp) 3507 { 3508 int i; 3509 3510 ptp_ocp_debugfs_remove_device(bp); 3511 ptp_ocp_detach_sysfs(bp); 3512 if (timer_pending(&bp->watchdog)) 3513 del_timer_sync(&bp->watchdog); 3514 if (bp->ts0) 3515 ptp_ocp_unregister_ext(bp->ts0); 3516 if (bp->ts1) 3517 ptp_ocp_unregister_ext(bp->ts1); 3518 if (bp->ts2) 3519 ptp_ocp_unregister_ext(bp->ts2); 3520 if (bp->ts3) 3521 ptp_ocp_unregister_ext(bp->ts3); 3522 if (bp->ts4) 3523 ptp_ocp_unregister_ext(bp->ts4); 3524 if (bp->pps) 3525 ptp_ocp_unregister_ext(bp->pps); 3526 for (i = 0; i < 4; i++) 3527 if (bp->signal_out[i]) 3528 ptp_ocp_unregister_ext(bp->signal_out[i]); 3529 if (bp->gnss_port != -1) 3530 serial8250_unregister_port(bp->gnss_port); 3531 if (bp->gnss2_port != -1) 3532 serial8250_unregister_port(bp->gnss2_port); 3533 if (bp->mac_port != -1) 3534 serial8250_unregister_port(bp->mac_port); 3535 if (bp->nmea_port != -1) 3536 serial8250_unregister_port(bp->nmea_port); 3537 if (bp->spi_flash) 3538 platform_device_unregister(bp->spi_flash); 3539 if (bp->i2c_ctrl) 3540 platform_device_unregister(bp->i2c_ctrl); 3541 if (bp->i2c_clk) 3542 clk_hw_unregister_fixed_rate(bp->i2c_clk); 3543 if (bp->n_irqs) 3544 pci_free_irq_vectors(bp->pdev); 3545 if (bp->ptp) 3546 ptp_clock_unregister(bp->ptp); 3547 kfree(bp->ptp_info.pin_config); 3548 device_unregister(&bp->dev); 3549 } 3550 3551 static int 3552 ptp_ocp_probe(struct pci_dev *pdev, const struct pci_device_id *id) 3553 { 3554 struct devlink *devlink; 3555 struct ptp_ocp *bp; 3556 int err; 3557 3558 devlink = devlink_alloc(&ptp_ocp_devlink_ops, sizeof(*bp), &pdev->dev); 3559 if (!devlink) { 3560 dev_err(&pdev->dev, "devlink_alloc failed\n"); 3561 return -ENOMEM; 3562 } 3563 3564 err = pci_enable_device(pdev); 3565 if (err) { 3566 dev_err(&pdev->dev, "pci_enable_device\n"); 3567 goto out_free; 3568 } 3569 3570 bp = devlink_priv(devlink); 3571 err = ptp_ocp_device_init(bp, pdev); 3572 if (err) 3573 goto out_disable; 3574 3575 /* compat mode. 3576 * Older FPGA firmware only returns 2 irq's. 3577 * allow this - if not all of the IRQ's are returned, skip the 3578 * extra devices and just register the clock. 3579 */ 3580 err = pci_alloc_irq_vectors(pdev, 1, 17, PCI_IRQ_MSI | PCI_IRQ_MSIX); 3581 if (err < 0) { 3582 dev_err(&pdev->dev, "alloc_irq_vectors err: %d\n", err); 3583 goto out; 3584 } 3585 bp->n_irqs = err; 3586 pci_set_master(pdev); 3587 3588 err = ptp_ocp_register_resources(bp, id->driver_data); 3589 if (err) 3590 goto out; 3591 3592 bp->ptp = ptp_clock_register(&bp->ptp_info, &pdev->dev); 3593 if (IS_ERR(bp->ptp)) { 3594 err = PTR_ERR(bp->ptp); 3595 dev_err(&pdev->dev, "ptp_clock_register: %d\n", err); 3596 bp->ptp = NULL; 3597 goto out; 3598 } 3599 3600 err = ptp_ocp_complete(bp); 3601 if (err) 3602 goto out; 3603 3604 ptp_ocp_info(bp); 3605 devlink_register(devlink); 3606 return 0; 3607 3608 out: 3609 ptp_ocp_detach(bp); 3610 pci_set_drvdata(pdev, NULL); 3611 out_disable: 3612 pci_disable_device(pdev); 3613 out_free: 3614 devlink_free(devlink); 3615 return err; 3616 } 3617 3618 static void 3619 ptp_ocp_remove(struct pci_dev *pdev) 3620 { 3621 struct ptp_ocp *bp = pci_get_drvdata(pdev); 3622 struct devlink *devlink = priv_to_devlink(bp); 3623 3624 devlink_unregister(devlink); 3625 ptp_ocp_detach(bp); 3626 pci_set_drvdata(pdev, NULL); 3627 pci_disable_device(pdev); 3628 3629 devlink_free(devlink); 3630 } 3631 3632 static struct pci_driver ptp_ocp_driver = { 3633 .name = KBUILD_MODNAME, 3634 .id_table = ptp_ocp_pcidev_id, 3635 .probe = ptp_ocp_probe, 3636 .remove = ptp_ocp_remove, 3637 }; 3638 3639 static int 3640 ptp_ocp_i2c_notifier_call(struct notifier_block *nb, 3641 unsigned long action, void *data) 3642 { 3643 struct device *dev, *child = data; 3644 struct ptp_ocp *bp; 3645 bool add; 3646 3647 switch (action) { 3648 case BUS_NOTIFY_ADD_DEVICE: 3649 case BUS_NOTIFY_DEL_DEVICE: 3650 add = action == BUS_NOTIFY_ADD_DEVICE; 3651 break; 3652 default: 3653 return 0; 3654 } 3655 3656 if (!i2c_verify_adapter(child)) 3657 return 0; 3658 3659 dev = child; 3660 while ((dev = dev->parent)) 3661 if (dev->driver && !strcmp(dev->driver->name, KBUILD_MODNAME)) 3662 goto found; 3663 return 0; 3664 3665 found: 3666 bp = dev_get_drvdata(dev); 3667 if (add) 3668 ptp_ocp_symlink(bp, child, "i2c"); 3669 else 3670 sysfs_remove_link(&bp->dev.kobj, "i2c"); 3671 3672 return 0; 3673 } 3674 3675 static struct notifier_block ptp_ocp_i2c_notifier = { 3676 .notifier_call = ptp_ocp_i2c_notifier_call, 3677 }; 3678 3679 static int __init 3680 ptp_ocp_init(void) 3681 { 3682 const char *what; 3683 int err; 3684 3685 ptp_ocp_debugfs_init(); 3686 3687 what = "timecard class"; 3688 err = class_register(&timecard_class); 3689 if (err) 3690 goto out; 3691 3692 what = "i2c notifier"; 3693 err = bus_register_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 3694 if (err) 3695 goto out_notifier; 3696 3697 what = "ptp_ocp driver"; 3698 err = pci_register_driver(&ptp_ocp_driver); 3699 if (err) 3700 goto out_register; 3701 3702 return 0; 3703 3704 out_register: 3705 bus_unregister_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 3706 out_notifier: 3707 class_unregister(&timecard_class); 3708 out: 3709 ptp_ocp_debugfs_fini(); 3710 pr_err(KBUILD_MODNAME ": failed to register %s: %d\n", what, err); 3711 return err; 3712 } 3713 3714 static void __exit 3715 ptp_ocp_fini(void) 3716 { 3717 bus_unregister_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 3718 pci_unregister_driver(&ptp_ocp_driver); 3719 class_unregister(&timecard_class); 3720 ptp_ocp_debugfs_fini(); 3721 } 3722 3723 module_init(ptp_ocp_init); 3724 module_exit(ptp_ocp_fini); 3725 3726 MODULE_DESCRIPTION("OpenCompute TimeCard driver"); 3727 MODULE_LICENSE("GPL v2"); 3728