12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /* 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
|