[processor-sdk/performance-audio-sr.git] / pdk_k2g_1_0_1_0_eng / packages / ti / board / src / idkAM571x / idkAM571x_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 /* 500MHz 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 /* 425MHz at 20MHz sys_clk */
477 dspPllcParam.mult = 150U;
478 dspPllcParam.div = 4U;
479 dspPllcParam.divM2 = 1U;
480 dspPllcParam.divM3 = 3U;
481 }
483 pllcDspUnlock();
484 pllcDspConfigure(&dspPllcParam);
485 pllcDspLock();
487 pciePllcParam.mult = 750U;
488 pciePllcParam.div = 9U;
489 pciePllcParam.divM2 = 15U;
490 pllcPcieUnlock();
491 pllcPcieConfigure(&pciePllcParam);
492 pllcPcieLock();
494 /* Set DDR frequency to 666MHz. */
495 ddrPllcParam.mult = 0x14DU;
496 ddrPllcParam.div = 0x4U;
497 ddrPllcParam.divM2 = 0x2U;
498 ddrPllcParam.divM3 = 0x1U;
499 ddrPllcParam.divH11 = 0x8U;
500 pllcDdrUnlock();
501 pllcDdrConfigure(&ddrPllcParam);
502 pllcDdrLock();
503 return BOARD_SOK;
504 }
506 void CtrlLockMMR(void)
507 {
508 CSL_control_coreRegs *ctrlCoreReg =
509 (CSL_control_coreRegs *) CSL_MPU_CTRL_MODULE_CORE_CORE_REGISTERS_REGS;
511 /* unlock MMR1 space for region 0x0100 to 0x079F */
512 ctrlCoreReg->MMR_LOCK_1 = 438075716U;
513 /* unlock MMR2 space for region 0x07A0 to 0x0D9F */
514 ctrlCoreReg->MMR_LOCK_2 = 4260648240U;
515 /* unlock MMR3 space for region 0x0DA0 to 0x0FFF */
516 ctrlCoreReg->MMR_LOCK_3 = 451339040U;
517 /* unlock MMR4 space for region 0x1000 to 0x13FF */
518 ctrlCoreReg->MMR_LOCK_4 = 515838749U;
519 /* unlock MMR5 space for region 0x1400 to 0x1FFF */
520 ctrlCoreReg->MMR_LOCK_5 = 339706668U;
521 }
523 void pllcMpuUnlock(void)
524 {
525 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
526 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
528 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_MPU_REG,
529 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN,
530 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN_DPLL_LP_BYP_MODE);
531 }
533 void pllcMpuLock(void)
534 {
535 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
536 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
538 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_MPU_REG,
539 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN,
540 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_MPU_REG_DPLL_EN_DPLL_LOCK_MODE);
541 }
543 void pllcMpuConfigure(pllcMpuParam *mpuPllcParam)
544 {
545 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
546 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
548 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_MPU_REG,
549 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_MPU_REG_DPLL_DIV, mpuPllcParam->div);
550 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_MPU_REG,
551 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_MPU_REG_DPLL_MULT, mpuPllcParam->mult);
552 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_MPU_REG,
553 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_MPU_REG_DCC_EN, mpuPllcParam->dccEnable);
554 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_MPU_REG,
555 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_MPU_REG_DIVHS, mpuPllcParam->divM2);
556 }
558 void pllcIvaUnlock(void)
559 {
560 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
561 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
563 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_IVA_REG,
564 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN,
565 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN_DPLL_LP_BYP_MODE);
566 }
568 void pllcIvaLock(void)
569 {
570 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
571 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
573 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_IVA_REG,
574 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN,
575 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_IVA_REG_DPLL_EN_DPLL_LOCK_MODE);
576 }
578 void pllcIvaConfigure(pllcIvaParam *ivaPllcParam)
579 {
580 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
581 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
583 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_IVA_REG,
584 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_IVA_REG_DPLL_DIV, ivaPllcParam->div);
585 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_IVA_REG,
586 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_IVA_REG_DPLL_MULT, ivaPllcParam->mult);
587 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_IVA_REG,
588 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_IVA_REG_DIVHS, ivaPllcParam->divM2);
589 }
591 void pllcCoreUnlock(void)
592 {
593 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
594 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
596 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_CORE_REG,
597 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN,
598 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN_DPLL_LP_BYP_MODE);
599 }
601 void pllcCoreLock(void)
602 {
603 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
604 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
606 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_CORE_REG,
607 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN,
608 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_CORE_REG_DPLL_EN_DPLL_LOCK_MODE);
609 }
611 void pllcCoreConfigure(pllcCoreParam *corePllcParam)
612 {
613 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
614 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
616 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
617 CKGEN_CM_CORE_AON_CM_CLKSEL_CORE_REG_CLKSEL_L3, corePllcParam->l3ClkSel);
618 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
619 CKGEN_CM_CORE_AON_CM_CLKSEL_CORE_REG_CLKSEL_L4, corePllcParam->l4ClkSel);
620 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
621 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_CORE_REG_DPLL_DIV, corePllcParam->div);
622 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_CORE_REG,
623 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_CORE_REG_DPLL_MULT, corePllcParam->mult);
624 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_CORE_REG,
625 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_CORE_REG_DIVHS, corePllcParam->divM2);
626 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_CORE_REG,
627 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_CORE_REG_DIVHS, corePllcParam->divM3);
628 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H12_DPLL_CORE_REG,
629 CKGEN_CM_CORE_AON_CM_DIV_H12_DPLL_CORE_REG_DIVHS, corePllcParam->divH12);
630 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H13_DPLL_CORE_REG,
631 CKGEN_CM_CORE_AON_CM_DIV_H13_DPLL_CORE_REG_DIVHS, corePllcParam->divH13);
632 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H14_DPLL_CORE_REG,
633 CKGEN_CM_CORE_AON_CM_DIV_H14_DPLL_CORE_REG_DIVHS, corePllcParam->divH14);
634 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H22_DPLL_CORE_REG,
635 CKGEN_CM_CORE_AON_CM_DIV_H22_DPLL_CORE_REG_DIVHS, corePllcParam->divH22);
636 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H23_DPLL_CORE_REG,
637 CKGEN_CM_CORE_AON_CM_DIV_H23_DPLL_CORE_REG_DIVHS, corePllcParam->divH23);
638 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H24_DPLL_CORE_REG,
639 CKGEN_CM_CORE_AON_CM_DIV_H24_DPLL_CORE_REG_DIVHS, corePllcParam->divH24);
640 }
642 void pllcAbeUnlock(void)
643 {
644 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
645 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
647 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_ABE_REG,
648 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN,
649 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN_DPLL_LP_BYP_MODE);
650 }
652 void pllcAbeLock(void)
653 {
654 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
655 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
657 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_ABE_REG,
658 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN,
659 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_ABE_REG_DPLL_EN_DPLL_LOCK_MODE);
660 }
662 void pllcAbeConfigure(pllcAbeParam *abePllcParam)
663 {
664 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
665 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
667 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_ABE_REG,
668 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_ABE_REG_DPLL_DIV, abePllcParam->div);
669 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_ABE_REG,
670 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_ABE_REG_DPLL_MULT, abePllcParam->mult);
671 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_ABE_REG,
672 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_ABE_REG_DIVHS, abePllcParam->divM2);
673 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_ABE_REG,
674 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_ABE_REG_DIVHS, abePllcParam->divM3);
675 }
677 void pllcDdrUnlock(void)
678 {
679 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
680 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
682 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DDR_REG,
683 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN,
684 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN_DPLL_LP_BYP_MODE);
685 }
687 void pllcDdrLock(void)
688 {
689 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
690 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
692 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DDR_REG,
693 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN,
694 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DDR_REG_DPLL_EN_DPLL_LOCK_MODE);
695 }
697 void pllcDdrConfigure(pllcDdrParam *ddrPllcParam)
698 {
699 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
700 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
702 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DDR_REG,
703 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DDR_REG_DPLL_DIV, ddrPllcParam->div);
704 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DDR_REG,
705 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DDR_REG_DPLL_MULT, ddrPllcParam->mult);
706 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_DDR_REG,
707 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_DDR_REG_DIVHS, ddrPllcParam->divM2);
708 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_DDR_REG,
709 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_DDR_REG_DIVHS, ddrPllcParam->divM3);
710 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H11_DPLL_DDR_REG,
711 CKGEN_CM_CORE_AON_CM_DIV_H11_DPLL_DDR_REG_DIVHS, ddrPllcParam->divH11);
712 }
714 void pllcDspUnlock(void)
715 {
716 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
717 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
719 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DSP_REG,
720 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN,
721 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN_DPLL_LP_BYP_MODE);
722 }
724 void pllcDspLock(void)
725 {
726 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
727 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
729 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_DSP_REG,
730 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN,
731 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_DSP_REG_DPLL_EN_DPLL_LOCK_MODE);
732 }
734 void pllcDspConfigure(pllcDspParam *dspPllcParam)
735 {
736 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
737 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
739 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DSP_REG,
740 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DSP_REG_DPLL_DIV, dspPllcParam->div);
741 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_DSP_REG,
742 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_DSP_REG_DPLL_MULT, dspPllcParam->mult);
743 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_DSP_REG,
744 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_DSP_REG_DIVHS, dspPllcParam->divM2);
745 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_DSP_REG,
746 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_DSP_REG_DIVHS, dspPllcParam->divM3);
747 }
749 void pllcGmacUnlock(void)
750 {
751 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
752 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
754 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GMAC_REG,
755 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN,
756 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN_DPLL_LP_BYP_MODE);
757 }
759 void pllcGmacLock(void)
760 {
761 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
762 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
764 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GMAC_REG,
765 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN,
766 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GMAC_REG_DPLL_EN_DPLL_LOCK_MODE);
767 }
769 void pllcGmacConfigure(pllcGmacParam *gmacPllcParam)
770 {
771 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
772 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
774 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GMAC_REG,
775 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GMAC_REG_DPLL_DIV, gmacPllcParam->div);
776 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GMAC_REG,
777 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GMAC_REG_DPLL_MULT, gmacPllcParam->mult);
778 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_GMAC_REG,
779 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divM2);
780 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M3_DPLL_GMAC_REG,
781 CKGEN_CM_CORE_AON_CM_DIV_M3_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divM3);
782 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H11_DPLL_GMAC_REG,
783 CKGEN_CM_CORE_AON_CM_DIV_H11_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divH11);
784 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H12_DPLL_GMAC_REG,
785 CKGEN_CM_CORE_AON_CM_DIV_H12_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divH12);
786 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_H13_DPLL_GMAC_REG,
787 CKGEN_CM_CORE_AON_CM_DIV_H13_DPLL_GMAC_REG_DIVHS, gmacPllcParam->divH13);
788 }
790 void pllcGpuUnlock(void)
791 {
792 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
793 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
795 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GPU_REG,
796 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN,
797 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN_DPLL_LP_BYP_MODE);
798 }
800 void pllcGpuLock(void)
801 {
802 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
803 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
805 CSL_FINS(ckgenCmCoreAonReg->CM_CLKMODE_DPLL_GPU_REG,
806 CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN,
807 CSL_CKGEN_CM_CORE_AON_CM_CLKMODE_DPLL_GPU_REG_DPLL_EN_DPLL_LOCK_MODE);
808 }
810 void pllcGpuConfigure(pllcGpuParam *gpuPllcParam)
811 {
812 CSL_ckgen_cm_core_aonRegs *ckgenCmCoreAonReg =
813 (CSL_ckgen_cm_core_aonRegs *) CSL_MPU_CKGEN_CM_CORE_AON_REGS;
815 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GPU_REG,
816 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GPU_REG_DPLL_DIV, gpuPllcParam->div);
817 CSL_FINS(ckgenCmCoreAonReg->CM_CLKSEL_DPLL_GPU_REG,
818 CKGEN_CM_CORE_AON_CM_CLKSEL_DPLL_GPU_REG_DPLL_MULT, gpuPllcParam->mult);
819 CSL_FINS(ckgenCmCoreAonReg->CM_DIV_M2_DPLL_GPU_REG,
820 CKGEN_CM_CORE_AON_CM_DIV_M2_DPLL_GPU_REG_DIVHS, gpuPllcParam->divM2);
821 }
823 void pllcPcieUnlock(void)
824 {
825 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
826 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
828 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PCIE_REF_REG,
829 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN,
830 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN_DPLL_LP_BYP_MODE);
831 }
833 void pllcPcieLock(void)
834 {
835 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
836 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
838 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PCIE_REF_REG,
839 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN,
840 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PCIE_REF_REG_DPLL_EN_DPLL_LOCK_MODE);
841 }
843 void pllcPcieConfigure(pllcPcieParam *pciePllcParam)
844 {
845 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
846 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
848 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PCIE_REF_REG,
849 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PCIE_REF_REG_DPLL_DIV, pciePllcParam->div);
850 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PCIE_REF_REG,
851 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PCIE_REF_REG_DPLL_MULT, pciePllcParam->mult);
852 CSL_FINS(ckgenCmCoreReg->CM_DIV_M2_DPLL_PCIE_REF_REG,
853 CKGEN_CM_CORE_CM_DIV_M2_DPLL_PCIE_REF_REG_DIVHS, pciePllcParam->divM2);
854 }
856 void pllcPerUnlock(void)
857 {
858 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
859 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
861 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PER_REG,
862 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN,
863 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN_DPLL_LP_BYP_MODE);
864 }
866 void pllcPerLock(void)
867 {
868 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
869 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
871 CSL_FINS(ckgenCmCoreReg->CM_CLKMODE_DPLL_PER_REG,
872 CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN,
873 CSL_CKGEN_CM_CORE_CM_CLKMODE_DPLL_PER_REG_DPLL_EN_DPLL_LOCK_MODE);
874 }
876 void pllcPerConfigure(pllcPerParam *perPllcParam)
877 {
878 CSL_ckgen_cm_coreRegs *ckgenCmCoreReg =
879 (CSL_ckgen_cm_coreRegs *) CSL_MPU_CKGEN_CM_CORE_REGS;
881 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PER_REG,
882 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PER_REG_DPLL_DIV, perPllcParam->div);
883 CSL_FINS(ckgenCmCoreReg->CM_CLKSEL_DPLL_PER_REG,
884 CKGEN_CM_CORE_CM_CLKSEL_DPLL_PER_REG_DPLL_MULT, perPllcParam->mult);
885 CSL_FINS(ckgenCmCoreReg->CM_DIV_M2_DPLL_PER_REG,
886 CKGEN_CM_CORE_CM_DIV_M2_DPLL_PER_REG_DIVHS, perPllcParam->divM2);
887 CSL_FINS(ckgenCmCoreReg->CM_DIV_M3_DPLL_PER_REG,
888 CKGEN_CM_CORE_CM_DIV_M3_DPLL_PER_REG_DIVHS, perPllcParam->divM3);
889 CSL_FINS(ckgenCmCoreReg->CM_DIV_H11_DPLL_PER_REG,
890 CKGEN_CM_CORE_CM_DIV_H11_DPLL_PER_REG_DIVHS, perPllcParam->divH11);
891 CSL_FINS(ckgenCmCoreReg->CM_DIV_H12_DPLL_PER_REG,
892 CKGEN_CM_CORE_CM_DIV_H12_DPLL_PER_REG_DIVHS, perPllcParam->divH12);
893 CSL_FINS(ckgenCmCoreReg->CM_DIV_H13_DPLL_PER_REG,
894 CKGEN_CM_CORE_CM_DIV_H13_DPLL_PER_REG_DIVHS, perPllcParam->divH13);
895 CSL_FINS(ckgenCmCoreReg->CM_DIV_H14_DPLL_PER_REG,
896 CKGEN_CM_CORE_CM_DIV_H14_DPLL_PER_REG_DIVHS, perPllcParam->divH14);
897 }