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