clock.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * (C) Copyright 2015 Google, Inc
  4. */
  5. #ifndef _ASM_ARCH_CLOCK_H
  6. #define _ASM_ARCH_CLOCK_H
  7. /* define pll mode */
  8. #define RKCLK_PLL_MODE_SLOW 0
  9. #define RKCLK_PLL_MODE_NORMAL 1
  10. enum {
  11. ROCKCHIP_SYSCON_NOC,
  12. ROCKCHIP_SYSCON_GRF,
  13. ROCKCHIP_SYSCON_SGRF,
  14. ROCKCHIP_SYSCON_PMU,
  15. ROCKCHIP_SYSCON_PMUGRF,
  16. ROCKCHIP_SYSCON_PMUSGRF,
  17. ROCKCHIP_SYSCON_CIC,
  18. ROCKCHIP_SYSCON_MSCH,
  19. };
  20. /* Standard Rockchip clock numbers */
  21. enum rk_clk_id {
  22. CLK_OSC,
  23. CLK_ARM,
  24. CLK_DDR,
  25. CLK_CODEC,
  26. CLK_GENERAL,
  27. CLK_NEW,
  28. CLK_COUNT,
  29. };
  30. static inline int rk_pll_id(enum rk_clk_id clk_id)
  31. {
  32. return clk_id - 1;
  33. }
  34. struct sysreset_reg {
  35. unsigned int glb_srst_fst_value;
  36. unsigned int glb_srst_snd_value;
  37. };
  38. /**
  39. * clk_get_divisor() - Calculate the required clock divisior
  40. *
  41. * Given an input rate and a required output_rate, calculate the Rockchip
  42. * divisor needed to achieve this.
  43. *
  44. * @input_rate: Input clock rate in Hz
  45. * @output_rate: Output clock rate in Hz
  46. * @return divisor register value to use
  47. */
  48. static inline u32 clk_get_divisor(ulong input_rate, uint output_rate)
  49. {
  50. uint clk_div;
  51. clk_div = input_rate / output_rate;
  52. clk_div = (clk_div + 1) & 0xfffe;
  53. return clk_div;
  54. }
  55. /**
  56. * rockchip_get_cru() - get a pointer to the clock/reset unit registers
  57. *
  58. * @return pointer to registers, or -ve error on error
  59. */
  60. void *rockchip_get_cru(void);
  61. /**
  62. * rockchip_get_pmucru() - get a pointer to the clock/reset unit registers
  63. *
  64. * @return pointer to registers, or -ve error on error
  65. */
  66. void *rockchip_get_pmucru(void);
  67. struct rk3288_cru;
  68. struct rk3288_grf;
  69. void rk3288_clk_configure_cpu(struct rk3288_cru *cru, struct rk3288_grf *grf);
  70. int rockchip_get_clk(struct udevice **devp);
  71. /*
  72. * rockchip_reset_bind() - Bind soft reset device as child of clock device
  73. *
  74. * @pdev: clock udevice
  75. * @reg_offset: the first offset in cru for softreset registers
  76. * @reg_number: the reg numbers of softreset registers
  77. * @return 0 success, or error value
  78. */
  79. int rockchip_reset_bind(struct udevice *pdev, u32 reg_offset, u32 reg_number);
  80. #endif