clk-zynqmp.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2016-2018 Xilinx
  4. */
  5. #ifndef __LINUX_CLK_ZYNQMP_H_
  6. #define __LINUX_CLK_ZYNQMP_H_
  7. #include <linux/spinlock.h>
  8. #include <linux/firmware/xlnx-zynqmp.h>
  9. /* Common Flags */
  10. /* must be gated across rate change */
  11. #define ZYNQMP_CLK_SET_RATE_GATE BIT(0)
  12. /* must be gated across re-parent */
  13. #define ZYNQMP_CLK_SET_PARENT_GATE BIT(1)
  14. /* propagate rate change up one level */
  15. #define ZYNQMP_CLK_SET_RATE_PARENT BIT(2)
  16. /* do not gate even if unused */
  17. #define ZYNQMP_CLK_IGNORE_UNUSED BIT(3)
  18. /* don't re-parent on rate change */
  19. #define ZYNQMP_CLK_SET_RATE_NO_REPARENT BIT(7)
  20. /* do not gate, ever */
  21. #define ZYNQMP_CLK_IS_CRITICAL BIT(11)
  22. /* Type Flags for divider clock */
  23. #define ZYNQMP_CLK_DIVIDER_ONE_BASED BIT(0)
  24. #define ZYNQMP_CLK_DIVIDER_POWER_OF_TWO BIT(1)
  25. #define ZYNQMP_CLK_DIVIDER_ALLOW_ZERO BIT(2)
  26. #define ZYNQMP_CLK_DIVIDER_HIWORD_MASK BIT(3)
  27. #define ZYNQMP_CLK_DIVIDER_ROUND_CLOSEST BIT(4)
  28. #define ZYNQMP_CLK_DIVIDER_READ_ONLY BIT(5)
  29. #define ZYNQMP_CLK_DIVIDER_MAX_AT_ZERO BIT(6)
  30. /* Type Flags for mux clock */
  31. #define ZYNQMP_CLK_MUX_INDEX_ONE BIT(0)
  32. #define ZYNQMP_CLK_MUX_INDEX_BIT BIT(1)
  33. #define ZYNQMP_CLK_MUX_HIWORD_MASK BIT(2)
  34. #define ZYNQMP_CLK_MUX_READ_ONLY BIT(3)
  35. #define ZYNQMP_CLK_MUX_ROUND_CLOSEST BIT(4)
  36. #define ZYNQMP_CLK_MUX_BIG_ENDIAN BIT(5)
  37. enum topology_type {
  38. TYPE_INVALID,
  39. TYPE_MUX,
  40. TYPE_PLL,
  41. TYPE_FIXEDFACTOR,
  42. TYPE_DIV1,
  43. TYPE_DIV2,
  44. TYPE_GATE,
  45. };
  46. /**
  47. * struct clock_topology - Clock topology
  48. * @type: Type of topology
  49. * @flag: Topology flags
  50. * @type_flag: Topology type specific flag
  51. * @custom_type_flag: Topology type specific custom flag
  52. */
  53. struct clock_topology {
  54. u32 type;
  55. u32 flag;
  56. u32 type_flag;
  57. u8 custom_type_flag;
  58. };
  59. unsigned long zynqmp_clk_map_common_ccf_flags(const u32 zynqmp_flag);
  60. struct clk_hw *zynqmp_clk_register_pll(const char *name, u32 clk_id,
  61. const char * const *parents,
  62. u8 num_parents,
  63. const struct clock_topology *nodes);
  64. struct clk_hw *zynqmp_clk_register_gate(const char *name, u32 clk_id,
  65. const char * const *parents,
  66. u8 num_parents,
  67. const struct clock_topology *nodes);
  68. struct clk_hw *zynqmp_clk_register_divider(const char *name,
  69. u32 clk_id,
  70. const char * const *parents,
  71. u8 num_parents,
  72. const struct clock_topology *nodes);
  73. struct clk_hw *zynqmp_clk_register_mux(const char *name, u32 clk_id,
  74. const char * const *parents,
  75. u8 num_parents,
  76. const struct clock_topology *nodes);
  77. struct clk_hw *zynqmp_clk_register_fixed_factor(const char *name,
  78. u32 clk_id,
  79. const char * const *parents,
  80. u8 num_parents,
  81. const struct clock_topology *nodes);
  82. #endif