Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:22:50

0001 /*
0002  * Copyright 2017-2023 NXP
0003  * All rights reserved.
0004  *
0005  * SPDX-License-Identifier: BSD-3-Clause
0006  */
0007 
0008 /*
0009  * How to setup clock using clock driver functions:
0010  *
0011  * 1. Call CLOCK_InitXXXPLL() to configure corresponding PLL clock.
0012  *
0013  * 2. Call CLOCK_InitXXXpfd() to configure corresponding PLL pfd clock.
0014  *
0015  * 3. Call CLOCK_SetRootClock() to configure corresponding module clock source and divider.
0016  *
0017  */
0018 
0019 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
0020 !!GlobalInfo
0021 product: Clocks v11.0
0022 processor: MIMXRT1166xxxxx
0023 package_id: MIMXRT1166DVM6A
0024 mcu_data: ksdk2_0
0025 processor_version: 13.0.2
0026  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
0027 
0028 #include "clock_config.h"
0029 #include "fsl_iomuxc.h"
0030 #include "fsl_dcdc.h"
0031 #include "fsl_pmu.h"
0032 #include "fsl_clock.h"
0033 
0034 /*******************************************************************************
0035  * Definitions
0036  ******************************************************************************/
0037 
0038 /*******************************************************************************
0039  * Variables
0040  ******************************************************************************/
0041 
0042 /*******************************************************************************
0043  ************************ BOARD_InitBootClocks function ************************
0044  ******************************************************************************/
0045 void BOARD_InitBootClocks(void)
0046 {
0047     BOARD_BootClockRUN();
0048 }
0049 
0050 /*******************************************************************************
0051  ********************** Configuration BOARD_BootClockRUN ***********************
0052  ******************************************************************************/
0053 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
0054 !!Configuration
0055 name: BOARD_BootClockRUN
0056 called_from_default_init: true
0057 outputs:
0058 - {id: ACMP_CLK_ROOT.outFreq, value: 24 MHz}
0059 - {id: ADC1_CLK_ROOT.outFreq, value: 24 MHz}
0060 - {id: ADC2_CLK_ROOT.outFreq, value: 24 MHz}
0061 - {id: ARM_PLL_CLK.outFreq, value: 600 MHz, locked: true, accuracy: '0.001'}
0062 - {id: ASRC_CLK_ROOT.outFreq, value: 24 MHz}
0063 - {id: AXI_CLK_ROOT.outFreq, value: 600 MHz}
0064 - {id: BUS_CLK_ROOT.outFreq, value: 198 MHz}
0065 - {id: BUS_LPSR_CLK_ROOT.outFreq, value: 120 MHz}
0066 - {id: CAN1_CLK_ROOT.outFreq, value: 24 MHz}
0067 - {id: CAN2_CLK_ROOT.outFreq, value: 24 MHz}
0068 - {id: CAN3_CLK_ROOT.outFreq, value: 24 MHz}
0069 - {id: CCM_CLKO1_CLK_ROOT.outFreq, value: 24 MHz}
0070 - {id: CCM_CLKO2_CLK_ROOT.outFreq, value: 24 MHz}
0071 - {id: CLK_1M.outFreq, value: 1 MHz}
0072 - {id: CSI2_CLK_ROOT.outFreq, value: 24 MHz}
0073 - {id: CSI2_ESC_CLK_ROOT.outFreq, value: 24 MHz}
0074 - {id: CSI2_UI_CLK_ROOT.outFreq, value: 24 MHz}
0075 - {id: CSI_CLK_ROOT.outFreq, value: 24 MHz}
0076 - {id: CSSYS_CLK_ROOT.outFreq, value: 24 MHz}
0077 - {id: CSTRACE_CLK_ROOT.outFreq, value: 132 MHz}
0078 - {id: ELCDIF_CLK_ROOT.outFreq, value: 24 MHz}
0079 - {id: EMV1_CLK_ROOT.outFreq, value: 24 MHz}
0080 - {id: EMV2_CLK_ROOT.outFreq, value: 24 MHz}
0081 - {id: ENET1_CLK_ROOT.outFreq, value: 50 MHz, locked: true, accuracy: '0.001'}
0082 - {id: ENET2_CLK_ROOT.outFreq, value: 24 MHz}
0083 - {id: ENET_1G_TX_CLK.outFreq, value: 24 MHz}
0084 - {id: ENET_25M_CLK_ROOT.outFreq, value: 25 MHz, locked: true, accuracy: '0.001'}
0085 - {id: ENET_REF_CLK.outFreq, value: 50 MHz, locked: true, accuracy: '0.001'}
0086 - {id: ENET_TIMER1_CLK_ROOT.outFreq, value: 24 MHz}
0087 - {id: ENET_TIMER2_CLK_ROOT.outFreq, value: 24 MHz}
0088 - {id: ENET_TX_CLK.outFreq, value: 25 MHz, locked: true, accuracy: '0.001'}
0089 - {id: FLEXIO1_CLK_ROOT.outFreq, value: 24 MHz}
0090 - {id: FLEXIO2_CLK_ROOT.outFreq, value: 24 MHz}
0091 - {id: FLEXSPI1_CLK_ROOT.outFreq, value: 24 MHz}
0092 - {id: FLEXSPI2_CLK_ROOT.outFreq, value: 24 MHz}
0093 - {id: GC355_CLK_ROOT.outFreq, value: 492.0000125 MHz}
0094 - {id: GPT1_CLK_ROOT.outFreq, value: 24 MHz}
0095 - {id: GPT1_ipg_clk_highfreq.outFreq, value: 24 MHz}
0096 - {id: GPT2_CLK_ROOT.outFreq, value: 24 MHz}
0097 - {id: GPT2_ipg_clk_highfreq.outFreq, value: 24 MHz}
0098 - {id: GPT3_CLK_ROOT.outFreq, value: 24 MHz}
0099 - {id: GPT3_ipg_clk_highfreq.outFreq, value: 24 MHz}
0100 - {id: GPT4_CLK_ROOT.outFreq, value: 24 MHz}
0101 - {id: GPT4_ipg_clk_highfreq.outFreq, value: 24 MHz}
0102 - {id: GPT5_CLK_ROOT.outFreq, value: 24 MHz}
0103 - {id: GPT5_ipg_clk_highfreq.outFreq, value: 24 MHz}
0104 - {id: GPT6_CLK_ROOT.outFreq, value: 24 MHz}
0105 - {id: GPT6_ipg_clk_highfreq.outFreq, value: 24 MHz}
0106 - {id: LCDIFV2_CLK_ROOT.outFreq, value: 24 MHz}
0107 - {id: LPI2C1_CLK_ROOT.outFreq, value: 24 MHz}
0108 - {id: LPI2C2_CLK_ROOT.outFreq, value: 24 MHz}
0109 - {id: LPI2C3_CLK_ROOT.outFreq, value: 24 MHz}
0110 - {id: LPI2C4_CLK_ROOT.outFreq, value: 24 MHz}
0111 - {id: LPI2C5_CLK_ROOT.outFreq, value: 24 MHz}
0112 - {id: LPI2C6_CLK_ROOT.outFreq, value: 24 MHz}
0113 - {id: LPSPI1_CLK_ROOT.outFreq, value: 50 MHz}
0114 - {id: LPSPI2_CLK_ROOT.outFreq, value: 50 MHz}
0115 - {id: LPSPI3_CLK_ROOT.outFreq, value: 50 MHz}
0116 - {id: LPSPI4_CLK_ROOT.outFreq, value: 50 MHz}
0117 - {id: LPSPI5_CLK_ROOT.outFreq, value: 50 MHz}
0118 - {id: LPSPI6_CLK_ROOT.outFreq, value: 50 MHz}
0119 - {id: LPUART10_CLK_ROOT.outFreq, value: 24 MHz}
0120 - {id: LPUART11_CLK_ROOT.outFreq, value: 24 MHz}
0121 - {id: LPUART12_CLK_ROOT.outFreq, value: 24 MHz}
0122 - {id: LPUART1_CLK_ROOT.outFreq, value: 24 MHz}
0123 - {id: LPUART2_CLK_ROOT.outFreq, value: 24 MHz}
0124 - {id: LPUART3_CLK_ROOT.outFreq, value: 24 MHz}
0125 - {id: LPUART4_CLK_ROOT.outFreq, value: 24 MHz}
0126 - {id: LPUART5_CLK_ROOT.outFreq, value: 24 MHz}
0127 - {id: LPUART6_CLK_ROOT.outFreq, value: 24 MHz}
0128 - {id: LPUART7_CLK_ROOT.outFreq, value: 24 MHz}
0129 - {id: LPUART8_CLK_ROOT.outFreq, value: 24 MHz}
0130 - {id: LPUART9_CLK_ROOT.outFreq, value: 24 MHz}
0131 - {id: M4_CLK_ROOT.outFreq, value: 240 MHz}
0132 - {id: M4_SYSTICK_CLK_ROOT.outFreq, value: 24 MHz}
0133 - {id: M7_CLK_ROOT.outFreq, value: 600 MHz}
0134 - {id: M7_SYSTICK_CLK_ROOT.outFreq, value: 24 MHz}
0135 - {id: MIC_CLK_ROOT.outFreq, value: 24 MHz}
0136 - {id: MIPI_DSI_TX_CLK_ESC_ROOT.outFreq, value: 24 MHz}
0137 - {id: MIPI_ESC_CLK_ROOT.outFreq, value: 24 MHz}
0138 - {id: MIPI_REF_CLK_ROOT.outFreq, value: 24 MHz}
0139 - {id: MQS_CLK_ROOT.outFreq, value: 24 MHz}
0140 - {id: MQS_MCLK.outFreq, value: 24 MHz}
0141 - {id: OSC_24M.outFreq, value: 24 MHz}
0142 - {id: OSC_32K.outFreq, value: 32.768 kHz}
0143 - {id: OSC_RC_16M.outFreq, value: 16 MHz}
0144 - {id: OSC_RC_400M.outFreq, value: 400 MHz}
0145 - {id: OSC_RC_48M.outFreq, value: 48 MHz}
0146 - {id: OSC_RC_48M_DIV2.outFreq, value: 24 MHz}
0147 - {id: PLL_VIDEO_CLK.outFreq, value: 984.000025 MHz, locked: true, accuracy: '0.001'}
0148 - {id: SAI1_CLK_ROOT.outFreq, value: 24 MHz}
0149 - {id: SAI1_MCLK1.outFreq, value: 24 MHz}
0150 - {id: SAI1_MCLK3.outFreq, value: 24 MHz}
0151 - {id: SAI2_CLK_ROOT.outFreq, value: 24 MHz}
0152 - {id: SAI2_MCLK1.outFreq, value: 24 MHz}
0153 - {id: SAI2_MCLK3.outFreq, value: 24 MHz}
0154 - {id: SAI3_CLK_ROOT.outFreq, value: 24 MHz}
0155 - {id: SAI3_MCLK1.outFreq, value: 24 MHz}
0156 - {id: SAI3_MCLK3.outFreq, value: 24 MHz}
0157 - {id: SAI4_CLK_ROOT.outFreq, value: 24 MHz}
0158 - {id: SAI4_MCLK1.outFreq, value: 24 MHz}
0159 - {id: SEMC_CLK_ROOT.outFreq, value: 2160/13 MHz}
0160 - {id: SPDIF_CLK_ROOT.outFreq, value: 24 MHz}
0161 - {id: SYS_PLL1_CLK.outFreq, value: 1 GHz, locked: true, accuracy: '0.001'}
0162 - {id: SYS_PLL1_DIV2_CLK.outFreq, value: 500 MHz, locked: true, accuracy: '0.001'}
0163 - {id: SYS_PLL1_DIV5_CLK.outFreq, value: 200 MHz, locked: true, accuracy: '0.001'}
0164 - {id: SYS_PLL2_CLK.outFreq, value: 528 MHz, locked: true, accuracy: '0.001'}
0165 - {id: SYS_PLL2_PFD0_CLK.outFreq, value: 352 MHz, locked: true, accuracy: '0.001'}
0166 - {id: SYS_PLL2_PFD1_CLK.outFreq, value: 594 MHz, locked: true, accuracy: '0.001'}
0167 - {id: SYS_PLL2_PFD2_CLK.outFreq, value: 396 MHz, locked: true, accuracy: '0.001'}
0168 - {id: SYS_PLL2_PFD3_CLK.outFreq, value: 396 MHz, locked: true, accuracy: '0.001'}
0169 - {id: SYS_PLL3_CLK.outFreq, value: 480 MHz, locked: true, accuracy: '0.001'}
0170 - {id: SYS_PLL3_DIV2_CLK.outFreq, value: 240 MHz, locked: true, accuracy: '0.001'}
0171 - {id: SYS_PLL3_PFD0_CLK.outFreq, value: 8640/13 MHz, locked: true, accuracy: '0.001'}
0172 - {id: SYS_PLL3_PFD1_CLK.outFreq, value: 8640/17 MHz, locked: true, accuracy: '0.001'}
0173 - {id: SYS_PLL3_PFD2_CLK.outFreq, value: 270 MHz, locked: true, accuracy: '0.001'}
0174 - {id: SYS_PLL3_PFD3_CLK.outFreq, value: 4320/11 MHz, locked: true, accuracy: '0.001'}
0175 - {id: USDHC1_CLK_ROOT.outFreq, value: 200 MHz}
0176 - {id: USDHC2_CLK_ROOT.outFreq, value: 24 MHz}
0177 settings:
0178 - {id: CoreBusClockRootsInitializationConfig, value: selectedCore}
0179 - {id: SemcConfigurationPatchConfig, value: disabled}
0180 - {id: ANADIG_OSC_OSC_24M_CTRL_LP_EN_CFG, value: Low}
0181 - {id: ANADIG_OSC_OSC_24M_CTRL_OSC_EN_CFG, value: Enabled}
0182 - {id: ANADIG_PLL.ARM_PLL_POST_DIV.scale, value: '4'}
0183 - {id: ANADIG_PLL.ARM_PLL_VDIV.scale, value: '100'}
0184 - {id: ANADIG_PLL.PLL_AUDIO_BYPASS.sel, value: ANADIG_OSC.OSC_24M}
0185 - {id: ANADIG_PLL.PLL_VIDEO.denom, value: '960000'}
0186 - {id: ANADIG_PLL.PLL_VIDEO.div, value: '41'}
0187 - {id: ANADIG_PLL.PLL_VIDEO.num, value: '1'}
0188 - {id: ANADIG_PLL.SYS_PLL2.denom, value: '268435455'}
0189 - {id: ANADIG_PLL.SYS_PLL2.div, value: '22'}
0190 - {id: ANADIG_PLL.SYS_PLL2.num, value: '0'}
0191 - {id: ANADIG_PLL.SYS_PLL2_PFD3_DIV.scale, value: '24'}
0192 - {id: ANADIG_PLL.SYS_PLL2_SS_DIV.scale, value: '268435455'}
0193 - {id: ANADIG_PLL.SYS_PLL3_PFD3_DIV.scale, value: '22', locked: true}
0194 - {id: ANADIG_PLL.SYS_PLL3_PFD3_MUL.scale, value: '18', locked: true}
0195 - {id: ANADIG_PLL_ARM_PLL_CTRL_POWERUP_CFG, value: Enabled}
0196 - {id: ANADIG_PLL_PLL_AUDIO_CTRL_GATE_CFG, value: Disabled}
0197 - {id: ANADIG_PLL_PLL_VIDEO_CTRL0_POWERUP_CFG, value: Enabled}
0198 - {id: ANADIG_PLL_SYS_PLL1_CTRL_SYS_PLL1_DIV2_CFG, value: Enabled}
0199 - {id: ANADIG_PLL_SYS_PLL1_CTRL_SYS_PLL1_DIV5_CFG, value: Enabled}
0200 - {id: ANADIG_PLL_SYS_PLL2_CTRL_POWERUP_CFG, value: Enabled}
0201 - {id: ANADIG_PLL_SYS_PLL3_CTRL_POWERUP_CFG, value: Enabled}
0202 - {id: ANADIG_PLL_SYS_PLL3_CTRL_SYS_PLL3_DIV2_CFG, value: Enabled}
0203 - {id: CCM.CLOCK_ROOT0.MUX.sel, value: ANADIG_PLL.ARM_PLL_CLK}
0204 - {id: CCM.CLOCK_ROOT1.DIV.scale, value: '2'}
0205 - {id: CCM.CLOCK_ROOT1.MUX.sel, value: ANADIG_PLL.SYS_PLL3_CLK}
0206 - {id: CCM.CLOCK_ROOT2.DIV.scale, value: '2'}
0207 - {id: CCM.CLOCK_ROOT2.MUX.sel, value: ANADIG_PLL.SYS_PLL2_PFD3_CLK}
0208 - {id: CCM.CLOCK_ROOT25.DIV.scale, value: '22'}
0209 - {id: CCM.CLOCK_ROOT25.MUX.sel, value: ANADIG_PLL.SYS_PLL2_CLK}
0210 - {id: CCM.CLOCK_ROOT26.DIV.scale, value: '22'}
0211 - {id: CCM.CLOCK_ROOT26.MUX.sel, value: ANADIG_PLL.SYS_PLL2_CLK}
0212 - {id: CCM.CLOCK_ROOT3.DIV.scale, value: '4'}
0213 - {id: CCM.CLOCK_ROOT3.MUX.sel, value: ANADIG_PLL.SYS_PLL3_CLK}
0214 - {id: CCM.CLOCK_ROOT4.DIV.scale, value: '4'}
0215 - {id: CCM.CLOCK_ROOT4.MUX.sel, value: ANADIG_PLL.SYS_PLL3_PFD0_CLK}
0216 - {id: CCM.CLOCK_ROOT43.DIV.scale, value: '4', locked: true}
0217 - {id: CCM.CLOCK_ROOT43.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0218 - {id: CCM.CLOCK_ROOT44.DIV.scale, value: '4', locked: true}
0219 - {id: CCM.CLOCK_ROOT44.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0220 - {id: CCM.CLOCK_ROOT45.DIV.scale, value: '4', locked: true}
0221 - {id: CCM.CLOCK_ROOT45.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0222 - {id: CCM.CLOCK_ROOT46.DIV.scale, value: '4', locked: true}
0223 - {id: CCM.CLOCK_ROOT46.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0224 - {id: CCM.CLOCK_ROOT47.DIV.scale, value: '4', locked: true}
0225 - {id: CCM.CLOCK_ROOT47.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0226 - {id: CCM.CLOCK_ROOT48.DIV.scale, value: '4', locked: true}
0227 - {id: CCM.CLOCK_ROOT48.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0228 - {id: CCM.CLOCK_ROOT51.DIV.scale, value: '4'}
0229 - {id: CCM.CLOCK_ROOT51.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0230 - {id: CCM.CLOCK_ROOT54.DIV.scale, value: '8'}
0231 - {id: CCM.CLOCK_ROOT54.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0232 - {id: CCM.CLOCK_ROOT55.MUX.sel, value: ANADIG_OSC.OSC_24M}
0233 - {id: CCM.CLOCK_ROOT58.MUX.sel, value: ANADIG_PLL.SYS_PLL1_DIV5_CLK}
0234 - {id: CCM.CLOCK_ROOT6.DIV.scale, value: '4'}
0235 - {id: CCM.CLOCK_ROOT6.MUX.sel, value: ANADIG_PLL.SYS_PLL2_CLK}
0236 - {id: CCM.CLOCK_ROOT68.DIV.scale, value: '2'}
0237 - {id: CCM.CLOCK_ROOT68.MUX.sel, value: ANADIG_PLL.PLL_VIDEO_CLK}
0238 - {id: IOMUXC_GPR.ENET_REF_CLK_SEL.sel, value: CCM.ENET1_CLK_ROOT}
0239 sources:
0240 - {id: IOMUXC_GPR.ENET_REF_CLK_EXT.outFreq, value: 50 MHz, enabled: true}
0241 - {id: IOMUXC_GPR.ENET_TX_CLK_EXT.outFreq, value: 25 MHz, enabled: true}
0242  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
0243 
0244 /*******************************************************************************
0245  * Variables for BOARD_BootClockRUN configuration
0246  ******************************************************************************/
0247 
0248 #if __CORTEX_M == 7
0249 #define BYPASS_LDO_LPSR 1
0250 #endif
0251 
0252 const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN =
0253     {
0254         .postDivider = kCLOCK_PllPostDiv4,        /* Post divider, 0 - DIV by 2, 1 - DIV by 4, 2 - DIV by 8, 3 - DIV by 1 */
0255         .loopDivider = 200,                       /* PLL Loop divider, Fout = Fin * ( loopDivider / ( 2 * postDivider ) ) */
0256     };
0257 
0258 const clock_sys_pll1_config_t sysPll1Config_BOARD_BootClockRUN =
0259     {
0260         .pllDiv2En = 1,                           /* Enable Sys Pll1 divide-by-2 clock or not */
0261         .pllDiv5En = 1,                           /* Enable Sys Pll1 divide-by-5 clock or not */
0262         .ss = NULL,                               /* Spread spectrum parameter */
0263         .ssEnable = false,                        /* Enable spread spectrum or not */
0264     };
0265 
0266 const clock_sys_pll2_config_t sysPll2Config_BOARD_BootClockRUN =
0267     {
0268         .mfd = 268435455,                         /* Denominator of spread spectrum */
0269         .ss = NULL,                               /* Spread spectrum parameter */
0270         .ssEnable = false,                        /* Enable spread spectrum or not */
0271     };
0272 
0273 const clock_video_pll_config_t videoPllConfig_BOARD_BootClockRUN =
0274     {
0275         .loopDivider = 41,                        /* PLL Loop divider, valid range for DIV_SELECT divider value: 27 ~ 54. */
0276         .postDivider = 0,                         /* Divider after PLL, should only be 1, 2, 4, 8, 16, 32 */
0277         .numerator = 1,                           /* 30 bit numerator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
0278         .denominator = 960000,                    /* 30 bit denominator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
0279         .ss = NULL,                               /* Spread spectrum parameter */
0280         .ssEnable = false,                        /* Enable spread spectrum or not */
0281     };
0282 
0283 /*******************************************************************************
0284  * Code for BOARD_BootClockRUN configuration
0285  ******************************************************************************/
0286 void BOARD_BootClockRUN(void)
0287 {
0288     clock_root_config_t rootCfg = {0};
0289 
0290     /* Set DCDC to DCM mode to improve the efficiency for light loading in run mode and transient performance with a big loading step. */
0291     DCDC_BootIntoDCM(DCDC);
0292 
0293 #if defined(BYPASS_LDO_LPSR) && BYPASS_LDO_LPSR
0294     PMU_StaticEnableLpsrAnaLdoBypassMode(ANADIG_LDO_SNVS, true);
0295     PMU_StaticEnableLpsrDigLdoBypassMode(ANADIG_LDO_SNVS, true);
0296 #endif
0297 
0298     /* Config CLK_1M */
0299     CLOCK_OSC_Set1MHzOutputBehavior(kCLOCK_1MHzOutEnableFreeRunning1Mhz);
0300 
0301     /* Init OSC RC 16M */
0302     ANADIG_OSC->OSC_16M_CTRL |= ANADIG_OSC_OSC_16M_CTRL_EN_IRC4M16M_MASK;
0303 
0304     /* Init OSC RC 400M */
0305     CLOCK_OSC_EnableOscRc400M();
0306     CLOCK_OSC_GateOscRc400M(true);
0307 
0308     /* Init OSC RC 48M */
0309     CLOCK_OSC_EnableOsc48M(true);
0310     CLOCK_OSC_EnableOsc48MDiv2(true);
0311 
0312     /* Config OSC 24M */
0313     ANADIG_OSC->OSC_24M_CTRL |= ANADIG_OSC_OSC_24M_CTRL_OSC_EN(1) | ANADIG_OSC_OSC_24M_CTRL_BYPASS_EN(0) | ANADIG_OSC_OSC_24M_CTRL_BYPASS_CLK(0) | ANADIG_OSC_OSC_24M_CTRL_LP_EN(1) | ANADIG_OSC_OSC_24M_CTRL_OSC_24M_GATE(0);
0314     /* Wait for 24M OSC to be stable. */
0315     while (ANADIG_OSC_OSC_24M_CTRL_OSC_24M_STABLE_MASK !=
0316             (ANADIG_OSC->OSC_24M_CTRL & ANADIG_OSC_OSC_24M_CTRL_OSC_24M_STABLE_MASK))
0317     {
0318     }
0319 
0320     /* Swicth both core, M7 Systick and Bus_Lpsr to OscRC48MDiv2 first */
0321 #if __CORTEX_M == 7
0322     rootCfg.mux = kCLOCK_M7_ClockRoot_MuxOscRc48MDiv2;
0323     rootCfg.div = 1;
0324     CLOCK_SetRootClock(kCLOCK_Root_M7, &rootCfg);
0325 
0326     rootCfg.mux = kCLOCK_M7_SYSTICK_ClockRoot_MuxOscRc48MDiv2;
0327     rootCfg.div = 1;
0328     CLOCK_SetRootClock(kCLOCK_Root_M7_Systick, &rootCfg);
0329 #endif
0330 
0331 #if __CORTEX_M == 4
0332     rootCfg.mux = kCLOCK_M4_ClockRoot_MuxOscRc48MDiv2;
0333     rootCfg.div = 1;
0334     CLOCK_SetRootClock(kCLOCK_Root_M4, &rootCfg);
0335 
0336     rootCfg.mux = kCLOCK_BUS_LPSR_ClockRoot_MuxOscRc48MDiv2;
0337     rootCfg.div = 1;
0338     CLOCK_SetRootClock(kCLOCK_Root_Bus_Lpsr, &rootCfg);
0339 #endif
0340 
0341     /* Init Arm Pll. */
0342     CLOCK_InitArmPll(&armPllConfig_BOARD_BootClockRUN);
0343 
0344     /* Init Sys Pll1. */
0345     CLOCK_InitSysPll1(&sysPll1Config_BOARD_BootClockRUN);
0346 
0347     /* Init Sys Pll2. */
0348     CLOCK_InitSysPll2(&sysPll2Config_BOARD_BootClockRUN);
0349 
0350     /* Init System Pll2 pfd0. */
0351     CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd0, 27);
0352 
0353     /* Init System Pll2 pfd1. */
0354     CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd1, 16);
0355 
0356     /* Init System Pll2 pfd2. */
0357     CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd2, 24);
0358 
0359     /* Init System Pll2 pfd3. */
0360     CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd3, 24);
0361 
0362     /* Init Sys Pll3. */
0363     CLOCK_InitSysPll3();
0364 
0365     /* Init System Pll3 pfd0. */
0366     CLOCK_InitPfd(kCLOCK_PllSys3, kCLOCK_Pfd0, 13);
0367 
0368     /* Init System Pll3 pfd1. */
0369     CLOCK_InitPfd(kCLOCK_PllSys3, kCLOCK_Pfd1, 17);
0370 
0371     /* Init System Pll3 pfd2. */
0372     CLOCK_InitPfd(kCLOCK_PllSys3, kCLOCK_Pfd2, 32);
0373 
0374     /* Init System Pll3 pfd3. */
0375     CLOCK_InitPfd(kCLOCK_PllSys3, kCLOCK_Pfd3, 22);
0376 
0377     /* Bypass Audio Pll. */
0378     CLOCK_SetPllBypass(kCLOCK_PllAudio, true);
0379 
0380     /* DeInit Audio Pll. */
0381     CLOCK_DeinitAudioPll();
0382 
0383     /* Init Video Pll. */
0384     CLOCK_InitVideoPll(&videoPllConfig_BOARD_BootClockRUN);
0385 
0386     /* Module clock root configurations. */
0387     /* Configure M7 using ARM_PLL_CLK */
0388 #if __CORTEX_M == 7
0389     rootCfg.mux = kCLOCK_M7_ClockRoot_MuxArmPllOut;
0390     rootCfg.div = 1;
0391     CLOCK_SetRootClock(kCLOCK_Root_M7, &rootCfg);
0392 #endif
0393 
0394     /* Configure M4 using SYS_PLL3_CLK */
0395 #if __CORTEX_M == 4
0396     rootCfg.mux = kCLOCK_M4_ClockRoot_MuxSysPll3Out;
0397     rootCfg.div = 2;
0398     CLOCK_SetRootClock(kCLOCK_Root_M4, &rootCfg);
0399 #endif
0400 
0401     /* Configure BUS using SYS_PLL2_PFD3_CLK */
0402     rootCfg.mux = kCLOCK_BUS_ClockRoot_MuxSysPll2Pfd3;
0403     rootCfg.div = 2;
0404     CLOCK_SetRootClock(kCLOCK_Root_Bus, &rootCfg);
0405 
0406     /* Configure BUS_LPSR using SYS_PLL3_CLK */
0407     rootCfg.mux = kCLOCK_BUS_LPSR_ClockRoot_MuxSysPll3Out;
0408     rootCfg.div = 4;
0409     CLOCK_SetRootClock(kCLOCK_Root_Bus_Lpsr, &rootCfg);
0410 
0411     /* Configure SEMC using SYS_PLL3_PFD0_CLK */
0412 #ifndef SKIP_SEMC_INIT
0413     rootCfg.mux = kCLOCK_SEMC_ClockRoot_MuxSysPll3Pfd0;
0414     rootCfg.div = 4;
0415     CLOCK_SetRootClock(kCLOCK_Root_Semc, &rootCfg);
0416 #endif
0417 
0418     /* Configure CSSYS using OSC_RC_48M_DIV2 */
0419     rootCfg.mux = kCLOCK_CSSYS_ClockRoot_MuxOscRc48MDiv2;
0420     rootCfg.div = 1;
0421     CLOCK_SetRootClock(kCLOCK_Root_Cssys, &rootCfg);
0422 
0423     /* Configure CSTRACE using SYS_PLL2_CLK */
0424     rootCfg.mux = kCLOCK_CSTRACE_ClockRoot_MuxSysPll2Out;
0425     rootCfg.div = 4;
0426     CLOCK_SetRootClock(kCLOCK_Root_Cstrace, &rootCfg);
0427 
0428     /* Configure M4_SYSTICK using OSC_RC_48M_DIV2 */
0429 #if __CORTEX_M == 4
0430     rootCfg.mux = kCLOCK_M4_SYSTICK_ClockRoot_MuxOscRc48MDiv2;
0431     rootCfg.div = 1;
0432     CLOCK_SetRootClock(kCLOCK_Root_M4_Systick, &rootCfg);
0433 #endif
0434 
0435     /* Configure M7_SYSTICK using OSC_RC_48M_DIV2 */
0436 #if __CORTEX_M == 7
0437     rootCfg.mux = kCLOCK_M7_SYSTICK_ClockRoot_MuxOscRc48MDiv2;
0438     rootCfg.div = 1;
0439     CLOCK_SetRootClock(kCLOCK_Root_M7_Systick, &rootCfg);
0440 #endif
0441 
0442     /* Configure ADC1 using OSC_RC_48M_DIV2 */
0443     rootCfg.mux = kCLOCK_ADC1_ClockRoot_MuxOscRc48MDiv2;
0444     rootCfg.div = 1;
0445     CLOCK_SetRootClock(kCLOCK_Root_Adc1, &rootCfg);
0446 
0447     /* Configure ADC2 using OSC_RC_48M_DIV2 */
0448     rootCfg.mux = kCLOCK_ADC2_ClockRoot_MuxOscRc48MDiv2;
0449     rootCfg.div = 1;
0450     CLOCK_SetRootClock(kCLOCK_Root_Adc2, &rootCfg);
0451 
0452     /* Configure ACMP using OSC_RC_48M_DIV2 */
0453     rootCfg.mux = kCLOCK_ACMP_ClockRoot_MuxOscRc48MDiv2;
0454     rootCfg.div = 1;
0455     CLOCK_SetRootClock(kCLOCK_Root_Acmp, &rootCfg);
0456 
0457     /* Configure FLEXIO1 using OSC_RC_48M_DIV2 */
0458     rootCfg.mux = kCLOCK_FLEXIO1_ClockRoot_MuxOscRc48MDiv2;
0459     rootCfg.div = 1;
0460     CLOCK_SetRootClock(kCLOCK_Root_Flexio1, &rootCfg);
0461 
0462     /* Configure FLEXIO2 using OSC_RC_48M_DIV2 */
0463     rootCfg.mux = kCLOCK_FLEXIO2_ClockRoot_MuxOscRc48MDiv2;
0464     rootCfg.div = 1;
0465     CLOCK_SetRootClock(kCLOCK_Root_Flexio2, &rootCfg);
0466 
0467     /* Configure GPT1 using OSC_RC_48M_DIV2 */
0468     rootCfg.mux = kCLOCK_GPT1_ClockRoot_MuxOscRc48MDiv2;
0469     rootCfg.div = 1;
0470     CLOCK_SetRootClock(kCLOCK_Root_Gpt1, &rootCfg);
0471 
0472     /* Configure GPT2 using OSC_RC_48M_DIV2 */
0473     rootCfg.mux = kCLOCK_GPT2_ClockRoot_MuxOscRc48MDiv2;
0474     rootCfg.div = 1;
0475     CLOCK_SetRootClock(kCLOCK_Root_Gpt2, &rootCfg);
0476 
0477     /* Configure GPT3 using OSC_RC_48M_DIV2 */
0478     rootCfg.mux = kCLOCK_GPT3_ClockRoot_MuxOscRc48MDiv2;
0479     rootCfg.div = 1;
0480     CLOCK_SetRootClock(kCLOCK_Root_Gpt3, &rootCfg);
0481 
0482     /* Configure GPT4 using OSC_RC_48M_DIV2 */
0483     rootCfg.mux = kCLOCK_GPT4_ClockRoot_MuxOscRc48MDiv2;
0484     rootCfg.div = 1;
0485     CLOCK_SetRootClock(kCLOCK_Root_Gpt4, &rootCfg);
0486 
0487     /* Configure GPT5 using OSC_RC_48M_DIV2 */
0488     rootCfg.mux = kCLOCK_GPT5_ClockRoot_MuxOscRc48MDiv2;
0489     rootCfg.div = 1;
0490     CLOCK_SetRootClock(kCLOCK_Root_Gpt5, &rootCfg);
0491 
0492     /* Configure GPT6 using OSC_RC_48M_DIV2 */
0493     rootCfg.mux = kCLOCK_GPT6_ClockRoot_MuxOscRc48MDiv2;
0494     rootCfg.div = 1;
0495     CLOCK_SetRootClock(kCLOCK_Root_Gpt6, &rootCfg);
0496 
0497     /* Configure FLEXSPI1 using OSC_RC_48M_DIV2 */
0498 #if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1) || defined(FLEXSPI_IN_USE))
0499     rootCfg.mux = kCLOCK_FLEXSPI1_ClockRoot_MuxOscRc48MDiv2;
0500     rootCfg.div = 1;
0501     CLOCK_SetRootClock(kCLOCK_Root_Flexspi1, &rootCfg);
0502 #endif
0503 
0504     /* Configure FLEXSPI2 using OSC_RC_48M_DIV2 */
0505     rootCfg.mux = kCLOCK_FLEXSPI2_ClockRoot_MuxOscRc48MDiv2;
0506     rootCfg.div = 1;
0507     CLOCK_SetRootClock(kCLOCK_Root_Flexspi2, &rootCfg);
0508 
0509     /* Configure CAN1 using OSC_RC_48M_DIV2 */
0510     rootCfg.mux = kCLOCK_CAN1_ClockRoot_MuxOscRc48MDiv2;
0511     rootCfg.div = 1;
0512     CLOCK_SetRootClock(kCLOCK_Root_Can1, &rootCfg);
0513 
0514     /* Configure CAN2 using OSC_RC_48M_DIV2 */
0515     rootCfg.mux = kCLOCK_CAN2_ClockRoot_MuxOscRc48MDiv2;
0516     rootCfg.div = 1;
0517     CLOCK_SetRootClock(kCLOCK_Root_Can2, &rootCfg);
0518 
0519     /* Configure CAN3 using OSC_RC_48M_DIV2 */
0520     rootCfg.mux = kCLOCK_CAN3_ClockRoot_MuxOscRc48MDiv2;
0521     rootCfg.div = 1;
0522     CLOCK_SetRootClock(kCLOCK_Root_Can3, &rootCfg);
0523 
0524     /* Configure LPUART1 using SYS_PLL2_CLK */
0525     rootCfg.mux = kCLOCK_LPUART1_ClockRoot_MuxSysPll2Out;
0526     rootCfg.div = 22;
0527     CLOCK_SetRootClock(kCLOCK_Root_Lpuart1, &rootCfg);
0528 
0529     /* Configure LPUART2 using SYS_PLL2_CLK */
0530     rootCfg.mux = kCLOCK_LPUART2_ClockRoot_MuxSysPll2Out;
0531     rootCfg.div = 22;
0532     CLOCK_SetRootClock(kCLOCK_Root_Lpuart2, &rootCfg);
0533 
0534     /* Configure LPUART3 using OSC_RC_48M_DIV2 */
0535     rootCfg.mux = kCLOCK_LPUART3_ClockRoot_MuxOscRc48MDiv2;
0536     rootCfg.div = 1;
0537     CLOCK_SetRootClock(kCLOCK_Root_Lpuart3, &rootCfg);
0538 
0539     /* Configure LPUART4 using OSC_RC_48M_DIV2 */
0540     rootCfg.mux = kCLOCK_LPUART4_ClockRoot_MuxOscRc48MDiv2;
0541     rootCfg.div = 1;
0542     CLOCK_SetRootClock(kCLOCK_Root_Lpuart4, &rootCfg);
0543 
0544     /* Configure LPUART5 using OSC_RC_48M_DIV2 */
0545     rootCfg.mux = kCLOCK_LPUART5_ClockRoot_MuxOscRc48MDiv2;
0546     rootCfg.div = 1;
0547     CLOCK_SetRootClock(kCLOCK_Root_Lpuart5, &rootCfg);
0548 
0549     /* Configure LPUART6 using OSC_RC_48M_DIV2 */
0550     rootCfg.mux = kCLOCK_LPUART6_ClockRoot_MuxOscRc48MDiv2;
0551     rootCfg.div = 1;
0552     CLOCK_SetRootClock(kCLOCK_Root_Lpuart6, &rootCfg);
0553 
0554     /* Configure LPUART7 using OSC_RC_48M_DIV2 */
0555     rootCfg.mux = kCLOCK_LPUART7_ClockRoot_MuxOscRc48MDiv2;
0556     rootCfg.div = 1;
0557     CLOCK_SetRootClock(kCLOCK_Root_Lpuart7, &rootCfg);
0558 
0559     /* Configure LPUART8 using OSC_RC_48M_DIV2 */
0560     rootCfg.mux = kCLOCK_LPUART8_ClockRoot_MuxOscRc48MDiv2;
0561     rootCfg.div = 1;
0562     CLOCK_SetRootClock(kCLOCK_Root_Lpuart8, &rootCfg);
0563 
0564     /* Configure LPUART9 using OSC_RC_48M_DIV2 */
0565     rootCfg.mux = kCLOCK_LPUART9_ClockRoot_MuxOscRc48MDiv2;
0566     rootCfg.div = 1;
0567     CLOCK_SetRootClock(kCLOCK_Root_Lpuart9, &rootCfg);
0568 
0569     /* Configure LPUART10 using OSC_RC_48M_DIV2 */
0570     rootCfg.mux = kCLOCK_LPUART10_ClockRoot_MuxOscRc48MDiv2;
0571     rootCfg.div = 1;
0572     CLOCK_SetRootClock(kCLOCK_Root_Lpuart10, &rootCfg);
0573 
0574     /* Configure LPUART11 using OSC_RC_48M_DIV2 */
0575     rootCfg.mux = kCLOCK_LPUART11_ClockRoot_MuxOscRc48MDiv2;
0576     rootCfg.div = 1;
0577     CLOCK_SetRootClock(kCLOCK_Root_Lpuart11, &rootCfg);
0578 
0579     /* Configure LPUART12 using OSC_RC_48M_DIV2 */
0580     rootCfg.mux = kCLOCK_LPUART12_ClockRoot_MuxOscRc48MDiv2;
0581     rootCfg.div = 1;
0582     CLOCK_SetRootClock(kCLOCK_Root_Lpuart12, &rootCfg);
0583 
0584     /* Configure LPI2C1 using OSC_RC_48M_DIV2 */
0585     rootCfg.mux = kCLOCK_LPI2C1_ClockRoot_MuxOscRc48MDiv2;
0586     rootCfg.div = 1;
0587     CLOCK_SetRootClock(kCLOCK_Root_Lpi2c1, &rootCfg);
0588 
0589     /* Configure LPI2C2 using OSC_RC_48M_DIV2 */
0590     rootCfg.mux = kCLOCK_LPI2C2_ClockRoot_MuxOscRc48MDiv2;
0591     rootCfg.div = 1;
0592     CLOCK_SetRootClock(kCLOCK_Root_Lpi2c2, &rootCfg);
0593 
0594     /* Configure LPI2C3 using OSC_RC_48M_DIV2 */
0595     rootCfg.mux = kCLOCK_LPI2C3_ClockRoot_MuxOscRc48MDiv2;
0596     rootCfg.div = 1;
0597     CLOCK_SetRootClock(kCLOCK_Root_Lpi2c3, &rootCfg);
0598 
0599     /* Configure LPI2C4 using OSC_RC_48M_DIV2 */
0600     rootCfg.mux = kCLOCK_LPI2C4_ClockRoot_MuxOscRc48MDiv2;
0601     rootCfg.div = 1;
0602     CLOCK_SetRootClock(kCLOCK_Root_Lpi2c4, &rootCfg);
0603 
0604     /* Configure LPI2C5 using OSC_RC_48M_DIV2 */
0605     rootCfg.mux = kCLOCK_LPI2C5_ClockRoot_MuxOscRc48MDiv2;
0606     rootCfg.div = 1;
0607     CLOCK_SetRootClock(kCLOCK_Root_Lpi2c5, &rootCfg);
0608 
0609     /* Configure LPI2C6 using OSC_RC_48M_DIV2 */
0610     rootCfg.mux = kCLOCK_LPI2C6_ClockRoot_MuxOscRc48MDiv2;
0611     rootCfg.div = 1;
0612     CLOCK_SetRootClock(kCLOCK_Root_Lpi2c6, &rootCfg);
0613 
0614     /* Configure LPSPI1 using SYS_PLL1_DIV5_CLK */
0615     rootCfg.mux = kCLOCK_LPSPI1_ClockRoot_MuxSysPll1Div5;
0616     rootCfg.div = 4;
0617     CLOCK_SetRootClock(kCLOCK_Root_Lpspi1, &rootCfg);
0618 
0619     /* Configure LPSPI2 using SYS_PLL1_DIV5_CLK */
0620     rootCfg.mux = kCLOCK_LPSPI2_ClockRoot_MuxSysPll1Div5;
0621     rootCfg.div = 4;
0622     CLOCK_SetRootClock(kCLOCK_Root_Lpspi2, &rootCfg);
0623 
0624     /* Configure LPSPI3 using SYS_PLL1_DIV5_CLK */
0625     rootCfg.mux = kCLOCK_LPSPI3_ClockRoot_MuxSysPll1Div5;
0626     rootCfg.div = 4;
0627     CLOCK_SetRootClock(kCLOCK_Root_Lpspi3, &rootCfg);
0628 
0629     /* Configure LPSPI4 using SYS_PLL1_DIV5_CLK */
0630     rootCfg.mux = kCLOCK_LPSPI4_ClockRoot_MuxSysPll1Div5;
0631     rootCfg.div = 4;
0632     CLOCK_SetRootClock(kCLOCK_Root_Lpspi4, &rootCfg);
0633 
0634     /* Configure LPSPI5 using SYS_PLL1_DIV5_CLK */
0635     rootCfg.mux = kCLOCK_LPSPI5_ClockRoot_MuxSysPll1Div5;
0636     rootCfg.div = 4;
0637     CLOCK_SetRootClock(kCLOCK_Root_Lpspi5, &rootCfg);
0638 
0639     /* Configure LPSPI6 using SYS_PLL1_DIV5_CLK */
0640     rootCfg.mux = kCLOCK_LPSPI6_ClockRoot_MuxSysPll1Div5;
0641     rootCfg.div = 4;
0642     CLOCK_SetRootClock(kCLOCK_Root_Lpspi6, &rootCfg);
0643 
0644     /* Configure EMV1 using OSC_RC_48M_DIV2 */
0645     rootCfg.mux = kCLOCK_EMV1_ClockRoot_MuxOscRc48MDiv2;
0646     rootCfg.div = 1;
0647     CLOCK_SetRootClock(kCLOCK_Root_Emv1, &rootCfg);
0648 
0649     /* Configure EMV2 using OSC_RC_48M_DIV2 */
0650     rootCfg.mux = kCLOCK_EMV2_ClockRoot_MuxOscRc48MDiv2;
0651     rootCfg.div = 1;
0652     CLOCK_SetRootClock(kCLOCK_Root_Emv2, &rootCfg);
0653 
0654     /* Configure ENET1 using SYS_PLL1_DIV5_CLK */
0655     rootCfg.mux = kCLOCK_ENET1_ClockRoot_MuxSysPll1Div5;
0656     rootCfg.div = 4;
0657     CLOCK_SetRootClock(kCLOCK_Root_Enet1, &rootCfg);
0658 
0659     /* Configure ENET2 using OSC_RC_48M_DIV2 */
0660     rootCfg.mux = kCLOCK_ENET2_ClockRoot_MuxOscRc48MDiv2;
0661     rootCfg.div = 1;
0662     CLOCK_SetRootClock(kCLOCK_Root_Enet2, &rootCfg);
0663 
0664     /* Configure ENET_25M using SYS_PLL1_DIV5_CLK */
0665     rootCfg.mux = kCLOCK_ENET_25M_ClockRoot_MuxSysPll1Div5;
0666     rootCfg.div = 8;
0667     CLOCK_SetRootClock(kCLOCK_Root_Enet_25m, &rootCfg);
0668 
0669     /* Configure ENET_TIMER1 using OSC_24M */
0670     rootCfg.mux = kCLOCK_ENET_TIMER1_ClockRoot_MuxOsc24MOut;
0671     rootCfg.div = 1;
0672     CLOCK_SetRootClock(kCLOCK_Root_Enet_Timer1, &rootCfg);
0673 
0674     /* Configure ENET_TIMER2 using OSC_RC_48M_DIV2 */
0675     rootCfg.mux = kCLOCK_ENET_TIMER2_ClockRoot_MuxOscRc48MDiv2;
0676     rootCfg.div = 1;
0677     CLOCK_SetRootClock(kCLOCK_Root_Enet_Timer2, &rootCfg);
0678 
0679     /* Configure USDHC1 using SYS_PLL1_DIV5_CLK */
0680     rootCfg.mux = kCLOCK_USDHC1_ClockRoot_MuxSysPll1Div5;
0681     rootCfg.div = 1;
0682     CLOCK_SetRootClock(kCLOCK_Root_Usdhc1, &rootCfg);
0683 
0684     /* Configure USDHC2 using OSC_RC_48M_DIV2 */
0685     rootCfg.mux = kCLOCK_USDHC2_ClockRoot_MuxOscRc48MDiv2;
0686     rootCfg.div = 1;
0687     CLOCK_SetRootClock(kCLOCK_Root_Usdhc2, &rootCfg);
0688 
0689     /* Configure ASRC using OSC_RC_48M_DIV2 */
0690     rootCfg.mux = kCLOCK_ASRC_ClockRoot_MuxOscRc48MDiv2;
0691     rootCfg.div = 1;
0692     CLOCK_SetRootClock(kCLOCK_Root_Asrc, &rootCfg);
0693 
0694     /* Configure MQS using OSC_RC_48M_DIV2 */
0695     rootCfg.mux = kCLOCK_MQS_ClockRoot_MuxOscRc48MDiv2;
0696     rootCfg.div = 1;
0697     CLOCK_SetRootClock(kCLOCK_Root_Mqs, &rootCfg);
0698 
0699     /* Configure MIC using OSC_RC_48M_DIV2 */
0700     rootCfg.mux = kCLOCK_MIC_ClockRoot_MuxOscRc48MDiv2;
0701     rootCfg.div = 1;
0702     CLOCK_SetRootClock(kCLOCK_Root_Mic, &rootCfg);
0703 
0704     /* Configure SPDIF using OSC_RC_48M_DIV2 */
0705     rootCfg.mux = kCLOCK_SPDIF_ClockRoot_MuxOscRc48MDiv2;
0706     rootCfg.div = 1;
0707     CLOCK_SetRootClock(kCLOCK_Root_Spdif, &rootCfg);
0708 
0709     /* Configure SAI1 using OSC_RC_48M_DIV2 */
0710     rootCfg.mux = kCLOCK_SAI1_ClockRoot_MuxOscRc48MDiv2;
0711     rootCfg.div = 1;
0712     CLOCK_SetRootClock(kCLOCK_Root_Sai1, &rootCfg);
0713 
0714     /* Configure SAI2 using OSC_RC_48M_DIV2 */
0715     rootCfg.mux = kCLOCK_SAI2_ClockRoot_MuxOscRc48MDiv2;
0716     rootCfg.div = 1;
0717     CLOCK_SetRootClock(kCLOCK_Root_Sai2, &rootCfg);
0718 
0719     /* Configure SAI3 using OSC_RC_48M_DIV2 */
0720     rootCfg.mux = kCLOCK_SAI3_ClockRoot_MuxOscRc48MDiv2;
0721     rootCfg.div = 1;
0722     CLOCK_SetRootClock(kCLOCK_Root_Sai3, &rootCfg);
0723 
0724     /* Configure SAI4 using OSC_RC_48M_DIV2 */
0725     rootCfg.mux = kCLOCK_SAI4_ClockRoot_MuxOscRc48MDiv2;
0726     rootCfg.div = 1;
0727     CLOCK_SetRootClock(kCLOCK_Root_Sai4, &rootCfg);
0728 
0729     /* Configure GC355 using PLL_VIDEO_CLK */
0730     rootCfg.mux = kCLOCK_GC355_ClockRoot_MuxVideoPllOut;
0731     rootCfg.div = 2;
0732     CLOCK_SetRootClock(kCLOCK_Root_Gc355, &rootCfg);
0733 
0734     /* Configure LCDIF using OSC_RC_48M_DIV2 */
0735     rootCfg.mux = kCLOCK_LCDIF_ClockRoot_MuxOscRc48MDiv2;
0736     rootCfg.div = 1;
0737     CLOCK_SetRootClock(kCLOCK_Root_Lcdif, &rootCfg);
0738 
0739     /* Configure LCDIFV2 using OSC_RC_48M_DIV2 */
0740     rootCfg.mux = kCLOCK_LCDIFV2_ClockRoot_MuxOscRc48MDiv2;
0741     rootCfg.div = 1;
0742     CLOCK_SetRootClock(kCLOCK_Root_Lcdifv2, &rootCfg);
0743 
0744     /* Configure MIPI_REF using OSC_RC_48M_DIV2 */
0745     rootCfg.mux = kCLOCK_MIPI_REF_ClockRoot_MuxOscRc48MDiv2;
0746     rootCfg.div = 1;
0747     CLOCK_SetRootClock(kCLOCK_Root_Mipi_Ref, &rootCfg);
0748 
0749     /* Configure MIPI_ESC using OSC_RC_48M_DIV2 */
0750     rootCfg.mux = kCLOCK_MIPI_ESC_ClockRoot_MuxOscRc48MDiv2;
0751     rootCfg.div = 1;
0752     CLOCK_SetRootClock(kCLOCK_Root_Mipi_Esc, &rootCfg);
0753 
0754     /* Configure CSI2 using OSC_RC_48M_DIV2 */
0755     rootCfg.mux = kCLOCK_CSI2_ClockRoot_MuxOscRc48MDiv2;
0756     rootCfg.div = 1;
0757     CLOCK_SetRootClock(kCLOCK_Root_Csi2, &rootCfg);
0758 
0759     /* Configure CSI2_ESC using OSC_RC_48M_DIV2 */
0760     rootCfg.mux = kCLOCK_CSI2_ESC_ClockRoot_MuxOscRc48MDiv2;
0761     rootCfg.div = 1;
0762     CLOCK_SetRootClock(kCLOCK_Root_Csi2_Esc, &rootCfg);
0763 
0764     /* Configure CSI2_UI using OSC_RC_48M_DIV2 */
0765     rootCfg.mux = kCLOCK_CSI2_UI_ClockRoot_MuxOscRc48MDiv2;
0766     rootCfg.div = 1;
0767     CLOCK_SetRootClock(kCLOCK_Root_Csi2_Ui, &rootCfg);
0768 
0769     /* Configure CSI using OSC_RC_48M_DIV2 */
0770     rootCfg.mux = kCLOCK_CSI_ClockRoot_MuxOscRc48MDiv2;
0771     rootCfg.div = 1;
0772     CLOCK_SetRootClock(kCLOCK_Root_Csi, &rootCfg);
0773 
0774     /* Configure CKO1 using OSC_RC_48M_DIV2 */
0775     rootCfg.mux = kCLOCK_CKO1_ClockRoot_MuxOscRc48MDiv2;
0776     rootCfg.div = 1;
0777     CLOCK_SetRootClock(kCLOCK_Root_Cko1, &rootCfg);
0778 
0779     /* Configure CKO2 using OSC_RC_48M_DIV2 */
0780     rootCfg.mux = kCLOCK_CKO2_ClockRoot_MuxOscRc48MDiv2;
0781     rootCfg.div = 1;
0782     CLOCK_SetRootClock(kCLOCK_Root_Cko2, &rootCfg);
0783 
0784     /* Set SAI1 MCLK1 clock source. */
0785     IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk1Sel, 0);
0786     /* Set SAI1 MCLK2 clock source. */
0787     IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk2Sel, 3);
0788     /* Set SAI1 MCLK3 clock source. */
0789     IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk3Sel, 0);
0790     /* Set SAI2 MCLK3 clock source. */
0791     IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI2MClk3Sel, 0);
0792     /* Set SAI3 MCLK3 clock source. */
0793     IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI3MClk3Sel, 0);
0794 
0795     /* Set MQS configuration. */
0796     IOMUXC_MQSConfig(IOMUXC_GPR,kIOMUXC_MqsPwmOverSampleRate32, 0);
0797     /* Set ENET Tx clock source. */
0798     IOMUXC_GPR->GPR4 |= IOMUXC_GPR_GPR4_ENET_TX_CLK_SEL_MASK;
0799     /* Set ENET Ref clock source. */
0800     IOMUXC_GPR->GPR4 |= IOMUXC_GPR_GPR4_ENET_REF_CLK_DIR_MASK;
0801     /* Set ENET_1G Tx clock source. */
0802     IOMUXC_GPR->GPR5 = ((IOMUXC_GPR->GPR5 & ~IOMUXC_GPR_GPR5_ENET1G_TX_CLK_SEL_MASK) | IOMUXC_GPR_GPR5_ENET1G_RGMII_EN_MASK);
0803     /* Set ENET_1G Ref clock source. */
0804     IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_ENET1G_REF_CLK_DIR_MASK;
0805     /* Set GPT1 High frequency reference clock source. */
0806     IOMUXC_GPR->GPR22 &= ~IOMUXC_GPR_GPR22_REF_1M_CLK_GPT1_MASK;
0807     /* Set GPT2 High frequency reference clock source. */
0808     IOMUXC_GPR->GPR23 &= ~IOMUXC_GPR_GPR23_REF_1M_CLK_GPT2_MASK;
0809     /* Set GPT3 High frequency reference clock source. */
0810     IOMUXC_GPR->GPR24 &= ~IOMUXC_GPR_GPR24_REF_1M_CLK_GPT3_MASK;
0811     /* Set GPT4 High frequency reference clock source. */
0812     IOMUXC_GPR->GPR25 &= ~IOMUXC_GPR_GPR25_REF_1M_CLK_GPT4_MASK;
0813     /* Set GPT5 High frequency reference clock source. */
0814     IOMUXC_GPR->GPR26 &= ~IOMUXC_GPR_GPR26_REF_1M_CLK_GPT5_MASK;
0815     /* Set GPT6 High frequency reference clock source. */
0816     IOMUXC_GPR->GPR27 &= ~IOMUXC_GPR_GPR27_REF_1M_CLK_GPT6_MASK;
0817 
0818 #if __CORTEX_M == 7
0819     SystemCoreClock = CLOCK_GetRootClockFreq(kCLOCK_Root_M7);
0820 #else
0821     SystemCoreClock = CLOCK_GetRootClockFreq(kCLOCK_Root_M4);
0822 #endif
0823 }