@@ -21,6 +21,7 @@ LOG_MODULE_REGISTER(clock_control_bl60x, CONFIG_CLOCK_CONTROL_LOG_LEVEL);
21
21
#include <bouffalolab/bl60x/pds_reg.h>
22
22
#include <bouffalolab/bl60x/l1c_reg.h>
23
23
#include <bouffalolab/bl60x/extra_defines.h>
24
+ #include <zephyr/drivers/clock_control/clock_control_bflb_common.h>
24
25
25
26
#define CLK_SRC_IS (clk , src ) \
26
27
DT_SAME_NODE(DT_CLOCKS_CTLR_BY_IDX(DT_INST_CLOCKS_CTLR_BY_NAME(0, clk), 0), \
@@ -89,31 +90,6 @@ const static uint32_t clock_control_bl60x_crystal_SDMIN_table[5] = {
89
90
0x49D39D ,
90
91
};
91
92
92
- static inline void clock_control_bl60x_clock_settle (void )
93
- {
94
- __asm__ volatile (".rept 15 ; nop ; .endr" );
95
- }
96
-
97
- /* 32 Mhz Oscillator: 0
98
- * crystal: 1
99
- * PLL and 32M: 2
100
- * PLL and crystal: 3
101
- */
102
- static void clock_control_bl60x_set_root_clock (uint32_t clock )
103
- {
104
- uint32_t tmp ;
105
-
106
- /* invalid value, fallback to internal 32M */
107
- if (clock > 3 ) {
108
- clock = 0 ;
109
- }
110
- tmp = sys_read32 (HBN_BASE + HBN_GLB_OFFSET );
111
- tmp = (tmp & HBN_ROOT_CLK_SEL_UMSK ) | (clock << HBN_ROOT_CLK_SEL_POS );
112
- sys_write32 (tmp , HBN_BASE + HBN_GLB_OFFSET );
113
-
114
- clock_control_bl60x_clock_settle ();
115
- }
116
-
117
93
static uint32_t clock_control_bl60x_get_root_clock (void )
118
94
{
119
95
uint32_t tmp ;
@@ -132,7 +108,7 @@ static int clock_control_bl60x_deinit_crystal(void)
132
108
tmp = tmp & AON_PU_XTAL_BUF_AON_UMSK ;
133
109
sys_write32 (tmp , AON_BASE + AON_RF_TOP_AON_OFFSET );
134
110
135
- clock_control_bl60x_clock_settle ();
111
+ clock_bflb_settle ();
136
112
return 0 ;
137
113
}
138
114
@@ -149,12 +125,12 @@ static int clock_control_bl60x_init_crystal(void)
149
125
150
126
/* wait for crystal to be powered on */
151
127
do {
152
- clock_control_bl60x_clock_settle ();
128
+ clock_bflb_settle ();
153
129
tmp = sys_read32 (AON_BASE + AON_TSEN_OFFSET );
154
130
count -- ;
155
131
} while (!(tmp & AON_XTAL_RDY_MSK ) && count > 0 );
156
132
157
- clock_control_bl60x_clock_settle ();
133
+ clock_bflb_settle ();
158
134
if (count < 1 ) {
159
135
return -1 ;
160
136
}
@@ -171,7 +147,7 @@ static int clock_control_bl60x_set_root_clock_dividers(uint32_t hclk_div, uint32
171
147
172
148
/* security RC32M */
173
149
if (old_rootclk > 1 ) {
174
- clock_control_bl60x_set_root_clock (0 );
150
+ clock_bflb_set_root_clock (0 );
175
151
}
176
152
177
153
/* set dividers */
@@ -186,16 +162,16 @@ static int clock_control_bl60x_set_root_clock_dividers(uint32_t hclk_div, uint32
186
162
sys_write32 (0x00000001 , 0x40000FFC );
187
163
sys_write32 (0x00000000 , 0x40000FFC );
188
164
189
- clock_control_bl60x_clock_settle ();
165
+ clock_bflb_settle ();
190
166
191
167
/* enable clocks */
192
168
tmp = sys_read32 (GLB_BASE + GLB_CLK_CFG0_OFFSET );
193
169
tmp = (tmp & GLB_REG_BCLK_EN_UMSK ) | (1U << GLB_REG_BCLK_EN_POS );
194
170
tmp = (tmp & GLB_REG_HCLK_EN_UMSK ) | (1U << GLB_REG_HCLK_EN_POS );
195
171
sys_write32 (tmp , GLB_BASE + GLB_CLK_CFG0_OFFSET );
196
172
197
- clock_control_bl60x_set_root_clock (old_rootclk );
198
- clock_control_bl60x_clock_settle ();
173
+ clock_bflb_set_root_clock (old_rootclk );
174
+ clock_bflb_settle ();
199
175
200
176
return 0 ;
201
177
}
@@ -288,7 +264,7 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
288
264
289
265
/* security RC32M */
290
266
if (old_rootclk > 1 ) {
291
- clock_control_bl60x_set_root_clock (0 );
267
+ clock_bflb_set_root_clock (0 );
292
268
}
293
269
294
270
clock_control_bl60x_deinit_pll ();
@@ -356,7 +332,7 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
356
332
tmp = sys_read32 (PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
357
333
tmp = (tmp & PDS_PU_CLKPLL_SFREG_UMSK ) | (1U << PDS_PU_CLKPLL_SFREG_POS );
358
334
sys_write32 (tmp , PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
359
- clock_control_bl60x_clock_settle ();
335
+ clock_bflb_settle ();
360
336
361
337
/* enable PPL clock actual? */
362
338
tmp = sys_read32 (PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
@@ -371,7 +347,7 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
371
347
tmp = (tmp & PDS_CLKPLL_PU_POSTDIV_UMSK ) | (1U << PDS_CLKPLL_PU_POSTDIV_POS );
372
348
sys_write32 (tmp , PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
373
349
374
- clock_control_bl60x_clock_settle ();
350
+ clock_bflb_settle ();
375
351
376
352
/* reset couple things one by one? */
377
353
tmp = sys_read32 (PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
@@ -390,8 +366,8 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
390
366
tmp = (tmp & PDS_CLKPLL_SDM_RESET_UMSK ) | (0U << PDS_CLKPLL_SDM_RESET_POS );
391
367
sys_write32 (tmp , PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
392
368
393
- clock_control_bl60x_set_root_clock (old_rootclk );
394
- clock_control_bl60x_clock_settle ();
369
+ clock_bflb_set_root_clock (old_rootclk );
370
+ clock_bflb_settle ();
395
371
}
396
372
397
373
/*
@@ -439,7 +415,7 @@ static int clock_control_bl60x_clock_trim_32M(void)
439
415
tmp = (tmp & PDS_RC32M_CODE_FR_EXT_UMSK ) | trim << PDS_RC32M_CODE_FR_EXT_POS ;
440
416
sys_write32 (tmp , PDS_BASE + PDS_RC32M_CTRL0_OFFSET );
441
417
442
- clock_control_bl60x_clock_settle ();
418
+ clock_bflb_settle ();
443
419
444
420
return 0 ;
445
421
}
@@ -557,9 +533,9 @@ static void clock_control_bl60x_init_root_as_pll(const struct device *dev)
557
533
clock_control_bl60x_select_PLL (data -> root .pll_select );
558
534
559
535
if (data -> pll .source == bl60x_clkid_clk_crystal ) {
560
- clock_control_bl60x_set_root_clock (3 );
536
+ clock_bflb_set_root_clock (3 );
561
537
} else {
562
- clock_control_bl60x_set_root_clock (2 );
538
+ clock_bflb_set_root_clock (2 );
563
539
}
564
540
565
541
if (clock_control_bl60x_get_clk (dev ) > MHZ (120 )) {
@@ -572,7 +548,7 @@ static void clock_control_bl60x_init_root_as_pll(const struct device *dev)
572
548
573
549
static void clock_control_bl60x_init_root_as_crystal (const struct device * dev )
574
550
{
575
- clock_control_bl60x_set_root_clock (1 );
551
+ clock_bflb_set_root_clock (1 );
576
552
sys_write32 (clock_control_bl60x_get_clk (dev ), CORECLOCKREGISTER );
577
553
}
578
554
@@ -590,7 +566,7 @@ static int clock_control_bl60x_update_root(const struct device *dev)
590
566
sys_write32 (tmp , GLB_BASE + GLB_CLK_CFG0_OFFSET );
591
567
592
568
/* set root clock to internal 32MHz Oscillator as failsafe */
593
- clock_control_bl60x_set_root_clock (0 );
569
+ clock_bflb_set_root_clock (0 );
594
570
if (clock_control_bl60x_set_root_clock_dividers (0 , 0 ) != 0 ) {
595
571
return - EIO ;
596
572
}
@@ -627,7 +603,7 @@ static int clock_control_bl60x_update_root(const struct device *dev)
627
603
clock_control_bl60x_set_machine_timer_clock (
628
604
1 , 0 , clock_control_bl60x_mtimer_get_clk_src_div (dev ));
629
605
630
- clock_control_bl60x_clock_settle ();
606
+ clock_bflb_settle ();
631
607
632
608
return ret ;
633
609
}
0 commit comments