Merge tag 'erofs-for-5.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang...
[linux-2.6-microblaze.git] / drivers / ptp / ptp_clockmatrix.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * PTP hardware clock driver for the IDT ClockMatrix(TM) family of timing and
4  * synchronization devices.
5  *
6  * Copyright (C) 2019 Integrated Device Technology, Inc., a Renesas Company.
7  */
8 #include <linux/firmware.h>
9 #include <linux/i2c.h>
10 #include <linux/module.h>
11 #include <linux/ptp_clock_kernel.h>
12 #include <linux/delay.h>
13 #include <linux/kernel.h>
14 #include <linux/timekeeping.h>
15
16 #include "ptp_private.h"
17 #include "ptp_clockmatrix.h"
18
19 MODULE_DESCRIPTION("Driver for IDT ClockMatrix(TM) family");
20 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>");
21 MODULE_AUTHOR("IDT support-1588 <IDT-support-1588@lm.renesas.com>");
22 MODULE_VERSION("1.0");
23 MODULE_LICENSE("GPL");
24
25 #define SETTIME_CORRECTION (0)
26
27 static int char_array_to_timespec(u8 *buf,
28                                   u8 count,
29                                   struct timespec64 *ts)
30 {
31         u8 i;
32         u64 nsec;
33         time64_t sec;
34
35         if (count < TOD_BYTE_COUNT)
36                 return 1;
37
38         /* Sub-nanoseconds are in buf[0]. */
39         nsec = buf[4];
40         for (i = 0; i < 3; i++) {
41                 nsec <<= 8;
42                 nsec |= buf[3 - i];
43         }
44
45         sec = buf[10];
46         for (i = 0; i < 5; i++) {
47                 sec <<= 8;
48                 sec |= buf[9 - i];
49         }
50
51         ts->tv_sec = sec;
52         ts->tv_nsec = nsec;
53
54         return 0;
55 }
56
57 static int timespec_to_char_array(struct timespec64 const *ts,
58                                   u8 *buf,
59                                   u8 count)
60 {
61         u8 i;
62         s32 nsec;
63         time64_t sec;
64
65         if (count < TOD_BYTE_COUNT)
66                 return 1;
67
68         nsec = ts->tv_nsec;
69         sec = ts->tv_sec;
70
71         /* Sub-nanoseconds are in buf[0]. */
72         buf[0] = 0;
73         for (i = 1; i < 5; i++) {
74                 buf[i] = nsec & 0xff;
75                 nsec >>= 8;
76         }
77
78         for (i = 5; i < TOD_BYTE_COUNT; i++) {
79
80                 buf[i] = sec & 0xff;
81                 sec >>= 8;
82         }
83
84         return 0;
85 }
86
87 static int idtcm_xfer(struct idtcm *idtcm,
88                       u8 regaddr,
89                       u8 *buf,
90                       u16 count,
91                       bool write)
92 {
93         struct i2c_client *client = idtcm->client;
94         struct i2c_msg msg[2];
95         int cnt;
96
97         msg[0].addr = client->addr;
98         msg[0].flags = 0;
99         msg[0].len = 1;
100         msg[0].buf = &regaddr;
101
102         msg[1].addr = client->addr;
103         msg[1].flags = write ? 0 : I2C_M_RD;
104         msg[1].len = count;
105         msg[1].buf = buf;
106
107         cnt = i2c_transfer(client->adapter, msg, 2);
108
109         if (cnt < 0) {
110                 dev_err(&client->dev, "i2c_transfer returned %d\n", cnt);
111                 return cnt;
112         } else if (cnt != 2) {
113                 dev_err(&client->dev,
114                         "i2c_transfer sent only %d of %d messages\n", cnt, 2);
115                 return -EIO;
116         }
117
118         return 0;
119 }
120
121 static int idtcm_page_offset(struct idtcm *idtcm, u8 val)
122 {
123         u8 buf[4];
124         int err;
125
126         if (idtcm->page_offset == val)
127                 return 0;
128
129         buf[0] = 0x0;
130         buf[1] = val;
131         buf[2] = 0x10;
132         buf[3] = 0x20;
133
134         err = idtcm_xfer(idtcm, PAGE_ADDR, buf, sizeof(buf), 1);
135
136         if (err)
137                 dev_err(&idtcm->client->dev, "failed to set page offset\n");
138         else
139                 idtcm->page_offset = val;
140
141         return err;
142 }
143
144 static int _idtcm_rdwr(struct idtcm *idtcm,
145                        u16 regaddr,
146                        u8 *buf,
147                        u16 count,
148                        bool write)
149 {
150         u8 hi;
151         u8 lo;
152         int err;
153
154         hi = (regaddr >> 8) & 0xff;
155         lo = regaddr & 0xff;
156
157         err = idtcm_page_offset(idtcm, hi);
158
159         if (err)
160                 goto out;
161
162         err = idtcm_xfer(idtcm, lo, buf, count, write);
163 out:
164         return err;
165 }
166
167 static int idtcm_read(struct idtcm *idtcm,
168                       u16 module,
169                       u16 regaddr,
170                       u8 *buf,
171                       u16 count)
172 {
173         return _idtcm_rdwr(idtcm, module + regaddr, buf, count, false);
174 }
175
176 static int idtcm_write(struct idtcm *idtcm,
177                        u16 module,
178                        u16 regaddr,
179                        u8 *buf,
180                        u16 count)
181 {
182         return _idtcm_rdwr(idtcm, module + regaddr, buf, count, true);
183 }
184
185 static int _idtcm_gettime(struct idtcm_channel *channel,
186                           struct timespec64 *ts)
187 {
188         struct idtcm *idtcm = channel->idtcm;
189         u8 buf[TOD_BYTE_COUNT];
190         u8 trigger;
191         int err;
192
193         err = idtcm_read(idtcm, channel->tod_read_primary,
194                          TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
195         if (err)
196                 return err;
197
198         trigger &= ~(TOD_READ_TRIGGER_MASK << TOD_READ_TRIGGER_SHIFT);
199         trigger |= (1 << TOD_READ_TRIGGER_SHIFT);
200         trigger |= TOD_READ_TRIGGER_MODE;
201
202         err = idtcm_write(idtcm, channel->tod_read_primary,
203                           TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
204
205         if (err)
206                 return err;
207
208         if (idtcm->calculate_overhead_flag)
209                 idtcm->start_time = ktime_get_raw();
210
211         err = idtcm_read(idtcm, channel->tod_read_primary,
212                          TOD_READ_PRIMARY, buf, sizeof(buf));
213
214         if (err)
215                 return err;
216
217         err = char_array_to_timespec(buf, sizeof(buf), ts);
218
219         return err;
220 }
221
222 static int _sync_pll_output(struct idtcm *idtcm,
223                             u8 pll,
224                             u8 sync_src,
225                             u8 qn,
226                             u8 qn_plus_1)
227 {
228         int err;
229         u8 val;
230         u16 sync_ctrl0;
231         u16 sync_ctrl1;
232
233         if ((qn == 0) && (qn_plus_1 == 0))
234                 return 0;
235
236         switch (pll) {
237         case 0:
238                 sync_ctrl0 = HW_Q0_Q1_CH_SYNC_CTRL_0;
239                 sync_ctrl1 = HW_Q0_Q1_CH_SYNC_CTRL_1;
240                 break;
241         case 1:
242                 sync_ctrl0 = HW_Q2_Q3_CH_SYNC_CTRL_0;
243                 sync_ctrl1 = HW_Q2_Q3_CH_SYNC_CTRL_1;
244                 break;
245         case 2:
246                 sync_ctrl0 = HW_Q4_Q5_CH_SYNC_CTRL_0;
247                 sync_ctrl1 = HW_Q4_Q5_CH_SYNC_CTRL_1;
248                 break;
249         case 3:
250                 sync_ctrl0 = HW_Q6_Q7_CH_SYNC_CTRL_0;
251                 sync_ctrl1 = HW_Q6_Q7_CH_SYNC_CTRL_1;
252                 break;
253         case 4:
254                 sync_ctrl0 = HW_Q8_CH_SYNC_CTRL_0;
255                 sync_ctrl1 = HW_Q8_CH_SYNC_CTRL_1;
256                 break;
257         case 5:
258                 sync_ctrl0 = HW_Q9_CH_SYNC_CTRL_0;
259                 sync_ctrl1 = HW_Q9_CH_SYNC_CTRL_1;
260                 break;
261         case 6:
262                 sync_ctrl0 = HW_Q10_CH_SYNC_CTRL_0;
263                 sync_ctrl1 = HW_Q10_CH_SYNC_CTRL_1;
264                 break;
265         case 7:
266                 sync_ctrl0 = HW_Q11_CH_SYNC_CTRL_0;
267                 sync_ctrl1 = HW_Q11_CH_SYNC_CTRL_1;
268                 break;
269         default:
270                 return -EINVAL;
271         }
272
273         val = SYNCTRL1_MASTER_SYNC_RST;
274
275         /* Place master sync in reset */
276         err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
277         if (err)
278                 return err;
279
280         err = idtcm_write(idtcm, 0, sync_ctrl0, &sync_src, sizeof(sync_src));
281         if (err)
282                 return err;
283
284         /* Set sync trigger mask */
285         val |= SYNCTRL1_FBDIV_FRAME_SYNC_TRIG | SYNCTRL1_FBDIV_SYNC_TRIG;
286
287         if (qn)
288                 val |= SYNCTRL1_Q0_DIV_SYNC_TRIG;
289
290         if (qn_plus_1)
291                 val |= SYNCTRL1_Q1_DIV_SYNC_TRIG;
292
293         err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
294         if (err)
295                 return err;
296
297         /* Place master sync out of reset */
298         val &= ~(SYNCTRL1_MASTER_SYNC_RST);
299         err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
300
301         return err;
302 }
303
304 static int idtcm_sync_pps_output(struct idtcm_channel *channel)
305 {
306         struct idtcm *idtcm = channel->idtcm;
307
308         u8 pll;
309         u8 sync_src;
310         u8 qn;
311         u8 qn_plus_1;
312         int err = 0;
313
314         u16 output_mask = channel->output_mask;
315
316         switch (channel->dpll_n) {
317         case DPLL_0:
318                 sync_src = SYNC_SOURCE_DPLL0_TOD_PPS;
319                 break;
320         case DPLL_1:
321                 sync_src = SYNC_SOURCE_DPLL1_TOD_PPS;
322                 break;
323         case DPLL_2:
324                 sync_src = SYNC_SOURCE_DPLL2_TOD_PPS;
325                 break;
326         case DPLL_3:
327                 sync_src = SYNC_SOURCE_DPLL3_TOD_PPS;
328                 break;
329         default:
330                 return -EINVAL;
331         }
332
333         for (pll = 0; pll < 8; pll++) {
334
335                 qn = output_mask & 0x1;
336                 output_mask = output_mask >> 1;
337
338                 if (pll < 4) {
339                         /* First 4 pll has 2 outputs */
340                         qn_plus_1 = output_mask & 0x1;
341                         output_mask = output_mask >> 1;
342                 } else {
343                         qn_plus_1 = 0;
344                 }
345
346                 if ((qn != 0) || (qn_plus_1 != 0))
347                         err = _sync_pll_output(idtcm, pll, sync_src, qn,
348                                                qn_plus_1);
349
350                 if (err)
351                         return err;
352         }
353
354         return err;
355 }
356
357 static int _idtcm_set_dpll_tod(struct idtcm_channel *channel,
358                                struct timespec64 const *ts,
359                                enum hw_tod_write_trig_sel wr_trig)
360 {
361         struct idtcm *idtcm = channel->idtcm;
362
363         u8 buf[TOD_BYTE_COUNT];
364         u8 cmd;
365         int err;
366         struct timespec64 local_ts = *ts;
367         s64 total_overhead_ns;
368
369         /* Configure HW TOD write trigger. */
370         err = idtcm_read(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
371                          &cmd, sizeof(cmd));
372
373         if (err)
374                 return err;
375
376         cmd &= ~(0x0f);
377         cmd |= wr_trig | 0x08;
378
379         err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
380                           &cmd, sizeof(cmd));
381
382         if (err)
383                 return err;
384
385         if (wr_trig  != HW_TOD_WR_TRIG_SEL_MSB) {
386
387                 err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
388
389                 if (err)
390                         return err;
391
392                 err = idtcm_write(idtcm, channel->hw_dpll_n,
393                                   HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
394
395                 if (err)
396                         return err;
397         }
398
399         /* ARM HW TOD write trigger. */
400         cmd &= ~(0x08);
401
402         err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
403                           &cmd, sizeof(cmd));
404
405         if (wr_trig == HW_TOD_WR_TRIG_SEL_MSB) {
406
407                 if (idtcm->calculate_overhead_flag) {
408                         /* Assumption: I2C @ 400KHz */
409                         total_overhead_ns =  ktime_to_ns(ktime_get_raw()
410                                                          - idtcm->start_time)
411                                              + idtcm->tod_write_overhead_ns
412                                              + SETTIME_CORRECTION;
413
414                         timespec64_add_ns(&local_ts, total_overhead_ns);
415
416                         idtcm->calculate_overhead_flag = 0;
417                 }
418
419                 err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
420
421                 if (err)
422                         return err;
423
424                 err = idtcm_write(idtcm, channel->hw_dpll_n,
425                                   HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
426         }
427
428         return err;
429 }
430
431 static int _idtcm_settime(struct idtcm_channel *channel,
432                           struct timespec64 const *ts,
433                           enum hw_tod_write_trig_sel wr_trig)
434 {
435         struct idtcm *idtcm = channel->idtcm;
436         s32 retval;
437         int err;
438         int i;
439         u8 trig_sel;
440
441         err = _idtcm_set_dpll_tod(channel, ts, wr_trig);
442
443         if (err)
444                 return err;
445
446         /* Wait for the operation to complete. */
447         for (i = 0; i < 10000; i++) {
448                 err = idtcm_read(idtcm, channel->hw_dpll_n,
449                                  HW_DPLL_TOD_CTRL_1, &trig_sel,
450                                  sizeof(trig_sel));
451
452                 if (err)
453                         return err;
454
455                 if (trig_sel == 0x4a)
456                         break;
457
458                 err = 1;
459         }
460
461         if (err)
462                 return err;
463
464         retval = idtcm_sync_pps_output(channel);
465
466         return retval;
467 }
468
469 static int idtcm_set_phase_pull_in_offset(struct idtcm_channel *channel,
470                                           s32 offset_ns)
471 {
472         int err;
473         int i;
474         struct idtcm *idtcm = channel->idtcm;
475
476         u8 buf[4];
477
478         for (i = 0; i < 4; i++) {
479                 buf[i] = 0xff & (offset_ns);
480                 offset_ns >>= 8;
481         }
482
483         err = idtcm_write(idtcm, channel->dpll_phase_pull_in, PULL_IN_OFFSET,
484                           buf, sizeof(buf));
485
486         return err;
487 }
488
489 static int idtcm_set_phase_pull_in_slope_limit(struct idtcm_channel *channel,
490                                                u32 max_ffo_ppb)
491 {
492         int err;
493         u8 i;
494         struct idtcm *idtcm = channel->idtcm;
495
496         u8 buf[3];
497
498         if (max_ffo_ppb & 0xff000000)
499                 max_ffo_ppb = 0;
500
501         for (i = 0; i < 3; i++) {
502                 buf[i] = 0xff & (max_ffo_ppb);
503                 max_ffo_ppb >>= 8;
504         }
505
506         err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
507                           PULL_IN_SLOPE_LIMIT, buf, sizeof(buf));
508
509         return err;
510 }
511
512 static int idtcm_start_phase_pull_in(struct idtcm_channel *channel)
513 {
514         int err;
515         struct idtcm *idtcm = channel->idtcm;
516
517         u8 buf;
518
519         err = idtcm_read(idtcm, channel->dpll_phase_pull_in, PULL_IN_CTRL,
520                          &buf, sizeof(buf));
521
522         if (err)
523                 return err;
524
525         if (buf == 0) {
526                 buf = 0x01;
527                 err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
528                                   PULL_IN_CTRL, &buf, sizeof(buf));
529         } else {
530                 err = -EBUSY;
531         }
532
533         return err;
534 }
535
536 static int idtcm_do_phase_pull_in(struct idtcm_channel *channel,
537                                   s32 offset_ns,
538                                   u32 max_ffo_ppb)
539 {
540         int err;
541
542         err = idtcm_set_phase_pull_in_offset(channel, -offset_ns);
543
544         if (err)
545                 return err;
546
547         err = idtcm_set_phase_pull_in_slope_limit(channel, max_ffo_ppb);
548
549         if (err)
550                 return err;
551
552         err = idtcm_start_phase_pull_in(channel);
553
554         return err;
555 }
556
557 static int _idtcm_adjtime(struct idtcm_channel *channel, s64 delta)
558 {
559         int err;
560         struct idtcm *idtcm = channel->idtcm;
561         struct timespec64 ts;
562         s64 now;
563
564         if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS) {
565                 err = idtcm_do_phase_pull_in(channel, delta, 0);
566         } else {
567                 idtcm->calculate_overhead_flag = 1;
568
569                 err = _idtcm_gettime(channel, &ts);
570
571                 if (err)
572                         return err;
573
574                 now = timespec64_to_ns(&ts);
575                 now += delta;
576
577                 ts = ns_to_timespec64(now);
578
579                 err = _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
580         }
581
582         return err;
583 }
584
585 static int idtcm_state_machine_reset(struct idtcm *idtcm)
586 {
587         int err;
588         u8 byte = SM_RESET_CMD;
589
590         err = idtcm_write(idtcm, RESET_CTRL, SM_RESET, &byte, sizeof(byte));
591
592         if (!err)
593                 msleep_interruptible(POST_SM_RESET_DELAY_MS);
594
595         return err;
596 }
597
598 static int idtcm_read_hw_rev_id(struct idtcm *idtcm, u8 *hw_rev_id)
599 {
600         return idtcm_read(idtcm, HW_REVISION, REV_ID, hw_rev_id, sizeof(u8));
601 }
602
603 static int idtcm_read_product_id(struct idtcm *idtcm, u16 *product_id)
604 {
605         int err;
606         u8 buf[2] = {0};
607
608         err = idtcm_read(idtcm, GENERAL_STATUS, PRODUCT_ID, buf, sizeof(buf));
609
610         *product_id = (buf[1] << 8) | buf[0];
611
612         return err;
613 }
614
615 static int idtcm_read_major_release(struct idtcm *idtcm, u8 *major)
616 {
617         int err;
618         u8 buf = 0;
619
620         err = idtcm_read(idtcm, GENERAL_STATUS, MAJ_REL, &buf, sizeof(buf));
621
622         *major = buf >> 1;
623
624         return err;
625 }
626
627 static int idtcm_read_minor_release(struct idtcm *idtcm, u8 *minor)
628 {
629         return idtcm_read(idtcm, GENERAL_STATUS, MIN_REL, minor, sizeof(u8));
630 }
631
632 static int idtcm_read_hotfix_release(struct idtcm *idtcm, u8 *hotfix)
633 {
634         return idtcm_read(idtcm,
635                           GENERAL_STATUS,
636                           HOTFIX_REL,
637                           hotfix,
638                           sizeof(u8));
639 }
640
641 static int idtcm_read_otp_scsr_config_select(struct idtcm *idtcm,
642                                              u8 *config_select)
643 {
644         return idtcm_read(idtcm, GENERAL_STATUS, OTP_SCSR_CONFIG_SELECT,
645                           config_select, sizeof(u8));
646 }
647
648 static int process_pll_mask(struct idtcm *idtcm, u32 addr, u8 val, u8 *mask)
649 {
650         int err = 0;
651
652         if (addr == PLL_MASK_ADDR) {
653                 if ((val & 0xf0) || !(val & 0xf)) {
654                         dev_err(&idtcm->client->dev,
655                                 "Invalid PLL mask 0x%hhx\n", val);
656                         err = -EINVAL;
657                 }
658                 *mask = val;
659         }
660
661         return err;
662 }
663
664 static int set_pll_output_mask(struct idtcm *idtcm, u16 addr, u8 val)
665 {
666         int err = 0;
667
668         switch (addr) {
669         case OUTPUT_MASK_PLL0_ADDR:
670                 SET_U16_LSB(idtcm->channel[0].output_mask, val);
671                 break;
672         case OUTPUT_MASK_PLL0_ADDR + 1:
673                 SET_U16_MSB(idtcm->channel[0].output_mask, val);
674                 break;
675         case OUTPUT_MASK_PLL1_ADDR:
676                 SET_U16_LSB(idtcm->channel[1].output_mask, val);
677                 break;
678         case OUTPUT_MASK_PLL1_ADDR + 1:
679                 SET_U16_MSB(idtcm->channel[1].output_mask, val);
680                 break;
681         case OUTPUT_MASK_PLL2_ADDR:
682                 SET_U16_LSB(idtcm->channel[2].output_mask, val);
683                 break;
684         case OUTPUT_MASK_PLL2_ADDR + 1:
685                 SET_U16_MSB(idtcm->channel[2].output_mask, val);
686                 break;
687         case OUTPUT_MASK_PLL3_ADDR:
688                 SET_U16_LSB(idtcm->channel[3].output_mask, val);
689                 break;
690         case OUTPUT_MASK_PLL3_ADDR + 1:
691                 SET_U16_MSB(idtcm->channel[3].output_mask, val);
692                 break;
693         default:
694                 err = -EINVAL;
695                 break;
696         }
697
698         return err;
699 }
700
701 static int check_and_set_masks(struct idtcm *idtcm,
702                                u16 regaddr,
703                                u8 val)
704 {
705         int err = 0;
706
707         if (set_pll_output_mask(idtcm, regaddr, val)) {
708                 /* Not an output mask, check for pll mask */
709                 err = process_pll_mask(idtcm, regaddr, val, &idtcm->pll_mask);
710         }
711
712         return err;
713 }
714
715 static void display_pll_and_output_masks(struct idtcm *idtcm)
716 {
717         u8 i;
718         u8 mask;
719
720         dev_dbg(&idtcm->client->dev, "pllmask = 0x%02x\n", idtcm->pll_mask);
721
722         for (i = 0; i < MAX_PHC_PLL; i++) {
723                 mask = 1 << i;
724
725                 if (mask & idtcm->pll_mask)
726                         dev_dbg(&idtcm->client->dev,
727                                 "PLL%d output_mask = 0x%04x\n",
728                                 i, idtcm->channel[i].output_mask);
729         }
730 }
731
732 static int idtcm_load_firmware(struct idtcm *idtcm,
733                                struct device *dev)
734 {
735         const struct firmware *fw;
736         struct idtcm_fwrc *rec;
737         u32 regaddr;
738         int err;
739         s32 len;
740         u8 val;
741         u8 loaddr;
742
743         dev_dbg(&idtcm->client->dev, "requesting firmware '%s'\n", FW_FILENAME);
744
745         err = request_firmware(&fw, FW_FILENAME, dev);
746
747         if (err)
748                 return err;
749
750         dev_dbg(&idtcm->client->dev, "firmware size %zu bytes\n", fw->size);
751
752         rec = (struct idtcm_fwrc *) fw->data;
753
754         if (fw->size > 0)
755                 idtcm_state_machine_reset(idtcm);
756
757         for (len = fw->size; len > 0; len -= sizeof(*rec)) {
758
759                 if (rec->reserved) {
760                         dev_err(&idtcm->client->dev,
761                                 "bad firmware, reserved field non-zero\n");
762                         err = -EINVAL;
763                 } else {
764                         regaddr = rec->hiaddr << 8;
765                         regaddr |= rec->loaddr;
766
767                         val = rec->value;
768                         loaddr = rec->loaddr;
769
770                         rec++;
771
772                         err = check_and_set_masks(idtcm, regaddr, val);
773                 }
774
775                 if (err == 0) {
776                         /* Top (status registers) and bottom are read-only */
777                         if ((regaddr < GPIO_USER_CONTROL)
778                             || (regaddr >= SCRATCH))
779                                 continue;
780
781                         /* Page size 128, last 4 bytes of page skipped */
782                         if (((loaddr > 0x7b) && (loaddr <= 0x7f))
783                              || ((loaddr > 0xfb) && (loaddr <= 0xff)))
784                                 continue;
785
786                         err = idtcm_write(idtcm, regaddr, 0, &val, sizeof(val));
787                 }
788
789                 if (err)
790                         goto out;
791         }
792
793         display_pll_and_output_masks(idtcm);
794
795 out:
796         release_firmware(fw);
797         return err;
798 }
799
800 static int idtcm_pps_enable(struct idtcm_channel *channel, bool enable)
801 {
802         struct idtcm *idtcm = channel->idtcm;
803         u32 module;
804         u8 val;
805         int err;
806
807         /*
808          * This assumes that the 1-PPS is on the second of the two
809          * output.  But is this always true?
810          */
811         switch (channel->dpll_n) {
812         case DPLL_0:
813                 module = OUTPUT_1;
814                 break;
815         case DPLL_1:
816                 module = OUTPUT_3;
817                 break;
818         case DPLL_2:
819                 module = OUTPUT_5;
820                 break;
821         case DPLL_3:
822                 module = OUTPUT_7;
823                 break;
824         default:
825                 return -EINVAL;
826         }
827
828         err = idtcm_read(idtcm, module, OUT_CTRL_1, &val, sizeof(val));
829
830         if (err)
831                 return err;
832
833         if (enable)
834                 val |= SQUELCH_DISABLE;
835         else
836                 val &= ~SQUELCH_DISABLE;
837
838         err = idtcm_write(idtcm, module, OUT_CTRL_1, &val, sizeof(val));
839
840         if (err)
841                 return err;
842
843         return 0;
844 }
845
846 static int idtcm_set_pll_mode(struct idtcm_channel *channel,
847                               enum pll_mode pll_mode)
848 {
849         struct idtcm *idtcm = channel->idtcm;
850         int err;
851         u8 dpll_mode;
852
853         err = idtcm_read(idtcm, channel->dpll_n, DPLL_MODE,
854                          &dpll_mode, sizeof(dpll_mode));
855         if (err)
856                 return err;
857
858         dpll_mode &= ~(PLL_MODE_MASK << PLL_MODE_SHIFT);
859
860         dpll_mode |= (pll_mode << PLL_MODE_SHIFT);
861
862         channel->pll_mode = pll_mode;
863
864         err = idtcm_write(idtcm, channel->dpll_n, DPLL_MODE,
865                           &dpll_mode, sizeof(dpll_mode));
866         if (err)
867                 return err;
868
869         return 0;
870 }
871
872 /* PTP Hardware Clock interface */
873
874 static int idtcm_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
875 {
876         struct idtcm_channel *channel =
877                 container_of(ptp, struct idtcm_channel, caps);
878         struct idtcm *idtcm = channel->idtcm;
879         u8 i;
880         bool neg_adj = 0;
881         int err;
882         u8 buf[6] = {0};
883         s64 fcw;
884
885         if (channel->pll_mode  != PLL_MODE_WRITE_FREQUENCY) {
886                 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
887                 if (err)
888                         return err;
889         }
890
891         /*
892          * Frequency Control Word unit is: 1.11 * 10^-10 ppm
893          *
894          * adjfreq:
895          *       ppb * 10^9
896          * FCW = ----------
897          *          111
898          *
899          * adjfine:
900          *       ppm_16 * 5^12
901          * FCW = -------------
902          *         111 * 2^4
903          */
904         if (ppb < 0) {
905                 neg_adj = 1;
906                 ppb = -ppb;
907         }
908
909         /* 2 ^ -53 = 1.1102230246251565404236316680908e-16 */
910         fcw = ppb * 1000000000000ULL;
911
912         fcw = div_u64(fcw, 111022);
913
914         if (neg_adj)
915                 fcw = -fcw;
916
917         for (i = 0; i < 6; i++) {
918                 buf[i] = fcw & 0xff;
919                 fcw >>= 8;
920         }
921
922         mutex_lock(&idtcm->reg_lock);
923
924         err = idtcm_write(idtcm, channel->dpll_freq, DPLL_WR_FREQ,
925                           buf, sizeof(buf));
926
927         mutex_unlock(&idtcm->reg_lock);
928         return err;
929 }
930
931 static int idtcm_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
932 {
933         struct idtcm_channel *channel =
934                 container_of(ptp, struct idtcm_channel, caps);
935         struct idtcm *idtcm = channel->idtcm;
936         int err;
937
938         mutex_lock(&idtcm->reg_lock);
939
940         err = _idtcm_gettime(channel, ts);
941
942         mutex_unlock(&idtcm->reg_lock);
943
944         return err;
945 }
946
947 static int idtcm_settime(struct ptp_clock_info *ptp,
948                          const struct timespec64 *ts)
949 {
950         struct idtcm_channel *channel =
951                 container_of(ptp, struct idtcm_channel, caps);
952         struct idtcm *idtcm = channel->idtcm;
953         int err;
954
955         mutex_lock(&idtcm->reg_lock);
956
957         err = _idtcm_settime(channel, ts, HW_TOD_WR_TRIG_SEL_MSB);
958
959         mutex_unlock(&idtcm->reg_lock);
960
961         return err;
962 }
963
964 static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta)
965 {
966         struct idtcm_channel *channel =
967                 container_of(ptp, struct idtcm_channel, caps);
968         struct idtcm *idtcm = channel->idtcm;
969         int err;
970
971         mutex_lock(&idtcm->reg_lock);
972
973         err = _idtcm_adjtime(channel, delta);
974
975         mutex_unlock(&idtcm->reg_lock);
976
977         return err;
978 }
979
980 static int idtcm_enable(struct ptp_clock_info *ptp,
981                         struct ptp_clock_request *rq, int on)
982 {
983         struct idtcm_channel *channel =
984                 container_of(ptp, struct idtcm_channel, caps);
985
986         switch (rq->type) {
987         case PTP_CLK_REQ_PEROUT:
988                 if (!on)
989                         return idtcm_pps_enable(channel, false);
990
991                 /* Only accept a 1-PPS aligned to the second. */
992                 if (rq->perout.start.nsec || rq->perout.period.sec != 1 ||
993                     rq->perout.period.nsec)
994                         return -ERANGE;
995
996                 return idtcm_pps_enable(channel, true);
997         default:
998                 break;
999         }
1000
1001         return -EOPNOTSUPP;
1002 }
1003
1004 static int idtcm_enable_tod(struct idtcm_channel *channel)
1005 {
1006         struct idtcm *idtcm = channel->idtcm;
1007         struct timespec64 ts = {0, 0};
1008         u8 cfg;
1009         int err;
1010
1011         err = idtcm_pps_enable(channel, false);
1012         if (err)
1013                 return err;
1014
1015         /*
1016          * Start the TOD clock ticking.
1017          */
1018         err = idtcm_read(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1019         if (err)
1020                 return err;
1021
1022         cfg |= TOD_ENABLE;
1023
1024         err = idtcm_write(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1025         if (err)
1026                 return err;
1027
1028         return _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
1029 }
1030
1031 static void idtcm_display_version_info(struct idtcm *idtcm)
1032 {
1033         u8 major;
1034         u8 minor;
1035         u8 hotfix;
1036         u16 product_id;
1037         u8 hw_rev_id;
1038         u8 config_select;
1039         char *fmt = "%d.%d.%d, Id: 0x%04x  HW Rev: %d  OTP Config Select: %d\n";
1040
1041         idtcm_read_major_release(idtcm, &major);
1042         idtcm_read_minor_release(idtcm, &minor);
1043         idtcm_read_hotfix_release(idtcm, &hotfix);
1044
1045         idtcm_read_product_id(idtcm, &product_id);
1046         idtcm_read_hw_rev_id(idtcm, &hw_rev_id);
1047
1048         idtcm_read_otp_scsr_config_select(idtcm, &config_select);
1049
1050         dev_info(&idtcm->client->dev, fmt, major, minor, hotfix,
1051                  product_id, hw_rev_id, config_select);
1052 }
1053
1054 static const struct ptp_clock_info idtcm_caps = {
1055         .owner          = THIS_MODULE,
1056         .max_adj        = 244000,
1057         .n_per_out      = 1,
1058         .adjfreq        = &idtcm_adjfreq,
1059         .adjtime        = &idtcm_adjtime,
1060         .gettime64      = &idtcm_gettime,
1061         .settime64      = &idtcm_settime,
1062         .enable         = &idtcm_enable,
1063 };
1064
1065 static int idtcm_enable_channel(struct idtcm *idtcm, u32 index)
1066 {
1067         struct idtcm_channel *channel;
1068         int err;
1069
1070         if (!(index < MAX_PHC_PLL))
1071                 return -EINVAL;
1072
1073         channel = &idtcm->channel[index];
1074
1075         switch (index) {
1076         case 0:
1077                 channel->dpll_freq = DPLL_FREQ_0;
1078                 channel->dpll_n = DPLL_0;
1079                 channel->tod_read_primary = TOD_READ_PRIMARY_0;
1080                 channel->tod_write = TOD_WRITE_0;
1081                 channel->tod_n = TOD_0;
1082                 channel->hw_dpll_n = HW_DPLL_0;
1083                 channel->dpll_phase = DPLL_PHASE_0;
1084                 channel->dpll_ctrl_n = DPLL_CTRL_0;
1085                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_0;
1086                 break;
1087         case 1:
1088                 channel->dpll_freq = DPLL_FREQ_1;
1089                 channel->dpll_n = DPLL_1;
1090                 channel->tod_read_primary = TOD_READ_PRIMARY_1;
1091                 channel->tod_write = TOD_WRITE_1;
1092                 channel->tod_n = TOD_1;
1093                 channel->hw_dpll_n = HW_DPLL_1;
1094                 channel->dpll_phase = DPLL_PHASE_1;
1095                 channel->dpll_ctrl_n = DPLL_CTRL_1;
1096                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_1;
1097                 break;
1098         case 2:
1099                 channel->dpll_freq = DPLL_FREQ_2;
1100                 channel->dpll_n = DPLL_2;
1101                 channel->tod_read_primary = TOD_READ_PRIMARY_2;
1102                 channel->tod_write = TOD_WRITE_2;
1103                 channel->tod_n = TOD_2;
1104                 channel->hw_dpll_n = HW_DPLL_2;
1105                 channel->dpll_phase = DPLL_PHASE_2;
1106                 channel->dpll_ctrl_n = DPLL_CTRL_2;
1107                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_2;
1108                 break;
1109         case 3:
1110                 channel->dpll_freq = DPLL_FREQ_3;
1111                 channel->dpll_n = DPLL_3;
1112                 channel->tod_read_primary = TOD_READ_PRIMARY_3;
1113                 channel->tod_write = TOD_WRITE_3;
1114                 channel->tod_n = TOD_3;
1115                 channel->hw_dpll_n = HW_DPLL_3;
1116                 channel->dpll_phase = DPLL_PHASE_3;
1117                 channel->dpll_ctrl_n = DPLL_CTRL_3;
1118                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_3;
1119                 break;
1120         default:
1121                 return -EINVAL;
1122         }
1123
1124         channel->idtcm = idtcm;
1125
1126         channel->caps = idtcm_caps;
1127         snprintf(channel->caps.name, sizeof(channel->caps.name),
1128                  "IDT CM PLL%u", index);
1129
1130         err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
1131         if (err)
1132                 return err;
1133
1134         err = idtcm_enable_tod(channel);
1135         if (err)
1136                 return err;
1137
1138         channel->ptp_clock = ptp_clock_register(&channel->caps, NULL);
1139
1140         if (IS_ERR(channel->ptp_clock)) {
1141                 err = PTR_ERR(channel->ptp_clock);
1142                 channel->ptp_clock = NULL;
1143                 return err;
1144         }
1145
1146         if (!channel->ptp_clock)
1147                 return -ENOTSUPP;
1148
1149         dev_info(&idtcm->client->dev, "PLL%d registered as ptp%d\n",
1150                  index, channel->ptp_clock->index);
1151
1152         return 0;
1153 }
1154
1155 static void ptp_clock_unregister_all(struct idtcm *idtcm)
1156 {
1157         u8 i;
1158         struct idtcm_channel *channel;
1159
1160         for (i = 0; i < MAX_PHC_PLL; i++) {
1161
1162                 channel = &idtcm->channel[i];
1163
1164                 if (channel->ptp_clock)
1165                         ptp_clock_unregister(channel->ptp_clock);
1166         }
1167 }
1168
1169 static void set_default_masks(struct idtcm *idtcm)
1170 {
1171         idtcm->pll_mask = DEFAULT_PLL_MASK;
1172
1173         idtcm->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0;
1174         idtcm->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1;
1175         idtcm->channel[2].output_mask = DEFAULT_OUTPUT_MASK_PLL2;
1176         idtcm->channel[3].output_mask = DEFAULT_OUTPUT_MASK_PLL3;
1177 }
1178
1179 static int set_tod_write_overhead(struct idtcm *idtcm)
1180 {
1181         int err;
1182         u8 i;
1183
1184         s64 total_ns = 0;
1185
1186         ktime_t start;
1187         ktime_t stop;
1188
1189         char buf[TOD_BYTE_COUNT];
1190
1191         struct idtcm_channel *channel = &idtcm->channel[2];
1192
1193         /* Set page offset */
1194         idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_OVR__0,
1195                     buf, sizeof(buf));
1196
1197         for (i = 0; i < TOD_WRITE_OVERHEAD_COUNT_MAX; i++) {
1198
1199                 start = ktime_get_raw();
1200
1201                 err = idtcm_write(idtcm, channel->hw_dpll_n,
1202                                   HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
1203
1204                 if (err)
1205                         return err;
1206
1207                 stop = ktime_get_raw();
1208
1209                 total_ns += ktime_to_ns(stop - start);
1210         }
1211
1212         idtcm->tod_write_overhead_ns = div_s64(total_ns,
1213                                                TOD_WRITE_OVERHEAD_COUNT_MAX);
1214
1215         return err;
1216 }
1217
1218 static int idtcm_probe(struct i2c_client *client,
1219                        const struct i2c_device_id *id)
1220 {
1221         struct idtcm *idtcm;
1222         int err;
1223         u8 i;
1224
1225         /* Unused for now */
1226         (void)id;
1227
1228         idtcm = devm_kzalloc(&client->dev, sizeof(struct idtcm), GFP_KERNEL);
1229
1230         if (!idtcm)
1231                 return -ENOMEM;
1232
1233         idtcm->client = client;
1234         idtcm->page_offset = 0xff;
1235         idtcm->calculate_overhead_flag = 0;
1236
1237         set_default_masks(idtcm);
1238
1239         mutex_init(&idtcm->reg_lock);
1240         mutex_lock(&idtcm->reg_lock);
1241
1242         idtcm_display_version_info(idtcm);
1243
1244         err = set_tod_write_overhead(idtcm);
1245
1246         if (err) {
1247                 mutex_unlock(&idtcm->reg_lock);
1248                 return err;
1249         }
1250
1251         err = idtcm_load_firmware(idtcm, &client->dev);
1252
1253         if (err)
1254                 dev_warn(&idtcm->client->dev,
1255                          "loading firmware failed with %d\n", err);
1256
1257         if (idtcm->pll_mask) {
1258                 for (i = 0; i < MAX_PHC_PLL; i++) {
1259                         if (idtcm->pll_mask & (1 << i)) {
1260                                 err = idtcm_enable_channel(idtcm, i);
1261                                 if (err)
1262                                         break;
1263                         }
1264                 }
1265         } else {
1266                 dev_err(&idtcm->client->dev,
1267                         "no PLLs flagged as PHCs, nothing to do\n");
1268                 err = -ENODEV;
1269         }
1270
1271         mutex_unlock(&idtcm->reg_lock);
1272
1273         if (err) {
1274                 ptp_clock_unregister_all(idtcm);
1275                 return err;
1276         }
1277
1278         i2c_set_clientdata(client, idtcm);
1279
1280         return 0;
1281 }
1282
1283 static int idtcm_remove(struct i2c_client *client)
1284 {
1285         struct idtcm *idtcm = i2c_get_clientdata(client);
1286
1287         ptp_clock_unregister_all(idtcm);
1288
1289         mutex_destroy(&idtcm->reg_lock);
1290
1291         return 0;
1292 }
1293
1294 #ifdef CONFIG_OF
1295 static const struct of_device_id idtcm_dt_id[] = {
1296         { .compatible = "idt,8a34000" },
1297         { .compatible = "idt,8a34001" },
1298         { .compatible = "idt,8a34002" },
1299         { .compatible = "idt,8a34003" },
1300         { .compatible = "idt,8a34004" },
1301         { .compatible = "idt,8a34005" },
1302         { .compatible = "idt,8a34006" },
1303         { .compatible = "idt,8a34007" },
1304         { .compatible = "idt,8a34008" },
1305         { .compatible = "idt,8a34009" },
1306         { .compatible = "idt,8a34010" },
1307         { .compatible = "idt,8a34011" },
1308         { .compatible = "idt,8a34012" },
1309         { .compatible = "idt,8a34013" },
1310         { .compatible = "idt,8a34014" },
1311         { .compatible = "idt,8a34015" },
1312         { .compatible = "idt,8a34016" },
1313         { .compatible = "idt,8a34017" },
1314         { .compatible = "idt,8a34018" },
1315         { .compatible = "idt,8a34019" },
1316         { .compatible = "idt,8a34040" },
1317         { .compatible = "idt,8a34041" },
1318         { .compatible = "idt,8a34042" },
1319         { .compatible = "idt,8a34043" },
1320         { .compatible = "idt,8a34044" },
1321         { .compatible = "idt,8a34045" },
1322         { .compatible = "idt,8a34046" },
1323         { .compatible = "idt,8a34047" },
1324         { .compatible = "idt,8a34048" },
1325         { .compatible = "idt,8a34049" },
1326         {},
1327 };
1328 MODULE_DEVICE_TABLE(of, idtcm_dt_id);
1329 #endif
1330
1331 static const struct i2c_device_id idtcm_i2c_id[] = {
1332         { "8a34000" },
1333         { "8a34001" },
1334         { "8a34002" },
1335         { "8a34003" },
1336         { "8a34004" },
1337         { "8a34005" },
1338         { "8a34006" },
1339         { "8a34007" },
1340         { "8a34008" },
1341         { "8a34009" },
1342         { "8a34010" },
1343         { "8a34011" },
1344         { "8a34012" },
1345         { "8a34013" },
1346         { "8a34014" },
1347         { "8a34015" },
1348         { "8a34016" },
1349         { "8a34017" },
1350         { "8a34018" },
1351         { "8a34019" },
1352         { "8a34040" },
1353         { "8a34041" },
1354         { "8a34042" },
1355         { "8a34043" },
1356         { "8a34044" },
1357         { "8a34045" },
1358         { "8a34046" },
1359         { "8a34047" },
1360         { "8a34048" },
1361         { "8a34049" },
1362         {},
1363 };
1364 MODULE_DEVICE_TABLE(i2c, idtcm_i2c_id);
1365
1366 static struct i2c_driver idtcm_driver = {
1367         .driver = {
1368                 .of_match_table = of_match_ptr(idtcm_dt_id),
1369                 .name           = "idtcm",
1370         },
1371         .probe          = idtcm_probe,
1372         .remove         = idtcm_remove,
1373         .id_table       = idtcm_i2c_id,
1374 };
1375
1376 module_i2c_driver(idtcm_driver);