0001
0002
0003
0004
0005
0006 #ifndef __LINUX_CLK_ZYNQMP_H_
0007 #define __LINUX_CLK_ZYNQMP_H_
0008
0009 #include <linux/spinlock.h>
0010
0011 #include <linux/firmware/xlnx-zynqmp.h>
0012
0013
0014
0015 #define ZYNQMP_CLK_SET_RATE_GATE BIT(0)
0016
0017 #define ZYNQMP_CLK_SET_PARENT_GATE BIT(1)
0018
0019 #define ZYNQMP_CLK_SET_RATE_PARENT BIT(2)
0020
0021 #define ZYNQMP_CLK_IGNORE_UNUSED BIT(3)
0022
0023 #define ZYNQMP_CLK_SET_RATE_NO_REPARENT BIT(7)
0024
0025 #define ZYNQMP_CLK_IS_CRITICAL BIT(11)
0026
0027
0028 #define ZYNQMP_CLK_DIVIDER_ONE_BASED BIT(0)
0029 #define ZYNQMP_CLK_DIVIDER_POWER_OF_TWO BIT(1)
0030 #define ZYNQMP_CLK_DIVIDER_ALLOW_ZERO BIT(2)
0031 #define ZYNQMP_CLK_DIVIDER_HIWORD_MASK BIT(3)
0032 #define ZYNQMP_CLK_DIVIDER_ROUND_CLOSEST BIT(4)
0033 #define ZYNQMP_CLK_DIVIDER_READ_ONLY BIT(5)
0034 #define ZYNQMP_CLK_DIVIDER_MAX_AT_ZERO BIT(6)
0035
0036
0037 #define ZYNQMP_CLK_MUX_INDEX_ONE BIT(0)
0038 #define ZYNQMP_CLK_MUX_INDEX_BIT BIT(1)
0039 #define ZYNQMP_CLK_MUX_HIWORD_MASK BIT(2)
0040 #define ZYNQMP_CLK_MUX_READ_ONLY BIT(3)
0041 #define ZYNQMP_CLK_MUX_ROUND_CLOSEST BIT(4)
0042 #define ZYNQMP_CLK_MUX_BIG_ENDIAN BIT(5)
0043
0044 enum topology_type {
0045 TYPE_INVALID,
0046 TYPE_MUX,
0047 TYPE_PLL,
0048 TYPE_FIXEDFACTOR,
0049 TYPE_DIV1,
0050 TYPE_DIV2,
0051 TYPE_GATE,
0052 };
0053
0054
0055
0056
0057
0058
0059
0060
0061 struct clock_topology {
0062 u32 type;
0063 u32 flag;
0064 u32 type_flag;
0065 u8 custom_type_flag;
0066 };
0067
0068 unsigned long zynqmp_clk_map_common_ccf_flags(const u32 zynqmp_flag);
0069
0070 struct clk_hw *zynqmp_clk_register_pll(const char *name, u32 clk_id,
0071 const char * const *parents,
0072 u8 num_parents,
0073 const struct clock_topology *nodes);
0074
0075 struct clk_hw *zynqmp_clk_register_gate(const char *name, u32 clk_id,
0076 const char * const *parents,
0077 u8 num_parents,
0078 const struct clock_topology *nodes);
0079
0080 struct clk_hw *zynqmp_clk_register_divider(const char *name,
0081 u32 clk_id,
0082 const char * const *parents,
0083 u8 num_parents,
0084 const struct clock_topology *nodes);
0085
0086 struct clk_hw *zynqmp_clk_register_mux(const char *name, u32 clk_id,
0087 const char * const *parents,
0088 u8 num_parents,
0089 const struct clock_topology *nodes);
0090
0091 struct clk_hw *zynqmp_clk_register_fixed_factor(const char *name,
0092 u32 clk_id,
0093 const char * const *parents,
0094 u8 num_parents,
0095 const struct clock_topology *nodes);
0096
0097 #endif