xref: /rk3399_ARM-atf/drivers/nxp/clk/s32cc/s32cc_early_clks.c (revision 7004f6782e0c9c7c5875b294af049cd022695cbb)
166af5425SGhennadi Procopciuc /*
266af5425SGhennadi Procopciuc  * Copyright 2024 NXP
366af5425SGhennadi Procopciuc  *
466af5425SGhennadi Procopciuc  * SPDX-License-Identifier: BSD-3-Clause
566af5425SGhennadi Procopciuc  */
666af5425SGhennadi Procopciuc #include <drivers/clk.h>
766af5425SGhennadi Procopciuc #include <s32cc-clk-drv.h>
866af5425SGhennadi Procopciuc #include <s32cc-clk-ids.h>
966af5425SGhennadi Procopciuc #include <s32cc-clk-utils.h>
1066af5425SGhennadi Procopciuc 
1166af5425SGhennadi Procopciuc #define S32CC_FXOSC_FREQ	(40U * MHZ)
127ad4e231SGhennadi Procopciuc #define S32CC_ARM_PLL_VCO_FREQ	(2U * GHZ)
13de950ef0SGhennadi Procopciuc #define S32CC_ARM_PLL_PHI0_FREQ	(1U * GHZ)
1464e0c226SGhennadi Procopciuc #define S32CC_A53_FREQ		(1U * GHZ)
1566af5425SGhennadi Procopciuc 
1666af5425SGhennadi Procopciuc int s32cc_init_early_clks(void)
1766af5425SGhennadi Procopciuc {
1866af5425SGhennadi Procopciuc 	int ret;
1966af5425SGhennadi Procopciuc 
2066af5425SGhennadi Procopciuc 	s32cc_clk_register_drv();
2166af5425SGhennadi Procopciuc 
2283af4504SGhennadi Procopciuc 	ret = clk_set_parent(S32CC_CLK_ARM_PLL_MUX, S32CC_CLK_FXOSC);
2383af4504SGhennadi Procopciuc 	if (ret != 0) {
2483af4504SGhennadi Procopciuc 		return ret;
2583af4504SGhennadi Procopciuc 	}
2683af4504SGhennadi Procopciuc 
2783af4504SGhennadi Procopciuc 	ret = clk_set_parent(S32CC_CLK_MC_CGM1_MUX0, S32CC_CLK_ARM_PLL_PHI0);
2883af4504SGhennadi Procopciuc 	if (ret != 0) {
2983af4504SGhennadi Procopciuc 		return ret;
3083af4504SGhennadi Procopciuc 	}
3183af4504SGhennadi Procopciuc 
3266af5425SGhennadi Procopciuc 	ret = clk_set_rate(S32CC_CLK_FXOSC, S32CC_FXOSC_FREQ, NULL);
3366af5425SGhennadi Procopciuc 	if (ret != 0) {
3466af5425SGhennadi Procopciuc 		return ret;
3566af5425SGhennadi Procopciuc 	}
3666af5425SGhennadi Procopciuc 
377ad4e231SGhennadi Procopciuc 	ret = clk_set_rate(S32CC_CLK_ARM_PLL_VCO, S32CC_ARM_PLL_VCO_FREQ, NULL);
387ad4e231SGhennadi Procopciuc 	if (ret != 0) {
397ad4e231SGhennadi Procopciuc 		return ret;
407ad4e231SGhennadi Procopciuc 	}
417ad4e231SGhennadi Procopciuc 
42de950ef0SGhennadi Procopciuc 	ret = clk_set_rate(S32CC_CLK_ARM_PLL_PHI0, S32CC_ARM_PLL_PHI0_FREQ, NULL);
43de950ef0SGhennadi Procopciuc 	if (ret != 0) {
44de950ef0SGhennadi Procopciuc 		return ret;
45de950ef0SGhennadi Procopciuc 	}
46de950ef0SGhennadi Procopciuc 
4764e0c226SGhennadi Procopciuc 	ret = clk_set_rate(S32CC_CLK_A53_CORE, S32CC_A53_FREQ, NULL);
4864e0c226SGhennadi Procopciuc 	if (ret != 0) {
4964e0c226SGhennadi Procopciuc 		return ret;
5064e0c226SGhennadi Procopciuc 	}
5164e0c226SGhennadi Procopciuc 
528ab34357SGhennadi Procopciuc 	ret = clk_enable(S32CC_CLK_FXOSC);
538ab34357SGhennadi Procopciuc 	if (ret != 0) {
548ab34357SGhennadi Procopciuc 		return ret;
558ab34357SGhennadi Procopciuc 	}
568ab34357SGhennadi Procopciuc 
57b5101c45SGhennadi Procopciuc 	ret = clk_enable(S32CC_CLK_ARM_PLL_VCO);
58b5101c45SGhennadi Procopciuc 	if (ret != 0) {
59b5101c45SGhennadi Procopciuc 		return ret;
60b5101c45SGhennadi Procopciuc 	}
61b5101c45SGhennadi Procopciuc 
6284e82085SGhennadi Procopciuc 	ret = clk_enable(S32CC_CLK_ARM_PLL_PHI0);
6384e82085SGhennadi Procopciuc 	if (ret != 0) {
6484e82085SGhennadi Procopciuc 		return ret;
6584e82085SGhennadi Procopciuc 	}
6684e82085SGhennadi Procopciuc 
67*7004f678SGhennadi Procopciuc 	ret = clk_enable(S32CC_CLK_A53_CORE);
68*7004f678SGhennadi Procopciuc 	if (ret != 0) {
69*7004f678SGhennadi Procopciuc 		return ret;
70*7004f678SGhennadi Procopciuc 	}
71*7004f678SGhennadi Procopciuc 
7266af5425SGhennadi Procopciuc 	return ret;
7366af5425SGhennadi Procopciuc }
74