1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright 2021 NXP
4  */
5 
6 #ifndef _ASM_ARCH_CGC_H
7 #define _ASM_ARCH_CGC_H
8 
9 enum cgc1_clk {
10 	DUMMY0_CLK,
11 	DUMMY1_CLK,
12 	LPOSC,
13 	XBAR_BUSCLK,
14 	SOSC,
15 	SOSC_DIV1,
16 	SOSC_DIV2,
17 	SOSC_DIV3,
18 	FRO,
19 	FRO_DIV1,
20 	FRO_DIV2,
21 	FRO_DIV3,
22 	PLL2,
23 	PLL3,
24 	PLL3_VCODIV,
25 	PLL3_PFD0,
26 	PLL3_PFD1,
27 	PLL3_PFD2,
28 	PLL3_PFD3,
29 	PLL3_PFD0_DIV1,
30 	PLL3_PFD0_DIV2,
31 	PLL3_PFD1_DIV1,
32 	PLL3_PFD1_DIV2,
33 	PLL3_PFD2_DIV1,
34 	PLL3_PFD2_DIV2,
35 	PLL3_PFD3_DIV1,
36 	PLL3_PFD3_DIV2,
37 };
38 
39 struct cgc1_regs {
40 	u32 verid;
41 	u32 rsvd1[4];
42 	u32 ca35clk;
43 	u32 rsvd2[2];
44 	u32 clkoutcfg;
45 	u32 rsvd3[4];
46 	u32 nicclk;
47 	u32 xbarclk;
48 	u32 rsvd4[21];
49 	u32 clkdivrst;
50 	u32 rsvd5[29];
51 	u32 soscdiv;
52 	u32 rsvd6[63];
53 	u32 frodiv;
54 	u32 rsvd7[189];
55 	u32 pll2csr;
56 	u32 rsvd8[3];
57 	u32 pll2cfg;
58 	u32 rsvd9;
59 	u32 pll2denom;
60 	u32 pll2num;
61 	u32 pll2ss;
62 	u32 rsvd10[55];
63 	u32 pll3csr;
64 	u32 pll3div_vco;
65 	u32 pll3div_pfd0;
66 	u32 pll3div_pfd1;
67 	u32 pll3cfg;
68 	u32 pll3pfdcfg;
69 	u32 pll3denom;
70 	u32 pll3num;
71 	u32 pll3ss;
72 	u32 pll3lock;
73 	u32 rsvd11[54];
74 	u32 enetstamp;
75 	u32 rsvd12[67];
76 	u32 pllusbcfg;
77 	u32 rsvd13[59];
78 	u32 aud_clk1;
79 	u32 sai5_4_clk;
80 	u32 tpm6_7clk;
81 	u32 mqs1clk;
82 	u32 rsvd14[60];
83 	u32 lvdscfg;
84 };
85 
86 struct cgc2_regs {
87 	u32 verid;
88 	u32 rsvd1[4];
89 	u32 hificlk;
90 	u32 rsvd2[2];
91 	u32 clkoutcfg;
92 	u32 rsvd3[6];
93 	u32 niclpavclk;
94 	u32 ddrclk;
95 	u32 rsvd4[19];
96 	u32 clkdivrst;
97 	u32 rsvd5[29];
98 	u32 soscdiv;
99 	u32 rsvd6[63];
100 	u32 frodiv;
101 	u32 rsvd7[253];
102 	u32 pll4csr;
103 	u32 pll4div_vco;
104 	u32 pll4div_pfd0;
105 	u32 pll4div_pfd1;
106 	u32 pll4cfg;
107 	u32 pll4pfdcfg;
108 	u32 pll4denom;
109 	u32 pll4num;
110 	u32 pll4ss;
111 	u32 pll4lock;
112 	u32 rsvd8[128];
113 	u32 aud_clk2;
114 	u32 sai7_6_clk;
115 	u32 tpm8clk;
116 	u32 rsvd9[1];
117 	u32 spdifclk;
118 	u32 rsvd10[59];
119 	u32 lvdscfg;
120 };
121 
122 u32 cgc1_clk_get_rate(enum cgc1_clk clk);
123 void cgc1_pll3_init(void);
124 void cgc1_pll2_init(void);
125 void cgc1_soscdiv_init(void);
126 void cgc1_init_core_clk(void);
127 void cgc2_pll4_init(void);
128 void cgc2_ddrclk_config(u32 src, u32 div);
129 u32 cgc1_sosc_div(enum cgc1_clk clk);
130 #endif
131