1 /*
2  * Copyright 2023-2024 NXP
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include "clock_config.h"
8 
9 /*******************************************************************************
10  ************************ BOARD_InitBootClocks function ************************
11  ******************************************************************************/
BOARD_InitBootClocks(void)12 void BOARD_InitBootClocks(void)
13 {
14     BOARD_BootClockRUN();
15 }
16 
17 /*******************************************************************************
18  * Variables
19  ******************************************************************************/
20 /* clang-format off */
21 /*
22  * SYSTEM_PLL1
23  *
24  * VCO = (24MHz / rdiv) * (mfi + mfn / mfd)  = 4000MHz
25  * Output = VCO / odiv = 1000MHz
26  */
27 const fracn_pll_init_t g_sysPllCfg = {
28     .rdiv = 1,
29     .mfi = 166,
30     .mfn = 2,
31     .mfd = 3,
32     .odiv = 4
33 };
34 
35 /* SYSTEM_PLL1_PFD0 Output = VCO / (mfi + mfn / 5) = 1000MHz */
36 const fracn_pll_pfd_init_t g_sysPllPfd0Cfg = {
37     .mfi = 4,
38     .mfn = 0,
39     .div2_en = true
40 };
41 
42 /*SYSTEM_PLL1_PFD1 Output = VCO / (mfi + mfn / 5) = 800MHz */
43 const fracn_pll_pfd_init_t g_sysPllPfd1Cfg = {
44     .mfi = 5,
45     .mfn = 0,
46     .div2_en = true
47 };
48 
49 /* SYSTEM_PLL1_PFD2 Output = VCO / (mfi + mfn / 5) = 625MHz */
50 const fracn_pll_pfd_init_t g_sysPllPfd2Cfg = {
51     .mfi = 6,
52     .mfn = 2,
53     .div2_en = true
54 };
55 
56 
57 /*
58  * AUDIOPLL1/AUDIOPLL1OUT
59  *
60  * VCO = (24MHz / rdiv) * (mfi + (mfn / mfd))  = 3,932,160,000 Hz
61  * Output = VCO / odiv = 393.216 MHz
62  */
63 const fracn_pll_init_t g_audioPllCfg = {
64     .rdiv = 1,
65     .mfi = 163,
66     .mfn = 84,
67     .mfd = 100,
68     .odiv = 10
69 };
70 
71 
72 /* clang-format on */
73 
74 /*******************************************************************************
75  * Code
76  ******************************************************************************/
77 
BOARD_InitClock(void)78 static void BOARD_InitClock(void)
79 {
80     g_clockSourceFreq[kCLOCK_Osc24M]          = 24000000U;
81     g_clockSourceFreq[kCLOCK_SysPll1]         = 4000000000U;
82     g_clockSourceFreq[kCLOCK_SysPll1Pfd0]     = 1000000000U;
83     g_clockSourceFreq[kCLOCK_SysPll1Pfd0Div2] = 500000000U;
84     g_clockSourceFreq[kCLOCK_SysPll1Pfd1]     = 800000000U;
85     g_clockSourceFreq[kCLOCK_SysPll1Pfd1Div2] = 400000000U;
86     g_clockSourceFreq[kCLOCK_SysPll1Pfd2]     = 625000000U;
87     g_clockSourceFreq[kCLOCK_SysPll1Pfd2Div2] = 312500000U;
88     g_clockSourceFreq[kCLOCK_AudioPll1Out] = 393216000U;
89     g_clockSourceFreq[kCLOCK_AudioPll1] = 393216000U;
90 }
91 
BOARD_BootClockRUN(void)92 void BOARD_BootClockRUN(void)
93 {
94     BOARD_InitClock();
95 
96     /* ROM has already initialized PLL */
97     CLOCK_PllInit(AUDIOPLL, &g_audioPllCfg);
98 #if 0
99     CLOCK_PllInit(SYSPLL, &g_sysPllCfg);
100     CLOCK_PllPfdInit(SYSPLL, 0, &g_sysPllPfd0Cfg);
101     CLOCK_PllPfdInit(SYSPLL, 1, &g_sysPllPfd1Cfg);
102     CLOCK_PllPfdInit(SYSPLL, 2, &g_sysPllPfd2Cfg);
103 #endif
104 }
105