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 attribute_group **attr_group; 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, s64 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 set_normalized_timespec64(&ts, ts.tv_sec, 854 ts.tv_nsec + delta_ns); 855 __ptp_ocp_settime_locked(bp, &ts); 856 } 857 spin_unlock_irqrestore(&bp->lock, flags); 858 } 859 860 static int 861 ptp_ocp_adjtime(struct ptp_clock_info *ptp_info, s64 delta_ns) 862 { 863 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 864 unsigned long flags; 865 u32 adj_ns, sign; 866 867 if (delta_ns > NSEC_PER_SEC || -delta_ns > NSEC_PER_SEC) { 868 ptp_ocp_adjtime_coarse(bp, delta_ns); 869 return 0; 870 } 871 872 sign = delta_ns < 0 ? BIT(31) : 0; 873 adj_ns = sign ? -delta_ns : delta_ns; 874 875 spin_lock_irqsave(&bp->lock, flags); 876 __ptp_ocp_adjtime_locked(bp, sign | adj_ns); 877 spin_unlock_irqrestore(&bp->lock, flags); 878 879 return 0; 880 } 881 882 static int 883 ptp_ocp_null_adjfine(struct ptp_clock_info *ptp_info, long scaled_ppm) 884 { 885 if (scaled_ppm == 0) 886 return 0; 887 888 return -EOPNOTSUPP; 889 } 890 891 static int 892 ptp_ocp_null_adjphase(struct ptp_clock_info *ptp_info, s32 phase_ns) 893 { 894 return -EOPNOTSUPP; 895 } 896 897 static int 898 ptp_ocp_enable(struct ptp_clock_info *ptp_info, struct ptp_clock_request *rq, 899 int on) 900 { 901 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 902 struct ptp_ocp_ext_src *ext = NULL; 903 u32 req; 904 int err; 905 906 switch (rq->type) { 907 case PTP_CLK_REQ_EXTTS: 908 req = OCP_REQ_TIMESTAMP; 909 switch (rq->extts.index) { 910 case 0: 911 ext = bp->ts0; 912 break; 913 case 1: 914 ext = bp->ts1; 915 break; 916 case 2: 917 ext = bp->ts2; 918 break; 919 case 3: 920 ext = bp->ts3; 921 break; 922 case 4: 923 ext = bp->ts4; 924 break; 925 case 5: 926 ext = bp->pps; 927 break; 928 } 929 break; 930 case PTP_CLK_REQ_PPS: 931 req = OCP_REQ_PPS; 932 ext = bp->pps; 933 break; 934 case PTP_CLK_REQ_PEROUT: 935 switch (rq->perout.index) { 936 case 0: 937 /* This is a request for 1PPS on an output SMA. 938 * Allow, but assume manual configuration. 939 */ 940 if (on && (rq->perout.period.sec != 1 || 941 rq->perout.period.nsec != 0)) 942 return -EINVAL; 943 return 0; 944 case 1: 945 case 2: 946 case 3: 947 case 4: 948 req = rq->perout.index - 1; 949 ext = bp->signal_out[req]; 950 err = ptp_ocp_signal_from_perout(bp, req, &rq->perout); 951 if (err) 952 return err; 953 break; 954 } 955 break; 956 default: 957 return -EOPNOTSUPP; 958 } 959 960 err = -ENXIO; 961 if (ext) 962 err = ext->info->enable(ext, req, on); 963 964 return err; 965 } 966 967 static int 968 ptp_ocp_verify(struct ptp_clock_info *ptp_info, unsigned pin, 969 enum ptp_pin_function func, unsigned chan) 970 { 971 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); 972 char buf[16]; 973 974 switch (func) { 975 case PTP_PF_NONE: 976 snprintf(buf, sizeof(buf), "IN: None"); 977 break; 978 case PTP_PF_EXTTS: 979 /* Allow timestamps, but require sysfs configuration. */ 980 return 0; 981 case PTP_PF_PEROUT: 982 /* channel 0 is 1PPS from PHC. 983 * channels 1..4 are the frequency generators. 984 */ 985 if (chan) 986 snprintf(buf, sizeof(buf), "OUT: GEN%d", chan); 987 else 988 snprintf(buf, sizeof(buf), "OUT: PHC"); 989 break; 990 default: 991 return -EOPNOTSUPP; 992 } 993 994 return ptp_ocp_sma_store(bp, buf, pin + 1); 995 } 996 997 static const struct ptp_clock_info ptp_ocp_clock_info = { 998 .owner = THIS_MODULE, 999 .name = KBUILD_MODNAME, 1000 .max_adj = 100000000, 1001 .gettimex64 = ptp_ocp_gettimex, 1002 .settime64 = ptp_ocp_settime, 1003 .adjtime = ptp_ocp_adjtime, 1004 .adjfine = ptp_ocp_null_adjfine, 1005 .adjphase = ptp_ocp_null_adjphase, 1006 .enable = ptp_ocp_enable, 1007 .verify = ptp_ocp_verify, 1008 .pps = true, 1009 .n_ext_ts = 6, 1010 .n_per_out = 5, 1011 }; 1012 1013 static void 1014 __ptp_ocp_clear_drift_locked(struct ptp_ocp *bp) 1015 { 1016 u32 ctrl, select; 1017 1018 select = ioread32(&bp->reg->select); 1019 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); 1020 1021 iowrite32(0, &bp->reg->drift_ns); 1022 1023 ctrl = OCP_CTRL_ADJUST_DRIFT | OCP_CTRL_ENABLE; 1024 iowrite32(ctrl, &bp->reg->ctrl); 1025 1026 /* restore clock selection */ 1027 iowrite32(select >> 16, &bp->reg->select); 1028 } 1029 1030 static void 1031 ptp_ocp_utc_distribute(struct ptp_ocp *bp, u32 val) 1032 { 1033 unsigned long flags; 1034 1035 spin_lock_irqsave(&bp->lock, flags); 1036 1037 bp->utc_tai_offset = val; 1038 1039 if (bp->irig_out) 1040 iowrite32(val, &bp->irig_out->adj_sec); 1041 if (bp->dcf_out) 1042 iowrite32(val, &bp->dcf_out->adj_sec); 1043 if (bp->nmea_out) 1044 iowrite32(val, &bp->nmea_out->adj_sec); 1045 1046 spin_unlock_irqrestore(&bp->lock, flags); 1047 } 1048 1049 static void 1050 ptp_ocp_watchdog(struct timer_list *t) 1051 { 1052 struct ptp_ocp *bp = from_timer(bp, t, watchdog); 1053 unsigned long flags; 1054 u32 status, utc_offset; 1055 1056 status = ioread32(&bp->pps_to_clk->status); 1057 1058 if (status & PPS_STATUS_SUPERV_ERR) { 1059 iowrite32(status, &bp->pps_to_clk->status); 1060 if (!bp->gnss_lost) { 1061 spin_lock_irqsave(&bp->lock, flags); 1062 __ptp_ocp_clear_drift_locked(bp); 1063 spin_unlock_irqrestore(&bp->lock, flags); 1064 bp->gnss_lost = ktime_get_real_seconds(); 1065 } 1066 1067 } else if (bp->gnss_lost) { 1068 bp->gnss_lost = 0; 1069 } 1070 1071 /* if GNSS provides correct data we can rely on 1072 * it to get leap second information 1073 */ 1074 if (bp->tod) { 1075 status = ioread32(&bp->tod->utc_status); 1076 utc_offset = status & TOD_STATUS_UTC_MASK; 1077 if (status & TOD_STATUS_UTC_VALID && 1078 utc_offset != bp->utc_tai_offset) 1079 ptp_ocp_utc_distribute(bp, utc_offset); 1080 } 1081 1082 mod_timer(&bp->watchdog, jiffies + HZ); 1083 } 1084 1085 static void 1086 ptp_ocp_estimate_pci_timing(struct ptp_ocp *bp) 1087 { 1088 ktime_t start, end; 1089 ktime_t delay; 1090 u32 ctrl; 1091 1092 ctrl = ioread32(&bp->reg->ctrl); 1093 ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE; 1094 1095 iowrite32(ctrl, &bp->reg->ctrl); 1096 1097 start = ktime_get_ns(); 1098 1099 ctrl = ioread32(&bp->reg->ctrl); 1100 1101 end = ktime_get_ns(); 1102 1103 delay = end - start; 1104 bp->ts_window_adjust = (delay >> 5) * 3; 1105 } 1106 1107 static int 1108 ptp_ocp_init_clock(struct ptp_ocp *bp) 1109 { 1110 struct timespec64 ts; 1111 bool sync; 1112 u32 ctrl; 1113 1114 ctrl = OCP_CTRL_ENABLE; 1115 iowrite32(ctrl, &bp->reg->ctrl); 1116 1117 /* NO DRIFT Correction */ 1118 /* offset_p:i 1/8, offset_i: 1/16, drift_p: 0, drift_i: 0 */ 1119 iowrite32(0x2000, &bp->reg->servo_offset_p); 1120 iowrite32(0x1000, &bp->reg->servo_offset_i); 1121 iowrite32(0, &bp->reg->servo_drift_p); 1122 iowrite32(0, &bp->reg->servo_drift_i); 1123 1124 /* latch servo values */ 1125 ctrl |= OCP_CTRL_ADJUST_SERVO; 1126 iowrite32(ctrl, &bp->reg->ctrl); 1127 1128 if ((ioread32(&bp->reg->ctrl) & OCP_CTRL_ENABLE) == 0) { 1129 dev_err(&bp->pdev->dev, "clock not enabled\n"); 1130 return -ENODEV; 1131 } 1132 1133 ptp_ocp_estimate_pci_timing(bp); 1134 1135 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; 1136 if (!sync) { 1137 ktime_get_clocktai_ts64(&ts); 1138 ptp_ocp_settime(&bp->ptp_info, &ts); 1139 } 1140 1141 /* If there is a clock supervisor, then enable the watchdog */ 1142 if (bp->pps_to_clk) { 1143 timer_setup(&bp->watchdog, ptp_ocp_watchdog, 0); 1144 mod_timer(&bp->watchdog, jiffies + HZ); 1145 } 1146 1147 return 0; 1148 } 1149 1150 static void 1151 ptp_ocp_tod_init(struct ptp_ocp *bp) 1152 { 1153 u32 ctrl, reg; 1154 1155 ctrl = ioread32(&bp->tod->ctrl); 1156 ctrl |= TOD_CTRL_PROTOCOL | TOD_CTRL_ENABLE; 1157 ctrl &= ~(TOD_CTRL_DISABLE_FMT_A | TOD_CTRL_DISABLE_FMT_B); 1158 iowrite32(ctrl, &bp->tod->ctrl); 1159 1160 reg = ioread32(&bp->tod->utc_status); 1161 if (reg & TOD_STATUS_UTC_VALID) 1162 ptp_ocp_utc_distribute(bp, reg & TOD_STATUS_UTC_MASK); 1163 } 1164 1165 static const char * 1166 ptp_ocp_tod_proto_name(const int idx) 1167 { 1168 static const char * const proto_name[] = { 1169 "NMEA", "NMEA_ZDA", "NMEA_RMC", "NMEA_none", 1170 "UBX", "UBX_UTC", "UBX_LS", "UBX_none" 1171 }; 1172 return proto_name[idx]; 1173 } 1174 1175 static const char * 1176 ptp_ocp_tod_gnss_name(int idx) 1177 { 1178 static const char * const gnss_name[] = { 1179 "ALL", "COMBINED", "GPS", "GLONASS", "GALILEO", "BEIDOU", 1180 "Unknown" 1181 }; 1182 if (idx >= ARRAY_SIZE(gnss_name)) 1183 idx = ARRAY_SIZE(gnss_name) - 1; 1184 return gnss_name[idx]; 1185 } 1186 1187 struct ptp_ocp_nvmem_match_info { 1188 struct ptp_ocp *bp; 1189 const void * const tag; 1190 }; 1191 1192 static int 1193 ptp_ocp_nvmem_match(struct device *dev, const void *data) 1194 { 1195 const struct ptp_ocp_nvmem_match_info *info = data; 1196 1197 dev = dev->parent; 1198 if (!i2c_verify_client(dev) || info->tag != dev->platform_data) 1199 return 0; 1200 1201 while ((dev = dev->parent)) 1202 if (dev->driver && !strcmp(dev->driver->name, KBUILD_MODNAME)) 1203 return info->bp == dev_get_drvdata(dev); 1204 return 0; 1205 } 1206 1207 static inline struct nvmem_device * 1208 ptp_ocp_nvmem_device_get(struct ptp_ocp *bp, const void * const tag) 1209 { 1210 struct ptp_ocp_nvmem_match_info info = { .bp = bp, .tag = tag }; 1211 1212 return nvmem_device_find(&info, ptp_ocp_nvmem_match); 1213 } 1214 1215 static inline void 1216 ptp_ocp_nvmem_device_put(struct nvmem_device **nvmemp) 1217 { 1218 if (!IS_ERR_OR_NULL(*nvmemp)) 1219 nvmem_device_put(*nvmemp); 1220 *nvmemp = NULL; 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 (IS_ERR(nvmem)) { 1245 ret = PTR_ERR(nvmem); 1246 goto fail; 1247 } 1248 } 1249 ret = nvmem_device_read(nvmem, map->off, map->len, 1250 BP_MAP_ENTRY_ADDR(bp, map)); 1251 if (ret != map->len) 1252 goto fail; 1253 } 1254 1255 bp->has_eeprom_data = true; 1256 1257 out: 1258 ptp_ocp_nvmem_device_put(&nvmem); 1259 return; 1260 1261 fail: 1262 dev_err(&bp->pdev->dev, "could not read eeprom: %d\n", ret); 1263 goto out; 1264 } 1265 1266 static int 1267 ptp_ocp_firstchild(struct device *dev, void *data) 1268 { 1269 return 1; 1270 } 1271 1272 static struct device * 1273 ptp_ocp_find_flash(struct ptp_ocp *bp) 1274 { 1275 struct device *dev, *last; 1276 1277 last = NULL; 1278 dev = &bp->spi_flash->dev; 1279 1280 while ((dev = device_find_child(dev, NULL, ptp_ocp_firstchild))) { 1281 if (!strcmp("mtd", dev_bus_name(dev))) 1282 break; 1283 put_device(last); 1284 last = dev; 1285 } 1286 put_device(last); 1287 1288 return dev; 1289 } 1290 1291 static int 1292 ptp_ocp_devlink_flash(struct devlink *devlink, struct device *dev, 1293 const struct firmware *fw) 1294 { 1295 struct mtd_info *mtd = dev_get_drvdata(dev); 1296 struct ptp_ocp *bp = devlink_priv(devlink); 1297 size_t off, len, resid, wrote; 1298 struct erase_info erase; 1299 size_t base, blksz; 1300 int err = 0; 1301 1302 off = 0; 1303 base = bp->flash_start; 1304 blksz = 4096; 1305 resid = fw->size; 1306 1307 while (resid) { 1308 devlink_flash_update_status_notify(devlink, "Flashing", 1309 NULL, off, fw->size); 1310 1311 len = min_t(size_t, resid, blksz); 1312 erase.addr = base + off; 1313 erase.len = blksz; 1314 1315 err = mtd_erase(mtd, &erase); 1316 if (err) 1317 goto out; 1318 1319 err = mtd_write(mtd, base + off, len, &wrote, &fw->data[off]); 1320 if (err) 1321 goto out; 1322 1323 off += blksz; 1324 resid -= len; 1325 } 1326 out: 1327 return err; 1328 } 1329 1330 static int 1331 ptp_ocp_devlink_flash_update(struct devlink *devlink, 1332 struct devlink_flash_update_params *params, 1333 struct netlink_ext_ack *extack) 1334 { 1335 struct ptp_ocp *bp = devlink_priv(devlink); 1336 struct device *dev; 1337 const char *msg; 1338 int err; 1339 1340 dev = ptp_ocp_find_flash(bp); 1341 if (!dev) { 1342 dev_err(&bp->pdev->dev, "Can't find Flash SPI adapter\n"); 1343 return -ENODEV; 1344 } 1345 1346 devlink_flash_update_status_notify(devlink, "Preparing to flash", 1347 NULL, 0, 0); 1348 1349 err = ptp_ocp_devlink_flash(devlink, dev, params->fw); 1350 1351 msg = err ? "Flash error" : "Flash complete"; 1352 devlink_flash_update_status_notify(devlink, msg, NULL, 0, 0); 1353 1354 put_device(dev); 1355 return err; 1356 } 1357 1358 static int 1359 ptp_ocp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req, 1360 struct netlink_ext_ack *extack) 1361 { 1362 struct ptp_ocp *bp = devlink_priv(devlink); 1363 char buf[32]; 1364 int err; 1365 1366 err = devlink_info_driver_name_put(req, KBUILD_MODNAME); 1367 if (err) 1368 return err; 1369 1370 if (bp->fw_version & 0xffff) { 1371 sprintf(buf, "%d", bp->fw_version); 1372 err = devlink_info_version_running_put(req, "fw", buf); 1373 } else { 1374 sprintf(buf, "%d", bp->fw_version >> 16); 1375 err = devlink_info_version_running_put(req, "loader", buf); 1376 } 1377 if (err) 1378 return err; 1379 1380 if (!bp->has_eeprom_data) { 1381 ptp_ocp_read_eeprom(bp); 1382 if (!bp->has_eeprom_data) 1383 return 0; 1384 } 1385 1386 sprintf(buf, "%pM", bp->serial); 1387 err = devlink_info_serial_number_put(req, buf); 1388 if (err) 1389 return err; 1390 1391 err = devlink_info_version_fixed_put(req, 1392 DEVLINK_INFO_VERSION_GENERIC_BOARD_ID, 1393 bp->board_id); 1394 if (err) 1395 return err; 1396 1397 return 0; 1398 } 1399 1400 static const struct devlink_ops ptp_ocp_devlink_ops = { 1401 .flash_update = ptp_ocp_devlink_flash_update, 1402 .info_get = ptp_ocp_devlink_info_get, 1403 }; 1404 1405 static void __iomem * 1406 __ptp_ocp_get_mem(struct ptp_ocp *bp, unsigned long start, int size) 1407 { 1408 struct resource res = DEFINE_RES_MEM_NAMED(start, size, "ptp_ocp"); 1409 1410 return devm_ioremap_resource(&bp->pdev->dev, &res); 1411 } 1412 1413 static void __iomem * 1414 ptp_ocp_get_mem(struct ptp_ocp *bp, struct ocp_resource *r) 1415 { 1416 unsigned long start; 1417 1418 start = pci_resource_start(bp->pdev, 0) + r->offset; 1419 return __ptp_ocp_get_mem(bp, start, r->size); 1420 } 1421 1422 static void 1423 ptp_ocp_set_irq_resource(struct resource *res, int irq) 1424 { 1425 struct resource r = DEFINE_RES_IRQ(irq); 1426 *res = r; 1427 } 1428 1429 static void 1430 ptp_ocp_set_mem_resource(struct resource *res, unsigned long start, int size) 1431 { 1432 struct resource r = DEFINE_RES_MEM(start, size); 1433 *res = r; 1434 } 1435 1436 static int 1437 ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r) 1438 { 1439 struct ptp_ocp_flash_info *info; 1440 struct pci_dev *pdev = bp->pdev; 1441 struct platform_device *p; 1442 struct resource res[2]; 1443 unsigned long start; 1444 int id; 1445 1446 start = pci_resource_start(pdev, 0) + r->offset; 1447 ptp_ocp_set_mem_resource(&res[0], start, r->size); 1448 ptp_ocp_set_irq_resource(&res[1], pci_irq_vector(pdev, r->irq_vec)); 1449 1450 info = r->extra; 1451 id = pci_dev_id(pdev) << 1; 1452 id += info->pci_offset; 1453 1454 p = platform_device_register_resndata(&pdev->dev, info->name, id, 1455 res, 2, info->data, 1456 info->data_size); 1457 if (IS_ERR(p)) 1458 return PTR_ERR(p); 1459 1460 bp_assign_entry(bp, r, p); 1461 1462 return 0; 1463 } 1464 1465 static struct platform_device * 1466 ptp_ocp_i2c_bus(struct pci_dev *pdev, struct ocp_resource *r, int id) 1467 { 1468 struct ptp_ocp_i2c_info *info; 1469 struct resource res[2]; 1470 unsigned long start; 1471 1472 info = r->extra; 1473 start = pci_resource_start(pdev, 0) + r->offset; 1474 ptp_ocp_set_mem_resource(&res[0], start, r->size); 1475 ptp_ocp_set_irq_resource(&res[1], pci_irq_vector(pdev, r->irq_vec)); 1476 1477 return platform_device_register_resndata(&pdev->dev, info->name, 1478 id, res, 2, 1479 info->data, info->data_size); 1480 } 1481 1482 static int 1483 ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r) 1484 { 1485 struct pci_dev *pdev = bp->pdev; 1486 struct ptp_ocp_i2c_info *info; 1487 struct platform_device *p; 1488 struct clk_hw *clk; 1489 char buf[32]; 1490 int id; 1491 1492 info = r->extra; 1493 id = pci_dev_id(bp->pdev); 1494 1495 sprintf(buf, "AXI.%d", id); 1496 clk = clk_hw_register_fixed_rate(&pdev->dev, buf, NULL, 0, 1497 info->fixed_rate); 1498 if (IS_ERR(clk)) 1499 return PTR_ERR(clk); 1500 bp->i2c_clk = clk; 1501 1502 sprintf(buf, "%s.%d", info->name, id); 1503 devm_clk_hw_register_clkdev(&pdev->dev, clk, NULL, buf); 1504 p = ptp_ocp_i2c_bus(bp->pdev, r, id); 1505 if (IS_ERR(p)) 1506 return PTR_ERR(p); 1507 1508 bp_assign_entry(bp, r, p); 1509 1510 return 0; 1511 } 1512 1513 /* The expectation is that this is triggered only on error. */ 1514 static irqreturn_t 1515 ptp_ocp_signal_irq(int irq, void *priv) 1516 { 1517 struct ptp_ocp_ext_src *ext = priv; 1518 struct signal_reg __iomem *reg = ext->mem; 1519 struct ptp_ocp *bp = ext->bp; 1520 u32 enable, status; 1521 int gen; 1522 1523 gen = ext->info->index - 1; 1524 1525 enable = ioread32(®->enable); 1526 status = ioread32(®->status); 1527 1528 /* disable generator on error */ 1529 if (status || !enable) { 1530 iowrite32(0, ®->intr_mask); 1531 iowrite32(0, ®->enable); 1532 bp->signal[gen].running = false; 1533 } 1534 1535 iowrite32(0, ®->intr); /* ack interrupt */ 1536 1537 return IRQ_HANDLED; 1538 } 1539 1540 static int 1541 ptp_ocp_signal_set(struct ptp_ocp *bp, int gen, struct ptp_ocp_signal *s) 1542 { 1543 struct ptp_system_timestamp sts; 1544 struct timespec64 ts; 1545 ktime_t start_ns; 1546 int err; 1547 1548 if (!s->period) 1549 return 0; 1550 1551 if (!s->pulse) 1552 s->pulse = ktime_divns(s->period * s->duty, 100); 1553 1554 err = ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts); 1555 if (err) 1556 return err; 1557 1558 start_ns = ktime_set(ts.tv_sec, ts.tv_nsec) + NSEC_PER_MSEC; 1559 if (!s->start) { 1560 /* roundup() does not work on 32-bit systems */ 1561 s->start = DIV64_U64_ROUND_UP(start_ns, s->period); 1562 s->start = ktime_add(s->start, s->phase); 1563 } 1564 1565 if (s->duty < 1 || s->duty > 99) 1566 return -EINVAL; 1567 1568 if (s->pulse < 1 || s->pulse > s->period) 1569 return -EINVAL; 1570 1571 if (s->start < start_ns) 1572 return -EINVAL; 1573 1574 bp->signal[gen] = *s; 1575 1576 return 0; 1577 } 1578 1579 static int 1580 ptp_ocp_signal_from_perout(struct ptp_ocp *bp, int gen, 1581 struct ptp_perout_request *req) 1582 { 1583 struct ptp_ocp_signal s = { }; 1584 1585 s.polarity = bp->signal[gen].polarity; 1586 s.period = ktime_set(req->period.sec, req->period.nsec); 1587 if (!s.period) 1588 return 0; 1589 1590 if (req->flags & PTP_PEROUT_DUTY_CYCLE) { 1591 s.pulse = ktime_set(req->on.sec, req->on.nsec); 1592 s.duty = ktime_divns(s.pulse * 100, s.period); 1593 } 1594 1595 if (req->flags & PTP_PEROUT_PHASE) 1596 s.phase = ktime_set(req->phase.sec, req->phase.nsec); 1597 else 1598 s.start = ktime_set(req->start.sec, req->start.nsec); 1599 1600 return ptp_ocp_signal_set(bp, gen, &s); 1601 } 1602 1603 static int 1604 ptp_ocp_signal_enable(void *priv, u32 req, bool enable) 1605 { 1606 struct ptp_ocp_ext_src *ext = priv; 1607 struct signal_reg __iomem *reg = ext->mem; 1608 struct ptp_ocp *bp = ext->bp; 1609 struct timespec64 ts; 1610 int gen; 1611 1612 gen = ext->info->index - 1; 1613 1614 iowrite32(0, ®->intr_mask); 1615 iowrite32(0, ®->enable); 1616 bp->signal[gen].running = false; 1617 if (!enable) 1618 return 0; 1619 1620 ts = ktime_to_timespec64(bp->signal[gen].start); 1621 iowrite32(ts.tv_sec, ®->start_sec); 1622 iowrite32(ts.tv_nsec, ®->start_ns); 1623 1624 ts = ktime_to_timespec64(bp->signal[gen].period); 1625 iowrite32(ts.tv_sec, ®->period_sec); 1626 iowrite32(ts.tv_nsec, ®->period_ns); 1627 1628 ts = ktime_to_timespec64(bp->signal[gen].pulse); 1629 iowrite32(ts.tv_sec, ®->pulse_sec); 1630 iowrite32(ts.tv_nsec, ®->pulse_ns); 1631 1632 iowrite32(bp->signal[gen].polarity, ®->polarity); 1633 iowrite32(0, ®->repeat_count); 1634 1635 iowrite32(0, ®->intr); /* clear interrupt state */ 1636 iowrite32(1, ®->intr_mask); /* enable interrupt */ 1637 iowrite32(3, ®->enable); /* valid & enable */ 1638 1639 bp->signal[gen].running = true; 1640 1641 return 0; 1642 } 1643 1644 static irqreturn_t 1645 ptp_ocp_ts_irq(int irq, void *priv) 1646 { 1647 struct ptp_ocp_ext_src *ext = priv; 1648 struct ts_reg __iomem *reg = ext->mem; 1649 struct ptp_clock_event ev; 1650 u32 sec, nsec; 1651 1652 if (ext == ext->bp->pps) { 1653 if (ext->bp->pps_req_map & OCP_REQ_PPS) { 1654 ev.type = PTP_CLOCK_PPS; 1655 ptp_clock_event(ext->bp->ptp, &ev); 1656 } 1657 1658 if ((ext->bp->pps_req_map & ~OCP_REQ_PPS) == 0) 1659 goto out; 1660 } 1661 1662 /* XXX should fix API - this converts s/ns -> ts -> s/ns */ 1663 sec = ioread32(®->time_sec); 1664 nsec = ioread32(®->time_ns); 1665 1666 ev.type = PTP_CLOCK_EXTTS; 1667 ev.index = ext->info->index; 1668 ev.timestamp = sec * NSEC_PER_SEC + nsec; 1669 1670 ptp_clock_event(ext->bp->ptp, &ev); 1671 1672 out: 1673 iowrite32(1, ®->intr); /* write 1 to ack */ 1674 1675 return IRQ_HANDLED; 1676 } 1677 1678 static int 1679 ptp_ocp_ts_enable(void *priv, u32 req, bool enable) 1680 { 1681 struct ptp_ocp_ext_src *ext = priv; 1682 struct ts_reg __iomem *reg = ext->mem; 1683 struct ptp_ocp *bp = ext->bp; 1684 1685 if (ext == bp->pps) { 1686 u32 old_map = bp->pps_req_map; 1687 1688 if (enable) 1689 bp->pps_req_map |= req; 1690 else 1691 bp->pps_req_map &= ~req; 1692 1693 /* if no state change, just return */ 1694 if ((!!old_map ^ !!bp->pps_req_map) == 0) 1695 return 0; 1696 } 1697 1698 if (enable) { 1699 iowrite32(1, ®->enable); 1700 iowrite32(1, ®->intr_mask); 1701 iowrite32(1, ®->intr); 1702 } else { 1703 iowrite32(0, ®->intr_mask); 1704 iowrite32(0, ®->enable); 1705 } 1706 1707 return 0; 1708 } 1709 1710 static void 1711 ptp_ocp_unregister_ext(struct ptp_ocp_ext_src *ext) 1712 { 1713 ext->info->enable(ext, ~0, false); 1714 pci_free_irq(ext->bp->pdev, ext->irq_vec, ext); 1715 kfree(ext); 1716 } 1717 1718 static int 1719 ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r) 1720 { 1721 struct pci_dev *pdev = bp->pdev; 1722 struct ptp_ocp_ext_src *ext; 1723 int err; 1724 1725 ext = kzalloc(sizeof(*ext), GFP_KERNEL); 1726 if (!ext) 1727 return -ENOMEM; 1728 1729 ext->mem = ptp_ocp_get_mem(bp, r); 1730 if (IS_ERR(ext->mem)) { 1731 err = PTR_ERR(ext->mem); 1732 goto out; 1733 } 1734 1735 ext->bp = bp; 1736 ext->info = r->extra; 1737 ext->irq_vec = r->irq_vec; 1738 1739 err = pci_request_irq(pdev, r->irq_vec, ext->info->irq_fcn, NULL, 1740 ext, "ocp%d.%s", bp->id, r->name); 1741 if (err) { 1742 dev_err(&pdev->dev, "Could not get irq %d\n", r->irq_vec); 1743 goto out; 1744 } 1745 1746 bp_assign_entry(bp, r, ext); 1747 1748 return 0; 1749 1750 out: 1751 kfree(ext); 1752 return err; 1753 } 1754 1755 static int 1756 ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r) 1757 { 1758 struct pci_dev *pdev = bp->pdev; 1759 struct uart_8250_port uart; 1760 1761 /* Setting UPF_IOREMAP and leaving port.membase unspecified lets 1762 * the serial port device claim and release the pci resource. 1763 */ 1764 memset(&uart, 0, sizeof(uart)); 1765 uart.port.dev = &pdev->dev; 1766 uart.port.iotype = UPIO_MEM; 1767 uart.port.regshift = 2; 1768 uart.port.mapbase = pci_resource_start(pdev, 0) + r->offset; 1769 uart.port.irq = pci_irq_vector(pdev, r->irq_vec); 1770 uart.port.uartclk = 50000000; 1771 uart.port.flags = UPF_FIXED_TYPE | UPF_IOREMAP | UPF_NO_THRE_TEST; 1772 uart.port.type = PORT_16550A; 1773 1774 return serial8250_register_8250_port(&uart); 1775 } 1776 1777 static int 1778 ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r) 1779 { 1780 int port; 1781 1782 port = ptp_ocp_serial_line(bp, r); 1783 if (port < 0) 1784 return port; 1785 1786 bp_assign_entry(bp, r, port); 1787 1788 return 0; 1789 } 1790 1791 static int 1792 ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r) 1793 { 1794 void __iomem *mem; 1795 1796 mem = ptp_ocp_get_mem(bp, r); 1797 if (IS_ERR(mem)) 1798 return PTR_ERR(mem); 1799 1800 bp_assign_entry(bp, r, mem); 1801 1802 return 0; 1803 } 1804 1805 static void 1806 ptp_ocp_nmea_out_init(struct ptp_ocp *bp) 1807 { 1808 if (!bp->nmea_out) 1809 return; 1810 1811 iowrite32(0, &bp->nmea_out->ctrl); /* disable */ 1812 iowrite32(7, &bp->nmea_out->uart_baud); /* 115200 */ 1813 iowrite32(1, &bp->nmea_out->ctrl); /* enable */ 1814 } 1815 1816 static void 1817 _ptp_ocp_signal_init(struct ptp_ocp_signal *s, struct signal_reg __iomem *reg) 1818 { 1819 u32 val; 1820 1821 iowrite32(0, ®->enable); /* disable */ 1822 1823 val = ioread32(®->polarity); 1824 s->polarity = val ? true : false; 1825 s->duty = 50; 1826 } 1827 1828 static void 1829 ptp_ocp_signal_init(struct ptp_ocp *bp) 1830 { 1831 int i; 1832 1833 for (i = 0; i < 4; i++) 1834 if (bp->signal_out[i]) 1835 _ptp_ocp_signal_init(&bp->signal[i], 1836 bp->signal_out[i]->mem); 1837 } 1838 1839 static void 1840 ptp_ocp_attr_group_del(struct ptp_ocp *bp) 1841 { 1842 sysfs_remove_groups(&bp->dev.kobj, bp->attr_group); 1843 kfree(bp->attr_group); 1844 } 1845 1846 static int 1847 ptp_ocp_attr_group_add(struct ptp_ocp *bp, 1848 const struct ocp_attr_group *attr_tbl) 1849 { 1850 int count, i; 1851 int err; 1852 1853 count = 0; 1854 for (i = 0; attr_tbl[i].cap; i++) 1855 if (attr_tbl[i].cap & bp->fw_cap) 1856 count++; 1857 1858 bp->attr_group = kcalloc(count + 1, sizeof(struct attribute_group *), 1859 GFP_KERNEL); 1860 if (!bp->attr_group) 1861 return -ENOMEM; 1862 1863 count = 0; 1864 for (i = 0; attr_tbl[i].cap; i++) 1865 if (attr_tbl[i].cap & bp->fw_cap) 1866 bp->attr_group[count++] = attr_tbl[i].group; 1867 1868 err = sysfs_create_groups(&bp->dev.kobj, bp->attr_group); 1869 if (err) 1870 bp->attr_group[0] = NULL; 1871 1872 return err; 1873 } 1874 1875 static void 1876 ptp_ocp_sma_init(struct ptp_ocp *bp) 1877 { 1878 u32 reg; 1879 int i; 1880 1881 /* defaults */ 1882 bp->sma[0].mode = SMA_MODE_IN; 1883 bp->sma[1].mode = SMA_MODE_IN; 1884 bp->sma[2].mode = SMA_MODE_OUT; 1885 bp->sma[3].mode = SMA_MODE_OUT; 1886 1887 /* If no SMA1 map, the pin functions and directions are fixed. */ 1888 if (!bp->sma_map1) { 1889 for (i = 0; i < 4; i++) { 1890 bp->sma[i].fixed_fcn = true; 1891 bp->sma[i].fixed_dir = true; 1892 } 1893 return; 1894 } 1895 1896 /* If SMA2 GPIO output map is all 1, it is not present. 1897 * This indicates the firmware has fixed direction SMA pins. 1898 */ 1899 reg = ioread32(&bp->sma_map2->gpio2); 1900 if (reg == 0xffffffff) { 1901 for (i = 0; i < 4; i++) 1902 bp->sma[i].fixed_dir = true; 1903 } else { 1904 reg = ioread32(&bp->sma_map1->gpio1); 1905 bp->sma[0].mode = reg & BIT(15) ? SMA_MODE_IN : SMA_MODE_OUT; 1906 bp->sma[1].mode = reg & BIT(31) ? SMA_MODE_IN : SMA_MODE_OUT; 1907 1908 reg = ioread32(&bp->sma_map1->gpio2); 1909 bp->sma[2].mode = reg & BIT(15) ? SMA_MODE_OUT : SMA_MODE_IN; 1910 bp->sma[3].mode = reg & BIT(31) ? SMA_MODE_OUT : SMA_MODE_IN; 1911 } 1912 } 1913 1914 static int 1915 ptp_ocp_fb_set_pins(struct ptp_ocp *bp) 1916 { 1917 struct ptp_pin_desc *config; 1918 int i; 1919 1920 config = kzalloc(sizeof(*config) * 4, GFP_KERNEL); 1921 if (!config) 1922 return -ENOMEM; 1923 1924 for (i = 0; i < 4; i++) { 1925 sprintf(config[i].name, "sma%d", i + 1); 1926 config[i].index = i; 1927 } 1928 1929 bp->ptp_info.n_pins = 4; 1930 bp->ptp_info.pin_config = config; 1931 1932 return 0; 1933 } 1934 1935 /* FB specific board initializers; last "resource" registered. */ 1936 static int 1937 ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r) 1938 { 1939 int ver, err; 1940 1941 bp->flash_start = 1024 * 4096; 1942 bp->eeprom_map = fb_eeprom_map; 1943 bp->fw_version = ioread32(&bp->image->version); 1944 bp->fw_cap = OCP_CAP_BASIC; 1945 1946 ver = bp->fw_version & 0xffff; 1947 if (ver >= 19) 1948 bp->fw_cap |= OCP_CAP_SIGNAL; 1949 if (ver >= 20) 1950 bp->fw_cap |= OCP_CAP_FREQ; 1951 1952 ptp_ocp_tod_init(bp); 1953 ptp_ocp_nmea_out_init(bp); 1954 ptp_ocp_sma_init(bp); 1955 ptp_ocp_signal_init(bp); 1956 1957 err = ptp_ocp_attr_group_add(bp, fb_timecard_groups); 1958 if (err) 1959 return err; 1960 1961 err = ptp_ocp_fb_set_pins(bp); 1962 if (err) 1963 return err; 1964 1965 return ptp_ocp_init_clock(bp); 1966 } 1967 1968 static bool 1969 ptp_ocp_allow_irq(struct ptp_ocp *bp, struct ocp_resource *r) 1970 { 1971 bool allow = !r->irq_vec || r->irq_vec < bp->n_irqs; 1972 1973 if (!allow) 1974 dev_err(&bp->pdev->dev, "irq %d out of range, skipping %s\n", 1975 r->irq_vec, r->name); 1976 return allow; 1977 } 1978 1979 static int 1980 ptp_ocp_register_resources(struct ptp_ocp *bp, kernel_ulong_t driver_data) 1981 { 1982 struct ocp_resource *r, *table; 1983 int err = 0; 1984 1985 table = (struct ocp_resource *)driver_data; 1986 for (r = table; r->setup; r++) { 1987 if (!ptp_ocp_allow_irq(bp, r)) 1988 continue; 1989 err = r->setup(bp, r); 1990 if (err) { 1991 dev_err(&bp->pdev->dev, 1992 "Could not register %s: err %d\n", 1993 r->name, err); 1994 break; 1995 } 1996 } 1997 return err; 1998 } 1999 2000 static void 2001 ptp_ocp_enable_fpga(u32 __iomem *reg, u32 bit, bool enable) 2002 { 2003 u32 ctrl; 2004 bool on; 2005 2006 ctrl = ioread32(reg); 2007 on = ctrl & bit; 2008 if (on ^ enable) { 2009 ctrl &= ~bit; 2010 ctrl |= enable ? bit : 0; 2011 iowrite32(ctrl, reg); 2012 } 2013 } 2014 2015 static void 2016 ptp_ocp_irig_out(struct ptp_ocp *bp, bool enable) 2017 { 2018 return ptp_ocp_enable_fpga(&bp->irig_out->ctrl, 2019 IRIG_M_CTRL_ENABLE, enable); 2020 } 2021 2022 static void 2023 ptp_ocp_irig_in(struct ptp_ocp *bp, bool enable) 2024 { 2025 return ptp_ocp_enable_fpga(&bp->irig_in->ctrl, 2026 IRIG_S_CTRL_ENABLE, enable); 2027 } 2028 2029 static void 2030 ptp_ocp_dcf_out(struct ptp_ocp *bp, bool enable) 2031 { 2032 return ptp_ocp_enable_fpga(&bp->dcf_out->ctrl, 2033 DCF_M_CTRL_ENABLE, enable); 2034 } 2035 2036 static void 2037 ptp_ocp_dcf_in(struct ptp_ocp *bp, bool enable) 2038 { 2039 return ptp_ocp_enable_fpga(&bp->dcf_in->ctrl, 2040 DCF_S_CTRL_ENABLE, enable); 2041 } 2042 2043 static void 2044 __handle_signal_outputs(struct ptp_ocp *bp, u32 val) 2045 { 2046 ptp_ocp_irig_out(bp, val & 0x00100010); 2047 ptp_ocp_dcf_out(bp, val & 0x00200020); 2048 } 2049 2050 static void 2051 __handle_signal_inputs(struct ptp_ocp *bp, u32 val) 2052 { 2053 ptp_ocp_irig_in(bp, val & 0x00100010); 2054 ptp_ocp_dcf_in(bp, val & 0x00200020); 2055 } 2056 2057 /* 2058 * ANT0 == gps (in) 2059 * ANT1 == sma1 (in) 2060 * ANT2 == sma2 (in) 2061 * ANT3 == sma3 (out) 2062 * ANT4 == sma4 (out) 2063 */ 2064 2065 static ssize_t 2066 ptp_ocp_show_output(u32 val, char *buf, int def_val) 2067 { 2068 const char *name; 2069 ssize_t count; 2070 2071 count = sysfs_emit(buf, "OUT: "); 2072 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_out, val); 2073 if (!name) 2074 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_out, def_val); 2075 count += sysfs_emit_at(buf, count, "%s\n", name); 2076 return count; 2077 } 2078 2079 static ssize_t 2080 ptp_ocp_show_inputs(u32 val, char *buf, int def_val) 2081 { 2082 const char *name; 2083 ssize_t count; 2084 int i; 2085 2086 count = sysfs_emit(buf, "IN: "); 2087 for (i = 0; i < ARRAY_SIZE(ptp_ocp_sma_in); i++) { 2088 if (val & ptp_ocp_sma_in[i].value) { 2089 name = ptp_ocp_sma_in[i].name; 2090 count += sysfs_emit_at(buf, count, "%s ", name); 2091 } 2092 } 2093 if (!val && def_val >= 0) { 2094 name = ptp_ocp_select_name_from_val(ptp_ocp_sma_in, def_val); 2095 count += sysfs_emit_at(buf, count, "%s ", name); 2096 } 2097 if (count) 2098 count--; 2099 count += sysfs_emit_at(buf, count, "\n"); 2100 return count; 2101 } 2102 2103 static int 2104 sma_parse_inputs(const char *buf, enum ptp_ocp_sma_mode *mode) 2105 { 2106 struct ocp_selector *tbl[] = { ptp_ocp_sma_in, ptp_ocp_sma_out }; 2107 int idx, count, dir; 2108 char **argv; 2109 int ret; 2110 2111 argv = argv_split(GFP_KERNEL, buf, &count); 2112 if (!argv) 2113 return -ENOMEM; 2114 2115 ret = -EINVAL; 2116 if (!count) 2117 goto out; 2118 2119 idx = 0; 2120 dir = *mode == SMA_MODE_IN ? 0 : 1; 2121 if (!strcasecmp("IN:", argv[0])) { 2122 dir = 0; 2123 idx++; 2124 } 2125 if (!strcasecmp("OUT:", argv[0])) { 2126 dir = 1; 2127 idx++; 2128 } 2129 *mode = dir == 0 ? SMA_MODE_IN : SMA_MODE_OUT; 2130 2131 ret = 0; 2132 for (; idx < count; idx++) 2133 ret |= ptp_ocp_select_val_from_name(tbl[dir], argv[idx]); 2134 if (ret < 0) 2135 ret = -EINVAL; 2136 2137 out: 2138 argv_free(argv); 2139 return ret; 2140 } 2141 2142 static u32 2143 ptp_ocp_sma_get(struct ptp_ocp *bp, int sma_nr, enum ptp_ocp_sma_mode mode) 2144 { 2145 u32 __iomem *gpio; 2146 u32 shift; 2147 2148 if (bp->sma[sma_nr - 1].fixed_fcn) 2149 return (sma_nr - 1) & 1; 2150 2151 if (mode == SMA_MODE_IN) 2152 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; 2153 else 2154 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; 2155 shift = sma_nr & 1 ? 0 : 16; 2156 2157 return (ioread32(gpio) >> shift) & 0xffff; 2158 } 2159 2160 static ssize_t 2161 ptp_ocp_sma_show(struct ptp_ocp *bp, int sma_nr, char *buf, 2162 int default_in_val, int default_out_val) 2163 { 2164 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; 2165 u32 val; 2166 2167 val = ptp_ocp_sma_get(bp, sma_nr, sma->mode) & SMA_SELECT_MASK; 2168 2169 if (sma->mode == SMA_MODE_IN) { 2170 if (sma->disabled) 2171 val = SMA_DISABLE; 2172 return ptp_ocp_show_inputs(val, buf, default_in_val); 2173 } 2174 2175 return ptp_ocp_show_output(val, buf, default_out_val); 2176 } 2177 2178 static ssize_t 2179 sma1_show(struct device *dev, struct device_attribute *attr, char *buf) 2180 { 2181 struct ptp_ocp *bp = dev_get_drvdata(dev); 2182 2183 return ptp_ocp_sma_show(bp, 1, buf, 0, 1); 2184 } 2185 2186 static ssize_t 2187 sma2_show(struct device *dev, struct device_attribute *attr, char *buf) 2188 { 2189 struct ptp_ocp *bp = dev_get_drvdata(dev); 2190 2191 return ptp_ocp_sma_show(bp, 2, buf, -1, 1); 2192 } 2193 2194 static ssize_t 2195 sma3_show(struct device *dev, struct device_attribute *attr, char *buf) 2196 { 2197 struct ptp_ocp *bp = dev_get_drvdata(dev); 2198 2199 return ptp_ocp_sma_show(bp, 3, buf, -1, 0); 2200 } 2201 2202 static ssize_t 2203 sma4_show(struct device *dev, struct device_attribute *attr, char *buf) 2204 { 2205 struct ptp_ocp *bp = dev_get_drvdata(dev); 2206 2207 return ptp_ocp_sma_show(bp, 4, buf, -1, 1); 2208 } 2209 2210 static void 2211 ptp_ocp_sma_store_output(struct ptp_ocp *bp, int sma_nr, u32 val) 2212 { 2213 u32 reg, mask, shift; 2214 unsigned long flags; 2215 u32 __iomem *gpio; 2216 2217 gpio = sma_nr > 2 ? &bp->sma_map1->gpio2 : &bp->sma_map2->gpio2; 2218 shift = sma_nr & 1 ? 0 : 16; 2219 2220 mask = 0xffff << (16 - shift); 2221 2222 spin_lock_irqsave(&bp->lock, flags); 2223 2224 reg = ioread32(gpio); 2225 reg = (reg & mask) | (val << shift); 2226 2227 __handle_signal_outputs(bp, reg); 2228 2229 iowrite32(reg, gpio); 2230 2231 spin_unlock_irqrestore(&bp->lock, flags); 2232 } 2233 2234 static void 2235 ptp_ocp_sma_store_inputs(struct ptp_ocp *bp, int sma_nr, u32 val) 2236 { 2237 u32 reg, mask, shift; 2238 unsigned long flags; 2239 u32 __iomem *gpio; 2240 2241 gpio = sma_nr > 2 ? &bp->sma_map2->gpio1 : &bp->sma_map1->gpio1; 2242 shift = sma_nr & 1 ? 0 : 16; 2243 2244 mask = 0xffff << (16 - shift); 2245 2246 spin_lock_irqsave(&bp->lock, flags); 2247 2248 reg = ioread32(gpio); 2249 reg = (reg & mask) | (val << shift); 2250 2251 __handle_signal_inputs(bp, reg); 2252 2253 iowrite32(reg, gpio); 2254 2255 spin_unlock_irqrestore(&bp->lock, flags); 2256 } 2257 2258 static int 2259 ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr) 2260 { 2261 struct ptp_ocp_sma_connector *sma = &bp->sma[sma_nr - 1]; 2262 enum ptp_ocp_sma_mode mode; 2263 int val; 2264 2265 mode = sma->mode; 2266 val = sma_parse_inputs(buf, &mode); 2267 if (val < 0) 2268 return val; 2269 2270 if (sma->fixed_dir && (mode != sma->mode || val & SMA_DISABLE)) 2271 return -EOPNOTSUPP; 2272 2273 if (sma->fixed_fcn) { 2274 if (val != ((sma_nr - 1) & 1)) 2275 return -EOPNOTSUPP; 2276 return 0; 2277 } 2278 2279 sma->disabled = !!(val & SMA_DISABLE); 2280 2281 if (mode != sma->mode) { 2282 if (mode == SMA_MODE_IN) 2283 ptp_ocp_sma_store_output(bp, sma_nr, 0); 2284 else 2285 ptp_ocp_sma_store_inputs(bp, sma_nr, 0); 2286 sma->mode = mode; 2287 } 2288 2289 if (!sma->fixed_dir) 2290 val |= SMA_ENABLE; /* add enable bit */ 2291 2292 if (sma->disabled) 2293 val = 0; 2294 2295 if (mode == SMA_MODE_IN) 2296 ptp_ocp_sma_store_inputs(bp, sma_nr, val); 2297 else 2298 ptp_ocp_sma_store_output(bp, sma_nr, val); 2299 2300 return 0; 2301 } 2302 2303 static ssize_t 2304 sma1_store(struct device *dev, struct device_attribute *attr, 2305 const char *buf, size_t count) 2306 { 2307 struct ptp_ocp *bp = dev_get_drvdata(dev); 2308 int err; 2309 2310 err = ptp_ocp_sma_store(bp, buf, 1); 2311 return err ? err : count; 2312 } 2313 2314 static ssize_t 2315 sma2_store(struct device *dev, struct device_attribute *attr, 2316 const char *buf, size_t count) 2317 { 2318 struct ptp_ocp *bp = dev_get_drvdata(dev); 2319 int err; 2320 2321 err = ptp_ocp_sma_store(bp, buf, 2); 2322 return err ? err : count; 2323 } 2324 2325 static ssize_t 2326 sma3_store(struct device *dev, struct device_attribute *attr, 2327 const char *buf, size_t count) 2328 { 2329 struct ptp_ocp *bp = dev_get_drvdata(dev); 2330 int err; 2331 2332 err = ptp_ocp_sma_store(bp, buf, 3); 2333 return err ? err : count; 2334 } 2335 2336 static ssize_t 2337 sma4_store(struct device *dev, struct device_attribute *attr, 2338 const char *buf, size_t count) 2339 { 2340 struct ptp_ocp *bp = dev_get_drvdata(dev); 2341 int err; 2342 2343 err = ptp_ocp_sma_store(bp, buf, 4); 2344 return err ? err : count; 2345 } 2346 static DEVICE_ATTR_RW(sma1); 2347 static DEVICE_ATTR_RW(sma2); 2348 static DEVICE_ATTR_RW(sma3); 2349 static DEVICE_ATTR_RW(sma4); 2350 2351 static ssize_t 2352 available_sma_inputs_show(struct device *dev, 2353 struct device_attribute *attr, char *buf) 2354 { 2355 return ptp_ocp_select_table_show(ptp_ocp_sma_in, buf); 2356 } 2357 static DEVICE_ATTR_RO(available_sma_inputs); 2358 2359 static ssize_t 2360 available_sma_outputs_show(struct device *dev, 2361 struct device_attribute *attr, char *buf) 2362 { 2363 return ptp_ocp_select_table_show(ptp_ocp_sma_out, buf); 2364 } 2365 static DEVICE_ATTR_RO(available_sma_outputs); 2366 2367 #define EXT_ATTR_RO(_group, _name, _val) \ 2368 struct dev_ext_attribute dev_attr_##_group##_val##_##_name = \ 2369 { __ATTR_RO(_name), (void *)_val } 2370 #define EXT_ATTR_RW(_group, _name, _val) \ 2371 struct dev_ext_attribute dev_attr_##_group##_val##_##_name = \ 2372 { __ATTR_RW(_name), (void *)_val } 2373 #define to_ext_attr(x) container_of(x, struct dev_ext_attribute, attr) 2374 2375 /* period [duty [phase [polarity]]] */ 2376 static ssize_t 2377 signal_store(struct device *dev, struct device_attribute *attr, 2378 const char *buf, size_t count) 2379 { 2380 struct dev_ext_attribute *ea = to_ext_attr(attr); 2381 struct ptp_ocp *bp = dev_get_drvdata(dev); 2382 struct ptp_ocp_signal s = { }; 2383 int gen = (uintptr_t)ea->var; 2384 int argc, err; 2385 char **argv; 2386 2387 argv = argv_split(GFP_KERNEL, buf, &argc); 2388 if (!argv) 2389 return -ENOMEM; 2390 2391 err = -EINVAL; 2392 s.duty = bp->signal[gen].duty; 2393 s.phase = bp->signal[gen].phase; 2394 s.period = bp->signal[gen].period; 2395 s.polarity = bp->signal[gen].polarity; 2396 2397 switch (argc) { 2398 case 4: 2399 argc--; 2400 err = kstrtobool(argv[argc], &s.polarity); 2401 if (err) 2402 goto out; 2403 fallthrough; 2404 case 3: 2405 argc--; 2406 err = kstrtou64(argv[argc], 0, &s.phase); 2407 if (err) 2408 goto out; 2409 fallthrough; 2410 case 2: 2411 argc--; 2412 err = kstrtoint(argv[argc], 0, &s.duty); 2413 if (err) 2414 goto out; 2415 fallthrough; 2416 case 1: 2417 argc--; 2418 err = kstrtou64(argv[argc], 0, &s.period); 2419 if (err) 2420 goto out; 2421 break; 2422 default: 2423 goto out; 2424 } 2425 2426 err = ptp_ocp_signal_set(bp, gen, &s); 2427 if (err) 2428 goto out; 2429 2430 err = ptp_ocp_signal_enable(bp->signal_out[gen], gen, s.period != 0); 2431 2432 out: 2433 argv_free(argv); 2434 return err ? err : count; 2435 } 2436 2437 static ssize_t 2438 signal_show(struct device *dev, struct device_attribute *attr, char *buf) 2439 { 2440 struct dev_ext_attribute *ea = to_ext_attr(attr); 2441 struct ptp_ocp *bp = dev_get_drvdata(dev); 2442 struct ptp_ocp_signal *signal; 2443 struct timespec64 ts; 2444 ssize_t count; 2445 int i; 2446 2447 i = (uintptr_t)ea->var; 2448 signal = &bp->signal[i]; 2449 2450 count = sysfs_emit(buf, "%llu %d %llu %d", signal->period, 2451 signal->duty, signal->phase, signal->polarity); 2452 2453 ts = ktime_to_timespec64(signal->start); 2454 count += sysfs_emit_at(buf, count, " %ptT TAI\n", &ts); 2455 2456 return count; 2457 } 2458 static EXT_ATTR_RW(signal, signal, 0); 2459 static EXT_ATTR_RW(signal, signal, 1); 2460 static EXT_ATTR_RW(signal, signal, 2); 2461 static EXT_ATTR_RW(signal, signal, 3); 2462 2463 static ssize_t 2464 duty_show(struct device *dev, struct device_attribute *attr, char *buf) 2465 { 2466 struct dev_ext_attribute *ea = to_ext_attr(attr); 2467 struct ptp_ocp *bp = dev_get_drvdata(dev); 2468 int i = (uintptr_t)ea->var; 2469 2470 return sysfs_emit(buf, "%d\n", bp->signal[i].duty); 2471 } 2472 static EXT_ATTR_RO(signal, duty, 0); 2473 static EXT_ATTR_RO(signal, duty, 1); 2474 static EXT_ATTR_RO(signal, duty, 2); 2475 static EXT_ATTR_RO(signal, duty, 3); 2476 2477 static ssize_t 2478 period_show(struct device *dev, struct device_attribute *attr, char *buf) 2479 { 2480 struct dev_ext_attribute *ea = to_ext_attr(attr); 2481 struct ptp_ocp *bp = dev_get_drvdata(dev); 2482 int i = (uintptr_t)ea->var; 2483 2484 return sysfs_emit(buf, "%llu\n", bp->signal[i].period); 2485 } 2486 static EXT_ATTR_RO(signal, period, 0); 2487 static EXT_ATTR_RO(signal, period, 1); 2488 static EXT_ATTR_RO(signal, period, 2); 2489 static EXT_ATTR_RO(signal, period, 3); 2490 2491 static ssize_t 2492 phase_show(struct device *dev, struct device_attribute *attr, char *buf) 2493 { 2494 struct dev_ext_attribute *ea = to_ext_attr(attr); 2495 struct ptp_ocp *bp = dev_get_drvdata(dev); 2496 int i = (uintptr_t)ea->var; 2497 2498 return sysfs_emit(buf, "%llu\n", bp->signal[i].phase); 2499 } 2500 static EXT_ATTR_RO(signal, phase, 0); 2501 static EXT_ATTR_RO(signal, phase, 1); 2502 static EXT_ATTR_RO(signal, phase, 2); 2503 static EXT_ATTR_RO(signal, phase, 3); 2504 2505 static ssize_t 2506 polarity_show(struct device *dev, struct device_attribute *attr, 2507 char *buf) 2508 { 2509 struct dev_ext_attribute *ea = to_ext_attr(attr); 2510 struct ptp_ocp *bp = dev_get_drvdata(dev); 2511 int i = (uintptr_t)ea->var; 2512 2513 return sysfs_emit(buf, "%d\n", bp->signal[i].polarity); 2514 } 2515 static EXT_ATTR_RO(signal, polarity, 0); 2516 static EXT_ATTR_RO(signal, polarity, 1); 2517 static EXT_ATTR_RO(signal, polarity, 2); 2518 static EXT_ATTR_RO(signal, polarity, 3); 2519 2520 static ssize_t 2521 running_show(struct device *dev, struct device_attribute *attr, char *buf) 2522 { 2523 struct dev_ext_attribute *ea = to_ext_attr(attr); 2524 struct ptp_ocp *bp = dev_get_drvdata(dev); 2525 int i = (uintptr_t)ea->var; 2526 2527 return sysfs_emit(buf, "%d\n", bp->signal[i].running); 2528 } 2529 static EXT_ATTR_RO(signal, running, 0); 2530 static EXT_ATTR_RO(signal, running, 1); 2531 static EXT_ATTR_RO(signal, running, 2); 2532 static EXT_ATTR_RO(signal, running, 3); 2533 2534 static ssize_t 2535 start_show(struct device *dev, struct device_attribute *attr, char *buf) 2536 { 2537 struct dev_ext_attribute *ea = to_ext_attr(attr); 2538 struct ptp_ocp *bp = dev_get_drvdata(dev); 2539 int i = (uintptr_t)ea->var; 2540 struct timespec64 ts; 2541 2542 ts = ktime_to_timespec64(bp->signal[i].start); 2543 return sysfs_emit(buf, "%llu.%lu\n", ts.tv_sec, ts.tv_nsec); 2544 } 2545 static EXT_ATTR_RO(signal, start, 0); 2546 static EXT_ATTR_RO(signal, start, 1); 2547 static EXT_ATTR_RO(signal, start, 2); 2548 static EXT_ATTR_RO(signal, start, 3); 2549 2550 static ssize_t 2551 seconds_store(struct device *dev, struct device_attribute *attr, 2552 const char *buf, size_t count) 2553 { 2554 struct dev_ext_attribute *ea = to_ext_attr(attr); 2555 struct ptp_ocp *bp = dev_get_drvdata(dev); 2556 int idx = (uintptr_t)ea->var; 2557 u32 val; 2558 int err; 2559 2560 err = kstrtou32(buf, 0, &val); 2561 if (err) 2562 return err; 2563 if (val > 0xff) 2564 return -EINVAL; 2565 2566 if (val) 2567 val = (val << 8) | 0x1; 2568 2569 iowrite32(val, &bp->freq_in[idx]->ctrl); 2570 2571 return count; 2572 } 2573 2574 static ssize_t 2575 seconds_show(struct device *dev, struct device_attribute *attr, char *buf) 2576 { 2577 struct dev_ext_attribute *ea = to_ext_attr(attr); 2578 struct ptp_ocp *bp = dev_get_drvdata(dev); 2579 int idx = (uintptr_t)ea->var; 2580 u32 val; 2581 2582 val = ioread32(&bp->freq_in[idx]->ctrl); 2583 if (val & 1) 2584 val = (val >> 8) & 0xff; 2585 else 2586 val = 0; 2587 2588 return sysfs_emit(buf, "%u\n", val); 2589 } 2590 static EXT_ATTR_RW(freq, seconds, 0); 2591 static EXT_ATTR_RW(freq, seconds, 1); 2592 static EXT_ATTR_RW(freq, seconds, 2); 2593 static EXT_ATTR_RW(freq, seconds, 3); 2594 2595 static ssize_t 2596 frequency_show(struct device *dev, struct device_attribute *attr, char *buf) 2597 { 2598 struct dev_ext_attribute *ea = to_ext_attr(attr); 2599 struct ptp_ocp *bp = dev_get_drvdata(dev); 2600 int idx = (uintptr_t)ea->var; 2601 u32 val; 2602 2603 val = ioread32(&bp->freq_in[idx]->status); 2604 if (val & FREQ_STATUS_ERROR) 2605 return sysfs_emit(buf, "error\n"); 2606 if (val & FREQ_STATUS_OVERRUN) 2607 return sysfs_emit(buf, "overrun\n"); 2608 if (val & FREQ_STATUS_VALID) 2609 return sysfs_emit(buf, "%lu\n", val & FREQ_STATUS_MASK); 2610 return 0; 2611 } 2612 static EXT_ATTR_RO(freq, frequency, 0); 2613 static EXT_ATTR_RO(freq, frequency, 1); 2614 static EXT_ATTR_RO(freq, frequency, 2); 2615 static EXT_ATTR_RO(freq, frequency, 3); 2616 2617 static ssize_t 2618 serialnum_show(struct device *dev, struct device_attribute *attr, char *buf) 2619 { 2620 struct ptp_ocp *bp = dev_get_drvdata(dev); 2621 2622 if (!bp->has_eeprom_data) 2623 ptp_ocp_read_eeprom(bp); 2624 2625 return sysfs_emit(buf, "%pM\n", bp->serial); 2626 } 2627 static DEVICE_ATTR_RO(serialnum); 2628 2629 static ssize_t 2630 gnss_sync_show(struct device *dev, struct device_attribute *attr, char *buf) 2631 { 2632 struct ptp_ocp *bp = dev_get_drvdata(dev); 2633 ssize_t ret; 2634 2635 if (bp->gnss_lost) 2636 ret = sysfs_emit(buf, "LOST @ %ptT\n", &bp->gnss_lost); 2637 else 2638 ret = sysfs_emit(buf, "SYNC\n"); 2639 2640 return ret; 2641 } 2642 static DEVICE_ATTR_RO(gnss_sync); 2643 2644 static ssize_t 2645 utc_tai_offset_show(struct device *dev, 2646 struct device_attribute *attr, char *buf) 2647 { 2648 struct ptp_ocp *bp = dev_get_drvdata(dev); 2649 2650 return sysfs_emit(buf, "%d\n", bp->utc_tai_offset); 2651 } 2652 2653 static ssize_t 2654 utc_tai_offset_store(struct device *dev, 2655 struct device_attribute *attr, 2656 const char *buf, size_t count) 2657 { 2658 struct ptp_ocp *bp = dev_get_drvdata(dev); 2659 int err; 2660 u32 val; 2661 2662 err = kstrtou32(buf, 0, &val); 2663 if (err) 2664 return err; 2665 2666 ptp_ocp_utc_distribute(bp, val); 2667 2668 return count; 2669 } 2670 static DEVICE_ATTR_RW(utc_tai_offset); 2671 2672 static ssize_t 2673 ts_window_adjust_show(struct device *dev, 2674 struct device_attribute *attr, char *buf) 2675 { 2676 struct ptp_ocp *bp = dev_get_drvdata(dev); 2677 2678 return sysfs_emit(buf, "%d\n", bp->ts_window_adjust); 2679 } 2680 2681 static ssize_t 2682 ts_window_adjust_store(struct device *dev, 2683 struct device_attribute *attr, 2684 const char *buf, size_t count) 2685 { 2686 struct ptp_ocp *bp = dev_get_drvdata(dev); 2687 int err; 2688 u32 val; 2689 2690 err = kstrtou32(buf, 0, &val); 2691 if (err) 2692 return err; 2693 2694 bp->ts_window_adjust = val; 2695 2696 return count; 2697 } 2698 static DEVICE_ATTR_RW(ts_window_adjust); 2699 2700 static ssize_t 2701 irig_b_mode_show(struct device *dev, struct device_attribute *attr, char *buf) 2702 { 2703 struct ptp_ocp *bp = dev_get_drvdata(dev); 2704 u32 val; 2705 2706 val = ioread32(&bp->irig_out->ctrl); 2707 val = (val >> 16) & 0x07; 2708 return sysfs_emit(buf, "%d\n", val); 2709 } 2710 2711 static ssize_t 2712 irig_b_mode_store(struct device *dev, 2713 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 err; 2719 u32 reg; 2720 u8 val; 2721 2722 err = kstrtou8(buf, 0, &val); 2723 if (err) 2724 return err; 2725 if (val > 7) 2726 return -EINVAL; 2727 2728 reg = ((val & 0x7) << 16); 2729 2730 spin_lock_irqsave(&bp->lock, flags); 2731 iowrite32(0, &bp->irig_out->ctrl); /* disable */ 2732 iowrite32(reg, &bp->irig_out->ctrl); /* change mode */ 2733 iowrite32(reg | IRIG_M_CTRL_ENABLE, &bp->irig_out->ctrl); 2734 spin_unlock_irqrestore(&bp->lock, flags); 2735 2736 return count; 2737 } 2738 static DEVICE_ATTR_RW(irig_b_mode); 2739 2740 static ssize_t 2741 clock_source_show(struct device *dev, struct device_attribute *attr, char *buf) 2742 { 2743 struct ptp_ocp *bp = dev_get_drvdata(dev); 2744 const char *p; 2745 u32 select; 2746 2747 select = ioread32(&bp->reg->select); 2748 p = ptp_ocp_select_name_from_val(ptp_ocp_clock, select >> 16); 2749 2750 return sysfs_emit(buf, "%s\n", p); 2751 } 2752 2753 static ssize_t 2754 clock_source_store(struct device *dev, struct device_attribute *attr, 2755 const char *buf, size_t count) 2756 { 2757 struct ptp_ocp *bp = dev_get_drvdata(dev); 2758 unsigned long flags; 2759 int val; 2760 2761 val = ptp_ocp_select_val_from_name(ptp_ocp_clock, buf); 2762 if (val < 0) 2763 return val; 2764 2765 spin_lock_irqsave(&bp->lock, flags); 2766 iowrite32(val, &bp->reg->select); 2767 spin_unlock_irqrestore(&bp->lock, flags); 2768 2769 return count; 2770 } 2771 static DEVICE_ATTR_RW(clock_source); 2772 2773 static ssize_t 2774 available_clock_sources_show(struct device *dev, 2775 struct device_attribute *attr, char *buf) 2776 { 2777 return ptp_ocp_select_table_show(ptp_ocp_clock, buf); 2778 } 2779 static DEVICE_ATTR_RO(available_clock_sources); 2780 2781 static ssize_t 2782 clock_status_drift_show(struct device *dev, 2783 struct device_attribute *attr, char *buf) 2784 { 2785 struct ptp_ocp *bp = dev_get_drvdata(dev); 2786 u32 val; 2787 int res; 2788 2789 val = ioread32(&bp->reg->status_drift); 2790 res = (val & ~INT_MAX) ? -1 : 1; 2791 res *= (val & INT_MAX); 2792 return sysfs_emit(buf, "%d\n", res); 2793 } 2794 static DEVICE_ATTR_RO(clock_status_drift); 2795 2796 static ssize_t 2797 clock_status_offset_show(struct device *dev, 2798 struct device_attribute *attr, char *buf) 2799 { 2800 struct ptp_ocp *bp = dev_get_drvdata(dev); 2801 u32 val; 2802 int res; 2803 2804 val = ioread32(&bp->reg->status_offset); 2805 res = (val & ~INT_MAX) ? -1 : 1; 2806 res *= (val & INT_MAX); 2807 return sysfs_emit(buf, "%d\n", res); 2808 } 2809 static DEVICE_ATTR_RO(clock_status_offset); 2810 2811 static ssize_t 2812 tod_correction_show(struct device *dev, 2813 struct device_attribute *attr, char *buf) 2814 { 2815 struct ptp_ocp *bp = dev_get_drvdata(dev); 2816 u32 val; 2817 int res; 2818 2819 val = ioread32(&bp->tod->adj_sec); 2820 res = (val & ~INT_MAX) ? -1 : 1; 2821 res *= (val & INT_MAX); 2822 return sysfs_emit(buf, "%d\n", res); 2823 } 2824 2825 static ssize_t 2826 tod_correction_store(struct device *dev, struct device_attribute *attr, 2827 const char *buf, size_t count) 2828 { 2829 struct ptp_ocp *bp = dev_get_drvdata(dev); 2830 unsigned long flags; 2831 int err, res; 2832 u32 val = 0; 2833 2834 err = kstrtos32(buf, 0, &res); 2835 if (err) 2836 return err; 2837 if (res < 0) { 2838 res *= -1; 2839 val |= BIT(31); 2840 } 2841 val |= res; 2842 2843 spin_lock_irqsave(&bp->lock, flags); 2844 iowrite32(val, &bp->tod->adj_sec); 2845 spin_unlock_irqrestore(&bp->lock, flags); 2846 2847 return count; 2848 } 2849 static DEVICE_ATTR_RW(tod_correction); 2850 2851 #define _DEVICE_SIGNAL_GROUP_ATTRS(_nr) \ 2852 static struct attribute *fb_timecard_signal##_nr##_attrs[] = { \ 2853 &dev_attr_signal##_nr##_signal.attr.attr, \ 2854 &dev_attr_signal##_nr##_duty.attr.attr, \ 2855 &dev_attr_signal##_nr##_phase.attr.attr, \ 2856 &dev_attr_signal##_nr##_period.attr.attr, \ 2857 &dev_attr_signal##_nr##_polarity.attr.attr, \ 2858 &dev_attr_signal##_nr##_running.attr.attr, \ 2859 &dev_attr_signal##_nr##_start.attr.attr, \ 2860 NULL, \ 2861 } 2862 2863 #define DEVICE_SIGNAL_GROUP(_name, _nr) \ 2864 _DEVICE_SIGNAL_GROUP_ATTRS(_nr); \ 2865 static const struct attribute_group \ 2866 fb_timecard_signal##_nr##_group = { \ 2867 .name = #_name, \ 2868 .attrs = fb_timecard_signal##_nr##_attrs, \ 2869 } 2870 2871 DEVICE_SIGNAL_GROUP(gen1, 0); 2872 DEVICE_SIGNAL_GROUP(gen2, 1); 2873 DEVICE_SIGNAL_GROUP(gen3, 2); 2874 DEVICE_SIGNAL_GROUP(gen4, 3); 2875 2876 #define _DEVICE_FREQ_GROUP_ATTRS(_nr) \ 2877 static struct attribute *fb_timecard_freq##_nr##_attrs[] = { \ 2878 &dev_attr_freq##_nr##_seconds.attr.attr, \ 2879 &dev_attr_freq##_nr##_frequency.attr.attr, \ 2880 NULL, \ 2881 } 2882 2883 #define DEVICE_FREQ_GROUP(_name, _nr) \ 2884 _DEVICE_FREQ_GROUP_ATTRS(_nr); \ 2885 static const struct attribute_group \ 2886 fb_timecard_freq##_nr##_group = { \ 2887 .name = #_name, \ 2888 .attrs = fb_timecard_freq##_nr##_attrs, \ 2889 } 2890 2891 DEVICE_FREQ_GROUP(freq1, 0); 2892 DEVICE_FREQ_GROUP(freq2, 1); 2893 DEVICE_FREQ_GROUP(freq3, 2); 2894 DEVICE_FREQ_GROUP(freq4, 3); 2895 2896 static struct attribute *fb_timecard_attrs[] = { 2897 &dev_attr_serialnum.attr, 2898 &dev_attr_gnss_sync.attr, 2899 &dev_attr_clock_source.attr, 2900 &dev_attr_available_clock_sources.attr, 2901 &dev_attr_sma1.attr, 2902 &dev_attr_sma2.attr, 2903 &dev_attr_sma3.attr, 2904 &dev_attr_sma4.attr, 2905 &dev_attr_available_sma_inputs.attr, 2906 &dev_attr_available_sma_outputs.attr, 2907 &dev_attr_clock_status_drift.attr, 2908 &dev_attr_clock_status_offset.attr, 2909 &dev_attr_irig_b_mode.attr, 2910 &dev_attr_utc_tai_offset.attr, 2911 &dev_attr_ts_window_adjust.attr, 2912 &dev_attr_tod_correction.attr, 2913 NULL, 2914 }; 2915 static const struct attribute_group fb_timecard_group = { 2916 .attrs = fb_timecard_attrs, 2917 }; 2918 static const struct ocp_attr_group fb_timecard_groups[] = { 2919 { .cap = OCP_CAP_BASIC, .group = &fb_timecard_group }, 2920 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal0_group }, 2921 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal1_group }, 2922 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal2_group }, 2923 { .cap = OCP_CAP_SIGNAL, .group = &fb_timecard_signal3_group }, 2924 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq0_group }, 2925 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq1_group }, 2926 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq2_group }, 2927 { .cap = OCP_CAP_FREQ, .group = &fb_timecard_freq3_group }, 2928 { }, 2929 }; 2930 2931 static void 2932 gpio_input_map(char *buf, struct ptp_ocp *bp, u16 map[][2], u16 bit, 2933 const char *def) 2934 { 2935 int i; 2936 2937 for (i = 0; i < 4; i++) { 2938 if (bp->sma[i].mode != SMA_MODE_IN) 2939 continue; 2940 if (map[i][0] & (1 << bit)) { 2941 sprintf(buf, "sma%d", i + 1); 2942 return; 2943 } 2944 } 2945 if (!def) 2946 def = "----"; 2947 strcpy(buf, def); 2948 } 2949 2950 static void 2951 gpio_output_map(char *buf, struct ptp_ocp *bp, u16 map[][2], u16 bit) 2952 { 2953 char *ans = buf; 2954 int i; 2955 2956 strcpy(ans, "----"); 2957 for (i = 0; i < 4; i++) { 2958 if (bp->sma[i].mode != SMA_MODE_OUT) 2959 continue; 2960 if (map[i][1] & (1 << bit)) 2961 ans += sprintf(ans, "sma%d ", i + 1); 2962 } 2963 } 2964 2965 static void 2966 _signal_summary_show(struct seq_file *s, struct ptp_ocp *bp, int nr) 2967 { 2968 struct signal_reg __iomem *reg = bp->signal_out[nr]->mem; 2969 struct ptp_ocp_signal *signal = &bp->signal[nr]; 2970 char label[8]; 2971 bool on; 2972 u32 val; 2973 2974 if (!signal) 2975 return; 2976 2977 on = signal->running; 2978 sprintf(label, "GEN%d", nr + 1); 2979 seq_printf(s, "%7s: %s, period:%llu duty:%d%% phase:%llu pol:%d", 2980 label, on ? " ON" : "OFF", 2981 signal->period, signal->duty, signal->phase, 2982 signal->polarity); 2983 2984 val = ioread32(®->enable); 2985 seq_printf(s, " [%x", val); 2986 val = ioread32(®->status); 2987 seq_printf(s, " %x]", val); 2988 2989 seq_printf(s, " start:%llu\n", signal->start); 2990 } 2991 2992 static void 2993 _frequency_summary_show(struct seq_file *s, int nr, 2994 struct frequency_reg __iomem *reg) 2995 { 2996 char label[8]; 2997 bool on; 2998 u32 val; 2999 3000 if (!reg) 3001 return; 3002 3003 sprintf(label, "FREQ%d", nr + 1); 3004 val = ioread32(®->ctrl); 3005 on = val & 1; 3006 val = (val >> 8) & 0xff; 3007 seq_printf(s, "%7s: %s, sec:%u", 3008 label, 3009 on ? " ON" : "OFF", 3010 val); 3011 3012 val = ioread32(®->status); 3013 if (val & FREQ_STATUS_ERROR) 3014 seq_printf(s, ", error"); 3015 if (val & FREQ_STATUS_OVERRUN) 3016 seq_printf(s, ", overrun"); 3017 if (val & FREQ_STATUS_VALID) 3018 seq_printf(s, ", freq %lu Hz", val & FREQ_STATUS_MASK); 3019 seq_printf(s, " reg:%x\n", val); 3020 } 3021 3022 static int 3023 ptp_ocp_summary_show(struct seq_file *s, void *data) 3024 { 3025 struct device *dev = s->private; 3026 struct ptp_system_timestamp sts; 3027 struct ts_reg __iomem *ts_reg; 3028 struct timespec64 ts; 3029 struct ptp_ocp *bp; 3030 u16 sma_val[4][2]; 3031 char *src, *buf; 3032 u32 ctrl, val; 3033 bool on, map; 3034 int i; 3035 3036 buf = (char *)__get_free_page(GFP_KERNEL); 3037 if (!buf) 3038 return -ENOMEM; 3039 3040 bp = dev_get_drvdata(dev); 3041 3042 seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp)); 3043 if (bp->gnss_port != -1) 3044 seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS1", bp->gnss_port); 3045 if (bp->gnss2_port != -1) 3046 seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS2", bp->gnss2_port); 3047 if (bp->mac_port != -1) 3048 seq_printf(s, "%7s: /dev/ttyS%d\n", "MAC", bp->mac_port); 3049 if (bp->nmea_port != -1) 3050 seq_printf(s, "%7s: /dev/ttyS%d\n", "NMEA", bp->nmea_port); 3051 3052 memset(sma_val, 0xff, sizeof(sma_val)); 3053 if (bp->sma_map1) { 3054 u32 reg; 3055 3056 reg = ioread32(&bp->sma_map1->gpio1); 3057 sma_val[0][0] = reg & 0xffff; 3058 sma_val[1][0] = reg >> 16; 3059 3060 reg = ioread32(&bp->sma_map1->gpio2); 3061 sma_val[2][1] = reg & 0xffff; 3062 sma_val[3][1] = reg >> 16; 3063 3064 reg = ioread32(&bp->sma_map2->gpio1); 3065 sma_val[2][0] = reg & 0xffff; 3066 sma_val[3][0] = reg >> 16; 3067 3068 reg = ioread32(&bp->sma_map2->gpio2); 3069 sma_val[0][1] = reg & 0xffff; 3070 sma_val[1][1] = reg >> 16; 3071 } 3072 3073 sma1_show(dev, NULL, buf); 3074 seq_printf(s, " sma1: %04x,%04x %s", 3075 sma_val[0][0], sma_val[0][1], buf); 3076 3077 sma2_show(dev, NULL, buf); 3078 seq_printf(s, " sma2: %04x,%04x %s", 3079 sma_val[1][0], sma_val[1][1], buf); 3080 3081 sma3_show(dev, NULL, buf); 3082 seq_printf(s, " sma3: %04x,%04x %s", 3083 sma_val[2][0], sma_val[2][1], buf); 3084 3085 sma4_show(dev, NULL, buf); 3086 seq_printf(s, " sma4: %04x,%04x %s", 3087 sma_val[3][0], sma_val[3][1], buf); 3088 3089 if (bp->ts0) { 3090 ts_reg = bp->ts0->mem; 3091 on = ioread32(&ts_reg->enable); 3092 src = "GNSS1"; 3093 seq_printf(s, "%7s: %s, src: %s\n", "TS0", 3094 on ? " ON" : "OFF", src); 3095 } 3096 3097 if (bp->ts1) { 3098 ts_reg = bp->ts1->mem; 3099 on = ioread32(&ts_reg->enable); 3100 gpio_input_map(buf, bp, sma_val, 2, NULL); 3101 seq_printf(s, "%7s: %s, src: %s\n", "TS1", 3102 on ? " ON" : "OFF", buf); 3103 } 3104 3105 if (bp->ts2) { 3106 ts_reg = bp->ts2->mem; 3107 on = ioread32(&ts_reg->enable); 3108 gpio_input_map(buf, bp, sma_val, 3, NULL); 3109 seq_printf(s, "%7s: %s, src: %s\n", "TS2", 3110 on ? " ON" : "OFF", buf); 3111 } 3112 3113 if (bp->ts3) { 3114 ts_reg = bp->ts3->mem; 3115 on = ioread32(&ts_reg->enable); 3116 gpio_input_map(buf, bp, sma_val, 6, NULL); 3117 seq_printf(s, "%7s: %s, src: %s\n", "TS3", 3118 on ? " ON" : "OFF", buf); 3119 } 3120 3121 if (bp->ts4) { 3122 ts_reg = bp->ts4->mem; 3123 on = ioread32(&ts_reg->enable); 3124 gpio_input_map(buf, bp, sma_val, 7, NULL); 3125 seq_printf(s, "%7s: %s, src: %s\n", "TS4", 3126 on ? " ON" : "OFF", buf); 3127 } 3128 3129 if (bp->pps) { 3130 ts_reg = bp->pps->mem; 3131 src = "PHC"; 3132 on = ioread32(&ts_reg->enable); 3133 map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP); 3134 seq_printf(s, "%7s: %s, src: %s\n", "TS5", 3135 on && map ? " ON" : "OFF", src); 3136 3137 map = !!(bp->pps_req_map & OCP_REQ_PPS); 3138 seq_printf(s, "%7s: %s, src: %s\n", "PPS", 3139 on && map ? " ON" : "OFF", src); 3140 } 3141 3142 if (bp->fw_cap & OCP_CAP_SIGNAL) 3143 for (i = 0; i < 4; i++) 3144 _signal_summary_show(s, bp, i); 3145 3146 if (bp->fw_cap & OCP_CAP_FREQ) 3147 for (i = 0; i < 4; i++) 3148 _frequency_summary_show(s, i, bp->freq_in[i]); 3149 3150 if (bp->irig_out) { 3151 ctrl = ioread32(&bp->irig_out->ctrl); 3152 on = ctrl & IRIG_M_CTRL_ENABLE; 3153 val = ioread32(&bp->irig_out->status); 3154 gpio_output_map(buf, bp, sma_val, 4); 3155 seq_printf(s, "%7s: %s, error: %d, mode %d, out: %s\n", "IRIG", 3156 on ? " ON" : "OFF", val, (ctrl >> 16), buf); 3157 } 3158 3159 if (bp->irig_in) { 3160 on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE; 3161 val = ioread32(&bp->irig_in->status); 3162 gpio_input_map(buf, bp, sma_val, 4, NULL); 3163 seq_printf(s, "%7s: %s, error: %d, src: %s\n", "IRIG in", 3164 on ? " ON" : "OFF", val, buf); 3165 } 3166 3167 if (bp->dcf_out) { 3168 on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE; 3169 val = ioread32(&bp->dcf_out->status); 3170 gpio_output_map(buf, bp, sma_val, 5); 3171 seq_printf(s, "%7s: %s, error: %d, out: %s\n", "DCF", 3172 on ? " ON" : "OFF", val, buf); 3173 } 3174 3175 if (bp->dcf_in) { 3176 on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE; 3177 val = ioread32(&bp->dcf_in->status); 3178 gpio_input_map(buf, bp, sma_val, 5, NULL); 3179 seq_printf(s, "%7s: %s, error: %d, src: %s\n", "DCF in", 3180 on ? " ON" : "OFF", val, buf); 3181 } 3182 3183 if (bp->nmea_out) { 3184 on = ioread32(&bp->nmea_out->ctrl) & 1; 3185 val = ioread32(&bp->nmea_out->status); 3186 seq_printf(s, "%7s: %s, error: %d\n", "NMEA", 3187 on ? " ON" : "OFF", val); 3188 } 3189 3190 /* compute src for PPS1, used below. */ 3191 if (bp->pps_select) { 3192 val = ioread32(&bp->pps_select->gpio1); 3193 src = &buf[80]; 3194 if (val & 0x01) 3195 gpio_input_map(src, bp, sma_val, 0, NULL); 3196 else if (val & 0x02) 3197 src = "MAC"; 3198 else if (val & 0x04) 3199 src = "GNSS1"; 3200 else 3201 src = "----"; 3202 } else { 3203 src = "?"; 3204 } 3205 3206 /* assumes automatic switchover/selection */ 3207 val = ioread32(&bp->reg->select); 3208 switch (val >> 16) { 3209 case 0: 3210 sprintf(buf, "----"); 3211 break; 3212 case 2: 3213 sprintf(buf, "IRIG"); 3214 break; 3215 case 3: 3216 sprintf(buf, "%s via PPS1", src); 3217 break; 3218 case 6: 3219 sprintf(buf, "DCF"); 3220 break; 3221 default: 3222 strcpy(buf, "unknown"); 3223 break; 3224 } 3225 val = ioread32(&bp->reg->status); 3226 seq_printf(s, "%7s: %s, state: %s\n", "PHC src", buf, 3227 val & OCP_STATUS_IN_SYNC ? "sync" : "unsynced"); 3228 3229 /* reuses PPS1 src from earlier */ 3230 seq_printf(s, "MAC PPS1 src: %s\n", src); 3231 3232 gpio_input_map(buf, bp, sma_val, 1, "GNSS2"); 3233 seq_printf(s, "MAC PPS2 src: %s\n", buf); 3234 3235 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) { 3236 struct timespec64 sys_ts; 3237 s64 pre_ns, post_ns, ns; 3238 3239 pre_ns = timespec64_to_ns(&sts.pre_ts); 3240 post_ns = timespec64_to_ns(&sts.post_ts); 3241 ns = (pre_ns + post_ns) / 2; 3242 ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC; 3243 sys_ts = ns_to_timespec64(ns); 3244 3245 seq_printf(s, "%7s: %lld.%ld == %ptT TAI\n", "PHC", 3246 ts.tv_sec, ts.tv_nsec, &ts); 3247 seq_printf(s, "%7s: %lld.%ld == %ptT UTC offset %d\n", "SYS", 3248 sys_ts.tv_sec, sys_ts.tv_nsec, &sys_ts, 3249 bp->utc_tai_offset); 3250 seq_printf(s, "%7s: PHC:SYS offset: %lld window: %lld\n", "", 3251 timespec64_to_ns(&ts) - ns, 3252 post_ns - pre_ns); 3253 } 3254 3255 free_page((unsigned long)buf); 3256 return 0; 3257 } 3258 DEFINE_SHOW_ATTRIBUTE(ptp_ocp_summary); 3259 3260 static int 3261 ptp_ocp_tod_status_show(struct seq_file *s, void *data) 3262 { 3263 struct device *dev = s->private; 3264 struct ptp_ocp *bp; 3265 u32 val; 3266 int idx; 3267 3268 bp = dev_get_drvdata(dev); 3269 3270 val = ioread32(&bp->tod->ctrl); 3271 if (!(val & TOD_CTRL_ENABLE)) { 3272 seq_printf(s, "TOD Slave disabled\n"); 3273 return 0; 3274 } 3275 seq_printf(s, "TOD Slave enabled, Control Register 0x%08X\n", val); 3276 3277 idx = val & TOD_CTRL_PROTOCOL ? 4 : 0; 3278 idx += (val >> 16) & 3; 3279 seq_printf(s, "Protocol %s\n", ptp_ocp_tod_proto_name(idx)); 3280 3281 idx = (val >> TOD_CTRL_GNSS_SHIFT) & TOD_CTRL_GNSS_MASK; 3282 seq_printf(s, "GNSS %s\n", ptp_ocp_tod_gnss_name(idx)); 3283 3284 val = ioread32(&bp->tod->version); 3285 seq_printf(s, "TOD Version %d.%d.%d\n", 3286 val >> 24, (val >> 16) & 0xff, val & 0xffff); 3287 3288 val = ioread32(&bp->tod->status); 3289 seq_printf(s, "Status register: 0x%08X\n", val); 3290 3291 val = ioread32(&bp->tod->adj_sec); 3292 idx = (val & ~INT_MAX) ? -1 : 1; 3293 idx *= (val & INT_MAX); 3294 seq_printf(s, "Correction seconds: %d\n", idx); 3295 3296 val = ioread32(&bp->tod->utc_status); 3297 seq_printf(s, "UTC status register: 0x%08X\n", val); 3298 seq_printf(s, "UTC offset: %d valid:%d\n", 3299 val & TOD_STATUS_UTC_MASK, val & TOD_STATUS_UTC_VALID ? 1 : 0); 3300 seq_printf(s, "Leap second info valid:%d, Leap second announce %d\n", 3301 val & TOD_STATUS_LEAP_VALID ? 1 : 0, 3302 val & TOD_STATUS_LEAP_ANNOUNCE ? 1 : 0); 3303 3304 val = ioread32(&bp->tod->leap); 3305 seq_printf(s, "Time to next leap second (in sec): %d\n", (s32) val); 3306 3307 return 0; 3308 } 3309 DEFINE_SHOW_ATTRIBUTE(ptp_ocp_tod_status); 3310 3311 static struct dentry *ptp_ocp_debugfs_root; 3312 3313 static void 3314 ptp_ocp_debugfs_add_device(struct ptp_ocp *bp) 3315 { 3316 struct dentry *d; 3317 3318 d = debugfs_create_dir(dev_name(&bp->dev), ptp_ocp_debugfs_root); 3319 bp->debug_root = d; 3320 debugfs_create_file("summary", 0444, bp->debug_root, 3321 &bp->dev, &ptp_ocp_summary_fops); 3322 if (bp->tod) 3323 debugfs_create_file("tod_status", 0444, bp->debug_root, 3324 &bp->dev, &ptp_ocp_tod_status_fops); 3325 } 3326 3327 static void 3328 ptp_ocp_debugfs_remove_device(struct ptp_ocp *bp) 3329 { 3330 debugfs_remove_recursive(bp->debug_root); 3331 } 3332 3333 static void 3334 ptp_ocp_debugfs_init(void) 3335 { 3336 ptp_ocp_debugfs_root = debugfs_create_dir("timecard", NULL); 3337 } 3338 3339 static void 3340 ptp_ocp_debugfs_fini(void) 3341 { 3342 debugfs_remove_recursive(ptp_ocp_debugfs_root); 3343 } 3344 3345 static void 3346 ptp_ocp_dev_release(struct device *dev) 3347 { 3348 struct ptp_ocp *bp = dev_get_drvdata(dev); 3349 3350 mutex_lock(&ptp_ocp_lock); 3351 idr_remove(&ptp_ocp_idr, bp->id); 3352 mutex_unlock(&ptp_ocp_lock); 3353 } 3354 3355 static int 3356 ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) 3357 { 3358 int err; 3359 3360 mutex_lock(&ptp_ocp_lock); 3361 err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL); 3362 mutex_unlock(&ptp_ocp_lock); 3363 if (err < 0) { 3364 dev_err(&pdev->dev, "idr_alloc failed: %d\n", err); 3365 return err; 3366 } 3367 bp->id = err; 3368 3369 bp->ptp_info = ptp_ocp_clock_info; 3370 spin_lock_init(&bp->lock); 3371 bp->gnss_port = -1; 3372 bp->gnss2_port = -1; 3373 bp->mac_port = -1; 3374 bp->nmea_port = -1; 3375 bp->pdev = pdev; 3376 3377 device_initialize(&bp->dev); 3378 dev_set_name(&bp->dev, "ocp%d", bp->id); 3379 bp->dev.class = &timecard_class; 3380 bp->dev.parent = &pdev->dev; 3381 bp->dev.release = ptp_ocp_dev_release; 3382 dev_set_drvdata(&bp->dev, bp); 3383 3384 err = device_add(&bp->dev); 3385 if (err) { 3386 dev_err(&bp->dev, "device add failed: %d\n", err); 3387 goto out; 3388 } 3389 3390 pci_set_drvdata(pdev, bp); 3391 3392 return 0; 3393 3394 out: 3395 ptp_ocp_dev_release(&bp->dev); 3396 put_device(&bp->dev); 3397 return err; 3398 } 3399 3400 static void 3401 ptp_ocp_symlink(struct ptp_ocp *bp, struct device *child, const char *link) 3402 { 3403 struct device *dev = &bp->dev; 3404 3405 if (sysfs_create_link(&dev->kobj, &child->kobj, link)) 3406 dev_err(dev, "%s symlink failed\n", link); 3407 } 3408 3409 static void 3410 ptp_ocp_link_child(struct ptp_ocp *bp, const char *name, const char *link) 3411 { 3412 struct device *dev, *child; 3413 3414 dev = &bp->pdev->dev; 3415 3416 child = device_find_child_by_name(dev, name); 3417 if (!child) { 3418 dev_err(dev, "Could not find device %s\n", name); 3419 return; 3420 } 3421 3422 ptp_ocp_symlink(bp, child, link); 3423 put_device(child); 3424 } 3425 3426 static int 3427 ptp_ocp_complete(struct ptp_ocp *bp) 3428 { 3429 struct pps_device *pps; 3430 char buf[32]; 3431 3432 if (bp->gnss_port != -1) { 3433 sprintf(buf, "ttyS%d", bp->gnss_port); 3434 ptp_ocp_link_child(bp, buf, "ttyGNSS"); 3435 } 3436 if (bp->gnss2_port != -1) { 3437 sprintf(buf, "ttyS%d", bp->gnss2_port); 3438 ptp_ocp_link_child(bp, buf, "ttyGNSS2"); 3439 } 3440 if (bp->mac_port != -1) { 3441 sprintf(buf, "ttyS%d", bp->mac_port); 3442 ptp_ocp_link_child(bp, buf, "ttyMAC"); 3443 } 3444 if (bp->nmea_port != -1) { 3445 sprintf(buf, "ttyS%d", bp->nmea_port); 3446 ptp_ocp_link_child(bp, buf, "ttyNMEA"); 3447 } 3448 sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp)); 3449 ptp_ocp_link_child(bp, buf, "ptp"); 3450 3451 pps = pps_lookup_dev(bp->ptp); 3452 if (pps) 3453 ptp_ocp_symlink(bp, pps->dev, "pps"); 3454 3455 ptp_ocp_debugfs_add_device(bp); 3456 3457 return 0; 3458 } 3459 3460 static void 3461 ptp_ocp_phc_info(struct ptp_ocp *bp) 3462 { 3463 struct timespec64 ts; 3464 u32 version, select; 3465 bool sync; 3466 3467 version = ioread32(&bp->reg->version); 3468 select = ioread32(&bp->reg->select); 3469 dev_info(&bp->pdev->dev, "Version %d.%d.%d, clock %s, device ptp%d\n", 3470 version >> 24, (version >> 16) & 0xff, version & 0xffff, 3471 ptp_ocp_select_name_from_val(ptp_ocp_clock, select >> 16), 3472 ptp_clock_index(bp->ptp)); 3473 3474 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; 3475 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, NULL)) 3476 dev_info(&bp->pdev->dev, "Time: %lld.%ld, %s\n", 3477 ts.tv_sec, ts.tv_nsec, 3478 sync ? "in-sync" : "UNSYNCED"); 3479 } 3480 3481 static void 3482 ptp_ocp_serial_info(struct device *dev, const char *name, int port, int baud) 3483 { 3484 if (port != -1) 3485 dev_info(dev, "%5s: /dev/ttyS%-2d @ %6d\n", name, port, baud); 3486 } 3487 3488 static void 3489 ptp_ocp_info(struct ptp_ocp *bp) 3490 { 3491 static int nmea_baud[] = { 3492 1200, 2400, 4800, 9600, 19200, 38400, 3493 57600, 115200, 230400, 460800, 921600, 3494 1000000, 2000000 3495 }; 3496 struct device *dev = &bp->pdev->dev; 3497 u32 reg; 3498 3499 ptp_ocp_phc_info(bp); 3500 3501 dev_info(dev, "version %x\n", bp->fw_version); 3502 if (bp->fw_version & 0xffff) 3503 dev_info(dev, "regular image, version %d\n", 3504 bp->fw_version & 0xffff); 3505 else 3506 dev_info(dev, "golden image, version %d\n", 3507 bp->fw_version >> 16); 3508 3509 ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port, 115200); 3510 ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port, 115200); 3511 ptp_ocp_serial_info(dev, "MAC", bp->mac_port, 57600); 3512 if (bp->nmea_out && bp->nmea_port != -1) { 3513 int baud = -1; 3514 3515 reg = ioread32(&bp->nmea_out->uart_baud); 3516 if (reg < ARRAY_SIZE(nmea_baud)) 3517 baud = nmea_baud[reg]; 3518 ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port, baud); 3519 } 3520 } 3521 3522 static void 3523 ptp_ocp_detach_sysfs(struct ptp_ocp *bp) 3524 { 3525 struct device *dev = &bp->dev; 3526 3527 sysfs_remove_link(&dev->kobj, "ttyGNSS"); 3528 sysfs_remove_link(&dev->kobj, "ttyMAC"); 3529 sysfs_remove_link(&dev->kobj, "ptp"); 3530 sysfs_remove_link(&dev->kobj, "pps"); 3531 } 3532 3533 static void 3534 ptp_ocp_detach(struct ptp_ocp *bp) 3535 { 3536 int i; 3537 3538 ptp_ocp_debugfs_remove_device(bp); 3539 ptp_ocp_detach_sysfs(bp); 3540 ptp_ocp_attr_group_del(bp); 3541 if (timer_pending(&bp->watchdog)) 3542 del_timer_sync(&bp->watchdog); 3543 if (bp->ts0) 3544 ptp_ocp_unregister_ext(bp->ts0); 3545 if (bp->ts1) 3546 ptp_ocp_unregister_ext(bp->ts1); 3547 if (bp->ts2) 3548 ptp_ocp_unregister_ext(bp->ts2); 3549 if (bp->ts3) 3550 ptp_ocp_unregister_ext(bp->ts3); 3551 if (bp->ts4) 3552 ptp_ocp_unregister_ext(bp->ts4); 3553 if (bp->pps) 3554 ptp_ocp_unregister_ext(bp->pps); 3555 for (i = 0; i < 4; i++) 3556 if (bp->signal_out[i]) 3557 ptp_ocp_unregister_ext(bp->signal_out[i]); 3558 if (bp->gnss_port != -1) 3559 serial8250_unregister_port(bp->gnss_port); 3560 if (bp->gnss2_port != -1) 3561 serial8250_unregister_port(bp->gnss2_port); 3562 if (bp->mac_port != -1) 3563 serial8250_unregister_port(bp->mac_port); 3564 if (bp->nmea_port != -1) 3565 serial8250_unregister_port(bp->nmea_port); 3566 if (bp->spi_flash) 3567 platform_device_unregister(bp->spi_flash); 3568 if (bp->i2c_ctrl) 3569 platform_device_unregister(bp->i2c_ctrl); 3570 if (bp->i2c_clk) 3571 clk_hw_unregister_fixed_rate(bp->i2c_clk); 3572 if (bp->n_irqs) 3573 pci_free_irq_vectors(bp->pdev); 3574 if (bp->ptp) 3575 ptp_clock_unregister(bp->ptp); 3576 kfree(bp->ptp_info.pin_config); 3577 device_unregister(&bp->dev); 3578 } 3579 3580 static int 3581 ptp_ocp_probe(struct pci_dev *pdev, const struct pci_device_id *id) 3582 { 3583 struct devlink *devlink; 3584 struct ptp_ocp *bp; 3585 int err; 3586 3587 devlink = devlink_alloc(&ptp_ocp_devlink_ops, sizeof(*bp), &pdev->dev); 3588 if (!devlink) { 3589 dev_err(&pdev->dev, "devlink_alloc failed\n"); 3590 return -ENOMEM; 3591 } 3592 3593 err = pci_enable_device(pdev); 3594 if (err) { 3595 dev_err(&pdev->dev, "pci_enable_device\n"); 3596 goto out_free; 3597 } 3598 3599 bp = devlink_priv(devlink); 3600 err = ptp_ocp_device_init(bp, pdev); 3601 if (err) 3602 goto out_disable; 3603 3604 /* compat mode. 3605 * Older FPGA firmware only returns 2 irq's. 3606 * allow this - if not all of the IRQ's are returned, skip the 3607 * extra devices and just register the clock. 3608 */ 3609 err = pci_alloc_irq_vectors(pdev, 1, 17, PCI_IRQ_MSI | PCI_IRQ_MSIX); 3610 if (err < 0) { 3611 dev_err(&pdev->dev, "alloc_irq_vectors err: %d\n", err); 3612 goto out; 3613 } 3614 bp->n_irqs = err; 3615 pci_set_master(pdev); 3616 3617 err = ptp_ocp_register_resources(bp, id->driver_data); 3618 if (err) 3619 goto out; 3620 3621 bp->ptp = ptp_clock_register(&bp->ptp_info, &pdev->dev); 3622 if (IS_ERR(bp->ptp)) { 3623 err = PTR_ERR(bp->ptp); 3624 dev_err(&pdev->dev, "ptp_clock_register: %d\n", err); 3625 bp->ptp = NULL; 3626 goto out; 3627 } 3628 3629 err = ptp_ocp_complete(bp); 3630 if (err) 3631 goto out; 3632 3633 ptp_ocp_info(bp); 3634 devlink_register(devlink); 3635 return 0; 3636 3637 out: 3638 ptp_ocp_detach(bp); 3639 pci_set_drvdata(pdev, NULL); 3640 out_disable: 3641 pci_disable_device(pdev); 3642 out_free: 3643 devlink_free(devlink); 3644 return err; 3645 } 3646 3647 static void 3648 ptp_ocp_remove(struct pci_dev *pdev) 3649 { 3650 struct ptp_ocp *bp = pci_get_drvdata(pdev); 3651 struct devlink *devlink = priv_to_devlink(bp); 3652 3653 devlink_unregister(devlink); 3654 ptp_ocp_detach(bp); 3655 pci_set_drvdata(pdev, NULL); 3656 pci_disable_device(pdev); 3657 3658 devlink_free(devlink); 3659 } 3660 3661 static struct pci_driver ptp_ocp_driver = { 3662 .name = KBUILD_MODNAME, 3663 .id_table = ptp_ocp_pcidev_id, 3664 .probe = ptp_ocp_probe, 3665 .remove = ptp_ocp_remove, 3666 }; 3667 3668 static int 3669 ptp_ocp_i2c_notifier_call(struct notifier_block *nb, 3670 unsigned long action, void *data) 3671 { 3672 struct device *dev, *child = data; 3673 struct ptp_ocp *bp; 3674 bool add; 3675 3676 switch (action) { 3677 case BUS_NOTIFY_ADD_DEVICE: 3678 case BUS_NOTIFY_DEL_DEVICE: 3679 add = action == BUS_NOTIFY_ADD_DEVICE; 3680 break; 3681 default: 3682 return 0; 3683 } 3684 3685 if (!i2c_verify_adapter(child)) 3686 return 0; 3687 3688 dev = child; 3689 while ((dev = dev->parent)) 3690 if (dev->driver && !strcmp(dev->driver->name, KBUILD_MODNAME)) 3691 goto found; 3692 return 0; 3693 3694 found: 3695 bp = dev_get_drvdata(dev); 3696 if (add) 3697 ptp_ocp_symlink(bp, child, "i2c"); 3698 else 3699 sysfs_remove_link(&bp->dev.kobj, "i2c"); 3700 3701 return 0; 3702 } 3703 3704 static struct notifier_block ptp_ocp_i2c_notifier = { 3705 .notifier_call = ptp_ocp_i2c_notifier_call, 3706 }; 3707 3708 static int __init 3709 ptp_ocp_init(void) 3710 { 3711 const char *what; 3712 int err; 3713 3714 ptp_ocp_debugfs_init(); 3715 3716 what = "timecard class"; 3717 err = class_register(&timecard_class); 3718 if (err) 3719 goto out; 3720 3721 what = "i2c notifier"; 3722 err = bus_register_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 3723 if (err) 3724 goto out_notifier; 3725 3726 what = "ptp_ocp driver"; 3727 err = pci_register_driver(&ptp_ocp_driver); 3728 if (err) 3729 goto out_register; 3730 3731 return 0; 3732 3733 out_register: 3734 bus_unregister_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 3735 out_notifier: 3736 class_unregister(&timecard_class); 3737 out: 3738 ptp_ocp_debugfs_fini(); 3739 pr_err(KBUILD_MODNAME ": failed to register %s: %d\n", what, err); 3740 return err; 3741 } 3742 3743 static void __exit 3744 ptp_ocp_fini(void) 3745 { 3746 bus_unregister_notifier(&i2c_bus_type, &ptp_ocp_i2c_notifier); 3747 pci_unregister_driver(&ptp_ocp_driver); 3748 class_unregister(&timecard_class); 3749 ptp_ocp_debugfs_fini(); 3750 } 3751 3752 module_init(ptp_ocp_init); 3753 module_exit(ptp_ocp_fini); 3754 3755 MODULE_DESCRIPTION("OpenCompute TimeCard driver"); 3756 MODULE_LICENSE("GPL v2"); 3757