Merge tag 'x86_core_for_v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
[linux-2.6-microblaze.git] / drivers / clk / socfpga / stratix10-clk.h
1 /* SPDX-License-Identifier:    GPL-2.0 */
2 /*
3  * Copyright (C) 2017, Intel Corporation
4  */
5
6 #ifndef __STRATIX10_CLK_H
7 #define __STRATIX10_CLK_H
8
9 struct stratix10_clock_data {
10         struct clk_onecell_data clk_data;
11         void __iomem            *base;
12 };
13
14 struct stratix10_pll_clock {
15         unsigned int            id;
16         const char              *name;
17         const struct clk_parent_data    *parent_data;
18         u8                      num_parents;
19         unsigned long           flags;
20         unsigned long           offset;
21 };
22
23 struct stratix10_perip_c_clock {
24         unsigned int            id;
25         const char              *name;
26         const char              *parent_name;
27         const struct clk_parent_data    *parent_data;
28         u8                      num_parents;
29         unsigned long           flags;
30         unsigned long           offset;
31 };
32
33 struct n5x_perip_c_clock {
34         unsigned int            id;
35         const char              *name;
36         const char              *parent_name;
37         const char              *const *parent_names;
38         u8                      num_parents;
39         unsigned long           flags;
40         unsigned long           offset;
41         unsigned long           shift;
42 };
43
44 struct stratix10_perip_cnt_clock {
45         unsigned int            id;
46         const char              *name;
47         const char              *parent_name;
48         const struct clk_parent_data    *parent_data;
49         u8                      num_parents;
50         unsigned long           flags;
51         unsigned long           offset;
52         u8                      fixed_divider;
53         unsigned long           bypass_reg;
54         unsigned long           bypass_shift;
55 };
56
57 struct stratix10_gate_clock {
58         unsigned int            id;
59         const char              *name;
60         const char              *parent_name;
61         const struct clk_parent_data    *parent_data;
62         u8                      num_parents;
63         unsigned long           flags;
64         unsigned long           gate_reg;
65         u8                      gate_idx;
66         unsigned long           div_reg;
67         u8                      div_offset;
68         u8                      div_width;
69         unsigned long           bypass_reg;
70         u8                      bypass_shift;
71         u8                      fixed_div;
72 };
73
74 struct clk *s10_register_pll(const struct stratix10_pll_clock *,
75                              void __iomem *);
76 struct clk *agilex_register_pll(const struct stratix10_pll_clock *,
77                                 void __iomem *);
78 struct clk *n5x_register_pll(const struct stratix10_pll_clock *clks,
79                              void __iomem *reg);
80 struct clk *s10_register_periph(const struct stratix10_perip_c_clock *,
81                                 void __iomem *reg);
82 struct clk *n5x_register_periph(const struct n5x_perip_c_clock *clks,
83                                 void __iomem *reg);
84 struct clk *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *,
85                                     void __iomem *);
86 struct clk *s10_register_gate(const struct stratix10_gate_clock *,
87                               void __iomem *);
88 #endif  /* __STRATIX10_CLK_H */