1 /* SPDX-License-Identifier: GPL-2.0+ */
5 * Peng Fan <peng.fan at nxp.com>
11 #include <linux/bitops.h>
13 #define MHZ(x) ((x) * 1000000UL)
45 /* Mainly for compatible to imx common code. */
75 struct ccm_lpcg_oscpll {
104 struct ccm_root clk_roots[95]; /* 0x0 */
105 u32 reserved_0[1312];
106 struct ccm_obs clk_obs[6]; /* 0x4400 */
108 struct ccm_gpr clk_shared_gpr[8]; /* 0x4800 */
110 struct ccm_gpr clk_private_gpr[8]; /* 0x4C00 */
112 struct ccm_lpcg_oscpll clk_oscplls[19]; /* 0x5000 */
113 u32 reserved_4[2768];
114 struct ccm_lpcg_oscpll clk_lpcgs[122]; /* 0x8000 */
117 struct ana_pll_reg_elem {
125 struct ana_pll_reg_elem dfs_ctrl;
126 struct ana_pll_reg_elem dfs_div;
130 struct ana_pll_reg_elem ctrl;
131 struct ana_pll_reg_elem ana_prg;
132 struct ana_pll_reg_elem test;
133 struct ana_pll_reg_elem ss; /* Spread spectrum */
134 struct ana_pll_reg_elem num; /* numerator */
135 struct ana_pll_reg_elem denom; /* demoninator */
136 struct ana_pll_reg_elem div;
137 struct ana_pll_dfs dfs[4];
149 struct ana_pll_reg arm_pll;
150 struct ana_pll_reg sys_pll;
151 struct ana_pll_reg audio_pll;
152 struct ana_pll_reg dram_pll;
153 struct ana_pll_reg video_pll;
156 #define PLL_CTRL_HW_CTRL_SEL BIT(16)
157 #define PLL_CTRL_CLKMUX_BYPASS BIT(2)
158 #define PLL_CTRL_CLKMUX_EN BIT(1)
159 #define PLL_CTRL_POWERUP BIT(0)
161 #define PLL_STATUS_PLL_LOCK BIT(0)
162 #define PLL_DFS_CTRL_ENABLE BIT(31)
163 #define PLL_DFS_CTRL_CLKOUT BIT(30)
164 #define PLL_DFS_CTRL_CLKOUT_DIV2 BIT(29)
165 #define PLL_DFS_CTRL_BYPASS BIT(23)
167 #define PLL_SS_EN BIT(15)
169 struct imx_intpll_rate_table {
176 struct imx_fracpll_rate_table {
185 #define INT_PLL_RATE(_rate, _r, _m, _o) \
193 #define FRAC_PLL_RATE(_rate, _r, _m, _o, _n, _d) \
203 struct clk_root_map {
208 int clock_init(void);
209 u32 get_clk_src_rate(enum ccm_clk_src source);
210 u32 get_lpuart_clk(void);
211 void init_uart_clk(u32 index);
212 void init_clk_usdhc(u32 index);
213 int enable_i2c_clk(unsigned char enable, u32 i2c_num);
214 u32 imx_get_i2cclk(u32 i2c_num);
215 u32 mxc_get_clock(enum mxc_clock clk);
216 void dram_pll_init(ulong pll_val);
217 void dram_enable_bypass(ulong clk_val);
218 void dram_disable_bypass(void);
220 int configure_intpll(enum ccm_clk_src pll, u32 freq);
222 int ccm_clk_src_on(enum ccm_clk_src oscpll, bool enable);
223 int ccm_clk_src_auto(enum ccm_clk_src oscpll, bool enable);
224 int ccm_clk_src_lpm(enum ccm_clk_src oscpll, bool enable);
225 int ccm_clk_src_config_lpm(enum ccm_clk_src oscpll, u32 domain, u32 lpm_val);
226 bool ccm_clk_src_is_clk_on(enum ccm_clk_src oscpll);
227 int ccm_clk_src_tz_access(enum ccm_clk_src oscpll, bool non_secure, bool user_mode, bool lock_tz);
228 int ccm_clk_root_cfg(u32 clk_root_id, enum ccm_clk_src src, u32 div);
229 u32 ccm_clk_root_get_rate(u32 clk_root_id);
230 int ccm_clk_root_tz_access(u32 clk_root_id, bool non_secure, bool user_mode, bool lock_tz);
231 int ccm_lpcg_on(u32 lpcg, bool enable);
232 int ccm_lpcg_lpm(u32 lpcg, bool enable);
233 int ccm_lpcg_config_lpm(u32 lpcg, u32 domain, u32 lpm_val);
234 bool ccm_lpcg_is_clk_on(u32 lpcg);
235 int ccm_lpcg_tz_access(u32 lpcg, bool non_secure, bool user_mode, bool lock_tz);
236 int ccm_shared_gpr_set(u32 gpr, u32 val);
237 int ccm_shared_gpr_get(u32 gpr, u32 *val);
238 int ccm_shared_gpr_tz_access(u32 gpr, bool non_secure, bool user_mode, bool lock_tz);
240 void enable_usboh3_clk(unsigned char enable);
241 int set_clk_enet(enum enet_freq type);
242 int set_clk_eqos(enum enet_freq type);
243 void set_arm_clk(ulong freq);