[processor-sdk/performance-audio-sr.git] / pdk_k2g_1_0_1_0_eng / packages / ti / board / src / idkAM572x / idkAM572x_pll.c
1 /******************************************************************************
2 * Copyright (c) 2010-2015 Texas Instruments Incorporated - http://www.ti.com
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the
14 * distribution.
15 *
16 * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 *****************************************************************************/
34 #include "board_cfg.h"
35 #include "board_internal.h"
37 /**
38 * \brief This structure defines the various Configuration Parameters for
39 * a DPLL.
40 */
41 typedef struct {
42 Uint32 mult;
43 /**< Multiplier(m) Value */
44 Uint32 div;
45 /**< Divider(n) Value */
46 Uint32 dccEnable;
47 /**< Divider(n) Value */
48 Uint32 autoDpllMode;
49 /**< Auto DPLL Mode, refer to enum #sbllibAutoDpllMode_t for values */
50 Uint32 divM2;
51 /**< M2 Divider Value */
52 Uint32 divM3;
53 /**< M3 Divider Value */
54 Uint32 divH11;
55 /**< H11 Divider Value */
56 Uint32 divH12;
57 /**< H12 Divider Value */
58 Uint32 divH13;
59 /**< H13 Divider Value */
60 Uint32 divH14;
61 /**< H14 Divider Value */
62 Uint32 divH21;
63 /**< H21 Divider Value */
64 Uint32 divH22;
65 /**< H22 Divider Value */
66 Uint32 divH23;
67 /**< H23 Divider Value */
68 Uint32 divH24;
69 /**< H24 Divider Value */
70 } pllcParam;
72 /**
73 * \brief This structure defines the various Configuration Parameters for
74 * a MPU DPLL.
75 */
76 typedef struct {
77 Uint32 mult;
78 /**< Multiplier(m) Value */
79 Uint32 div;
80 /**< Divider(n) Value */
81 Uint32 dccEnable;
82 /**< Divider(n) Value */
83 Uint32 divM2;
84 /**< M2 Divider Value */
85 } pllcMpuParam;
87 /**
88 * \brief This structure defines the various Configuration Parameters for
89 * a peripheral DPLL.
90 */
91 typedef struct {
92 Uint32 mult;
93 /**< Multiplier(m) Value */
94 Uint32 div;
95 /**< Divider(n) Value */
96 Uint32 divM2;
97 /**< M2 Divider Value */
98 Uint32 divM3;
99 /**< M3 Divider Value */
100 Uint32 divH11;
101 /**< H11 Divider Value */
102 Uint32 divH12;
103 /**< H12 Divider Value */
104 Uint32 divH13;
105 /**< H13 Divider Value */
106 Uint32 divH14;
107 /**< H14 Divider Value */
108 } pllcPerParam;
110 /**
111 * \brief This structure defines the various Configuration Parameters for
112 * a core DPLL.
113 */
114 typedef struct {
115 Uint32 l3ClkSel;
116 /**< L3 divider */
117 Uint32 l4ClkSel;
118 /**< L3 divider */
119 Uint32 mult;
120 /**< Multiplier(m) Value */
121 Uint32 div;
122 /**< Divider(n) Value */
123 Uint32 divM2;
124 /**< M2 Divider Value */
125 Uint32 divM3;
126 /**< M3 Divider Value */
127 Uint32 divH12;
128 /**< H12 Divider Value */
129 Uint32 divH13;
130 /**< H13 Divider Value */
131 Uint32 divH14;
132 /**< H14 Divider Value */
133 Uint32 divH22;
134 /**< H22 Divider Value */
135 Uint32 divH23;
136 /**< H23 Divider Value */
137 Uint32 divH24;
138 /**< H24 Divider Value */
139 } pllcCoreParam;
141 /**
142 * \brief This structure defines the various Configuration Parameters for
143 * an ABE DPLL.
144 */
145 typedef struct {
146 Uint32 mult;
147 /**< Multiplier(m) Value */
148 Uint32 div;
149 /**< Divider(n) Value */
150 Uint32 divM2;
151 /**< M2 Divider Value */
152 Uint32 divM3;
153 /**< M3 Divider Value */
154 } pllcAbeParam;
156 /**
157 * \brief This structure defines the various Configuration Parameters for
158 * an IVA DPLL.
159 */
160 typedef struct {
161 Uint32 mult;
162 /**< Multiplier(m) Value */
163 Uint32 div;
164 /**< Divider(n) Value */
165 Uint32 divM2;
166 /**< M2 Divider Value */
167 } pllcIvaParam;
169 /**
170 * \brief This structure defines the various Configuration Parameters for
171 * a GMAC DPLL.
172 */
173 typedef struct {
174 Uint32 mult;
175 /**< Multiplier(m) Value */
176 Uint32 div;
177 /**< Divider(n) Value */
178 Uint32 divM2;
179 /**< M2 Divider Value */
180 Uint32 divM3;
181 /**< M3 Divider Value */
182 Uint32 divH11;
183 /**< H11 Divider Value */
184 Uint32 divH12;
185 /**< H12 Divider Value */
186 Uint32 divH13;
187 /**< H13 Divider Value */
188 } pllcGmacParam;
190 /**
191 * \brief This structure defines the various Configuration Parameters for
192 * a PCIE DPLL.
193 */
194 typedef struct {
195 Uint32 mult;
196 /**< Multiplier(m) Value */
197 Uint32 div;
198 /**< Divider(n) Value */
199 Uint32 divM2;
200 /**< M2 Divider Value */
201 } pllcPcieParam;
203 /**
204 * \brief This structure defines the various Configuration Parameters for
205 * a DDR DPLL.
206 */
207 typedef struct {
208 Uint32 mult;
209 /**< Multiplier(m) Value */
210 Uint32 div;
211 /**< Divider(n) Value */
212 Uint32 divM2;
213 /**< M2 Divider Value */
214 Uint32 divM3;
215 /**< M3 Divider Value */
216 Uint32 divH11;
217 /**< H11 Divider Value */
218 } pllcDdrParam;
220 /**
221 * \brief This structure defines the various Configuration Parameters for
222 * a GPU DPLL.
223 */
224 typedef struct {
225 Uint32 mult;
226 /**< Multiplier(m) Value */
227 Uint32 div;
228 /**< Divider(n) Value */
229 Uint32 divM2;
230 /**< M2 Divider Value */
231 } pllcGpuParam;
233 /**
234 * \brief This structure defines the various Configuration Parameters for
235 * a DSP DPLL.
236 */
237 typedef struct {
238 Uint32 mult;
239 /**< Multiplier(m) Value */
240 Uint32 div;
241 /**< Divider(n) Value */
242 Uint32 divM2;
243 /**< M2 Divider Value */
244 Uint32 divM3;
245 /**< M3 Divider Value */
246 } pllcDspParam;
248 void pllcMpuUnlock(void);
250 void pllcMpuLock(void);
252 void pllcMpuConfigure(pllcMpuParam *mpuPllcParam);
254 void pllcIvaUnlock(void);
256 void pllcIvaLock(void);
258 void pllcIvaConfigure(pllcIvaParam *ivaPllcParam);
260 void pllcCoreUnlock(void);
262 void pllcCoreLock(void);
264 void pllcCoreConfigure(pllcCoreParam *corePllcParam);
266 void pllcAbeUnlock(void);
268 void pllcAbeLock(void);
270 void pllcAbeConfigure(pllcAbeParam *abePllcParam);
272 void pllcDdrUnlock(void);
274 void pllcDdrLock(void);
276 void pllcDdrConfigure(pllcDdrParam *ddrPllcParam);
278 void pllcDspUnlock(void);
280 void pllcDspLock(void);
282 void pllcDspConfigure(pllcDspParam *dspPllcParam);
284 void pllcGmacUnlock(void);
286 void pllcGmacLock(void);
288 void pllcGmacConfigure(pllcGmacParam *gmacPllcParam);
290 void pllcGpuUnlock(void);
292 void pllcGpuLock(void);
294 void pllcGpuConfigure(pllcGpuParam *gpuPllcParam);
296 void pllcPcieUnlock(void);
298 void pllcPcieLock(void);
300 void pllcPcieConfigure(pllcPcieParam *pciePllcParam);
302 void pllcPerUnlock(void);
304 void pllcPerLock(void);
306 void pllcPerConfigure(pllcPerParam *perPllcParam);
309 /* Set the desired DDR3 configuration -- assumes 66.67 MHz DDR3 clock input */
310 Board_STATUS Board_PLLInit(Uint32 opp)
311 {
312 pllcMpuParam mpuPllcParam;
313 pllcIvaParam ivaPllcParam;
314 pllcCoreParam corePllcParam;
315 pllcAbeParam abePllcParam;
316 pllcDdrParam ddrPllcParam;
317 pllcDspParam dspPllcParam;
318 pllcGmacParam gmacPllcParam;
319 pllcGpuParam gpuPllcParam;
320 pllcPcieParam pciePllcParam;
321 pllcPerParam perPllcParam;
322 CSL_ckgen_prmRegs *hCkgenPrm =
323 (CSL_ckgen_prmRegs *) CSL_MPU_CKGEN_PRM_REGS;
325 if (OPP_HIGH == opp)
326 {
327 /* 1500MHz at 20MHz sys_clk */
328 mpuPllcParam.mult = 600U;
329 mpuPllcParam.div = 7U;
330 mpuPllcParam.dccEnable = 1U;
331 mpuPllcParam.divM2 = 1U;
332 }
333 else if (OPP_OD == opp)
334 {
335 /* 1176MHz at 20MHz sys_clk */
336 mpuPllcParam.mult = 294U;
337 mpuPllcParam.div = 4U;
338 mpuPllcParam.dccEnable = 0U;
339 mpuPllcParam.divM2 = 1U;
340 }
341 else
342 {
343 /* Default to OPP_NOM */
344 /* 1000MHz at 20MHz sys_clk */
345 mpuPllcParam.mult = 500U;
346 mpuPllcParam.div = 9U;
347 mpuPllcParam.dccEnable = 0U;
348 mpuPllcParam.divM2 = 1U;
349 }
351 pllcMpuUnlock();
352 pllcMpuConfigure(&mpuPllcParam);
353 pllcMpuLock();
355 if (OPP_HIGH == opp)
356 {
357 /* 532MHz at 20MHz sys_clk */
358 ivaPllcParam.mult = 266U;
359 ivaPllcParam.div = 4U;
360 ivaPllcParam.divM2 = 2U;
361 }
362 else if (OPP_OD == opp)
363 {
364 /* 430MHz at 20MHz sys_clk */
365 ivaPllcParam.mult = 172U;
366 ivaPllcParam.div = 3U;
367 ivaPllcParam.divM2 = 2U;
368 }
369 else
370 {
371 /* Default to OPP_NOM */
372 /* 388.3MHz at 20MHz sys_clk */
373 ivaPllcParam.mult = 233U;
374 ivaPllcParam.div = 3U;
375 ivaPllcParam.divM2 = 3U;
376 }
378 pllcIvaUnlock();
379 pllcIvaConfigure(&ivaPllcParam);
380 pllcIvaLock();
382 perPllcParam.mult = 0x60U;
383 perPllcParam.div = 4U;
384 perPllcParam.divM2 = 4U;
385 perPllcParam.divM3 = 1U;
386 perPllcParam.divH11 = 3U;
387 perPllcParam.divH12 = 4U;
388 perPllcParam.divH13 = 4U;
389 perPllcParam.divH14 = 2U;
390 pllcPerUnlock();
391 pllcPerConfigure(&perPllcParam);
392 pllcPerLock();
394 corePllcParam.l3ClkSel = 1U;
395 corePllcParam.l4ClkSel = 1U;
396 corePllcParam.mult = 0x10AU;
397 corePllcParam.div = 0x4U;
398 corePllcParam.divM2 = 2U;
399 corePllcParam.divM3 = 1U;
400 corePllcParam.divH12 = 4U;
401 corePllcParam.divH13 = 0x3EU;
402 corePllcParam.divH14 = 0x5U;
403 corePllcParam.divH22 = 0x5U;
404 corePllcParam.divH23 = 0x4U;
405 corePllcParam.divH24 = 0x6U;
406 pllcCoreUnlock();
407 pllcCoreConfigure(&corePllcParam);
408 pllcCoreLock();
410 hCkgenPrm->CM_CLKSEL_ABE_PLL_REF_REG = 0x00000000U;
412 abePllcParam.mult = 0x13U;
413 abePllcParam.div = 0x1U;
414 abePllcParam.divM2 = 1U;
415 abePllcParam.divM3 = 1U;
416 pllcAbeUnlock();
417 pllcAbeConfigure(&abePllcParam);
418 pllcAbeLock();
420 gmacPllcParam.mult = 0xFAU;
421 gmacPllcParam.div = 0x4U;
422 gmacPllcParam.divM2 = 0x4U;
423 gmacPllcParam.divM3 = 0xAU;
424 gmacPllcParam.divH11 = 0x28U;
425 gmacPllcParam.divH12 = 0x8U;
426 gmacPllcParam.divH13 = 0xAU;
427 pllcGmacUnlock();
428 pllcGmacConfigure(&gmacPllcParam);
429 pllcGmacLock();
431 if(OPP_HIGH == opp)
432 {
433 /* 532MHz at 20MHz sys_clk */
434 gpuPllcParam.mult = 266U;
435 gpuPllcParam.div = 4U;
436 gpuPllcParam.divM2 = 2U;
437 }
438 else if(OPP_OD == opp)
439 {
440 /* 500MHz at 20MHz sys_clk */
441 gpuPllcParam.mult = 200U;
442 gpuPllcParam.div = 3U;
443 gpuPllcParam.divM2 = 2U;
444 }
445 else
446 {
447 /* Default to OPP_NOM */
448 /* 425MHz at 20MHz sys_clk */
449 gpuPllcParam.mult = 170U;
450 gpuPllcParam.div = 3U;
451 gpuPllcParam.divM2 = 2U;
452 }
453 pllcGpuUnlock();
454 pllcGpuConfigure(&gpuPllcParam);
455 pllcGpuLock();
457 if(OPP_HIGH == opp)
458 {
459 /* 750MHz at 20MHz sys_clk */
460 dspPllcParam.mult = 150U;
461 dspPllcParam.div = 3U;
462 dspPllcParam.divM2 = 1U;
463 dspPllcParam.divM3 = 3U;
464 }
465 else if(OPP_OD == opp)
466 {
467 /* 650MHz at 20MHz sys_clk */
468 dspPllcParam.mult = 130U;
469 dspPllcParam.div = 3U;
470 dspPllcParam.divM2 = 1U;
471 dspPllcParam.divM3 = 3U;
472 }
473 else
474 {
475 /* Default to OPP_NOM */
476 /* 600MHz at 20MHz sys_clk */
477 dspPllcParam.mult = 150U;
478 dspPllcParam.div = 4U;
479 dspPllcParam.divM2 = 1U;
480 dspPllcParam.divM3 = 3U;
481 }
482 pllcDspUnlock();
483 pllcDspConfigure(&dspPllcParam);
484 pllcDspLock();
486 pciePllcParam.mult = 750U;
487 pciePllcParam.div = 9U;
488 pciePllcParam.divM2 = 15U;
489 pllcPcieUnlock();
490 pllcPcieConfigure(&pciePllcParam);
491 pllcPcieLock();
493 ddrPllcParam.mult = 0x10AU;
494 ddrPllcParam.div = 0x4U;
495 ddrPllcParam.divM2 = 0x2U;
496 ddrPllcParam.divM3 = 0x1U;
497 ddrPllcParam.divH11 = 0x8U;
498 pllcDdrUnlock();
499 pllcDdrConfigure(&ddrPllcParam);
500 pllcDdrLock();
501 return BOARD_SOK;
502 }
504 void CtrlLockMMR(void)
505 {
506 CSL_control_coreRegs *ctrlCoreReg =
507 (CSL_control_coreRegs *) CSL_MPU_CTRL_MODULE_CORE_CORE_REGISTERS_REGS;
509 /* unlock MMR1 space for region 0x0100 to 0x079F */
510 ctrlCoreReg->MMR_LOCK_1 = 438075716U;
511 /* unlock MMR2 space for region 0x07A0 to 0x0D9F */
512 ctrlCoreReg->MMR_LOCK_2 = 4260648240U;
513 /* unlock MMR3 space for region 0x0DA0 to 0x0FFF */
514 ctrlCoreReg->MMR_LOCK_3 = 451339040U;
515 /* unlock MMR4 space for region 0x1000 to 0x13FF */
516 ctrlCoreReg->MMR_LOCK_4 = 515838749U;
517 /* unlock MMR5 space for region 0x1400 to 0x1FFF */
518 ctrlCoreReg->MMR_LOCK_5 = 339706668U;
519 }
521 void pllcMpuUnlock(void)
522 {
523 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
524 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
526 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_MPU_REG,
527 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN,
528 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN_DPLL_LP_BYP_MODE);
529 }
531 void pllcMpuLock(void)
532 {
533 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
534 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
536 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_MPU_REG,
537 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN,
538 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN_DPLL_LOCK_MODE);
539 }
541 void pllcMpuConfigure(pllcMpuParam *mpuPllcParam)
542 {
543 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
544 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
546 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_MPU_REG,
547 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_MPU_REG_DPLL_DIV, mpuPllcParam->div);
548 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_MPU_REG,
549 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_MPU_REG_DPLL_MULT, mpuPllcParam->mult);
550 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_MPU_REG,
551 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_MPU_REG_DCC_EN, mpuPllcParam->dccEnable);
552 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_MPU_REG,
553 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_MPU_REG_DIVHS, mpuPllcParam->divM2);
554 }
556 void pllcIvaUnlock(void)
557 {
558 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
559 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
561 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_IVA_REG,
562 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN,
563 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN_DPLL_LP_BYP_MODE);
564 }
566 void pllcIvaLock(void)
567 {
568 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
569 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
571 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_IVA_REG,
572 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN,
573 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN_DPLL_LOCK_MODE);
574 }
576 void pllcIvaConfigure(pllcIvaParam *ivaPllcParam)
577 {
578 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
579 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
581 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_IVA_REG,
582 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_IVA_REG_DPLL_DIV, ivaPllcParam->div);
583 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_IVA_REG,
584 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_IVA_REG_DPLL_MULT, ivaPllcParam->mult);
585 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_IVA_REG,
586 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_IVA_REG_DIVHS, ivaPllcParam->divM2);
587 }
589 void pllcCoreUnlock(void)
590 {
591 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
592 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
594 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_CORE_REG,
595 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN,
596 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN_DPLL_LP_BYP_MODE);
597 }
599 void pllcCoreLock(void)
600 {
601 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
602 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
604 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_CORE_REG,
605 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN,
606 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN_DPLL_LOCK_MODE);
607 }
609 void pllcCoreConfigure(pllcCoreParam *corePllcParam)
610 {
611 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
612 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
614 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
615 CKGEN_CM_CORE_AON_CM_CLKSEL_CORE_REG_CLKSEL_L3, corePllcParam->l3ClkSel);
616 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
617 CKGEN_CM_CORE_AON_CM_CLKSEL_CORE_REG_CLKSEL_L4, corePllcParam->l4ClkSel);
618 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
619 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_CORE_REG_DPLL_DIV, corePllcParam->div);
620 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
621 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_CORE_REG_DPLL_MULT, corePllcParam->mult);
622 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_CORE_REG,
623 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_CORE_REG_DIVHS, corePllcParam->divM2);
624 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_CORE_REG,
625 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_CORE_REG_DIVHS, corePllcParam->divM3);
626 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H12_DPLL_CORE_REG,
627 CKGEN_CM_CORE_AON_CM_DIV_H12_DPLL_CORE_REG_DIVHS, corePllcParam->divH12);
628 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H13_DPLL_CORE_REG,
629 CKGEN_CM_CORE_AON_CM_DIV_H13_DPLL_CORE_REG_DIVHS, corePllcParam->divH13);
630 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H14_DPLL_CORE_REG,
631 CKGEN_CM_CORE_AON_CM_DIV_H14_DPLL_CORE_REG_DIVHS, corePllcParam->divH14);
632 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H22_DPLL_CORE_REG,
633 CKGEN_CM_CORE_AON_CM_DIV_H22_DPLL_CORE_REG_DIVHS, corePllcParam->divH22);
634 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H23_DPLL_CORE_REG,
635 CKGEN_CM_CORE_AON_CM_DIV_H23_DPLL_CORE_REG_DIVHS, corePllcParam->divH23);
636 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H24_DPLL_CORE_REG,
637 CKGEN_CM_CORE_AON_CM_DIV_H24_DPLL_CORE_REG_DIVHS, corePllcParam->divH24);
638 }
640 void pllcAbeUnlock(void)
641 {
642 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
643 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
645 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_ABE_REG,
646 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN,
647 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN_DPLL_LP_BYP_MODE);
648 }
650 void pllcAbeLock(void)
651 {
652 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
653 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
655 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_ABE_REG,
656 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN,
657 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN_DPLL_LOCK_MODE);
658 }
660 void pllcAbeConfigure(pllcAbeParam *abePllcParam)
661 {
662 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
663 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
665 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_ABE_REG,
666 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_ABE_REG_DPLL_DIV, abePllcParam->div);
667 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_ABE_REG,
668 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_ABE_REG_DPLL_MULT, abePllcParam->mult);
669 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_ABE_REG,
670 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_ABE_REG_DIVHS, abePllcParam->divM2);
671 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_ABE_REG,
672 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_ABE_REG_DIVHS, abePllcParam->divM3);
673 }
675 void pllcDdrUnlock(void)
676 {
677 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
678 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
680 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DDR_REG,
681 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN,
682 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN_DPLL_LP_BYP_MODE);
683 }
685 void pllcDdrLock(void)
686 {
687 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
688 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
690 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DDR_REG,
691 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN,
692 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN_DPLL_LOCK_MODE);
693 }
695 void pllcDdrConfigure(pllcDdrParam *ddrPllcParam)
696 {
697 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
698 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
700 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DDR_REG,
701 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DDR_REG_DPLL_DIV, ddrPllcParam->div);
702 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DDR_REG,
703 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DDR_REG_DPLL_MULT, ddrPllcParam->mult);
704 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_DDR_REG,
705 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_DDR_REG_DIVHS, ddrPllcParam->divM2);
706 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_DDR_REG,
707 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_DDR_REG_DIVHS, ddrPllcParam->divM3);
708 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H11_DPLL_DDR_REG,
709 CKGEN_CM_CORE_AON_CM_DIV_H11_DPLL_DDR_REG_DIVHS, ddrPllcParam->divH11);
710 }
712 void pllcDspUnlock(void)
713 {
714 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
715 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
717 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DSP_REG,
718 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN,
719 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN_DPLL_LP_BYP_MODE);
720 }
722 void pllcDspLock(void)
723 {
724 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
725 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
727 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DSP_REG,
728 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN,
729 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN_DPLL_LOCK_MODE);
730 }
732 void pllcDspConfigure(pllcDspParam *dspPllcParam)
733 {
734 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
735 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
737 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DSP_REG,
738 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DSP_REG_DPLL_DIV, dspPllcParam->div);
739 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DSP_REG,
740 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DSP_REG_DPLL_MULT, dspPllcParam->mult);
741 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_DSP_REG,
742 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_DSP_REG_DIVHS, dspPllcParam->divM2);
743 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_DSP_REG,
744 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_DSP_REG_DIVHS, dspPllcParam->divM3);
745 }
747 void pllcGmacUnlock(void)
748 {
749 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
750 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
752 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GMAC_REG,
753 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN,
754 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN_DPLL_LP_BYP_MODE);
755 }
757 void pllcGmacLock(void)
758 {
759 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
760 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
762 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GMAC_REG,
763 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN,
764 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN_DPLL_LOCK_MODE);
765 }
767 void pllcGmacConfigure(pllcGmacParam *gmacPllcParam)
768 {
769 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
770 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
772 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GMAC_REG,
773 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GMAC_REG_DPLL_DIV, gmacPllcParam->div);
774 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GMAC_REG,
775 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GMAC_REG_DPLL_MULT, gmacPllcParam->mult);
776 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_GMAC_REG,
777 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divM2);
778 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_GMAC_REG,
779 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divM3);
780 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H11_DPLL_GMAC_REG,
781 CKGEN_CM_CORE_AON_CM_DIV_H11_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divH11);
782 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H12_DPLL_GMAC_REG,
783 CKGEN_CM_CORE_AON_CM_DIV_H12_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divH12);
784 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H13_DPLL_GMAC_REG,
785 CKGEN_CM_CORE_AON_CM_DIV_H13_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divH13);
786 }
788 void pllcGpuUnlock(void)
789 {
790 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
791 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
793 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GPU_REG,
794 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN,
795 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN_DPLL_LP_BYP_MODE);
796 }
798 void pllcGpuLock(void)
799 {
800 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
801 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
803 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GPU_REG,
804 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN,
805 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN_DPLL_LOCK_MODE);
806 }
808 void pllcGpuConfigure(pllcGpuParam *gpuPllcParam)
809 {
810 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
811 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
813 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GPU_REG,
814 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GPU_REG_DPLL_DIV, gpuPllcParam->div);
815 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GPU_REG,
816 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GPU_REG_DPLL_MULT, gpuPllcParam->mult);
817 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_GPU_REG,
818 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_GPU_REG_DIVHS, gpuPllcParam->divM2);
819 }
821 void pllcPcieUnlock(void)
822 {
823 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
824 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
826 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PCIE_REF_REG,
827 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN,
828 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN_DPLL_LP_BYP_MODE);
829 }
831 void pllcPcieLock(void)
832 {
833 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
834 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
836 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PCIE_REF_REG,
837 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN,
838 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN_DPLL_LOCK_MODE);
839 }
841 void pllcPcieConfigure(pllcPcieParam *pciePllcParam)
842 {
843 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
844 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
846 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PCIE_REF_REG,
847 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PCIE_REF_REG_DPLL_DIV, pciePllcParam->div);
848 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PCIE_REF_REG,
849 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PCIE_REF_REG_DPLL_MULT, pciePllcParam->mult);
850 CSL_FINS(ckgenCmCoreReg->CM_DIV_M2_DPLL_PCIE_REF_REG,
851 CKGEN_CM_CORE_CM_DIV_M2_DPLL_PCIE_REF_REG_DIVHS, pciePllcParam->divM2);
852 }
854 void pllcPerUnlock(void)
855 {
856 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
857 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
859 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PER_REG,
860 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN,
861 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN_DPLL_LP_BYP_MODE);
862 }
864 void pllcPerLock(void)
865 {
866 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
867 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
869 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PER_REG,
870 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN,
871 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN_DPLL_LOCK_MODE);
872 }
874 void pllcPerConfigure(pllcPerParam *perPllcParam)
875 {
876 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
877 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
879 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PER_REG,
880 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PER_REG_DPLL_DIV, perPllcParam->div);
881 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PER_REG,
882 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PER_REG_DPLL_MULT, perPllcParam->mult);
883 CSL_FINS(ckgenCmCoreReg->CM_DIV_M2_DPLL_PER_REG,
884 CKGEN_CM_CORE_CM_DIV_M2_DPLL_PER_REG_DIVHS, perPllcParam->divM2);
885 CSL_FINS(ckgenCmCoreReg->CM_DIV_M3_DPLL_PER_REG,
886 CKGEN_CM_CORE_CM_DIV_M3_DPLL_PER_REG_DIVHS, perPllcParam->divM3);
887 CSL_FINS(ckgenCmCoreReg->CM_DIV_H11_DPLL_PER_REG,
888 CKGEN_CM_CORE_CM_DIV_H11_DPLL_PER_REG_DIVHS, perPllcParam->divH11);
889 CSL_FINS(ckgenCmCoreReg->CM_DIV_H12_DPLL_PER_REG,
890 CKGEN_CM_CORE_CM_DIV_H12_DPLL_PER_REG_DIVHS, perPllcParam->divH12);
891 CSL_FINS(ckgenCmCoreReg->CM_DIV_H13_DPLL_PER_REG,
892 CKGEN_CM_CORE_CM_DIV_H13_DPLL_PER_REG_DIVHS, perPllcParam->divH13);
893 CSL_FINS(ckgenCmCoreReg->CM_DIV_H14_DPLL_PER_REG,
894 CKGEN_CM_CORE_CM_DIV_H14_DPLL_PER_REG_DIVHS, perPllcParam->divH14);
895 }