@@ -841,6 +841,54 @@ static void _imxrt_deinitSysPll1(void)
841
841
}
842
842
843
843
844
+ static void _imxrt_initSysPll1 (void )
845
+ {
846
+ _imxrt_pmuEnablePllLdo ();
847
+
848
+ _imxrt_setPllBypass (clk_pllsys1 , 1 );
849
+
850
+ /* Enable SYS_PLL1 clk output */
851
+ * (imxrt_common .anadig_pll + sys_pll1_ctrl ) |= (1uL << 13u );
852
+
853
+ /* Configure Fractional PLL: div, num, denom */
854
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ctrl0_set , 41u );
855
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_denom , 0x0fffffff );
856
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_num , 0x0aaaaaaa );
857
+ /* Disable SS */
858
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ss_clr , (1uL << 15 ));
859
+
860
+ /* Enable ldo */
861
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ctrl0_set , (1uL << 22u ));
862
+ _imxrt_delay (100u * 1000u );
863
+
864
+ /* POWERUP */
865
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ctrl0_set , (1uL << 14u ) | (1uL << 13u ));
866
+
867
+ /* assert HOLD_RING_OFF */
868
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ctrl0_set , (1uL << 13u ));
869
+ /* Wait until PLL lock time is halfway through */
870
+ /* Lock time is 11250 ref cycles */
871
+ _imxrt_delay (5625u );
872
+ /* de-assert HOLD_RING_OFF */
873
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ctrl0_clr , (1uL << 13u ));
874
+
875
+ /* Wait till PLL lock time is complete */
876
+ while ((* (imxrt_common .anadig_pll + sys_pll1_ctrl ) & (1uL << 29u )) != (1uL << 29u )) {
877
+ }
878
+
879
+ /* Enable PLL1 */
880
+ _imxrt_vddsoc2PllAiWrite (vddsoc2pll_ai_ctrl_1g , frac_pll_ctrl0_set , (1uL << 15u ));
881
+
882
+ /* Disable PLL gate */
883
+ * (imxrt_common .anadig_pll + sys_pll1_ctrl ) &= ~(1uL << 14u );
884
+
885
+ /* Enable PLL1_DIV2 output for ENET module */
886
+ * (imxrt_common .anadig_pll + sys_pll1_ctrl ) |= (1uL << 25 );
887
+
888
+ _imxrt_setPllBypass (clk_pllsys1 , 0 );
889
+ }
890
+
891
+
844
892
static void _imxrt_initClockTree (void )
845
893
{
846
894
unsigned n ;
@@ -1000,10 +1048,8 @@ static void _imxrt_initClocks(void)
1000
1048
/* imxrt_common.cpuclk = 696000000u; */
1001
1049
#endif
1002
1050
1003
- _imxrt_setPllBypass (clk_pllsys1 , 1 );
1004
-
1005
- /* Deinit 1Gig ethernet PLL */
1006
- _imxrt_deinitSysPll1 ();
1051
+ /* Initialize 1Gig ethernet PLL */
1052
+ _imxrt_initSysPll1 ();
1007
1053
1008
1054
/* TODO: Init PLL2 fixed 528 MHz */
1009
1055
/* _imxrt_initSysPll2(); */
0 commit comments