Lines Matching refs:bp

199 	struct ptp_ocp		*bp;  member
253 int (*setup)(struct ptp_ocp *bp, struct ocp_resource *r);
259 static int ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r);
260 static int ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r);
261 static int ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r);
262 static int ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r);
263 static int ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r);
264 static int ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r);
268 #define bp_assign_entry(bp, res, val) ({ \ argument
269 uintptr_t addr = (uintptr_t)(bp) + (res)->bp_offset; \
526 __ptp_ocp_gettime_locked(struct ptp_ocp *bp, struct timespec64 *ts, in __ptp_ocp_gettime_locked() argument
535 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_gettime_locked()
538 ctrl = ioread32(&bp->reg->ctrl); in __ptp_ocp_gettime_locked()
544 if (sts && bp->ts_window_adjust) { in __ptp_ocp_gettime_locked()
547 sts->post_ts = ns_to_timespec64(ns - bp->ts_window_adjust); in __ptp_ocp_gettime_locked()
550 time_ns = ioread32(&bp->reg->time_ns); in __ptp_ocp_gettime_locked()
551 time_sec = ioread32(&bp->reg->time_sec); in __ptp_ocp_gettime_locked()
563 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_gettimex() local
567 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_gettimex()
568 err = __ptp_ocp_gettime_locked(bp, ts, sts); in ptp_ocp_gettimex()
569 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_gettimex()
575 __ptp_ocp_settime_locked(struct ptp_ocp *bp, const struct timespec64 *ts) in __ptp_ocp_settime_locked() argument
583 select = ioread32(&bp->reg->select); in __ptp_ocp_settime_locked()
584 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); in __ptp_ocp_settime_locked()
586 iowrite32(time_ns, &bp->reg->adjust_ns); in __ptp_ocp_settime_locked()
587 iowrite32(time_sec, &bp->reg->adjust_sec); in __ptp_ocp_settime_locked()
590 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_settime_locked()
593 iowrite32(select >> 16, &bp->reg->select); in __ptp_ocp_settime_locked()
599 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_settime() local
602 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_settime()
603 __ptp_ocp_settime_locked(bp, ts); in ptp_ocp_settime()
604 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_settime()
610 __ptp_ocp_adjtime_locked(struct ptp_ocp *bp, u64 adj_val) in __ptp_ocp_adjtime_locked() argument
614 select = ioread32(&bp->reg->select); in __ptp_ocp_adjtime_locked()
615 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); in __ptp_ocp_adjtime_locked()
617 iowrite32(adj_val, &bp->reg->offset_ns); in __ptp_ocp_adjtime_locked()
618 iowrite32(adj_val & 0x7f, &bp->reg->offset_window_ns); in __ptp_ocp_adjtime_locked()
621 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_adjtime_locked()
624 iowrite32(select >> 16, &bp->reg->select); in __ptp_ocp_adjtime_locked()
630 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_adjtime() local
637 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_adjtime()
638 __ptp_ocp_adjtime_locked(bp, sign | adj_ns); in ptp_ocp_adjtime()
639 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_adjtime()
663 struct ptp_ocp *bp = container_of(ptp_info, struct ptp_ocp, ptp_info); in ptp_ocp_enable() local
673 ext = bp->ts0; in ptp_ocp_enable()
676 ext = bp->ts1; in ptp_ocp_enable()
679 ext = bp->ts2; in ptp_ocp_enable()
682 ext = bp->pps; in ptp_ocp_enable()
688 ext = bp->pps; in ptp_ocp_enable()
725 __ptp_ocp_clear_drift_locked(struct ptp_ocp *bp) in __ptp_ocp_clear_drift_locked() argument
729 select = ioread32(&bp->reg->select); in __ptp_ocp_clear_drift_locked()
730 iowrite32(OCP_SELECT_CLK_REG, &bp->reg->select); in __ptp_ocp_clear_drift_locked()
732 iowrite32(0, &bp->reg->drift_ns); in __ptp_ocp_clear_drift_locked()
735 iowrite32(ctrl, &bp->reg->ctrl); in __ptp_ocp_clear_drift_locked()
738 iowrite32(select >> 16, &bp->reg->select); in __ptp_ocp_clear_drift_locked()
744 struct ptp_ocp *bp = from_timer(bp, t, watchdog); in ptp_ocp_watchdog() local
748 status = ioread32(&bp->pps_to_clk->status); in ptp_ocp_watchdog()
751 iowrite32(status, &bp->pps_to_clk->status); in ptp_ocp_watchdog()
752 if (!bp->gnss_lost) { in ptp_ocp_watchdog()
753 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_watchdog()
754 __ptp_ocp_clear_drift_locked(bp); in ptp_ocp_watchdog()
755 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_watchdog()
756 bp->gnss_lost = ktime_get_real_seconds(); in ptp_ocp_watchdog()
759 } else if (bp->gnss_lost) { in ptp_ocp_watchdog()
760 bp->gnss_lost = 0; in ptp_ocp_watchdog()
763 mod_timer(&bp->watchdog, jiffies + HZ); in ptp_ocp_watchdog()
767 ptp_ocp_estimate_pci_timing(struct ptp_ocp *bp) in ptp_ocp_estimate_pci_timing() argument
773 ctrl = ioread32(&bp->reg->ctrl); in ptp_ocp_estimate_pci_timing()
776 iowrite32(ctrl, &bp->reg->ctrl); in ptp_ocp_estimate_pci_timing()
780 ctrl = ioread32(&bp->reg->ctrl); in ptp_ocp_estimate_pci_timing()
785 bp->ts_window_adjust = (delay >> 5) * 3; in ptp_ocp_estimate_pci_timing()
789 ptp_ocp_init_clock(struct ptp_ocp *bp) in ptp_ocp_init_clock() argument
796 iowrite32(ctrl, &bp->reg->ctrl); in ptp_ocp_init_clock()
800 iowrite32(0x2000, &bp->reg->servo_offset_p); in ptp_ocp_init_clock()
801 iowrite32(0x1000, &bp->reg->servo_offset_i); in ptp_ocp_init_clock()
802 iowrite32(0, &bp->reg->servo_drift_p); in ptp_ocp_init_clock()
803 iowrite32(0, &bp->reg->servo_drift_i); in ptp_ocp_init_clock()
807 iowrite32(ctrl, &bp->reg->ctrl); in ptp_ocp_init_clock()
809 if ((ioread32(&bp->reg->ctrl) & OCP_CTRL_ENABLE) == 0) { in ptp_ocp_init_clock()
810 dev_err(&bp->pdev->dev, "clock not enabled\n"); in ptp_ocp_init_clock()
814 ptp_ocp_estimate_pci_timing(bp); in ptp_ocp_init_clock()
816 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; in ptp_ocp_init_clock()
819 ptp_ocp_settime(&bp->ptp_info, &ts); in ptp_ocp_init_clock()
823 if (bp->pps_to_clk) { in ptp_ocp_init_clock()
824 timer_setup(&bp->watchdog, ptp_ocp_watchdog, 0); in ptp_ocp_init_clock()
825 mod_timer(&bp->watchdog, jiffies + HZ); in ptp_ocp_init_clock()
832 ptp_ocp_utc_distribute(struct ptp_ocp *bp, u32 val) in ptp_ocp_utc_distribute() argument
836 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_utc_distribute()
838 bp->utc_tai_offset = val; in ptp_ocp_utc_distribute()
840 if (bp->irig_out) in ptp_ocp_utc_distribute()
841 iowrite32(val, &bp->irig_out->adj_sec); in ptp_ocp_utc_distribute()
842 if (bp->dcf_out) in ptp_ocp_utc_distribute()
843 iowrite32(val, &bp->dcf_out->adj_sec); in ptp_ocp_utc_distribute()
844 if (bp->nmea_out) in ptp_ocp_utc_distribute()
845 iowrite32(val, &bp->nmea_out->adj_sec); in ptp_ocp_utc_distribute()
847 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_utc_distribute()
851 ptp_ocp_tod_init(struct ptp_ocp *bp) in ptp_ocp_tod_init() argument
855 ctrl = ioread32(&bp->tod->ctrl); in ptp_ocp_tod_init()
858 iowrite32(ctrl, &bp->tod->ctrl); in ptp_ocp_tod_init()
860 reg = ioread32(&bp->tod->utc_status); in ptp_ocp_tod_init()
862 ptp_ocp_utc_distribute(bp, reg & TOD_STATUS_UTC_MASK); in ptp_ocp_tod_init()
866 ptp_ocp_tod_info(struct ptp_ocp *bp) in ptp_ocp_tod_info() argument
878 version = ioread32(&bp->tod->version); in ptp_ocp_tod_info()
879 dev_info(&bp->pdev->dev, "TOD Version %d.%d.%d\n", in ptp_ocp_tod_info()
882 ctrl = ioread32(&bp->tod->ctrl); in ptp_ocp_tod_info()
885 dev_info(&bp->pdev->dev, "control: %x\n", ctrl); in ptp_ocp_tod_info()
886 dev_info(&bp->pdev->dev, "TOD Protocol %s %s\n", proto_name[idx], in ptp_ocp_tod_info()
891 dev_info(&bp->pdev->dev, "GNSS %s\n", gnss_name[idx]); in ptp_ocp_tod_info()
893 reg = ioread32(&bp->tod->status); in ptp_ocp_tod_info()
894 dev_info(&bp->pdev->dev, "status: %x\n", reg); in ptp_ocp_tod_info()
896 reg = ioread32(&bp->tod->adj_sec); in ptp_ocp_tod_info()
897 dev_info(&bp->pdev->dev, "correction: %d\n", reg); in ptp_ocp_tod_info()
899 reg = ioread32(&bp->tod->utc_status); in ptp_ocp_tod_info()
900 dev_info(&bp->pdev->dev, "utc_status: %x\n", reg); in ptp_ocp_tod_info()
901 dev_info(&bp->pdev->dev, "utc_offset: %d valid:%d leap_valid:%d\n", in ptp_ocp_tod_info()
946 ptp_ocp_get_serial_number(struct ptp_ocp *bp) in ptp_ocp_get_serial_number() argument
952 if (!bp->i2c_ctrl) in ptp_ocp_get_serial_number()
955 dev = device_find_child(&bp->i2c_ctrl->dev, NULL, ptp_ocp_firstchild); in ptp_ocp_get_serial_number()
957 dev_err(&bp->pdev->dev, "Can't find I2C adapter\n"); in ptp_ocp_get_serial_number()
963 dev_err(&bp->pdev->dev, "device '%s' isn't an I2C adapter\n", in ptp_ocp_get_serial_number()
968 err = ptp_ocp_read_i2c(adap, 0x58, 0x9A, 6, bp->serial); in ptp_ocp_get_serial_number()
970 dev_err(&bp->pdev->dev, "could not read eeprom: %d\n", err); in ptp_ocp_get_serial_number()
974 bp->has_serial = true; in ptp_ocp_get_serial_number()
981 ptp_ocp_find_flash(struct ptp_ocp *bp) in ptp_ocp_find_flash() argument
986 dev = &bp->spi_flash->dev; in ptp_ocp_find_flash()
1004 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_flash() local
1011 base = bp->flash_start; in ptp_ocp_devlink_flash()
1043 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_flash_update() local
1048 dev = ptp_ocp_find_flash(bp); in ptp_ocp_devlink_flash_update()
1050 dev_err(&bp->pdev->dev, "Can't find Flash SPI adapter\n"); in ptp_ocp_devlink_flash_update()
1070 struct ptp_ocp *bp = devlink_priv(devlink); in ptp_ocp_devlink_info_get() local
1078 if (bp->image) { in ptp_ocp_devlink_info_get()
1079 u32 ver = ioread32(&bp->image->version); in ptp_ocp_devlink_info_get()
1096 if (!bp->has_serial) in ptp_ocp_devlink_info_get()
1097 ptp_ocp_get_serial_number(bp); in ptp_ocp_devlink_info_get()
1099 if (bp->has_serial) { in ptp_ocp_devlink_info_get()
1100 sprintf(buf, "%pM", bp->serial); in ptp_ocp_devlink_info_get()
1115 __ptp_ocp_get_mem(struct ptp_ocp *bp, unsigned long start, int size) in __ptp_ocp_get_mem() argument
1119 return devm_ioremap_resource(&bp->pdev->dev, &res); in __ptp_ocp_get_mem()
1123 ptp_ocp_get_mem(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_get_mem() argument
1127 start = pci_resource_start(bp->pdev, 0) + r->offset; in ptp_ocp_get_mem()
1128 return __ptp_ocp_get_mem(bp, start, r->size); in ptp_ocp_get_mem()
1146 ptp_ocp_register_spi(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_spi() argument
1149 struct pci_dev *pdev = bp->pdev; in ptp_ocp_register_spi()
1169 bp_assign_entry(bp, r, p); in ptp_ocp_register_spi()
1192 ptp_ocp_register_i2c(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_i2c() argument
1194 struct pci_dev *pdev = bp->pdev; in ptp_ocp_register_i2c()
1202 id = pci_dev_id(bp->pdev); in ptp_ocp_register_i2c()
1209 bp->i2c_clk = clk; in ptp_ocp_register_i2c()
1213 p = ptp_ocp_i2c_bus(bp->pdev, r, id); in ptp_ocp_register_i2c()
1217 bp_assign_entry(bp, r, p); in ptp_ocp_register_i2c()
1230 if (ext == ext->bp->pps) { in ptp_ocp_ts_irq()
1231 if (ext->bp->pps_req_map & OCP_REQ_PPS) { in ptp_ocp_ts_irq()
1233 ptp_clock_event(ext->bp->ptp, &ev); in ptp_ocp_ts_irq()
1236 if ((ext->bp->pps_req_map & ~OCP_REQ_PPS) == 0) in ptp_ocp_ts_irq()
1248 ptp_clock_event(ext->bp->ptp, &ev); in ptp_ocp_ts_irq()
1261 struct ptp_ocp *bp = ext->bp; in ptp_ocp_ts_enable() local
1263 if (ext == bp->pps) { in ptp_ocp_ts_enable()
1264 u32 old_map = bp->pps_req_map; in ptp_ocp_ts_enable()
1267 bp->pps_req_map |= req; in ptp_ocp_ts_enable()
1269 bp->pps_req_map &= ~req; in ptp_ocp_ts_enable()
1272 if ((!!old_map ^ !!bp->pps_req_map) == 0) in ptp_ocp_ts_enable()
1292 pci_free_irq(ext->bp->pdev, ext->irq_vec, ext); in ptp_ocp_unregister_ext()
1297 ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_ext() argument
1299 struct pci_dev *pdev = bp->pdev; in ptp_ocp_register_ext()
1307 ext->mem = ptp_ocp_get_mem(bp, r); in ptp_ocp_register_ext()
1313 ext->bp = bp; in ptp_ocp_register_ext()
1318 ext, "ocp%d.%s", bp->id, r->name); in ptp_ocp_register_ext()
1324 bp_assign_entry(bp, r, ext); in ptp_ocp_register_ext()
1334 ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_serial_line() argument
1336 struct pci_dev *pdev = bp->pdev; in ptp_ocp_serial_line()
1356 ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_serial() argument
1360 port = ptp_ocp_serial_line(bp, r); in ptp_ocp_register_serial()
1364 bp_assign_entry(bp, r, port); in ptp_ocp_register_serial()
1370 ptp_ocp_register_mem(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_register_mem() argument
1374 mem = ptp_ocp_get_mem(bp, r); in ptp_ocp_register_mem()
1378 bp_assign_entry(bp, r, mem); in ptp_ocp_register_mem()
1384 ptp_ocp_nmea_out_init(struct ptp_ocp *bp) in ptp_ocp_nmea_out_init() argument
1386 if (!bp->nmea_out) in ptp_ocp_nmea_out_init()
1389 iowrite32(0, &bp->nmea_out->ctrl); /* disable */ in ptp_ocp_nmea_out_init()
1390 iowrite32(7, &bp->nmea_out->uart_baud); /* 115200 */ in ptp_ocp_nmea_out_init()
1391 iowrite32(1, &bp->nmea_out->ctrl); /* enable */ in ptp_ocp_nmea_out_init()
1396 ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_fb_board_init() argument
1398 bp->flash_start = 1024 * 4096; in ptp_ocp_fb_board_init()
1400 ptp_ocp_tod_init(bp); in ptp_ocp_fb_board_init()
1401 ptp_ocp_nmea_out_init(bp); in ptp_ocp_fb_board_init()
1403 return ptp_ocp_init_clock(bp); in ptp_ocp_fb_board_init()
1407 ptp_ocp_allow_irq(struct ptp_ocp *bp, struct ocp_resource *r) in ptp_ocp_allow_irq() argument
1409 bool allow = !r->irq_vec || r->irq_vec < bp->n_irqs; in ptp_ocp_allow_irq()
1412 dev_err(&bp->pdev->dev, "irq %d out of range, skipping %s\n", in ptp_ocp_allow_irq()
1418 ptp_ocp_register_resources(struct ptp_ocp *bp, kernel_ulong_t driver_data) in ptp_ocp_register_resources() argument
1425 if (!ptp_ocp_allow_irq(bp, r)) in ptp_ocp_register_resources()
1427 err = r->setup(bp, r); in ptp_ocp_register_resources()
1429 dev_err(&bp->pdev->dev, in ptp_ocp_register_resources()
1454 ptp_ocp_irig_out(struct ptp_ocp *bp, bool enable) in ptp_ocp_irig_out() argument
1456 return ptp_ocp_enable_fpga(&bp->irig_out->ctrl, in ptp_ocp_irig_out()
1461 ptp_ocp_irig_in(struct ptp_ocp *bp, bool enable) in ptp_ocp_irig_in() argument
1463 return ptp_ocp_enable_fpga(&bp->irig_in->ctrl, in ptp_ocp_irig_in()
1468 ptp_ocp_dcf_out(struct ptp_ocp *bp, bool enable) in ptp_ocp_dcf_out() argument
1470 return ptp_ocp_enable_fpga(&bp->dcf_out->ctrl, in ptp_ocp_dcf_out()
1475 ptp_ocp_dcf_in(struct ptp_ocp *bp, bool enable) in ptp_ocp_dcf_in() argument
1477 return ptp_ocp_enable_fpga(&bp->dcf_in->ctrl, in ptp_ocp_dcf_in()
1482 __handle_signal_outputs(struct ptp_ocp *bp, u32 val) in __handle_signal_outputs() argument
1484 ptp_ocp_irig_out(bp, val & 0x00100010); in __handle_signal_outputs()
1485 ptp_ocp_dcf_out(bp, val & 0x00200020); in __handle_signal_outputs()
1489 __handle_signal_inputs(struct ptp_ocp *bp, u32 val) in __handle_signal_inputs() argument
1491 ptp_ocp_irig_in(bp, val & 0x00100010); in __handle_signal_inputs()
1492 ptp_ocp_dcf_in(bp, val & 0x00200020); in __handle_signal_inputs()
1609 ptp_ocp_sma_show(struct ptp_ocp *bp, int sma_nr, u32 val, char *buf, in ptp_ocp_sma_show() argument
1623 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma1_show() local
1626 val = ioread32(&bp->sma->gpio1) & 0x3f; in sma1_show()
1627 return ptp_ocp_sma_show(bp, 1, val, buf, ptp_ocp_sma_in[0].name); in sma1_show()
1633 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma2_show() local
1636 val = (ioread32(&bp->sma->gpio1) >> 16) & 0x3f; in sma2_show()
1637 return ptp_ocp_sma_show(bp, 2, val, buf, NULL); in sma2_show()
1643 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma3_show() local
1646 val = ioread32(&bp->sma->gpio2) & 0x3f; in sma3_show()
1647 return ptp_ocp_sma_show(bp, 3, val, buf, NULL); in sma3_show()
1653 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma4_show() local
1656 val = (ioread32(&bp->sma->gpio2) >> 16) & 0x3f; in sma4_show()
1657 return ptp_ocp_sma_show(bp, 4, val, buf, NULL); in sma4_show()
1661 ptp_ocp_sma_store_output(struct ptp_ocp *bp, u32 val, u32 shift) in ptp_ocp_sma_store_output() argument
1668 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_sma_store_output()
1670 gpio = ioread32(&bp->sma->gpio2); in ptp_ocp_sma_store_output()
1673 __handle_signal_outputs(bp, gpio); in ptp_ocp_sma_store_output()
1675 iowrite32(gpio, &bp->sma->gpio2); in ptp_ocp_sma_store_output()
1677 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_sma_store_output()
1681 ptp_ocp_sma_store_inputs(struct ptp_ocp *bp, u32 val, u32 shift) in ptp_ocp_sma_store_inputs() argument
1688 spin_lock_irqsave(&bp->lock, flags); in ptp_ocp_sma_store_inputs()
1690 gpio = ioread32(&bp->sma->gpio1); in ptp_ocp_sma_store_inputs()
1693 __handle_signal_inputs(bp, gpio); in ptp_ocp_sma_store_inputs()
1695 iowrite32(gpio, &bp->sma->gpio1); in ptp_ocp_sma_store_inputs()
1697 spin_unlock_irqrestore(&bp->lock, flags); in ptp_ocp_sma_store_inputs()
1701 ptp_ocp_sma_store(struct ptp_ocp *bp, const char *buf, int sma_nr, u32 shift) in ptp_ocp_sma_store() argument
1721 ptp_ocp_sma_store_inputs(bp, val, shift); in ptp_ocp_sma_store()
1723 ptp_ocp_sma_store_output(bp, val, shift); in ptp_ocp_sma_store()
1732 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma1_store() local
1735 err = ptp_ocp_sma_store(bp, buf, 1, 0); in sma1_store()
1743 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma2_store() local
1746 err = ptp_ocp_sma_store(bp, buf, 2, 16); in sma2_store()
1754 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma3_store() local
1757 err = ptp_ocp_sma_store(bp, buf, 3, 0); in sma3_store()
1765 struct ptp_ocp *bp = dev_get_drvdata(dev); in sma4_store() local
1768 err = ptp_ocp_sma_store(bp, buf, 4, 16); in sma4_store()
1795 struct ptp_ocp *bp = dev_get_drvdata(dev); in serialnum_show() local
1797 if (!bp->has_serial) in serialnum_show()
1798 ptp_ocp_get_serial_number(bp); in serialnum_show()
1800 return sysfs_emit(buf, "%pM\n", bp->serial); in serialnum_show()
1807 struct ptp_ocp *bp = dev_get_drvdata(dev); in gnss_sync_show() local
1810 if (bp->gnss_lost) in gnss_sync_show()
1811 ret = sysfs_emit(buf, "LOST @ %ptT\n", &bp->gnss_lost); in gnss_sync_show()
1823 struct ptp_ocp *bp = dev_get_drvdata(dev); in utc_tai_offset_show() local
1825 return sysfs_emit(buf, "%d\n", bp->utc_tai_offset); in utc_tai_offset_show()
1833 struct ptp_ocp *bp = dev_get_drvdata(dev); in utc_tai_offset_store() local
1841 ptp_ocp_utc_distribute(bp, val); in utc_tai_offset_store()
1851 struct ptp_ocp *bp = dev_get_drvdata(dev); in ts_window_adjust_show() local
1853 return sysfs_emit(buf, "%d\n", bp->ts_window_adjust); in ts_window_adjust_show()
1861 struct ptp_ocp *bp = dev_get_drvdata(dev); in ts_window_adjust_store() local
1869 bp->ts_window_adjust = val; in ts_window_adjust_store()
1878 struct ptp_ocp *bp = dev_get_drvdata(dev); in irig_b_mode_show() local
1881 val = ioread32(&bp->irig_out->ctrl); in irig_b_mode_show()
1891 struct ptp_ocp *bp = dev_get_drvdata(dev); in irig_b_mode_store() local
1905 spin_lock_irqsave(&bp->lock, flags); in irig_b_mode_store()
1906 iowrite32(0, &bp->irig_out->ctrl); /* disable */ in irig_b_mode_store()
1907 iowrite32(reg, &bp->irig_out->ctrl); /* change mode */ in irig_b_mode_store()
1908 iowrite32(reg | IRIG_M_CTRL_ENABLE, &bp->irig_out->ctrl); in irig_b_mode_store()
1909 spin_unlock_irqrestore(&bp->lock, flags); in irig_b_mode_store()
1918 struct ptp_ocp *bp = dev_get_drvdata(dev); in clock_source_show() local
1922 select = ioread32(&bp->reg->select); in clock_source_show()
1932 struct ptp_ocp *bp = dev_get_drvdata(dev); in clock_source_store() local
1940 spin_lock_irqsave(&bp->lock, flags); in clock_source_store()
1941 iowrite32(val, &bp->reg->select); in clock_source_store()
1942 spin_unlock_irqrestore(&bp->lock, flags); in clock_source_store()
2009 struct ptp_ocp *bp; in ptp_ocp_summary_show() local
2018 bp = dev_get_drvdata(dev); in ptp_ocp_summary_show()
2019 sma_in = ioread32(&bp->sma->gpio1); in ptp_ocp_summary_show()
2020 sma_out = ioread32(&bp->sma->gpio2); in ptp_ocp_summary_show()
2022 seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp)); in ptp_ocp_summary_show()
2036 if (bp->ts0) { in ptp_ocp_summary_show()
2037 ts_reg = bp->ts0->mem; in ptp_ocp_summary_show()
2044 if (bp->ts1) { in ptp_ocp_summary_show()
2045 ts_reg = bp->ts1->mem; in ptp_ocp_summary_show()
2052 if (bp->ts2) { in ptp_ocp_summary_show()
2053 ts_reg = bp->ts2->mem; in ptp_ocp_summary_show()
2060 if (bp->pps) { in ptp_ocp_summary_show()
2061 ts_reg = bp->pps->mem; in ptp_ocp_summary_show()
2064 map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP); in ptp_ocp_summary_show()
2068 map = !!(bp->pps_req_map & OCP_REQ_PPS); in ptp_ocp_summary_show()
2073 if (bp->irig_out) { in ptp_ocp_summary_show()
2074 ctrl = ioread32(&bp->irig_out->ctrl); in ptp_ocp_summary_show()
2076 val = ioread32(&bp->irig_out->status); in ptp_ocp_summary_show()
2082 if (bp->irig_in) { in ptp_ocp_summary_show()
2083 on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE; in ptp_ocp_summary_show()
2084 val = ioread32(&bp->irig_in->status); in ptp_ocp_summary_show()
2090 if (bp->dcf_out) { in ptp_ocp_summary_show()
2091 on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE; in ptp_ocp_summary_show()
2092 val = ioread32(&bp->dcf_out->status); in ptp_ocp_summary_show()
2098 if (bp->dcf_in) { in ptp_ocp_summary_show()
2099 on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE; in ptp_ocp_summary_show()
2100 val = ioread32(&bp->dcf_in->status); in ptp_ocp_summary_show()
2106 if (bp->nmea_out) { in ptp_ocp_summary_show()
2107 on = ioread32(&bp->nmea_out->ctrl) & 1; in ptp_ocp_summary_show()
2108 val = ioread32(&bp->nmea_out->status); in ptp_ocp_summary_show()
2114 if (bp->pps_select) { in ptp_ocp_summary_show()
2115 val = ioread32(&bp->pps_select->gpio1); in ptp_ocp_summary_show()
2129 val = ioread32(&bp->reg->select); in ptp_ocp_summary_show()
2147 val = ioread32(&bp->reg->status); in ptp_ocp_summary_show()
2157 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) { in ptp_ocp_summary_show()
2164 ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC; in ptp_ocp_summary_show()
2171 bp->utc_tai_offset); in ptp_ocp_summary_show()
2185 ptp_ocp_debugfs_add_device(struct ptp_ocp *bp) in ptp_ocp_debugfs_add_device() argument
2189 d = debugfs_create_dir(dev_name(&bp->dev), ptp_ocp_debugfs_root); in ptp_ocp_debugfs_add_device()
2190 bp->debug_root = d; in ptp_ocp_debugfs_add_device()
2191 debugfs_create_file("summary", 0444, bp->debug_root, in ptp_ocp_debugfs_add_device()
2192 &bp->dev, &ptp_ocp_summary_fops); in ptp_ocp_debugfs_add_device()
2196 ptp_ocp_debugfs_remove_device(struct ptp_ocp *bp) in ptp_ocp_debugfs_remove_device() argument
2198 debugfs_remove_recursive(bp->debug_root); in ptp_ocp_debugfs_remove_device()
2216 struct ptp_ocp *bp = dev_get_drvdata(dev); in ptp_ocp_dev_release() local
2219 idr_remove(&ptp_ocp_idr, bp->id); in ptp_ocp_dev_release()
2224 ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) in ptp_ocp_device_init() argument
2229 err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL); in ptp_ocp_device_init()
2235 bp->id = err; in ptp_ocp_device_init()
2237 bp->ptp_info = ptp_ocp_clock_info; in ptp_ocp_device_init()
2238 spin_lock_init(&bp->lock); in ptp_ocp_device_init()
2239 bp->gnss_port = -1; in ptp_ocp_device_init()
2240 bp->gnss2_port = -1; in ptp_ocp_device_init()
2241 bp->mac_port = -1; in ptp_ocp_device_init()
2242 bp->nmea_port = -1; in ptp_ocp_device_init()
2243 bp->pdev = pdev; in ptp_ocp_device_init()
2245 device_initialize(&bp->dev); in ptp_ocp_device_init()
2246 dev_set_name(&bp->dev, "ocp%d", bp->id); in ptp_ocp_device_init()
2247 bp->dev.class = &timecard_class; in ptp_ocp_device_init()
2248 bp->dev.parent = &pdev->dev; in ptp_ocp_device_init()
2249 bp->dev.release = ptp_ocp_dev_release; in ptp_ocp_device_init()
2250 dev_set_drvdata(&bp->dev, bp); in ptp_ocp_device_init()
2252 err = device_add(&bp->dev); in ptp_ocp_device_init()
2254 dev_err(&bp->dev, "device add failed: %d\n", err); in ptp_ocp_device_init()
2258 pci_set_drvdata(pdev, bp); in ptp_ocp_device_init()
2263 ptp_ocp_dev_release(&bp->dev); in ptp_ocp_device_init()
2264 put_device(&bp->dev); in ptp_ocp_device_init()
2269 ptp_ocp_symlink(struct ptp_ocp *bp, struct device *child, const char *link) in ptp_ocp_symlink() argument
2271 struct device *dev = &bp->dev; in ptp_ocp_symlink()
2278 ptp_ocp_link_child(struct ptp_ocp *bp, const char *name, const char *link) in ptp_ocp_link_child() argument
2282 dev = &bp->pdev->dev; in ptp_ocp_link_child()
2290 ptp_ocp_symlink(bp, child, link); in ptp_ocp_link_child()
2295 ptp_ocp_complete(struct ptp_ocp *bp) in ptp_ocp_complete() argument
2300 if (bp->gnss_port != -1) { in ptp_ocp_complete()
2301 sprintf(buf, "ttyS%d", bp->gnss_port); in ptp_ocp_complete()
2302 ptp_ocp_link_child(bp, buf, "ttyGNSS"); in ptp_ocp_complete()
2304 if (bp->gnss2_port != -1) { in ptp_ocp_complete()
2305 sprintf(buf, "ttyS%d", bp->gnss2_port); in ptp_ocp_complete()
2306 ptp_ocp_link_child(bp, buf, "ttyGNSS2"); in ptp_ocp_complete()
2308 if (bp->mac_port != -1) { in ptp_ocp_complete()
2309 sprintf(buf, "ttyS%d", bp->mac_port); in ptp_ocp_complete()
2310 ptp_ocp_link_child(bp, buf, "ttyMAC"); in ptp_ocp_complete()
2312 if (bp->nmea_port != -1) { in ptp_ocp_complete()
2313 sprintf(buf, "ttyS%d", bp->nmea_port); in ptp_ocp_complete()
2314 ptp_ocp_link_child(bp, buf, "ttyNMEA"); in ptp_ocp_complete()
2316 sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp)); in ptp_ocp_complete()
2317 ptp_ocp_link_child(bp, buf, "ptp"); in ptp_ocp_complete()
2319 pps = pps_lookup_dev(bp->ptp); in ptp_ocp_complete()
2321 ptp_ocp_symlink(bp, pps->dev, "pps"); in ptp_ocp_complete()
2323 if (device_add_groups(&bp->dev, timecard_groups)) in ptp_ocp_complete()
2326 ptp_ocp_debugfs_add_device(bp); in ptp_ocp_complete()
2332 ptp_ocp_phc_info(struct ptp_ocp *bp) in ptp_ocp_phc_info() argument
2338 version = ioread32(&bp->reg->version); in ptp_ocp_phc_info()
2339 select = ioread32(&bp->reg->select); in ptp_ocp_phc_info()
2340 dev_info(&bp->pdev->dev, "Version %d.%d.%d, clock %s, device ptp%d\n", in ptp_ocp_phc_info()
2343 ptp_clock_index(bp->ptp)); in ptp_ocp_phc_info()
2345 sync = ioread32(&bp->reg->status) & OCP_STATUS_IN_SYNC; in ptp_ocp_phc_info()
2346 if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, NULL)) in ptp_ocp_phc_info()
2347 dev_info(&bp->pdev->dev, "Time: %lld.%ld, %s\n", in ptp_ocp_phc_info()
2360 ptp_ocp_info(struct ptp_ocp *bp) in ptp_ocp_info() argument
2367 struct device *dev = &bp->pdev->dev; in ptp_ocp_info()
2370 ptp_ocp_phc_info(bp); in ptp_ocp_info()
2371 if (bp->tod) in ptp_ocp_info()
2372 ptp_ocp_tod_info(bp); in ptp_ocp_info()
2374 if (bp->image) { in ptp_ocp_info()
2375 u32 ver = ioread32(&bp->image->version); in ptp_ocp_info()
2385 ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port, 115200); in ptp_ocp_info()
2386 ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port, 115200); in ptp_ocp_info()
2387 ptp_ocp_serial_info(dev, "MAC", bp->mac_port, 57600); in ptp_ocp_info()
2388 if (bp->nmea_out && bp->nmea_port != -1) { in ptp_ocp_info()
2391 reg = ioread32(&bp->nmea_out->uart_baud); in ptp_ocp_info()
2394 ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port, baud); in ptp_ocp_info()
2399 ptp_ocp_detach_sysfs(struct ptp_ocp *bp) in ptp_ocp_detach_sysfs() argument
2401 struct device *dev = &bp->dev; in ptp_ocp_detach_sysfs()
2411 ptp_ocp_detach(struct ptp_ocp *bp) in ptp_ocp_detach() argument
2413 ptp_ocp_debugfs_remove_device(bp); in ptp_ocp_detach()
2414 ptp_ocp_detach_sysfs(bp); in ptp_ocp_detach()
2415 if (timer_pending(&bp->watchdog)) in ptp_ocp_detach()
2416 del_timer_sync(&bp->watchdog); in ptp_ocp_detach()
2417 if (bp->ts0) in ptp_ocp_detach()
2418 ptp_ocp_unregister_ext(bp->ts0); in ptp_ocp_detach()
2419 if (bp->ts1) in ptp_ocp_detach()
2420 ptp_ocp_unregister_ext(bp->ts1); in ptp_ocp_detach()
2421 if (bp->ts2) in ptp_ocp_detach()
2422 ptp_ocp_unregister_ext(bp->ts2); in ptp_ocp_detach()
2423 if (bp->pps) in ptp_ocp_detach()
2424 ptp_ocp_unregister_ext(bp->pps); in ptp_ocp_detach()
2425 if (bp->gnss_port != -1) in ptp_ocp_detach()
2426 serial8250_unregister_port(bp->gnss_port); in ptp_ocp_detach()
2427 if (bp->gnss2_port != -1) in ptp_ocp_detach()
2428 serial8250_unregister_port(bp->gnss2_port); in ptp_ocp_detach()
2429 if (bp->mac_port != -1) in ptp_ocp_detach()
2430 serial8250_unregister_port(bp->mac_port); in ptp_ocp_detach()
2431 if (bp->nmea_port != -1) in ptp_ocp_detach()
2432 serial8250_unregister_port(bp->nmea_port); in ptp_ocp_detach()
2433 if (bp->spi_flash) in ptp_ocp_detach()
2434 platform_device_unregister(bp->spi_flash); in ptp_ocp_detach()
2435 if (bp->i2c_ctrl) in ptp_ocp_detach()
2436 platform_device_unregister(bp->i2c_ctrl); in ptp_ocp_detach()
2437 if (bp->i2c_clk) in ptp_ocp_detach()
2438 clk_hw_unregister_fixed_rate(bp->i2c_clk); in ptp_ocp_detach()
2439 if (bp->n_irqs) in ptp_ocp_detach()
2440 pci_free_irq_vectors(bp->pdev); in ptp_ocp_detach()
2441 if (bp->ptp) in ptp_ocp_detach()
2442 ptp_clock_unregister(bp->ptp); in ptp_ocp_detach()
2443 device_unregister(&bp->dev); in ptp_ocp_detach()
2450 struct ptp_ocp *bp; in ptp_ocp_probe() local
2453 devlink = devlink_alloc(&ptp_ocp_devlink_ops, sizeof(*bp), &pdev->dev); in ptp_ocp_probe()
2465 bp = devlink_priv(devlink); in ptp_ocp_probe()
2466 err = ptp_ocp_device_init(bp, pdev); in ptp_ocp_probe()
2480 bp->n_irqs = err; in ptp_ocp_probe()
2483 err = ptp_ocp_register_resources(bp, id->driver_data); in ptp_ocp_probe()
2487 bp->ptp = ptp_clock_register(&bp->ptp_info, &pdev->dev); in ptp_ocp_probe()
2488 if (IS_ERR(bp->ptp)) { in ptp_ocp_probe()
2489 err = PTR_ERR(bp->ptp); in ptp_ocp_probe()
2491 bp->ptp = NULL; in ptp_ocp_probe()
2495 err = ptp_ocp_complete(bp); in ptp_ocp_probe()
2499 ptp_ocp_info(bp); in ptp_ocp_probe()
2504 ptp_ocp_detach(bp); in ptp_ocp_probe()
2516 struct ptp_ocp *bp = pci_get_drvdata(pdev); in ptp_ocp_remove() local
2517 struct devlink *devlink = priv_to_devlink(bp); in ptp_ocp_remove()
2520 ptp_ocp_detach(bp); in ptp_ocp_remove()
2539 struct ptp_ocp *bp; in ptp_ocp_i2c_notifier_call() local
2561 bp = dev_get_drvdata(dev); in ptp_ocp_i2c_notifier_call()
2563 ptp_ocp_symlink(bp, child, "i2c"); in ptp_ocp_i2c_notifier_call()
2565 sysfs_remove_link(&bp->dev.kobj, "i2c"); in ptp_ocp_i2c_notifier_call()