xref: /linux/drivers/dpll/zl3073x/core.c (revision 9e4e86a604dfd06402933467578c4b79f5412b2c)
1 // SPDX-License-Identifier: GPL-2.0-only
2 
3 #include <linux/array_size.h>
4 #include <linux/bitfield.h>
5 #include <linux/bits.h>
6 #include <linux/dev_printk.h>
7 #include <linux/device.h>
8 #include <linux/export.h>
9 #include <linux/math64.h>
10 #include <linux/module.h>
11 #include <linux/netlink.h>
12 #include <linux/regmap.h>
13 #include <linux/sprintf.h>
14 #include <linux/string_choices.h>
15 #include <linux/unaligned.h>
16 #include <net/devlink.h>
17 
18 #include "core.h"
19 #include "devlink.h"
20 #include "dpll.h"
21 #include "regs.h"
22 
23 #define ZL_CHIP_INFO(_id, _nchannels, _flags)				\
24 	{ .id = (_id), .num_channels = (_nchannels), .flags = (_flags) }
25 
26 static const struct zl3073x_chip_info zl3073x_chip_ids[] = {
27 	ZL_CHIP_INFO(0x0E30, 2, ZL3073X_FLAG_REF_PHASE_COMP_32),
28 	ZL_CHIP_INFO(0x0E93, 1, ZL3073X_FLAG_REF_PHASE_COMP_32),
29 	ZL_CHIP_INFO(0x0E94, 2, ZL3073X_FLAG_REF_PHASE_COMP_32),
30 	ZL_CHIP_INFO(0x0E95, 3, ZL3073X_FLAG_REF_PHASE_COMP_32),
31 	ZL_CHIP_INFO(0x0E96, 4, ZL3073X_FLAG_REF_PHASE_COMP_32),
32 	ZL_CHIP_INFO(0x0E97, 5, ZL3073X_FLAG_REF_PHASE_COMP_32),
33 	ZL_CHIP_INFO(0x1E93, 1, ZL3073X_FLAG_DIE_TEMP),
34 	ZL_CHIP_INFO(0x1E94, 2, ZL3073X_FLAG_DIE_TEMP),
35 	ZL_CHIP_INFO(0x1E95, 3, ZL3073X_FLAG_DIE_TEMP),
36 	ZL_CHIP_INFO(0x1E96, 4, ZL3073X_FLAG_DIE_TEMP),
37 	ZL_CHIP_INFO(0x1E97, 5, ZL3073X_FLAG_DIE_TEMP),
38 	ZL_CHIP_INFO(0x1F60, 2, ZL3073X_FLAG_REF_PHASE_COMP_32),
39 	ZL_CHIP_INFO(0x2E93, 1, ZL3073X_FLAG_DIE_TEMP),
40 	ZL_CHIP_INFO(0x2E94, 2, ZL3073X_FLAG_DIE_TEMP),
41 	ZL_CHIP_INFO(0x2E95, 3, ZL3073X_FLAG_DIE_TEMP),
42 	ZL_CHIP_INFO(0x2E96, 4, ZL3073X_FLAG_DIE_TEMP),
43 	ZL_CHIP_INFO(0x2E97, 5, ZL3073X_FLAG_DIE_TEMP),
44 	ZL_CHIP_INFO(0x3FC4, 2, ZL3073X_FLAG_DIE_TEMP),
45 };
46 
47 #define ZL_RANGE_OFFSET		0x80
48 #define ZL_PAGE_SIZE		0x80
49 #define ZL_NUM_PAGES		256
50 #define ZL_PAGE_SEL		0x7F
51 #define ZL_PAGE_SEL_MASK	GENMASK(7, 0)
52 #define ZL_NUM_REGS		(ZL_NUM_PAGES * ZL_PAGE_SIZE)
53 
54 /* Regmap range configuration */
55 static const struct regmap_range_cfg zl3073x_regmap_range = {
56 	.range_min	= ZL_RANGE_OFFSET,
57 	.range_max	= ZL_RANGE_OFFSET + ZL_NUM_REGS - 1,
58 	.selector_reg	= ZL_PAGE_SEL,
59 	.selector_mask	= ZL_PAGE_SEL_MASK,
60 	.selector_shift	= 0,
61 	.window_start	= 0,
62 	.window_len	= ZL_PAGE_SIZE,
63 };
64 
65 static bool
zl3073x_is_volatile_reg(struct device * dev __maybe_unused,unsigned int reg)66 zl3073x_is_volatile_reg(struct device *dev __maybe_unused, unsigned int reg)
67 {
68 	/* Only page selector is non-volatile */
69 	return reg != ZL_PAGE_SEL;
70 }
71 
72 const struct regmap_config zl3073x_regmap_config = {
73 	.reg_bits	= 8,
74 	.val_bits	= 8,
75 	.max_register	= ZL_RANGE_OFFSET + ZL_NUM_REGS - 1,
76 	.ranges		= &zl3073x_regmap_range,
77 	.num_ranges	= 1,
78 	.cache_type	= REGCACHE_MAPLE,
79 	.volatile_reg	= zl3073x_is_volatile_reg,
80 };
81 EXPORT_SYMBOL_NS_GPL(zl3073x_regmap_config, "ZL3073X");
82 
83 static bool
zl3073x_check_reg(struct zl3073x_dev * zldev,unsigned int reg,size_t size)84 zl3073x_check_reg(struct zl3073x_dev *zldev, unsigned int reg, size_t size)
85 {
86 	/* Check that multiop lock is held when accessing registers
87 	 * from page 10 and above except the page 255 that does not
88 	 * need this protection.
89 	 */
90 	if (ZL_REG_PAGE(reg) >= 10 && ZL_REG_PAGE(reg) < 255)
91 		lockdep_assert_held(&zldev->multiop_lock);
92 
93 	/* Check the index is in valid range for indexed register */
94 	if (ZL_REG_OFFSET(reg) > ZL_REG_MAX_OFFSET(reg)) {
95 		dev_err(zldev->dev, "Index out of range for reg 0x%04lx\n",
96 			ZL_REG_ADDR(reg));
97 		return false;
98 	}
99 	/* Check the requested size corresponds to register size */
100 	if (ZL_REG_SIZE(reg) != size) {
101 		dev_err(zldev->dev, "Invalid size %zu for reg 0x%04lx\n",
102 			size, ZL_REG_ADDR(reg));
103 		return false;
104 	}
105 
106 	return true;
107 }
108 
109 static int
zl3073x_read_reg(struct zl3073x_dev * zldev,unsigned int reg,void * val,size_t size)110 zl3073x_read_reg(struct zl3073x_dev *zldev, unsigned int reg, void *val,
111 		 size_t size)
112 {
113 	int rc;
114 
115 	if (!zl3073x_check_reg(zldev, reg, size))
116 		return -EINVAL;
117 
118 	/* Map the register address to virtual range */
119 	reg = ZL_REG_ADDR(reg) + ZL_RANGE_OFFSET;
120 
121 	rc = regmap_bulk_read(zldev->regmap, reg, val, size);
122 	if (rc) {
123 		dev_err(zldev->dev, "Failed to read reg 0x%04x: %pe\n", reg,
124 			ERR_PTR(rc));
125 		return rc;
126 	}
127 
128 	return 0;
129 }
130 
131 static int
zl3073x_write_reg(struct zl3073x_dev * zldev,unsigned int reg,const void * val,size_t size)132 zl3073x_write_reg(struct zl3073x_dev *zldev, unsigned int reg, const void *val,
133 		  size_t size)
134 {
135 	int rc;
136 
137 	if (!zl3073x_check_reg(zldev, reg, size))
138 		return -EINVAL;
139 
140 	/* Map the register address to virtual range */
141 	reg = ZL_REG_ADDR(reg) + ZL_RANGE_OFFSET;
142 
143 	rc = regmap_bulk_write(zldev->regmap, reg, val, size);
144 	if (rc) {
145 		dev_err(zldev->dev, "Failed to write reg 0x%04x: %pe\n", reg,
146 			ERR_PTR(rc));
147 		return rc;
148 	}
149 
150 	return 0;
151 }
152 
153 /**
154  * zl3073x_read_u8 - read value from 8bit register
155  * @zldev: zl3073x device pointer
156  * @reg: register to write to
157  * @val: value to write
158  *
159  * Reads value from given 8bit register.
160  *
161  * Returns: 0 on success, <0 on error
162  */
zl3073x_read_u8(struct zl3073x_dev * zldev,unsigned int reg,u8 * val)163 int zl3073x_read_u8(struct zl3073x_dev *zldev, unsigned int reg, u8 *val)
164 {
165 	return zl3073x_read_reg(zldev, reg, val, sizeof(*val));
166 }
167 
168 /**
169  * zl3073x_write_u8 - write value to 16bit register
170  * @zldev: zl3073x device pointer
171  * @reg: register to write to
172  * @val: value to write
173  *
174  * Writes value into given 8bit register.
175  *
176  * Returns: 0 on success, <0 on error
177  */
zl3073x_write_u8(struct zl3073x_dev * zldev,unsigned int reg,u8 val)178 int zl3073x_write_u8(struct zl3073x_dev *zldev, unsigned int reg, u8 val)
179 {
180 	return zl3073x_write_reg(zldev, reg, &val, sizeof(val));
181 }
182 
183 /**
184  * zl3073x_read_u16 - read value from 16bit register
185  * @zldev: zl3073x device pointer
186  * @reg: register to write to
187  * @val: value to write
188  *
189  * Reads value from given 16bit register.
190  *
191  * Returns: 0 on success, <0 on error
192  */
zl3073x_read_u16(struct zl3073x_dev * zldev,unsigned int reg,u16 * val)193 int zl3073x_read_u16(struct zl3073x_dev *zldev, unsigned int reg, u16 *val)
194 {
195 	int rc;
196 
197 	rc = zl3073x_read_reg(zldev, reg, val, sizeof(*val));
198 	if (!rc)
199 		be16_to_cpus(val);
200 
201 	return rc;
202 }
203 
204 /**
205  * zl3073x_write_u16 - write value to 16bit register
206  * @zldev: zl3073x device pointer
207  * @reg: register to write to
208  * @val: value to write
209  *
210  * Writes value into given 16bit register.
211  *
212  * Returns: 0 on success, <0 on error
213  */
zl3073x_write_u16(struct zl3073x_dev * zldev,unsigned int reg,u16 val)214 int zl3073x_write_u16(struct zl3073x_dev *zldev, unsigned int reg, u16 val)
215 {
216 	cpu_to_be16s(&val);
217 
218 	return zl3073x_write_reg(zldev, reg, &val, sizeof(val));
219 }
220 
221 /**
222  * zl3073x_read_u32 - read value from 32bit register
223  * @zldev: zl3073x device pointer
224  * @reg: register to write to
225  * @val: value to write
226  *
227  * Reads value from given 32bit register.
228  *
229  * Returns: 0 on success, <0 on error
230  */
zl3073x_read_u32(struct zl3073x_dev * zldev,unsigned int reg,u32 * val)231 int zl3073x_read_u32(struct zl3073x_dev *zldev, unsigned int reg, u32 *val)
232 {
233 	int rc;
234 
235 	rc = zl3073x_read_reg(zldev, reg, val, sizeof(*val));
236 	if (!rc)
237 		be32_to_cpus(val);
238 
239 	return rc;
240 }
241 
242 /**
243  * zl3073x_write_u32 - write value to 32bit register
244  * @zldev: zl3073x device pointer
245  * @reg: register to write to
246  * @val: value to write
247  *
248  * Writes value into given 32bit register.
249  *
250  * Returns: 0 on success, <0 on error
251  */
zl3073x_write_u32(struct zl3073x_dev * zldev,unsigned int reg,u32 val)252 int zl3073x_write_u32(struct zl3073x_dev *zldev, unsigned int reg, u32 val)
253 {
254 	cpu_to_be32s(&val);
255 
256 	return zl3073x_write_reg(zldev, reg, &val, sizeof(val));
257 }
258 
259 /**
260  * zl3073x_read_u48 - read value from 48bit register
261  * @zldev: zl3073x device pointer
262  * @reg: register to write to
263  * @val: value to write
264  *
265  * Reads value from given 48bit register.
266  *
267  * Returns: 0 on success, <0 on error
268  */
zl3073x_read_u48(struct zl3073x_dev * zldev,unsigned int reg,u64 * val)269 int zl3073x_read_u48(struct zl3073x_dev *zldev, unsigned int reg, u64 *val)
270 {
271 	u8 buf[6];
272 	int rc;
273 
274 	rc = zl3073x_read_reg(zldev, reg, buf, sizeof(buf));
275 	if (!rc)
276 		*val = get_unaligned_be48(buf);
277 
278 	return rc;
279 }
280 
281 /**
282  * zl3073x_write_u48 - write value to 48bit register
283  * @zldev: zl3073x device pointer
284  * @reg: register to write to
285  * @val: value to write
286  *
287  * Writes value into given 48bit register.
288  * The value must be from the interval -S48_MIN to U48_MAX.
289  *
290  * Returns: 0 on success, <0 on error
291  */
zl3073x_write_u48(struct zl3073x_dev * zldev,unsigned int reg,u64 val)292 int zl3073x_write_u48(struct zl3073x_dev *zldev, unsigned int reg, u64 val)
293 {
294 	u8 buf[6];
295 
296 	/* Check the value belongs to <S48_MIN, U48_MAX>
297 	 * Any value >= S48_MIN has bits 47..63 set.
298 	 */
299 	if (val > GENMASK_ULL(47, 0) && val < GENMASK_ULL(63, 47)) {
300 		dev_err(zldev->dev, "Value 0x%0llx out of range\n", val);
301 		return -EINVAL;
302 	}
303 
304 	put_unaligned_be48(val, buf);
305 
306 	return zl3073x_write_reg(zldev, reg, buf, sizeof(buf));
307 }
308 
309 /**
310  * zl3073x_poll_zero_u8 - wait for register to be cleared by device
311  * @zldev: zl3073x device pointer
312  * @reg: register to poll (has to be 8bit register)
313  * @mask: bit mask for polling
314  *
315  * Waits for bits specified by @mask in register @reg value to be cleared
316  * by the device.
317  *
318  * Returns: 0 on success, <0 on error
319  */
zl3073x_poll_zero_u8(struct zl3073x_dev * zldev,unsigned int reg,u8 mask)320 int zl3073x_poll_zero_u8(struct zl3073x_dev *zldev, unsigned int reg, u8 mask)
321 {
322 	/* Register polling sleep & timeout */
323 #define ZL_POLL_SLEEP_US   10
324 #define ZL_POLL_TIMEOUT_US 2000000
325 	unsigned int val;
326 
327 	/* Check the register is 8bit */
328 	if (ZL_REG_SIZE(reg) != 1) {
329 		dev_err(zldev->dev, "Invalid reg 0x%04lx size for polling\n",
330 			ZL_REG_ADDR(reg));
331 		return -EINVAL;
332 	}
333 
334 	/* Map the register address to virtual range */
335 	reg = ZL_REG_ADDR(reg) + ZL_RANGE_OFFSET;
336 
337 	return regmap_read_poll_timeout(zldev->regmap, reg, val, !(val & mask),
338 					ZL_POLL_SLEEP_US, ZL_POLL_TIMEOUT_US);
339 }
340 
zl3073x_mb_op(struct zl3073x_dev * zldev,unsigned int op_reg,u8 op_val,unsigned int mask_reg,u16 mask_val)341 int zl3073x_mb_op(struct zl3073x_dev *zldev, unsigned int op_reg, u8 op_val,
342 		  unsigned int mask_reg, u16 mask_val)
343 {
344 	int rc;
345 
346 	/* Set mask for the operation */
347 	rc = zl3073x_write_u16(zldev, mask_reg, mask_val);
348 	if (rc)
349 		return rc;
350 
351 	/* Trigger the operation */
352 	rc = zl3073x_write_u8(zldev, op_reg, op_val);
353 	if (rc)
354 		return rc;
355 
356 	/* Wait for the operation to actually finish */
357 	return zl3073x_poll_zero_u8(zldev, op_reg, op_val);
358 }
359 
360 /**
361  * zl3073x_do_hwreg_op - Perform HW register read/write operation
362  * @zldev: zl3073x device pointer
363  * @op: operation to perform
364  *
365  * Performs requested operation and waits for its completion.
366  *
367  * Return: 0 on success, <0 on error
368  */
369 static int
zl3073x_do_hwreg_op(struct zl3073x_dev * zldev,u8 op)370 zl3073x_do_hwreg_op(struct zl3073x_dev *zldev, u8 op)
371 {
372 	int rc;
373 
374 	/* Set requested operation and set pending bit */
375 	rc = zl3073x_write_u8(zldev, ZL_REG_HWREG_OP, op | ZL_HWREG_OP_PENDING);
376 	if (rc)
377 		return rc;
378 
379 	/* Poll for completion - pending bit cleared */
380 	return zl3073x_poll_zero_u8(zldev, ZL_REG_HWREG_OP,
381 				    ZL_HWREG_OP_PENDING);
382 }
383 
384 /**
385  * zl3073x_read_hwreg - Read HW register
386  * @zldev: zl3073x device pointer
387  * @addr: HW register address
388  * @value: Value of the HW register
389  *
390  * Reads HW register value and stores it into @value.
391  *
392  * Return: 0 on success, <0 on error
393  */
zl3073x_read_hwreg(struct zl3073x_dev * zldev,u32 addr,u32 * value)394 int zl3073x_read_hwreg(struct zl3073x_dev *zldev, u32 addr, u32 *value)
395 {
396 	int rc;
397 
398 	/* Set address to read data from */
399 	rc = zl3073x_write_u32(zldev, ZL_REG_HWREG_ADDR, addr);
400 	if (rc)
401 		return rc;
402 
403 	/* Perform the read operation */
404 	rc = zl3073x_do_hwreg_op(zldev, ZL_HWREG_OP_READ);
405 	if (rc)
406 		return rc;
407 
408 	/* Read the received data */
409 	return zl3073x_read_u32(zldev, ZL_REG_HWREG_READ_DATA, value);
410 }
411 
412 /**
413  * zl3073x_write_hwreg - Write value to HW register
414  * @zldev: zl3073x device pointer
415  * @addr: HW registers address
416  * @value: Value to be written to HW register
417  *
418  * Stores the requested value into HW register.
419  *
420  * Return: 0 on success, <0 on error
421  */
zl3073x_write_hwreg(struct zl3073x_dev * zldev,u32 addr,u32 value)422 int zl3073x_write_hwreg(struct zl3073x_dev *zldev, u32 addr, u32 value)
423 {
424 	int rc;
425 
426 	/* Set address to write data to */
427 	rc = zl3073x_write_u32(zldev, ZL_REG_HWREG_ADDR, addr);
428 	if (rc)
429 		return rc;
430 
431 	/* Set data to be written */
432 	rc = zl3073x_write_u32(zldev, ZL_REG_HWREG_WRITE_DATA, value);
433 	if (rc)
434 		return rc;
435 
436 	/* Perform the write operation */
437 	return zl3073x_do_hwreg_op(zldev, ZL_HWREG_OP_WRITE);
438 }
439 
440 /**
441  * zl3073x_update_hwreg - Update certain bits in HW register
442  * @zldev: zl3073x device pointer
443  * @addr: HW register address
444  * @value: Value to be written into HW register
445  * @mask: Bitmask indicating bits to be updated
446  *
447  * Reads given HW register, updates requested bits specified by value and
448  * mask and writes result back to HW register.
449  *
450  * Return: 0 on success, <0 on error
451  */
zl3073x_update_hwreg(struct zl3073x_dev * zldev,u32 addr,u32 value,u32 mask)452 int zl3073x_update_hwreg(struct zl3073x_dev *zldev, u32 addr, u32 value,
453 			 u32 mask)
454 {
455 	u32 tmp;
456 	int rc;
457 
458 	rc = zl3073x_read_hwreg(zldev, addr, &tmp);
459 	if (rc)
460 		return rc;
461 
462 	tmp &= ~mask;
463 	tmp |= value & mask;
464 
465 	return zl3073x_write_hwreg(zldev, addr, tmp);
466 }
467 
468 /**
469  * zl3073x_write_hwreg_seq - Write HW registers sequence
470  * @zldev: pointer to device structure
471  * @seq: pointer to first sequence item
472  * @num_items: number of items in sequence
473  *
474  * Writes given HW registers sequence.
475  *
476  * Return: 0 on success, <0 on error
477  */
zl3073x_write_hwreg_seq(struct zl3073x_dev * zldev,const struct zl3073x_hwreg_seq_item * seq,size_t num_items)478 int zl3073x_write_hwreg_seq(struct zl3073x_dev *zldev,
479 			    const struct zl3073x_hwreg_seq_item *seq,
480 			    size_t num_items)
481 {
482 	int i, rc = 0;
483 
484 	for (i = 0; i < num_items; i++) {
485 		dev_dbg(zldev->dev, "Write 0x%0x [0x%0x] to 0x%0x",
486 			seq[i].value, seq[i].mask, seq[i].addr);
487 
488 		if (seq[i].mask == U32_MAX)
489 			/* Write value directly */
490 			rc = zl3073x_write_hwreg(zldev, seq[i].addr,
491 						 seq[i].value);
492 		else
493 			/* Update only bits specified by the mask */
494 			rc = zl3073x_update_hwreg(zldev, seq[i].addr,
495 						  seq[i].value, seq[i].mask);
496 		if (rc)
497 			return rc;
498 
499 		if (seq->wait)
500 			msleep(seq->wait);
501 	}
502 
503 	return rc;
504 }
505 
506 static int
zl3073x_dev_state_fetch(struct zl3073x_dev * zldev)507 zl3073x_dev_state_fetch(struct zl3073x_dev *zldev)
508 {
509 	int rc;
510 	u8 i;
511 
512 	for (i = 0; i < ZL3073X_NUM_REFS; i++) {
513 		rc = zl3073x_ref_state_fetch(zldev, i);
514 		if (rc) {
515 			dev_err(zldev->dev,
516 				"Failed to fetch input state: %pe\n",
517 				ERR_PTR(rc));
518 			return rc;
519 		}
520 	}
521 
522 	for (i = 0; i < ZL3073X_NUM_SYNTHS; i++) {
523 		rc = zl3073x_synth_state_fetch(zldev, i);
524 		if (rc) {
525 			dev_err(zldev->dev,
526 				"Failed to fetch synth state: %pe\n",
527 				ERR_PTR(rc));
528 			return rc;
529 		}
530 	}
531 
532 	for (i = 0; i < ZL3073X_NUM_OUTS; i++) {
533 		rc = zl3073x_out_state_fetch(zldev, i);
534 		if (rc) {
535 			dev_err(zldev->dev,
536 				"Failed to fetch output state: %pe\n",
537 				ERR_PTR(rc));
538 			return rc;
539 		}
540 	}
541 
542 	for (i = 0; i < zldev->info->num_channels; i++) {
543 		rc = zl3073x_chan_state_fetch(zldev, i);
544 		if (rc) {
545 			dev_err(zldev->dev,
546 				"Failed to fetch channel state: %pe\n",
547 				ERR_PTR(rc));
548 			return rc;
549 		}
550 	}
551 
552 	return rc;
553 }
554 
555 static void
zl3073x_dev_ref_states_update(struct zl3073x_dev * zldev)556 zl3073x_dev_ref_states_update(struct zl3073x_dev *zldev)
557 {
558 	int i, rc;
559 
560 	for (i = 0; i < ZL3073X_NUM_REFS; i++) {
561 		rc = zl3073x_ref_state_update(zldev, i);
562 		if (rc)
563 			dev_warn(zldev->dev,
564 				 "Failed to get REF%u status: %pe\n", i,
565 				 ERR_PTR(rc));
566 	}
567 }
568 
569 static void
zl3073x_dev_chan_states_update(struct zl3073x_dev * zldev)570 zl3073x_dev_chan_states_update(struct zl3073x_dev *zldev)
571 {
572 	int i, rc;
573 
574 	for (i = 0; i < zldev->info->num_channels; i++) {
575 		rc = zl3073x_chan_state_update(zldev, i);
576 		if (rc)
577 			dev_warn(zldev->dev,
578 				 "Failed to get DPLL%u state: %pe\n", i,
579 				 ERR_PTR(rc));
580 	}
581 }
582 
583 /**
584  * zl3073x_ref_phase_offsets_update - update reference phase offsets
585  * @zldev: pointer to zl3073x_dev structure
586  * @channel: DPLL channel number or -1
587  *
588  * The function asks device to update phase offsets latch registers with
589  * the latest measured values. There are 2 sets of latch registers:
590  *
591  * 1) Up to 5 DPLL-to-connected-ref registers that contain phase offset
592  *    values between particular DPLL channel and its *connected* input
593  *    reference.
594  *
595  * 2) 10 selected-DPLL-to-all-ref registers that contain phase offset values
596  *    between selected DPLL channel and all input references.
597  *
598  * If the caller is interested in 2) then it has to pass DPLL channel number
599  * in @channel parameter. If it is interested only in 1) then it should pass
600  * @channel parameter with value of -1.
601  *
602  * Return: 0 on success, <0 on error
603  */
zl3073x_ref_phase_offsets_update(struct zl3073x_dev * zldev,int channel)604 int zl3073x_ref_phase_offsets_update(struct zl3073x_dev *zldev, int channel)
605 {
606 	int rc;
607 
608 	/* Per datasheet we have to wait for 'dpll_ref_phase_err_rqst_rd'
609 	 * to be zero to ensure that the measured data are coherent.
610 	 */
611 	rc = zl3073x_poll_zero_u8(zldev, ZL_REG_REF_PHASE_ERR_READ_RQST,
612 				  ZL_REF_PHASE_ERR_READ_RQST_RD);
613 	if (rc)
614 		return rc;
615 
616 	/* Select DPLL channel if it is specified */
617 	if (channel != -1) {
618 		rc = zl3073x_write_u8(zldev, ZL_REG_DPLL_MEAS_IDX, channel);
619 		if (rc)
620 			return rc;
621 	}
622 
623 	/* Request to update phase offsets measurement values */
624 	rc = zl3073x_write_u8(zldev, ZL_REG_REF_PHASE_ERR_READ_RQST,
625 			      ZL_REF_PHASE_ERR_READ_RQST_RD);
626 	if (rc)
627 		return rc;
628 
629 	/* Wait for finish */
630 	return zl3073x_poll_zero_u8(zldev, ZL_REG_REF_PHASE_ERR_READ_RQST,
631 				    ZL_REF_PHASE_ERR_READ_RQST_RD);
632 }
633 
634 /**
635  * zl3073x_ref_freq_meas_latch - latch reference frequency measurements
636  * @zldev: pointer to zl3073x_dev structure
637  * @type: measurement type (ZL_REF_FREQ_MEAS_CTRL_*)
638  *
639  * The function waits for the previous measurement to finish, selects all
640  * references and requests a new measurement of the given type.
641  *
642  * Return: 0 on success, <0 on error
643  */
644 static int
zl3073x_ref_freq_meas_latch(struct zl3073x_dev * zldev,u8 type)645 zl3073x_ref_freq_meas_latch(struct zl3073x_dev *zldev, u8 type)
646 {
647 	int rc;
648 
649 	/* Wait for previous measurement to finish */
650 	rc = zl3073x_poll_zero_u8(zldev, ZL_REG_REF_FREQ_MEAS_CTRL,
651 				  ZL_REF_FREQ_MEAS_CTRL);
652 	if (rc)
653 		return rc;
654 
655 	/* Select all references for measurement */
656 	rc = zl3073x_write_u8(zldev, ZL_REG_REF_FREQ_MEAS_MASK_3_0,
657 			      GENMASK(7, 0)); /* REF0P..REF3N */
658 	if (rc)
659 		return rc;
660 	rc = zl3073x_write_u8(zldev, ZL_REG_REF_FREQ_MEAS_MASK_4,
661 			      GENMASK(1, 0)); /* REF4P..REF4N */
662 	if (rc)
663 		return rc;
664 
665 	/* Request measurement */
666 	rc = zl3073x_write_u8(zldev, ZL_REG_REF_FREQ_MEAS_CTRL, type);
667 	if (rc)
668 		return rc;
669 
670 	/* Wait for finish */
671 	return zl3073x_poll_zero_u8(zldev, ZL_REG_REF_FREQ_MEAS_CTRL,
672 				    ZL_REF_FREQ_MEAS_CTRL);
673 }
674 
675 /**
676  * zl3073x_ref_freq_meas_update - update measured input reference frequencies
677  * @zldev: pointer to zl3073x_dev structure
678  *
679  * The function asks device to latch measured input reference frequencies
680  * and stores the results in the ref state.
681  *
682  * Return: 0 on success, <0 on error
683  */
684 static int
zl3073x_ref_freq_meas_update(struct zl3073x_dev * zldev)685 zl3073x_ref_freq_meas_update(struct zl3073x_dev *zldev)
686 {
687 	int i, rc;
688 
689 	rc = zl3073x_ref_freq_meas_latch(zldev, ZL_REF_FREQ_MEAS_CTRL_REF_FREQ);
690 	if (rc)
691 		return rc;
692 
693 	/* Read measured frequencies in Hz (unsigned 32-bit, LSB = 1 Hz) */
694 	for (i = 0; i < ZL3073X_NUM_REFS; i++) {
695 		u32 value;
696 
697 		rc = zl3073x_read_u32(zldev, ZL_REG_REF_FREQ(i), &value);
698 		if (rc)
699 			return rc;
700 
701 		zldev->ref[i].meas_freq = value;
702 	}
703 
704 	return 0;
705 }
706 
707 /**
708  * zl3073x_ref_ffo_update - update reference fractional frequency offsets
709  * @zldev: pointer to zl3073x_dev structure
710  *
711  * The function asks device to latch the latest measured fractional
712  * frequency offset values, reads and stores them into the ref state.
713  *
714  * Return: 0 on success, <0 on error
715  */
716 static int
zl3073x_ref_ffo_update(struct zl3073x_dev * zldev)717 zl3073x_ref_ffo_update(struct zl3073x_dev *zldev)
718 {
719 	int i, rc;
720 
721 	rc = zl3073x_ref_freq_meas_latch(zldev,
722 					 ZL_REF_FREQ_MEAS_CTRL_REF_FREQ_OFF);
723 	if (rc)
724 		return rc;
725 
726 	/* Read DPLL-to-REFx frequency offset measurements */
727 	for (i = 0; i < ZL3073X_NUM_REFS; i++) {
728 		s32 value;
729 
730 		/* Read value stored in units of 2^-32 signed */
731 		rc = zl3073x_read_u32(zldev, ZL_REG_REF_FREQ(i), &value);
732 		if (rc)
733 			return rc;
734 
735 		/* Convert to ppt
736 		 * ffo = (10^12 * value) / 2^32
737 		 * ffo = ( 5^12 * value) / 2^20
738 		 */
739 		zldev->ref[i].ffo = mul_s64_u64_shr(value, 244140625, 20);
740 	}
741 
742 	return 0;
743 }
744 
745 static void
zl3073x_dev_periodic_work(struct kthread_work * work)746 zl3073x_dev_periodic_work(struct kthread_work *work)
747 {
748 	struct zl3073x_dev *zldev = container_of(work, struct zl3073x_dev,
749 						 work.work);
750 	struct zl3073x_dpll *zldpll;
751 	int rc;
752 
753 	/* Update input references' states */
754 	zl3073x_dev_ref_states_update(zldev);
755 
756 	/* Update DPLL channels' states */
757 	zl3073x_dev_chan_states_update(zldev);
758 
759 	/* Update DPLL-to-connected-ref phase offsets registers */
760 	rc = zl3073x_ref_phase_offsets_update(zldev, -1);
761 	if (rc)
762 		dev_warn(zldev->dev, "Failed to update phase offsets: %pe\n",
763 			 ERR_PTR(rc));
764 
765 	/* Update measured input reference frequencies if any DPLL has
766 	 * frequency monitoring enabled.
767 	 */
768 	list_for_each_entry(zldpll, &zldev->dplls, list) {
769 		if (zldpll->freq_monitor) {
770 			rc = zl3073x_ref_freq_meas_update(zldev);
771 			if (rc)
772 				dev_warn(zldev->dev,
773 					 "Failed to update measured frequencies: %pe\n",
774 					 ERR_PTR(rc));
775 			break;
776 		}
777 	}
778 
779 	/* Update references' fractional frequency offsets */
780 	rc = zl3073x_ref_ffo_update(zldev);
781 	if (rc)
782 		dev_warn(zldev->dev,
783 			 "Failed to update fractional frequency offsets: %pe\n",
784 			 ERR_PTR(rc));
785 
786 	list_for_each_entry(zldpll, &zldev->dplls, list)
787 		zl3073x_dpll_changes_check(zldpll);
788 
789 	/* Run twice a second */
790 	kthread_queue_delayed_work(zldev->kworker, &zldev->work,
791 				   msecs_to_jiffies(500));
792 }
793 
zl3073x_dev_phase_avg_factor_set(struct zl3073x_dev * zldev,u8 factor)794 int zl3073x_dev_phase_avg_factor_set(struct zl3073x_dev *zldev, u8 factor)
795 {
796 	u8 dpll_meas_ctrl, value;
797 	int rc;
798 
799 	/* Read DPLL phase measurement control register */
800 	rc = zl3073x_read_u8(zldev, ZL_REG_DPLL_MEAS_CTRL, &dpll_meas_ctrl);
801 	if (rc)
802 		return rc;
803 
804 	/* Convert requested factor to register value */
805 	value = (factor + 1) & 0x0f;
806 
807 	/* Update phase measurement control register */
808 	FIELD_MODIFY(ZL_DPLL_MEAS_CTRL_AVG_FACTOR, &dpll_meas_ctrl, value);
809 	rc = zl3073x_write_u8(zldev, ZL_REG_DPLL_MEAS_CTRL, dpll_meas_ctrl);
810 	if (rc)
811 		return rc;
812 
813 	/* Save the new factor */
814 	zldev->phase_avg_factor = factor;
815 
816 	return 0;
817 }
818 
819 /**
820  * zl3073x_dev_phase_meas_setup - setup phase offset measurement
821  * @zldev: pointer to zl3073x_dev structure
822  *
823  * Enable phase offset measurement block, set measurement averaging factor
824  * and enable DPLL-to-its-ref phase measurement for all DPLLs.
825  *
826  * Returns: 0 on success, <0 on error
827  */
828 static int
zl3073x_dev_phase_meas_setup(struct zl3073x_dev * zldev)829 zl3073x_dev_phase_meas_setup(struct zl3073x_dev *zldev)
830 {
831 	struct zl3073x_dpll *zldpll;
832 	u8 dpll_meas_ctrl, mask = 0;
833 	int rc;
834 
835 	/* Setup phase measurement averaging factor */
836 	rc = zl3073x_dev_phase_avg_factor_set(zldev, zldev->phase_avg_factor);
837 	if (rc)
838 		return rc;
839 
840 	/* Read DPLL phase measurement control register */
841 	rc = zl3073x_read_u8(zldev, ZL_REG_DPLL_MEAS_CTRL, &dpll_meas_ctrl);
842 	if (rc)
843 		return rc;
844 
845 	/* Enable DPLL measurement block */
846 	dpll_meas_ctrl |= ZL_DPLL_MEAS_CTRL_EN;
847 
848 	/* Update phase measurement control register */
849 	rc = zl3073x_write_u8(zldev, ZL_REG_DPLL_MEAS_CTRL, dpll_meas_ctrl);
850 	if (rc)
851 		return rc;
852 
853 	/* Enable DPLL-to-connected-ref measurement for each channel */
854 	list_for_each_entry(zldpll, &zldev->dplls, list)
855 		mask |= BIT(zldpll->id);
856 
857 	return zl3073x_write_u8(zldev, ZL_REG_DPLL_PHASE_ERR_READ_MASK, mask);
858 }
859 
860 /**
861  * zl3073x_dev_start - Start normal operation
862  * @zldev: zl3073x device pointer
863  * @full: perform full initialization
864  *
865  * The function starts normal operation, which means registering all DPLLs and
866  * their pins, and starting monitoring. If full initialization is requested,
867  * the function additionally initializes the phase offset measurement block and
868  * fetches hardware-invariant parameters.
869  *
870  * Return: 0 on success, <0 on error
871  */
zl3073x_dev_start(struct zl3073x_dev * zldev,bool full)872 int zl3073x_dev_start(struct zl3073x_dev *zldev, bool full)
873 {
874 	struct zl3073x_dpll *zldpll;
875 	u8 info;
876 	int rc;
877 
878 	rc = zl3073x_read_u8(zldev, ZL_REG_INFO, &info);
879 	if (rc) {
880 		dev_err(zldev->dev, "Failed to read device status info\n");
881 		return rc;
882 	}
883 
884 	if (!FIELD_GET(ZL_INFO_READY, info)) {
885 		/* The ready bit indicates that the firmware was successfully
886 		 * configured and is ready for normal operation. If it is
887 		 * cleared then the configuration stored in flash is wrong
888 		 * or missing. In this situation the driver will expose
889 		 * only devlink interface to give an opportunity to flash
890 		 * the correct config.
891 		 */
892 		dev_info(zldev->dev,
893 			 "FW not fully ready - missing or corrupted config\n");
894 
895 		return 0;
896 	}
897 
898 	if (full) {
899 		/* Fetch device state */
900 		rc = zl3073x_dev_state_fetch(zldev);
901 		if (rc)
902 			return rc;
903 
904 		/* Setup phase offset measurement block */
905 		rc = zl3073x_dev_phase_meas_setup(zldev);
906 		if (rc) {
907 			dev_err(zldev->dev,
908 				"Failed to setup phase measurement\n");
909 			return rc;
910 		}
911 	}
912 
913 	/* Register all DPLLs */
914 	list_for_each_entry(zldpll, &zldev->dplls, list) {
915 		rc = zl3073x_dpll_register(zldpll);
916 		if (rc) {
917 			dev_err_probe(zldev->dev, rc,
918 				      "Failed to register DPLL%u\n",
919 				      zldpll->id);
920 			return rc;
921 		}
922 	}
923 
924 	/* Perform initial firmware fine phase correction */
925 	rc = zl3073x_dpll_init_fine_phase_adjust(zldev);
926 	if (rc) {
927 		dev_err_probe(zldev->dev, rc,
928 			      "Failed to init fine phase correction\n");
929 		return rc;
930 	}
931 
932 	/* Start monitoring */
933 	kthread_queue_delayed_work(zldev->kworker, &zldev->work, 0);
934 
935 	return 0;
936 }
937 
938 /**
939  * zl3073x_dev_stop - Stop normal operation
940  * @zldev: zl3073x device pointer
941  *
942  * The function stops the normal operation that mean deregistration of all
943  * DPLLs and their pins and stop monitoring.
944  *
945  * Return: 0 on success, <0 on error
946  */
zl3073x_dev_stop(struct zl3073x_dev * zldev)947 void zl3073x_dev_stop(struct zl3073x_dev *zldev)
948 {
949 	struct zl3073x_dpll *zldpll;
950 
951 	/* Stop monitoring */
952 	kthread_cancel_delayed_work_sync(&zldev->work);
953 
954 	/* Unregister all DPLLs */
955 	list_for_each_entry(zldpll, &zldev->dplls, list) {
956 		if (zldpll->dpll_dev)
957 			zl3073x_dpll_unregister(zldpll);
958 	}
959 }
960 
zl3073x_dev_dpll_fini(void * ptr)961 static void zl3073x_dev_dpll_fini(void *ptr)
962 {
963 	struct zl3073x_dpll *zldpll, *next;
964 	struct zl3073x_dev *zldev = ptr;
965 
966 	/* Stop monitoring and unregister DPLLs */
967 	zl3073x_dev_stop(zldev);
968 
969 	/* Destroy monitoring thread */
970 	if (zldev->kworker) {
971 		kthread_destroy_worker(zldev->kworker);
972 		zldev->kworker = NULL;
973 	}
974 
975 	/* Free all DPLLs */
976 	list_for_each_entry_safe(zldpll, next, &zldev->dplls, list) {
977 		list_del(&zldpll->list);
978 		zl3073x_dpll_free(zldpll);
979 	}
980 }
981 
982 static int
zl3073x_devm_dpll_init(struct zl3073x_dev * zldev)983 zl3073x_devm_dpll_init(struct zl3073x_dev *zldev)
984 {
985 	struct kthread_worker *kworker;
986 	struct zl3073x_dpll *zldpll;
987 	unsigned int i;
988 	int rc;
989 
990 	INIT_LIST_HEAD(&zldev->dplls);
991 
992 	/* Allocate all DPLLs */
993 	for (i = 0; i < zldev->info->num_channels; i++) {
994 		zldpll = zl3073x_dpll_alloc(zldev, i);
995 		if (IS_ERR(zldpll)) {
996 			dev_err_probe(zldev->dev, PTR_ERR(zldpll),
997 				      "Failed to alloc DPLL%u\n", i);
998 			rc = PTR_ERR(zldpll);
999 			goto error;
1000 		}
1001 
1002 		list_add_tail(&zldpll->list, &zldev->dplls);
1003 	}
1004 
1005 	/* Initialize monitoring thread */
1006 	kthread_init_delayed_work(&zldev->work, zl3073x_dev_periodic_work);
1007 	kworker = kthread_run_worker(0, "zl3073x-%s", dev_name(zldev->dev));
1008 	if (IS_ERR(kworker)) {
1009 		rc = PTR_ERR(kworker);
1010 		goto error;
1011 	}
1012 	zldev->kworker = kworker;
1013 
1014 	/* Start normal operation */
1015 	rc = zl3073x_dev_start(zldev, true);
1016 	if (rc) {
1017 		dev_err_probe(zldev->dev, rc, "Failed to start device\n");
1018 		goto error;
1019 	}
1020 
1021 	/* Add devres action to release DPLL related resources */
1022 	return devm_add_action_or_reset(zldev->dev, zl3073x_dev_dpll_fini, zldev);
1023 
1024 error:
1025 	zl3073x_dev_dpll_fini(zldev);
1026 
1027 	return rc;
1028 }
1029 
1030 /**
1031  * zl3073x_dev_probe - initialize zl3073x device
1032  * @zldev: pointer to zl3073x device
1033  *
1034  * Common initialization of zl3073x device structure.
1035  *
1036  * Returns: 0 on success, <0 on error
1037  */
zl3073x_dev_probe(struct zl3073x_dev * zldev)1038 int zl3073x_dev_probe(struct zl3073x_dev *zldev)
1039 {
1040 	u16 id, revision, fw_ver;
1041 	unsigned int i;
1042 	u32 cfg_ver;
1043 	int rc;
1044 
1045 	/* Read chip ID */
1046 	rc = zl3073x_read_u16(zldev, ZL_REG_ID, &id);
1047 	if (rc)
1048 		return rc;
1049 
1050 	/* Detect chip variant */
1051 	for (i = 0; i < ARRAY_SIZE(zl3073x_chip_ids); i++) {
1052 		if (zl3073x_chip_ids[i].id == id)
1053 			break;
1054 	}
1055 
1056 	if (i == ARRAY_SIZE(zl3073x_chip_ids))
1057 		return dev_err_probe(zldev->dev, -ENODEV,
1058 				     "Unknown chip ID: 0x%04x\n", id);
1059 
1060 	zldev->info = &zl3073x_chip_ids[i];
1061 
1062 	/* Read revision, firmware version and custom config version */
1063 	rc = zl3073x_read_u16(zldev, ZL_REG_REVISION, &revision);
1064 	if (rc)
1065 		return rc;
1066 	rc = zl3073x_read_u16(zldev, ZL_REG_FW_VER, &fw_ver);
1067 	if (rc)
1068 		return rc;
1069 	rc = zl3073x_read_u32(zldev, ZL_REG_CUSTOM_CONFIG_VER, &cfg_ver);
1070 	if (rc)
1071 		return rc;
1072 
1073 	dev_dbg(zldev->dev, "ChipID(%X), ChipRev(%X), FwVer(%u)\n", id,
1074 		revision, fw_ver);
1075 	dev_dbg(zldev->dev, "Custom config version: %lu.%lu.%lu.%lu\n",
1076 		FIELD_GET(GENMASK(31, 24), cfg_ver),
1077 		FIELD_GET(GENMASK(23, 16), cfg_ver),
1078 		FIELD_GET(GENMASK(15, 8), cfg_ver),
1079 		FIELD_GET(GENMASK(7, 0), cfg_ver));
1080 
1081 	/* Generate random clock ID as the device has not such property that
1082 	 * could be used for this purpose. A user can later change this value
1083 	 * using devlink.
1084 	 */
1085 	zldev->clock_id = get_random_u64();
1086 
1087 	/* Default phase offset averaging factor */
1088 	zldev->phase_avg_factor = 2;
1089 
1090 	/* Initialize mutex for operations where multiple reads, writes
1091 	 * and/or polls are required to be done atomically.
1092 	 */
1093 	rc = devm_mutex_init(zldev->dev, &zldev->multiop_lock);
1094 	if (rc)
1095 		return dev_err_probe(zldev->dev, rc,
1096 				     "Failed to initialize mutex\n");
1097 
1098 	/* Register DPLL channels */
1099 	rc = zl3073x_devm_dpll_init(zldev);
1100 	if (rc)
1101 		return rc;
1102 
1103 	/* Register the devlink instance and parameters */
1104 	rc = zl3073x_devlink_register(zldev);
1105 	if (rc)
1106 		return dev_err_probe(zldev->dev, rc,
1107 				     "Failed to register devlink instance\n");
1108 
1109 	return 0;
1110 }
1111 EXPORT_SYMBOL_NS_GPL(zl3073x_dev_probe, "ZL3073X");
1112 
1113 MODULE_AUTHOR("Ivan Vecera <ivecera@redhat.com>");
1114 MODULE_DESCRIPTION("Microchip ZL3073x core driver");
1115 MODULE_LICENSE("GPL");
1116