| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | /* | 
 |  *  Copyright (C) 2016-2018 Xilinx | 
 |  */ | 
 |  | 
 | #ifndef __LINUX_CLK_ZYNQMP_H_ | 
 | #define __LINUX_CLK_ZYNQMP_H_ | 
 |  | 
 | #include <linux/spinlock.h> | 
 |  | 
 | #include <linux/firmware/xlnx-zynqmp.h> | 
 |  | 
 | /* Common Flags */ | 
 | /* must be gated across rate change */ | 
 | #define ZYNQMP_CLK_SET_RATE_GATE	BIT(0) | 
 | /* must be gated across re-parent */ | 
 | #define ZYNQMP_CLK_SET_PARENT_GATE	BIT(1) | 
 | /* propagate rate change up one level */ | 
 | #define ZYNQMP_CLK_SET_RATE_PARENT	BIT(2) | 
 | /* do not gate even if unused */ | 
 | #define ZYNQMP_CLK_IGNORE_UNUSED	BIT(3) | 
 | /* don't re-parent on rate change */ | 
 | #define ZYNQMP_CLK_SET_RATE_NO_REPARENT	BIT(7) | 
 | /* do not gate, ever */ | 
 | #define ZYNQMP_CLK_IS_CRITICAL		BIT(11) | 
 |  | 
 | /* Type Flags for divider clock */ | 
 | #define ZYNQMP_CLK_DIVIDER_ONE_BASED		BIT(0) | 
 | #define ZYNQMP_CLK_DIVIDER_POWER_OF_TWO		BIT(1) | 
 | #define ZYNQMP_CLK_DIVIDER_ALLOW_ZERO		BIT(2) | 
 | #define ZYNQMP_CLK_DIVIDER_HIWORD_MASK		BIT(3) | 
 | #define ZYNQMP_CLK_DIVIDER_ROUND_CLOSEST	BIT(4) | 
 | #define ZYNQMP_CLK_DIVIDER_READ_ONLY		BIT(5) | 
 | #define ZYNQMP_CLK_DIVIDER_MAX_AT_ZERO		BIT(6) | 
 |  | 
 | /* Type Flags for mux clock */ | 
 | #define ZYNQMP_CLK_MUX_INDEX_ONE		BIT(0) | 
 | #define ZYNQMP_CLK_MUX_INDEX_BIT		BIT(1) | 
 | #define ZYNQMP_CLK_MUX_HIWORD_MASK		BIT(2) | 
 | #define ZYNQMP_CLK_MUX_READ_ONLY		BIT(3) | 
 | #define ZYNQMP_CLK_MUX_ROUND_CLOSEST		BIT(4) | 
 | #define ZYNQMP_CLK_MUX_BIG_ENDIAN		BIT(5) | 
 |  | 
 | enum topology_type { | 
 | 	TYPE_INVALID, | 
 | 	TYPE_MUX, | 
 | 	TYPE_PLL, | 
 | 	TYPE_FIXEDFACTOR, | 
 | 	TYPE_DIV1, | 
 | 	TYPE_DIV2, | 
 | 	TYPE_GATE, | 
 | }; | 
 |  | 
 | /** | 
 |  * struct clock_topology - Clock topology | 
 |  * @type:	Type of topology | 
 |  * @flag:	Topology flags | 
 |  * @type_flag:	Topology type specific flag | 
 |  * @custom_type_flag: Topology type specific custom flag | 
 |  */ | 
 | struct clock_topology { | 
 | 	u32 type; | 
 | 	u32 flag; | 
 | 	u32 type_flag; | 
 | 	u8 custom_type_flag; | 
 | }; | 
 |  | 
 | unsigned long zynqmp_clk_map_common_ccf_flags(const u32 zynqmp_flag); | 
 |  | 
 | struct clk_hw *zynqmp_clk_register_pll(const char *name, u32 clk_id, | 
 | 				       const char * const *parents, | 
 | 				       u8 num_parents, | 
 | 				       const struct clock_topology *nodes); | 
 |  | 
 | struct clk_hw *zynqmp_clk_register_gate(const char *name, u32 clk_id, | 
 | 					const char * const *parents, | 
 | 					u8 num_parents, | 
 | 					const struct clock_topology *nodes); | 
 |  | 
 | struct clk_hw *zynqmp_clk_register_divider(const char *name, | 
 | 					   u32 clk_id, | 
 | 					   const char * const *parents, | 
 | 					   u8 num_parents, | 
 | 					   const struct clock_topology *nodes); | 
 |  | 
 | struct clk_hw *zynqmp_clk_register_mux(const char *name, u32 clk_id, | 
 | 				       const char * const *parents, | 
 | 				       u8 num_parents, | 
 | 				       const struct clock_topology *nodes); | 
 |  | 
 | struct clk_hw *zynqmp_clk_register_fixed_factor(const char *name, | 
 | 					u32 clk_id, | 
 | 					const char * const *parents, | 
 | 					u8 num_parents, | 
 | 					const struct clock_topology *nodes); | 
 |  | 
 | #endif |