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 57*b5101c45SGhennadi Procopciuc ret = clk_enable(S32CC_CLK_ARM_PLL_VCO); 58*b5101c45SGhennadi Procopciuc if (ret != 0) { 59*b5101c45SGhennadi Procopciuc return ret; 60*b5101c45SGhennadi Procopciuc } 61*b5101c45SGhennadi Procopciuc 6266af5425SGhennadi Procopciuc return ret; 6366af5425SGhennadi Procopciuc } 64