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