1 // SPDX-License-Identifier: GPL-2.0+
3 * PTP hardware clock driver for the IDT ClockMatrix(TM) family of timing and
4 * synchronization devices.
6 * Copyright (C) 2019 Integrated Device Technology, Inc., a Renesas Company.
8 #include <linux/firmware.h>
10 #include <linux/module.h>
11 #include <linux/ptp_clock_kernel.h>
12 #include <linux/delay.h>
13 #include <linux/jiffies.h>
14 #include <linux/kernel.h>
15 #include <linux/timekeeping.h>
17 #include "ptp_private.h"
18 #include "ptp_clockmatrix.h"
20 MODULE_DESCRIPTION("Driver for IDT ClockMatrix(TM) family");
21 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>");
22 MODULE_AUTHOR("IDT support-1588 <IDT-support-1588@lm.renesas.com>");
23 MODULE_VERSION("1.0");
24 MODULE_LICENSE("GPL");
26 #define SETTIME_CORRECTION (0)
28 static long set_write_phase_ready(struct ptp_clock_info *ptp)
30 struct idtcm_channel *channel =
31 container_of(ptp, struct idtcm_channel, caps);
33 channel->write_phase_ready = 1;
38 static int char_array_to_timespec(u8 *buf,
40 struct timespec64 *ts)
46 if (count < TOD_BYTE_COUNT)
49 /* Sub-nanoseconds are in buf[0]. */
51 for (i = 0; i < 3; i++) {
57 for (i = 0; i < 5; i++) {
68 static int timespec_to_char_array(struct timespec64 const *ts,
76 if (count < TOD_BYTE_COUNT)
82 /* Sub-nanoseconds are in buf[0]. */
84 for (i = 1; i < 5; i++) {
89 for (i = 5; i < TOD_BYTE_COUNT; i++) {
98 static int idtcm_xfer(struct idtcm *idtcm,
104 struct i2c_client *client = idtcm->client;
105 struct i2c_msg msg[2];
108 msg[0].addr = client->addr;
111 msg[0].buf = ®addr;
113 msg[1].addr = client->addr;
114 msg[1].flags = write ? 0 : I2C_M_RD;
118 cnt = i2c_transfer(client->adapter, msg, 2);
121 dev_err(&client->dev, "i2c_transfer returned %d\n", cnt);
123 } else if (cnt != 2) {
124 dev_err(&client->dev,
125 "i2c_transfer sent only %d of %d messages\n", cnt, 2);
132 static int idtcm_page_offset(struct idtcm *idtcm, u8 val)
137 if (idtcm->page_offset == val)
145 err = idtcm_xfer(idtcm, PAGE_ADDR, buf, sizeof(buf), 1);
148 dev_err(&idtcm->client->dev, "failed to set page offset\n");
150 idtcm->page_offset = val;
155 static int _idtcm_rdwr(struct idtcm *idtcm,
165 hi = (regaddr >> 8) & 0xff;
168 err = idtcm_page_offset(idtcm, hi);
173 err = idtcm_xfer(idtcm, lo, buf, count, write);
178 static int idtcm_read(struct idtcm *idtcm,
184 return _idtcm_rdwr(idtcm, module + regaddr, buf, count, false);
187 static int idtcm_write(struct idtcm *idtcm,
193 return _idtcm_rdwr(idtcm, module + regaddr, buf, count, true);
196 static int _idtcm_gettime(struct idtcm_channel *channel,
197 struct timespec64 *ts)
199 struct idtcm *idtcm = channel->idtcm;
200 u8 buf[TOD_BYTE_COUNT];
204 err = idtcm_read(idtcm, channel->tod_read_primary,
205 TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
209 trigger &= ~(TOD_READ_TRIGGER_MASK << TOD_READ_TRIGGER_SHIFT);
210 trigger |= (1 << TOD_READ_TRIGGER_SHIFT);
211 trigger |= TOD_READ_TRIGGER_MODE;
213 err = idtcm_write(idtcm, channel->tod_read_primary,
214 TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
219 if (idtcm->calculate_overhead_flag)
220 idtcm->start_time = ktime_get_raw();
222 err = idtcm_read(idtcm, channel->tod_read_primary,
223 TOD_READ_PRIMARY, buf, sizeof(buf));
228 err = char_array_to_timespec(buf, sizeof(buf), ts);
233 static int _sync_pll_output(struct idtcm *idtcm,
244 if ((qn == 0) && (qn_plus_1 == 0))
249 sync_ctrl0 = HW_Q0_Q1_CH_SYNC_CTRL_0;
250 sync_ctrl1 = HW_Q0_Q1_CH_SYNC_CTRL_1;
253 sync_ctrl0 = HW_Q2_Q3_CH_SYNC_CTRL_0;
254 sync_ctrl1 = HW_Q2_Q3_CH_SYNC_CTRL_1;
257 sync_ctrl0 = HW_Q4_Q5_CH_SYNC_CTRL_0;
258 sync_ctrl1 = HW_Q4_Q5_CH_SYNC_CTRL_1;
261 sync_ctrl0 = HW_Q6_Q7_CH_SYNC_CTRL_0;
262 sync_ctrl1 = HW_Q6_Q7_CH_SYNC_CTRL_1;
265 sync_ctrl0 = HW_Q8_CH_SYNC_CTRL_0;
266 sync_ctrl1 = HW_Q8_CH_SYNC_CTRL_1;
269 sync_ctrl0 = HW_Q9_CH_SYNC_CTRL_0;
270 sync_ctrl1 = HW_Q9_CH_SYNC_CTRL_1;
273 sync_ctrl0 = HW_Q10_CH_SYNC_CTRL_0;
274 sync_ctrl1 = HW_Q10_CH_SYNC_CTRL_1;
277 sync_ctrl0 = HW_Q11_CH_SYNC_CTRL_0;
278 sync_ctrl1 = HW_Q11_CH_SYNC_CTRL_1;
284 val = SYNCTRL1_MASTER_SYNC_RST;
286 /* Place master sync in reset */
287 err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
291 err = idtcm_write(idtcm, 0, sync_ctrl0, &sync_src, sizeof(sync_src));
295 /* Set sync trigger mask */
296 val |= SYNCTRL1_FBDIV_FRAME_SYNC_TRIG | SYNCTRL1_FBDIV_SYNC_TRIG;
299 val |= SYNCTRL1_Q0_DIV_SYNC_TRIG;
302 val |= SYNCTRL1_Q1_DIV_SYNC_TRIG;
304 err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
308 /* Place master sync out of reset */
309 val &= ~(SYNCTRL1_MASTER_SYNC_RST);
310 err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
315 static int idtcm_sync_pps_output(struct idtcm_channel *channel)
317 struct idtcm *idtcm = channel->idtcm;
325 u16 output_mask = channel->output_mask;
327 switch (channel->dpll_n) {
329 sync_src = SYNC_SOURCE_DPLL0_TOD_PPS;
332 sync_src = SYNC_SOURCE_DPLL1_TOD_PPS;
335 sync_src = SYNC_SOURCE_DPLL2_TOD_PPS;
338 sync_src = SYNC_SOURCE_DPLL3_TOD_PPS;
344 for (pll = 0; pll < 8; pll++) {
346 qn = output_mask & 0x1;
347 output_mask = output_mask >> 1;
350 /* First 4 pll has 2 outputs */
351 qn_plus_1 = output_mask & 0x1;
352 output_mask = output_mask >> 1;
357 if ((qn != 0) || (qn_plus_1 != 0))
358 err = _sync_pll_output(idtcm, pll, sync_src, qn,
368 static int _idtcm_set_dpll_tod(struct idtcm_channel *channel,
369 struct timespec64 const *ts,
370 enum hw_tod_write_trig_sel wr_trig)
372 struct idtcm *idtcm = channel->idtcm;
374 u8 buf[TOD_BYTE_COUNT];
377 struct timespec64 local_ts = *ts;
378 s64 total_overhead_ns;
380 /* Configure HW TOD write trigger. */
381 err = idtcm_read(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
388 cmd |= wr_trig | 0x08;
390 err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
396 if (wr_trig != HW_TOD_WR_TRIG_SEL_MSB) {
398 err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
403 err = idtcm_write(idtcm, channel->hw_dpll_n,
404 HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
410 /* ARM HW TOD write trigger. */
413 err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
416 if (wr_trig == HW_TOD_WR_TRIG_SEL_MSB) {
418 if (idtcm->calculate_overhead_flag) {
419 /* Assumption: I2C @ 400KHz */
420 total_overhead_ns = ktime_to_ns(ktime_get_raw()
422 + idtcm->tod_write_overhead_ns
423 + SETTIME_CORRECTION;
425 timespec64_add_ns(&local_ts, total_overhead_ns);
427 idtcm->calculate_overhead_flag = 0;
430 err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
435 err = idtcm_write(idtcm, channel->hw_dpll_n,
436 HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
442 static int _idtcm_settime(struct idtcm_channel *channel,
443 struct timespec64 const *ts,
444 enum hw_tod_write_trig_sel wr_trig)
446 struct idtcm *idtcm = channel->idtcm;
452 err = _idtcm_set_dpll_tod(channel, ts, wr_trig);
457 /* Wait for the operation to complete. */
458 for (i = 0; i < 10000; i++) {
459 err = idtcm_read(idtcm, channel->hw_dpll_n,
460 HW_DPLL_TOD_CTRL_1, &trig_sel,
466 if (trig_sel == 0x4a)
475 retval = idtcm_sync_pps_output(channel);
480 static int idtcm_set_phase_pull_in_offset(struct idtcm_channel *channel,
485 struct idtcm *idtcm = channel->idtcm;
489 for (i = 0; i < 4; i++) {
490 buf[i] = 0xff & (offset_ns);
494 err = idtcm_write(idtcm, channel->dpll_phase_pull_in, PULL_IN_OFFSET,
500 static int idtcm_set_phase_pull_in_slope_limit(struct idtcm_channel *channel,
505 struct idtcm *idtcm = channel->idtcm;
509 if (max_ffo_ppb & 0xff000000)
512 for (i = 0; i < 3; i++) {
513 buf[i] = 0xff & (max_ffo_ppb);
517 err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
518 PULL_IN_SLOPE_LIMIT, buf, sizeof(buf));
523 static int idtcm_start_phase_pull_in(struct idtcm_channel *channel)
526 struct idtcm *idtcm = channel->idtcm;
530 err = idtcm_read(idtcm, channel->dpll_phase_pull_in, PULL_IN_CTRL,
538 err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
539 PULL_IN_CTRL, &buf, sizeof(buf));
547 static int idtcm_do_phase_pull_in(struct idtcm_channel *channel,
553 err = idtcm_set_phase_pull_in_offset(channel, -offset_ns);
558 err = idtcm_set_phase_pull_in_slope_limit(channel, max_ffo_ppb);
563 err = idtcm_start_phase_pull_in(channel);
568 static int _idtcm_adjtime(struct idtcm_channel *channel, s64 delta)
571 struct idtcm *idtcm = channel->idtcm;
572 struct timespec64 ts;
575 if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS) {
576 err = idtcm_do_phase_pull_in(channel, delta, 0);
578 idtcm->calculate_overhead_flag = 1;
580 err = _idtcm_gettime(channel, &ts);
585 now = timespec64_to_ns(&ts);
588 ts = ns_to_timespec64(now);
590 err = _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
596 static int idtcm_state_machine_reset(struct idtcm *idtcm)
599 u8 byte = SM_RESET_CMD;
601 err = idtcm_write(idtcm, RESET_CTRL, SM_RESET, &byte, sizeof(byte));
604 msleep_interruptible(POST_SM_RESET_DELAY_MS);
609 static int idtcm_read_hw_rev_id(struct idtcm *idtcm, u8 *hw_rev_id)
611 return idtcm_read(idtcm, HW_REVISION, REV_ID, hw_rev_id, sizeof(u8));
614 static int idtcm_read_product_id(struct idtcm *idtcm, u16 *product_id)
619 err = idtcm_read(idtcm, GENERAL_STATUS, PRODUCT_ID, buf, sizeof(buf));
621 *product_id = (buf[1] << 8) | buf[0];
626 static int idtcm_read_major_release(struct idtcm *idtcm, u8 *major)
631 err = idtcm_read(idtcm, GENERAL_STATUS, MAJ_REL, &buf, sizeof(buf));
638 static int idtcm_read_minor_release(struct idtcm *idtcm, u8 *minor)
640 return idtcm_read(idtcm, GENERAL_STATUS, MIN_REL, minor, sizeof(u8));
643 static int idtcm_read_hotfix_release(struct idtcm *idtcm, u8 *hotfix)
645 return idtcm_read(idtcm,
652 static int idtcm_read_otp_scsr_config_select(struct idtcm *idtcm,
655 return idtcm_read(idtcm, GENERAL_STATUS, OTP_SCSR_CONFIG_SELECT,
656 config_select, sizeof(u8));
659 static int process_pll_mask(struct idtcm *idtcm, u32 addr, u8 val, u8 *mask)
663 if (addr == PLL_MASK_ADDR) {
664 if ((val & 0xf0) || !(val & 0xf)) {
665 dev_err(&idtcm->client->dev,
666 "Invalid PLL mask 0x%hhx\n", val);
675 static int set_pll_output_mask(struct idtcm *idtcm, u16 addr, u8 val)
680 case OUTPUT_MASK_PLL0_ADDR:
681 SET_U16_LSB(idtcm->channel[0].output_mask, val);
683 case OUTPUT_MASK_PLL0_ADDR + 1:
684 SET_U16_MSB(idtcm->channel[0].output_mask, val);
686 case OUTPUT_MASK_PLL1_ADDR:
687 SET_U16_LSB(idtcm->channel[1].output_mask, val);
689 case OUTPUT_MASK_PLL1_ADDR + 1:
690 SET_U16_MSB(idtcm->channel[1].output_mask, val);
692 case OUTPUT_MASK_PLL2_ADDR:
693 SET_U16_LSB(idtcm->channel[2].output_mask, val);
695 case OUTPUT_MASK_PLL2_ADDR + 1:
696 SET_U16_MSB(idtcm->channel[2].output_mask, val);
698 case OUTPUT_MASK_PLL3_ADDR:
699 SET_U16_LSB(idtcm->channel[3].output_mask, val);
701 case OUTPUT_MASK_PLL3_ADDR + 1:
702 SET_U16_MSB(idtcm->channel[3].output_mask, val);
712 static int check_and_set_masks(struct idtcm *idtcm,
718 if (set_pll_output_mask(idtcm, regaddr, val)) {
719 /* Not an output mask, check for pll mask */
720 err = process_pll_mask(idtcm, regaddr, val, &idtcm->pll_mask);
726 static void display_pll_and_output_masks(struct idtcm *idtcm)
731 dev_dbg(&idtcm->client->dev, "pllmask = 0x%02x\n", idtcm->pll_mask);
733 for (i = 0; i < MAX_PHC_PLL; i++) {
736 if (mask & idtcm->pll_mask)
737 dev_dbg(&idtcm->client->dev,
738 "PLL%d output_mask = 0x%04x\n",
739 i, idtcm->channel[i].output_mask);
743 static int idtcm_load_firmware(struct idtcm *idtcm,
746 const struct firmware *fw;
747 struct idtcm_fwrc *rec;
754 dev_dbg(&idtcm->client->dev, "requesting firmware '%s'\n", FW_FILENAME);
756 err = request_firmware(&fw, FW_FILENAME, dev);
761 dev_dbg(&idtcm->client->dev, "firmware size %zu bytes\n", fw->size);
763 rec = (struct idtcm_fwrc *) fw->data;
766 idtcm_state_machine_reset(idtcm);
768 for (len = fw->size; len > 0; len -= sizeof(*rec)) {
771 dev_err(&idtcm->client->dev,
772 "bad firmware, reserved field non-zero\n");
775 regaddr = rec->hiaddr << 8;
776 regaddr |= rec->loaddr;
779 loaddr = rec->loaddr;
783 err = check_and_set_masks(idtcm, regaddr, val);
787 /* Top (status registers) and bottom are read-only */
788 if ((regaddr < GPIO_USER_CONTROL)
789 || (regaddr >= SCRATCH))
792 /* Page size 128, last 4 bytes of page skipped */
793 if (((loaddr > 0x7b) && (loaddr <= 0x7f))
797 err = idtcm_write(idtcm, regaddr, 0, &val, sizeof(val));
804 display_pll_and_output_masks(idtcm);
807 release_firmware(fw);
811 static int idtcm_pps_enable(struct idtcm_channel *channel, bool enable)
813 struct idtcm *idtcm = channel->idtcm;
819 * This assumes that the 1-PPS is on the second of the two
820 * output. But is this always true?
822 switch (channel->dpll_n) {
839 err = idtcm_read(idtcm, module, OUT_CTRL_1, &val, sizeof(val));
845 val |= SQUELCH_DISABLE;
847 val &= ~SQUELCH_DISABLE;
849 err = idtcm_write(idtcm, module, OUT_CTRL_1, &val, sizeof(val));
857 static int idtcm_set_pll_mode(struct idtcm_channel *channel,
858 enum pll_mode pll_mode)
860 struct idtcm *idtcm = channel->idtcm;
864 err = idtcm_read(idtcm, channel->dpll_n, DPLL_MODE,
865 &dpll_mode, sizeof(dpll_mode));
869 dpll_mode &= ~(PLL_MODE_MASK << PLL_MODE_SHIFT);
871 dpll_mode |= (pll_mode << PLL_MODE_SHIFT);
873 channel->pll_mode = pll_mode;
875 err = idtcm_write(idtcm, channel->dpll_n, DPLL_MODE,
876 &dpll_mode, sizeof(dpll_mode));
883 /* PTP Hardware Clock interface */
886 * @brief Maximum absolute value for write phase offset in picoseconds
888 * Destination signed register is 32-bit register in resolution of 50ps
890 * 0x7fffffff * 50 = 2147483647 * 50 = 107374182350
892 static int _idtcm_adjphase(struct idtcm_channel *channel, s32 delta_ns)
894 struct idtcm *idtcm = channel->idtcm;
902 if (channel->pll_mode != PLL_MODE_WRITE_PHASE) {
904 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_PHASE);
909 channel->write_phase_ready = 0;
911 ptp_schedule_worker(channel->ptp_clock,
912 msecs_to_jiffies(WR_PHASE_SETUP_MS));
915 if (!channel->write_phase_ready)
918 offset_ps = (s64)delta_ns * 1000;
921 * Check for 32-bit signed max * 50:
923 * 0x7fffffff * 50 = 2147483647 * 50 = 107374182350
925 if (offset_ps > MAX_ABS_WRITE_PHASE_PICOSECONDS)
926 offset_ps = MAX_ABS_WRITE_PHASE_PICOSECONDS;
927 else if (offset_ps < -MAX_ABS_WRITE_PHASE_PICOSECONDS)
928 offset_ps = -MAX_ABS_WRITE_PHASE_PICOSECONDS;
930 phase_50ps = DIV_ROUND_CLOSEST(div64_s64(offset_ps, 50), 1);
932 for (i = 0; i < 4; i++) {
933 buf[i] = phase_50ps & 0xff;
937 err = idtcm_write(idtcm, channel->dpll_phase, DPLL_WR_PHASE,
943 static int idtcm_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
945 struct idtcm_channel *channel =
946 container_of(ptp, struct idtcm_channel, caps);
947 struct idtcm *idtcm = channel->idtcm;
954 if (channel->pll_mode != PLL_MODE_WRITE_FREQUENCY) {
955 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
961 * Frequency Control Word unit is: 1.11 * 10^-10 ppm
970 * FCW = -------------
978 /* 2 ^ -53 = 1.1102230246251565404236316680908e-16 */
979 fcw = ppb * 1000000000000ULL;
981 fcw = div_u64(fcw, 111022);
986 for (i = 0; i < 6; i++) {
991 mutex_lock(&idtcm->reg_lock);
993 err = idtcm_write(idtcm, channel->dpll_freq, DPLL_WR_FREQ,
996 mutex_unlock(&idtcm->reg_lock);
1000 static int idtcm_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
1002 struct idtcm_channel *channel =
1003 container_of(ptp, struct idtcm_channel, caps);
1004 struct idtcm *idtcm = channel->idtcm;
1007 mutex_lock(&idtcm->reg_lock);
1009 err = _idtcm_gettime(channel, ts);
1011 mutex_unlock(&idtcm->reg_lock);
1016 static int idtcm_settime(struct ptp_clock_info *ptp,
1017 const struct timespec64 *ts)
1019 struct idtcm_channel *channel =
1020 container_of(ptp, struct idtcm_channel, caps);
1021 struct idtcm *idtcm = channel->idtcm;
1024 mutex_lock(&idtcm->reg_lock);
1026 err = _idtcm_settime(channel, ts, HW_TOD_WR_TRIG_SEL_MSB);
1028 mutex_unlock(&idtcm->reg_lock);
1033 static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta)
1035 struct idtcm_channel *channel =
1036 container_of(ptp, struct idtcm_channel, caps);
1037 struct idtcm *idtcm = channel->idtcm;
1040 mutex_lock(&idtcm->reg_lock);
1042 err = _idtcm_adjtime(channel, delta);
1044 mutex_unlock(&idtcm->reg_lock);
1049 static int idtcm_adjphase(struct ptp_clock_info *ptp, s32 delta)
1051 struct idtcm_channel *channel =
1052 container_of(ptp, struct idtcm_channel, caps);
1054 struct idtcm *idtcm = channel->idtcm;
1058 mutex_lock(&idtcm->reg_lock);
1060 err = _idtcm_adjphase(channel, delta);
1062 mutex_unlock(&idtcm->reg_lock);
1067 static int idtcm_enable(struct ptp_clock_info *ptp,
1068 struct ptp_clock_request *rq, int on)
1070 struct idtcm_channel *channel =
1071 container_of(ptp, struct idtcm_channel, caps);
1074 case PTP_CLK_REQ_PEROUT:
1076 return idtcm_pps_enable(channel, false);
1078 /* Only accept a 1-PPS aligned to the second. */
1079 if (rq->perout.start.nsec || rq->perout.period.sec != 1 ||
1080 rq->perout.period.nsec)
1083 return idtcm_pps_enable(channel, true);
1091 static int idtcm_enable_tod(struct idtcm_channel *channel)
1093 struct idtcm *idtcm = channel->idtcm;
1094 struct timespec64 ts = {0, 0};
1098 err = idtcm_pps_enable(channel, false);
1103 * Start the TOD clock ticking.
1105 err = idtcm_read(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1111 err = idtcm_write(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1115 return _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
1118 static void idtcm_display_version_info(struct idtcm *idtcm)
1126 char *fmt = "%d.%d.%d, Id: 0x%04x HW Rev: %d OTP Config Select: %d\n";
1128 idtcm_read_major_release(idtcm, &major);
1129 idtcm_read_minor_release(idtcm, &minor);
1130 idtcm_read_hotfix_release(idtcm, &hotfix);
1132 idtcm_read_product_id(idtcm, &product_id);
1133 idtcm_read_hw_rev_id(idtcm, &hw_rev_id);
1135 idtcm_read_otp_scsr_config_select(idtcm, &config_select);
1137 dev_info(&idtcm->client->dev, fmt, major, minor, hotfix,
1138 product_id, hw_rev_id, config_select);
1141 static const struct ptp_clock_info idtcm_caps = {
1142 .owner = THIS_MODULE,
1145 .adjphase = &idtcm_adjphase,
1146 .adjfreq = &idtcm_adjfreq,
1147 .adjtime = &idtcm_adjtime,
1148 .gettime64 = &idtcm_gettime,
1149 .settime64 = &idtcm_settime,
1150 .enable = &idtcm_enable,
1151 .do_aux_work = &set_write_phase_ready,
1155 static int idtcm_enable_channel(struct idtcm *idtcm, u32 index)
1157 struct idtcm_channel *channel;
1160 if (!(index < MAX_PHC_PLL))
1163 channel = &idtcm->channel[index];
1167 channel->dpll_freq = DPLL_FREQ_0;
1168 channel->dpll_n = DPLL_0;
1169 channel->tod_read_primary = TOD_READ_PRIMARY_0;
1170 channel->tod_write = TOD_WRITE_0;
1171 channel->tod_n = TOD_0;
1172 channel->hw_dpll_n = HW_DPLL_0;
1173 channel->dpll_phase = DPLL_PHASE_0;
1174 channel->dpll_ctrl_n = DPLL_CTRL_0;
1175 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_0;
1178 channel->dpll_freq = DPLL_FREQ_1;
1179 channel->dpll_n = DPLL_1;
1180 channel->tod_read_primary = TOD_READ_PRIMARY_1;
1181 channel->tod_write = TOD_WRITE_1;
1182 channel->tod_n = TOD_1;
1183 channel->hw_dpll_n = HW_DPLL_1;
1184 channel->dpll_phase = DPLL_PHASE_1;
1185 channel->dpll_ctrl_n = DPLL_CTRL_1;
1186 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_1;
1189 channel->dpll_freq = DPLL_FREQ_2;
1190 channel->dpll_n = DPLL_2;
1191 channel->tod_read_primary = TOD_READ_PRIMARY_2;
1192 channel->tod_write = TOD_WRITE_2;
1193 channel->tod_n = TOD_2;
1194 channel->hw_dpll_n = HW_DPLL_2;
1195 channel->dpll_phase = DPLL_PHASE_2;
1196 channel->dpll_ctrl_n = DPLL_CTRL_2;
1197 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_2;
1200 channel->dpll_freq = DPLL_FREQ_3;
1201 channel->dpll_n = DPLL_3;
1202 channel->tod_read_primary = TOD_READ_PRIMARY_3;
1203 channel->tod_write = TOD_WRITE_3;
1204 channel->tod_n = TOD_3;
1205 channel->hw_dpll_n = HW_DPLL_3;
1206 channel->dpll_phase = DPLL_PHASE_3;
1207 channel->dpll_ctrl_n = DPLL_CTRL_3;
1208 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_3;
1214 channel->idtcm = idtcm;
1216 channel->caps = idtcm_caps;
1217 snprintf(channel->caps.name, sizeof(channel->caps.name),
1218 "IDT CM PLL%u", index);
1220 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
1224 err = idtcm_enable_tod(channel);
1228 channel->ptp_clock = ptp_clock_register(&channel->caps, NULL);
1230 if (IS_ERR(channel->ptp_clock)) {
1231 err = PTR_ERR(channel->ptp_clock);
1232 channel->ptp_clock = NULL;
1236 if (!channel->ptp_clock)
1239 channel->write_phase_ready = 0;
1241 dev_info(&idtcm->client->dev, "PLL%d registered as ptp%d\n",
1242 index, channel->ptp_clock->index);
1247 static void ptp_clock_unregister_all(struct idtcm *idtcm)
1250 struct idtcm_channel *channel;
1252 for (i = 0; i < MAX_PHC_PLL; i++) {
1254 channel = &idtcm->channel[i];
1256 if (channel->ptp_clock)
1257 ptp_clock_unregister(channel->ptp_clock);
1261 static void set_default_masks(struct idtcm *idtcm)
1263 idtcm->pll_mask = DEFAULT_PLL_MASK;
1265 idtcm->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0;
1266 idtcm->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1;
1267 idtcm->channel[2].output_mask = DEFAULT_OUTPUT_MASK_PLL2;
1268 idtcm->channel[3].output_mask = DEFAULT_OUTPUT_MASK_PLL3;
1271 static int set_tod_write_overhead(struct idtcm *idtcm)
1281 char buf[TOD_BYTE_COUNT];
1283 struct idtcm_channel *channel = &idtcm->channel[2];
1285 /* Set page offset */
1286 idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_OVR__0,
1289 for (i = 0; i < TOD_WRITE_OVERHEAD_COUNT_MAX; i++) {
1291 start = ktime_get_raw();
1293 err = idtcm_write(idtcm, channel->hw_dpll_n,
1294 HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
1299 stop = ktime_get_raw();
1301 total_ns += ktime_to_ns(stop - start);
1304 idtcm->tod_write_overhead_ns = div_s64(total_ns,
1305 TOD_WRITE_OVERHEAD_COUNT_MAX);
1310 static int idtcm_probe(struct i2c_client *client,
1311 const struct i2c_device_id *id)
1313 struct idtcm *idtcm;
1317 /* Unused for now */
1320 idtcm = devm_kzalloc(&client->dev, sizeof(struct idtcm), GFP_KERNEL);
1325 idtcm->client = client;
1326 idtcm->page_offset = 0xff;
1327 idtcm->calculate_overhead_flag = 0;
1329 set_default_masks(idtcm);
1331 mutex_init(&idtcm->reg_lock);
1332 mutex_lock(&idtcm->reg_lock);
1334 idtcm_display_version_info(idtcm);
1336 err = set_tod_write_overhead(idtcm);
1339 mutex_unlock(&idtcm->reg_lock);
1343 err = idtcm_load_firmware(idtcm, &client->dev);
1346 dev_warn(&idtcm->client->dev,
1347 "loading firmware failed with %d\n", err);
1349 if (idtcm->pll_mask) {
1350 for (i = 0; i < MAX_PHC_PLL; i++) {
1351 if (idtcm->pll_mask & (1 << i)) {
1352 err = idtcm_enable_channel(idtcm, i);
1358 dev_err(&idtcm->client->dev,
1359 "no PLLs flagged as PHCs, nothing to do\n");
1363 mutex_unlock(&idtcm->reg_lock);
1366 ptp_clock_unregister_all(idtcm);
1370 i2c_set_clientdata(client, idtcm);
1375 static int idtcm_remove(struct i2c_client *client)
1377 struct idtcm *idtcm = i2c_get_clientdata(client);
1379 ptp_clock_unregister_all(idtcm);
1381 mutex_destroy(&idtcm->reg_lock);
1387 static const struct of_device_id idtcm_dt_id[] = {
1388 { .compatible = "idt,8a34000" },
1389 { .compatible = "idt,8a34001" },
1390 { .compatible = "idt,8a34002" },
1391 { .compatible = "idt,8a34003" },
1392 { .compatible = "idt,8a34004" },
1393 { .compatible = "idt,8a34005" },
1394 { .compatible = "idt,8a34006" },
1395 { .compatible = "idt,8a34007" },
1396 { .compatible = "idt,8a34008" },
1397 { .compatible = "idt,8a34009" },
1398 { .compatible = "idt,8a34010" },
1399 { .compatible = "idt,8a34011" },
1400 { .compatible = "idt,8a34012" },
1401 { .compatible = "idt,8a34013" },
1402 { .compatible = "idt,8a34014" },
1403 { .compatible = "idt,8a34015" },
1404 { .compatible = "idt,8a34016" },
1405 { .compatible = "idt,8a34017" },
1406 { .compatible = "idt,8a34018" },
1407 { .compatible = "idt,8a34019" },
1408 { .compatible = "idt,8a34040" },
1409 { .compatible = "idt,8a34041" },
1410 { .compatible = "idt,8a34042" },
1411 { .compatible = "idt,8a34043" },
1412 { .compatible = "idt,8a34044" },
1413 { .compatible = "idt,8a34045" },
1414 { .compatible = "idt,8a34046" },
1415 { .compatible = "idt,8a34047" },
1416 { .compatible = "idt,8a34048" },
1417 { .compatible = "idt,8a34049" },
1420 MODULE_DEVICE_TABLE(of, idtcm_dt_id);
1423 static const struct i2c_device_id idtcm_i2c_id[] = {
1456 MODULE_DEVICE_TABLE(i2c, idtcm_i2c_id);
1458 static struct i2c_driver idtcm_driver = {
1460 .of_match_table = of_match_ptr(idtcm_dt_id),
1463 .probe = idtcm_probe,
1464 .remove = idtcm_remove,
1465 .id_table = idtcm_i2c_id,
1468 module_i2c_driver(idtcm_driver);