dpll-sld8.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2013-2014 Panasonic Corporation
  4. * Copyright (C) 2015-2016 Socionext Inc.
  5. */
  6. #include <linux/delay.h>
  7. #include <linux/io.h>
  8. #include "../init.h"
  9. #include "../sc-regs.h"
  10. int uniphier_sld8_dpll_init(const struct uniphier_board_data *bd)
  11. {
  12. u32 tmp;
  13. /*
  14. * Set DPLL SSC parameters for DPLLCTRL3
  15. * [23] DIVN_TEST 0x1
  16. * [22:16] DIVN 0x50
  17. * [10] FREFSEL_TEST 0x1
  18. * [9:8] FREFSEL 0x2
  19. * [4] ICPD_TEST 0x1
  20. * [3:0] ICPD 0xb
  21. */
  22. tmp = readl(SC_DPLLCTRL3);
  23. tmp &= ~0x00ff0717;
  24. tmp |= 0x00d0061b;
  25. writel(tmp, SC_DPLLCTRL3);
  26. /*
  27. * Set DPLL SSC parameters for DPLLCTRL
  28. * <-1%> <-2%>
  29. * [29:20] SSC_UPCNT 132 (0x084) 132 (0x084)
  30. * [14:0] SSC_dK 6335(0x18bf) 12710(0x31a6)
  31. */
  32. tmp = readl(SC_DPLLCTRL);
  33. tmp &= ~0x3ff07fff;
  34. #ifdef DPLL_SSC_RATE_1PER
  35. tmp |= 0x084018bf;
  36. #else
  37. tmp |= 0x084031a6;
  38. #endif
  39. writel(tmp, SC_DPLLCTRL);
  40. /*
  41. * Set DPLL SSC parameters for DPLLCTRL2
  42. * [31:29] SSC_STEP 0
  43. * [27] SSC_REG_REF 1
  44. * [26:20] SSC_M 79 (0x4f)
  45. * [19:0] SSC_K 964689 (0xeb851)
  46. */
  47. tmp = readl(SC_DPLLCTRL2);
  48. tmp &= ~0xefffffff;
  49. tmp |= 0x0cfeb851;
  50. writel(tmp, SC_DPLLCTRL2);
  51. /* Wait 500 usec until dpll gets stable */
  52. udelay(500);
  53. return 0;
  54. }