107afb8dbSDinh Nguyen /* SPDX-License-Identifier:    GPL-2.0 */
207afb8dbSDinh Nguyen /*
307afb8dbSDinh Nguyen  * Copyright (C) 2017, Intel Corporation
407afb8dbSDinh Nguyen  */
507afb8dbSDinh Nguyen 
607afb8dbSDinh Nguyen #ifndef	__STRATIX10_CLK_H
707afb8dbSDinh Nguyen #define	__STRATIX10_CLK_H
807afb8dbSDinh Nguyen 
907afb8dbSDinh Nguyen struct stratix10_clock_data {
1007afb8dbSDinh Nguyen 	void __iomem		*base;
11*b0a660d4SGustavo A. R. Silva 
12*b0a660d4SGustavo A. R. Silva 	/* Must be last */
13*b0a660d4SGustavo A. R. Silva 	struct clk_hw_onecell_data	clk_data;
1407afb8dbSDinh Nguyen };
1507afb8dbSDinh Nguyen 
1607afb8dbSDinh Nguyen struct stratix10_pll_clock {
1707afb8dbSDinh Nguyen 	unsigned int		id;
1807afb8dbSDinh Nguyen 	const char		*name;
19762d961aSDinh Nguyen 	const struct clk_parent_data	*parent_data;
2007afb8dbSDinh Nguyen 	u8			num_parents;
2107afb8dbSDinh Nguyen 	unsigned long		flags;
2207afb8dbSDinh Nguyen 	unsigned long		offset;
2307afb8dbSDinh Nguyen };
2407afb8dbSDinh Nguyen 
2507afb8dbSDinh Nguyen struct stratix10_perip_c_clock {
2607afb8dbSDinh Nguyen 	unsigned int		id;
2707afb8dbSDinh Nguyen 	const char		*name;
2807afb8dbSDinh Nguyen 	const char		*parent_name;
29762d961aSDinh Nguyen 	const struct clk_parent_data	*parent_data;
3007afb8dbSDinh Nguyen 	u8			num_parents;
3107afb8dbSDinh Nguyen 	unsigned long		flags;
3207afb8dbSDinh Nguyen 	unsigned long		offset;
3307afb8dbSDinh Nguyen };
3407afb8dbSDinh Nguyen 
35a0f9819cSDinh Nguyen struct n5x_perip_c_clock {
36a0f9819cSDinh Nguyen 	unsigned int		id;
37a0f9819cSDinh Nguyen 	const char		*name;
38a0f9819cSDinh Nguyen 	const char		*parent_name;
39a0f9819cSDinh Nguyen 	const char		*const *parent_names;
40a0f9819cSDinh Nguyen 	u8			num_parents;
41a0f9819cSDinh Nguyen 	unsigned long		flags;
42a0f9819cSDinh Nguyen 	unsigned long		offset;
43a0f9819cSDinh Nguyen 	unsigned long		shift;
44a0f9819cSDinh Nguyen };
45a0f9819cSDinh Nguyen 
4607afb8dbSDinh Nguyen struct stratix10_perip_cnt_clock {
4707afb8dbSDinh Nguyen 	unsigned int		id;
4807afb8dbSDinh Nguyen 	const char		*name;
4907afb8dbSDinh Nguyen 	const char		*parent_name;
50762d961aSDinh Nguyen 	const struct clk_parent_data	*parent_data;
5107afb8dbSDinh Nguyen 	u8			num_parents;
5207afb8dbSDinh Nguyen 	unsigned long		flags;
5307afb8dbSDinh Nguyen 	unsigned long		offset;
5407afb8dbSDinh Nguyen 	u8			fixed_divider;
5507afb8dbSDinh Nguyen 	unsigned long		bypass_reg;
5607afb8dbSDinh Nguyen 	unsigned long		bypass_shift;
5707afb8dbSDinh Nguyen };
5807afb8dbSDinh Nguyen 
5907afb8dbSDinh Nguyen struct stratix10_gate_clock {
6007afb8dbSDinh Nguyen 	unsigned int		id;
6107afb8dbSDinh Nguyen 	const char		*name;
6207afb8dbSDinh Nguyen 	const char		*parent_name;
63762d961aSDinh Nguyen 	const struct clk_parent_data	*parent_data;
6407afb8dbSDinh Nguyen 	u8			num_parents;
6507afb8dbSDinh Nguyen 	unsigned long		flags;
6607afb8dbSDinh Nguyen 	unsigned long		gate_reg;
6707afb8dbSDinh Nguyen 	u8			gate_idx;
6807afb8dbSDinh Nguyen 	unsigned long		div_reg;
6907afb8dbSDinh Nguyen 	u8			div_offset;
7007afb8dbSDinh Nguyen 	u8			div_width;
7107afb8dbSDinh Nguyen 	unsigned long		bypass_reg;
7207afb8dbSDinh Nguyen 	u8			bypass_shift;
7307afb8dbSDinh Nguyen 	u8			fixed_div;
7407afb8dbSDinh Nguyen };
7507afb8dbSDinh Nguyen 
76ba7e2584SDinh Nguyen struct clk_hw *s10_register_pll(const struct stratix10_pll_clock *clks,
77a0f9819cSDinh Nguyen 			     void __iomem *reg);
78ba7e2584SDinh Nguyen struct clk_hw *agilex_register_pll(const struct stratix10_pll_clock *clks,
79a0f9819cSDinh Nguyen 				void __iomem *reg);
80ba7e2584SDinh Nguyen struct clk_hw *n5x_register_pll(const struct stratix10_pll_clock *clks,
81a0f9819cSDinh Nguyen 			     void __iomem *reg);
82ba7e2584SDinh Nguyen struct clk_hw *s10_register_periph(const struct stratix10_perip_c_clock *clks,
83ba7e2584SDinh Nguyen 				void __iomem *reg);
84ba7e2584SDinh Nguyen struct clk_hw *n5x_register_periph(const struct n5x_perip_c_clock *clks,
85ba7e2584SDinh Nguyen 				void __iomem *reg);
86ba7e2584SDinh Nguyen struct clk_hw *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *clks,
87ba7e2584SDinh Nguyen 				    void __iomem *reg);
88ba7e2584SDinh Nguyen struct clk_hw *s10_register_gate(const struct stratix10_gate_clock *clks,
89ba7e2584SDinh Nguyen 			      void __iomem *reg);
90c2c9c566SDinh Nguyen struct clk_hw *agilex_register_gate(const struct stratix10_gate_clock *clks,
91c2c9c566SDinh Nguyen 			      void __iomem *reg);
9207afb8dbSDinh Nguyen #endif	/* __STRATIX10_CLK_H */
93