]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/performance-audio-sr.git/blob - pdk_k2g_1_0_1_0_eng/packages/ti/board/src/idkAM571x/idkAM571x_pll.c
Change pdk_k2g_1_0_1 directory name in preparation for updating RSTC plugin
[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)
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;
506 void CtrlLockMMR(void)
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;
523 void pllcMpuUnlock(void)
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);
533 void pllcMpuLock(void)
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);
543 void pllcMpuConfigure(pllcMpuParam *mpuPllcParam)
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);
558 void pllcIvaUnlock(void)
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);
568 void pllcIvaLock(void)
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);
578 void pllcIvaConfigure(pllcIvaParam *ivaPllcParam)
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);
591 void pllcCoreUnlock(void)
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);
601 void pllcCoreLock(void)
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);
611 void pllcCoreConfigure(pllcCoreParam *corePllcParam)
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);
642 void pllcAbeUnlock(void)
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);
652 void pllcAbeLock(void)
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);
662 void pllcAbeConfigure(pllcAbeParam *abePllcParam)
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);
677 void pllcDdrUnlock(void)
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);
687 void pllcDdrLock(void)
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);
697 void pllcDdrConfigure(pllcDdrParam *ddrPllcParam)
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);
714 void pllcDspUnlock(void)
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);
724 void pllcDspLock(void)
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);
734 void pllcDspConfigure(pllcDspParam *dspPllcParam)
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);
749 void pllcGmacUnlock(void)
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);
759 void pllcGmacLock(void)
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);
769 void pllcGmacConfigure(pllcGmacParam *gmacPllcParam)
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);
790 void pllcGpuUnlock(void)
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);
800 void pllcGpuLock(void)
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);
810 void pllcGpuConfigure(pllcGpuParam *gpuPllcParam)
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);
823 void pllcPcieUnlock(void)
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);
833 void pllcPcieLock(void)
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);
843 void pllcPcieConfigure(pllcPcieParam *pciePllcParam)
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);
856 void pllcPerUnlock(void)
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);
866 void pllcPerLock(void)
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);
876 void pllcPerConfigure(pllcPerParam *perPllcParam)
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);